index.vue 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. <script>
  2. import { useRoutesStore } from '@/store/modules/routes'
  3. import { useUserStore } from '@/store/modules/user'
  4. import { translate } from '@/i18n'
  5. import { isExternal } from '@/utils/validate'
  6. import { openFirstMenu } from '@/config'
  7. import { clearStorage } from './api/index'
  8. import { ElMessage } from 'element-plus'
  9. export default defineComponent({
  10. props: {
  11. layout: {
  12. type: String,
  13. default: '',
  14. },
  15. },
  16. setup() {
  17. const state = reactive({
  18. factoryRef: null,
  19. factory: {},
  20. type: 0, //4驻场
  21. })
  22. //获取初始数据
  23. const _init = () => {
  24. const factory = JSON.parse(localStorage.getItem('factory'))
  25. state.factory = factory && factory !== 'undefined' ? factory : ''
  26. }
  27. const router = useRouter()
  28. const routesStore = useRoutesStore()
  29. const {
  30. getTab: tab,
  31. getTabMenu: tabMenu,
  32. getRoutes: routes,
  33. } = storeToRefs(routesStore)
  34. const handleTabClick = () => {
  35. nextTick(() => {
  36. if (isExternal(tabMenu.value.path)) {
  37. window.open(tabMenu.value.path)
  38. setTimeout(() => {
  39. router.push('/')
  40. }, 1000)
  41. } else if (openFirstMenu)
  42. router.push(tabMenu.value.redirect || tabMenu.value)
  43. })
  44. }
  45. //清除缓存
  46. const doClear = async () => {
  47. await clearStorage()
  48. ElMessage.success('清除成功')
  49. localStorage.removeItem('dictsSetting')
  50. localStorage.removeItem('factory')
  51. localStorage.removeItem('factory_list')
  52. setTimeout(() => {
  53. location.reload()
  54. }, 1000)
  55. }
  56. // 使用文档
  57. const doDocument = async () => {
  58. window.open('http://docs.site.ximengnaikang.com/web/#/51', '_blank')
  59. }
  60. //切换工厂
  61. const changeFactory = () => {
  62. state['factoryRef'].showEdit()
  63. }
  64. onMounted(() => {
  65. const userStore = useUserStore()
  66. const { type } = storeToRefs(userStore)
  67. console.log(type, '00000')
  68. state.type = type
  69. if (state.type == 4) {
  70. _init()
  71. }
  72. })
  73. return {
  74. ...toRefs(state),
  75. changeFactory,
  76. doClear,
  77. doDocument,
  78. handleTabClick,
  79. _init,
  80. }
  81. },
  82. })
  83. </script>
  84. <template>
  85. <div class="vab-nav">
  86. <el-row :gutter="15">
  87. <el-col :lg="12" :md="12" :sm="12" :xl="12" :xs="4">
  88. <div class="left-panel">
  89. <vab-fold v-if="layout !== 'float'" />
  90. <el-tabs
  91. v-if="layout === 'comprehensive'"
  92. v-model="tab.data"
  93. tab-position="top"
  94. @tab-click="handleTabClick"
  95. >
  96. <template v-for="(item, index) in routes" :key="index + item.name">
  97. <el-tab-pane :name="item.name">
  98. <template #label>
  99. <vab-icon
  100. v-if="item.meta.icon"
  101. :icon="item.meta.icon"
  102. :is-custom-svg="item.meta.isCustomSvg"
  103. style="min-width: 16px"
  104. />
  105. <span>{{ translate(item.meta.title) }}</span>
  106. </template>
  107. </el-tab-pane>
  108. </template>
  109. </el-tabs>
  110. <vab-breadcrumb v-else class="hidden-xs-only" />
  111. </div>
  112. </el-col>
  113. <el-col :lg="12" :md="12" :sm="12" :xl="12" :xs="20">
  114. <CheckFactory ref="factoryRef" />
  115. <div class="right-panel">
  116. <el-button
  117. v-if="type == 4"
  118. style="color: red"
  119. type="text"
  120. @click="changeFactory"
  121. >
  122. {{ factory.name }}
  123. <el-icon><CaretBottom /></el-icon>
  124. </el-button>
  125. <!-- <el-button type="text" @click="doClear">清除缓存</el-button> -->
  126. <el-button type="text" @click="doDocument">使用文档</el-button>
  127. <!-- <vab-error-log /> -->
  128. <vab-lock />
  129. <!-- <vab-search /> -->
  130. <!-- <vab-notice /> -->
  131. <vab-full-screen />
  132. <!-- <vab-language /> -->
  133. <!-- <vab-theme /> -->
  134. <vab-refresh />
  135. <vab-avatar />
  136. </div>
  137. </el-col>
  138. </el-row>
  139. </div>
  140. </template>
  141. <style lang="scss" scoped>
  142. .vab-nav {
  143. position: relative;
  144. height: $base-nav-height;
  145. padding-right: $base-padding;
  146. padding-left: $base-padding;
  147. overflow: hidden;
  148. user-select: none;
  149. background: var(--el-color-white);
  150. box-shadow: $base-box-shadow;
  151. .left-panel {
  152. display: flex;
  153. align-items: center;
  154. justify-items: center;
  155. height: $base-nav-height;
  156. :deep() {
  157. .fold-unfold {
  158. margin-right: $base-margin;
  159. }
  160. .el-tabs {
  161. width: 100%;
  162. margin-left: $base-margin;
  163. .el-tabs__header {
  164. margin: 0;
  165. > .el-tabs__nav-wrap {
  166. display: flex;
  167. align-items: center;
  168. .el-icon-arrow-left,
  169. .el-icon-arrow-right {
  170. font-weight: 600;
  171. color: var(--el-color-grey);
  172. }
  173. .el-tabs__item {
  174. i {
  175. margin-right: 3px;
  176. }
  177. }
  178. }
  179. }
  180. }
  181. .el-tabs__nav-wrap::after {
  182. display: none;
  183. }
  184. }
  185. }
  186. .right-panel {
  187. display: flex;
  188. align-content: center;
  189. align-items: center;
  190. justify-content: flex-end;
  191. height: $base-nav-height;
  192. :deep() {
  193. [class*='ri-'] {
  194. margin-left: $base-margin;
  195. color: var(--el-color-grey);
  196. cursor: pointer;
  197. }
  198. button {
  199. [class*='ri-'] {
  200. margin-left: 0;
  201. color: var(--el-color-white);
  202. cursor: pointer;
  203. }
  204. }
  205. }
  206. }
  207. }
  208. </style>