From 0b86f0390c17ca06758cc436596774e56687a875 Mon Sep 17 00:00:00 2001 From: Junjie <540245094@qq.com> Date: 星期二, 09 七月 2024 09:03:54 +0800 Subject: [PATCH] # --- zy-asrs-admin/src/views/IndexView.vue | 186 ++++++++++++++++++++++++++++++++++++---------- 1 files changed, 144 insertions(+), 42 deletions(-) diff --git a/zy-asrs-admin/src/views/IndexView.vue b/zy-asrs-admin/src/views/IndexView.vue index 73729c8..f2eebe0 100644 --- a/zy-asrs-admin/src/views/IndexView.vue +++ b/zy-asrs-admin/src/views/IndexView.vue @@ -1,5 +1,5 @@ <script setup> -import { nextTick, ref, inject } from 'vue'; +import { nextTick, ref, inject, onMounted } from 'vue'; import { useRouter } from "vue-router"; import { get, post, postForm } from '@/utils/request.js' import { logout } from '@/config.js'; @@ -13,6 +13,7 @@ RedoOutlined, UserOutlined, TranslationOutlined, + ApartmentOutlined, } from "@ant-design/icons-vue"; import { formatMessage } from '@/utils/localeUtils.js'; @@ -21,14 +22,37 @@ const collapsed = ref(false); const router = useRouter(); let routerCache = ref([]); -let routerCacheMap = ref(new Map()); +let routerCacheList = ref([]); let currentCache = ref(null); let isRouterAlive = ref(true); const menuCache = ref([]); +const hostList = ref([]); const components = { ...Icons, }; + +onMounted(() => { + let name = router.currentRoute.value.name; + let path = router.currentRoute.value.path; + if (currentCache.value == null && path != '/') { + get('/api/menu/get/route', { + route: path + }).then((resp) => { + let result = resp.data; + let data = result.data; + if (result.code == 200) { + currentCache.value = name; + routerCache.value.push(name) + routerCacheList.value.push({ + key: path, + languageId: data.languageId, + name: name, + }) + } + }) + } +}) getMenu() function getMenu() { @@ -38,26 +62,36 @@ } function menuSelect(item) { - console.log(item.key); router.push({ path: item.key }) let name = item.item.name; currentCache.value = name; - // console.log(routerCache.value); if (name != undefined && routerCache.value.indexOf(name) == -1) { routerCache.value.push(item.item.name) - routerCacheMap.value.set(name, item.key) + routerCacheList.value.push({ + key: item.key, + languageId: item.item.languageId, + name: item.item.name, + }) } } -function closeTabs(name) { +function closeTabs(param) { + let name = param.name; let tmp = [] + let tmpList = []; routerCache.value.forEach((item) => { if (item != name) { tmp.push(item); + } + }) + + routerCacheList.value.forEach((item) => { + if (item.name != name) { + tmpList.push(item); } }) @@ -66,12 +100,17 @@ path: '/' }) routerCache.value.push('home') - routerCacheMap.value.set('home', '/') + routerCacheList.value.push({ + key: '/', + languageId: 'common.home', + name: '涓婚〉', + }) selectedKeys.value = ['/'] } else { - switchTabs(tmp[0]); + switchTabs(tmpList[0]); } routerCache.value = tmp; + routerCacheList.value = tmpList; } function reloadTabs() { @@ -89,52 +128,97 @@ } } -function switchTabs(name) { +function closeAllTabs() { + routerCache.value = []; + routerCacheList.value = []; router.push({ - path: routerCacheMap.value.get(name) + path: '/' + }) +} + +function switchTabs(item) { + router.push({ + path: item.key }) - currentCache.value = name; - selectedKeys.value = [routerCacheMap.value.get(name)] - - // console.log(routerCacheMap, name, routerCacheMap.value.get(name)); - + currentCache.value = item.name; + selectedKeys.value = [item.key] } const switchLocale = (locale) => { globalState.locale = locale; localStorage.setItem('locale', locale) reloadTabs() - console.log(locale); +} + +getHostList() +function getHostList() { + post('/api/show/host.action', {}).then((resp) => { + let result = resp.data; + let data = result.data; + let hostId = data.hostId; + if (data.root) { + post('/api/host/list', {}).then((resp) => { + let result = resp.data; + let data = result.data; + hostList.value = data; + data.forEach((item) => { + if (item.id == hostId) { + globalState.currentHost = item; + } + }) + }) + } + }) +} + +const switchHost = (item) => { + globalState.currentHost = item; + postForm('/api/root/change/host/auth', { + hostId: item.id + }).then((resp) => { + let result = resp.data; + if (result.code == 200) { + window.location.reload(); + } else { + message.error(formatMessage('common.fail', '鍔犺浇澶辫触')); + } + }) +} + +const windowReload = () => { + window.location.reload(); } </script> <template> <a-layout class="main"> - <a-layout-sider v-model:collapsed="collapsed" :trigger="null" collapsible> + <a-layout-sider v-model:collapsed="collapsed" :trigger="null" collapsible theme="dark"> <div class="logo" /> - <a-menu v-for="(item, index) in menuCache" :key="index" v-model:selectedKeys="selectedKeys" @select="menuSelect" - theme="dark" mode="inline"> + <a-menu v-model:selectedKeys="selectedKeys" @select="menuSelect" theme="dark" mode="inline"> <div> <a-menu-item key="/" name="涓婚〉"> <HomeOutlined /> {{ formatMessage('common.home', '涓婚〉') }} </a-menu-item> </div> - <a-sub-menu v-if="item.type == 0"> - <template #title> - <span> - <component :is="components[ref(item.icon).value]" /> - {{ item.name }} - </span> - </template> - <div v-for="(child, idx) in item.children"> - <a-menu-item v-if="child.status == 1" :key="child.route" :name="child.name"> - {{ child.name }} - </a-menu-item> - </div> - </a-sub-menu> + <div v-for="(item, index) in menuCache" :key="index"> + <a-sub-menu :key="index" v-if="item.type == 0"> + <template #title> + <span> + <component :is="components[ref(item.icon).value]" /> + {{ formatMessage(item.languageId, item.name) }} + </span> + </template> + <div v-for="(child, idx) in item.children"> + <a-menu-item v-if="child.status == 1" :key="child.route" :name="child.name" + :languageId="child.languageId"> + {{ formatMessage(child.languageId, child.name) }} + </a-menu-item> + </div> + </a-sub-menu> + </div> </a-menu> </a-layout-sider> @@ -144,17 +228,35 @@ <div class="header-top-left"> <MenuUnfoldOutlined v-if="collapsed" class="trigger" @click="() => (collapsed = !collapsed)" /> <MenuFoldOutlined v-else class="trigger" @click="() => (collapsed = !collapsed)" /> + <RedoOutlined class="trigger" @click="windowReload()" /> </div> <div class="header-top-right"> - <div class="trigger"> + <div class="trigger" v-if="globalState.currentHost"> <a-dropdown> - <TranslationOutlined /> + <div> + <ApartmentOutlined /> + {{ globalState.currentHost?.name }} + </div> <template #overlay> <a-menu> - <a-menu-item @click="switchLocale('enUS')" - :class="globalState.locale == 'enUS' ? 'active' : ''">English</a-menu-item> - <a-menu-item @click="switchLocale('zhCN')" - :class="globalState.locale == 'zhCN' ? 'active' : ''">绠�浣撲腑鏂�</a-menu-item> + <a-menu-item v-for="(item, index) in hostList" :key="index" @click="switchHost(item)" + :class="globalState.currentHost?.id == item.id ? 'active' : ''">{{ item.name }}</a-menu-item> + </a-menu> + </template> + </a-dropdown> + </div> + <div class="trigger"> + <a-dropdown> + <div> + <TranslationOutlined /> + {{ globalState.localeList[globalState.locale]?.desc }} + </div> + <template #overlay> + <a-menu> + <div v-for="(item, key) in globalState.localeList" :key="key"> + <a-menu-item @click="switchLocale(key)" :class="globalState.locale == key ? 'active' : ''">{{ + item.desc }}</a-menu-item> + </div> </a-menu> </template> </a-dropdown> @@ -177,12 +279,12 @@ </a-layout-header> <a-layout-content class="content-view"> <div class="tabs-fixed"> - <div v-for="(item, index) in routerCache" :key="index" @click="switchTabs(item)" class="tabs-item" - :class="currentCache == item ? 'tabs-item-active' : ''"> - <div :class="currentCache == item ? '' : 'tabs-item-reload-none'" @click="reloadTabs" @click.stop> + <div v-for="(item, index) in routerCacheList" :key="index" @click="switchTabs(item)" class="tabs-item" + :class="currentCache == item.name ? 'tabs-item-active' : ''"> + <div :class="currentCache == item.name ? '' : 'tabs-item-reload-none'" @click="reloadTabs" @click.stop> <RedoOutlined /> </div> - <div>{{ item }}</div> + <div>{{ formatMessage(item.languageId, item.name) }}</div> <div @click="closeTabs(item)" @click.stop> <CloseOutlined /> </div> -- Gitblit v1.9.1