fix(微前端适配): 适配微前端,添加路由参数屏蔽头部和logo,关闭宽度小于1000隐藏侧边菜单的功能

This commit is contained in:
fhysy 2024-12-19 16:25:57 +08:00
parent e40b901205
commit 3475218827
19 changed files with 280 additions and 31 deletions

View File

@ -6,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="icon" href="/favicon.ico" />
<title>网关采集配置器</title>
<script src="./js/config.js"></script>
<script type="module" src="/js/config.js"></script>
</head>
<body>
<div id="app"></div>

View File

@ -24,6 +24,7 @@
"qs": "^6.11.1",
"screenfull": "^6.0.2",
"sortablejs": "^1.15.0",
"vite-plugin-qiankun": "^1.0.15",
"vue": "^3.2.47",
"vue-clipboard3": "^2.0.0",
"vue-demi": "^0.13.11",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 9.1 KiB

View File

@ -14,3 +14,5 @@ window.baseConfig = {
protocol: 'http://',
wsProtocol: 'ws://'
}
localStorage.setItem('baseConfig', JSON.stringify(window.baseConfig));

BIN
src/assets/logo-mini.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@ -16,10 +16,12 @@ import { useRoutesList } from '/@/stores/routesList';
import { useThemeConfig } from '/@/stores/themeConfig';
import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes';
import mittBus from '/@/utils/mitt';
import { useRoute } from 'vue-router';
//
const Logo = defineAsyncComponent(() => import('/@/layout/logo/index.vue'));
const Vertical = defineAsyncComponent(() => import('/@/layout/navMenu/vertical.vue'));
const route = useRoute();
//
const layoutAsideScrollbarRef = ref();
@ -69,6 +71,13 @@ const setCollapseStyle = computed(() => {
// / logo
const setShowLogo = computed(() => {
let { layout, isShowLogo } = themeConfig.value;
let hideHeader = JSON.parse(localStorage.getItem('hideHeader'));
if(hideHeader!==null){
isShowLogo = hideHeader?true:false;
}
if(route.query.hideHeader!=undefined){
isShowLogo = route.query.hideHeader!='true'?true:false;
}
return (isShowLogo && layout === 'defaults') || (isShowLogo && layout === 'columns');
});
//

View File

@ -26,16 +26,16 @@ const onLayoutResize = () => {
if (!Local.get('oldLayout')) Local.set('oldLayout', themeConfig.value.layout);
const clientWidth = document.body.clientWidth;
if (clientWidth < 1000) {
themeConfig.value.isCollapse = false;
mittBus.emit('layoutMobileResize', {
layout: 'defaults',
clientWidth,
});
// themeConfig.value.isCollapse = false;
// mittBus.emit('layoutMobileResize', {
// layout: 'defaults',
// clientWidth,
// });
} else {
mittBus.emit('layoutMobileResize', {
layout: Local.get('oldLayout') ? Local.get('oldLayout') : themeConfig.value.layout,
clientWidth,
});
// mittBus.emit('layoutMobileResize', {
// layout: Local.get('oldLayout') ? Local.get('oldLayout') : themeConfig.value.layout,
// clientWidth,
// });
}
};
//

View File

@ -12,7 +12,7 @@
import { computed } from 'vue';
import { storeToRefs } from 'pinia';
import { useThemeConfig } from '/@/stores/themeConfig';
import logoMini from '/@/assets/logo-mini.svg';
import logoMini from '/@/assets/logo-mini.png';
//
const storesThemeConfig = useThemeConfig();
@ -52,8 +52,9 @@ const onThemeConfigChange = () => {
}
}
&-medium-img {
width: 20px;
width: 35px;
margin-right: 5px;
height: 35px;
}
}
.layout-logo-size {

View File

@ -11,7 +11,7 @@
</template>
<script setup name="layoutDefaults">
import { defineAsyncComponent, watch, onMounted, nextTick, ref } from 'vue';
import { defineAsyncComponent, watch, onMounted, nextTick, ref, getCurrentInstance } from 'vue';
import { useRoute } from 'vue-router';
import { storeToRefs } from 'pinia';
import { useThemeConfig } from '/@/stores/themeConfig';
@ -49,9 +49,12 @@ const initScrollBarHeight = () => {
};
//
onMounted(() => {
console.log("route",route)
initScrollBarHeight();
NextLoading.done(600);
let hideHeader = JSON.parse(localStorage.getItem('hideHeader'));
if(hideHeader!==null){
isShowHeader.value = hideHeader?false:true;
}
});
//
watch(
@ -65,8 +68,10 @@ watch(
watch(
() => route.query,
(newQuery) => {
// hideHeader=true
isShowHeader.value = newQuery.hideHeader !== 'true';
// hideHeader=true
if(newQuery.hideHeader!=undefined){
isShowHeader.value = newQuery.hideHeader!='true'?true:false;
}
},
{ immediate: true }
);

View File

@ -7,10 +7,76 @@ import other from '/@/utils/other';
import ElementPlus from 'element-plus';
import '/@/theme/index.scss';
import { renderWithQiankun, qiankunWindow } from 'vite-plugin-qiankun/dist/helper';
const app = createApp(App);
// const app = createApp(App);
directive(app);
other.elSvg(app);
let app;
if (!qiankunWindow.__POWERED_BY_QIANKUN__) {
app = createApp(App);
directive(app);
other.elSvg(app);
app.use(pinia).use(router).use(ElementPlus).mount('#app');
} else {
renderWithQiankun({
// 子应用挂载
mount(props) {
console.log("props",props.hideHeader)
app = createApp(App);
directive(app);
other.elSvg(app);
app.use(pinia).use(router).use(ElementPlus).mount(props.container.querySelector('#app'));
app.use(pinia).use(router).use(ElementPlus).mount('#app');
if(props.hideHeader!==undefined){
console.log("1111")
localStorage.setItem('hideHeader', props.hideHeader);
}
},
// 只有子应用第一次加载会触发
bootstrap() {
console.log('vue app bootstrap');
},
// 更新
update() {
console.log('vue app update');
},
// 卸载
unmount() {
console.log('vue app unmount');
app?.unmount();
}
});
}
// let app;
// if (!qiankunWindow.__POWERED_BY_QIANKUN__) {
// createApp(App).use(pinia).use(router).use(ElementPlus).mount('#app');
// } else {
// renderWithQiankun({
// // 子应用挂载
// mount(props) {
// app = createApp(App);
// directive(app);
// other.elSvg(app);
// app.use(pinia).use(router).use(ElementPlus).mount(props.container.querySelector('#app'));
// },
// // 只有子应用第一次加载会触发
// bootstrap() {
// console.log('vue app bootstrap');
// },
// // 更新
// update() {
// console.log('vue app update');
// },
// // 卸载
// unmount() {
// console.log('vue app unmount');
// app?.unmount();
// }
// });
// }
// directive(app);
// other.elSvg(app);
// app.use(pinia).use(router).use(ElementPlus).mount('#app');

View File

@ -31,7 +31,7 @@ const { isRequestRoutes } = themeConfig.value;
* @link 参考https://next.router.vuejs.org/zh/api/#createrouter
*/
export const router = createRouter({
history: createWebHistory(),
history: createWebHistory(import.meta.env.BASE_URL),
/**
* 说明
* 1notFoundAndNoPower 默认添加 404401 界面防止一直提示 No match found for location with path 'xxx'

View File

@ -78,7 +78,7 @@ export const useThemeConfig = defineStore('themeConfig', {
* 界面显示
*/
// 是否开启侧边栏 Logo
isShowLogo: false,
isShowLogo: true,
// 初始化变量,用于 el-scrollbar 的高度更新,请勿删除
isShowLogoChange: false,
// 是否开启 Breadcrumb强制经典、横向布局不显示

View File

@ -3,9 +3,15 @@ import { ElMessage, ElMessageBox } from 'element-plus';
import qs from 'qs';
import { Session } from '/@/utils/storage';
let config = null;
if(window.baseConfig){
config = window.baseConfig;
}else{
config = JSON.parse(localStorage.getItem('baseConfig'));
}
// 配置新建一个 axios 实例
const service = axios.create({
baseURL: `${window.baseConfig.protocol}${window.baseConfig.ip}${window.baseConfig.port ? ':'+window.baseConfig.port : ''}${window.baseConfig.prodApi ? window.baseConfig.prodApi : ''}`,
baseURL: `${config.protocol}${config.ip}${config.port ? ':'+config.port : ''}${config.prodApi ? config.prodApi : ''}`,
timeout: 50000,
headers: { 'Content-Type': 'application/json' },
paramsSerializer: {

View File

@ -1,5 +1,5 @@
// 字体图标 url
const cssCdnUrlList = ['//at.alicdn.com/t/c/font_2298093_rnp72ifj3ba.css', '//netdna.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css'];
const cssCdnUrlList = ['//at.alicdn.com/t/c/font_2298093_rnp72ifj3ba.css', '//cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css'];
// 第三方 js url
const jsCdnUrlList = [];

View File

@ -361,7 +361,6 @@ const delDeviceConfig = (index) => {
};
const getDeviceConfig = () => {
console.log('获取配置');
getPlatformConf({})
.then((response) => {
//

View File

@ -481,7 +481,6 @@ const delDeviceConfig = (index) => {
};
const getDeviceConfig = () => {
console.log('获取配置');
getDeviceConf({})
.then((response) => {
//

View File

@ -47,7 +47,7 @@ import { defineAsyncComponent, onMounted, reactive, computed } from 'vue';
import { storeToRefs } from 'pinia';
import { useThemeConfig } from '/@/stores/themeConfig';
import { NextLoading } from '/@/utils/loading';
import logoMini from '/@/assets/logo-mini.svg';
import logoMini from '/@/assets/logo-mini.png';
import loginMain from '/@/assets/login-main.svg';
import loginBg from '/@/assets/login-bg.svg';

View File

@ -4,6 +4,7 @@ import { defineConfig, loadEnv } from 'vite';
import vueSetupExtend from 'vite-plugin-vue-setup-extend-plus';
import viteCompression from 'vite-plugin-compression';
import { buildConfig } from './src/utils/build';
import qiankun from 'vite-plugin-qiankun';
const pathResolve = (dir) => {
return resolve(__dirname, '.', dir);
@ -16,16 +17,20 @@ const alias = {
const viteConfig = defineConfig((mode) => {
const env = loadEnv(mode.mode, process.cwd());
return {
plugins: [vue(), vueSetupExtend(), viteCompression(), JSON.parse(env.VITE_OPEN_CDN) ? buildConfig.cdn() : null],
plugins: [vue(), vueSetupExtend(), viteCompression(), JSON.parse(env.VITE_OPEN_CDN) ? buildConfig.cdn() : null,qiankun('gy-gateway', { // 配置qiankun插件
useDevMode: true
})],
root: process.cwd(),
resolve: { alias },
base: mode.command === 'serve' ? './' : env.VITE_PUBLIC_PATH,
base: mode.command === 'serve' ? '/gy-gateway' : '/gy-gateway',
optimizeDeps: {
exclude: ['vue-demi'],
},
server: {
host: '0.0.0.0',
port: env.VITE_PORT,
cors: true,
origin: 'http://localhost:4466',
open: JSON.parse(env.VITE_OPEN),
hmr: true,
proxy: {

158
yarn.lock
View File

@ -597,6 +597,35 @@ chalk@^4.0.0, chalk@^4.1.2:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
cheerio-select@^2.1.0:
version "2.1.0"
resolved "https://registry.npmmirror.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4"
integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==
dependencies:
boolbase "^1.0.0"
css-select "^5.1.0"
css-what "^6.1.0"
domelementtype "^2.3.0"
domhandler "^5.0.3"
domutils "^3.0.1"
cheerio@^1.0.0-rc.10:
version "1.0.0"
resolved "https://registry.npmmirror.com/cheerio/-/cheerio-1.0.0.tgz#1ede4895a82f26e8af71009f961a9b8cb60d6a81"
integrity sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==
dependencies:
cheerio-select "^2.1.0"
dom-serializer "^2.0.0"
domhandler "^5.0.3"
domutils "^3.1.0"
encoding-sniffer "^0.2.0"
htmlparser2 "^9.1.0"
parse5 "^7.1.2"
parse5-htmlparser2-tree-adapter "^7.0.0"
parse5-parser-stream "^7.1.2"
undici "^6.19.5"
whatwg-mimetype "^4.0.0"
"chokidar@>=3.0.0 <4.0.0":
version "3.5.3"
resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz"
@ -664,6 +693,22 @@ cross-spawn@^7.0.2:
shebang-command "^2.0.0"
which "^2.0.1"
css-select@^5.1.0:
version "5.1.0"
resolved "https://registry.npmmirror.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6"
integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==
dependencies:
boolbase "^1.0.0"
css-what "^6.1.0"
domhandler "^5.0.2"
domutils "^3.0.1"
nth-check "^2.0.1"
css-what@^6.1.0:
version "6.1.0"
resolved "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
cssesc@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz"
@ -708,6 +753,36 @@ doctrine@^3.0.0:
dependencies:
esutils "^2.0.2"
dom-serializer@^2.0.0:
version "2.0.0"
resolved "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53"
integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==
dependencies:
domelementtype "^2.3.0"
domhandler "^5.0.2"
entities "^4.2.0"
domelementtype@^2.3.0:
version "2.3.0"
resolved "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
domhandler@^5.0.2, domhandler@^5.0.3:
version "5.0.3"
resolved "https://registry.npmmirror.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31"
integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==
dependencies:
domelementtype "^2.3.0"
domutils@^3.0.1, domutils@^3.1.0:
version "3.1.0"
resolved "https://registry.npmmirror.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e"
integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==
dependencies:
dom-serializer "^2.0.0"
domelementtype "^2.3.0"
domhandler "^5.0.3"
echarts@^5.4.2:
version "5.4.2"
resolved "https://registry.npmjs.org/echarts/-/echarts-5.4.2.tgz"
@ -737,6 +812,19 @@ element-plus@^2.9.0:
memoize-one "^6.0.0"
normalize-wheel-es "^1.2.0"
encoding-sniffer@^0.2.0:
version "0.2.0"
resolved "https://registry.npmmirror.com/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz#799569d66d443babe82af18c9f403498365ef1d5"
integrity sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==
dependencies:
iconv-lite "^0.6.3"
whatwg-encoding "^3.1.1"
entities@^4.2.0, entities@^4.5.0:
version "4.5.0"
resolved "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
esbuild@^0.17.5:
version "0.17.16"
resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.17.16.tgz"
@ -1099,6 +1187,23 @@ has@^1.0.3:
dependencies:
function-bind "^1.1.1"
htmlparser2@^9.1.0:
version "9.1.0"
resolved "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-9.1.0.tgz#cdb498d8a75a51f739b61d3f718136c369bc8c23"
integrity sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==
dependencies:
domelementtype "^2.3.0"
domhandler "^5.0.3"
domutils "^3.1.0"
entities "^4.5.0"
iconv-lite@0.6.3, iconv-lite@^0.6.3:
version "0.6.3"
resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
dependencies:
safer-buffer ">= 2.1.2 < 3.0.0"
ignore@^5.2.0:
version "5.2.4"
resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz"
@ -1404,6 +1509,28 @@ parent-module@^1.0.0:
dependencies:
callsites "^3.0.0"
parse5-htmlparser2-tree-adapter@^7.0.0:
version "7.1.0"
resolved "https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz#b5a806548ed893a43e24ccb42fbb78069311e81b"
integrity sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==
dependencies:
domhandler "^5.0.3"
parse5 "^7.0.0"
parse5-parser-stream@^7.1.2:
version "7.1.2"
resolved "https://registry.npmmirror.com/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz#d7c20eadc37968d272e2c02660fff92dd27e60e1"
integrity sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==
dependencies:
parse5 "^7.0.0"
parse5@^7.0.0, parse5@^7.1.2:
version "7.2.1"
resolved "https://registry.npmmirror.com/parse5/-/parse5-7.2.1.tgz#8928f55915e6125f430cc44309765bf17556a33a"
integrity sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==
dependencies:
entities "^4.5.0"
path-exists@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz"
@ -1553,6 +1680,11 @@ run-parallel@^1.1.9:
dependencies:
queue-microtask "^1.2.2"
"safer-buffer@>= 2.1.2 < 3.0.0":
version "2.1.2"
resolved "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
sass@^1.62.0:
version "1.62.0"
resolved "https://registry.npmjs.org/sass/-/sass-1.62.0.tgz"
@ -1695,6 +1827,11 @@ type-fest@^0.20.2:
resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz"
integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
undici@^6.19.5:
version "6.21.0"
resolved "https://registry.npmmirror.com/undici/-/undici-6.21.0.tgz#4b3d3afaef984e07b48e7620c34ed8a285ed4cd4"
integrity sha512-BUgJXc752Kou3oOIuU1i+yZZypyZRqNPW0vqoMPl8VaoalSfeR0D8/t4iAS3yirs79SSMTxTag+ZC86uswv+Cw==
universalify@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz"
@ -1728,6 +1865,13 @@ vite-plugin-compression@^0.5.1:
debug "^4.3.3"
fs-extra "^10.0.0"
vite-plugin-qiankun@^1.0.15:
version "1.0.15"
resolved "https://registry.npmmirror.com/vite-plugin-qiankun/-/vite-plugin-qiankun-1.0.15.tgz#862bb6935c50db31536cf322e13f3bf59e1adace"
integrity sha512-0QB0Wr8Eu/LGcuJAfuNXDb7BAFDszo3GCxq4bzgXdSFAlK425u1/UGMxaDEBVA1uPFrLsZPzig83Ufdfl6J45A==
dependencies:
cheerio "^1.0.0-rc.10"
vite-plugin-vue-setup-extend-plus@^0.1.0:
version "0.1.0"
resolved "https://registry.npmjs.org/vite-plugin-vue-setup-extend-plus/-/vite-plugin-vue-setup-extend-plus-0.1.0.tgz"
@ -1790,7 +1934,7 @@ vue-eslint-parser@^9.0.1, vue-eslint-parser@^9.1.1:
vue "^3.2.47"
vue-clipboard3 "^2.0.0"
vue-demi "^0.13.11"
vue-next-admin-template-js "file:C:/Users/Administrator/AppData/Local/Yarn/Cache/v6/npm-vue-next-admin-template-js-2.4.33-011778b8-7ab9-4593-988c-c7383c933ad9-1734079258926/node_modules/vue-next-admin-template-js"
vue-next-admin-template-js "file:C:/Users/Administrator/AppData/Local/Yarn/Cache/v6/npm-vue-next-admin-template-js-2.4.33-8ec8791a-74be-4d31-8079-f4b86c63ede4-1734080848678/node_modules/vue-next-admin-template-js"
vue-router "^4.1.6"
xlsx "^0.18.5"
@ -1812,6 +1956,18 @@ vue@^3.2.47:
"@vue/server-renderer" "3.2.47"
"@vue/shared" "3.2.47"
whatwg-encoding@^3.1.1:
version "3.1.1"
resolved "https://registry.npmmirror.com/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz#d0f4ef769905d426e1688f3e34381a99b60b76e5"
integrity sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==
dependencies:
iconv-lite "0.6.3"
whatwg-mimetype@^4.0.0:
version "4.0.0"
resolved "https://registry.npmmirror.com/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz#bc1bf94a985dc50388d54a9258ac405c3ca2fc0a"
integrity sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==
which@^2.0.1:
version "2.0.2"
resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz"