diff --git a/.env b/.env
index 35a66ad..33b21b7 100644
--- a/.env
+++ b/.env
@@ -1 +1 @@
-VITE_BASE_URI=/admin3
+VITE_BASE_URI=/search_tool
\ No newline at end of file
diff --git a/components.d.ts b/components.d.ts
index 099d061..bdab159 100644
--- a/components.d.ts
+++ b/components.d.ts
@@ -9,6 +9,7 @@ declare module '@vue/runtime-core' {
export interface GlobalComponents {
AppIcon: typeof import('./src/components/AppIcon.vue')['default']
AvatarUpload: typeof import('./src/components/AvatarUpload.vue')['default']
+ DialogModel: typeof import('./src/components/DialogModel.vue')['default']
ElAlert: typeof import('element-plus/es')['ElAlert']
ElAvatar: typeof import('element-plus/es')['ElAvatar']
ElButton: typeof import('element-plus/es')['ElButton']
@@ -17,6 +18,7 @@ declare module '@vue/runtime-core' {
ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
ElCol: typeof import('element-plus/es')['ElCol']
+ ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
ElDialog: typeof import('element-plus/es')['ElDialog']
ElDivider: typeof import('element-plus/es')['ElDivider']
ElDropdown: typeof import('element-plus/es')['ElDropdown']
diff --git a/package-lock.json b/package-lock.json
index 3c25987..768eced 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -22,9 +22,11 @@
"xlsx": "^0.18.5"
},
"devDependencies": {
+ "@types/node": "^22.14.1",
"@vitejs/plugin-vue": "^3.0.0",
"@vue/compiler-sfc": "^3.1.2",
"sass": "^1.49.7",
+ "sass-loader": "^16.0.5",
"typescript": "^4.6.4",
"unplugin-auto-import": "^0.11.5",
"unplugin-vue-components": "^0.22.12",
@@ -249,6 +251,16 @@
"integrity": "sha512-jMN2moJ+lSf1VZXQo3VXeMCjoXuciVONig8+U0YNBop5aBvQw4qkolx1Nzn1i0T8L2l9IZ3jju6bS1pPwlaY1w==",
"license": "MIT"
},
+ "node_modules/@types/node": {
+ "version": "22.14.1",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/@types/node/-/node-22.14.1.tgz",
+ "integrity": "sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.21.0"
+ }
+ },
"node_modules/@types/web-bluetooth": {
"version": "0.0.15",
"resolved": "https://repo.huaweicloud.com/repository/npm/@types/web-bluetooth/-/web-bluetooth-0.0.15.tgz",
@@ -1506,6 +1518,13 @@
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
@@ -1744,6 +1763,47 @@
"node": ">=14.0.0"
}
},
+ "node_modules/sass-loader": {
+ "version": "16.0.5",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/sass-loader/-/sass-loader-16.0.5.tgz",
+ "integrity": "sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "neo-async": "^2.6.2"
+ },
+ "engines": {
+ "node": ">= 18.12.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "@rspack/core": "0.x || 1.x",
+ "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0",
+ "sass": "^1.3.0",
+ "sass-embedded": "*",
+ "webpack": "^5.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@rspack/core": {
+ "optional": true
+ },
+ "node-sass": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "webpack": {
+ "optional": true
+ }
+ }
+ },
"node_modules/schart.js": {
"version": "3.0.4",
"resolved": "https://repo.huaweicloud.com/repository/npm/schart.js/-/schart.js-3.0.4.tgz",
@@ -1860,6 +1920,13 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/undici-types": {
+ "version": "6.21.0",
+ "resolved": "https://repo.huaweicloud.com/repository/npm/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/unimport": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/unimport/-/unimport-1.3.0.tgz",
diff --git a/package.json b/package.json
index 3c8d16a..1bc779b 100644
--- a/package.json
+++ b/package.json
@@ -22,9 +22,11 @@
"xlsx": "^0.18.5"
},
"devDependencies": {
- "sass": "^1.49.7",
+ "@types/node": "^22.14.1",
"@vitejs/plugin-vue": "^3.0.0",
"@vue/compiler-sfc": "^3.1.2",
+ "sass": "^1.49.7",
+ "sass-loader": "^16.0.5",
"typescript": "^4.6.4",
"unplugin-auto-import": "^0.11.5",
"unplugin-vue-components": "^0.22.12",
diff --git a/shims-vue.d.ts b/shims-vue.d.ts
new file mode 100644
index 0000000..d3e7014
--- /dev/null
+++ b/shims-vue.d.ts
@@ -0,0 +1,12 @@
+declare module '*.vue' {
+ import { DefineComponent } from 'vue'
+ const component: DefineComponent<{}, {}, any>
+ export default component
+}
+
+// 添加对 @/views 的路径支持(可选)
+declare module '@/views/*' {
+ import { DefineComponent } from 'vue'
+ const component: DefineComponent<{}, {}, any>
+ export default component
+}
diff --git a/src/api/login.ts b/src/api/login.ts
index bd8eb07..d5b63ba 100644
--- a/src/api/login.ts
+++ b/src/api/login.ts
@@ -1,17 +1,17 @@
-import request from '../utils/request';
-import {BASE_URI} from "./base";
+import request from '../utils/request'
+import { BASE_URI } from './base'
export function login(data: { username: string; password: string }) {
return request({
url: `${BASE_URI}/login`,
method: 'post',
- data: data
- });
+ data: data,
+ })
}
export function logout() {
return request({
url: `${BASE_URI}/logout`,
method: 'post',
- });
+ })
}
diff --git a/src/components/DialogModel.vue b/src/components/DialogModel.vue
new file mode 100644
index 0000000..17a769f
--- /dev/null
+++ b/src/components/DialogModel.vue
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/sidebar.vue b/src/components/sidebar.vue
index 6179acd..68a3f1c 100644
--- a/src/components/sidebar.vue
+++ b/src/components/sidebar.vue
@@ -1,124 +1,121 @@
-
diff --git a/src/main.ts b/src/main.ts
index 6e7a0f4..a849505 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -1,28 +1,33 @@
-import {createApp} from 'vue';
-import {createPinia} from 'pinia';
-import * as ElementPlusIconsVue from '@element-plus/icons-vue';
-import App from './App.vue';
-import router from './router';
-import 'element-plus/dist/index.css';
-import './assets/css/icon.css';
-import {useBasicStore} from "./store/basic";
+import { createApp } from 'vue'
+import { createPinia } from 'pinia'
+import * as ElementPlusIconsVue from '@element-plus/icons-vue'
+import App from './App.vue'
+import router from './router'
+import 'element-plus/dist/index.css'
+import './assets/css/icon.css'
+import { useBasicStore } from './store/basic'
+import ElementPlus from 'element-plus'
+import zhCn from 'element-plus/es/locale/lang/zh-cn'
-const app = createApp(App);
-app.use(createPinia());
-app.use(router);
+const app = createApp(App)
+app.use(createPinia())
+app.use(router)
// 注册element plus图标
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
- app.component(key, component);
+ app.component(key, component)
}
-const basicStore = useBasicStore();
+const basicStore = useBasicStore()
app.directive('action', {
mounted(el, binding) {
- const permissions: string[] = basicStore?.userinfo?.permissions || [];
- const actionName: string = binding.arg || '';
+ const permissions: string[] = basicStore?.userinfo?.permissions || []
+ const actionName: string = binding.arg || ''
if (permissions && !permissions.includes(actionName)) {
- el['hidden'] = true;
+ el['hidden'] = true
}
},
-});
-app.mount('#app');
+})
+app.mount('#app')
+app.use(ElementPlus, {
+ locale: zhCn,
+})
diff --git a/src/router/index.ts b/src/router/index.ts
index 1d49d50..f125b43 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -1,4 +1,4 @@
-import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'
+import { createRouter, createWebHashHistory, RouteRecordRaw, createWebHistory } from 'vue-router'
import Home from '../views/home.vue'
import { useBasicStore } from '../store/basic'
@@ -77,6 +77,16 @@ const routes: RouteRecordRaw[] = [
},
component: () => import(/* webpackChunkName: "user" */ '../views/user.vue'),
},
+
+ {
+ path: '/performance-manage',
+ name: 'performance-manage',
+ meta: {
+ title: '登录',
+ },
+ component: () =>
+ import(/* webpackChunkName: "login" */ '@/views/company-manage/performance-manage/index.vue'),
+ },
],
},
{
@@ -87,6 +97,7 @@ const routes: RouteRecordRaw[] = [
},
component: () => import(/* webpackChunkName: "login" */ '../views/login.vue'),
},
+
{
path: '/403',
name: '403',
@@ -98,12 +109,11 @@ const routes: RouteRecordRaw[] = [
]
const router = createRouter({
- history: createWebHashHistory(),
+ history: createWebHistory(),
routes,
})
router.beforeEach(async (to, from, next) => {
- // document.title = ` 市场部投标信息检索工具`
const token = localStorage.getItem('token')
const basicStore = useBasicStore()
if (!token && to.path !== '/login') {
diff --git a/src/utils/request.ts b/src/utils/request.ts
index dd7f0b6..a49a01a 100644
--- a/src/utils/request.ts
+++ b/src/utils/request.ts
@@ -1,45 +1,47 @@
-import axios, {AxiosError, AxiosInstance, AxiosRequestConfig, AxiosResponse} from 'axios';
-import {ElMessage} from "element-plus";
-import router from "../router";
+import axios, { AxiosError, AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios'
+import { ElMessage } from 'element-plus'
+import router from '../router'
const service: AxiosInstance = axios.create({
- timeout: 5000
-});
+ timeout: 5000,
+ baseURL: '/dev-api',
+})
service.interceptors.request.use(
(config: AxiosRequestConfig) => {
- const headerToken = localStorage.getItem('token');
+ const headerToken = localStorage.getItem('token')
if (headerToken) {
// @ts-ignore
config.headers['Authorization'] = 'Bearer ' + headerToken
}
- return config;
+ return config
},
(error: AxiosError) => {
- console.log(error);
- return Promise.reject();
- }
-);
+ console.log(error)
+ return Promise.reject()
+ },
+)
service.interceptors.response.use(
(response: AxiosResponse) => {
+ console.log('response', response)
if (response.status === 200) {
- return response;
+ return response
} else {
- Promise.reject();
+ Promise.reject()
}
},
(error: AxiosError) => {
- console.log(error);
+ console.log('error', error)
if (error.response?.status === 401) {
- localStorage.removeItem('token');
- router.push('/login');
+ localStorage.removeItem('token')
+ // router.push('/login')
}
// @ts-ignore
- ElMessage.error(error.response?.data?.message);
- return Promise.reject();
- }
-);
+ ElMessage.error(error.response?.data?.message || '请求失败,请切换网络后尝试')
+ return Promise.reject()
+ },
+)
-export default service;
+export default service
diff --git a/src/views/company-manage/performance-manage/components/addAndEditForm.vue b/src/views/company-manage/performance-manage/components/addAndEditForm.vue
new file mode 100644
index 0000000..dc10d2e
--- /dev/null
+++ b/src/views/company-manage/performance-manage/components/addAndEditForm.vue
@@ -0,0 +1,192 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 上传
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/company-manage/performance-manage/index.vue b/src/views/company-manage/performance-manage/index.vue
new file mode 100644
index 0000000..f0dc899
--- /dev/null
+++ b/src/views/company-manage/performance-manage/index.vue
@@ -0,0 +1,115 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 查询
+ 重置
+ 新增业绩
+ 导出数据
+
+
+
+
+
+
+
+
+
+
+
+ 详情
+ 编辑
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/login.vue b/src/views/login.vue
index a298b61..8821f72 100644
--- a/src/views/login.vue
+++ b/src/views/login.vue
@@ -4,7 +4,7 @@
市场部投标信息检索工具
-
+
@@ -13,9 +13,11 @@
diff --git a/src/views/role-list.vue b/src/views/role-list.vue
index c565a02..37fe238 100644
--- a/src/views/role-list.vue
+++ b/src/views/role-list.vue
@@ -1,511 +1,548 @@
-
-
-
-
- 角色管理
-
- 新建角色
-
-
-
-
-
-
-
-
-
-
-
- 编辑
-
-
- r?.id === activeRoleId))">
- 删除
-
-
-
-
-
-
-
-
-
-
-
- {{ roleList.find(r => r?.id === activeRoleId)?.name }}
-
- 编辑
-
- r?.id === activeRoleId))" v-action:role:delete>
- 删除
-
-
-
- {{ roleList.find(r => r?.id === activeRoleId)?.description }}
-
-
-
-
-
- 调整成员
-
-
-
-
-
-
- {{ row.gender === 'MALE' ? '男' : '女' }}
-
-
-
-
-
-
-
-
-
-
-
- ,
- {{ role.name }}
-
-
-
-
-
-
-
-
- 保存
-
-
-
- {{ menu.name }}
-
-
-
-
-
-
-
- {{ checkbox.name }}:
-
-
- 全选
-
-
-
- {{ btn.name }}
-
-
-
-
-
+
+
+
+
+ 角色管理
+
+ {
+ addVisible = true
+ Object.assign(form, new Role())
+ }
+ "
+ type="primary"
+ link
+ v-action:role:create
+ >新建角色
+
+
+
+
+
+
+
+
+
+
+
+ 编辑
+
+
+ r?.id === activeRoleId))"
+ >
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+ {{ roleList.find((r) => r?.id === activeRoleId)?.name }}
+ 编辑
+ r?.id === activeRoleId))"
+ v-action:role:delete
+ >
+ 删除
+
+
+
+ {{ roleList.find((r) => r?.id === activeRoleId)?.description }}
+
+
+
+
+
+ 调整成员
+
+
+
+
+
+
+ {{ row.gender === 'MALE' ? '男' : '女' }}
+
+
+
+
+
+
+
+
+
+
+
+ ,
+ {{ role.name }}
+
+
+
+
+
+
+
+
+ 保存
+
+
+
+ {{ menu.name }}
+
+
+
+
+
+
+ {{ checkbox.name }}:
+
+ 全选
-
-
-
-
-
+ {{ checkbox.id }}
+
+
+
+ {{ btn.name }}
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tsconfig.json b/tsconfig.json
index 49c50ad..3c753aa 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,18 +1,22 @@
{
- "compilerOptions": {
- "target": "ESNext",
- "useDefineForClassFields": true,
- "module": "ESNext",
- "moduleResolution": "Node",
- "strict": true,
- "jsx": "preserve",
- "sourceMap": true,
- "resolveJsonModule": true,
- "isolatedModules": true,
- "esModuleInterop": true,
- "lib": ["ESNext", "DOM"],
- "skipLibCheck": true
- },
- "include": ["src/**/*.ts", "src/**/*.d.ts","src/**/*.vue"],
- "references": [{ "path": "./tsconfig.node.json" }]
+ "compilerOptions": {
+ "target": "ESNext",
+ "useDefineForClassFields": true,
+ "module": "ESNext",
+ "moduleResolution": "Node",
+ "strict": true,
+ "jsx": "preserve",
+ "sourceMap": true,
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "esModuleInterop": true,
+ "lib": ["ESNext", "DOM"],
+ "skipLibCheck": true,
+ "baseUrl": ".",
+ "paths": {
+ "@/*": ["src/*"]
+ }
+ },
+ "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.vue"],
+ "references": [{ "path": "./tsconfig.node.json" }]
}
diff --git a/vite.config.ts b/vite.config.ts
index bd5427c..e35dbae 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -1,32 +1,42 @@
-import { defineConfig } from 'vite';
-import vue from '@vitejs/plugin-vue';
-import VueSetupExtend from 'vite-plugin-vue-setup-extend';
-import AutoImport from 'unplugin-auto-import/vite';
-import Components from 'unplugin-vue-components/vite';
-import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';
+import { defineConfig } from 'vite'
+import vue from '@vitejs/plugin-vue'
+import VueSetupExtend from 'vite-plugin-vue-setup-extend'
+import AutoImport from 'unplugin-auto-import/vite'
+import Components from 'unplugin-vue-components/vite'
+import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
+import path from 'path'
export default defineConfig({
- base: './',
- plugins: [
- vue(),
- VueSetupExtend(),
- AutoImport({
- resolvers: [ElementPlusResolver()]
- }),
- Components({
- resolvers: [ElementPlusResolver()]
- })
- ],
- server: {
- host: '0.0.0.0',
- port: 8080,
- proxy: {
- '/admin3': {
- target: `http://192.168.0.38:8080`,
- },
- },
- },
- optimizeDeps: {
- include: ['schart.js']
- }
-});
+ base: '/',
+ plugins: [
+ vue(),
+ VueSetupExtend(),
+ AutoImport({
+ resolvers: [ElementPlusResolver()],
+ }),
+ Components({
+ resolvers: [ElementPlusResolver()],
+ }),
+ ],
+ server: {
+ host: '0.0.0.0',
+ port: 8080,
+ proxy: {
+ '/dev-api': {
+ // target: `http://192.168.0.38:8080/search_tool`,
+ target: `http://192.168.0.60:8080`,
+ secure: false,
+ changeOrigin: true,
+ rewrite: (path) => path.replace(/^\/dev-api/, ''),
+ },
+ },
+ },
+ optimizeDeps: {
+ include: ['schart.js'],
+ },
+ resolve: {
+ alias: {
+ '@': path.resolve(__dirname, './src'),
+ },
+ },
+})
diff --git a/yarn.lock b/yarn.lock
index 6a511eb..7f107a4 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -111,6 +111,13 @@
resolved "https://repo.huaweicloud.com/repository/npm/@types/marked/-/marked-4.0.5.tgz"
integrity sha512-jMN2moJ+lSf1VZXQo3VXeMCjoXuciVONig8+U0YNBop5aBvQw4qkolx1Nzn1i0T8L2l9IZ3jju6bS1pPwlaY1w==
+"@types/node@^22.14.1", "@types/node@>= 14":
+ version "22.14.1"
+ resolved "https://repo.huaweicloud.com/repository/npm/@types/node/-/node-22.14.1.tgz"
+ integrity sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==
+ dependencies:
+ undici-types "~6.21.0"
+
"@types/web-bluetooth@^0.0.15":
version "0.0.15"
resolved "https://repo.huaweicloud.com/repository/npm/@types/web-bluetooth/-/web-bluetooth-0.0.15.tgz"
@@ -687,6 +694,11 @@ nanoid@^3.3.6:
resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz"
integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
+neo-async@^2.6.2:
+ version "2.6.2"
+ resolved "https://repo.huaweicloud.com/repository/npm/neo-async/-/neo-async-2.6.2.tgz"
+ integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
+
normalize-path@^3.0.0, normalize-path@~3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz"
@@ -797,7 +809,14 @@ run-parallel@^1.1.9:
dependencies:
queue-microtask "^1.2.2"
-sass@*, sass@^1.49.7:
+sass-loader@^16.0.5:
+ version "16.0.5"
+ resolved "https://repo.huaweicloud.com/repository/npm/sass-loader/-/sass-loader-16.0.5.tgz"
+ integrity sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==
+ dependencies:
+ neo-async "^2.6.2"
+
+sass@*, sass@^1.3.0, sass@^1.49.7:
version "1.62.1"
resolved "https://registry.npmjs.org/sass/-/sass-1.62.1.tgz"
integrity sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A==
@@ -872,6 +891,11 @@ ufo@^1.1.2:
resolved "https://registry.npmjs.org/ufo/-/ufo-1.1.2.tgz"
integrity sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==
+undici-types@~6.21.0:
+ version "6.21.0"
+ resolved "https://repo.huaweicloud.com/repository/npm/undici-types/-/undici-types-6.21.0.tgz"
+ integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==
+
unimport@^1.0.1:
version "1.3.0"
resolved "https://registry.npmjs.org/unimport/-/unimport-1.3.0.tgz"