index.vue 5.7 KB

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