index.vue 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  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 changeFactory = () => {
  58. state['factoryRef'].showEdit()
  59. }
  60. onMounted(() => {
  61. const userStore = useUserStore()
  62. const { type } = storeToRefs(userStore)
  63. console.log(type, '00000')
  64. state.type = type
  65. if (state.type == 4) {
  66. _init()
  67. }
  68. })
  69. return {
  70. ...toRefs(state),
  71. changeFactory,
  72. doClear,
  73. handleTabClick,
  74. _init,
  75. }
  76. },
  77. })
  78. </script>
  79. <template>
  80. <div class="vab-nav">
  81. <el-row :gutter="15">
  82. <el-col :lg="12" :md="12" :sm="12" :xl="12" :xs="4">
  83. <div class="left-panel">
  84. <vab-fold v-if="layout !== 'float'" />
  85. <el-tabs
  86. v-if="layout === 'comprehensive'"
  87. v-model="tab.data"
  88. tab-position="top"
  89. @tab-click="handleTabClick"
  90. >
  91. <template v-for="(item, index) in routes" :key="index + item.name">
  92. <el-tab-pane :name="item.name">
  93. <template #label>
  94. <vab-icon
  95. v-if="item.meta.icon"
  96. :icon="item.meta.icon"
  97. :is-custom-svg="item.meta.isCustomSvg"
  98. style="min-width: 16px"
  99. />
  100. <span>{{ translate(item.meta.title) }}</span>
  101. </template>
  102. </el-tab-pane>
  103. </template>
  104. </el-tabs>
  105. <vab-breadcrumb v-else class="hidden-xs-only" />
  106. </div>
  107. </el-col>
  108. <el-col :lg="12" :md="12" :sm="12" :xl="12" :xs="20">
  109. <CheckFactory ref="factoryRef" />
  110. <div class="right-panel">
  111. <el-button
  112. v-if="type == 4"
  113. style="color: red"
  114. type="text"
  115. @click="changeFactory"
  116. >
  117. {{ factory.name }}
  118. <el-icon><CaretBottom /></el-icon>
  119. </el-button>
  120. <el-button type="text" @click="doClear">清除缓存</el-button>
  121. <!-- <vab-error-log /> -->
  122. <vab-lock />
  123. <!-- <vab-search /> -->
  124. <!-- <vab-notice /> -->
  125. <vab-full-screen />
  126. <!-- <vab-language /> -->
  127. <!-- <vab-theme /> -->
  128. <vab-refresh />
  129. <vab-avatar />
  130. </div>
  131. </el-col>
  132. </el-row>
  133. </div>
  134. </template>
  135. <style lang="scss" scoped>
  136. .vab-nav {
  137. position: relative;
  138. height: $base-nav-height;
  139. padding-right: $base-padding;
  140. padding-left: $base-padding;
  141. overflow: hidden;
  142. user-select: none;
  143. background: var(--el-color-white);
  144. box-shadow: $base-box-shadow;
  145. .left-panel {
  146. display: flex;
  147. align-items: center;
  148. justify-items: center;
  149. height: $base-nav-height;
  150. :deep() {
  151. .fold-unfold {
  152. margin-right: $base-margin;
  153. }
  154. .el-tabs {
  155. width: 100%;
  156. margin-left: $base-margin;
  157. .el-tabs__header {
  158. margin: 0;
  159. > .el-tabs__nav-wrap {
  160. display: flex;
  161. align-items: center;
  162. .el-icon-arrow-left,
  163. .el-icon-arrow-right {
  164. font-weight: 600;
  165. color: var(--el-color-grey);
  166. }
  167. .el-tabs__item {
  168. i {
  169. margin-right: 3px;
  170. }
  171. }
  172. }
  173. }
  174. }
  175. .el-tabs__nav-wrap::after {
  176. display: none;
  177. }
  178. }
  179. }
  180. .right-panel {
  181. display: flex;
  182. align-content: center;
  183. align-items: center;
  184. justify-content: flex-end;
  185. height: $base-nav-height;
  186. :deep() {
  187. [class*='ri-'] {
  188. margin-left: $base-margin;
  189. color: var(--el-color-grey);
  190. cursor: pointer;
  191. }
  192. button {
  193. [class*='ri-'] {
  194. margin-left: 0;
  195. color: var(--el-color-white);
  196. cursor: pointer;
  197. }
  198. }
  199. }
  200. }
  201. }
  202. </style>