Commit 7f0c0111236fea3aac7a9d5616a10f210da6969d

Authored by 芋道源码
Committed by Gitee
2 parents ffab0b1d ca2cdc03

!317 优化 vue3 配置,修复部分 bug

Merge pull request !317 from xingyu/dev
Showing 132 changed files with 2120 additions and 2824 deletions
yudao-dependencies/pom.xml
... ... @@ -28,15 +28,15 @@
28 28 <dynamic-datasource.version>3.5.2</dynamic-datasource.version>
29 29 <redisson.version>3.18.0</redisson.version>
30 30 <!-- 服务保障相关 -->
31   - <lock4j.version>2.2.2</lock4j.version>
  31 + <lock4j.version>2.2.3</lock4j.version>
32 32 <resilience4j.version>1.7.1</resilience4j.version>
33 33 <!-- 监控相关 -->
34 34 <skywalking.version>8.12.0</skywalking.version>
35 35 <spring-boot-admin.version>2.7.7</spring-boot-admin.version>
36 36 <opentracing.version>0.33.0</opentracing.version>
37 37 <!-- Test 测试相关 -->
38   - <podam.version>7.2.9.RELEASE</podam.version>
39   - <jedis-mock.version>1.0.4</jedis-mock.version>
  38 + <podam.version>7.2.11.RELEASE</podam.version>
  39 + <jedis-mock.version>1.0.5</jedis-mock.version>
40 40 <mockito-inline.version>4.8.0</mockito-inline.version>
41 41 <!-- Bpm 工作流相关 -->
42 42 <flowable.version>6.7.2</flowable.version>
... ... @@ -50,19 +50,19 @@
50 50 <fastjson.version>1.2.83</fastjson.version>
51 51 <guava.version>31.1-jre</guava.version>
52 52 <guice.version>5.1.0</guice.version>
53   - <transmittable-thread-local.version>2.14.0</transmittable-thread-local.version>
  53 + <transmittable-thread-local.version>2.14.2</transmittable-thread-local.version>
54 54 <commons-net.version>3.8.0</commons-net.version>
55 55 <jsch.version>0.1.55</jsch.version>
56 56 <tika-core.version>2.5.0</tika-core.version>
57 57 <aj-captcha.version>1.3.0</aj-captcha.version>
58   - <netty-all.version>4.1.82.Final</netty-all.version>
  58 + <netty-all.version>4.1.85.Final</netty-all.version>
59 59 <!-- 三方云服务相关 -->
60 60 <okio.version>3.0.0</okio.version>
61 61 <okhttp3.version>4.10.0</okhttp3.version>
62 62 <minio.version>8.4.6</minio.version>
63   - <aliyun-java-sdk-core.version>4.6.2</aliyun-java-sdk-core.version>
  63 + <aliyun-java-sdk-core.version>4.6.3</aliyun-java-sdk-core.version>
64 64 <aliyun-java-sdk-dysmsapi.version>2.2.1</aliyun-java-sdk-dysmsapi.version>
65   - <tencentcloud-sdk-java.version>3.1.635</tencentcloud-sdk-java.version>
  65 + <tencentcloud-sdk-java.version>3.1.637</tencentcloud-sdk-java.version>
66 66 <justauth.version>1.4.0</justauth.version>
67 67 <jimureport.version>1.5.4</jimureport.version>
68 68 <xercesImpl.version>2.12.2</xercesImpl.version>
... ...
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/object/ObjectUtils.java
1 1 package cn.iocoder.yudao.framework.common.util.object;
2 2  
3   -import cn.hutool.core.util.ArrayUtil;
4 3 import cn.hutool.core.util.ObjectUtil;
5 4 import cn.hutool.core.util.ReflectUtil;
6 5  
7 6 import java.lang.reflect.Field;
8 7 import java.util.Arrays;
9   -import java.util.Objects;
10 8 import java.util.function.Consumer;
11 9  
12 10 /**
... ... @@ -47,6 +45,7 @@ public class ObjectUtils {
47 45 return obj1.compareTo(obj2) > 0 ? obj1 : obj2;
48 46 }
49 47  
  48 + @SafeVarargs
50 49 public static <T> T defaultIfNull(T... array) {
51 50 for (T item : array) {
52 51 if (item != null) {
... ... @@ -56,6 +55,7 @@ public class ObjectUtils {
56 55 return null;
57 56 }
58 57  
  58 + @SafeVarargs
59 59 public static <T> boolean equalsAny(T obj, T... array) {
60 60 return Arrays.asList(array).contains(obj);
61 61 }
... ...
yudao-framework/yudao-spring-boot-starter-biz-pay/pom.xml
... ... @@ -52,7 +52,7 @@
52 52 <dependency>
53 53 <groupId>com.alipay.sdk</groupId>
54 54 <artifactId>alipay-sdk-java</artifactId>
55   - <version>4.33.44.ALL</version>
  55 + <version>4.34.71.ALL</version>
56 56 <exclusions>
57 57 <exclusion>
58 58 <groupId>org.bouncycastle</groupId>
... ...
yudao-framework/yudao-spring-boot-starter-file/pom.xml
... ... @@ -46,7 +46,7 @@
46 46 <dependency>
47 47 <groupId>com.fasterxml.jackson.core</groupId>
48 48 <artifactId>jackson-databind</artifactId>
49   - <version>2.13.2.2</version>
  49 + <version>2.13.4</version>
50 50 </dependency>
51 51 <dependency>
52 52 <groupId>com.fasterxml.jackson.core</groupId>
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmTaskConvert.java
... ... @@ -48,7 +48,7 @@ public interface BpmTaskConvert {
48 48 return null;
49 49 }
50 50 try {
51   - T newInstance = target.newInstance();
  51 + T newInstance = target.getDeclaredConstructor().newInstance();
52 52 BeanUtils.copyProperties(source, newInstance);
53 53 return newInstance;
54 54 } catch (Exception e) {
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/api/api.ts.vm
... ... @@ -5,7 +5,7 @@ export interface ${simpleClassName}VO {
5 5 #if ($column.createOperation || $column.updateOperation)
6 6 #if(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer" || ${column.javaType.toLowerCase()} == "double")
7 7 ${column.javaField}: number
8   -#elseif(${column.javaType.toLowerCase()} == "date")
  8 +#elseif(${column.javaType.toLowerCase()} == "date" || ${column.javaType.toLowerCase()} == "localdatetime")
9 9 ${column.javaField}: Date
10 10 #else
11 11 ${column.javaField}: ${column.javaType.toLowerCase()}
... ... @@ -19,7 +19,7 @@ export interface ${simpleClassName}PageReqVO extends PageParam {
19 19 #if (${column.listOperation})##查询操作
20 20 #if(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer" || ${column.javaType.toLowerCase()} == "double")
21 21 ${column.javaField}?: number
22   -#elseif(${column.javaType.toLowerCase()} == "date")
  22 +#elseif(${column.javaType.toLowerCase()} == "date" || ${column.javaType.toLowerCase()} == "localdatetime")
23 23 ${column.javaField}?: Date[]
24 24 #else
25 25 ${column.javaField}?: ${column.javaType.toLowerCase()}
... ... @@ -33,8 +33,8 @@ export interface ${simpleClassName}ExcelReqVO {
33 33 #if (${column.listOperation})##查询操作
34 34 #if(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer" || ${column.javaType.toLowerCase()} == "double")
35 35 ${column.javaField}?: number
36   -#elseif(${column.javaType.toLowerCase()} == "date")
37   - ${column.javaField}?: string[]
  36 +#elseif(${column.javaType.toLowerCase()} == "date" || ${column.javaType.toLowerCase()} == "localdatetime")
  37 + ${column.javaField}?: Date[]
38 38 #else
39 39 ${column.javaField}?: ${column.javaType.toLowerCase()}
40 40 #end
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/data.ts.vm
... ... @@ -28,6 +28,9 @@ const crudSchemas = reactive&lt;VxeCrudSchema&gt;({
28 28 {
29 29 title: '${column.columnComment}',
30 30 field: '${column.javaField}',
  31 + #if (!$column.listOperationResult)
  32 + isTable: false,
  33 + #end
31 34 #if ("" != $dictType)## 有数据字典
32 35 dictType: DICT_TYPE.$dictType.toUpperCase(),
33 36 #if (${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer")
... ... @@ -39,7 +42,8 @@ const crudSchemas = reactive&lt;VxeCrudSchema&gt;({
39 42 #if (!$column.createOperation && !$column.updateOperation)
40 43 isForm: false,
41 44 #elseif(!("" != $column.dictType))
42   - #if ($column.htmlType == "datetime")## 时间框
  45 + #if (${column.javaType.toLowerCase()} == "date" || ${column.javaType.toLowerCase()} == "localdatetime")
  46 + formatter: 'formatDate',
43 47 form: {
44 48 component: 'DatePicker',
45 49 componentProps: {
... ... @@ -73,9 +77,20 @@ const crudSchemas = reactive&lt;VxeCrudSchema&gt;({
73 77 component: 'InputNumber',
74 78 value: 0
75 79 },
  80 + #elseif($column.htmlType == "imageUpload")## 图片上传
  81 + form: {
  82 + component: 'UploadImg',
  83 + componentProps: {
  84 + limit: 1
  85 + }
  86 + },
  87 + #elseif($column.htmlType == "fileUpload")## 图片上传
  88 + form: {
  89 + component: 'UploadFile'
  90 + },
76 91 #end
77 92 #end
78   - #if ($column.listOperationResult)
  93 + #if ($column.listOperation)
79 94 #if($column.htmlType == "input")
80 95 isSearch: true,
81 96 #elseif("" != $dictType)
... ...
yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/index.vue.vm
... ... @@ -74,7 +74,7 @@
74 74 </template>
75 75 </XModal>
76 76 </template>
77   -<script setup lang="ts" name="${table.moduleName}">
  77 +<script setup lang="ts" name="${simpleClassName}">
78 78 // 全局相关的 import
79 79 import { ref, unref } from 'vue'
80 80 import { useI18n } from '@/hooks/web/useI18n'
... ... @@ -91,7 +91,7 @@ const message = useMessage() // 消息弹窗
91 91  
92 92 // 列表相关的变量
93 93 const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref
94   -const { gridOptions, reloadList, deleteData, exportList } = useVxeGrid<${simpleClassName}Api.${simpleClassName}VO>({
  94 +const { gridOptions, getList, deleteData, exportList } = useVxeGrid<${simpleClassName}Api.${simpleClassName}VO>({
95 95 allSchemas: allSchemas,
96 96 getListApi: ${simpleClassName}Api.get${simpleClassName}PageApi,
97 97 deleteApi: ${simpleClassName}Api.delete${simpleClassName}Api,
... ... @@ -169,7 +169,7 @@ const submitForm = async () =&gt; {
169 169 } finally {
170 170 actionLoading.value = false
171 171 // 刷新列表
172   - await reloadList(xGrid)
  172 + await getList(xGrid)
173 173 }
174 174 }
175 175 })
... ...
yudao-ui-admin-vue3/.prettierignore
... ... @@ -6,5 +6,4 @@
6 6 /vite.config.ts
7 7 /src/types/env.d.ts
8 8 /docs/**/*
9   -/plop/**/*
10 9 CHANGELOG
... ...
yudao-ui-admin-vue3/build/vite/index.ts 0 → 100644
  1 +import { resolve } from 'path'
  2 +import Vue from '@vitejs/plugin-vue'
  3 +import VueJsx from '@vitejs/plugin-vue-jsx'
  4 +import VueI18n from '@intlify/vite-plugin-vue-i18n'
  5 +import WindiCSS from 'vite-plugin-windicss'
  6 +import progress from 'vite-plugin-progress'
  7 +import EslintPlugin from 'vite-plugin-eslint'
  8 +import PurgeIcons from 'vite-plugin-purge-icons'
  9 +import { ViteEjsPlugin } from 'vite-plugin-ejs'
  10 +import viteCompression from 'vite-plugin-compression'
  11 +import vueSetupExtend from 'vite-plugin-vue-setup-extend'
  12 +import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
  13 +import {
  14 + createStyleImportPlugin,
  15 + ElementPlusResolve,
  16 + VxeTableResolve
  17 +} from 'vite-plugin-style-import'
  18 +export function createVitePlugins(VITE_APP_TITLE: string) {
  19 + const root = process.cwd()
  20 + // 路径查找
  21 + function pathResolve(dir: string) {
  22 + return resolve(root, '.', dir)
  23 + }
  24 + return [
  25 + Vue(),
  26 + VueJsx(),
  27 + WindiCSS(),
  28 + progress(),
  29 + PurgeIcons(),
  30 + vueSetupExtend(),
  31 + createStyleImportPlugin({
  32 + resolves: [ElementPlusResolve(), VxeTableResolve()],
  33 + libs: [
  34 + {
  35 + libraryName: 'element-plus',
  36 + esModule: true,
  37 + resolveStyle: (name) => {
  38 + return `element-plus/es/components/${name.substring(3)}/style/css`
  39 + }
  40 + },
  41 + {
  42 + libraryName: 'vxe-table',
  43 + esModule: true,
  44 + resolveStyle: (name) => {
  45 + return `vxe-table/es/${name}/style.css`
  46 + }
  47 + }
  48 + ]
  49 + }),
  50 + EslintPlugin({
  51 + cache: false,
  52 + include: ['src/**/*.vue', 'src/**/*.ts', 'src/**/*.tsx'] // 检查的文件
  53 + }),
  54 + VueI18n({
  55 + runtimeOnly: true,
  56 + compositionOnly: true,
  57 + include: [resolve(__dirname, 'src/locales/**')]
  58 + }),
  59 + createSvgIconsPlugin({
  60 + iconDirs: [pathResolve('src/assets/svgs')],
  61 + symbolId: 'icon-[dir]-[name]',
  62 + svgoOptions: true
  63 + }),
  64 + viteCompression({
  65 + verbose: true, // 是否在控制台输出压缩结果
  66 + disable: false, // 是否禁用
  67 + threshold: 10240, // 体积大于 threshold 才会被压缩,单位 b
  68 + algorithm: 'gzip', // 压缩算法,可选 [ 'gzip' , 'brotliCompress' ,'deflate' , 'deflateRaw']
  69 + ext: '.gz', // 生成的压缩包后缀
  70 + deleteOriginFile: false //压缩后是否删除源文件
  71 + }),
  72 + ViteEjsPlugin({
  73 + title: VITE_APP_TITLE
  74 + })
  75 + ]
  76 +}
... ...
yudao-ui-admin-vue3/build/vite/optimize.ts 0 → 100644
  1 +const include = [
  2 + 'qs',
  3 + 'url',
  4 + 'vue',
  5 + 'sass',
  6 + 'mitt',
  7 + 'axios',
  8 + 'pinia',
  9 + 'dayjs',
  10 + 'qrcode',
  11 + 'windicss',
  12 + 'vue-router',
  13 + 'vue-types',
  14 + 'vue-i18n',
  15 + 'xe-utils',
  16 + 'crypto-js',
  17 + 'lodash-es',
  18 + 'vxe-table',
  19 + 'nprogress',
  20 + 'animate.css',
  21 + 'vxe-table/es/style',
  22 + 'web-storage-cache',
  23 + 'element-plus',
  24 + 'element-plus/es/locale/lang/zh-cn',
  25 + 'element-plus/es/locale/lang/en',
  26 + '@iconify/iconify',
  27 + '@vueuse/core',
  28 + '@zxcvbn-ts/core',
  29 + 'echarts/core',
  30 + 'echarts/charts',
  31 + 'echarts/components',
  32 + 'echarts/renderers',
  33 + 'echarts-wordcloud',
  34 + '@wangeditor/editor',
  35 + '@wangeditor/editor-for-vue'
  36 +]
  37 +
  38 +const exclude = ['@iconify/json']
  39 +
  40 +export { include, exclude }
... ...
yudao-ui-admin-vue3/build/vite/styleImport.ts 0 → 100644
  1 +export const styleImportPlugin = {
  2 + libs: [
  3 + {
  4 + libraryName: 'element-plus',
  5 + esModule: true,
  6 + resolveStyle: (name) => {
  7 + return `element-plus/es/components/${name.substring(3)}/style/css`
  8 + }
  9 + },
  10 + {
  11 + libraryName: 'vxe-table',
  12 + esModule: true,
  13 + resolveStyle: (name) => {
  14 + return `vxe-table/es/${name}/style.css`
  15 + }
  16 + }
  17 + ]
  18 +}
... ...
yudao-ui-admin-vue3/package.json
1 1 {
2   - "name": "ruoyi-vue-pro-vue3",
3   - "version": "1.6.4.1863",
  2 + "name": "yudao-ui-admin-vue3",
  3 + "version": "1.6.5.1874",
4 4 "description": "基于vue3、vite3、element-plus、typesScript",
5 5 "author": "xingyu",
6 6 "private": false,
7 7 "scripts": {
8 8 "i": "pnpm install",
9   - "dev": "vite --mode base --open",
  9 + "dev": "vite --mode base",
10 10 "ts:check": "vue-tsc --noEmit",
11 11 "build:pro": "vite build --mode pro",
12 12 "build:dev": "vite build --mode dev",
... ... @@ -21,8 +21,7 @@
21 21 "lint:format": "prettier --write --loglevel warn \"src/**/*.{js,ts,json,tsx,css,less,scss,vue,html,md}\"",
22 22 "lint:style": "stylelint --fix \"**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/",
23 23 "lint:lint-staged": "lint-staged -c ",
24   - "lint:pretty": "pretty-quick --staged",
25   - "p": "plop"
  24 + "lint:pretty": "pretty-quick --staged"
26 25 },
27 26 "dependencies": {
28 27 "@iconify/iconify": "^3.0.1",
... ... @@ -31,14 +30,13 @@
31 30 "@wangeditor/editor-for-vue": "^5.1.10",
32 31 "@zxcvbn-ts/core": "^2.1.0",
33 32 "animate.css": "^4.1.1",
34   - "axios": "^1.2.0",
  33 + "axios": "^1.2.1",
35 34 "crypto-js": "^4.1.1",
36   - "dayjs": "^1.11.6",
  35 + "dayjs": "^1.11.7",
37 36 "echarts": "^5.4.0",
38 37 "echarts-wordcloud": "^2.1.0",
39   - "element-plus": "2.2.25",
  38 + "element-plus": "2.2.26",
40 39 "intro.js": "^6.0.0",
41   - "js-cookie": "^3.0.1",
42 40 "jsencrypt": "^3.3.1",
43 41 "lodash-es": "^4.17.21",
44 42 "mitt": "^3.0.0",
... ... @@ -59,52 +57,54 @@
59 57 "devDependencies": {
60 58 "@commitlint/cli": "^17.3.0",
61 59 "@commitlint/config-conventional": "^17.3.0",
62   - "@iconify/json": "^2.1.145",
  60 + "@iconify/json": "^2.1.149",
63 61 "@intlify/vite-plugin-vue-i18n": "^6.0.3",
64 62 "@purge-icons/generated": "^0.9.0",
65 63 "@types/intro.js": "^5.1.0",
66 64 "@types/lodash-es": "^4.17.6",
67   - "@types/node": "^18.11.9",
  65 + "@types/node": "^18.11.11",
68 66 "@types/nprogress": "^0.2.0",
69 67 "@types/qrcode": "^1.5.0",
70 68 "@types/qs": "^6.9.7",
71   - "@typescript-eslint/eslint-plugin": "^5.45.0",
72   - "@typescript-eslint/parser": "^5.45.0",
  69 + "@typescript-eslint/eslint-plugin": "^5.45.1",
  70 + "@typescript-eslint/parser": "^5.45.1",
  71 + "@vitejs/plugin-legacy": "^2.3.1",
73 72 "@vitejs/plugin-vue": "^3.2.0",
74 73 "@vitejs/plugin-vue-jsx": "^2.1.1",
75 74 "autoprefixer": "^10.4.13",
76   - "eslint": "^8.28.0",
  75 + "consola": "^2.15.3",
  76 + "eslint": "^8.29.0",
77 77 "eslint-config-prettier": "^8.5.0",
78 78 "eslint-define-config": "^1.12.0",
79 79 "eslint-plugin-prettier": "^4.2.1",
80 80 "eslint-plugin-vue": "^9.8.0",
81   - "lint-staged": "^13.0.4",
82   - "plop": "^3.1.1",
  81 + "lint-staged": "^13.1.0",
83 82 "postcss": "^8.4.19",
84 83 "postcss-html": "^1.5.0",
85 84 "postcss-scss": "^4.0.6",
86 85 "prettier": "^2.8.0",
87 86 "rimraf": "^3.0.2",
88   - "rollup": "^3.5.0",
  87 + "rollup": "^3.6.0",
89 88 "sass": "^1.56.1",
90   - "stylelint": "^14.15.0",
  89 + "stylelint": "^14.16.0",
91 90 "stylelint-config-html": "^1.1.0",
92 91 "stylelint-config-prettier": "^9.0.4",
93 92 "stylelint-config-recommended": "^9.0.0",
94 93 "stylelint-config-standard": "^29.0.0",
95 94 "stylelint-order": "^5.0.0",
  95 + "terser": "^5.16.1",
96 96 "typescript": "4.9.3",
97   - "vite": "3.2.4",
  97 + "vite": "3.2.5",
98 98 "vite-plugin-compression": "^0.5.1",
  99 + "vite-plugin-ejs": "^1.6.4",
99 100 "vite-plugin-eslint": "^1.8.1",
100   - "vite-plugin-html": "^3.2.0",
101 101 "vite-plugin-progress": "^0.0.6",
102 102 "vite-plugin-purge-icons": "^0.9.1",
103 103 "vite-plugin-style-import": "2.0.0",
104 104 "vite-plugin-svg-icons": "^2.0.1",
105 105 "vite-plugin-vue-setup-extend": "^0.4.0",
106 106 "vite-plugin-windicss": "^1.8.8",
107   - "vue-tsc": "^1.0.10",
  107 + "vue-tsc": "^1.0.11",
108 108 "windicss": "^3.5.6"
109 109 },
110 110 "engines": {
... ... @@ -116,7 +116,7 @@
116 116 "url": "git+https://gitee.com/zhijiantianya/ruoyi-vue-pro"
117 117 },
118 118 "bugs": {
119   - "url": "https://gitee.com/zhijiantianya/ruoyi-vue-pro/issues/I57XOQ"
  119 + "url": "https://gitee.com/zhijiantianya/ruoyi-vue-pro/issues"
120 120 },
121 121 "homepage": "https://gitee.com/zhijiantianya/ruoyi-vue-pro"
122 122 }
... ...
yudao-ui-admin-vue3/plop/component/component.hbs deleted
1   -<script setup lang="ts">
2   -import { useDesign } from '@/hooks/web/useDesign'
3   -
4   -const { getPrefixCls } = useDesign()
5   -
6   -const prefixCls = getPrefixCls('{{ name }}')
7   -</script>
8   -
9   -<template>
10   - <div :class="`${prefixCls}-{{ name }}`">{{ upperFirstName }}</div>
11   -</template>
yudao-ui-admin-vue3/plop/component/index.hbs deleted
1   -import {{ upperFirstName }} from './src/{{ upperFirstName }}.vue'
2   -
3   -export { {{ upperFirstName }} }
yudao-ui-admin-vue3/plop/component/prompt.js deleted
1   -const toUpperCase = (str) => str.charAt(0).toUpperCase() + str.slice(1)
2   -
3   -module.exports = {
4   - description: 'Create vue component',
5   - prompts: [
6   - {
7   - type: 'input',
8   - name: 'name',
9   - message: '请输入组件名称(Please enter the component name)'
10   - }
11   - ],
12   - actions: (data) => {
13   - const { name } = data
14   - const upperFirstName = toUpperCase(name)
15   -
16   - const actions = []
17   - if (name) {
18   - actions.push({
19   - type: 'add',
20   - path: `./src/components/${upperFirstName}/src/${upperFirstName}.vue`,
21   - templateFile: './plop/component/component.hbs',
22   - data: {
23   - name,
24   - upperFirstName
25   - }
26   - }, {
27   - type: 'add',
28   - path: `./src/components/${upperFirstName}/index.ts`,
29   - templateFile: './plop/component/index.hbs',
30   - data: {
31   - upperFirstName
32   - }
33   - })
34   - }
35   -
36   - return actions
37   - }
38   -}
yudao-ui-admin-vue3/plop/view/prompt.js deleted
1   -const toUpperCase = (str) => str.charAt(0).toUpperCase() + str.slice(1)
2   -
3   -module.exports = {
4   - description: 'Create vue view',
5   - prompts: [
6   - {
7   - type: 'input',
8   - name: 'path',
9   - message: '请输入路径(Please enter a path)',
10   - default: 'views'
11   - },
12   - {
13   - type: 'input',
14   - name: 'name',
15   - message: '请输入模块名称(Please enter module name)'
16   - }
17   - ],
18   - actions: (data) => {
19   - const { name, path } = data
20   - const upperFirstName = toUpperCase(name)
21   -
22   - const actions = []
23   - if (name) {
24   - actions.push({
25   - type: 'add',
26   - path: `./src/${path}/${upperFirstName}.vue`,
27   - templateFile: './plop/view/view.hbs',
28   - data: {
29   - name,
30   - upperFirstName
31   - }
32   - })
33   - }
34   -
35   - return actions
36   - }
37   -}
yudao-ui-admin-vue3/plop/view/view.hbs deleted
1   -<template>
2   - <ContentWrap title="{{ upperFirstName }}"> {{ name }} </ContentWrap>
3   -</template>
4   -<script setup lang="ts" name="{{ name }}">
5   -</script>
yudao-ui-admin-vue3/plopfile.js deleted
1   -const viewGenerator = require('./plop/view/prompt.js')
2   -const componentGenerator = require('./plop/component/prompt.js')
3   -
4   -module.exports = function (plop) {
5   - plop.setGenerator('view', viewGenerator)
6   - plop.setGenerator('component', componentGenerator)
7   -}
yudao-ui-admin-vue3/pnpm-lock.yaml
... ... @@ -4,17 +4,18 @@ specifiers:
4 4 '@commitlint/cli': ^17.3.0
5 5 '@commitlint/config-conventional': ^17.3.0
6 6 '@iconify/iconify': ^3.0.1
7   - '@iconify/json': ^2.1.145
  7 + '@iconify/json': ^2.1.149
8 8 '@intlify/vite-plugin-vue-i18n': ^6.0.3
9 9 '@purge-icons/generated': ^0.9.0
10 10 '@types/intro.js': ^5.1.0
11 11 '@types/lodash-es': ^4.17.6
12   - '@types/node': ^18.11.9
  12 + '@types/node': ^18.11.11
13 13 '@types/nprogress': ^0.2.0
14 14 '@types/qrcode': ^1.5.0
15 15 '@types/qs': ^6.9.7
16   - '@typescript-eslint/eslint-plugin': ^5.45.0
17   - '@typescript-eslint/parser': ^5.45.0
  16 + '@typescript-eslint/eslint-plugin': ^5.45.1
  17 + '@typescript-eslint/parser': ^5.45.1
  18 + '@vitejs/plugin-legacy': ^2.3.1
18 19 '@vitejs/plugin-vue': ^3.2.0
19 20 '@vitejs/plugin-vue-jsx': ^2.1.1
20 21 '@vueuse/core': ^9.6.0
... ... @@ -23,26 +24,25 @@ specifiers:
23 24 '@zxcvbn-ts/core': ^2.1.0
24 25 animate.css: ^4.1.1
25 26 autoprefixer: ^10.4.13
26   - axios: ^1.2.0
  27 + axios: ^1.2.1
  28 + consola: ^2.15.3
27 29 crypto-js: ^4.1.1
28   - dayjs: ^1.11.6
  30 + dayjs: ^1.11.7
29 31 echarts: ^5.4.0
30 32 echarts-wordcloud: ^2.1.0
31   - element-plus: 2.2.25
32   - eslint: ^8.28.0
  33 + element-plus: 2.2.26
  34 + eslint: ^8.29.0
33 35 eslint-config-prettier: ^8.5.0
34 36 eslint-define-config: ^1.12.0
35 37 eslint-plugin-prettier: ^4.2.1
36 38 eslint-plugin-vue: ^9.8.0
37 39 intro.js: ^6.0.0
38   - js-cookie: ^3.0.1
39 40 jsencrypt: ^3.3.1
40   - lint-staged: ^13.0.4
  41 + lint-staged: ^13.1.0
41 42 lodash-es: ^4.17.21
42 43 mitt: ^3.0.0
43 44 nprogress: ^0.2.0
44 45 pinia: ^2.0.27
45   - plop: ^3.1.1
46 46 postcss: ^8.4.19
47 47 postcss-html: ^1.5.0
48 48 postcss-scss: ^4.0.6
... ... @@ -50,20 +50,21 @@ specifiers:
50 50 qrcode: ^1.5.1
51 51 qs: ^6.11.0
52 52 rimraf: ^3.0.2
53   - rollup: ^3.5.0
  53 + rollup: ^3.6.0
54 54 sass: ^1.56.1
55   - stylelint: ^14.15.0
  55 + stylelint: ^14.16.0
56 56 stylelint-config-html: ^1.1.0
57 57 stylelint-config-prettier: ^9.0.4
58 58 stylelint-config-recommended: ^9.0.0
59 59 stylelint-config-standard: ^29.0.0
60 60 stylelint-order: ^5.0.0
  61 + terser: ^5.16.1
61 62 typescript: 4.9.3
62 63 url: ^0.11.0
63   - vite: 3.2.4
  64 + vite: 3.2.5
64 65 vite-plugin-compression: ^0.5.1
  66 + vite-plugin-ejs: ^1.6.4
65 67 vite-plugin-eslint: ^1.8.1
66   - vite-plugin-html: ^3.2.0
67 68 vite-plugin-progress: ^0.0.6
68 69 vite-plugin-purge-icons: ^0.9.1
69 70 vite-plugin-style-import: 2.0.0
... ... @@ -74,7 +75,7 @@ specifiers:
74 75 vue-cropper: ^1.0.3
75 76 vue-i18n: 9.2.2
76 77 vue-router: ^4.1.6
77   - vue-tsc: ^1.0.10
  78 + vue-tsc: ^1.0.11
78 79 vue-types: ^5.0.1
79 80 vxe-table: ^4.3.6
80 81 web-storage-cache: ^1.1.1
... ... @@ -88,14 +89,13 @@ dependencies:
88 89 '@wangeditor/editor-for-vue': 5.1.12_3apfu3xbp6awzuex7ed3sbrv6y
89 90 '@zxcvbn-ts/core': 2.1.0
90 91 animate.css: 4.1.1
91   - axios: 1.2.0
  92 + axios: 1.2.1
92 93 crypto-js: 4.1.1
93   - dayjs: 1.11.6
  94 + dayjs: 1.11.7
94 95 echarts: 5.4.0
95 96 echarts-wordcloud: 2.1.0_echarts@5.4.0
96   - element-plus: 2.2.25_vue@3.2.45
  97 + element-plus: 2.2.26_vue@3.2.45
97 98 intro.js: 6.0.0
98   - js-cookie: 3.0.1
99 99 jsencrypt: 3.3.1
100 100 lodash-es: 4.17.21
101 101 mitt: 3.0.0
... ... @@ -116,52 +116,54 @@ dependencies:
116 116 devDependencies:
117 117 '@commitlint/cli': 17.3.0
118 118 '@commitlint/config-conventional': 17.3.0
119   - '@iconify/json': 2.1.145
120   - '@intlify/vite-plugin-vue-i18n': 6.0.3_vite@3.2.4+vue-i18n@9.2.2
  119 + '@iconify/json': 2.1.149
  120 + '@intlify/vite-plugin-vue-i18n': 6.0.3_vite@3.2.5+vue-i18n@9.2.2
121 121 '@purge-icons/generated': 0.9.0
122 122 '@types/intro.js': 5.1.0
123 123 '@types/lodash-es': 4.17.6
124   - '@types/node': 18.11.9
  124 + '@types/node': 18.11.11
125 125 '@types/nprogress': 0.2.0
126 126 '@types/qrcode': 1.5.0
127 127 '@types/qs': 6.9.7
128   - '@typescript-eslint/eslint-plugin': 5.45.0_czs5uoqkd3podpy6vgtsxfc7au
129   - '@typescript-eslint/parser': 5.45.0_hsf322ms6xhhd4b5ne6lb74y4a
130   - '@vitejs/plugin-vue': 3.2.0_vite@3.2.4+vue@3.2.45
131   - '@vitejs/plugin-vue-jsx': 2.1.1_vite@3.2.4+vue@3.2.45
  128 + '@typescript-eslint/eslint-plugin': 5.45.1_tdm6ms4ntwhlpozn7kjqrhum74
  129 + '@typescript-eslint/parser': 5.45.1_s5ps7njkmjlaqajutnox5ntcla
  130 + '@vitejs/plugin-legacy': 2.3.1_terser@5.16.1+vite@3.2.5
  131 + '@vitejs/plugin-vue': 3.2.0_vite@3.2.5+vue@3.2.45
  132 + '@vitejs/plugin-vue-jsx': 2.1.1_vite@3.2.5+vue@3.2.45
132 133 autoprefixer: 10.4.13_postcss@8.4.19
133   - eslint: 8.28.0
134   - eslint-config-prettier: 8.5.0_eslint@8.28.0
  134 + consola: 2.15.3
  135 + eslint: 8.29.0
  136 + eslint-config-prettier: 8.5.0_eslint@8.29.0
135 137 eslint-define-config: 1.12.0
136   - eslint-plugin-prettier: 4.2.1_cwlo2dingkvfydnaculr42urve
137   - eslint-plugin-vue: 9.8.0_eslint@8.28.0
138   - lint-staged: 13.0.4
139   - plop: 3.1.1
  138 + eslint-plugin-prettier: 4.2.1_nrhoyyjffvfyk4vtlt5destxgm
  139 + eslint-plugin-vue: 9.8.0_eslint@8.29.0
  140 + lint-staged: 13.1.0
140 141 postcss: 8.4.19
141 142 postcss-html: 1.5.0
142 143 postcss-scss: 4.0.6_postcss@8.4.19
143 144 prettier: 2.8.0
144 145 rimraf: 3.0.2
145   - rollup: 3.5.0
  146 + rollup: 3.6.0
146 147 sass: 1.56.1
147   - stylelint: 14.15.0
148   - stylelint-config-html: 1.1.0_qendsqix7hqecpnpx4fjs6qry4
149   - stylelint-config-prettier: 9.0.4_stylelint@14.15.0
150   - stylelint-config-recommended: 9.0.0_stylelint@14.15.0
151   - stylelint-config-standard: 29.0.0_stylelint@14.15.0
152   - stylelint-order: 5.0.0_stylelint@14.15.0
  148 + stylelint: 14.16.0
  149 + stylelint-config-html: 1.1.0_bto6pmslw3cibsiuq6smxboytq
  150 + stylelint-config-prettier: 9.0.4_stylelint@14.16.0
  151 + stylelint-config-recommended: 9.0.0_stylelint@14.16.0
  152 + stylelint-config-standard: 29.0.0_stylelint@14.16.0
  153 + stylelint-order: 5.0.0_stylelint@14.16.0
  154 + terser: 5.16.1
153 155 typescript: 4.9.3
154   - vite: 3.2.4_ajklay5k626t46b6fyghkbup3i
155   - vite-plugin-compression: 0.5.1_vite@3.2.4
156   - vite-plugin-eslint: 1.8.1_eslint@8.28.0+vite@3.2.4
157   - vite-plugin-html: 3.2.0_vite@3.2.4
158   - vite-plugin-progress: 0.0.6_vite@3.2.4
159   - vite-plugin-purge-icons: 0.9.1_vite@3.2.4
160   - vite-plugin-style-import: 2.0.0_vite@3.2.4
161   - vite-plugin-svg-icons: 2.0.1_vite@3.2.4
162   - vite-plugin-vue-setup-extend: 0.4.0_vite@3.2.4
163   - vite-plugin-windicss: 1.8.8_vite@3.2.4
164   - vue-tsc: registry.npmmirror.com/vue-tsc/1.0.10_typescript@4.9.3
  156 + vite: 3.2.5_egxhkvvxjoy6k24tlk4nbv6pfm
  157 + vite-plugin-compression: 0.5.1_vite@3.2.5
  158 + vite-plugin-ejs: 1.6.4
  159 + vite-plugin-eslint: 1.8.1_eslint@8.29.0+vite@3.2.5
  160 + vite-plugin-progress: 0.0.6_vite@3.2.5
  161 + vite-plugin-purge-icons: 0.9.1_vite@3.2.5
  162 + vite-plugin-style-import: 2.0.0_vite@3.2.5
  163 + vite-plugin-svg-icons: 2.0.1_vite@3.2.5
  164 + vite-plugin-vue-setup-extend: 0.4.0_vite@3.2.5
  165 + vite-plugin-windicss: 1.8.8_vite@3.2.5
  166 + vue-tsc: 1.0.11_typescript@4.9.3
165 167 windicss: 3.5.6
166 168  
167 169 packages:
... ... @@ -217,7 +219,7 @@ packages:
217 219 resolution: {integrity: sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==}
218 220 engines: {node: '>=6.9.0'}
219 221 dependencies:
220   - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2
  222 + '@babel/types': 7.20.2
221 223 '@jridgewell/gen-mapping': 0.3.2
222 224 jsesc: 2.5.2
223 225 dev: true
... ... @@ -226,7 +228,7 @@ packages:
226 228 resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==}
227 229 engines: {node: '>=6.9.0'}
228 230 dependencies:
229   - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2
  231 + '@babel/types': 7.20.2
230 232 dev: true
231 233  
232 234 /@babel/helper-compilation-targets/7.20.0_@babel+core@7.20.2:
... ... @@ -270,28 +272,28 @@ packages:
270 272 engines: {node: '>=6.9.0'}
271 273 dependencies:
272 274 '@babel/template': 7.18.10
273   - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2
  275 + '@babel/types': 7.20.2
274 276 dev: true
275 277  
276 278 /@babel/helper-hoist-variables/7.18.6:
277 279 resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==}
278 280 engines: {node: '>=6.9.0'}
279 281 dependencies:
280   - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2
  282 + '@babel/types': 7.20.2
281 283 dev: true
282 284  
283 285 /@babel/helper-member-expression-to-functions/7.18.9:
284 286 resolution: {integrity: sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==}
285 287 engines: {node: '>=6.9.0'}
286 288 dependencies:
287   - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2
  289 + '@babel/types': 7.20.2
288 290 dev: true
289 291  
290 292 /@babel/helper-module-imports/7.18.6:
291 293 resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==}
292 294 engines: {node: '>=6.9.0'}
293 295 dependencies:
294   - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2
  296 + '@babel/types': 7.20.2
295 297 dev: true
296 298  
297 299 /@babel/helper-module-transforms/7.20.2:
... ... @@ -302,10 +304,10 @@ packages:
302 304 '@babel/helper-module-imports': 7.18.6
303 305 '@babel/helper-simple-access': 7.20.2
304 306 '@babel/helper-split-export-declaration': 7.18.6
305   - '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier/7.19.1
  307 + '@babel/helper-validator-identifier': 7.19.1
306 308 '@babel/template': 7.18.10
307 309 '@babel/traverse': 7.20.1
308   - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2
  310 + '@babel/types': 7.20.2
309 311 transitivePeerDependencies:
310 312 - supports-color
311 313 dev: true
... ... @@ -314,7 +316,7 @@ packages:
314 316 resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==}
315 317 engines: {node: '>=6.9.0'}
316 318 dependencies:
317   - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2
  319 + '@babel/types': 7.20.2
318 320 dev: true
319 321  
320 322 /@babel/helper-plugin-utils/7.20.2:
... ... @@ -330,7 +332,7 @@ packages:
330 332 '@babel/helper-member-expression-to-functions': 7.18.9
331 333 '@babel/helper-optimise-call-expression': 7.18.6
332 334 '@babel/traverse': 7.20.1
333   - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2
  335 + '@babel/types': 7.20.2
334 336 transitivePeerDependencies:
335 337 - supports-color
336 338 dev: true
... ... @@ -339,16 +341,24 @@ packages:
339 341 resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==}
340 342 engines: {node: '>=6.9.0'}
341 343 dependencies:
342   - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2
  344 + '@babel/types': 7.20.2
343 345 dev: true
344 346  
345 347 /@babel/helper-split-export-declaration/7.18.6:
346 348 resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==}
347 349 engines: {node: '>=6.9.0'}
348 350 dependencies:
349   - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2
  351 + '@babel/types': 7.20.2
350 352 dev: true
351 353  
  354 + /@babel/helper-string-parser/7.19.4:
  355 + resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==}
  356 + engines: {node: '>=6.9.0'}
  357 +
  358 + /@babel/helper-validator-identifier/7.19.1:
  359 + resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
  360 + engines: {node: '>=6.9.0'}
  361 +
352 362 /@babel/helper-validator-option/7.18.6:
353 363 resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==}
354 364 engines: {node: '>=6.9.0'}
... ... @@ -360,7 +370,7 @@ packages:
360 370 dependencies:
361 371 '@babel/template': 7.18.10
362 372 '@babel/traverse': 7.20.1
363   - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2
  373 + '@babel/types': 7.20.2
364 374 transitivePeerDependencies:
365 375 - supports-color
366 376 dev: true
... ... @@ -369,7 +379,7 @@ packages:
369 379 resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==}
370 380 engines: {node: '>=6.9.0'}
371 381 dependencies:
372   - '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier/7.19.1
  382 + '@babel/helper-validator-identifier': 7.19.1
373 383 chalk: 2.4.2
374 384 js-tokens: 4.0.0
375 385 dev: true
... ... @@ -379,7 +389,7 @@ packages:
379 389 engines: {node: '>=6.0.0'}
380 390 hasBin: true
381 391 dependencies:
382   - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2
  392 + '@babel/types': 7.20.2
383 393  
384 394 /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.2:
385 395 resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==}
... ... @@ -422,13 +432,18 @@ packages:
422 432 regenerator-runtime: 0.13.11
423 433 dev: false
424 434  
  435 + /@babel/standalone/7.20.6:
  436 + resolution: {integrity: sha512-u5at/CbBLETf7kx2LOY4XdhseD79Y099WZKAOMXeT8qvd9OSR515my2UNBBLY4qIht/Qi9KySeQHQwQwxJN4Sw==}
  437 + engines: {node: '>=6.9.0'}
  438 + dev: true
  439 +
425 440 /@babel/template/7.18.10:
426 441 resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==}
427 442 engines: {node: '>=6.9.0'}
428 443 dependencies:
429 444 '@babel/code-frame': 7.18.6
430   - '@babel/parser': registry.npmmirror.com/@babel/parser/7.20.3
431   - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2
  445 + '@babel/parser': 7.20.3
  446 + '@babel/types': 7.20.2
432 447 dev: true
433 448  
434 449 /@babel/traverse/7.20.1:
... ... @@ -441,8 +456,8 @@ packages:
441 456 '@babel/helper-function-name': 7.19.0
442 457 '@babel/helper-hoist-variables': 7.18.6
443 458 '@babel/helper-split-export-declaration': 7.18.6
444   - '@babel/parser': registry.npmmirror.com/@babel/parser/7.20.3
445   - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2
  459 + '@babel/parser': 7.20.3
  460 + '@babel/types': 7.20.2
446 461 debug: 4.3.4
447 462 globals: 11.12.0
448 463 transitivePeerDependencies:
... ... @@ -453,10 +468,9 @@ packages:
453 468 resolution: {integrity: sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==}
454 469 engines: {node: '>=6.9.0'}
455 470 dependencies:
456   - '@babel/helper-string-parser': registry.npmmirror.com/@babel/helper-string-parser/7.19.4
457   - '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier/7.19.1
458   - to-fast-properties: registry.npmmirror.com/to-fast-properties/2.0.0
459   - dev: true
  471 + '@babel/helper-string-parser': 7.19.4
  472 + '@babel/helper-validator-identifier': 7.19.1
  473 + to-fast-properties: 2.0.0
460 474  
461 475 /@commitlint/cli/17.3.0:
462 476 resolution: {integrity: sha512-/H0md7TsKflKzVPz226VfXzVafJFO1f9+r2KcFvmBu08V0T56lZU1s8WL7/xlxqLMqBTVaBf7Ixtc4bskdEEZg==}
... ... @@ -633,7 +647,7 @@ packages:
633 647 '@jridgewell/trace-mapping': 0.3.9
634 648 dev: true
635 649  
636   - /@csstools/selector-specificity/2.0.2_45y636a2vqremknoajyxd5nkzy:
  650 + /@csstools/selector-specificity/2.0.2_tbwh2mpcdwdeb2slx6bobindua:
637 651 resolution: {integrity: sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==}
638 652 engines: {node: ^12 || ^14 || >=16}
639 653 peerDependencies:
... ... @@ -641,7 +655,7 @@ packages:
641 655 postcss-selector-parser: ^6.0.10
642 656 dependencies:
643 657 postcss: 8.4.19
644   - postcss-selector-parser: 6.0.10
  658 + postcss-selector-parser: 6.0.11
645 659 dev: true
646 660  
647 661 /@ctrl/tinycolor/3.4.1:
... ... @@ -657,6 +671,24 @@ packages:
657 671 vue: 3.2.45
658 672 dev: false
659 673  
  674 + /@esbuild/android-arm/0.15.14:
  675 + resolution: {integrity: sha512-+Rb20XXxRGisNu2WmNKk+scpanb7nL5yhuI1KR9wQFiC43ddPj/V1fmNyzlFC9bKiG4mYzxW7egtoHVcynr+OA==}
  676 + engines: {node: '>=12'}
  677 + cpu: [arm]
  678 + os: [android]
  679 + requiresBuild: true
  680 + dev: true
  681 + optional: true
  682 +
  683 + /@esbuild/linux-loong64/0.15.14:
  684 + resolution: {integrity: sha512-eQi9rosGNVQFJyJWV0HCA5WZae/qWIQME7s8/j8DMvnylfBv62Pbu+zJ2eUDqNf2O4u3WB+OEXyfkpBoe194sg==}
  685 + engines: {node: '>=12'}
  686 + cpu: [loong64]
  687 + os: [linux]
  688 + requiresBuild: true
  689 + dev: true
  690 + optional: true
  691 +
660 692 /@eslint/eslintrc/1.3.3:
661 693 resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==}
662 694 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
... ... @@ -717,8 +749,8 @@ packages:
717 749 dependencies:
718 750 '@iconify/types': 2.0.0
719 751  
720   - /@iconify/json/2.1.145:
721   - resolution: {integrity: sha512-cYU5F2lOPTaUtq9Uulrv66Wrh4XQxWj50xk6d9LeMQZY8IMm2DqICONHVlhOeoYBbCwa0kOt9/W6pMWYB9BomQ==}
  752 + /@iconify/json/2.1.149:
  753 + resolution: {integrity: sha512-9tVyhAbj7Avf3JkwpLxxROI7zr5Fd2KBMAYZMo0S+K+OEqW/3ryWwbxOpHZG74zu0FPLQGLVtBfyHjjZynDMgA==}
722 754 dependencies:
723 755 '@iconify/types': 2.0.0
724 756 pathe: 0.3.9
... ... @@ -739,8 +771,8 @@ packages:
739 771 vue-i18n:
740 772 optional: true
741 773 dependencies:
742   - '@intlify/message-compiler': registry.npmmirror.com/@intlify/message-compiler/9.3.0-beta.10
743   - '@intlify/shared': registry.npmmirror.com/@intlify/shared/9.3.0-beta.10
  774 + '@intlify/message-compiler': 9.3.0-beta.10
  775 + '@intlify/shared': 9.3.0-beta.10
744 776 jsonc-eslint-parser: 1.4.1
745 777 source-map: 0.6.1
746 778 vue-i18n: 9.2.2_vue@3.2.45
... ... @@ -753,27 +785,40 @@ packages:
753 785 dependencies:
754 786 '@intlify/devtools-if': 9.2.2
755 787 '@intlify/message-compiler': 9.2.2
756   - '@intlify/shared': registry.npmmirror.com/@intlify/shared/9.2.2
  788 + '@intlify/shared': 9.2.2
757 789 '@intlify/vue-devtools': 9.2.2
758 790  
759 791 /@intlify/devtools-if/9.2.2:
760 792 resolution: {integrity: sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg==}
761 793 engines: {node: '>= 14'}
762 794 dependencies:
763   - '@intlify/shared': registry.npmmirror.com/@intlify/shared/9.2.2
  795 + '@intlify/shared': 9.2.2
764 796  
765 797 /@intlify/message-compiler/9.2.2:
766 798 resolution: {integrity: sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA==}
767 799 engines: {node: '>= 14'}
768 800 dependencies:
769   - '@intlify/shared': registry.npmmirror.com/@intlify/shared/9.2.2
770   - source-map: registry.npmmirror.com/source-map/0.6.1
  801 + '@intlify/shared': 9.2.2
  802 + source-map: 0.6.1
  803 +
  804 + /@intlify/message-compiler/9.3.0-beta.10:
  805 + resolution: {integrity: sha512-RoOC6yceOykLRhN0NlbkNOBUx1el6iphx3W8NfOx3jHVNtfT1FYokx14/5sU3F1F0uxeG4sp6q+ppKvaF8o+ww==}
  806 + engines: {node: '>= 14'}
  807 + dependencies:
  808 + '@intlify/shared': 9.3.0-beta.10
  809 + source-map: 0.6.1
  810 + dev: true
771 811  
772 812 /@intlify/shared/9.2.2:
773 813 resolution: {integrity: sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==}
774 814 engines: {node: '>= 14'}
775 815  
776   - /@intlify/vite-plugin-vue-i18n/6.0.3_vite@3.2.4+vue-i18n@9.2.2:
  816 + /@intlify/shared/9.3.0-beta.10:
  817 + resolution: {integrity: sha512-h93uAanbAt/XgjDHclrVB7xix6r7Uz11wx0iGNOCdHP7aA2LCJjUT3uNbekJjjbo+Fl5jzTSJZdm2SexzoqhRA==}
  818 + engines: {node: '>= 14'}
  819 + dev: true
  820 +
  821 + /@intlify/vite-plugin-vue-i18n/6.0.3_vite@3.2.5+vue-i18n@9.2.2:
777 822 resolution: {integrity: sha512-6SgNzPAOCR90wvt368lKzi7f/5ZEWJn22UCGvhFsP3XvKqlF3cVzojahgQ6o+LTdCkExeM6wPgd+haFf28E9VQ==}
778 823 engines: {node: '>= 14.6'}
779 824 peerDependencies:
... ... @@ -789,12 +834,12 @@ packages:
789 834 optional: true
790 835 dependencies:
791 836 '@intlify/bundle-utils': 3.4.0_vue-i18n@9.2.2
792   - '@intlify/shared': registry.npmmirror.com/@intlify/shared/9.3.0-beta.10
  837 + '@intlify/shared': 9.3.0-beta.10
793 838 '@rollup/pluginutils': 4.2.1
794 839 debug: 4.3.4
795 840 fast-glob: 3.2.12
796 841 source-map: 0.6.1
797   - vite: 3.2.4_ajklay5k626t46b6fyghkbup3i
  842 + vite: 3.2.5_egxhkvvxjoy6k24tlk4nbv6pfm
798 843 vue-i18n: 9.2.2_vue@3.2.45
799 844 transitivePeerDependencies:
800 845 - supports-color
... ... @@ -805,7 +850,7 @@ packages:
805 850 engines: {node: '>= 14'}
806 851 dependencies:
807 852 '@intlify/core-base': 9.2.2
808   - '@intlify/shared': registry.npmmirror.com/@intlify/shared/9.2.2
  853 + '@intlify/shared': 9.2.2
809 854  
810 855 /@jridgewell/gen-mapping/0.1.1:
811 856 resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==}
... ... @@ -907,6 +952,10 @@ packages:
907 952 picomatch: 2.3.1
908 953 dev: true
909 954  
  955 + /@sxzz/popperjs-es/2.11.7:
  956 + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==}
  957 + dev: false
  958 +
910 959 /@transloadit/prettier-bytes/0.0.7:
911 960 resolution: {integrity: sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA==}
912 961 dev: false
... ... @@ -947,29 +996,12 @@ packages:
947 996 resolution: {integrity: sha512-UfnOK1pIxO7P+EgPRZXD9jMpimd8QEFcEZ5R67R1UhGbv4zghU5+NE7U8M8G9H5Jc8FI51rqDWQs6FtUfq2e/Q==}
948 997 dev: false
949 998  
950   - /@types/fined/1.1.3:
951   - resolution: {integrity: sha512-CWYnSRnun3CGbt6taXeVo2lCbuaj4mchVJ4UF/BdU5TSuIn3AmS13pGMwCsBUoehGbhZrBrpNJZSZI5EVilXww==}
952   - dev: true
953   -
954   - /@types/inquirer/8.2.5:
955   - resolution: {integrity: sha512-QXlzybid60YtAwfgG3cpykptRYUx2KomzNutMlWsQC64J/WG/gQSl+P4w7A21sGN0VIxRVava4rgnT7FQmFCdg==}
956   - dependencies:
957   - '@types/through': 0.0.30
958   - dev: true
959   -
960 999 /@types/intro.js/5.1.0:
961 1000 resolution: {integrity: sha512-XHkD6t7f3bn8B2//kOlznRzmk15KvsRkFpY6i8em/eDphblQ8QHbCiW+6OPjX7CxI0aVNVJK6Yamb2h2KMmFdA==}
962 1001 dev: true
963 1002  
964 1003 /@types/json-schema/7.0.11:
965   - resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==}
966   - dev: true
967   -
968   - /@types/liftoff/4.0.0:
969   - resolution: {integrity: sha512-Ny/PJkO6nxWAQnaet8q/oWz15lrfwvdvBpuY4treB0CSsBO1CG0fVuNLngR3m3bepQLd+E4c3Y3DlC2okpUvPw==}
970   - dependencies:
971   - '@types/fined': 1.1.3
972   - '@types/node': 18.11.9
  1004 + resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==, registry: https://registry.npm.taobao.org/}
973 1005 dev: true
974 1006  
975 1007 /@types/lodash-es/4.17.6:
... ... @@ -985,15 +1017,15 @@ packages:
985 1017 dev: true
986 1018  
987 1019 /@types/node/10.17.60:
988   - resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==}
  1020 + resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==, registry: https://registry.npm.taobao.org/}
989 1021 dev: true
990 1022  
991 1023 /@types/node/14.18.33:
992   - resolution: {integrity: sha512-qelS/Ra6sacc4loe/3MSjXNL1dNQ/GjxNHVzuChwMfmk7HuycRLVQN2qNY3XahK+fZc5E2szqQSKUyAF0E+2bg==}
  1024 + resolution: {integrity: sha512-qelS/Ra6sacc4loe/3MSjXNL1dNQ/GjxNHVzuChwMfmk7HuycRLVQN2qNY3XahK+fZc5E2szqQSKUyAF0E+2bg==, registry: https://registry.npm.taobao.org/}
993 1025 dev: true
994 1026  
995   - /@types/node/18.11.9:
996   - resolution: {integrity: sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==}
  1027 + /@types/node/18.11.11:
  1028 + resolution: {integrity: sha512-KJ021B1nlQUBLopzZmPBVuGU9un7WJd/W4ya7Ih02B4Uwky5Nja0yGYav2EfYIk0RR2Q9oVhf60S2XR1BCWJ2g==, registry: https://registry.npm.taobao.org/}
997 1029 dev: true
998 1030  
999 1031 /@types/normalize-package-data/2.4.1:
... ... @@ -1011,7 +1043,7 @@ packages:
1011 1043 /@types/qrcode/1.5.0:
1012 1044 resolution: {integrity: sha512-x5ilHXRxUPIMfjtM+1vf/GPTRWZ81nqscursm5gMznJeK9M0YnZ1c3bEvRLQ0zSSgedLx1J6MGL231ObQGGhaA==}
1013 1045 dependencies:
1014   - '@types/node': 18.11.9
  1046 + '@types/node': 18.11.11
1015 1047 dev: true
1016 1048  
1017 1049 /@types/qs/6.9.7:
... ... @@ -1019,27 +1051,21 @@ packages:
1019 1051 dev: true
1020 1052  
1021 1053 /@types/semver/7.3.13:
1022   - resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==}
  1054 + resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==, registry: https://registry.npm.taobao.org/}
1023 1055 dev: true
1024 1056  
1025 1057 /@types/svgo/2.6.4:
1026 1058 resolution: {integrity: sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==}
1027 1059 dependencies:
1028   - '@types/node': 18.11.9
1029   - dev: true
1030   -
1031   - /@types/through/0.0.30:
1032   - resolution: {integrity: sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==}
1033   - dependencies:
1034   - '@types/node': 18.11.9
  1060 + '@types/node': 18.11.11
1035 1061 dev: true
1036 1062  
1037 1063 /@types/web-bluetooth/0.0.16:
1038 1064 resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==}
1039 1065 dev: false
1040 1066  
1041   - /@typescript-eslint/eslint-plugin/5.45.0_czs5uoqkd3podpy6vgtsxfc7au:
1042   - resolution: {integrity: sha512-CXXHNlf0oL+Yg021cxgOdMHNTXD17rHkq7iW6RFHoybdFgQBjU3yIXhhcPpGwr1CjZlo6ET8C6tzX5juQoXeGA==}
  1067 + /@typescript-eslint/eslint-plugin/5.45.1_tdm6ms4ntwhlpozn7kjqrhum74:
  1068 + resolution: {integrity: sha512-cOizjPlKEh0bXdFrBLTrI/J6B/QMlhwE9auOov53tgB+qMukH6/h8YAK/qw+QJGct/PTbdh2lytGyipxCcEtAw==, registry: https://registry.npm.taobao.org/}
1043 1069 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1044 1070 peerDependencies:
1045 1071 '@typescript-eslint/parser': ^5.0.0
... ... @@ -1049,13 +1075,13 @@ packages:
1049 1075 typescript:
1050 1076 optional: true
1051 1077 dependencies:
1052   - '@typescript-eslint/parser': 5.45.0_hsf322ms6xhhd4b5ne6lb74y4a
1053   - '@typescript-eslint/scope-manager': 5.45.0
1054   - '@typescript-eslint/type-utils': 5.45.0_hsf322ms6xhhd4b5ne6lb74y4a
1055   - '@typescript-eslint/utils': 5.45.0_hsf322ms6xhhd4b5ne6lb74y4a
  1078 + '@typescript-eslint/parser': 5.45.1_s5ps7njkmjlaqajutnox5ntcla
  1079 + '@typescript-eslint/scope-manager': 5.45.1
  1080 + '@typescript-eslint/type-utils': 5.45.1_s5ps7njkmjlaqajutnox5ntcla
  1081 + '@typescript-eslint/utils': 5.45.1_s5ps7njkmjlaqajutnox5ntcla
1056 1082 debug: 4.3.4
1057   - eslint: 8.28.0
1058   - ignore: 5.2.0
  1083 + eslint: 8.29.0
  1084 + ignore: 5.2.1
1059 1085 natural-compare-lite: 1.4.0
1060 1086 regexpp: 3.2.0
1061 1087 semver: 7.3.8
... ... @@ -1065,8 +1091,8 @@ packages:
1065 1091 - supports-color
1066 1092 dev: true
1067 1093  
1068   - /@typescript-eslint/parser/5.45.0_hsf322ms6xhhd4b5ne6lb74y4a:
1069   - resolution: {integrity: sha512-brvs/WSM4fKUmF5Ot/gEve6qYiCMjm6w4HkHPfS6ZNmxTS0m0iNN4yOChImaCkqc1hRwFGqUyanMXuGal6oyyQ==}
  1094 + /@typescript-eslint/parser/5.45.1_s5ps7njkmjlaqajutnox5ntcla:
  1095 + resolution: {integrity: sha512-JQ3Ep8bEOXu16q0ztsatp/iQfDCtvap7sp/DKo7DWltUquj5AfCOpX2zSzJ8YkAVnrQNqQ5R62PBz2UtrfmCkA==, registry: https://registry.npm.taobao.org/}
1070 1096 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1071 1097 peerDependencies:
1072 1098 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
... ... @@ -1075,26 +1101,26 @@ packages:
1075 1101 typescript:
1076 1102 optional: true
1077 1103 dependencies:
1078   - '@typescript-eslint/scope-manager': 5.45.0
1079   - '@typescript-eslint/types': 5.45.0
1080   - '@typescript-eslint/typescript-estree': 5.45.0_typescript@4.9.3
  1104 + '@typescript-eslint/scope-manager': 5.45.1
  1105 + '@typescript-eslint/types': 5.45.1
  1106 + '@typescript-eslint/typescript-estree': 5.45.1_typescript@4.9.3
1081 1107 debug: 4.3.4
1082   - eslint: 8.28.0
  1108 + eslint: 8.29.0
1083 1109 typescript: 4.9.3
1084 1110 transitivePeerDependencies:
1085 1111 - supports-color
1086 1112 dev: true
1087 1113  
1088   - /@typescript-eslint/scope-manager/5.45.0:
1089   - resolution: {integrity: sha512-noDMjr87Arp/PuVrtvN3dXiJstQR1+XlQ4R1EvzG+NMgXi8CuMCXpb8JqNtFHKceVSQ985BZhfRdowJzbv4yKw==}
  1114 + /@typescript-eslint/scope-manager/5.45.1:
  1115 + resolution: {integrity: sha512-D6fCileR6Iai7E35Eb4Kp+k0iW7F1wxXYrOhX/3dywsOJpJAQ20Fwgcf+P/TDtvQ7zcsWsrJaglaQWDhOMsspQ==, registry: https://registry.npm.taobao.org/}
1090 1116 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1091 1117 dependencies:
1092   - '@typescript-eslint/types': 5.45.0
1093   - '@typescript-eslint/visitor-keys': 5.45.0
  1118 + '@typescript-eslint/types': 5.45.1
  1119 + '@typescript-eslint/visitor-keys': 5.45.1
1094 1120 dev: true
1095 1121  
1096   - /@typescript-eslint/type-utils/5.45.0_hsf322ms6xhhd4b5ne6lb74y4a:
1097   - resolution: {integrity: sha512-DY7BXVFSIGRGFZ574hTEyLPRiQIvI/9oGcN8t1A7f6zIs6ftbrU0nhyV26ZW//6f85avkwrLag424n+fkuoJ1Q==}
  1122 + /@typescript-eslint/type-utils/5.45.1_s5ps7njkmjlaqajutnox5ntcla:
  1123 + resolution: {integrity: sha512-aosxFa+0CoYgYEl3aptLe1svP910DJq68nwEJzyQcrtRhC4BN0tJAvZGAe+D0tzjJmFXe+h4leSsiZhwBa2vrA==, registry: https://registry.npm.taobao.org/}
1098 1124 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1099 1125 peerDependencies:
1100 1126 eslint: '*'
... ... @@ -1103,23 +1129,23 @@ packages:
1103 1129 typescript:
1104 1130 optional: true
1105 1131 dependencies:
1106   - '@typescript-eslint/typescript-estree': 5.45.0_typescript@4.9.3
1107   - '@typescript-eslint/utils': 5.45.0_hsf322ms6xhhd4b5ne6lb74y4a
  1132 + '@typescript-eslint/typescript-estree': 5.45.1_typescript@4.9.3
  1133 + '@typescript-eslint/utils': 5.45.1_s5ps7njkmjlaqajutnox5ntcla
1108 1134 debug: 4.3.4
1109   - eslint: 8.28.0
  1135 + eslint: 8.29.0
1110 1136 tsutils: 3.21.0_typescript@4.9.3
1111 1137 typescript: 4.9.3
1112 1138 transitivePeerDependencies:
1113 1139 - supports-color
1114 1140 dev: true
1115 1141  
1116   - /@typescript-eslint/types/5.45.0:
1117   - resolution: {integrity: sha512-QQij+u/vgskA66azc9dCmx+rev79PzX8uDHpsqSjEFtfF2gBUTRCpvYMh2gw2ghkJabNkPlSUCimsyBEQZd1DA==}
  1142 + /@typescript-eslint/types/5.45.1:
  1143 + resolution: {integrity: sha512-HEW3U0E5dLjUT+nk7b4lLbOherS1U4ap+b9pfu2oGsW3oPu7genRaY9dDv3nMczC1rbnRY2W/D7SN05wYoGImg==, registry: https://registry.npm.taobao.org/}
1118 1144 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1119 1145 dev: true
1120 1146  
1121   - /@typescript-eslint/typescript-estree/5.45.0_typescript@4.9.3:
1122   - resolution: {integrity: sha512-maRhLGSzqUpFcZgXxg1qc/+H0bT36lHK4APhp0AEUVrpSwXiRAomm/JGjSG+kNUio5kAa3uekCYu/47cnGn5EQ==}
  1147 + /@typescript-eslint/typescript-estree/5.45.1_typescript@4.9.3:
  1148 + resolution: {integrity: sha512-76NZpmpCzWVrrb0XmYEpbwOz/FENBi+5W7ipVXAsG3OoFrQKJMiaqsBMbvGRyLtPotGqUfcY7Ur8j0dksDJDng==, registry: https://registry.npm.taobao.org/}
1123 1149 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1124 1150 peerDependencies:
1125 1151 typescript: '*'
... ... @@ -1127,8 +1153,8 @@ packages:
1127 1153 typescript:
1128 1154 optional: true
1129 1155 dependencies:
1130   - '@typescript-eslint/types': 5.45.0
1131   - '@typescript-eslint/visitor-keys': 5.45.0
  1156 + '@typescript-eslint/types': 5.45.1
  1157 + '@typescript-eslint/visitor-keys': 5.45.1
1132 1158 debug: 4.3.4
1133 1159 globby: 11.1.0
1134 1160 is-glob: 4.0.3
... ... @@ -1139,31 +1165,31 @@ packages:
1139 1165 - supports-color
1140 1166 dev: true
1141 1167  
1142   - /@typescript-eslint/utils/5.45.0_hsf322ms6xhhd4b5ne6lb74y4a:
1143   - resolution: {integrity: sha512-OUg2JvsVI1oIee/SwiejTot2OxwU8a7UfTFMOdlhD2y+Hl6memUSL4s98bpUTo8EpVEr0lmwlU7JSu/p2QpSvA==}
  1168 + /@typescript-eslint/utils/5.45.1_s5ps7njkmjlaqajutnox5ntcla:
  1169 + resolution: {integrity: sha512-rlbC5VZz68+yjAzQBc4I7KDYVzWG2X/OrqoZrMahYq3u8FFtmQYc+9rovo/7wlJH5kugJ+jQXV5pJMnofGmPRw==, registry: https://registry.npm.taobao.org/}
1144 1170 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1145 1171 peerDependencies:
1146 1172 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
1147 1173 dependencies:
1148 1174 '@types/json-schema': 7.0.11
1149 1175 '@types/semver': 7.3.13
1150   - '@typescript-eslint/scope-manager': 5.45.0
1151   - '@typescript-eslint/types': 5.45.0
1152   - '@typescript-eslint/typescript-estree': 5.45.0_typescript@4.9.3
1153   - eslint: 8.28.0
  1176 + '@typescript-eslint/scope-manager': 5.45.1
  1177 + '@typescript-eslint/types': 5.45.1
  1178 + '@typescript-eslint/typescript-estree': 5.45.1_typescript@4.9.3
  1179 + eslint: 8.29.0
1154 1180 eslint-scope: 5.1.1
1155   - eslint-utils: 3.0.0_eslint@8.28.0
  1181 + eslint-utils: 3.0.0_eslint@8.29.0
1156 1182 semver: 7.3.8
1157 1183 transitivePeerDependencies:
1158 1184 - supports-color
1159 1185 - typescript
1160 1186 dev: true
1161 1187  
1162   - /@typescript-eslint/visitor-keys/5.45.0:
1163   - resolution: {integrity: sha512-jc6Eccbn2RtQPr1s7th6jJWQHBHI6GBVQkCHoJFQ5UreaKm59Vxw+ynQUPPY2u2Amquc+7tmEoC2G52ApsGNNg==}
  1188 + /@typescript-eslint/visitor-keys/5.45.1:
  1189 + resolution: {integrity: sha512-cy9ln+6rmthYWjH9fmx+5FU/JDpjQb586++x2FZlveq7GdGuLLW9a2Jcst2TGekH82bXpfmRNSwP9tyEs6RjvQ==, registry: https://registry.npm.taobao.org/}
1164 1190 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1165 1191 dependencies:
1166   - '@typescript-eslint/types': 5.45.0
  1192 + '@typescript-eslint/types': 5.45.1
1167 1193 eslint-visitor-keys: 3.3.0
1168 1194 dev: true
1169 1195  
... ... @@ -1208,7 +1234,23 @@ packages:
1208 1234 nanoid: 3.3.4
1209 1235 dev: false
1210 1236  
1211   - /@vitejs/plugin-vue-jsx/2.1.1_vite@3.2.4+vue@3.2.45:
  1237 + /@vitejs/plugin-legacy/2.3.1_terser@5.16.1+vite@3.2.5:
  1238 + resolution: {integrity: sha512-J5KaGBlSt2tEYPVjM/C8dA6DkRzkFkbPe+Xb4IX5G+XOV5OGbVAfkMjKywdrkO3gGynO8S98i71Lmsff4cWkCQ==}
  1239 + engines: {node: ^14.18.0 || >=16.0.0}
  1240 + peerDependencies:
  1241 + terser: ^5.4.0
  1242 + vite: ^3.0.0
  1243 + dependencies:
  1244 + '@babel/standalone': 7.20.6
  1245 + core-js: 3.26.1
  1246 + magic-string: 0.26.7
  1247 + regenerator-runtime: 0.13.11
  1248 + systemjs: 6.13.0
  1249 + terser: 5.16.1
  1250 + vite: 3.2.5_egxhkvvxjoy6k24tlk4nbv6pfm
  1251 + dev: true
  1252 +
  1253 + /@vitejs/plugin-vue-jsx/2.1.1_vite@3.2.5+vue@3.2.45:
1212 1254 resolution: {integrity: sha512-JgDhxstQlwnHBvZ1BSnU5mbmyQ14/t5JhREc6YH5kWyu2QdAAOsLF6xgHoIWarj8tddaiwFrNzLbWJPudpXKYA==}
1213 1255 engines: {node: ^14.18.0 || >=16.0.0}
1214 1256 peerDependencies:
... ... @@ -1218,23 +1260,63 @@ packages:
1218 1260 '@babel/core': 7.20.2
1219 1261 '@babel/plugin-transform-typescript': 7.20.2_@babel+core@7.20.2
1220 1262 '@vue/babel-plugin-jsx': 1.1.1_@babel+core@7.20.2
1221   - vite: 3.2.4_ajklay5k626t46b6fyghkbup3i
  1263 + vite: 3.2.5_egxhkvvxjoy6k24tlk4nbv6pfm
1222 1264 vue: 3.2.45
1223 1265 transitivePeerDependencies:
1224 1266 - supports-color
1225 1267 dev: true
1226 1268  
1227   - /@vitejs/plugin-vue/3.2.0_vite@3.2.4+vue@3.2.45:
  1269 + /@vitejs/plugin-vue/3.2.0_vite@3.2.5+vue@3.2.45:
1228 1270 resolution: {integrity: sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw==}
1229 1271 engines: {node: ^14.18.0 || >=16.0.0}
1230 1272 peerDependencies:
1231 1273 vite: ^3.0.0
1232 1274 vue: ^3.2.25
1233 1275 dependencies:
1234   - vite: 3.2.4_ajklay5k626t46b6fyghkbup3i
  1276 + vite: 3.2.5_egxhkvvxjoy6k24tlk4nbv6pfm
1235 1277 vue: 3.2.45
1236 1278 dev: true
1237 1279  
  1280 + /@volar/language-core/1.0.11:
  1281 + resolution: {integrity: sha512-YwUYKxIyDc+Fq3kQ6BGGfkrKCG5JzE2Yr6vMxrxEXW2rg/gsq3JgMk/4sI8ybRsaTirhCB4V8+AIVYsvcRxgig==}
  1282 + dependencies:
  1283 + '@volar/source-map': 1.0.11
  1284 + '@vue/reactivity': 3.2.45
  1285 + muggle-string: 0.1.0
  1286 + dev: true
  1287 +
  1288 + /@volar/source-map/1.0.11:
  1289 + resolution: {integrity: sha512-tkuV9MD+OuiZfHA0qZXrPdW6F7TvnpnuTan6Qe7UGUs9+sflezlMJdjaYdGgQObfP+06pcT1E3xdkOoi08ZyyQ==}
  1290 + dependencies:
  1291 + muggle-string: 0.1.0
  1292 + dev: true
  1293 +
  1294 + /@volar/typescript/1.0.11:
  1295 + resolution: {integrity: sha512-mq7wDDAs0Eb43jev2FxbowuiwWqvL3kb+tar1we8VQbdabpyQ5dmbWPwo/IglevMmW3SKo1Et+6rqAeZpXNnPQ==}
  1296 + dependencies:
  1297 + '@volar/language-core': 1.0.11
  1298 + dev: true
  1299 +
  1300 + /@volar/vue-language-core/1.0.11:
  1301 + resolution: {integrity: sha512-A3ODs0/ua7BcpSSnE7KtO8bzWsYsbOJRyW2Q/2uktxlfHj8srln3JdgK/mNlIgfnWtACbE5K+EfMJOgJKv864A==}
  1302 + dependencies:
  1303 + '@volar/language-core': 1.0.11
  1304 + '@volar/source-map': 1.0.11
  1305 + '@vue/compiler-dom': 3.2.45
  1306 + '@vue/compiler-sfc': 3.2.45
  1307 + '@vue/reactivity': 3.2.45
  1308 + '@vue/shared': 3.2.45
  1309 + minimatch: 5.1.0
  1310 + vue-template-compiler: 2.7.14
  1311 + dev: true
  1312 +
  1313 + /@volar/vue-typescript/1.0.11:
  1314 + resolution: {integrity: sha512-jlnFPvBcTyPiAbGlgjhKK7fp3Q+Z7Z5eU1NTbTSS0lQC8Gog3sh2UxLAFG5Voe1gHIxasoOEPXzMR0CWF4bKbA==}
  1315 + dependencies:
  1316 + '@volar/typescript': 1.0.11
  1317 + '@volar/vue-language-core': 1.0.11
  1318 + dev: true
  1319 +
1238 1320 /@vue/babel-helper-vue-transform-on/1.0.2:
1239 1321 resolution: {integrity: sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==}
1240 1322 dev: true
... ... @@ -1259,16 +1341,16 @@ packages:
1259 1341 /@vue/compiler-core/3.2.45:
1260 1342 resolution: {integrity: sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==}
1261 1343 dependencies:
1262   - '@babel/parser': registry.npmmirror.com/@babel/parser/7.20.3
1263   - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45
1264   - estree-walker: registry.npmmirror.com/estree-walker/2.0.2
1265   - source-map: registry.npmmirror.com/source-map/0.6.1
  1344 + '@babel/parser': 7.20.3
  1345 + '@vue/shared': 3.2.45
  1346 + estree-walker: 2.0.2
  1347 + source-map: 0.6.1
1266 1348  
1267 1349 /@vue/compiler-dom/3.2.45:
1268 1350 resolution: {integrity: sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==}
1269 1351 dependencies:
1270   - '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core/3.2.45
1271   - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45
  1352 + '@vue/compiler-core': 3.2.45
  1353 + '@vue/shared': 3.2.45
1272 1354  
1273 1355 /@vue/compiler-sfc/3.2.45:
1274 1356 resolution: {integrity: sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==}
... ... @@ -1287,8 +1369,8 @@ packages:
1287 1369 /@vue/compiler-ssr/3.2.45:
1288 1370 resolution: {integrity: sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==}
1289 1371 dependencies:
1290   - '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom/3.2.45
1291   - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45
  1372 + '@vue/compiler-dom': 3.2.45
  1373 + '@vue/shared': 3.2.45
1292 1374  
1293 1375 /@vue/devtools-api/6.4.5:
1294 1376 resolution: {integrity: sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ==}
... ... @@ -1296,23 +1378,28 @@ packages:
1296 1378 /@vue/reactivity-transform/3.2.45:
1297 1379 resolution: {integrity: sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==}
1298 1380 dependencies:
1299   - '@babel/parser': registry.npmmirror.com/@babel/parser/7.20.3
1300   - '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core/3.2.45
1301   - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45
1302   - estree-walker: registry.npmmirror.com/estree-walker/2.0.2
1303   - magic-string: registry.npmmirror.com/magic-string/0.25.9
  1381 + '@babel/parser': 7.20.3
  1382 + '@vue/compiler-core': 3.2.45
  1383 + '@vue/shared': 3.2.45
  1384 + estree-walker: 2.0.2
  1385 + magic-string: 0.25.9
  1386 +
  1387 + /@vue/reactivity/3.2.45:
  1388 + resolution: {integrity: sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==}
  1389 + dependencies:
  1390 + '@vue/shared': 3.2.45
1304 1391  
1305 1392 /@vue/runtime-core/3.2.45:
1306 1393 resolution: {integrity: sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==}
1307 1394 dependencies:
1308   - '@vue/reactivity': registry.npmmirror.com/@vue/reactivity/3.2.45
1309   - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45
  1395 + '@vue/reactivity': 3.2.45
  1396 + '@vue/shared': 3.2.45
1310 1397  
1311 1398 /@vue/runtime-dom/3.2.45:
1312 1399 resolution: {integrity: sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==}
1313 1400 dependencies:
1314 1401 '@vue/runtime-core': 3.2.45
1315   - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45
  1402 + '@vue/shared': 3.2.45
1316 1403 csstype: 2.6.21
1317 1404  
1318 1405 /@vue/server-renderer/3.2.45_vue@3.2.45:
... ... @@ -1320,8 +1407,8 @@ packages:
1320 1407 peerDependencies:
1321 1408 vue: 3.2.45
1322 1409 dependencies:
1323   - '@vue/compiler-ssr': registry.npmmirror.com/@vue/compiler-ssr/3.2.45
1324   - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45
  1410 + '@vue/compiler-ssr': 3.2.45
  1411 + '@vue/shared': 3.2.45
1325 1412 vue: 3.2.45
1326 1413  
1327 1414 /@vue/shared/3.2.45:
... ... @@ -1712,20 +1799,10 @@ packages:
1712 1799 engines: {node: '>=0.10.0'}
1713 1800 dev: true
1714 1801  
1715   - /array-each/1.0.1:
1716   - resolution: {integrity: sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==}
1717   - engines: {node: '>=0.10.0'}
1718   - dev: true
1719   -
1720 1802 /array-ify/1.0.0:
1721 1803 resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==}
1722 1804 dev: true
1723 1805  
1724   - /array-slice/1.1.0:
1725   - resolution: {integrity: sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==}
1726   - engines: {node: '>=0.10.0'}
1727   - dev: true
1728   -
1729 1806 /array-union/2.1.0:
1730 1807 resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
1731 1808 engines: {node: '>=8'}
... ... @@ -1760,7 +1837,7 @@ packages:
1760 1837 dev: true
1761 1838  
1762 1839 /asynckit/0.4.0:
1763   - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
  1840 + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, registry: https://registry.npm.taobao.org/}
1764 1841 dev: false
1765 1842  
1766 1843 /atob/2.1.2:
... ... @@ -1786,15 +1863,15 @@ packages:
1786 1863 dev: true
1787 1864  
1788 1865 /axios/0.26.1_debug@4.3.4:
1789   - resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==}
  1866 + resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==, registry: https://registry.npm.taobao.org/}
1790 1867 dependencies:
1791 1868 follow-redirects: 1.15.2
1792 1869 transitivePeerDependencies:
1793 1870 - debug
1794 1871 dev: true
1795 1872  
1796   - /axios/1.2.0:
1797   - resolution: {integrity: sha512-zT7wZyNYu3N5Bu0wuZ6QccIf93Qk1eV8LOewxgjOZFd2DenOs98cJ7+Y6703d0wkaXGY6/nZd4EweJaHz9uzQw==}
  1873 + /axios/1.2.1:
  1874 + resolution: {integrity: sha512-I88cFiGu9ryt/tfVEi4kX2SITsvDddTajXTOFmt2uK1ZVA8LytjtdeyefdQWEf5PU8w+4SSJDoYnggflB5tW4A==, registry: https://registry.npm.taobao.org/}
1798 1875 dependencies:
1799 1876 follow-redirects: 1.15.2
1800 1877 form-data: 4.0.0
... ... @@ -1803,6 +1880,10 @@ packages:
1803 1880 - debug
1804 1881 dev: false
1805 1882  
  1883 + /balanced-match/1.0.2:
  1884 + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
  1885 + dev: true
  1886 +
1806 1887 /balanced-match/2.0.0:
1807 1888 resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==}
1808 1889 dev: true
... ... @@ -1820,10 +1901,6 @@ packages:
1820 1901 pascalcase: 0.1.1
1821 1902 dev: true
1822 1903  
1823   - /base64-js/1.5.1:
1824   - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
1825   - dev: true
1826   -
1827 1904 /big.js/5.2.2:
1828 1905 resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==}
1829 1906 dev: true
... ... @@ -1833,22 +1910,6 @@ packages:
1833 1910 engines: {node: '>=8'}
1834 1911 dev: true
1835 1912  
1836   - /bl/4.1.0:
1837   - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
1838   - dependencies:
1839   - buffer: 5.7.1
1840   - inherits: 2.0.4
1841   - readable-stream: 3.6.0
1842   - dev: true
1843   -
1844   - /bl/5.1.0:
1845   - resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==}
1846   - dependencies:
1847   - buffer: 6.0.3
1848   - inherits: 2.0.4
1849   - readable-stream: 3.6.0
1850   - dev: true
1851   -
1852 1913 /bluebird/3.7.2:
1853 1914 resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
1854 1915 dev: true
... ... @@ -1860,12 +1921,18 @@ packages:
1860 1921 /brace-expansion/1.1.11:
1861 1922 resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
1862 1923 dependencies:
1863   - balanced-match: registry.npmmirror.com/balanced-match/1.0.2
  1924 + balanced-match: 1.0.2
1864 1925 concat-map: 0.0.1
1865 1926 dev: true
1866 1927  
  1928 + /brace-expansion/2.0.1:
  1929 + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
  1930 + dependencies:
  1931 + balanced-match: 1.0.2
  1932 + dev: true
  1933 +
1867 1934 /braces/2.3.2:
1868   - resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==}
  1935 + resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==, registry: https://registry.npm.taobao.org/}
1869 1936 engines: {node: '>=0.10.0'}
1870 1937 dependencies:
1871 1938 arr-flatten: 1.1.0
... ... @@ -1904,20 +1971,6 @@ packages:
1904 1971 resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
1905 1972 dev: true
1906 1973  
1907   - /buffer/5.7.1:
1908   - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
1909   - dependencies:
1910   - base64-js: 1.5.1
1911   - ieee754: 1.2.1
1912   - dev: true
1913   -
1914   - /buffer/6.0.3:
1915   - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
1916   - dependencies:
1917   - base64-js: 1.5.1
1918   - ieee754: 1.2.1
1919   - dev: true
1920   -
1921 1974 /cache-base/1.0.1:
1922 1975 resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==}
1923 1976 engines: {node: '>=0.10.0'}
... ... @@ -2010,11 +2063,6 @@ packages:
2010 2063 supports-color: 7.2.0
2011 2064 dev: true
2012 2065  
2013   - /chalk/5.1.2:
2014   - resolution: {integrity: sha512-E5CkT4jWURs1Vy5qGJye+XwCkNj7Od3Af7CP6SujMetSMkLs8Do2RWJK5yx1wamHV/op8Rz+9rltjaTQWDnEFQ==}
2015   - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
2016   - dev: true
2017   -
2018 2066 /change-case/4.1.2:
2019 2067 resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==}
2020 2068 dependencies:
... ... @@ -2032,10 +2080,6 @@ packages:
2032 2080 tslib: 2.4.1
2033 2081 dev: true
2034 2082  
2035   - /chardet/0.7.0:
2036   - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
2037   - dev: true
2038   -
2039 2083 /chokidar/3.5.3:
2040 2084 resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
2041 2085 engines: {node: '>= 8.10.0'}
... ... @@ -2048,7 +2092,7 @@ packages:
2048 2092 normalize-path: 3.0.0
2049 2093 readdirp: 3.6.0
2050 2094 optionalDependencies:
2051   - fsevents: registry.npmmirror.com/fsevents/2.3.2
  2095 + fsevents: 2.3.2
2052 2096 dev: true
2053 2097  
2054 2098 /class-utils/0.3.6:
... ... @@ -2061,13 +2105,6 @@ packages:
2061 2105 static-extend: 0.1.2
2062 2106 dev: true
2063 2107  
2064   - /clean-css/5.3.1:
2065   - resolution: {integrity: sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==}
2066   - engines: {node: '>= 10.0'}
2067   - dependencies:
2068   - source-map: registry.npmmirror.com/source-map/0.6.1
2069   - dev: true
2070   -
2071 2108 /clean-stack/2.2.0:
2072 2109 resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
2073 2110 engines: {node: '>=6'}
... ... @@ -2080,18 +2117,6 @@ packages:
2080 2117 restore-cursor: 3.1.0
2081 2118 dev: true
2082 2119  
2083   - /cli-cursor/4.0.0:
2084   - resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==}
2085   - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
2086   - dependencies:
2087   - restore-cursor: 4.0.0
2088   - dev: true
2089   -
2090   - /cli-spinners/2.7.0:
2091   - resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==}
2092   - engines: {node: '>=6'}
2093   - dev: true
2094   -
2095 2120 /cli-truncate/2.1.0:
2096 2121 resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==}
2097 2122 engines: {node: '>=8'}
... ... @@ -2108,11 +2133,6 @@ packages:
2108 2133 string-width: 5.1.2
2109 2134 dev: true
2110 2135  
2111   - /cli-width/3.0.0:
2112   - resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==}
2113   - engines: {node: '>= 10'}
2114   - dev: true
2115   -
2116 2136 /cliui/6.0.0:
2117 2137 resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
2118 2138 dependencies:
... ... @@ -2130,11 +2150,6 @@ packages:
2130 2150 wrap-ansi: 7.0.0
2131 2151 dev: true
2132 2152  
2133   - /clone/1.0.4:
2134   - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
2135   - engines: {node: '>=0.8'}
2136   - dev: true
2137   -
2138 2153 /clone/2.1.2:
2139 2154 resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==}
2140 2155 engines: {node: '>=0.8'}
... ... @@ -2176,7 +2191,7 @@ packages:
2176 2191 dev: true
2177 2192  
2178 2193 /combined-stream/1.0.8:
2179   - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
  2194 + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, registry: https://registry.npm.taobao.org/}
2180 2195 engines: {node: '>= 0.8'}
2181 2196 dependencies:
2182 2197 delayed-stream: 1.0.0
... ... @@ -2191,11 +2206,6 @@ packages:
2191 2206 engines: {node: '>= 10'}
2192 2207 dev: true
2193 2208  
2194   - /commander/8.3.0:
2195   - resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
2196   - engines: {node: '>= 12'}
2197   - dev: true
2198   -
2199 2209 /commander/9.4.1:
2200 2210 resolution: {integrity: sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==}
2201 2211 engines: {node: ^12.20.0 || >=14}
... ... @@ -2220,11 +2230,6 @@ packages:
2220 2230 resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
2221 2231 dev: true
2222 2232  
2223   - /connect-history-api-fallback/1.6.0:
2224   - resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==}
2225   - engines: {node: '>=0.8'}
2226   - dev: true
2227   -
2228 2233 /consola/2.15.3:
2229 2234 resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==}
2230 2235 dev: true
... ... @@ -2280,6 +2285,11 @@ packages:
2280 2285 engines: {node: '>=0.10.0'}
2281 2286 dev: true
2282 2287  
  2288 + /core-js/3.26.1:
  2289 + resolution: {integrity: sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==}
  2290 + requiresBuild: true
  2291 + dev: true
  2292 +
2283 2293 /cors/2.8.5:
2284 2294 resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
2285 2295 engines: {node: '>= 0.10'}
... ... @@ -2359,7 +2369,7 @@ packages:
2359 2369 engines: {node: '>=8.0.0'}
2360 2370 dependencies:
2361 2371 mdn-data: 2.0.14
2362   - source-map: registry.npmmirror.com/source-map/0.6.1
  2372 + source-map: 0.6.1
2363 2373 dev: true
2364 2374  
2365 2375 /css-what/6.1.0:
... ... @@ -2395,12 +2405,16 @@ packages:
2395 2405 engines: {node: '>=8'}
2396 2406 dev: true
2397 2407  
2398   - /dayjs/1.11.6:
2399   - resolution: {integrity: sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ==}
  2408 + /dayjs/1.11.7:
  2409 + resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==, registry: https://registry.npm.taobao.org/}
2400 2410 dev: false
2401 2411  
  2412 + /de-indent/1.0.2:
  2413 + resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
  2414 + dev: true
  2415 +
2402 2416 /debug/2.6.9:
2403   - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
  2417 + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==, registry: https://registry.npm.taobao.org/}
2404 2418 peerDependencies:
2405 2419 supports-color: '*'
2406 2420 peerDependenciesMeta:
... ... @@ -2443,12 +2457,6 @@ packages:
2443 2457 resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
2444 2458 dev: true
2445 2459  
2446   - /defaults/1.0.4:
2447   - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
2448   - dependencies:
2449   - clone: 1.0.4
2450   - dev: true
2451   -
2452 2460 /define-property/0.2.5:
2453 2461 resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==}
2454 2462 engines: {node: '>=0.10.0'}
... ... @@ -2471,30 +2479,11 @@ packages:
2471 2479 isobject: 3.0.1
2472 2480 dev: true
2473 2481  
2474   - /del/6.1.1:
2475   - resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==}
2476   - engines: {node: '>=10'}
2477   - dependencies:
2478   - globby: 11.1.0
2479   - graceful-fs: 4.2.10
2480   - is-glob: 4.0.3
2481   - is-path-cwd: 2.2.0
2482   - is-path-inside: 3.0.3
2483   - p-map: 4.0.0
2484   - rimraf: 3.0.2
2485   - slash: 3.0.0
2486   - dev: true
2487   -
2488 2482 /delayed-stream/1.0.0:
2489   - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
  2483 + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, registry: https://registry.npm.taobao.org/}
2490 2484 engines: {node: '>=0.4.0'}
2491 2485 dev: false
2492 2486  
2493   - /detect-file/1.0.0:
2494   - resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==}
2495   - engines: {node: '>=0.10.0'}
2496   - dev: true
2497   -
2498 2487 /diff/4.0.2:
2499 2488 resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
2500 2489 engines: {node: '>=0.3.1'}
... ... @@ -2612,16 +2601,6 @@ packages:
2612 2601 is-obj: 2.0.0
2613 2602 dev: true
2614 2603  
2615   - /dotenv-expand/8.0.3:
2616   - resolution: {integrity: sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg==}
2617   - engines: {node: '>=12'}
2618   - dev: true
2619   -
2620   - /dotenv/16.0.3:
2621   - resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==}
2622   - engines: {node: '>=12'}
2623   - dev: true
2624   -
2625 2604 /eastasianwidth/0.2.0:
2626 2605 resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
2627 2606 dev: true
... ... @@ -2653,20 +2632,20 @@ packages:
2653 2632 resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==}
2654 2633 dev: true
2655 2634  
2656   - /element-plus/2.2.25_vue@3.2.45:
2657   - resolution: {integrity: sha512-HC8CWY31e6pPyBpgqI0QnWkBgs0vRzdYnEw3mpdM/NlKfp0PtNFX7NESQLomqoIulH5ftL09hjQmJNvZBQpthQ==}
  2635 + /element-plus/2.2.26_vue@3.2.45:
  2636 + resolution: {integrity: sha512-O/rdY5m9DkclpVg8r3GynyqCunm7MxSR142xSsjrZA77bi7bcwA3SIy6SPEDqHi5R4KqgkGYgKSp4Q4e3irbYg==}
2658 2637 peerDependencies:
2659 2638 vue: ^3.2.0
2660 2639 dependencies:
2661 2640 '@ctrl/tinycolor': 3.4.1
2662 2641 '@element-plus/icons-vue': 2.0.10_vue@3.2.45
2663 2642 '@floating-ui/dom': 1.0.6
2664   - '@popperjs/core': registry.npmmirror.com/@sxzz/popperjs-es/2.11.7
  2643 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7
2665 2644 '@types/lodash': 4.14.189
2666 2645 '@types/lodash-es': 4.17.6
2667 2646 '@vueuse/core': 9.6.0_vue@3.2.45
2668 2647 async-validator: 4.2.5
2669   - dayjs: 1.11.6
  2648 + dayjs: 1.11.7
2670 2649 escape-html: 1.0.3
2671 2650 lodash: 4.17.21
2672 2651 lodash-es: 4.17.21
... ... @@ -2742,70 +2721,250 @@ packages:
2742 2721 ext: 1.7.0
2743 2722 dev: false
2744 2723  
2745   - /esbuild/0.15.14:
2746   - resolution: {integrity: sha512-pJN8j42fvWLFWwSMG4luuupl2Me7mxciUOsMegKvwCmhEbJ2covUdFnihxm0FMIBV+cbwbtMoHgMCCI+pj1btQ==}
  2724 + /esbuild-android-64/0.15.14:
  2725 + resolution: {integrity: sha512-HuilVIb4rk9abT4U6bcFdU35UHOzcWVGLSjEmC58OVr96q5UiRqzDtWjPlCMugjhgUGKEs8Zf4ueIvYbOStbIg==}
2747 2726 engines: {node: '>=12'}
2748   - hasBin: true
  2727 + cpu: [x64]
  2728 + os: [android]
2749 2729 requiresBuild: true
2750   - optionalDependencies:
2751   - '@esbuild/android-arm': registry.npmmirror.com/@esbuild/android-arm/0.15.14
2752   - '@esbuild/linux-loong64': registry.npmmirror.com/@esbuild/linux-loong64/0.15.14
2753   - esbuild-android-64: registry.npmmirror.com/esbuild-android-64/0.15.14
2754   - esbuild-android-arm64: registry.npmmirror.com/esbuild-android-arm64/0.15.14
2755   - esbuild-darwin-64: registry.npmmirror.com/esbuild-darwin-64/0.15.14
2756   - esbuild-darwin-arm64: registry.npmmirror.com/esbuild-darwin-arm64/0.15.14
2757   - esbuild-freebsd-64: registry.npmmirror.com/esbuild-freebsd-64/0.15.14
2758   - esbuild-freebsd-arm64: registry.npmmirror.com/esbuild-freebsd-arm64/0.15.14
2759   - esbuild-linux-32: registry.npmmirror.com/esbuild-linux-32/0.15.14
2760   - esbuild-linux-64: registry.npmmirror.com/esbuild-linux-64/0.15.14
2761   - esbuild-linux-arm: registry.npmmirror.com/esbuild-linux-arm/0.15.14
2762   - esbuild-linux-arm64: registry.npmmirror.com/esbuild-linux-arm64/0.15.14
2763   - esbuild-linux-mips64le: registry.npmmirror.com/esbuild-linux-mips64le/0.15.14
2764   - esbuild-linux-ppc64le: registry.npmmirror.com/esbuild-linux-ppc64le/0.15.14
2765   - esbuild-linux-riscv64: registry.npmmirror.com/esbuild-linux-riscv64/0.15.14
2766   - esbuild-linux-s390x: registry.npmmirror.com/esbuild-linux-s390x/0.15.14
2767   - esbuild-netbsd-64: registry.npmmirror.com/esbuild-netbsd-64/0.15.14
2768   - esbuild-openbsd-64: registry.npmmirror.com/esbuild-openbsd-64/0.15.14
2769   - esbuild-sunos-64: registry.npmmirror.com/esbuild-sunos-64/0.15.14
2770   - esbuild-windows-32: registry.npmmirror.com/esbuild-windows-32/0.15.14
2771   - esbuild-windows-64: registry.npmmirror.com/esbuild-windows-64/0.15.14
2772   - esbuild-windows-arm64: registry.npmmirror.com/esbuild-windows-arm64/0.15.14
2773 2730 dev: true
  2731 + optional: true
2774 2732  
2775   - /escalade/3.1.1:
2776   - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
2777   - engines: {node: '>=6'}
  2733 + /esbuild-android-arm64/0.15.14:
  2734 + resolution: {integrity: sha512-/QnxRVxsR2Vtf3XottAHj7hENAMW2wCs6S+OZcAbc/8nlhbAL/bCQRCVD78VtI5mdwqWkVi3wMqM94kScQCgqg==}
  2735 + engines: {node: '>=12'}
  2736 + cpu: [arm64]
  2737 + os: [android]
  2738 + requiresBuild: true
2778 2739 dev: true
  2740 + optional: true
2779 2741  
2780   - /escape-html/1.0.3:
2781   - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
2782   - dev: false
  2742 + /esbuild-darwin-64/0.15.14:
  2743 + resolution: {integrity: sha512-ToNuf1uifu8hhwWvoZJGCdLIX/1zpo8cOGnT0XAhDQXiKOKYaotVNx7pOVB1f+wHoWwTLInrOmh3EmA7Fd+8Vg==}
  2744 + engines: {node: '>=12'}
  2745 + cpu: [x64]
  2746 + os: [darwin]
  2747 + requiresBuild: true
  2748 + dev: true
  2749 + optional: true
2783 2750  
2784   - /escape-string-regexp/1.0.5:
2785   - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
2786   - engines: {node: '>=0.8.0'}
  2751 + /esbuild-darwin-arm64/0.15.14:
  2752 + resolution: {integrity: sha512-KgGP+y77GszfYJgceO0Wi/PiRtYo5y2Xo9rhBUpxTPaBgWDJ14gqYN0+NMbu+qC2fykxXaipHxN4Scaj9tUS1A==}
  2753 + engines: {node: '>=12'}
  2754 + cpu: [arm64]
  2755 + os: [darwin]
  2756 + requiresBuild: true
2787 2757 dev: true
  2758 + optional: true
2788 2759  
2789   - /escape-string-regexp/4.0.0:
2790   - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
2791   - engines: {node: '>=10'}
  2760 + /esbuild-freebsd-64/0.15.14:
  2761 + resolution: {integrity: sha512-xr0E2n5lyWw3uFSwwUXHc0EcaBDtsal/iIfLioflHdhAe10KSctV978Te7YsfnsMKzcoGeS366+tqbCXdqDHQA==}
  2762 + engines: {node: '>=12'}
  2763 + cpu: [x64]
  2764 + os: [freebsd]
  2765 + requiresBuild: true
2792 2766 dev: true
  2767 + optional: true
2793 2768  
2794   - /eslint-config-prettier/8.5.0_eslint@8.28.0:
2795   - resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==}
2796   - hasBin: true
2797   - peerDependencies:
2798   - eslint: '>=7.0.0'
2799   - dependencies:
2800   - eslint: 8.28.0
  2769 + /esbuild-freebsd-arm64/0.15.14:
  2770 + resolution: {integrity: sha512-8XH96sOQ4b1LhMlO10eEWOjEngmZ2oyw3pW4o8kvBcpF6pULr56eeYVP5radtgw54g3T8nKHDHYEI5AItvskZg==}
  2771 + engines: {node: '>=12'}
  2772 + cpu: [arm64]
  2773 + os: [freebsd]
  2774 + requiresBuild: true
2801 2775 dev: true
  2776 + optional: true
2802 2777  
2803   - /eslint-define-config/1.12.0:
2804   - resolution: {integrity: sha512-Kt9TcMbgsY9VRt7jIuw76KE/2RuD31eWB4Ubv6btXgU8NTSsbT6gZ8qzeiU+rAih/8sOl8Kt89spAZBMElu6qQ==}
2805   - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: '>=6.14.13', pnpm: '>= 7.0.0'}
  2778 + /esbuild-linux-32/0.15.14:
  2779 + resolution: {integrity: sha512-6ssnvwaTAi8AzKN8By2V0nS+WF5jTP7SfuK6sStGnDP7MCJo/4zHgM9oE1eQTS2jPmo3D673rckuCzRlig+HMA==}
  2780 + engines: {node: '>=12'}
  2781 + cpu: [ia32]
  2782 + os: [linux]
  2783 + requiresBuild: true
2806 2784 dev: true
  2785 + optional: true
2807 2786  
2808   - /eslint-plugin-prettier/4.2.1_cwlo2dingkvfydnaculr42urve:
  2787 + /esbuild-linux-64/0.15.14:
  2788 + resolution: {integrity: sha512-ONySx3U0wAJOJuxGUlXBWxVKFVpWv88JEv0NZ6NlHknmDd1yCbf4AEdClSgLrqKQDXYywmw4gYDvdLsS6z0hcw==}
  2789 + engines: {node: '>=12'}
  2790 + cpu: [x64]
  2791 + os: [linux]
  2792 + requiresBuild: true
  2793 + dev: true
  2794 + optional: true
  2795 +
  2796 + /esbuild-linux-arm/0.15.14:
  2797 + resolution: {integrity: sha512-D2LImAIV3QzL7lHURyCHBkycVFbKwkDb1XEUWan+2fb4qfW7qAeUtul7ZIcIwFKZgPcl+6gKZmvLgPSj26RQ2Q==}
  2798 + engines: {node: '>=12'}
  2799 + cpu: [arm]
  2800 + os: [linux]
  2801 + requiresBuild: true
  2802 + dev: true
  2803 + optional: true
  2804 +
  2805 + /esbuild-linux-arm64/0.15.14:
  2806 + resolution: {integrity: sha512-kle2Ov6a1e5AjlHlMQl1e+c4myGTeggrRzArQFmWp6O6JoqqB9hT+B28EW4tjFWgV/NxUq46pWYpgaWXsXRPAg==}
  2807 + engines: {node: '>=12'}
  2808 + cpu: [arm64]
  2809 + os: [linux]
  2810 + requiresBuild: true
  2811 + dev: true
  2812 + optional: true
  2813 +
  2814 + /esbuild-linux-mips64le/0.15.14:
  2815 + resolution: {integrity: sha512-FVdMYIzOLXUq+OE7XYKesuEAqZhmAIV6qOoYahvUp93oXy0MOVTP370ECbPfGXXUdlvc0TNgkJa3YhEwyZ6MRA==}
  2816 + engines: {node: '>=12'}
  2817 + cpu: [mips64el]
  2818 + os: [linux]
  2819 + requiresBuild: true
  2820 + dev: true
  2821 + optional: true
  2822 +
  2823 + /esbuild-linux-ppc64le/0.15.14:
  2824 + resolution: {integrity: sha512-2NzH+iuzMDA+jjtPjuIz/OhRDf8tzbQ1tRZJI//aT25o1HKc0reMMXxKIYq/8nSHXiJSnYV4ODzTiv45s+h73w==}
  2825 + engines: {node: '>=12'}
  2826 + cpu: [ppc64]
  2827 + os: [linux]
  2828 + requiresBuild: true
  2829 + dev: true
  2830 + optional: true
  2831 +
  2832 + /esbuild-linux-riscv64/0.15.14:
  2833 + resolution: {integrity: sha512-VqxvutZNlQxmUNS7Ac+aczttLEoHBJ9e3OYGqnULrfipRvG97qLrAv9EUY9iSrRKBqeEbSvS9bSfstZqwz0T4Q==}
  2834 + engines: {node: '>=12'}
  2835 + cpu: [riscv64]
  2836 + os: [linux]
  2837 + requiresBuild: true
  2838 + dev: true
  2839 + optional: true
  2840 +
  2841 + /esbuild-linux-s390x/0.15.14:
  2842 + resolution: {integrity: sha512-+KVHEUshX5n6VP6Vp/AKv9fZIl5kr2ph8EUFmQUJnDpHwcfTSn2AQgYYm0HTBR2Mr4d0Wlr0FxF/Cs5pbFgiOw==}
  2843 + engines: {node: '>=12'}
  2844 + cpu: [s390x]
  2845 + os: [linux]
  2846 + requiresBuild: true
  2847 + dev: true
  2848 + optional: true
  2849 +
  2850 + /esbuild-netbsd-64/0.15.14:
  2851 + resolution: {integrity: sha512-6D/dr17piEgevIm1xJfZP2SjB9Z+g8ERhNnBdlZPBWZl+KSPUKLGF13AbvC+nzGh8IxOH2TyTIdRMvKMP0nEzQ==}
  2852 + engines: {node: '>=12'}
  2853 + cpu: [x64]
  2854 + os: [netbsd]
  2855 + requiresBuild: true
  2856 + dev: true
  2857 + optional: true
  2858 +
  2859 + /esbuild-openbsd-64/0.15.14:
  2860 + resolution: {integrity: sha512-rREQBIlMibBetgr2E9Lywt2Qxv2ZdpmYahR4IUlAQ1Efv/A5gYdO0/VIN3iowDbCNTLxp0bb57Vf0LFcffD6kA==}
  2861 + engines: {node: '>=12'}
  2862 + cpu: [x64]
  2863 + os: [openbsd]
  2864 + requiresBuild: true
  2865 + dev: true
  2866 + optional: true
  2867 +
  2868 + /esbuild-sunos-64/0.15.14:
  2869 + resolution: {integrity: sha512-DNVjSp/BY4IfwtdUAvWGIDaIjJXY5KI4uD82+15v6k/w7px9dnaDaJJ2R6Mu+KCgr5oklmFc0KjBjh311Gxl9Q==}
  2870 + engines: {node: '>=12'}
  2871 + cpu: [x64]
  2872 + os: [sunos]
  2873 + requiresBuild: true
  2874 + dev: true
  2875 + optional: true
  2876 +
  2877 + /esbuild-windows-32/0.15.14:
  2878 + resolution: {integrity: sha512-pHBWrcA+/oLgvViuG9FO3kNPO635gkoVrRQwe6ZY1S0jdET07xe2toUvQoJQ8KT3/OkxqUasIty5hpuKFLD+eg==}
  2879 + engines: {node: '>=12'}
  2880 + cpu: [ia32]
  2881 + os: [win32]
  2882 + requiresBuild: true
  2883 + dev: true
  2884 + optional: true
  2885 +
  2886 + /esbuild-windows-64/0.15.14:
  2887 + resolution: {integrity: sha512-CszIGQVk/P8FOS5UgAH4hKc9zOaFo69fe+k1rqgBHx3CSK3Opyk5lwYriIamaWOVjBt7IwEP6NALz+tkVWdFog==}
  2888 + engines: {node: '>=12'}
  2889 + cpu: [x64]
  2890 + os: [win32]
  2891 + requiresBuild: true
  2892 + dev: true
  2893 + optional: true
  2894 +
  2895 + /esbuild-windows-arm64/0.15.14:
  2896 + resolution: {integrity: sha512-KW9W4psdZceaS9A7Jsgl4WialOznSURvqX/oHZk3gOP7KbjtHLSsnmSvNdzagGJfxbAe30UVGXRe8q8nDsOSQw==}
  2897 + engines: {node: '>=12'}
  2898 + cpu: [arm64]
  2899 + os: [win32]
  2900 + requiresBuild: true
  2901 + dev: true
  2902 + optional: true
  2903 +
  2904 + /esbuild/0.15.14:
  2905 + resolution: {integrity: sha512-pJN8j42fvWLFWwSMG4luuupl2Me7mxciUOsMegKvwCmhEbJ2covUdFnihxm0FMIBV+cbwbtMoHgMCCI+pj1btQ==}
  2906 + engines: {node: '>=12'}
  2907 + hasBin: true
  2908 + requiresBuild: true
  2909 + optionalDependencies:
  2910 + '@esbuild/android-arm': 0.15.14
  2911 + '@esbuild/linux-loong64': 0.15.14
  2912 + esbuild-android-64: 0.15.14
  2913 + esbuild-android-arm64: 0.15.14
  2914 + esbuild-darwin-64: 0.15.14
  2915 + esbuild-darwin-arm64: 0.15.14
  2916 + esbuild-freebsd-64: 0.15.14
  2917 + esbuild-freebsd-arm64: 0.15.14
  2918 + esbuild-linux-32: 0.15.14
  2919 + esbuild-linux-64: 0.15.14
  2920 + esbuild-linux-arm: 0.15.14
  2921 + esbuild-linux-arm64: 0.15.14
  2922 + esbuild-linux-mips64le: 0.15.14
  2923 + esbuild-linux-ppc64le: 0.15.14
  2924 + esbuild-linux-riscv64: 0.15.14
  2925 + esbuild-linux-s390x: 0.15.14
  2926 + esbuild-netbsd-64: 0.15.14
  2927 + esbuild-openbsd-64: 0.15.14
  2928 + esbuild-sunos-64: 0.15.14
  2929 + esbuild-windows-32: 0.15.14
  2930 + esbuild-windows-64: 0.15.14
  2931 + esbuild-windows-arm64: 0.15.14
  2932 + dev: true
  2933 +
  2934 + /escalade/3.1.1:
  2935 + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
  2936 + engines: {node: '>=6'}
  2937 + dev: true
  2938 +
  2939 + /escape-html/1.0.3:
  2940 + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
  2941 + dev: false
  2942 +
  2943 + /escape-string-regexp/1.0.5:
  2944 + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
  2945 + engines: {node: '>=0.8.0'}
  2946 + dev: true
  2947 +
  2948 + /escape-string-regexp/4.0.0:
  2949 + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
  2950 + engines: {node: '>=10'}
  2951 + dev: true
  2952 +
  2953 + /eslint-config-prettier/8.5.0_eslint@8.29.0:
  2954 + resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==}
  2955 + hasBin: true
  2956 + peerDependencies:
  2957 + eslint: '>=7.0.0'
  2958 + dependencies:
  2959 + eslint: 8.29.0
  2960 + dev: true
  2961 +
  2962 + /eslint-define-config/1.12.0:
  2963 + resolution: {integrity: sha512-Kt9TcMbgsY9VRt7jIuw76KE/2RuD31eWB4Ubv6btXgU8NTSsbT6gZ8qzeiU+rAih/8sOl8Kt89spAZBMElu6qQ==}
  2964 + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: '>=6.14.13', pnpm: '>= 7.0.0'}
  2965 + dev: true
  2966 +
  2967 + /eslint-plugin-prettier/4.2.1_nrhoyyjffvfyk4vtlt5destxgm:
2809 2968 resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==}
2810 2969 engines: {node: '>=12.0.0'}
2811 2970 peerDependencies:
... ... @@ -2816,32 +2975,32 @@ packages:
2816 2975 eslint-config-prettier:
2817 2976 optional: true
2818 2977 dependencies:
2819   - eslint: 8.28.0
2820   - eslint-config-prettier: 8.5.0_eslint@8.28.0
  2978 + eslint: 8.29.0
  2979 + eslint-config-prettier: 8.5.0_eslint@8.29.0
2821 2980 prettier: 2.8.0
2822 2981 prettier-linter-helpers: 1.0.0
2823 2982 dev: true
2824 2983  
2825   - /eslint-plugin-vue/9.8.0_eslint@8.28.0:
  2984 + /eslint-plugin-vue/9.8.0_eslint@8.29.0:
2826 2985 resolution: {integrity: sha512-E/AXwcTzunyzM83C2QqDHxepMzvI2y6x+mmeYHbVDQlKFqmKYvRrhaVixEeeG27uI44p9oKDFiyCRw4XxgtfHA==}
2827 2986 engines: {node: ^14.17.0 || >=16.0.0}
2828 2987 peerDependencies:
2829 2988 eslint: ^6.2.0 || ^7.0.0 || ^8.0.0
2830 2989 dependencies:
2831   - eslint: 8.28.0
2832   - eslint-utils: 3.0.0_eslint@8.28.0
  2990 + eslint: 8.29.0
  2991 + eslint-utils: 3.0.0_eslint@8.29.0
2833 2992 natural-compare: 1.4.0
2834 2993 nth-check: 2.1.1
2835 2994 postcss-selector-parser: 6.0.10
2836 2995 semver: 7.3.8
2837   - vue-eslint-parser: 9.1.0_eslint@8.28.0
  2996 + vue-eslint-parser: 9.1.0_eslint@8.29.0
2838 2997 xml-name-validator: 4.0.0
2839 2998 transitivePeerDependencies:
2840 2999 - supports-color
2841 3000 dev: true
2842 3001  
2843 3002 /eslint-scope/5.1.1:
2844   - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
  3003 + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==, registry: https://registry.npm.taobao.org/}
2845 3004 engines: {node: '>=8.0.0'}
2846 3005 dependencies:
2847 3006 esrecurse: 4.3.0
... ... @@ -2857,24 +3016,24 @@ packages:
2857 3016 dev: true
2858 3017  
2859 3018 /eslint-utils/2.1.0:
2860   - resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==}
  3019 + resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==, registry: https://registry.npm.taobao.org/}
2861 3020 engines: {node: '>=6'}
2862 3021 dependencies:
2863 3022 eslint-visitor-keys: 1.3.0
2864 3023 dev: true
2865 3024  
2866   - /eslint-utils/3.0.0_eslint@8.28.0:
  3025 + /eslint-utils/3.0.0_eslint@8.29.0:
2867 3026 resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
2868 3027 engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
2869 3028 peerDependencies:
2870 3029 eslint: '>=5'
2871 3030 dependencies:
2872   - eslint: 8.28.0
  3031 + eslint: 8.29.0
2873 3032 eslint-visitor-keys: 2.1.0
2874 3033 dev: true
2875 3034  
2876 3035 /eslint-visitor-keys/1.3.0:
2877   - resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==}
  3036 + resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==, registry: https://registry.npm.taobao.org/}
2878 3037 engines: {node: '>=4'}
2879 3038 dev: true
2880 3039  
... ... @@ -2888,8 +3047,8 @@ packages:
2888 3047 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
2889 3048 dev: true
2890 3049  
2891   - /eslint/8.28.0:
2892   - resolution: {integrity: sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ==}
  3050 + /eslint/8.29.0:
  3051 + resolution: {integrity: sha512-isQ4EEiyUjZFbEKvEGJKKGBwXtvXX+zJbkVKCgTuB9t/+jUBcy8avhkEwWJecI15BkRkOYmvIM5ynbhRjEkoeg==}
2893 3052 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
2894 3053 hasBin: true
2895 3054 dependencies:
... ... @@ -2904,7 +3063,7 @@ packages:
2904 3063 doctrine: 3.0.0
2905 3064 escape-string-regexp: 4.0.0
2906 3065 eslint-scope: 7.1.1
2907   - eslint-utils: 3.0.0_eslint@8.28.0
  3066 + eslint-utils: 3.0.0_eslint@8.29.0
2908 3067 eslint-visitor-keys: 3.3.0
2909 3068 espree: 9.4.1
2910 3069 esquery: 1.4.0
... ... @@ -2969,7 +3128,7 @@ packages:
2969 3128 dev: true
2970 3129  
2971 3130 /estraverse/4.3.0:
2972   - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
  3131 + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==, registry: https://registry.npm.taobao.org/}
2973 3132 engines: {node: '>=4.0'}
2974 3133 dev: true
2975 3134  
... ... @@ -3043,13 +3202,6 @@ packages:
3043 3202 - supports-color
3044 3203 dev: true
3045 3204  
3046   - /expand-tilde/2.0.2:
3047   - resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==}
3048   - engines: {node: '>=0.10.0'}
3049   - dependencies:
3050   - homedir-polyfill: 1.0.3
3051   - dev: true
3052   -
3053 3205 /ext/1.7.0:
3054 3206 resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==}
3055 3207 dependencies:
... ... @@ -3071,19 +3223,6 @@ packages:
3071 3223 is-extendable: 1.0.1
3072 3224 dev: true
3073 3225  
3074   - /extend/3.0.2:
3075   - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
3076   - dev: true
3077   -
3078   - /external-editor/3.1.0:
3079   - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
3080   - engines: {node: '>=4'}
3081   - dependencies:
3082   - chardet: 0.7.0
3083   - iconv-lite: 0.4.24
3084   - tmp: 0.0.33
3085   - dev: true
3086   -
3087 3226 /extglob/2.0.4:
3088 3227 resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==}
3089 3228 engines: {node: '>=0.10.0'}
... ... @@ -3138,13 +3277,6 @@ packages:
3138 3277 reusify: 1.0.4
3139 3278 dev: true
3140 3279  
3141   - /figures/3.2.0:
3142   - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
3143   - engines: {node: '>=8'}
3144   - dependencies:
3145   - escape-string-regexp: 1.0.5
3146   - dev: true
3147   -
3148 3280 /file-entry-cache/6.0.1:
3149 3281 resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
3150 3282 engines: {node: ^10.12.0 || >=12.0.0}
... ... @@ -3155,11 +3287,11 @@ packages:
3155 3287 /filelist/1.0.4:
3156 3288 resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
3157 3289 dependencies:
3158   - minimatch: registry.npmmirror.com/minimatch/5.1.0
  3290 + minimatch: 5.1.0
3159 3291 dev: true
3160 3292  
3161 3293 /fill-range/4.0.0:
3162   - resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==}
  3294 + resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==, registry: https://registry.npm.taobao.org/}
3163 3295 engines: {node: '>=0.10.0'}
3164 3296 dependencies:
3165 3297 extend-shallow: 2.0.1
... ... @@ -3169,7 +3301,7 @@ packages:
3169 3301 dev: true
3170 3302  
3171 3303 /fill-range/7.0.1:
3172   - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
  3304 + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, registry: https://registry.npm.taobao.org/}
3173 3305 engines: {node: '>=8'}
3174 3306 dependencies:
3175 3307 to-regex-range: 5.0.1
... ... @@ -3190,32 +3322,6 @@ packages:
3190 3322 path-exists: 4.0.0
3191 3323 dev: true
3192 3324  
3193   - /findup-sync/5.0.0:
3194   - resolution: {integrity: sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==}
3195   - engines: {node: '>= 10.13.0'}
3196   - dependencies:
3197   - detect-file: 1.0.0
3198   - is-glob: 4.0.3
3199   - micromatch: 4.0.5
3200   - resolve-dir: 1.0.1
3201   - dev: true
3202   -
3203   - /fined/2.0.0:
3204   - resolution: {integrity: sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==}
3205   - engines: {node: '>= 10.13.0'}
3206   - dependencies:
3207   - expand-tilde: 2.0.2
3208   - is-plain-object: 5.0.0
3209   - object.defaults: 1.1.0
3210   - object.pick: 1.3.0
3211   - parse-filepath: 1.0.2
3212   - dev: true
3213   -
3214   - /flagged-respawn/2.0.0:
3215   - resolution: {integrity: sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==}
3216   - engines: {node: '>= 10.13.0'}
3217   - dev: true
3218   -
3219 3325 /flat-cache/3.0.4:
3220 3326 resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==}
3221 3327 engines: {node: ^10.12.0 || >=12.0.0}
... ... @@ -3229,7 +3335,7 @@ packages:
3229 3335 dev: true
3230 3336  
3231 3337 /follow-redirects/1.15.2:
3232   - resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==}
  3338 + resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==, registry: https://registry.npm.taobao.org/}
3233 3339 engines: {node: '>=4.0'}
3234 3340 peerDependencies:
3235 3341 debug: '*'
... ... @@ -3242,15 +3348,8 @@ packages:
3242 3348 engines: {node: '>=0.10.0'}
3243 3349 dev: true
3244 3350  
3245   - /for-own/1.0.0:
3246   - resolution: {integrity: sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==}
3247   - engines: {node: '>=0.10.0'}
3248   - dependencies:
3249   - for-in: 1.0.2
3250   - dev: true
3251   -
3252 3351 /form-data/4.0.0:
3253   - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
  3352 + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==, registry: https://registry.npm.taobao.org/}
3254 3353 engines: {node: '>= 6'}
3255 3354 dependencies:
3256 3355 asynckit: 0.4.0
... ... @@ -3282,6 +3381,14 @@ packages:
3282 3381 resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
3283 3382 dev: true
3284 3383  
  3384 + /fsevents/2.3.2:
  3385 + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
  3386 + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
  3387 + os: [darwin]
  3388 + requiresBuild: true
  3389 + dev: true
  3390 + optional: true
  3391 +
3285 3392 /function-bind/1.1.1:
3286 3393 resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
3287 3394  
... ... @@ -3356,15 +3463,6 @@ packages:
3356 3463 ini: 1.3.8
3357 3464 dev: true
3358 3465  
3359   - /global-modules/1.0.0:
3360   - resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==}
3361   - engines: {node: '>=0.10.0'}
3362   - dependencies:
3363   - global-prefix: 1.0.2
3364   - is-windows: 1.0.2
3365   - resolve-dir: 1.0.1
3366   - dev: true
3367   -
3368 3466 /global-modules/2.0.0:
3369 3467 resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==}
3370 3468 engines: {node: '>=6'}
... ... @@ -3372,17 +3470,6 @@ packages:
3372 3470 global-prefix: 3.0.0
3373 3471 dev: true
3374 3472  
3375   - /global-prefix/1.0.2:
3376   - resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==}
3377   - engines: {node: '>=0.10.0'}
3378   - dependencies:
3379   - expand-tilde: 2.0.2
3380   - homedir-polyfill: 1.0.3
3381   - ini: 1.3.8
3382   - is-windows: 1.0.2
3383   - which: 1.3.1
3384   - dev: true
3385   -
3386 3473 /global-prefix/3.0.0:
3387 3474 resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==}
3388 3475 engines: {node: '>=6'}
... ... @@ -3411,22 +3498,11 @@ packages:
3411 3498 array-union: 2.1.0
3412 3499 dir-glob: 3.0.1
3413 3500 fast-glob: 3.2.12
3414   - ignore: 5.2.0
  3501 + ignore: 5.2.1
3415 3502 merge2: 1.4.1
3416 3503 slash: 3.0.0
3417 3504 dev: true
3418 3505  
3419   - /globby/13.1.2:
3420   - resolution: {integrity: sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==}
3421   - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
3422   - dependencies:
3423   - dir-glob: 3.0.1
3424   - fast-glob: 3.2.12
3425   - ignore: 5.2.0
3426   - merge2: 1.4.1
3427   - slash: 4.0.0
3428   - dev: true
3429   -
3430 3506 /globjoin/0.1.4:
3431 3507 resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==}
3432 3508 dev: true
... ... @@ -3439,19 +3515,6 @@ packages:
3439 3515 resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
3440 3516 dev: true
3441 3517  
3442   - /handlebars/4.7.7:
3443   - resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==}
3444   - engines: {node: '>=0.4.7'}
3445   - hasBin: true
3446   - dependencies:
3447   - minimist: 1.2.7
3448   - neo-async: 2.6.2
3449   - source-map: registry.npmmirror.com/source-map/0.6.1
3450   - wordwrap: 1.0.0
3451   - optionalDependencies:
3452   - uglify-js: registry.npmmirror.com/uglify-js/3.17.4
3453   - dev: true
3454   -
3455 3518 /hard-rejection/2.1.0:
3456 3519 resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==}
3457 3520 engines: {node: '>=6'}
... ... @@ -3533,13 +3596,6 @@ packages:
3533 3596 tslib: 2.4.1
3534 3597 dev: true
3535 3598  
3536   - /homedir-polyfill/1.0.3:
3537   - resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==}
3538   - engines: {node: '>=0.10.0'}
3539   - dependencies:
3540   - parse-passwd: 1.0.0
3541   - dev: true
3542   -
3543 3599 /hosted-git-info/2.8.9:
3544 3600 resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
3545 3601 dev: true
... ... @@ -3551,20 +3607,6 @@ packages:
3551 3607 lru-cache: 6.0.0
3552 3608 dev: true
3553 3609  
3554   - /html-minifier-terser/6.1.0:
3555   - resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==}
3556   - engines: {node: '>=12'}
3557   - hasBin: true
3558   - dependencies:
3559   - camel-case: 4.1.2
3560   - clean-css: 5.3.1
3561   - commander: 8.3.0
3562   - he: 1.2.0
3563   - param-case: 3.0.4
3564   - relateurl: 0.2.7
3565   - terser: 5.15.1
3566   - dev: true
3567   -
3568 3610 /html-tags/3.2.0:
3569 3611 resolution: {integrity: sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==}
3570 3612 engines: {node: '>=8'}
... ... @@ -3610,22 +3652,16 @@ packages:
3610 3652 '@babel/runtime': 7.20.1
3611 3653 dev: false
3612 3654  
3613   - /iconv-lite/0.4.24:
3614   - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
3615   - engines: {node: '>=0.10.0'}
3616   - dependencies:
3617   - safer-buffer: 2.1.2
3618   - dev: true
3619   -
3620   - /ieee754/1.2.1:
3621   - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
3622   - dev: true
3623   -
3624 3655 /ignore/5.2.0:
3625 3656 resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==}
3626 3657 engines: {node: '>= 4'}
3627 3658 dev: true
3628 3659  
  3660 + /ignore/5.2.1:
  3661 + resolution: {integrity: sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==, registry: https://registry.npm.taobao.org/}
  3662 + engines: {node: '>= 4'}
  3663 + dev: true
  3664 +
3629 3665 /image-size/0.5.5:
3630 3666 resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==}
3631 3667 engines: {node: '>=0.10.0'}
... ... @@ -3678,44 +3714,10 @@ packages:
3678 3714 resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
3679 3715 dev: true
3680 3716  
3681   - /inquirer/8.2.5:
3682   - resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==}
3683   - engines: {node: '>=12.0.0'}
3684   - dependencies:
3685   - ansi-escapes: 4.3.2
3686   - chalk: 4.1.2
3687   - cli-cursor: 3.1.0
3688   - cli-width: 3.0.0
3689   - external-editor: 3.1.0
3690   - figures: 3.2.0
3691   - lodash: 4.17.21
3692   - mute-stream: 0.0.8
3693   - ora: 5.4.1
3694   - run-async: 2.4.1
3695   - rxjs: 7.5.7
3696   - string-width: 4.2.3
3697   - strip-ansi: 6.0.1
3698   - through: 2.3.8
3699   - wrap-ansi: 7.0.0
3700   - dev: true
3701   -
3702   - /interpret/2.2.0:
3703   - resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==}
3704   - engines: {node: '>= 0.10'}
3705   - dev: true
3706   -
3707 3717 /intro.js/6.0.0:
3708 3718 resolution: {integrity: sha512-ZUiR6BoLSvPSlLG0boewnWVgji1fE1gBvP/pyw5pgCKXEDQz1mMeUxarggClPNs71UTq364LwSk9zxz17A9gaQ==}
3709 3719 dev: false
3710 3720  
3711   - /is-absolute/1.0.0:
3712   - resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==}
3713   - engines: {node: '>=0.10.0'}
3714   - dependencies:
3715   - is-relative: 1.0.0
3716   - is-windows: 1.0.2
3717   - dev: true
3718   -
3719 3721 /is-accessor-descriptor/0.1.6:
3720 3722 resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==}
3721 3723 engines: {node: '>=0.10.0'}
... ... @@ -3820,25 +3822,15 @@ packages:
3820 3822 resolution: {integrity: sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==}
3821 3823 dev: false
3822 3824  
3823   - /is-interactive/1.0.0:
3824   - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
3825   - engines: {node: '>=8'}
3826   - dev: true
3827   -
3828   - /is-interactive/2.0.0:
3829   - resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==}
3830   - engines: {node: '>=12'}
3831   - dev: true
3832   -
3833 3825 /is-number/3.0.0:
3834   - resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==}
  3826 + resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==, registry: https://registry.npm.taobao.org/}
3835 3827 engines: {node: '>=0.10.0'}
3836 3828 dependencies:
3837 3829 kind-of: 3.2.2
3838 3830 dev: true
3839 3831  
3840 3832 /is-number/7.0.0:
3841   - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
  3833 + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, registry: https://registry.npm.taobao.org/}
3842 3834 engines: {node: '>=0.12.0'}
3843 3835 dev: true
3844 3836  
... ... @@ -3847,11 +3839,6 @@ packages:
3847 3839 engines: {node: '>=8'}
3848 3840 dev: true
3849 3841  
3850   - /is-path-cwd/2.2.0:
3851   - resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==}
3852   - engines: {node: '>=6'}
3853   - dev: true
3854   -
3855 3842 /is-path-inside/3.0.3:
3856 3843 resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
3857 3844 engines: {node: '>=8'}
... ... @@ -3873,13 +3860,6 @@ packages:
3873 3860 resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
3874 3861 engines: {node: '>=0.10.0'}
3875 3862  
3876   - /is-relative/1.0.0:
3877   - resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==}
3878   - engines: {node: '>=0.10.0'}
3879   - dependencies:
3880   - is-unc-path: 1.0.0
3881   - dev: true
3882   -
3883 3863 /is-stream/2.0.1:
3884 3864 resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
3885 3865 engines: {node: '>=8'}
... ... @@ -3897,26 +3877,9 @@ packages:
3897 3877 text-extensions: 1.9.0
3898 3878 dev: true
3899 3879  
3900   - /is-unc-path/1.0.0:
3901   - resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==}
3902   - engines: {node: '>=0.10.0'}
3903   - dependencies:
3904   - unc-path-regex: 0.1.2
3905   - dev: true
3906   -
3907   - /is-unicode-supported/0.1.0:
3908   - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
3909   - engines: {node: '>=10'}
3910   - dev: true
3911   -
3912   - /is-unicode-supported/1.3.0:
3913   - resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==}
3914   - engines: {node: '>=12'}
3915   - dev: true
3916   -
3917   - /is-url/1.2.4:
3918   - resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==}
3919   - dev: false
  3880 + /is-url/1.2.4:
  3881 + resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==}
  3882 + dev: false
3920 3883  
3921 3884 /is-windows/1.0.2:
3922 3885 resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
... ... @@ -3927,11 +3890,6 @@ packages:
3927 3890 resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
3928 3891 dev: true
3929 3892  
3930   - /isbinaryfile/4.0.10:
3931   - resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==}
3932   - engines: {node: '>= 8.0.0'}
3933   - dev: true
3934   -
3935 3893 /isexe/2.0.0:
3936 3894 resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
3937 3895 dev: true
... ... @@ -3956,7 +3914,7 @@ packages:
3956 3914 async: 3.2.4
3957 3915 chalk: 4.1.2
3958 3916 filelist: 1.0.4
3959   - minimatch: registry.npmmirror.com/minimatch/3.1.2
  3917 + minimatch: 3.1.2
3960 3918 dev: true
3961 3919  
3962 3920 /jiti/1.16.0:
... ... @@ -3968,11 +3926,6 @@ packages:
3968 3926 resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==}
3969 3927 dev: true
3970 3928  
3971   - /js-cookie/3.0.1:
3972   - resolution: {integrity: sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==}
3973   - engines: {node: '>=12'}
3974   - dev: false
3975   -
3976 3929 /js-sdsl/4.1.5:
3977 3930 resolution: {integrity: sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==}
3978 3931 dev: true
... ... @@ -4047,7 +4000,7 @@ packages:
4047 4000 dependencies:
4048 4001 universalify: 2.0.0
4049 4002 optionalDependencies:
4050   - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10
  4003 + graceful-fs: 4.2.10
4051 4004 dev: true
4052 4005  
4053 4006 /jsonparse/1.3.1:
... ... @@ -4095,20 +4048,6 @@ packages:
4095 4048 type-check: 0.4.0
4096 4049 dev: true
4097 4050  
4098   - /liftoff/4.0.0:
4099   - resolution: {integrity: sha512-rMGwYF8q7g2XhG2ulBmmJgWv25qBsqRbDn5gH0+wnuyeFt7QBJlHJmtg5qEdn4pN6WVAUMgXnIxytMFRX9c1aA==}
4100   - engines: {node: '>=10.13.0'}
4101   - dependencies:
4102   - extend: 3.0.2
4103   - findup-sync: 5.0.0
4104   - fined: 2.0.0
4105   - flagged-respawn: 2.0.0
4106   - is-plain-object: 5.0.0
4107   - object.map: 1.0.1
4108   - rechoir: 0.8.0
4109   - resolve: 1.22.1
4110   - dev: true
4111   -
4112 4051 /lilconfig/2.0.6:
4113 4052 resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==}
4114 4053 engines: {node: '>=10'}
... ... @@ -4118,8 +4057,8 @@ packages:
4118 4057 resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
4119 4058 dev: true
4120 4059  
4121   - /lint-staged/13.0.4:
4122   - resolution: {integrity: sha512-HxlHCXoYRsq9QCby5wFozmZW00hMs/9e3l+/dz6Qr8Kle4UH0kJTdABAbqhzG+3pcG6QjL9kz7NgGBfph+a5dw==}
  4060 + /lint-staged/13.1.0:
  4061 + resolution: {integrity: sha512-pn/sR8IrcF/T0vpWLilih8jmVouMlxqXxKuAojmbiGX5n/gDnz+abdPptlj0vYnbfE0SQNl3CY/HwtM0+yfOVQ==}
4123 4062 engines: {node: ^14.13.1 || >=16.0.0}
4124 4063 hasBin: true
4125 4064 dependencies:
... ... @@ -4213,10 +4152,6 @@ packages:
4213 4152 resolution: {integrity: sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==}
4214 4153 dev: false
4215 4154  
4216   - /lodash.get/4.4.2:
4217   - resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
4218   - dev: true
4219   -
4220 4155 /lodash.isequal/4.5.0:
4221 4156 resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
4222 4157 dev: false
... ... @@ -4272,22 +4207,6 @@ packages:
4272 4207 /lodash/4.17.21:
4273 4208 resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
4274 4209  
4275   - /log-symbols/4.1.0:
4276   - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
4277   - engines: {node: '>=10'}
4278   - dependencies:
4279   - chalk: 4.1.2
4280   - is-unicode-supported: 0.1.0
4281   - dev: true
4282   -
4283   - /log-symbols/5.1.0:
4284   - resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==}
4285   - engines: {node: '>=12'}
4286   - dependencies:
4287   - chalk: 5.1.2
4288   - is-unicode-supported: 1.3.0
4289   - dev: true
4290   -
4291 4210 /log-update/4.0.0:
4292 4211 resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==}
4293 4212 engines: {node: '>=10'}
... ... @@ -4305,7 +4224,7 @@ packages:
4305 4224 dev: true
4306 4225  
4307 4226 /lru-cache/6.0.0:
4308   - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
  4227 + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==, registry: https://registry.npm.taobao.org/}
4309 4228 engines: {node: '>=10'}
4310 4229 dependencies:
4311 4230 yallist: 4.0.0
... ... @@ -4320,20 +4239,13 @@ packages:
4320 4239 resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==}
4321 4240 engines: {node: '>=12'}
4322 4241 dependencies:
4323   - sourcemap-codec: registry.npmmirror.com/sourcemap-codec/1.4.8
  4242 + sourcemap-codec: 1.4.8
4324 4243 dev: true
4325 4244  
4326 4245 /make-error/1.3.6:
4327 4246 resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
4328 4247 dev: true
4329 4248  
4330   - /make-iterator/1.0.1:
4331   - resolution: {integrity: sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==}
4332   - engines: {node: '>=0.10.0'}
4333   - dependencies:
4334   - kind-of: 6.0.3
4335   - dev: true
4336   -
4337 4249 /map-cache/0.2.2:
4338 4250 resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==}
4339 4251 engines: {node: '>=0.10.0'}
... ... @@ -4449,7 +4361,7 @@ packages:
4449 4361 dev: true
4450 4362  
4451 4363 /mime-db/1.52.0:
4452   - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
  4364 + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, registry: https://registry.npm.taobao.org/}
4453 4365 engines: {node: '>= 0.6'}
4454 4366 dev: false
4455 4367  
... ... @@ -4460,7 +4372,7 @@ packages:
4460 4372 dev: false
4461 4373  
4462 4374 /mime-types/2.1.35:
4463   - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
  4375 + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, registry: https://registry.npm.taobao.org/}
4464 4376 engines: {node: '>= 0.6'}
4465 4377 dependencies:
4466 4378 mime-db: 1.52.0
... ... @@ -4487,6 +4399,13 @@ packages:
4487 4399 brace-expansion: 1.1.11
4488 4400 dev: true
4489 4401  
  4402 + /minimatch/5.1.0:
  4403 + resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==}
  4404 + engines: {node: '>=10'}
  4405 + dependencies:
  4406 + brace-expansion: 2.0.1
  4407 + dev: true
  4408 +
4490 4409 /minimist-options/4.1.0:
4491 4410 resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==}
4492 4411 engines: {node: '>= 6'}
... ... @@ -4512,22 +4431,16 @@ packages:
4512 4431 is-extendable: 1.0.1
4513 4432 dev: true
4514 4433  
4515   - /mkdirp/1.0.4:
4516   - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
4517   - engines: {node: '>=10'}
4518   - hasBin: true
4519   - dev: true
4520   -
4521 4434 /ms/2.0.0:
4522   - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
  4435 + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==, registry: https://registry.npm.taobao.org/}
4523 4436 dev: true
4524 4437  
4525 4438 /ms/2.1.2:
4526 4439 resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
4527 4440 dev: true
4528 4441  
4529   - /mute-stream/0.0.8:
4530   - resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
  4442 + /muggle-string/0.1.0:
  4443 + resolution: {integrity: sha512-Tr1knR3d2mKvvWthlk7202rywKbiOm4rVFLsfAaSIhJ6dt9o47W4S+JMtWhd/PW9Wrdew2/S2fSvhz3E2gkfEg==}
4531 4444 dev: true
4532 4445  
4533 4446 /namespace-emitter/2.0.1:
... ... @@ -4559,17 +4472,13 @@ packages:
4559 4472 dev: true
4560 4473  
4561 4474 /natural-compare-lite/1.4.0:
4562   - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
  4475 + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==, registry: https://registry.npm.taobao.org/}
4563 4476 dev: true
4564 4477  
4565 4478 /natural-compare/1.4.0:
4566 4479 resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
4567 4480 dev: true
4568 4481  
4569   - /neo-async/2.6.2:
4570   - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
4571   - dev: true
4572   -
4573 4482 /next-tick/1.1.0:
4574 4483 resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==}
4575 4484 dev: false
... ... @@ -4593,32 +4502,6 @@ packages:
4593 4502 whatwg-url: 5.0.0
4594 4503 dev: true
4595 4504  
4596   - /node-html-parser/5.4.2:
4597   - resolution: {integrity: sha512-RaBPP3+51hPne/OolXxcz89iYvQvKOydaqoePpOgXcrOKZhjVIzmpKZz+Hd/RBO2/zN2q6CNJhQzucVz+u3Jyw==}
4598   - dependencies:
4599   - css-select: 4.3.0
4600   - he: 1.2.0
4601   - dev: true
4602   -
4603   - /node-plop/0.31.0:
4604   - resolution: {integrity: sha512-aKLPxiBoFTNUovvtK8j/Whc4PZREkYx6htw2HJPiU8wYquXmN8pkd9B3xlFo6AJ4ZlzFsQSf/NXR5xET8EqRYw==}
4605   - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
4606   - dependencies:
4607   - '@types/inquirer': 8.2.5
4608   - change-case: 4.1.2
4609   - del: 6.1.1
4610   - globby: 13.1.2
4611   - handlebars: 4.7.7
4612   - inquirer: 8.2.5
4613   - isbinaryfile: 4.0.10
4614   - lodash.get: 4.4.2
4615   - lower-case: 2.0.2
4616   - mkdirp: 1.0.4
4617   - resolve: 1.22.1
4618   - title-case: 3.0.3
4619   - upper-case: 2.0.2
4620   - dev: true
4621   -
4622 4505 /node-releases/2.0.6:
4623 4506 resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==}
4624 4507 dev: true
... ... @@ -4704,24 +4587,6 @@ packages:
4704 4587 isobject: 3.0.1
4705 4588 dev: true
4706 4589  
4707   - /object.defaults/1.1.0:
4708   - resolution: {integrity: sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==}
4709   - engines: {node: '>=0.10.0'}
4710   - dependencies:
4711   - array-each: 1.0.1
4712   - array-slice: 1.1.0
4713   - for-own: 1.0.0
4714   - isobject: 3.0.1
4715   - dev: true
4716   -
4717   - /object.map/1.0.1:
4718   - resolution: {integrity: sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==}
4719   - engines: {node: '>=0.10.0'}
4720   - dependencies:
4721   - for-own: 1.0.0
4722   - make-iterator: 1.0.1
4723   - dev: true
4724   -
4725 4590 /object.pick/1.3.0:
4726 4591 resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==}
4727 4592 engines: {node: '>=0.10.0'}
... ... @@ -4761,41 +4626,6 @@ packages:
4761 4626 word-wrap: 1.2.3
4762 4627 dev: true
4763 4628  
4764   - /ora/5.4.1:
4765   - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
4766   - engines: {node: '>=10'}
4767   - dependencies:
4768   - bl: 4.1.0
4769   - chalk: 4.1.2
4770   - cli-cursor: 3.1.0
4771   - cli-spinners: 2.7.0
4772   - is-interactive: 1.0.0
4773   - is-unicode-supported: 0.1.0
4774   - log-symbols: 4.1.0
4775   - strip-ansi: 6.0.1
4776   - wcwidth: 1.0.1
4777   - dev: true
4778   -
4779   - /ora/6.1.2:
4780   - resolution: {integrity: sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw==}
4781   - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
4782   - dependencies:
4783   - bl: 5.1.0
4784   - chalk: 5.1.2
4785   - cli-cursor: 4.0.0
4786   - cli-spinners: 2.7.0
4787   - is-interactive: 2.0.0
4788   - is-unicode-supported: 1.3.0
4789   - log-symbols: 5.1.0
4790   - strip-ansi: 7.0.1
4791   - wcwidth: 1.0.1
4792   - dev: true
4793   -
4794   - /os-tmpdir/1.0.2:
4795   - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
4796   - engines: {node: '>=0.10.0'}
4797   - dev: true
4798   -
4799 4629 /p-limit/2.3.0:
4800 4630 resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
4801 4631 engines: {node: '>=6'}
... ... @@ -4847,15 +4677,6 @@ packages:
4847 4677 callsites: 3.1.0
4848 4678 dev: true
4849 4679  
4850   - /parse-filepath/1.0.2:
4851   - resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==}
4852   - engines: {node: '>=0.8'}
4853   - dependencies:
4854   - is-absolute: 1.0.0
4855   - map-cache: 0.2.2
4856   - path-root: 0.1.1
4857   - dev: true
4858   -
4859 4680 /parse-json/5.2.0:
4860 4681 resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
4861 4682 engines: {node: '>=8'}
... ... @@ -4866,11 +4687,6 @@ packages:
4866 4687 lines-and-columns: 1.2.4
4867 4688 dev: true
4868 4689  
4869   - /parse-passwd/1.0.0:
4870   - resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==}
4871   - engines: {node: '>=0.10.0'}
4872   - dev: true
4873   -
4874 4690 /pascal-case/3.1.2:
4875 4691 resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==}
4876 4692 dependencies:
... ... @@ -4913,18 +4729,6 @@ packages:
4913 4729 resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
4914 4730 dev: true
4915 4731  
4916   - /path-root-regex/0.1.2:
4917   - resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==}
4918   - engines: {node: '>=0.10.0'}
4919   - dev: true
4920   -
4921   - /path-root/0.1.1:
4922   - resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==}
4923   - engines: {node: '>=0.10.0'}
4924   - dependencies:
4925   - path-root-regex: 0.1.2
4926   - dev: true
4927   -
4928 4732 /path-type/4.0.0:
4929 4733 resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
4930 4734 engines: {node: '>=8'}
... ... @@ -4970,21 +4774,6 @@ packages:
4970 4774 vue-demi: 0.13.11_vue@3.2.45
4971 4775 dev: false
4972 4776  
4973   - /plop/3.1.1:
4974   - resolution: {integrity: sha512-NuctKmuNUACXBQn25bBr5oj/75nHxdKGwjA/+b7cVoj1sp+gTVqcc8eAr4QcNJgMPsZWRJBN2kMkgmsqbqV9gg==}
4975   - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
4976   - hasBin: true
4977   - dependencies:
4978   - '@types/liftoff': 4.0.0
4979   - chalk: 5.1.2
4980   - interpret: 2.2.0
4981   - liftoff: 4.0.0
4982   - minimist: 1.2.7
4983   - node-plop: 0.31.0
4984   - ora: 6.1.2
4985   - v8flags: 4.0.0
4986   - dev: true
4987   -
4988 4777 /pngjs/5.0.0:
4989 4778 resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==}
4990 4779 engines: {node: '>=10.13.0'}
... ... @@ -5047,6 +4836,14 @@ packages:
5047 4836 util-deprecate: 1.0.2
5048 4837 dev: true
5049 4838  
  4839 + /postcss-selector-parser/6.0.11:
  4840 + resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==}
  4841 + engines: {node: '>=4'}
  4842 + dependencies:
  4843 + cssesc: 3.0.0
  4844 + util-deprecate: 1.0.2
  4845 + dev: true
  4846 +
5050 4847 /postcss-sorting/7.0.1_postcss@8.4.19:
5051 4848 resolution: {integrity: sha512-iLBFYz6VRYyLJEJsBJ8M3TCqNcckVzz4wFounSc5Oez35ogE/X+aoC5fFu103Ot7NyvjU3/xqIXn93Gp3kJk4g==}
5052 4849 peerDependencies:
... ... @@ -5065,7 +4862,7 @@ packages:
5065 4862 dependencies:
5066 4863 chalk: 1.1.3
5067 4864 js-base64: 2.6.4
5068   - source-map: registry.npmmirror.com/source-map/0.5.7
  4865 + source-map: 0.5.7
5069 4866 supports-color: 3.2.3
5070 4867 dev: true
5071 4868  
... ... @@ -5145,7 +4942,7 @@ packages:
5145 4942 dev: true
5146 4943  
5147 4944 /proxy-from-env/1.1.0:
5148   - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
  4945 + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==, registry: https://registry.npm.taobao.org/}
5149 4946 dev: false
5150 4947  
5151 4948 /punycode/1.3.2:
... ... @@ -5195,7 +4992,7 @@ packages:
5195 4992 dev: false
5196 4993  
5197 4994 /queue-microtask/1.2.3:
5198   - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
  4995 + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, registry: https://registry.npm.taobao.org/}
5199 4996 dev: true
5200 4997  
5201 4998 /quick-lru/4.0.1:
... ... @@ -5244,13 +5041,6 @@ packages:
5244 5041 picomatch: 2.3.1
5245 5042 dev: true
5246 5043  
5247   - /rechoir/0.8.0:
5248   - resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==}
5249   - engines: {node: '>= 10.13.0'}
5250   - dependencies:
5251   - resolve: 1.22.1
5252   - dev: true
5253   -
5254 5044 /redent/3.0.0:
5255 5045 resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
5256 5046 engines: {node: '>=8'}
... ... @@ -5261,7 +5051,6 @@ packages:
5261 5051  
5262 5052 /regenerator-runtime/0.13.11:
5263 5053 resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
5264   - dev: false
5265 5054  
5266 5055 /regex-not/1.0.2:
5267 5056 resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==}
... ... @@ -5272,15 +5061,10 @@ packages:
5272 5061 dev: true
5273 5062  
5274 5063 /regexpp/3.2.0:
5275   - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==}
  5064 + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==, registry: https://registry.npm.taobao.org/}
5276 5065 engines: {node: '>=8'}
5277 5066 dev: true
5278 5067  
5279   - /relateurl/0.2.7:
5280   - resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==}
5281   - engines: {node: '>= 0.10'}
5282   - dev: true
5283   -
5284 5068 /repeat-element/1.1.4:
5285 5069 resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==}
5286 5070 engines: {node: '>=0.10.0'}
... ... @@ -5304,14 +5088,6 @@ packages:
5304 5088 resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
5305 5089 dev: false
5306 5090  
5307   - /resolve-dir/1.0.1:
5308   - resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==}
5309   - engines: {node: '>=0.10.0'}
5310   - dependencies:
5311   - expand-tilde: 2.0.2
5312   - global-modules: 1.0.0
5313   - dev: true
5314   -
5315 5091 /resolve-from/4.0.0:
5316 5092 resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
5317 5093 engines: {node: '>=4'}
... ... @@ -5351,21 +5127,13 @@ packages:
5351 5127 signal-exit: 3.0.7
5352 5128 dev: true
5353 5129  
5354   - /restore-cursor/4.0.0:
5355   - resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==}
5356   - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
5357   - dependencies:
5358   - onetime: 5.1.2
5359   - signal-exit: 3.0.7
5360   - dev: true
5361   -
5362 5130 /ret/0.1.15:
5363 5131 resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==}
5364 5132 engines: {node: '>=0.12'}
5365 5133 dev: true
5366 5134  
5367 5135 /reusify/1.0.4:
5368   - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
  5136 + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, registry: https://registry.npm.taobao.org/}
5369 5137 engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
5370 5138 dev: true
5371 5139  
... ... @@ -5392,28 +5160,23 @@ packages:
5392 5160 dev: true
5393 5161  
5394 5162 /rollup/2.79.1:
5395   - resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==}
  5163 + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==, registry: https://registry.npm.taobao.org/}
5396 5164 engines: {node: '>=10.0.0'}
5397 5165 hasBin: true
5398 5166 optionalDependencies:
5399   - fsevents: registry.npmmirror.com/fsevents/2.3.2
  5167 + fsevents: 2.3.2
5400 5168 dev: true
5401 5169  
5402   - /rollup/3.5.0:
5403   - resolution: {integrity: sha512-TYu2L+TGhmNsXCtByont89u+ATQLcDy6A+++PwLXYunRtOm7XnaD+65s1pvewaOxMYR0eOkMXn9/i0saBxxpnQ==}
  5170 + /rollup/3.6.0:
  5171 + resolution: {integrity: sha512-qCgiBeSu2/AIOKWGFMiRkjPlGlcVwxAjwpGKQZOQYng+83Hip4PjrWHm7EQX1wnrvRqfTytEihRRfLHdX+hR4g==, registry: https://registry.npm.taobao.org/}
5404 5172 engines: {node: '>=14.18.0', npm: '>=8.0.0'}
5405 5173 hasBin: true
5406 5174 optionalDependencies:
5407   - fsevents: registry.npmmirror.com/fsevents/2.3.2
5408   - dev: true
5409   -
5410   - /run-async/2.4.1:
5411   - resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
5412   - engines: {node: '>=0.12.0'}
  5175 + fsevents: 2.3.2
5413 5176 dev: true
5414 5177  
5415 5178 /run-parallel/1.2.0:
5416   - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
  5179 + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, registry: https://registry.npm.taobao.org/}
5417 5180 dependencies:
5418 5181 queue-microtask: 1.2.3
5419 5182 dev: true
... ... @@ -5434,10 +5197,6 @@ packages:
5434 5197 ret: 0.1.15
5435 5198 dev: true
5436 5199  
5437   - /safer-buffer/2.1.2:
5438   - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
5439   - dev: true
5440   -
5441 5200 /sass/1.56.1:
5442 5201 resolution: {integrity: sha512-VpEyKpyBPCxE7qGDtOcdJ6fFbcpOM+Emu7uZLxVrkX8KVU/Dp5UF7WLvzqRuUhB6mqqQt1xffLoG+AndxTZrCQ==}
5443 5202 engines: {node: '>=12.0.0'}
... ... @@ -5455,7 +5214,7 @@ packages:
5455 5214 dev: false
5456 5215  
5457 5216 /semver/5.7.1:
5458   - resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==}
  5217 + resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==, registry: https://registry.npm.taobao.org/}
5459 5218 hasBin: true
5460 5219 dev: true
5461 5220  
... ... @@ -5465,7 +5224,7 @@ packages:
5465 5224 dev: true
5466 5225  
5467 5226 /semver/7.3.7:
5468   - resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==}
  5227 + resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==, registry: https://registry.npm.taobao.org/}
5469 5228 engines: {node: '>=10'}
5470 5229 hasBin: true
5471 5230 dependencies:
... ... @@ -5473,7 +5232,7 @@ packages:
5473 5232 dev: true
5474 5233  
5475 5234 /semver/7.3.8:
5476   - resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==}
  5235 + resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==, registry: https://registry.npm.taobao.org/}
5477 5236 engines: {node: '>=10'}
5478 5237 hasBin: true
5479 5238 dependencies:
... ... @@ -5531,11 +5290,6 @@ packages:
5531 5290 engines: {node: '>=8'}
5532 5291 dev: true
5533 5292  
5534   - /slash/4.0.0:
5535   - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==}
5536   - engines: {node: '>=12'}
5537   - dev: true
5538   -
5539 5293 /slate-history/0.66.0_slate@0.72.8:
5540 5294 resolution: {integrity: sha512-6MWpxGQZiMvSINlCbMW43E2YBSVMCMCIwQfBzGssjWw4kb0qfvj0pIdblWNRQZD0hR6WHP+dHHgGSeVdMWzfng==}
5541 5295 peerDependencies:
... ... @@ -5616,7 +5370,7 @@ packages:
5616 5370 define-property: 0.2.5
5617 5371 extend-shallow: 2.0.1
5618 5372 map-cache: 0.2.2
5619   - source-map: registry.npmmirror.com/source-map/0.5.7
  5373 + source-map: 0.5.7
5620 5374 source-map-resolve: 0.5.3
5621 5375 use: 3.1.1
5622 5376 transitivePeerDependencies:
... ... @@ -5642,7 +5396,7 @@ packages:
5642 5396 resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
5643 5397 dependencies:
5644 5398 buffer-from: 1.1.2
5645   - source-map: registry.npmmirror.com/source-map/0.6.1
  5399 + source-map: 0.6.1
5646 5400 dev: true
5647 5401  
5648 5402 /source-map-url/0.4.1:
... ... @@ -5650,12 +5404,18 @@ packages:
5650 5404 deprecated: See https://github.com/lydell/source-map-url#deprecated
5651 5405 dev: true
5652 5406  
  5407 + /source-map/0.5.7:
  5408 + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
  5409 + engines: {node: '>=0.10.0'}
  5410 + dev: true
  5411 +
5653 5412 /source-map/0.6.1:
5654 5413 resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
5655 5414 engines: {node: '>=0.10.0'}
5656 5415  
5657 5416 /sourcemap-codec/1.4.8:
5658 5417 resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
  5418 + deprecated: Please use @jridgewell/sourcemap-codec instead
5659 5419  
5660 5420 /spdx-correct/3.1.1:
5661 5421 resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==}
... ... @@ -5788,7 +5548,7 @@ packages:
5788 5548 resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==}
5789 5549 dev: true
5790 5550  
5791   - /stylelint-config-html/1.1.0_qendsqix7hqecpnpx4fjs6qry4:
  5551 + /stylelint-config-html/1.1.0_bto6pmslw3cibsiuq6smxboytq:
5792 5552 resolution: {integrity: sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==}
5793 5553 engines: {node: ^12 || >=14}
5794 5554 peerDependencies:
... ... @@ -5796,52 +5556,52 @@ packages:
5796 5556 stylelint: '>=14.0.0'
5797 5557 dependencies:
5798 5558 postcss-html: 1.5.0
5799   - stylelint: 14.15.0
  5559 + stylelint: 14.16.0
5800 5560 dev: true
5801 5561  
5802   - /stylelint-config-prettier/9.0.4_stylelint@14.15.0:
  5562 + /stylelint-config-prettier/9.0.4_stylelint@14.16.0:
5803 5563 resolution: {integrity: sha512-38nIGTGpFOiK5LjJ8Ma1yUgpKENxoKSOhbDNSemY7Ep0VsJoXIW9Iq/2hSt699oB9tReynfWicTAoIHiq8Rvbg==}
5804 5564 engines: {node: '>= 12'}
5805 5565 hasBin: true
5806 5566 peerDependencies:
5807 5567 stylelint: '>=11.0.0'
5808 5568 dependencies:
5809   - stylelint: 14.15.0
  5569 + stylelint: 14.16.0
5810 5570 dev: true
5811 5571  
5812   - /stylelint-config-recommended/9.0.0_stylelint@14.15.0:
  5572 + /stylelint-config-recommended/9.0.0_stylelint@14.16.0:
5813 5573 resolution: {integrity: sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ==}
5814 5574 peerDependencies:
5815 5575 stylelint: ^14.10.0
5816 5576 dependencies:
5817   - stylelint: 14.15.0
  5577 + stylelint: 14.16.0
5818 5578 dev: true
5819 5579  
5820   - /stylelint-config-standard/29.0.0_stylelint@14.15.0:
  5580 + /stylelint-config-standard/29.0.0_stylelint@14.16.0:
5821 5581 resolution: {integrity: sha512-uy8tZLbfq6ZrXy4JKu3W+7lYLgRQBxYTUUB88vPgQ+ZzAxdrvcaSUW9hOMNLYBnwH+9Kkj19M2DHdZ4gKwI7tg==}
5822 5582 peerDependencies:
5823 5583 stylelint: ^14.14.0
5824 5584 dependencies:
5825   - stylelint: 14.15.0
5826   - stylelint-config-recommended: 9.0.0_stylelint@14.15.0
  5585 + stylelint: 14.16.0
  5586 + stylelint-config-recommended: 9.0.0_stylelint@14.16.0
5827 5587 dev: true
5828 5588  
5829   - /stylelint-order/5.0.0_stylelint@14.15.0:
  5589 + /stylelint-order/5.0.0_stylelint@14.16.0:
5830 5590 resolution: {integrity: sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw==}
5831 5591 peerDependencies:
5832 5592 stylelint: ^14.0.0
5833 5593 dependencies:
5834 5594 postcss: 8.4.19
5835 5595 postcss-sorting: 7.0.1_postcss@8.4.19
5836   - stylelint: 14.15.0
  5596 + stylelint: 14.16.0
5837 5597 dev: true
5838 5598  
5839   - /stylelint/14.15.0:
5840   - resolution: {integrity: sha512-JOgDAo5QRsqiOZPZO+B9rKJvBm64S0xasbuRPAbPs6/vQDgDCnZLIiw6XcAS6GQKk9k1sBWR6rmH3Mfj8OknKg==}
  5599 + /stylelint/14.16.0:
  5600 + resolution: {integrity: sha512-X6uTi9DcxjzLV8ZUAjit1vsRtSwcls0nl07c9rqOPzvpA8IvTX/xWEkBRowS0ffevRrqkHa/ThDEu86u73FQDg==}
5841 5601 engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
5842 5602 hasBin: true
5843 5603 dependencies:
5844   - '@csstools/selector-specificity': 2.0.2_45y636a2vqremknoajyxd5nkzy
  5604 + '@csstools/selector-specificity': 2.0.2_tbwh2mpcdwdeb2slx6bobindua
5845 5605 balanced-match: 2.0.0
5846 5606 colord: 2.9.3
5847 5607 cosmiconfig: 7.1.0
... ... @@ -5854,7 +5614,7 @@ packages:
5854 5614 globby: 11.1.0
5855 5615 globjoin: 0.1.4
5856 5616 html-tags: 3.2.0
5857   - ignore: 5.2.0
  5617 + ignore: 5.2.1
5858 5618 import-lazy: 4.0.0
5859 5619 imurmurhash: 0.1.4
5860 5620 is-plain-object: 5.0.0
... ... @@ -5868,7 +5628,7 @@ packages:
5868 5628 postcss-media-query-parser: 0.2.3
5869 5629 postcss-resolve-nested-selector: 0.1.1
5870 5630 postcss-safe-parser: 6.0.0_postcss@8.4.19
5871   - postcss-selector-parser: 6.0.10
  5631 + postcss-selector-parser: 6.0.11
5872 5632 postcss-value-parser: 4.2.0
5873 5633 resolve-from: 5.0.0
5874 5634 string-width: 4.2.3
... ... @@ -5960,6 +5720,10 @@ packages:
5960 5720 stable: 0.1.8
5961 5721 dev: true
5962 5722  
  5723 + /systemjs/6.13.0:
  5724 + resolution: {integrity: sha512-P3cgh2bpaPvAO2NE3uRp/n6hmk4xPX4DQf+UzTlCAycssKdqhp6hjw+ENWe+aUS7TogKRFtptMosTSFeC6R55g==}
  5725 + dev: true
  5726 +
5963 5727 /table/6.8.1:
5964 5728 resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==}
5965 5729 engines: {node: '>=10.0.0'}
... ... @@ -5971,8 +5735,8 @@ packages:
5971 5735 strip-ansi: 6.0.1
5972 5736 dev: true
5973 5737  
5974   - /terser/5.15.1:
5975   - resolution: {integrity: sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==}
  5738 + /terser/5.16.1:
  5739 + resolution: {integrity: sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==}
5976 5740 engines: {node: '>=10'}
5977 5741 hasBin: true
5978 5742 dependencies:
... ... @@ -6005,18 +5769,9 @@ packages:
6005 5769 resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==}
6006 5770 dev: false
6007 5771  
6008   - /title-case/3.0.3:
6009   - resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==}
6010   - dependencies:
6011   - tslib: 2.4.1
6012   - dev: true
6013   -
6014   - /tmp/0.0.33:
6015   - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
6016   - engines: {node: '>=0.6.0'}
6017   - dependencies:
6018   - os-tmpdir: 1.0.2
6019   - dev: true
  5772 + /to-fast-properties/2.0.0:
  5773 + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
  5774 + engines: {node: '>=4'}
6020 5775  
6021 5776 /to-object-path/0.3.0:
6022 5777 resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==}
... ... @@ -6026,7 +5781,7 @@ packages:
6026 5781 dev: true
6027 5782  
6028 5783 /to-regex-range/2.1.1:
6029   - resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==}
  5784 + resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==, registry: https://registry.npm.taobao.org/}
6030 5785 engines: {node: '>=0.10.0'}
6031 5786 dependencies:
6032 5787 is-number: 3.0.0
... ... @@ -6034,7 +5789,7 @@ packages:
6034 5789 dev: true
6035 5790  
6036 5791 /to-regex-range/5.0.1:
6037   - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
  5792 + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, registry: https://registry.npm.taobao.org/}
6038 5793 engines: {node: '>=8.0'}
6039 5794 dependencies:
6040 5795 is-number: 7.0.0
... ... @@ -6095,7 +5850,7 @@ packages:
6095 5850 dev: true
6096 5851  
6097 5852 /tslib/1.14.1:
6098   - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
  5853 + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==, registry: https://registry.npm.taobao.org/}
6099 5854 dev: true
6100 5855  
6101 5856 /tslib/2.3.0:
... ... @@ -6107,7 +5862,7 @@ packages:
6107 5862 dev: true
6108 5863  
6109 5864 /tsutils/3.21.0_typescript@4.9.3:
6110   - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
  5865 + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==, registry: https://registry.npm.taobao.org/}
6111 5866 engines: {node: '>= 6'}
6112 5867 peerDependencies:
6113 5868 typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
... ... @@ -6161,11 +5916,6 @@ packages:
6161 5916 engines: {node: '>=4.2.0'}
6162 5917 hasBin: true
6163 5918  
6164   - /unc-path-regex/0.1.2:
6165   - resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==}
6166   - engines: {node: '>=0.10.0'}
6167   - dev: true
6168   -
6169 5919 /union-value/1.0.1:
6170 5920 resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==}
6171 5921 engines: {node: '>=0.10.0'}
... ... @@ -6197,7 +5947,7 @@ packages:
6197 5947 dependencies:
6198 5948 browserslist: 4.21.4
6199 5949 escalade: 3.1.1
6200   - picocolors: registry.npmmirror.com/picocolors/1.0.0
  5950 + picocolors: 1.0.0
6201 5951 dev: true
6202 5952  
6203 5953 /upper-case-first/2.0.2:
... ... @@ -6247,11 +5997,6 @@ packages:
6247 5997 resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==}
6248 5998 dev: true
6249 5999  
6250   - /v8flags/4.0.0:
6251   - resolution: {integrity: sha512-83N0OkTbn6gOjJ2awNuzuK4czeGxwEwBoTqlhBZhnp8o0IJ72mXRQKphj/azwRf3acbDJZYZhbOPEJHd884ELg==}
6252   - engines: {node: '>= 10.13.0'}
6253   - dev: true
6254   -
6255 6000 /validate-npm-package-license/3.0.4:
6256 6001 resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
6257 6002 dependencies:
... ... @@ -6264,7 +6009,7 @@ packages:
6264 6009 engines: {node: '>= 0.8'}
6265 6010 dev: true
6266 6011  
6267   - /vite-plugin-compression/0.5.1_vite@3.2.4:
  6012 + /vite-plugin-compression/0.5.1_vite@3.2.5:
6268 6013 resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==}
6269 6014 peerDependencies:
6270 6015 vite: '>=2.0.0'
... ... @@ -6272,12 +6017,18 @@ packages:
6272 6017 chalk: 4.1.2
6273 6018 debug: 4.3.4
6274 6019 fs-extra: 10.1.0
6275   - vite: 3.2.4_ajklay5k626t46b6fyghkbup3i
  6020 + vite: 3.2.5_egxhkvvxjoy6k24tlk4nbv6pfm
6276 6021 transitivePeerDependencies:
6277 6022 - supports-color
6278 6023 dev: true
6279 6024  
6280   - /vite-plugin-eslint/1.8.1_eslint@8.28.0+vite@3.2.4:
  6025 + /vite-plugin-ejs/1.6.4:
  6026 + resolution: {integrity: sha512-23p1RS4PiA0veXY5/gHZ60pl3pPvd8NEqdBsDgxNK8nM1rjFFDcVb0paNmuipzCgNP/Y0f/Id22M7Il4kvZ2jA==}
  6027 + dependencies:
  6028 + ejs: 3.1.8
  6029 + dev: true
  6030 +
  6031 + /vite-plugin-eslint/1.8.1_eslint@8.29.0+vite@3.2.5:
6281 6032 resolution: {integrity: sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==}
6282 6033 peerDependencies:
6283 6034 eslint: '>=7'
... ... @@ -6285,32 +6036,12 @@ packages:
6285 6036 dependencies:
6286 6037 '@rollup/pluginutils': 4.2.1
6287 6038 '@types/eslint': 8.4.10
6288   - eslint: 8.28.0
  6039 + eslint: 8.29.0
6289 6040 rollup: 2.79.1
6290   - vite: 3.2.4_ajklay5k626t46b6fyghkbup3i
6291   - dev: true
6292   -
6293   - /vite-plugin-html/3.2.0_vite@3.2.4:
6294   - resolution: {integrity: sha512-2VLCeDiHmV/BqqNn5h2V+4280KRgQzCFN47cst3WiNK848klESPQnzuC3okH5XHtgwHH/6s1Ho/YV6yIO0pgoQ==}
6295   - peerDependencies:
6296   - vite: '>=2.0.0'
6297   - dependencies:
6298   - '@rollup/pluginutils': 4.2.1
6299   - colorette: 2.0.19
6300   - connect-history-api-fallback: 1.6.0
6301   - consola: 2.15.3
6302   - dotenv: 16.0.3
6303   - dotenv-expand: 8.0.3
6304   - ejs: 3.1.8
6305   - fast-glob: 3.2.12
6306   - fs-extra: 10.1.0
6307   - html-minifier-terser: 6.1.0
6308   - node-html-parser: 5.4.2
6309   - pathe: 0.2.0
6310   - vite: 3.2.4_ajklay5k626t46b6fyghkbup3i
  6041 + vite: 3.2.5_egxhkvvxjoy6k24tlk4nbv6pfm
6311 6042 dev: true
6312 6043  
6313   - /vite-plugin-progress/0.0.6_vite@3.2.4:
  6044 + /vite-plugin-progress/0.0.6_vite@3.2.5:
6314 6045 resolution: {integrity: sha512-pIK2TVEY4XFGrz10CQDdEufBBCDaV0geRHfXV3abGTBr+OF9O0Zmd3ZDrHJXDv4Rl3qAQP4BTCuPYQ3XqstmqA==}
6315 6046 engines: {node: '>=14', pnpm: '>=7.0.0'}
6316 6047 peerDependencies:
... ... @@ -6319,10 +6050,10 @@ packages:
6319 6050 picocolors: 1.0.0
6320 6051 progress: 2.0.3
6321 6052 rd: 2.0.1
6322   - vite: 3.2.4_ajklay5k626t46b6fyghkbup3i
  6053 + vite: 3.2.5_egxhkvvxjoy6k24tlk4nbv6pfm
6323 6054 dev: true
6324 6055  
6325   - /vite-plugin-purge-icons/0.9.1_vite@3.2.4:
  6056 + /vite-plugin-purge-icons/0.9.1_vite@3.2.5:
6326 6057 resolution: {integrity: sha512-oS0Y9Iq6vGnTDVRzB8xJNhA/gGlyR0lfCICU6+9FRKdrO5PnT34fRjvd8YWEsegCrk91+w3GVZc0HJDj/dPp5Q==}
6327 6058 engines: {node: '>= 12'}
6328 6059 peerDependencies:
... ... @@ -6331,13 +6062,13 @@ packages:
6331 6062 '@purge-icons/core': 0.9.1
6332 6063 '@purge-icons/generated': 0.9.0
6333 6064 rollup-plugin-purge-icons: 0.9.1
6334   - vite: 3.2.4_ajklay5k626t46b6fyghkbup3i
  6065 + vite: 3.2.5_egxhkvvxjoy6k24tlk4nbv6pfm
6335 6066 transitivePeerDependencies:
6336 6067 - encoding
6337 6068 - supports-color
6338 6069 dev: true
6339 6070  
6340   - /vite-plugin-style-import/2.0.0_vite@3.2.4:
  6071 + /vite-plugin-style-import/2.0.0_vite@3.2.5:
6341 6072 resolution: {integrity: sha512-qtoHQae5dSUQPo/rYz/8p190VU5y19rtBaeV7ryLa/AYAU/e9CG89NrN/3+k7MR8mJy/GPIu91iJ3zk9foUOSA==}
6342 6073 peerDependencies:
6343 6074 vite: '>=2.0.0'
... ... @@ -6349,10 +6080,10 @@ packages:
6349 6080 fs-extra: 10.1.0
6350 6081 magic-string: 0.25.9
6351 6082 pathe: 0.2.0
6352   - vite: 3.2.4_ajklay5k626t46b6fyghkbup3i
  6083 + vite: 3.2.5_egxhkvvxjoy6k24tlk4nbv6pfm
6353 6084 dev: true
6354 6085  
6355   - /vite-plugin-svg-icons/2.0.1_vite@3.2.4:
  6086 + /vite-plugin-svg-icons/2.0.1_vite@3.2.5:
6356 6087 resolution: {integrity: sha512-6ktD+DhV6Rz3VtedYvBKKVA2eXF+sAQVaKkKLDSqGUfnhqXl3bj5PPkVTl3VexfTuZy66PmINi8Q6eFnVfRUmA==}
6357 6088 peerDependencies:
6358 6089 vite: '>=2.0.0'
... ... @@ -6365,22 +6096,22 @@ packages:
6365 6096 pathe: 0.2.0
6366 6097 svg-baker: 1.7.0
6367 6098 svgo: 2.8.0
6368   - vite: 3.2.4_ajklay5k626t46b6fyghkbup3i
  6099 + vite: 3.2.5_egxhkvvxjoy6k24tlk4nbv6pfm
6369 6100 transitivePeerDependencies:
6370 6101 - supports-color
6371 6102 dev: true
6372 6103  
6373   - /vite-plugin-vue-setup-extend/0.4.0_vite@3.2.4:
  6104 + /vite-plugin-vue-setup-extend/0.4.0_vite@3.2.5:
6374 6105 resolution: {integrity: sha512-WMbjPCui75fboFoUTHhdbXzu4Y/bJMv5N9QT9a7do3wNMNHHqrk+Tn2jrSJU0LS5fGl/EG+FEDBYVUeWIkDqXQ==}
6375 6106 peerDependencies:
6376 6107 vite: '>=2.0.0'
6377 6108 dependencies:
6378 6109 '@vue/compiler-sfc': 3.2.45
6379 6110 magic-string: 0.25.9
6380   - vite: 3.2.4_ajklay5k626t46b6fyghkbup3i
  6111 + vite: 3.2.5_egxhkvvxjoy6k24tlk4nbv6pfm
6381 6112 dev: true
6382 6113  
6383   - /vite-plugin-windicss/1.8.8_vite@3.2.4:
  6114 + /vite-plugin-windicss/1.8.8_vite@3.2.5:
6384 6115 resolution: {integrity: sha512-iyu+ZX0NmhNEUaLPv7xtC+EFRBpWMmw0nhd9a9upayfuNG/thwslKiQKmRB7U/dG0k/2oWLvPDvN/B9i7oRgSA==}
6385 6116 peerDependencies:
6386 6117 vite: ^2.0.1 || ^3.0.0
... ... @@ -6388,14 +6119,14 @@ packages:
6388 6119 '@windicss/plugin-utils': 1.8.8
6389 6120 debug: 4.3.4
6390 6121 kolorist: 1.6.0
6391   - vite: 3.2.4_ajklay5k626t46b6fyghkbup3i
  6122 + vite: 3.2.5_egxhkvvxjoy6k24tlk4nbv6pfm
6392 6123 windicss: 3.5.6
6393 6124 transitivePeerDependencies:
6394 6125 - supports-color
6395 6126 dev: true
6396 6127  
6397   - /vite/3.2.4_ajklay5k626t46b6fyghkbup3i:
6398   - resolution: {integrity: sha512-Z2X6SRAffOUYTa+sLy3NQ7nlHFU100xwanq1WDwqaiFiCe+25zdxP1TfCS5ojPV2oDDcXudHIoPnI1Z/66B7Yw==}
  6128 + /vite/3.2.5_egxhkvvxjoy6k24tlk4nbv6pfm:
  6129 + resolution: {integrity: sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ==}
6399 6130 engines: {node: ^14.18.0 || >=16.0.0}
6400 6131 hasBin: true
6401 6132 peerDependencies:
... ... @@ -6419,14 +6150,15 @@ packages:
6419 6150 terser:
6420 6151 optional: true
6421 6152 dependencies:
6422   - '@types/node': 18.11.9
  6153 + '@types/node': 18.11.11
6423 6154 esbuild: 0.15.14
6424 6155 postcss: 8.4.19
6425 6156 resolve: 1.22.1
6426 6157 rollup: 2.79.1
6427 6158 sass: 1.56.1
  6159 + terser: 5.16.1
6428 6160 optionalDependencies:
6429   - fsevents: registry.npmmirror.com/fsevents/2.3.2
  6161 + fsevents: 2.3.2
6430 6162 dev: true
6431 6163  
6432 6164 /vue-cropper/1.0.5:
... ... @@ -6448,14 +6180,14 @@ packages:
6448 6180 vue: 3.2.45
6449 6181 dev: false
6450 6182  
6451   - /vue-eslint-parser/9.1.0_eslint@8.28.0:
  6183 + /vue-eslint-parser/9.1.0_eslint@8.29.0:
6452 6184 resolution: {integrity: sha512-NGn/iQy8/Wb7RrRa4aRkokyCZfOUWk19OP5HP6JEozQFX5AoS/t+Z0ZN7FY4LlmWc4FNI922V7cvX28zctN8dQ==}
6453 6185 engines: {node: ^14.17.0 || >=16.0.0}
6454 6186 peerDependencies:
6455 6187 eslint: '>=6.0.0'
6456 6188 dependencies:
6457 6189 debug: 4.3.4
6458   - eslint: 8.28.0
  6190 + eslint: 8.29.0
6459 6191 eslint-scope: 7.1.1
6460 6192 eslint-visitor-keys: 3.3.0
6461 6193 espree: 9.4.1
... ... @@ -6487,6 +6219,24 @@ packages:
6487 6219 vue: 3.2.45
6488 6220 dev: false
6489 6221  
  6222 + /vue-template-compiler/2.7.14:
  6223 + resolution: {integrity: sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==}
  6224 + dependencies:
  6225 + de-indent: 1.0.2
  6226 + he: 1.2.0
  6227 + dev: true
  6228 +
  6229 + /vue-tsc/1.0.11_typescript@4.9.3:
  6230 + resolution: {integrity: sha512-lj+6dEroPsE4wmQOPtjCzAf8x363Km5/tuEvMEoQaoRnzs9myBM46FNvCGIIPStYUGuaqF1W1bORmP2KDQEORA==}
  6231 + hasBin: true
  6232 + peerDependencies:
  6233 + typescript: '*'
  6234 + dependencies:
  6235 + '@volar/vue-language-core': 1.0.11
  6236 + '@volar/vue-typescript': 1.0.11
  6237 + typescript: 4.9.3
  6238 + dev: true
  6239 +
6490 6240 /vue-types/5.0.1_vue@3.2.45:
6491 6241 resolution: {integrity: sha512-pHahh/Ht+mxAhSGXfFe0WQidZukYUoCevPoQtePpONrmNP+OjX3/ps/XjYLgw/Zbv4rks242eiVJcjE3EELsyw==}
6492 6242 engines: {node: '>=14.0.0'}
... ... @@ -6519,12 +6269,6 @@ packages:
6519 6269 xe-utils: 3.5.7
6520 6270 dev: false
6521 6271  
6522   - /wcwidth/1.0.1:
6523   - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
6524   - dependencies:
6525   - defaults: 1.0.4
6526   - dev: true
6527   -
6528 6272 /web-storage-cache/1.1.1:
6529 6273 resolution: {integrity: sha512-D0MieGooOs8RpsrK+vnejXnvh4OOv/+lTFB35JRkJJQt+uOjPE08XpaE0QBLMTRu47B1KGT/Nq3Gbag3Orinzw==}
6530 6274 dev: false
... ... @@ -6574,10 +6318,6 @@ packages:
6574 6318 engines: {node: '>=0.10.0'}
6575 6319 dev: true
6576 6320  
6577   - /wordwrap/1.0.0:
6578   - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
6579   - dev: true
6580   -
6581 6321 /wrap-ansi/6.2.0:
6582 6322 resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
6583 6323 engines: {node: '>=8'}
... ... @@ -6626,7 +6366,7 @@ packages:
6626 6366 dev: true
6627 6367  
6628 6368 /yallist/4.0.0:
6629   - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
  6369 + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, registry: https://registry.npm.taobao.org/}
6630 6370 dev: true
6631 6371  
6632 6372 /yaml-eslint-parser/0.3.2:
... ... @@ -6710,600 +6450,3 @@ packages:
6710 6450 dependencies:
6711 6451 tslib: 2.3.0
6712 6452 dev: false
6713   -
6714   - registry.npmmirror.com/@babel/helper-string-parser/7.19.4:
6715   - resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz}
6716   - name: '@babel/helper-string-parser'
6717   - version: 7.19.4
6718   - engines: {node: '>=6.9.0'}
6719   -
6720   - registry.npmmirror.com/@babel/helper-validator-identifier/7.19.1:
6721   - resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz}
6722   - name: '@babel/helper-validator-identifier'
6723   - version: 7.19.1
6724   - engines: {node: '>=6.9.0'}
6725   -
6726   - registry.npmmirror.com/@babel/parser/7.20.3:
6727   - resolution: {integrity: sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/parser/-/parser-7.20.3.tgz}
6728   - name: '@babel/parser'
6729   - version: 7.20.3
6730   - engines: {node: '>=6.0.0'}
6731   - hasBin: true
6732   - dependencies:
6733   - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2
6734   -
6735   - registry.npmmirror.com/@babel/types/7.20.2:
6736   - resolution: {integrity: sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/types/-/types-7.20.2.tgz}
6737   - name: '@babel/types'
6738   - version: 7.20.2
6739   - engines: {node: '>=6.9.0'}
6740   - dependencies:
6741   - '@babel/helper-string-parser': registry.npmmirror.com/@babel/helper-string-parser/7.19.4
6742   - '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier/7.19.1
6743   - to-fast-properties: registry.npmmirror.com/to-fast-properties/2.0.0
6744   -
6745   - registry.npmmirror.com/@esbuild/android-arm/0.15.14:
6746   - resolution: {integrity: sha512-+Rb20XXxRGisNu2WmNKk+scpanb7nL5yhuI1KR9wQFiC43ddPj/V1fmNyzlFC9bKiG4mYzxW7egtoHVcynr+OA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.15.14.tgz}
6747   - name: '@esbuild/android-arm'
6748   - version: 0.15.14
6749   - engines: {node: '>=12'}
6750   - cpu: [arm]
6751   - os: [android]
6752   - requiresBuild: true
6753   - dev: true
6754   - optional: true
6755   -
6756   - registry.npmmirror.com/@esbuild/linux-loong64/0.15.14:
6757   - resolution: {integrity: sha512-eQi9rosGNVQFJyJWV0HCA5WZae/qWIQME7s8/j8DMvnylfBv62Pbu+zJ2eUDqNf2O4u3WB+OEXyfkpBoe194sg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.15.14.tgz}
6758   - name: '@esbuild/linux-loong64'
6759   - version: 0.15.14
6760   - engines: {node: '>=12'}
6761   - cpu: [loong64]
6762   - os: [linux]
6763   - requiresBuild: true
6764   - dev: true
6765   - optional: true
6766   -
6767   - registry.npmmirror.com/@intlify/message-compiler/9.3.0-beta.10:
6768   - resolution: {integrity: sha512-RoOC6yceOykLRhN0NlbkNOBUx1el6iphx3W8NfOx3jHVNtfT1FYokx14/5sU3F1F0uxeG4sp6q+ppKvaF8o+ww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.3.0-beta.10.tgz}
6769   - name: '@intlify/message-compiler'
6770   - version: 9.3.0-beta.10
6771   - engines: {node: '>= 14'}
6772   - dependencies:
6773   - '@intlify/shared': registry.npmmirror.com/@intlify/shared/9.3.0-beta.10
6774   - source-map: registry.npmmirror.com/source-map/0.6.1
6775   - dev: true
6776   -
6777   - registry.npmmirror.com/@intlify/shared/9.2.2:
6778   - resolution: {integrity: sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@intlify/shared/-/shared-9.2.2.tgz}
6779   - name: '@intlify/shared'
6780   - version: 9.2.2
6781   - engines: {node: '>= 14'}
6782   -
6783   - registry.npmmirror.com/@intlify/shared/9.3.0-beta.10:
6784   - resolution: {integrity: sha512-h93uAanbAt/XgjDHclrVB7xix6r7Uz11wx0iGNOCdHP7aA2LCJjUT3uNbekJjjbo+Fl5jzTSJZdm2SexzoqhRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@intlify/shared/-/shared-9.3.0-beta.10.tgz}
6785   - name: '@intlify/shared'
6786   - version: 9.3.0-beta.10
6787   - engines: {node: '>= 14'}
6788   - dev: true
6789   -
6790   - registry.npmmirror.com/@sxzz/popperjs-es/2.11.7:
6791   - resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz}
6792   - name: '@sxzz/popperjs-es'
6793   - version: 2.11.7
6794   - dev: false
6795   -
6796   - registry.npmmirror.com/@volar/language-core/1.0.10:
6797   - resolution: {integrity: sha512-7WNzjvdUXjggEZvYu9EInABl4mvXtyiiaJDOJM+plHJT7xW5voLja0BrYYji6TUn8Q4HakLvTPpQddPLq134mg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@volar/language-core/-/language-core-1.0.10.tgz}
6798   - name: '@volar/language-core'
6799   - version: 1.0.10
6800   - dependencies:
6801   - '@volar/source-map': registry.npmmirror.com/@volar/source-map/1.0.10
6802   - '@vue/reactivity': registry.npmmirror.com/@vue/reactivity/3.2.45
6803   - muggle-string: registry.npmmirror.com/muggle-string/0.1.0
6804   - dev: true
6805   -
6806   - registry.npmmirror.com/@volar/source-map/1.0.10:
6807   - resolution: {integrity: sha512-jSZW1tfsvAOHlpoRy14zH9sdCYR4g8QcnCXRli8juFC2UHoVzVRKB6VdnXcx5wRAlIRXoiBpsU+pKminryKEBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@volar/source-map/-/source-map-1.0.10.tgz}
6808   - name: '@volar/source-map'
6809   - version: 1.0.10
6810   - dependencies:
6811   - muggle-string: registry.npmmirror.com/muggle-string/0.1.0
6812   - dev: true
6813   -
6814   - registry.npmmirror.com/@volar/typescript/1.0.10:
6815   - resolution: {integrity: sha512-Nd+u2Z2P1V+KiNBMLLK6wV4sswOOYBsjEHmgK29eENXtos1+gF2GWB908vvwmT75dmCtlYZ8No14lvCqXUAVdg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@volar/typescript/-/typescript-1.0.10.tgz}
6816   - name: '@volar/typescript'
6817   - version: 1.0.10
6818   - dependencies:
6819   - '@volar/language-core': registry.npmmirror.com/@volar/language-core/1.0.10
6820   - dev: true
6821   -
6822   - registry.npmmirror.com/@volar/vue-language-core/1.0.10:
6823   - resolution: {integrity: sha512-m7pYXGwkpF9Bmuud73kGlAX31QUTwifYbgCenaqm3hGNh+SJebSkxzk4NJvabiGbA6ON3b5ayQZ/rbOEtdoghw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@volar/vue-language-core/-/vue-language-core-1.0.10.tgz}
6824   - name: '@volar/vue-language-core'
6825   - version: 1.0.10
6826   - dependencies:
6827   - '@volar/language-core': registry.npmmirror.com/@volar/language-core/1.0.10
6828   - '@volar/source-map': registry.npmmirror.com/@volar/source-map/1.0.10
6829   - '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom/3.2.45
6830   - '@vue/compiler-sfc': registry.npmmirror.com/@vue/compiler-sfc/3.2.45
6831   - '@vue/reactivity': registry.npmmirror.com/@vue/reactivity/3.2.45
6832   - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45
6833   - minimatch: registry.npmmirror.com/minimatch/5.1.0
6834   - vue-template-compiler: registry.npmmirror.com/vue-template-compiler/2.7.14
6835   - dev: true
6836   -
6837   - registry.npmmirror.com/@volar/vue-typescript/1.0.10:
6838   - resolution: {integrity: sha512-GjQ+mfIUljXGfkTmNrfNT8YYQY48mcOE5SJ190o6ENArzH9cqjmvPLo1nrdurbZOFwztwEDNye5N1/5aL9sZ1g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@volar/vue-typescript/-/vue-typescript-1.0.10.tgz}
6839   - name: '@volar/vue-typescript'
6840   - version: 1.0.10
6841   - dependencies:
6842   - '@volar/typescript': registry.npmmirror.com/@volar/typescript/1.0.10
6843   - '@volar/vue-language-core': registry.npmmirror.com/@volar/vue-language-core/1.0.10
6844   - dev: true
6845   -
6846   - registry.npmmirror.com/@vue/compiler-core/3.2.45:
6847   - resolution: {integrity: sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.45.tgz}
6848   - name: '@vue/compiler-core'
6849   - version: 3.2.45
6850   - dependencies:
6851   - '@babel/parser': registry.npmmirror.com/@babel/parser/7.20.3
6852   - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45
6853   - estree-walker: registry.npmmirror.com/estree-walker/2.0.2
6854   - source-map: registry.npmmirror.com/source-map/0.6.1
6855   -
6856   - registry.npmmirror.com/@vue/compiler-dom/3.2.45:
6857   - resolution: {integrity: sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz}
6858   - name: '@vue/compiler-dom'
6859   - version: 3.2.45
6860   - dependencies:
6861   - '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core/3.2.45
6862   - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45
6863   -
6864   - registry.npmmirror.com/@vue/compiler-sfc/3.2.45:
6865   - resolution: {integrity: sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz}
6866   - name: '@vue/compiler-sfc'
6867   - version: 3.2.45
6868   - dependencies:
6869   - '@babel/parser': registry.npmmirror.com/@babel/parser/7.20.3
6870   - '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core/3.2.45
6871   - '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom/3.2.45
6872   - '@vue/compiler-ssr': registry.npmmirror.com/@vue/compiler-ssr/3.2.45
6873   - '@vue/reactivity-transform': registry.npmmirror.com/@vue/reactivity-transform/3.2.45
6874   - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45
6875   - estree-walker: registry.npmmirror.com/estree-walker/2.0.2
6876   - magic-string: registry.npmmirror.com/magic-string/0.25.9
6877   - postcss: registry.npmmirror.com/postcss/8.4.19
6878   - source-map: registry.npmmirror.com/source-map/0.6.1
6879   - dev: true
6880   -
6881   - registry.npmmirror.com/@vue/compiler-ssr/3.2.45:
6882   - resolution: {integrity: sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz}
6883   - name: '@vue/compiler-ssr'
6884   - version: 3.2.45
6885   - dependencies:
6886   - '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom/3.2.45
6887   - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45
6888   -
6889   - registry.npmmirror.com/@vue/reactivity-transform/3.2.45:
6890   - resolution: {integrity: sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.45.tgz}
6891   - name: '@vue/reactivity-transform'
6892   - version: 3.2.45
6893   - dependencies:
6894   - '@babel/parser': registry.npmmirror.com/@babel/parser/7.20.3
6895   - '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core/3.2.45
6896   - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45
6897   - estree-walker: registry.npmmirror.com/estree-walker/2.0.2
6898   - magic-string: registry.npmmirror.com/magic-string/0.25.9
6899   - dev: true
6900   -
6901   - registry.npmmirror.com/@vue/reactivity/3.2.45:
6902   - resolution: {integrity: sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.45.tgz}
6903   - name: '@vue/reactivity'
6904   - version: 3.2.45
6905   - dependencies:
6906   - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45
6907   -
6908   - registry.npmmirror.com/@vue/shared/3.2.45:
6909   - resolution: {integrity: sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz}
6910   - name: '@vue/shared'
6911   - version: 3.2.45
6912   -
6913   - registry.npmmirror.com/balanced-match/1.0.2:
6914   - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz}
6915   - name: balanced-match
6916   - version: 1.0.2
6917   - dev: true
6918   -
6919   - registry.npmmirror.com/brace-expansion/1.1.11:
6920   - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz}
6921   - name: brace-expansion
6922   - version: 1.1.11
6923   - dependencies:
6924   - balanced-match: registry.npmmirror.com/balanced-match/1.0.2
6925   - concat-map: 0.0.1
6926   - dev: true
6927   -
6928   - registry.npmmirror.com/brace-expansion/2.0.1:
6929   - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz}
6930   - name: brace-expansion
6931   - version: 2.0.1
6932   - dependencies:
6933   - balanced-match: registry.npmmirror.com/balanced-match/1.0.2
6934   - dev: true
6935   -
6936   - registry.npmmirror.com/de-indent/1.0.2:
6937   - resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz}
6938   - name: de-indent
6939   - version: 1.0.2
6940   - dev: true
6941   -
6942   - registry.npmmirror.com/esbuild-android-64/0.15.14:
6943   - resolution: {integrity: sha512-HuilVIb4rk9abT4U6bcFdU35UHOzcWVGLSjEmC58OVr96q5UiRqzDtWjPlCMugjhgUGKEs8Zf4ueIvYbOStbIg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.15.14.tgz}
6944   - name: esbuild-android-64
6945   - version: 0.15.14
6946   - engines: {node: '>=12'}
6947   - cpu: [x64]
6948   - os: [android]
6949   - requiresBuild: true
6950   - dev: true
6951   - optional: true
6952   -
6953   - registry.npmmirror.com/esbuild-android-arm64/0.15.14:
6954   - resolution: {integrity: sha512-/QnxRVxsR2Vtf3XottAHj7hENAMW2wCs6S+OZcAbc/8nlhbAL/bCQRCVD78VtI5mdwqWkVi3wMqM94kScQCgqg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.14.tgz}
6955   - name: esbuild-android-arm64
6956   - version: 0.15.14
6957   - engines: {node: '>=12'}
6958   - cpu: [arm64]
6959   - os: [android]
6960   - requiresBuild: true
6961   - dev: true
6962   - optional: true
6963   -
6964   - registry.npmmirror.com/esbuild-darwin-64/0.15.14:
6965   - resolution: {integrity: sha512-ToNuf1uifu8hhwWvoZJGCdLIX/1zpo8cOGnT0XAhDQXiKOKYaotVNx7pOVB1f+wHoWwTLInrOmh3EmA7Fd+8Vg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.14.tgz}
6966   - name: esbuild-darwin-64
6967   - version: 0.15.14
6968   - engines: {node: '>=12'}
6969   - cpu: [x64]
6970   - os: [darwin]
6971   - requiresBuild: true
6972   - dev: true
6973   - optional: true
6974   -
6975   - registry.npmmirror.com/esbuild-darwin-arm64/0.15.14:
6976   - resolution: {integrity: sha512-KgGP+y77GszfYJgceO0Wi/PiRtYo5y2Xo9rhBUpxTPaBgWDJ14gqYN0+NMbu+qC2fykxXaipHxN4Scaj9tUS1A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.14.tgz}
6977   - name: esbuild-darwin-arm64
6978   - version: 0.15.14
6979   - engines: {node: '>=12'}
6980   - cpu: [arm64]
6981   - os: [darwin]
6982   - requiresBuild: true
6983   - dev: true
6984   - optional: true
6985   -
6986   - registry.npmmirror.com/esbuild-freebsd-64/0.15.14:
6987   - resolution: {integrity: sha512-xr0E2n5lyWw3uFSwwUXHc0EcaBDtsal/iIfLioflHdhAe10KSctV978Te7YsfnsMKzcoGeS366+tqbCXdqDHQA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.14.tgz}
6988   - name: esbuild-freebsd-64
6989   - version: 0.15.14
6990   - engines: {node: '>=12'}
6991   - cpu: [x64]
6992   - os: [freebsd]
6993   - requiresBuild: true
6994   - dev: true
6995   - optional: true
6996   -
6997   - registry.npmmirror.com/esbuild-freebsd-arm64/0.15.14:
6998   - resolution: {integrity: sha512-8XH96sOQ4b1LhMlO10eEWOjEngmZ2oyw3pW4o8kvBcpF6pULr56eeYVP5radtgw54g3T8nKHDHYEI5AItvskZg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.14.tgz}
6999   - name: esbuild-freebsd-arm64
7000   - version: 0.15.14
7001   - engines: {node: '>=12'}
7002   - cpu: [arm64]
7003   - os: [freebsd]
7004   - requiresBuild: true
7005   - dev: true
7006   - optional: true
7007   -
7008   - registry.npmmirror.com/esbuild-linux-32/0.15.14:
7009   - resolution: {integrity: sha512-6ssnvwaTAi8AzKN8By2V0nS+WF5jTP7SfuK6sStGnDP7MCJo/4zHgM9oE1eQTS2jPmo3D673rckuCzRlig+HMA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.15.14.tgz}
7010   - name: esbuild-linux-32
7011   - version: 0.15.14
7012   - engines: {node: '>=12'}
7013   - cpu: [ia32]
7014   - os: [linux]
7015   - requiresBuild: true
7016   - dev: true
7017   - optional: true
7018   -
7019   - registry.npmmirror.com/esbuild-linux-64/0.15.14:
7020   - resolution: {integrity: sha512-ONySx3U0wAJOJuxGUlXBWxVKFVpWv88JEv0NZ6NlHknmDd1yCbf4AEdClSgLrqKQDXYywmw4gYDvdLsS6z0hcw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.15.14.tgz}
7021   - name: esbuild-linux-64
7022   - version: 0.15.14
7023   - engines: {node: '>=12'}
7024   - cpu: [x64]
7025   - os: [linux]
7026   - requiresBuild: true
7027   - dev: true
7028   - optional: true
7029   -
7030   - registry.npmmirror.com/esbuild-linux-arm/0.15.14:
7031   - resolution: {integrity: sha512-D2LImAIV3QzL7lHURyCHBkycVFbKwkDb1XEUWan+2fb4qfW7qAeUtul7ZIcIwFKZgPcl+6gKZmvLgPSj26RQ2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.14.tgz}
7032   - name: esbuild-linux-arm
7033   - version: 0.15.14
7034   - engines: {node: '>=12'}
7035   - cpu: [arm]
7036   - os: [linux]
7037   - requiresBuild: true
7038   - dev: true
7039   - optional: true
7040   -
7041   - registry.npmmirror.com/esbuild-linux-arm64/0.15.14:
7042   - resolution: {integrity: sha512-kle2Ov6a1e5AjlHlMQl1e+c4myGTeggrRzArQFmWp6O6JoqqB9hT+B28EW4tjFWgV/NxUq46pWYpgaWXsXRPAg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.14.tgz}
7043   - name: esbuild-linux-arm64
7044   - version: 0.15.14
7045   - engines: {node: '>=12'}
7046   - cpu: [arm64]
7047   - os: [linux]
7048   - requiresBuild: true
7049   - dev: true
7050   - optional: true
7051   -
7052   - registry.npmmirror.com/esbuild-linux-mips64le/0.15.14:
7053   - resolution: {integrity: sha512-FVdMYIzOLXUq+OE7XYKesuEAqZhmAIV6qOoYahvUp93oXy0MOVTP370ECbPfGXXUdlvc0TNgkJa3YhEwyZ6MRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.14.tgz}
7054   - name: esbuild-linux-mips64le
7055   - version: 0.15.14
7056   - engines: {node: '>=12'}
7057   - cpu: [mips64el]
7058   - os: [linux]
7059   - requiresBuild: true
7060   - dev: true
7061   - optional: true
7062   -
7063   - registry.npmmirror.com/esbuild-linux-ppc64le/0.15.14:
7064   - resolution: {integrity: sha512-2NzH+iuzMDA+jjtPjuIz/OhRDf8tzbQ1tRZJI//aT25o1HKc0reMMXxKIYq/8nSHXiJSnYV4ODzTiv45s+h73w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.14.tgz}
7065   - name: esbuild-linux-ppc64le
7066   - version: 0.15.14
7067   - engines: {node: '>=12'}
7068   - cpu: [ppc64]
7069   - os: [linux]
7070   - requiresBuild: true
7071   - dev: true
7072   - optional: true
7073   -
7074   - registry.npmmirror.com/esbuild-linux-riscv64/0.15.14:
7075   - resolution: {integrity: sha512-VqxvutZNlQxmUNS7Ac+aczttLEoHBJ9e3OYGqnULrfipRvG97qLrAv9EUY9iSrRKBqeEbSvS9bSfstZqwz0T4Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.14.tgz}
7076   - name: esbuild-linux-riscv64
7077   - version: 0.15.14
7078   - engines: {node: '>=12'}
7079   - cpu: [riscv64]
7080   - os: [linux]
7081   - requiresBuild: true
7082   - dev: true
7083   - optional: true
7084   -
7085   - registry.npmmirror.com/esbuild-linux-s390x/0.15.14:
7086   - resolution: {integrity: sha512-+KVHEUshX5n6VP6Vp/AKv9fZIl5kr2ph8EUFmQUJnDpHwcfTSn2AQgYYm0HTBR2Mr4d0Wlr0FxF/Cs5pbFgiOw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.14.tgz}
7087   - name: esbuild-linux-s390x
7088   - version: 0.15.14
7089   - engines: {node: '>=12'}
7090   - cpu: [s390x]
7091   - os: [linux]
7092   - requiresBuild: true
7093   - dev: true
7094   - optional: true
7095   -
7096   - registry.npmmirror.com/esbuild-netbsd-64/0.15.14:
7097   - resolution: {integrity: sha512-6D/dr17piEgevIm1xJfZP2SjB9Z+g8ERhNnBdlZPBWZl+KSPUKLGF13AbvC+nzGh8IxOH2TyTIdRMvKMP0nEzQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.14.tgz}
7098   - name: esbuild-netbsd-64
7099   - version: 0.15.14
7100   - engines: {node: '>=12'}
7101   - cpu: [x64]
7102   - os: [netbsd]
7103   - requiresBuild: true
7104   - dev: true
7105   - optional: true
7106   -
7107   - registry.npmmirror.com/esbuild-openbsd-64/0.15.14:
7108   - resolution: {integrity: sha512-rREQBIlMibBetgr2E9Lywt2Qxv2ZdpmYahR4IUlAQ1Efv/A5gYdO0/VIN3iowDbCNTLxp0bb57Vf0LFcffD6kA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.14.tgz}
7109   - name: esbuild-openbsd-64
7110   - version: 0.15.14
7111   - engines: {node: '>=12'}
7112   - cpu: [x64]
7113   - os: [openbsd]
7114   - requiresBuild: true
7115   - dev: true
7116   - optional: true
7117   -
7118   - registry.npmmirror.com/esbuild-sunos-64/0.15.14:
7119   - resolution: {integrity: sha512-DNVjSp/BY4IfwtdUAvWGIDaIjJXY5KI4uD82+15v6k/w7px9dnaDaJJ2R6Mu+KCgr5oklmFc0KjBjh311Gxl9Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.14.tgz}
7120   - name: esbuild-sunos-64
7121   - version: 0.15.14
7122   - engines: {node: '>=12'}
7123   - cpu: [x64]
7124   - os: [sunos]
7125   - requiresBuild: true
7126   - dev: true
7127   - optional: true
7128   -
7129   - registry.npmmirror.com/esbuild-windows-32/0.15.14:
7130   - resolution: {integrity: sha512-pHBWrcA+/oLgvViuG9FO3kNPO635gkoVrRQwe6ZY1S0jdET07xe2toUvQoJQ8KT3/OkxqUasIty5hpuKFLD+eg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.15.14.tgz}
7131   - name: esbuild-windows-32
7132   - version: 0.15.14
7133   - engines: {node: '>=12'}
7134   - cpu: [ia32]
7135   - os: [win32]
7136   - requiresBuild: true
7137   - dev: true
7138   - optional: true
7139   -
7140   - registry.npmmirror.com/esbuild-windows-64/0.15.14:
7141   - resolution: {integrity: sha512-CszIGQVk/P8FOS5UgAH4hKc9zOaFo69fe+k1rqgBHx3CSK3Opyk5lwYriIamaWOVjBt7IwEP6NALz+tkVWdFog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.15.14.tgz}
7142   - name: esbuild-windows-64
7143   - version: 0.15.14
7144   - engines: {node: '>=12'}
7145   - cpu: [x64]
7146   - os: [win32]
7147   - requiresBuild: true
7148   - dev: true
7149   - optional: true
7150   -
7151   - registry.npmmirror.com/esbuild-windows-arm64/0.15.14:
7152   - resolution: {integrity: sha512-KW9W4psdZceaS9A7Jsgl4WialOznSURvqX/oHZk3gOP7KbjtHLSsnmSvNdzagGJfxbAe30UVGXRe8q8nDsOSQw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.14.tgz}
7153   - name: esbuild-windows-arm64
7154   - version: 0.15.14
7155   - engines: {node: '>=12'}
7156   - cpu: [arm64]
7157   - os: [win32]
7158   - requiresBuild: true
7159   - dev: true
7160   - optional: true
7161   -
7162   - registry.npmmirror.com/estree-walker/2.0.2:
7163   - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz}
7164   - name: estree-walker
7165   - version: 2.0.2
7166   -
7167   - registry.npmmirror.com/fsevents/2.3.2:
7168   - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz}
7169   - name: fsevents
7170   - version: 2.3.2
7171   - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
7172   - os: [darwin]
7173   - requiresBuild: true
7174   - dev: true
7175   - optional: true
7176   -
7177   - registry.npmmirror.com/graceful-fs/4.2.10:
7178   - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz}
7179   - name: graceful-fs
7180   - version: 4.2.10
7181   - requiresBuild: true
7182   - dev: true
7183   - optional: true
7184   -
7185   - registry.npmmirror.com/he/1.2.0:
7186   - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/he/-/he-1.2.0.tgz}
7187   - name: he
7188   - version: 1.2.0
7189   - hasBin: true
7190   - dev: true
7191   -
7192   - registry.npmmirror.com/magic-string/0.25.9:
7193   - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz}
7194   - name: magic-string
7195   - version: 0.25.9
7196   - dependencies:
7197   - sourcemap-codec: registry.npmmirror.com/sourcemap-codec/1.4.8
7198   -
7199   - registry.npmmirror.com/minimatch/3.1.2:
7200   - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz}
7201   - name: minimatch
7202   - version: 3.1.2
7203   - dependencies:
7204   - brace-expansion: registry.npmmirror.com/brace-expansion/1.1.11
7205   - dev: true
7206   -
7207   - registry.npmmirror.com/minimatch/5.1.0:
7208   - resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-5.1.0.tgz}
7209   - name: minimatch
7210   - version: 5.1.0
7211   - engines: {node: '>=10'}
7212   - dependencies:
7213   - brace-expansion: registry.npmmirror.com/brace-expansion/2.0.1
7214   - dev: true
7215   -
7216   - registry.npmmirror.com/muggle-string/0.1.0:
7217   - resolution: {integrity: sha512-Tr1knR3d2mKvvWthlk7202rywKbiOm4rVFLsfAaSIhJ6dt9o47W4S+JMtWhd/PW9Wrdew2/S2fSvhz3E2gkfEg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/muggle-string/-/muggle-string-0.1.0.tgz}
7218   - name: muggle-string
7219   - version: 0.1.0
7220   - dev: true
7221   -
7222   - registry.npmmirror.com/nanoid/3.3.4:
7223   - resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz}
7224   - name: nanoid
7225   - version: 3.3.4
7226   - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
7227   - hasBin: true
7228   - dev: true
7229   -
7230   - registry.npmmirror.com/picocolors/1.0.0:
7231   - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz}
7232   - name: picocolors
7233   - version: 1.0.0
7234   - dev: true
7235   -
7236   - registry.npmmirror.com/postcss/8.4.19:
7237   - resolution: {integrity: sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss/-/postcss-8.4.19.tgz}
7238   - name: postcss
7239   - version: 8.4.19
7240   - engines: {node: ^10 || ^12 || >=14}
7241   - dependencies:
7242   - nanoid: registry.npmmirror.com/nanoid/3.3.4
7243   - picocolors: registry.npmmirror.com/picocolors/1.0.0
7244   - source-map-js: registry.npmmirror.com/source-map-js/1.0.2
7245   - dev: true
7246   -
7247   - registry.npmmirror.com/source-map-js/1.0.2:
7248   - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz}
7249   - name: source-map-js
7250   - version: 1.0.2
7251   - engines: {node: '>=0.10.0'}
7252   - dev: true
7253   -
7254   - registry.npmmirror.com/source-map/0.5.7:
7255   - resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz}
7256   - name: source-map
7257   - version: 0.5.7
7258   - engines: {node: '>=0.10.0'}
7259   - dev: true
7260   -
7261   - registry.npmmirror.com/source-map/0.6.1:
7262   - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz}
7263   - name: source-map
7264   - version: 0.6.1
7265   - engines: {node: '>=0.10.0'}
7266   -
7267   - registry.npmmirror.com/sourcemap-codec/1.4.8:
7268   - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz}
7269   - name: sourcemap-codec
7270   - version: 1.4.8
7271   -
7272   - registry.npmmirror.com/to-fast-properties/2.0.0:
7273   - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz}
7274   - name: to-fast-properties
7275   - version: 2.0.0
7276   - engines: {node: '>=4'}
7277   -
7278   - registry.npmmirror.com/uglify-js/3.17.4:
7279   - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/uglify-js/-/uglify-js-3.17.4.tgz}
7280   - name: uglify-js
7281   - version: 3.17.4
7282   - engines: {node: '>=0.8.0'}
7283   - hasBin: true
7284   - requiresBuild: true
7285   - dev: true
7286   - optional: true
7287   -
7288   - registry.npmmirror.com/vue-template-compiler/2.7.14:
7289   - resolution: {integrity: sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz}
7290   - name: vue-template-compiler
7291   - version: 2.7.14
7292   - dependencies:
7293   - de-indent: registry.npmmirror.com/de-indent/1.0.2
7294   - he: registry.npmmirror.com/he/1.2.0
7295   - dev: true
7296   -
7297   - registry.npmmirror.com/vue-tsc/1.0.10_typescript@4.9.3:
7298   - resolution: {integrity: sha512-o6ek6ZSDwpVWn7/ZXlIILfCZ18o7ypEYKMDynsyPj9m10/ALXkCLKIj9yVfx00QAX5Z/hKrdhYcA2ZaQ0+U7Kg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.0.10.tgz}
7299   - id: registry.npmmirror.com/vue-tsc/1.0.10
7300   - name: vue-tsc
7301   - version: 1.0.10
7302   - hasBin: true
7303   - peerDependencies:
7304   - typescript: '*'
7305   - dependencies:
7306   - '@volar/vue-language-core': registry.npmmirror.com/@volar/vue-language-core/1.0.10
7307   - '@volar/vue-typescript': registry.npmmirror.com/@volar/vue-typescript/1.0.10
7308   - typescript: 4.9.3
7309   - dev: true
... ...
yudao-ui-admin-vue3/src/App.vue
... ... @@ -4,7 +4,7 @@ import { isDark } from &#39;@/utils/is&#39;
4 4 import { useAppStore } from '@/store/modules/app'
5 5 import { useDesign } from '@/hooks/web/useDesign'
6 6 import { ConfigGlobal } from '@/components/ConfigGlobal'
7   -import { useCache } from '@/hooks/web/useCache'
  7 +import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
8 8  
9 9 const { getPrefixCls } = useDesign()
10 10 const prefixCls = getPrefixCls('app')
... ... @@ -15,15 +15,10 @@ const { wsCache } = useCache()
15 15  
16 16 // 根据浏览器当前主题设置系统主题色
17 17 const setDefaultTheme = () => {
18   - if (wsCache.get('isDark')) {
19   - if (wsCache.get('isDark') || wsCache.get('isDark') === 'true') {
20   - appStore.setIsDark(true)
21   - } else {
22   - appStore.setIsDark(false)
23   - }
24   - return
  18 + let isDarkTheme = wsCache.get(CACHE_KEY.IS_DARK)
  19 + if (isDarkTheme === null) {
  20 + isDarkTheme = isDark()
25 21 }
26   - const isDarkTheme = isDark()
27 22 appStore.setIsDark(isDarkTheme)
28 23 }
29 24 setDefaultTheme()
... ...
yudao-ui-admin-vue3/src/api/infra/fileConfig/index.ts
... ... @@ -42,7 +42,7 @@ export const getFileConfigApi = (id: number) =&gt; {
42 42  
43 43 // 更新文件配置为主配置
44 44 export const updateFileConfigMasterApi = (id: number) => {
45   - return request.get({ url: '/infra/file-config/update-master?id=' + id })
  45 + return request.put({ url: '/infra/file-config/update-master?id=' + id })
46 46 }
47 47  
48 48 // 新增文件配置
... ...
yudao-ui-admin-vue3/src/api/login/index.ts
... ... @@ -57,7 +57,7 @@ export const smsLoginApi = (data: SmsLoginVO) =&gt; {
57 57 }
58 58  
59 59 // 社交授权的跳转
60   -export const socialAuthRedirectApi = (type: string, redirectUri: string) => {
  60 +export const socialAuthRedirectApi = (type: number, redirectUri: string) => {
61 61 return request.get({
62 62 url: '/system/auth/social-auth-redirect?type=' + type + '&redirectUri=' + redirectUri
63 63 })
... ...
yudao-ui-admin-vue3/src/components/Form/src/componentMap.ts
... ... @@ -21,6 +21,7 @@ import {
21 21 } from 'element-plus'
22 22 import { InputPassword } from '@/components/InputPassword'
23 23 import { Editor } from '@/components/Editor'
  24 +import { UploadImg, UploadFile } from '@/components/UploadFile'
24 25 import { ComponentName } from '@/types/components'
25 26  
26 27 const componentMap: Recordable<Component, ComponentName> = {
... ... @@ -45,7 +46,9 @@ const componentMap: Recordable&lt;Component, ComponentName&gt; = {
45 46 TreeSelect: ElTreeSelect,
46 47 RadioButton: ElRadioGroup,
47 48 InputPassword: InputPassword,
48   - Editor: Editor
  49 + Editor: Editor,
  50 + UploadImg: UploadImg,
  51 + UploadFile: UploadFile
49 52 }
50 53  
51 54 export { componentMap }
... ...
yudao-ui-admin-vue3/src/components/UploadFile/index.ts
1 1 import UploadImg from './src/UploadImg.vue'
  2 +import UploadFile from './src/UploadFile.vue'
2 3  
3   -export { UploadImg }
  4 +export { UploadImg, UploadFile }
... ...
yudao-ui-admin-vue3/src/components/UploadFile/src/UploadFile.vue 0 → 100644
  1 +<template>
  2 + <div class="upload-file">
  3 + <el-upload
  4 + ref="uploadRef"
  5 + :multiple="props.limit > 1"
  6 + name="file"
  7 + v-model="valueRef"
  8 + v-model:file-list="fileList"
  9 + :show-file-list="true"
  10 + :auto-upload="autoUpload"
  11 + :action="updateUrl"
  12 + :headers="uploadHeaders"
  13 + :limit="props.limit"
  14 + :drag="drag"
  15 + :before-upload="beforeUpload"
  16 + :on-exceed="handleExceed"
  17 + :on-success="handleFileSuccess"
  18 + :on-error="excelUploadError"
  19 + :on-remove="handleRemove"
  20 + :on-preview="handlePreview"
  21 + class="upload-file-uploader"
  22 + >
  23 + <el-button type="primary"><Icon icon="ep:upload-filled" />选取文件</el-button>
  24 + <template v-if="isShowTip" #tip>
  25 + <div style="font-size: 8px">
  26 + 大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b>
  27 + </div>
  28 + <div style="font-size: 8px">
  29 + 格式为 <b style="color: #f56c6c">{{ fileType.join('/') }}</b> 的文件
  30 + </div>
  31 + </template>
  32 + </el-upload>
  33 + </div>
  34 +</template>
  35 +<script setup lang="ts">
  36 +import { ref, watch } from 'vue'
  37 +import { useMessage } from '@/hooks/web/useMessage'
  38 +import { propTypes } from '@/utils/propTypes'
  39 +import { getAccessToken, getTenantId } from '@/utils/auth'
  40 +import { ElUpload, UploadInstance, UploadProps, UploadRawFile, UploadUserFile } from 'element-plus'
  41 +
  42 +const message = useMessage() // 消息弹窗
  43 +const emit = defineEmits(['update:modelValue'])
  44 +
  45 +const props = defineProps({
  46 + modelValue: propTypes.oneOfType([String, Object, Array]),
  47 + title: propTypes.string.def('文件上传'),
  48 + updateUrl: propTypes.string.def(import.meta.env.VITE_UPLOAD_URL),
  49 + fileType: propTypes.array.def(['doc', 'xls', 'ppt', 'txt', 'pdf']), // 文件类型, 例如['png', 'jpg', 'jpeg']
  50 + fileSize: propTypes.number.def(5), // 大小限制(MB)
  51 + limit: propTypes.number.def(5), // 数量限制
  52 + autoUpload: propTypes.bool.def(true), // 自动上传
  53 + drag: propTypes.bool.def(false), // 拖拽上传
  54 + isShowTip: propTypes.bool.def(true) // 是否显示提示
  55 +})
  56 +// ========== 上传相关 ==========
  57 +const valueRef = ref(props.modelValue)
  58 +const uploadRef = ref<UploadInstance>()
  59 +const uploadList = ref<UploadUserFile[]>([])
  60 +const fileList = ref<UploadUserFile[]>([])
  61 +const uploadNumber = ref<number>(0)
  62 +const uploadHeaders = ref({
  63 + Authorization: 'Bearer ' + getAccessToken(),
  64 + 'tenant-id': getTenantId()
  65 +})
  66 +watch(
  67 + () => props.modelValue,
  68 + (val) => {
  69 + if (val) {
  70 + // 首先将值转为数组, 当只穿了一个图片时,会报map方法错误
  71 + const list = Array.isArray(props.modelValue)
  72 + ? props.modelValue
  73 + : Array.isArray(props.modelValue?.split(','))
  74 + ? props.modelValue?.split(',')
  75 + : Array.of(props.modelValue)
  76 + // 然后将数组转为对象数组
  77 + fileList.value = list.map((item) => {
  78 + if (typeof item === 'string') {
  79 + // edit by 芋道源码
  80 + item = { name: item, url: item }
  81 + }
  82 + return item
  83 + })
  84 + } else {
  85 + fileList.value = []
  86 + return []
  87 + }
  88 + },
  89 + {
  90 + deep: true,
  91 + immediate: true
  92 + }
  93 +)
  94 +// 文件上传之前判断
  95 +const beforeUpload: UploadProps['beforeUpload'] = (file: UploadRawFile) => {
  96 + if (fileList.value.length >= props.limit) {
  97 + message.error(`上传文件数量不能超过${props.limit}个!`)
  98 + return false
  99 + }
  100 + let fileExtension = ''
  101 + if (file.name.lastIndexOf('.') > -1) {
  102 + fileExtension = file.name.slice(file.name.lastIndexOf('.') + 1)
  103 + }
  104 + const isImg = props.fileType.some((type: string) => {
  105 + if (file.type.indexOf(type) > -1) return true
  106 + return !!(fileExtension && fileExtension.indexOf(type) > -1)
  107 + })
  108 + const isLimit = file.size < props.fileSize * 1024 * 1024
  109 + if (!isImg) {
  110 + message.error(`文件格式不正确, 请上传${props.fileType.join('/')}格式!`)
  111 + return false
  112 + }
  113 + if (!isLimit) {
  114 + message.error(`上传文件大小不能超过${props.fileSize}MB!`)
  115 + return false
  116 + }
  117 + message.success('正在上传文件,请稍候...')
  118 + uploadNumber.value++
  119 +}
  120 +// 处理上传的文件发生变化
  121 +// const handleFileChange = (uploadFile: UploadFile): void => {
  122 +// uploadRef.value.data.path = uploadFile.name
  123 +// }
  124 +// 文件上传成功
  125 +const handleFileSuccess: UploadProps['onSuccess'] = (res: any): void => {
  126 + message.success('上传成功')
  127 + uploadList.value.push({ name: res.data, url: res.data })
  128 + if (uploadList.value.length == uploadNumber.value) {
  129 + fileList.value = fileList.value.concat(uploadList.value)
  130 + uploadList.value = []
  131 + uploadNumber.value = 0
  132 + emit('update:modelValue', listToString(fileList.value))
  133 + }
  134 +}
  135 +// 文件数超出提示
  136 +const handleExceed: UploadProps['onExceed'] = (): void => {
  137 + message.error(`上传文件数量不能超过${props.limit}个!`)
  138 +}
  139 +// 上传错误提示
  140 +const excelUploadError: UploadProps['onError'] = (): void => {
  141 + message.error('导入数据失败,请您重新上传!')
  142 +}
  143 +// 删除上传文件
  144 +const handleRemove = (file) => {
  145 + const findex = fileList.value.map((f) => f.name).indexOf(file.name)
  146 + if (findex > -1) {
  147 + fileList.value.splice(findex, 1)
  148 + emit('update:modelValue', listToString(fileList.value))
  149 + }
  150 +}
  151 +const handlePreview: UploadProps['onPreview'] = (uploadFile) => {
  152 + console.log(uploadFile)
  153 +}
  154 +// 对象转成指定字符串分隔
  155 +const listToString = (list: UploadUserFile[], separator?: string) => {
  156 + let strs = ''
  157 + separator = separator || ','
  158 + for (let i in list) {
  159 + strs += list[i].url + separator
  160 + }
  161 + return strs != '' ? strs.substr(0, strs.length - 1) : ''
  162 +}
  163 +</script>
  164 +<style scoped lang="scss">
  165 +.upload-file-uploader {
  166 + margin-bottom: 5px;
  167 +}
  168 +:deep(.upload-file-list .el-upload-list__item) {
  169 + border: 1px solid #e4e7ed;
  170 + line-height: 2;
  171 + margin-bottom: 10px;
  172 + position: relative;
  173 +}
  174 +:deep(.el-upload-list__item-file-name) {
  175 + max-width: 250px;
  176 +}
  177 +:deep(.upload-file-list .ele-upload-list__item-content) {
  178 + display: flex;
  179 + justify-content: space-between;
  180 + align-items: center;
  181 + color: inherit;
  182 +}
  183 +:deep(.ele-upload-list__item-content-action .el-link) {
  184 + margin-right: 10px;
  185 +}
  186 +</style>
... ...
yudao-ui-admin-vue3/src/components/UploadFile/src/UploadImg.vue
1 1 <template>
2   - <el-upload
3   - ref="uploadRef"
4   - :multiple="limit > 1"
5   - name="file"
6   - list-type="picture-card"
7   - v-model:file-list="fileList"
8   - :show-file-list="true"
9   - :action="updateUrl"
10   - :headers="uploadHeaders"
11   - :limit="limit"
12   - :before-upload="beforeUpload"
13   - :on-exceed="handleExceed"
14   - :on-success="handleFileSuccess"
15   - :on-error="excelUploadError"
16   - :on-remove="handleRemove"
17   - :on-preview="handlePictureCardPreview"
18   - :class="{ hide: fileList.length >= limit }"
19   - >
20   - <Icon icon="ep:upload-filled" />
21   - </el-upload>
  2 + <div class="component-upload-image">
  3 + <el-upload
  4 + ref="uploadRef"
  5 + :multiple="props.limit > 1"
  6 + name="file"
  7 + v-model="valueRef"
  8 + list-type="picture-card"
  9 + v-model:file-list="fileList"
  10 + :show-file-list="true"
  11 + :action="updateUrl"
  12 + :headers="uploadHeaders"
  13 + :limit="props.limit"
  14 + :before-upload="beforeUpload"
  15 + :on-exceed="handleExceed"
  16 + :on-success="handleFileSuccess"
  17 + :on-error="excelUploadError"
  18 + :on-remove="handleRemove"
  19 + :on-preview="handlePictureCardPreview"
  20 + :class="{ hide: fileList.length >= props.limit }"
  21 + >
  22 + <Icon icon="ep:upload-filled" />
  23 + </el-upload>
  24 + </div>
22 25 <!-- 文件列表 -->
23 26 <Dialog v-model="dialogVisible" title="预览" width="800" append-to-body>
24 27 <img :src="dialogImageUrl" style="display: block; max-width: 100%; margin: 0 auto" />
... ... @@ -26,16 +29,17 @@
26 29 </template>
27 30 <script setup lang="ts">
28 31 import { ref, watch } from 'vue'
  32 +import { Dialog } from '@/components/Dialog'
29 33 import { useMessage } from '@/hooks/web/useMessage'
30 34 import { propTypes } from '@/utils/propTypes'
31 35 import { getAccessToken, getTenantId } from '@/utils/auth'
32 36 import { ElUpload, UploadInstance, UploadProps, UploadRawFile, UploadUserFile } from 'element-plus'
33 37  
34 38 const message = useMessage() // 消息弹窗
35   -const emit = defineEmits(['input'])
  39 +const emit = defineEmits(['update:modelValue'])
36 40  
37 41 const props = defineProps({
38   - imgs: propTypes.oneOfType([String, Object, Array]),
  42 + modelValue: propTypes.oneOfType([String, Object, Array]),
39 43 title: propTypes.string.def('图片上传'),
40 44 updateUrl: propTypes.string.def(import.meta.env.VITE_UPLOAD_URL),
41 45 fileType: propTypes.array.def(['jpg', 'png', 'gif', 'jpeg']), // 文件类型, 例如['png', 'jpg', 'jpeg']
... ... @@ -44,6 +48,7 @@ const props = defineProps({
44 48 isShowTip: propTypes.bool.def(false) // 是否显示提示
45 49 })
46 50 // ========== 上传相关 ==========
  51 +const valueRef = ref(props.modelValue)
47 52 const uploadRef = ref<UploadInstance>()
48 53 const uploadList = ref<UploadUserFile[]>([])
49 54 const fileList = ref<UploadUserFile[]>([])
... ... @@ -55,15 +60,15 @@ const uploadHeaders = ref({
55 60 'tenant-id': getTenantId()
56 61 })
57 62 watch(
58   - () => props.imgs,
  63 + () => props.modelValue,
59 64 (val) => {
60 65 if (val) {
61 66 // 首先将值转为数组, 当只穿了一个图片时,会报map方法错误
62   - const list = Array.isArray(props.imgs)
63   - ? props.imgs
64   - : Array.isArray(props.imgs?.split(','))
65   - ? props.imgs?.split(',')
66   - : Array.of(props.imgs)
  67 + const list = Array.isArray(props.modelValue)
  68 + ? props.modelValue
  69 + : Array.isArray(props.modelValue?.split(','))
  70 + ? props.modelValue?.split(',')
  71 + : Array.of(props.modelValue)
67 72 // 然后将数组转为对象数组
68 73 fileList.value = list.map((item) => {
69 74 if (typeof item === 'string') {
... ... @@ -84,6 +89,10 @@ watch(
84 89 )
85 90 // 文件上传之前判断
86 91 const beforeUpload: UploadProps['beforeUpload'] = (file: UploadRawFile) => {
  92 + if (fileList.value.length >= props.limit) {
  93 + message.error(`上传文件数量不能超过${props.limit}个!`)
  94 + return false
  95 + }
87 96 let fileExtension = ''
88 97 if (file.name.lastIndexOf('.') > -1) {
89 98 fileExtension = file.name.slice(file.name.lastIndexOf('.') + 1)
... ... @@ -111,14 +120,12 @@ const beforeUpload: UploadProps[&#39;beforeUpload&#39;] = (file: UploadRawFile) =&gt; {
111 120 // 文件上传成功
112 121 const handleFileSuccess: UploadProps['onSuccess'] = (res: any): void => {
113 122 message.success('上传成功')
114   - console.info(uploadList.value)
115   - console.info(fileList.value)
116 123 uploadList.value.push({ name: res.data, url: res.data })
117 124 if (uploadList.value.length == uploadNumber.value) {
118 125 fileList.value = fileList.value.concat(uploadList.value)
119 126 uploadList.value = []
120 127 uploadNumber.value = 0
121   - emit('input', listToString(fileList.value))
  128 + emit('update:modelValue', listToString(fileList.value))
122 129 }
123 130 }
124 131 // 文件数超出提示
... ... @@ -134,7 +141,7 @@ const handleRemove = (file) =&gt; {
134 141 const findex = fileList.value.map((f) => f.name).indexOf(file.name)
135 142 if (findex > -1) {
136 143 fileList.value.splice(findex, 1)
137   - emit('input', listToString(fileList.value))
  144 + emit('update:modelValue', listToString(fileList.value))
138 145 }
139 146 }
140 147 // 对象转成指定字符串分隔
... ...
yudao-ui-admin-vue3/src/components/Verifition/src/Verify.vue
... ... @@ -191,6 +191,7 @@ export default {
191 191 transition: all 0.5s;
192 192 }
193 193 .verify-tips {
  194 + text-indent: 10px;
194 195 position: absolute;
195 196 left: 0px;
196 197 bottom: 0px;
... ...
yudao-ui-admin-vue3/src/components/Verifition/src/Verify/VerifyPoints.vue
... ... @@ -57,7 +57,7 @@
57 57 </div>
58 58 </div>
59 59 </template>
60   -<script type="text/babel">
  60 +<script type="text/babel" setup>
61 61 /**
62 62 * VerifyPoints
63 63 * @description 点选
... ... @@ -67,215 +67,185 @@ import { aesEncrypt } from &#39;./../utils/ase&#39;
67 67 import { getCodeApi, reqCheckApi } from '@/api/login'
68 68 import { onMounted, reactive, ref, nextTick, toRefs, getCurrentInstance } from 'vue'
69 69 import { useI18n } from '@/hooks/web/useI18n'
70   -export default {
71   - name: 'VerifyPoints',
72   - props: {
73   - //弹出式pop,固定fixed
74   - mode: {
75   - type: String,
76   - default: 'fixed'
77   - },
78   - captchaType: {
79   - type: String
80   - },
81   - //间隔
82   - vSpace: {
83   - type: Number,
84   - default: 5
85   - },
86   - imgSize: {
87   - type: Object,
88   - default() {
89   - return {
90   - width: '310px',
91   - height: '155px'
92   - }
93   - }
94   - },
95   - barSize: {
96   - type: Object,
97   - default() {
98   - return {
99   - width: '310px',
100   - height: '40px'
101   - }
  70 +
  71 +const props = defineProps({
  72 + //弹出式pop,固定fixed
  73 + mode: {
  74 + type: String,
  75 + default: 'fixed'
  76 + },
  77 + captchaType: {
  78 + type: String
  79 + },
  80 + //间隔
  81 + vSpace: {
  82 + type: Number,
  83 + default: 5
  84 + },
  85 + imgSize: {
  86 + type: Object,
  87 + default() {
  88 + return {
  89 + width: '310px',
  90 + height: '155px'
102 91 }
103 92 }
104 93 },
105   - setup(props) {
106   - const { t } = useI18n()
107   - const { mode, captchaType } = toRefs(props)
108   - const { proxy } = getCurrentInstance()
109   - let secretKey = ref(''), //后端返回的ase加密秘钥
110   - checkNum = ref(3), //默认需要点击的字数
111   - fontPos = reactive([]), //选中的坐标信息
112   - checkPosArr = reactive([]), //用户点击的坐标
113   - num = ref(1), //点击的记数
114   - pointBackImgBase = ref(''), //后端获取到的背景图片
115   - poinTextList = reactive([]), //后端返回的点击字体顺序
116   - backToken = ref(''), //后端返回的token值
117   - setSize = reactive({
118   - imgHeight: 0,
119   - imgWidth: 0,
120   - barHeight: 0,
121   - barWidth: 0
122   - }),
123   - tempPoints = reactive([]),
124   - text = ref(''),
125   - barAreaColor = ref(undefined),
126   - barAreaBorderColor = ref(undefined),
127   - showRefresh = ref(true),
128   - bindingClick = ref(true)
129   -
130   - const init = () => {
131   - //加载页面
132   - fontPos.splice(0, fontPos.length)
133   - checkPosArr.splice(0, checkPosArr.length)
134   - num.value = 1
135   - getPictrue()
136   - nextTick(() => {
137   - let { imgHeight, imgWidth, barHeight, barWidth } = resetSize(proxy)
138   - setSize.imgHeight = imgHeight
139   - setSize.imgWidth = imgWidth
140   - setSize.barHeight = barHeight
141   - setSize.barWidth = barWidth
142   - proxy.$parent.$emit('ready', proxy)
143   - })
144   - }
145   - onMounted(() => {
146   - // 禁止拖拽
147   - init()
148   - proxy.$el.onselectstart = function () {
149   - return false
150   - }
151   - })
152   - const canvas = ref(null)
153   - const canvasClick = (e) => {
154   - checkPosArr.push(getMousePos(canvas, e))
155   - if (num.value == checkNum.value) {
156   - num.value = createPoint(getMousePos(canvas, e))
157   - //按比例转换坐标值
158   - let arr = pointTransfrom(checkPosArr, setSize)
159   - checkPosArr.length = 0
160   - checkPosArr.push(...arr)
161   - //等创建坐标执行完
162   - setTimeout(() => {
163   - // var flag = this.comparePos(this.fontPos, this.checkPosArr);
164   - //发送后端请求
165   - var captchaVerification = secretKey.value
166   - ? aesEncrypt(backToken.value + '---' + JSON.stringify(checkPosArr), secretKey.value)
167   - : backToken.value + '---' + JSON.stringify(checkPosArr)
168   - let data = {
169   - captchaType: captchaType.value,
170   - pointJson: secretKey.value
171   - ? aesEncrypt(JSON.stringify(checkPosArr), secretKey.value)
172   - : JSON.stringify(checkPosArr),
173   - token: backToken.value
174   - }
175   - reqCheckApi(data).then((res) => {
176   - if (res.repCode == '0000') {
177   - barAreaColor.value = '#4cae4c'
178   - barAreaBorderColor.value = '#5cb85c'
179   - text.value = t('captcha.success')
180   - bindingClick.value = false
181   - if (mode.value == 'pop') {
182   - setTimeout(() => {
183   - proxy.$parent.clickShow = false
184   - refresh()
185   - }, 1500)
186   - }
187   - proxy.$parent.$emit('success', { captchaVerification })
188   - } else {
189   - proxy.$parent.$emit('error', proxy)
190   - barAreaColor.value = '#d9534f'
191   - barAreaBorderColor.value = '#d9534f'
192   - text.value = t('captcha.fail')
193   - setTimeout(() => {
194   - refresh()
195   - }, 700)
196   - }
197   - })
198   - }, 400)
199   - }
200   - if (num.value < checkNum.value) {
201   - num.value = createPoint(getMousePos(canvas, e))
  94 + barSize: {
  95 + type: Object,
  96 + default() {
  97 + return {
  98 + width: '310px',
  99 + height: '40px'
202 100 }
203 101 }
204   - //获取坐标
205   - const getMousePos = function (obj, e) {
206   - var x = e.offsetX
207   - var y = e.offsetY
208   - return { x, y }
209   - }
210   - //创建坐标点
211   - const createPoint = function (pos) {
212   - tempPoints.push(Object.assign({}, pos))
213   - return num.value + 1
214   - }
215   - const refresh = function () {
216   - tempPoints.splice(0, tempPoints.length)
217   - barAreaColor.value = '#000'
218   - barAreaBorderColor.value = '#ddd'
219   - bindingClick.value = true
220   - fontPos.splice(0, fontPos.length)
221   - checkPosArr.splice(0, checkPosArr.length)
222   - num.value = 1
223   - getPictrue()
224   - text.value = t('captcha.fail')
225   - showRefresh.value = true
226   - }
  102 + }
  103 +})
227 104  
228   - // 请求背景图片和验证图片
229   - function getPictrue() {
  105 +const { t } = useI18n()
  106 +const { mode, captchaType } = toRefs(props)
  107 +const { proxy } = getCurrentInstance()
  108 +let secretKey = ref(''), //后端返回的ase加密秘钥
  109 + checkNum = ref(3), //默认需要点击的字数
  110 + fontPos = reactive([]), //选中的坐标信息
  111 + checkPosArr = reactive([]), //用户点击的坐标
  112 + num = ref(1), //点击的记数
  113 + pointBackImgBase = ref(''), //后端获取到的背景图片
  114 + poinTextList = reactive([]), //后端返回的点击字体顺序
  115 + backToken = ref(''), //后端返回的token值
  116 + setSize = reactive({
  117 + imgHeight: 0,
  118 + imgWidth: 0,
  119 + barHeight: 0,
  120 + barWidth: 0
  121 + }),
  122 + tempPoints = reactive([]),
  123 + text = ref(''),
  124 + barAreaColor = ref(undefined),
  125 + barAreaBorderColor = ref(undefined),
  126 + showRefresh = ref(true),
  127 + bindingClick = ref(true)
  128 +
  129 +const init = () => {
  130 + //加载页面
  131 + fontPos.splice(0, fontPos.length)
  132 + checkPosArr.splice(0, checkPosArr.length)
  133 + num.value = 1
  134 + getPictrue()
  135 + nextTick(() => {
  136 + let { imgHeight, imgWidth, barHeight, barWidth } = resetSize(proxy)
  137 + setSize.imgHeight = imgHeight
  138 + setSize.imgWidth = imgWidth
  139 + setSize.barHeight = barHeight
  140 + setSize.barWidth = barWidth
  141 + proxy.$parent.$emit('ready', proxy)
  142 + })
  143 +}
  144 +onMounted(() => {
  145 + // 禁止拖拽
  146 + init()
  147 + proxy.$el.onselectstart = function () {
  148 + return false
  149 + }
  150 +})
  151 +const canvas = ref(null)
  152 +const canvasClick = (e) => {
  153 + checkPosArr.push(getMousePos(canvas, e))
  154 + if (num.value == checkNum.value) {
  155 + num.value = createPoint(getMousePos(canvas, e))
  156 + //按比例转换坐标值
  157 + let arr = pointTransfrom(checkPosArr, setSize)
  158 + checkPosArr.length = 0
  159 + checkPosArr.push(...arr)
  160 + //等创建坐标执行完
  161 + setTimeout(() => {
  162 + // var flag = this.comparePos(this.fontPos, this.checkPosArr);
  163 + //发送后端请求
  164 + var captchaVerification = secretKey.value
  165 + ? aesEncrypt(backToken.value + '---' + JSON.stringify(checkPosArr), secretKey.value)
  166 + : backToken.value + '---' + JSON.stringify(checkPosArr)
230 167 let data = {
231   - captchaType: captchaType.value
  168 + captchaType: captchaType.value,
  169 + pointJson: secretKey.value
  170 + ? aesEncrypt(JSON.stringify(checkPosArr), secretKey.value)
  171 + : JSON.stringify(checkPosArr),
  172 + token: backToken.value
232 173 }
233   - getCodeApi(data).then((res) => {
  174 + reqCheckApi(data).then((res) => {
234 175 if (res.repCode == '0000') {
235   - pointBackImgBase.value = res.repData.originalImageBase64
236   - backToken.value = res.repData.token
237   - secretKey.value = res.repData.secretKey
238   - poinTextList.value = res.repData.wordList
239   - text.value = t('captcha.point') + '【' + poinTextList.value.join(',') + '】'
  176 + barAreaColor.value = '#4cae4c'
  177 + barAreaBorderColor.value = '#5cb85c'
  178 + text.value = t('captcha.success')
  179 + bindingClick.value = false
  180 + if (mode.value == 'pop') {
  181 + setTimeout(() => {
  182 + proxy.$parent.clickShow = false
  183 + refresh()
  184 + }, 1500)
  185 + }
  186 + proxy.$parent.$emit('success', { captchaVerification })
240 187 } else {
241   - text.value = res.repMsg
  188 + proxy.$parent.$emit('error', proxy)
  189 + barAreaColor.value = '#d9534f'
  190 + barAreaBorderColor.value = '#d9534f'
  191 + text.value = t('captcha.fail')
  192 + setTimeout(() => {
  193 + refresh()
  194 + }, 700)
242 195 }
243 196 })
244   - }
245   - //坐标转换函数
246   - const pointTransfrom = function (pointArr, imgSize) {
247   - var newPointArr = pointArr.map((p) => {
248   - let x = Math.round((310 * p.x) / parseInt(imgSize.imgWidth))
249   - let y = Math.round((155 * p.y) / parseInt(imgSize.imgHeight))
250   - return { x, y }
251   - })
252   - return newPointArr
253   - }
254   - return {
255   - secretKey,
256   - checkNum,
257   - fontPos,
258   - checkPosArr,
259   - num,
260   - pointBackImgBase,
261   - poinTextList,
262   - backToken,
263   - setSize,
264   - tempPoints,
265   - text,
266   - barAreaColor,
267   - barAreaBorderColor,
268   - showRefresh,
269   - bindingClick,
270   - init,
271   - canvas,
272   - canvasClick,
273   - getMousePos,
274   - createPoint,
275   - refresh,
276   - getPictrue,
277   - pointTransfrom
278   - }
  197 + }, 400)
  198 + }
  199 + if (num.value < checkNum.value) {
  200 + num.value = createPoint(getMousePos(canvas, e))
279 201 }
280 202 }
  203 +//获取坐标
  204 +const getMousePos = function (obj, e) {
  205 + var x = e.offsetX
  206 + var y = e.offsetY
  207 + return { x, y }
  208 +}
  209 +//创建坐标点
  210 +const createPoint = function (pos) {
  211 + tempPoints.push(Object.assign({}, pos))
  212 + return num.value + 1
  213 +}
  214 +const refresh = async function () {
  215 + tempPoints.splice(0, tempPoints.length)
  216 + barAreaColor.value = '#000'
  217 + barAreaBorderColor.value = '#ddd'
  218 + bindingClick.value = true
  219 + fontPos.splice(0, fontPos.length)
  220 + checkPosArr.splice(0, checkPosArr.length)
  221 + num.value = 1
  222 + await getPictrue()
  223 + showRefresh.value = true
  224 +}
  225 +
  226 +// 请求背景图片和验证图片
  227 +const getPictrue = async () => {
  228 + let data = {
  229 + captchaType: captchaType.value
  230 + }
  231 + const res = await getCodeApi(data)
  232 + if (res.repCode == '0000') {
  233 + pointBackImgBase.value = res.repData.originalImageBase64
  234 + backToken.value = res.repData.token
  235 + secretKey.value = res.repData.secretKey
  236 + poinTextList.value = res.repData.wordList
  237 + text.value = t('captcha.point') + '【' + poinTextList.value.join(',') + '】'
  238 + } else {
  239 + text.value = res.repMsg
  240 + }
  241 +}
  242 +//坐标转换函数
  243 +const pointTransfrom = function (pointArr, imgSize) {
  244 + var newPointArr = pointArr.map((p) => {
  245 + let x = Math.round((310 * p.x) / parseInt(imgSize.imgWidth))
  246 + let y = Math.round((155 * p.y) / parseInt(imgSize.imgHeight))
  247 + return { x, y }
  248 + })
  249 + return newPointArr
  250 +}
281 251 </script>
... ...
yudao-ui-admin-vue3/src/components/Verifition/src/Verify/VerifySlide.vue
... ... @@ -71,7 +71,7 @@
71 71 </div>
72 72 </div>
73 73 </template>
74   -<script type="text/babel">
  74 +<script type="text/babel" setup>
75 75 /**
76 76 * VerifySlide
77 77 * @description 滑块
... ... @@ -90,337 +90,298 @@ import {
90 90 toRefs,
91 91 getCurrentInstance
92 92 } from 'vue'
93   -// "captchaType":"blockPuzzle",
94   -export default {
95   - name: 'VerifySlide',
96   - props: {
97   - captchaType: {
98   - type: String
99   - },
100   - type: {
101   - type: String,
102   - default: '1'
103   - },
104   - //弹出式pop,固定fixed
105   - mode: {
106   - type: String,
107   - default: 'fixed'
108   - },
109   - vSpace: {
110   - type: Number,
111   - default: 5
112   - },
113   - explain: {
114   - type: String,
115   - default: ''
116   - },
117   - imgSize: {
118   - type: Object,
119   - default() {
120   - return {
121   - width: '310px',
122   - height: '155px'
123   - }
124   - }
125   - },
126   - blockSize: {
127   - type: Object,
128   - default() {
129   - return {
130   - width: '50px',
131   - height: '50px'
132   - }
  93 +
  94 +const props = defineProps({
  95 + captchaType: {
  96 + type: String
  97 + },
  98 + type: {
  99 + type: String,
  100 + default: '1'
  101 + },
  102 + //弹出式pop,固定fixed
  103 + mode: {
  104 + type: String,
  105 + default: 'fixed'
  106 + },
  107 + vSpace: {
  108 + type: Number,
  109 + default: 5
  110 + },
  111 + explain: {
  112 + type: String,
  113 + default: ''
  114 + },
  115 + imgSize: {
  116 + type: Object,
  117 + default() {
  118 + return {
  119 + width: '310px',
  120 + height: '155px'
133 121 }
134   - },
135   - barSize: {
136   - type: Object,
137   - default() {
138   - return {
139   - width: '310px',
140   - height: '30px'
141   - }
  122 + }
  123 + },
  124 + blockSize: {
  125 + type: Object,
  126 + default() {
  127 + return {
  128 + width: '50px',
  129 + height: '50px'
142 130 }
143 131 }
144 132 },
145   - setup(props) {
146   - const { t } = useI18n()
147   - const { mode, captchaType, type, blockSize, explain } = toRefs(props)
148   - const { proxy } = getCurrentInstance()
149   - let secretKey = ref(''), //后端返回的ase加密秘钥
150   - passFlag = ref(''), //是否通过的标识
151   - backImgBase = ref(''), //验证码背景图片
152   - blockBackImgBase = ref(''), //验证滑块的背景图片
153   - backToken = ref(''), //后端返回的唯一token值
154   - startMoveTime = ref(''), //移动开始的时间
155   - endMovetime = ref(''), //移动结束的时间
156   - tipsBackColor = ref(''), //提示词的背景颜色
157   - tipWords = ref(''),
158   - text = ref(''),
159   - finishText = ref(''),
160   - setSize = reactive({
161   - imgHeight: 0,
162   - imgWidth: 0,
163   - barHeight: 0,
164   - barWidth: 0
165   - }),
166   - top = ref(0),
167   - left = ref(0),
168   - moveBlockLeft = ref(undefined),
169   - leftBarWidth = ref(undefined),
170   - // 移动中样式
171   - moveBlockBackgroundColor = ref(undefined),
172   - leftBarBorderColor = ref('#ddd'),
173   - iconColor = ref(undefined),
174   - iconClass = ref('icon-right'),
175   - status = ref(false), //鼠标状态
176   - isEnd = ref(false), //是够验证完成
177   - showRefresh = ref(true),
178   - transitionLeft = ref(''),
179   - transitionWidth = ref(''),
180   - startLeft = ref(0)
181   -
182   - const barArea = computed(() => {
183   - return proxy.$el.querySelector('.verify-bar-area')
184   - })
185   - function init() {
186   - if (explain.value === '') {
187   - text.value = t('captcha.slide')
188   - } else {
189   - text.value = explain.value
  133 + barSize: {
  134 + type: Object,
  135 + default() {
  136 + return {
  137 + width: '310px',
  138 + height: '30px'
190 139 }
191   - getPictrue()
192   - nextTick(() => {
193   - let { imgHeight, imgWidth, barHeight, barWidth } = resetSize(proxy)
194   - setSize.imgHeight = imgHeight
195   - setSize.imgWidth = imgWidth
196   - setSize.barHeight = barHeight
197   - setSize.barWidth = barWidth
198   - proxy.$parent.$emit('ready', proxy)
199   - })
  140 + }
  141 + }
  142 +})
200 143  
201   - window.removeEventListener('touchmove', function (e) {
202   - move(e)
203   - })
204   - window.removeEventListener('mousemove', function (e) {
205   - move(e)
206   - })
  144 +const { t } = useI18n()
  145 +const { mode, captchaType, type, blockSize, explain } = toRefs(props)
  146 +const { proxy } = getCurrentInstance()
  147 +let secretKey = ref(''), //后端返回的ase加密秘钥
  148 + passFlag = ref(''), //是否通过的标识
  149 + backImgBase = ref(''), //验证码背景图片
  150 + blockBackImgBase = ref(''), //验证滑块的背景图片
  151 + backToken = ref(''), //后端返回的唯一token值
  152 + startMoveTime = ref(''), //移动开始的时间
  153 + endMovetime = ref(''), //移动结束的时间
  154 + tipWords = ref(''),
  155 + text = ref(''),
  156 + finishText = ref(''),
  157 + setSize = reactive({
  158 + imgHeight: 0,
  159 + imgWidth: 0,
  160 + barHeight: 0,
  161 + barWidth: 0
  162 + }),
  163 + moveBlockLeft = ref(undefined),
  164 + leftBarWidth = ref(undefined),
  165 + // 移动中样式
  166 + moveBlockBackgroundColor = ref(undefined),
  167 + leftBarBorderColor = ref('#ddd'),
  168 + iconColor = ref(undefined),
  169 + iconClass = ref('icon-right'),
  170 + status = ref(false), //鼠标状态
  171 + isEnd = ref(false), //是够验证完成
  172 + showRefresh = ref(true),
  173 + transitionLeft = ref(''),
  174 + transitionWidth = ref(''),
  175 + startLeft = ref(0)
207 176  
208   - //鼠标松开
209   - window.removeEventListener('touchend', function () {
210   - end()
211   - })
212   - window.removeEventListener('mouseup', function () {
213   - end()
214   - })
  177 +const barArea = computed(() => {
  178 + return proxy.$el.querySelector('.verify-bar-area')
  179 +})
  180 +const init = () => {
  181 + if (explain.value === '') {
  182 + text.value = t('captcha.slide')
  183 + } else {
  184 + text.value = explain.value
  185 + }
  186 + getPictrue()
  187 + nextTick(() => {
  188 + let { imgHeight, imgWidth, barHeight, barWidth } = resetSize(proxy)
  189 + setSize.imgHeight = imgHeight
  190 + setSize.imgWidth = imgWidth
  191 + setSize.barHeight = barHeight
  192 + setSize.barWidth = barWidth
  193 + proxy.$parent.$emit('ready', proxy)
  194 + })
215 195  
216   - window.addEventListener('touchmove', function (e) {
217   - move(e)
218   - })
219   - window.addEventListener('mousemove', function (e) {
220   - move(e)
221   - })
  196 + window.removeEventListener('touchmove', function (e) {
  197 + move(e)
  198 + })
  199 + window.removeEventListener('mousemove', function (e) {
  200 + move(e)
  201 + })
222 202  
223   - //鼠标松开
224   - window.addEventListener('touchend', function () {
225   - end()
226   - })
227   - window.addEventListener('mouseup', function () {
228   - end()
229   - })
  203 + //鼠标松开
  204 + window.removeEventListener('touchend', function () {
  205 + end()
  206 + })
  207 + window.removeEventListener('mouseup', function () {
  208 + end()
  209 + })
  210 +
  211 + window.addEventListener('touchmove', function (e) {
  212 + move(e)
  213 + })
  214 + window.addEventListener('mousemove', function (e) {
  215 + move(e)
  216 + })
  217 +
  218 + //鼠标松开
  219 + window.addEventListener('touchend', function () {
  220 + end()
  221 + })
  222 + window.addEventListener('mouseup', function () {
  223 + end()
  224 + })
  225 +}
  226 +watch(type, () => {
  227 + init()
  228 +})
  229 +onMounted(() => {
  230 + // 禁止拖拽
  231 + init()
  232 + proxy.$el.onselectstart = function () {
  233 + return false
  234 + }
  235 +})
  236 +//鼠标按下
  237 +const start = (e) => {
  238 + e = e || window.event
  239 + if (!e.touches) {
  240 + //兼容PC端
  241 + var x = e.clientX
  242 + } else {
  243 + //兼容移动端
  244 + var x = e.touches[0].pageX
  245 + }
  246 + startLeft.value = Math.floor(x - barArea.value.getBoundingClientRect().left)
  247 + startMoveTime.value = +new Date() //开始滑动的时间
  248 + if (isEnd.value == false) {
  249 + text.value = ''
  250 + moveBlockBackgroundColor.value = '#337ab7'
  251 + leftBarBorderColor.value = '#337AB7'
  252 + iconColor.value = '#fff'
  253 + e.stopPropagation()
  254 + status.value = true
  255 + }
  256 +}
  257 +//鼠标移动
  258 +const move = (e) => {
  259 + e = e || window.event
  260 + if (status.value && isEnd.value == false) {
  261 + if (!e.touches) {
  262 + //兼容PC端
  263 + var x = e.clientX
  264 + } else {
  265 + //兼容移动端
  266 + var x = e.touches[0].pageX
230 267 }
231   - watch(type, () => {
232   - init()
233   - })
234   - onMounted(() => {
235   - // 禁止拖拽
236   - init()
237   - proxy.$el.onselectstart = function () {
238   - return false
239   - }
240   - })
241   - //鼠标按下
242   - function start(e) {
243   - e = e || window.event
244   - if (!e.touches) {
245   - //兼容PC端
246   - var x = e.clientX
247   - } else {
248   - //兼容移动端
249   - var x = e.touches[0].pageX
250   - }
251   - startLeft.value = Math.floor(x - barArea.value.getBoundingClientRect().left)
252   - startMoveTime.value = +new Date() //开始滑动的时间
253   - if (isEnd.value == false) {
254   - text.value = ''
255   - moveBlockBackgroundColor.value = '#337ab7'
256   - leftBarBorderColor.value = '#337AB7'
257   - iconColor.value = '#fff'
258   - e.stopPropagation()
259   - status.value = true
260   - }
  268 + var bar_area_left = barArea.value.getBoundingClientRect().left
  269 + var move_block_left = x - bar_area_left //小方块相对于父元素的left值
  270 + if (
  271 + move_block_left >=
  272 + barArea.value.offsetWidth - parseInt(parseInt(blockSize.value.width) / 2) - 2
  273 + ) {
  274 + move_block_left =
  275 + barArea.value.offsetWidth - parseInt(parseInt(blockSize.value.width) / 2) - 2
261 276 }
262   - //鼠标移动
263   - function move(e) {
264   - e = e || window.event
265   - if (status.value && isEnd.value == false) {
266   - if (!e.touches) {
267   - //兼容PC端
268   - var x = e.clientX
269   - } else {
270   - //兼容移动端
271   - var x = e.touches[0].pageX
272   - }
273   - var bar_area_left = barArea.value.getBoundingClientRect().left
274   - var move_block_left = x - bar_area_left //小方块相对于父元素的left值
275   - if (
276   - move_block_left >=
277   - barArea.value.offsetWidth - parseInt(parseInt(blockSize.value.width) / 2) - 2
278   - ) {
279   - move_block_left =
280   - barArea.value.offsetWidth - parseInt(parseInt(blockSize.value.width) / 2) - 2
281   - }
282   - if (move_block_left <= 0) {
283   - move_block_left = parseInt(parseInt(blockSize.value.width) / 2)
284   - }
285   - //拖动后小方块的left值
286   - moveBlockLeft.value = move_block_left - startLeft.value + 'px'
287   - leftBarWidth.value = move_block_left - startLeft.value + 'px'
288   - }
  277 + if (move_block_left <= 0) {
  278 + move_block_left = parseInt(parseInt(blockSize.value.width) / 2)
289 279 }
  280 + //拖动后小方块的left值
  281 + moveBlockLeft.value = move_block_left - startLeft.value + 'px'
  282 + leftBarWidth.value = move_block_left - startLeft.value + 'px'
  283 + }
  284 +}
290 285  
291   - //鼠标松开
292   - function end() {
293   - endMovetime.value = +new Date()
294   - //判断是否重合
295   - if (status.value && isEnd.value == false) {
296   - var moveLeftDistance = parseInt((moveBlockLeft.value || '').replace('px', ''))
297   - moveLeftDistance = (moveLeftDistance * 310) / parseInt(setSize.imgWidth)
298   - let data = {
299   - captchaType: captchaType.value,
300   - pointJson: secretKey.value
301   - ? aesEncrypt(JSON.stringify({ x: moveLeftDistance, y: 5.0 }), secretKey.value)
302   - : JSON.stringify({ x: moveLeftDistance, y: 5.0 }),
303   - token: backToken.value
  286 +//鼠标松开
  287 +const end = () => {
  288 + endMovetime.value = +new Date()
  289 + //判断是否重合
  290 + if (status.value && isEnd.value == false) {
  291 + var moveLeftDistance = parseInt((moveBlockLeft.value || '').replace('px', ''))
  292 + moveLeftDistance = (moveLeftDistance * 310) / parseInt(setSize.imgWidth)
  293 + let data = {
  294 + captchaType: captchaType.value,
  295 + pointJson: secretKey.value
  296 + ? aesEncrypt(JSON.stringify({ x: moveLeftDistance, y: 5.0 }), secretKey.value)
  297 + : JSON.stringify({ x: moveLeftDistance, y: 5.0 }),
  298 + token: backToken.value
  299 + }
  300 + reqCheckApi(data).then((res) => {
  301 + if (res.repCode == '0000') {
  302 + moveBlockBackgroundColor.value = '#5cb85c'
  303 + leftBarBorderColor.value = '#5cb85c'
  304 + iconColor.value = '#fff'
  305 + iconClass.value = 'icon-check'
  306 + showRefresh.value = false
  307 + isEnd.value = true
  308 + if (mode.value == 'pop') {
  309 + setTimeout(() => {
  310 + proxy.$parent.clickShow = false
  311 + refresh()
  312 + }, 1500)
304 313 }
305   - reqCheckApi(data).then((res) => {
306   - if (res.repCode == '0000') {
307   - moveBlockBackgroundColor.value = '#5cb85c'
308   - leftBarBorderColor.value = '#5cb85c'
309   - iconColor.value = '#fff'
310   - iconClass.value = 'icon-check'
311   - showRefresh.value = false
312   - isEnd.value = true
313   - if (mode.value == 'pop') {
314   - setTimeout(() => {
315   - proxy.$parent.clickShow = false
316   - refresh()
317   - }, 1500)
318   - }
319   - passFlag.value = true
320   - tipWords.value = `${((endMovetime.value - startMoveTime.value) / 1000).toFixed(2)}s
  314 + passFlag.value = true
  315 + tipWords.value = `${((endMovetime.value - startMoveTime.value) / 1000).toFixed(2)}s
321 316 ${t('captcha.success')}`
322   - var captchaVerification = secretKey.value
323   - ? aesEncrypt(
324   - backToken.value + '---' + JSON.stringify({ x: moveLeftDistance, y: 5.0 }),
325   - secretKey.value
326   - )
327   - : backToken.value + '---' + JSON.stringify({ x: moveLeftDistance, y: 5.0 })
328   - setTimeout(() => {
329   - tipWords.value = ''
330   - proxy.$parent.closeBox()
331   - proxy.$parent.$emit('success', { captchaVerification })
332   - }, 1000)
333   - } else {
334   - moveBlockBackgroundColor.value = '#d9534f'
335   - leftBarBorderColor.value = '#d9534f'
336   - iconColor.value = '#fff'
337   - iconClass.value = 'icon-close'
338   - passFlag.value = false
339   - setTimeout(function () {
340   - refresh()
341   - }, 1000)
342   - proxy.$parent.$emit('error', proxy)
343   - tipWords.value = t('captcha.fail')
344   - setTimeout(() => {
345   - tipWords.value = ''
346   - }, 1000)
347   - }
348   - })
349   - status.value = false
  317 + var captchaVerification = secretKey.value
  318 + ? aesEncrypt(
  319 + backToken.value + '---' + JSON.stringify({ x: moveLeftDistance, y: 5.0 }),
  320 + secretKey.value
  321 + )
  322 + : backToken.value + '---' + JSON.stringify({ x: moveLeftDistance, y: 5.0 })
  323 + setTimeout(() => {
  324 + tipWords.value = ''
  325 + proxy.$parent.closeBox()
  326 + proxy.$parent.$emit('success', { captchaVerification })
  327 + }, 1000)
  328 + } else {
  329 + moveBlockBackgroundColor.value = '#d9534f'
  330 + leftBarBorderColor.value = '#d9534f'
  331 + iconColor.value = '#fff'
  332 + iconClass.value = 'icon-close'
  333 + passFlag.value = false
  334 + setTimeout(function () {
  335 + refresh()
  336 + }, 1000)
  337 + proxy.$parent.$emit('error', proxy)
  338 + tipWords.value = t('captcha.fail')
  339 + setTimeout(() => {
  340 + tipWords.value = ''
  341 + }, 1000)
350 342 }
351   - }
  343 + })
  344 + status.value = false
  345 + }
  346 +}
352 347  
353   - const refresh = () => {
354   - showRefresh.value = true
355   - finishText.value = ''
  348 +const refresh = async () => {
  349 + showRefresh.value = true
  350 + finishText.value = ''
356 351  
357   - transitionLeft.value = 'left .3s'
358   - moveBlockLeft.value = 0
  352 + transitionLeft.value = 'left .3s'
  353 + moveBlockLeft.value = 0
359 354  
360   - leftBarWidth.value = undefined
361   - transitionWidth.value = 'width .3s'
  355 + leftBarWidth.value = undefined
  356 + transitionWidth.value = 'width .3s'
362 357  
363   - leftBarBorderColor.value = '#ddd'
364   - moveBlockBackgroundColor.value = '#fff'
365   - iconColor.value = '#000'
366   - iconClass.value = 'icon-right'
367   - isEnd.value = false
  358 + leftBarBorderColor.value = '#ddd'
  359 + moveBlockBackgroundColor.value = '#fff'
  360 + iconColor.value = '#000'
  361 + iconClass.value = 'icon-right'
  362 + isEnd.value = false
368 363  
369   - getPictrue()
370   - setTimeout(() => {
371   - transitionWidth.value = ''
372   - transitionLeft.value = ''
373   - text.value = explain.value
374   - }, 300)
375   - }
  364 + await getPictrue()
  365 + setTimeout(() => {
  366 + transitionWidth.value = ''
  367 + transitionLeft.value = ''
  368 + text.value = explain.value
  369 + }, 300)
  370 +}
376 371  
377   - // 请求背景图片和验证图片
378   - function getPictrue() {
379   - let data = {
380   - captchaType: captchaType.value
381   - }
382   - getCodeApi(data).then((res) => {
383   - if (res.repCode == '0000') {
384   - backImgBase.value = res.repData.originalImageBase64
385   - blockBackImgBase.value = res.repData.jigsawImageBase64
386   - backToken.value = res.repData.token
387   - secretKey.value = res.repData.secretKey
388   - } else {
389   - tipWords.value = res.repMsg
390   - }
391   - })
392   - }
393   - return {
394   - secretKey, //后端返回的ase加密秘钥
395   - passFlag, //是否通过的标识
396   - backImgBase, //验证码背景图片
397   - blockBackImgBase, //验证滑块的背景图片
398   - backToken, //后端返回的唯一token值
399   - startMoveTime, //移动开始的时间
400   - endMovetime, //移动结束的时间
401   - tipsBackColor, //提示词的背景颜色
402   - tipWords,
403   - text,
404   - finishText,
405   - setSize,
406   - top,
407   - left,
408   - moveBlockLeft,
409   - leftBarWidth,
410   - // 移动中样式
411   - moveBlockBackgroundColor,
412   - leftBarBorderColor,
413   - iconColor,
414   - iconClass,
415   - status, //鼠标状态
416   - isEnd, //是够验证完成
417   - showRefresh,
418   - transitionLeft,
419   - transitionWidth,
420   - barArea,
421   - refresh,
422   - start
423   - }
  372 +// 请求背景图片和验证图片
  373 +const getPictrue = async () => {
  374 + let data = {
  375 + captchaType: captchaType.value
  376 + }
  377 + const res = await getCodeApi(data)
  378 + if (res.repCode == '0000') {
  379 + backImgBase.value = res.repData.originalImageBase64
  380 + blockBackImgBase.value = res.repData.jigsawImageBase64
  381 + backToken.value = res.repData.token
  382 + secretKey.value = res.repData.secretKey
  383 + } else {
  384 + tipWords.value = res.repMsg
424 385 }
425 386 }
426 387 </script>
... ...
yudao-ui-admin-vue3/src/components/XModal/src/XModal.vue
... ... @@ -10,8 +10,8 @@ const props = defineProps({
10 10 fullscreen: propTypes.bool.def(false),
11 11 loading: propTypes.bool.def(false),
12 12 title: propTypes.string.def('弹窗'),
13   - width: propTypes.string.def('800'),
14   - height: propTypes.string.def('480'),
  13 + width: propTypes.string.def('40%'),
  14 + height: propTypes.string.def('60%'),
15 15 minWidth: propTypes.string.def('460'),
16 16 minHeight: propTypes.string.def('320'),
17 17 showFooter: propTypes.bool.def(true)
... ...
yudao-ui-admin-vue3/src/components/index.ts
... ... @@ -3,7 +3,6 @@ import { Icon } from &#39;./Icon&#39;
3 3 import { Form } from '@/components/Form'
4 4 import { Table } from '@/components/Table'
5 5 import { Search } from '@/components/Search'
6   -import { Dialog } from '@/components/Dialog'
7 6 import { XModal } from '@/components/XModal'
8 7 import { XButton, XTextButton } from '@/components/XButton'
9 8 import { DictTag } from '@/components/DictTag'
... ... @@ -15,7 +14,6 @@ export const setupGlobCom = (app: App&lt;Element&gt;): void =&gt; {
15 14 app.component('Form', Form)
16 15 app.component('Table', Table)
17 16 app.component('Search', Search)
18   - app.component('Dialog', Dialog)
19 17 app.component('XModal', XModal)
20 18 app.component('XButton', XButton)
21 19 app.component('XTextButton', XTextButton)
... ...
yudao-ui-admin-vue3/src/config/axios/service.ts
... ... @@ -168,15 +168,19 @@ service.interceptors.response.use(
168 168 ElMessage.error(t('sys.api.errMsg500'))
169 169 return Promise.reject(new Error(msg))
170 170 } else if (code === 901) {
171   - ElMessage.error(
172   - '<div>' +
  171 + ElMessage.error({
  172 + duration: 5,
  173 + offset: 300,
  174 + dangerouslyUseHTMLString: true,
  175 + message:
  176 + '<div>' +
173 177 t('sys.api.errMsg901') +
174 178 '</div>' +
175 179 '<div> &nbsp; </div>' +
176 180 '<div>参考 https://doc.iocoder.cn/ 教程</div>' +
177 181 '<div> &nbsp; </div>' +
178 182 '<div>5 分钟搭建本地环境</div>'
179   - )
  183 + })
180 184 return Promise.reject(new Error(msg))
181 185 } else if (code !== 200) {
182 186 if (msg === '无效的刷新令牌') {
... ...
yudao-ui-admin-vue3/src/directives/permission/hasPermi.ts
1 1 import type { App } from 'vue'
2   -import { useCache } from '@/hooks/web/useCache'
  2 +import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
3 3 import { useI18n } from '@/hooks/web/useI18n'
4 4 const { t } = useI18n() // 国际化
5 5  
... ... @@ -8,7 +8,7 @@ export function hasPermi(app: App&lt;Element&gt;) {
8 8 const { wsCache } = useCache()
9 9 const { value } = binding
10 10 const all_permission = '*:*:*'
11   - const permissions = wsCache.get('user').permissions
  11 + const permissions = wsCache.get(CACHE_KEY.USER).permissions
12 12  
13 13 if (value && value instanceof Array && value.length > 0) {
14 14 const permissionFlag = value
... ...
yudao-ui-admin-vue3/src/directives/permission/hasRole.ts
1 1 import type { App } from 'vue'
2   -import { useCache } from '@/hooks/web/useCache'
  2 +import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
3 3 import { useI18n } from '@/hooks/web/useI18n'
4 4 const { t } = useI18n() // 国际化
5 5  
... ... @@ -8,7 +8,7 @@ export function hasRole(app: App&lt;Element&gt;) {
8 8 const { wsCache } = useCache()
9 9 const { value } = binding
10 10 const super_admin = 'admin'
11   - const roles = wsCache.get('user').roles
  11 + const roles = wsCache.get(CACHE_KEY.USER).roles
12 12  
13 13 if (value && value instanceof Array && value.length > 0) {
14 14 const roleFlag = value
... ...
yudao-ui-admin-vue3/src/hooks/web/useCache.ts
... ... @@ -6,6 +6,16 @@ import WebStorageCache from &#39;web-storage-cache&#39;
6 6  
7 7 type CacheType = 'localStorage' | 'sessionStorage'
8 8  
  9 +export const CACHE_KEY = {
  10 + IS_DARK: 'isDark',
  11 + USER: 'user',
  12 + LANG: 'lang',
  13 + THEME: 'theme',
  14 + LAYOUT: 'layout',
  15 + ROLE_ROUTERS: 'roleRouters',
  16 + DICT_CACHE: 'dictCache'
  17 +}
  18 +
9 19 export const useCache = (type: CacheType = 'localStorage') => {
10 20 const wsCache: WebStorageCache = new WebStorageCache({
11 21 storage: type
... ...
yudao-ui-admin-vue3/src/hooks/web/useVxeCrudSchemas.ts
... ... @@ -208,7 +208,8 @@ const filterTableSchema = (crudSchema: VxeCrudSchema): VxeGridPropTypes.Columns
208 208 const tableSchemaItem = {
209 209 ...schemaItem.table,
210 210 field: schemaItem.field,
211   - title: schemaItem.table?.title || schemaItem.title
  211 + title: schemaItem.table?.title || schemaItem.title,
  212 + minWidth: '80px'
212 213 }
213 214 tableSchemaItem.showOverflow = 'tooltip'
214 215 if (schemaItem?.formatter) {
... ... @@ -231,6 +232,7 @@ const filterTableSchema = (crudSchema: VxeCrudSchema): VxeGridPropTypes.Columns
231 232 const tableSchemaItem = {
232 233 title: crudSchema.actionTitle ? crudSchema.actionTitle : t('table.action'),
233 234 field: 'actionbtns',
  235 + fixed: 'right' as unknown as VxeColumnPropTypes.Fixed,
234 236 width: crudSchema.actionWidth ? crudSchema.actionWidth : '200px',
235 237 slots: {
236 238 default: 'actionbtns_default'
... ...
yudao-ui-admin-vue3/src/hooks/web/useVxeGrid.ts
... ... @@ -11,10 +11,12 @@ const message = useMessage() // 消息弹窗
11 11  
12 12 interface UseVxeGridConfig<T = any> {
13 13 allSchemas: VxeAllSchemas
  14 + height?: number // 高度 默认730
14 15 topActionSlots?: boolean // 是否开启表格内顶部操作栏插槽
15 16 treeConfig?: VxeTablePropTypes.TreeConfig // 树形表单配置
16 17 isList?: boolean // 是否不带分页的list
17 18 getListApi: (option: any) => Promise<T> // 获取列表接口
  19 + getAllListApi?: (option: any) => Promise<T> // 获取全部数据接口 用于VXE导出
18 20 deleteApi?: (option: any) => Promise<T> // 删除接口
19 21 exportListApi?: (option: any) => Promise<T> // 导出接口
20 22 exportName?: string // 导出文件夹名称
... ... @@ -47,7 +49,7 @@ export const useVxeGrid = &lt;T = any&gt;(config?: UseVxeGridConfig&lt;T&gt;) =&gt; {
47 49 const gridOptions = reactive<VxeGridProps<any>>({
48 50 loading: true,
49 51 size: currentSize as any,
50   - height: 730, // 1080高度
  52 + height: config?.height ? config.height : 730,
51 53 rowConfig: {
52 54 isCurrent: true, // 当鼠标点击行时,是否要高亮当前行
53 55 isHover: true // 当鼠标移到行时,是否要高亮当前行
... ... @@ -99,8 +101,8 @@ export const useVxeGrid = &lt;T = any&gt;(config?: UseVxeGridConfig&lt;T&gt;) =&gt; {
99 101 queryAll: ({ form }) => {
100 102 const queryParams = Object.assign({}, JSON.parse(JSON.stringify(form)))
101 103 return new Promise(async (resolve) => {
102   - if (config?.exportListApi) {
103   - resolve(await config?.exportListApi(queryParams))
  104 + if (config?.getAllListApi) {
  105 + resolve(await config?.getAllListApi(queryParams))
104 106 } else {
105 107 resolve(await config?.getListApi(queryParams))
106 108 }
... ... @@ -113,7 +115,7 @@ export const useVxeGrid = &lt;T = any&gt;(config?: UseVxeGridConfig&lt;T&gt;) =&gt; {
113 115 // 默认选中类型
114 116 type: 'csv',
115 117 // 自定义数据量列表
116   - modes: ['current', 'all'],
  118 + modes: config?.getAllListApi ? ['current', 'all'] : ['current'],
117 119 columns: config?.allSchemas.printSchema
118 120 }
119 121 })
... ...
yudao-ui-admin-vue3/src/layout/Layout.vue
... ... @@ -2,7 +2,7 @@
2 2 import { computed, defineComponent, unref } from 'vue'
3 3 import { useAppStore } from '@/store/modules/app'
4 4 import { Backtop } from '@/components/Backtop'
5   -import { Setting } from '@/components/Setting'
  5 +import { Setting } from '@/layout/components/Setting'
6 6 import { useRenderLayout } from './components/useRenderLayout'
7 7 import { useDesign } from '@/hooks/web/useDesign'
8 8  
... ...
yudao-ui-admin-vue3/src/layout/components/AppView.vue
1 1 <script setup lang="ts">
2 2 import { useTagsViewStore } from '@/store/modules/tagsView'
3 3 import { useAppStore } from '@/store/modules/app'
4   -import { Footer } from '@/components/Footer'
  4 +import { Footer } from '@/layout/components/Footer'
5 5 import { computed } from 'vue'
6 6  
7 7 const appStore = useAppStore()
... ...
yudao-ui-admin-vue3/src/components/Breadcrumb/index.ts renamed to yudao-ui-admin-vue3/src/layout/components/Breadcrumb/index.ts
yudao-ui-admin-vue3/src/components/Breadcrumb/src/Breadcrumb.vue renamed to yudao-ui-admin-vue3/src/layout/components/Breadcrumb/src/Breadcrumb.vue
yudao-ui-admin-vue3/src/components/Breadcrumb/src/helper.ts renamed to yudao-ui-admin-vue3/src/layout/components/Breadcrumb/src/helper.ts
yudao-ui-admin-vue3/src/components/Collapse/index.ts renamed to yudao-ui-admin-vue3/src/layout/components/Collapse/index.ts
yudao-ui-admin-vue3/src/components/Collapse/src/Collapse.vue renamed to yudao-ui-admin-vue3/src/layout/components/Collapse/src/Collapse.vue
yudao-ui-admin-vue3/src/components/ContextMenu/index.ts renamed to yudao-ui-admin-vue3/src/layout/components/ContextMenu/index.ts
yudao-ui-admin-vue3/src/components/ContextMenu/src/ContextMenu.vue renamed to yudao-ui-admin-vue3/src/layout/components/ContextMenu/src/ContextMenu.vue
yudao-ui-admin-vue3/src/components/Footer/index.ts renamed to yudao-ui-admin-vue3/src/layout/components/Footer/index.ts
yudao-ui-admin-vue3/src/components/Footer/src/Footer.vue renamed to yudao-ui-admin-vue3/src/layout/components/Footer/src/Footer.vue
yudao-ui-admin-vue3/src/components/LocaleDropdown/index.ts renamed to yudao-ui-admin-vue3/src/layout/components/LocaleDropdown/index.ts
yudao-ui-admin-vue3/src/components/LocaleDropdown/src/LocaleDropdown.vue renamed to yudao-ui-admin-vue3/src/layout/components/LocaleDropdown/src/LocaleDropdown.vue
yudao-ui-admin-vue3/src/components/Logo/index.ts renamed to yudao-ui-admin-vue3/src/layout/components/Logo/index.ts
yudao-ui-admin-vue3/src/components/Logo/src/Logo.vue renamed to yudao-ui-admin-vue3/src/layout/components/Logo/src/Logo.vue
yudao-ui-admin-vue3/src/components/Menu/index.ts renamed to yudao-ui-admin-vue3/src/layout/components/Menu/index.ts
yudao-ui-admin-vue3/src/components/Menu/src/Menu.vue renamed to yudao-ui-admin-vue3/src/layout/components/Menu/src/Menu.vue
yudao-ui-admin-vue3/src/components/Menu/src/components/useRenderMenuItem.tsx renamed to yudao-ui-admin-vue3/src/layout/components/Menu/src/components/useRenderMenuItem.tsx
yudao-ui-admin-vue3/src/components/Menu/src/components/useRenderMenuTitle.tsx renamed to yudao-ui-admin-vue3/src/layout/components/Menu/src/components/useRenderMenuTitle.tsx
yudao-ui-admin-vue3/src/components/Menu/src/helper.ts renamed to yudao-ui-admin-vue3/src/layout/components/Menu/src/helper.ts
yudao-ui-admin-vue3/src/components/Screenfull/index.ts renamed to yudao-ui-admin-vue3/src/layout/components/Screenfull/index.ts
yudao-ui-admin-vue3/src/components/Screenfull/src/Screenfull.vue renamed to yudao-ui-admin-vue3/src/layout/components/Screenfull/src/Screenfull.vue
yudao-ui-admin-vue3/src/components/Setting/index.ts renamed to yudao-ui-admin-vue3/src/layout/components/Setting/index.ts
yudao-ui-admin-vue3/src/components/Setting/src/Setting.vue renamed to yudao-ui-admin-vue3/src/layout/components/Setting/src/Setting.vue
... ... @@ -3,13 +3,13 @@ import { ElDrawer, ElDivider, ElMessage } from &#39;element-plus&#39;
3 3 import { ref, unref, computed, watch } from 'vue'
4 4 import { useCssVar, useClipboard } from '@vueuse/core'
5 5 import { useI18n } from '@/hooks/web/useI18n'
6   -import { useCache } from '@/hooks/web/useCache'
  6 +import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
7 7 import { useDesign } from '@/hooks/web/useDesign'
8 8  
9 9 import { trim, setCssVar } from '@/utils'
10 10 import { colorIsDark, lighten, hexToRGB } from '@/utils/color'
11 11 import { useAppStore } from '@/store/modules/app'
12   -import { ThemeSwitch } from '@/components/ThemeSwitch'
  12 +import { ThemeSwitch } from '@/layout/components/ThemeSwitch'
13 13 import ColorRadioPicker from './components/ColorRadioPicker.vue'
14 14 import InterfaceDisplay from './components/InterfaceDisplay.vue'
15 15 import LayoutRadioPicker from './components/LayoutRadioPicker.vue'
... ... @@ -188,9 +188,9 @@ const copyConfig = async () =&gt; {
188 188 // 清空缓存
189 189 const clear = () => {
190 190 const { wsCache } = useCache()
191   - wsCache.delete('layout')
192   - wsCache.delete('theme')
193   - wsCache.delete('isDark')
  191 + wsCache.delete(CACHE_KEY.LAYOUT)
  192 + wsCache.delete(CACHE_KEY.THEME)
  193 + wsCache.delete(CACHE_KEY.IS_DARK)
194 194 window.location.reload()
195 195 }
196 196 </script>
... ...
yudao-ui-admin-vue3/src/components/Setting/src/components/ColorRadioPicker.vue renamed to yudao-ui-admin-vue3/src/layout/components/Setting/src/components/ColorRadioPicker.vue
yudao-ui-admin-vue3/src/components/Setting/src/components/InterfaceDisplay.vue renamed to yudao-ui-admin-vue3/src/layout/components/Setting/src/components/InterfaceDisplay.vue
yudao-ui-admin-vue3/src/components/Setting/src/components/LayoutRadioPicker.vue renamed to yudao-ui-admin-vue3/src/layout/components/Setting/src/components/LayoutRadioPicker.vue
yudao-ui-admin-vue3/src/components/SizeDropdown/index.ts renamed to yudao-ui-admin-vue3/src/layout/components/SizeDropdown/index.ts
yudao-ui-admin-vue3/src/components/SizeDropdown/src/SizeDropdown.vue renamed to yudao-ui-admin-vue3/src/layout/components/SizeDropdown/src/SizeDropdown.vue
yudao-ui-admin-vue3/src/components/TabMenu/index.ts renamed to yudao-ui-admin-vue3/src/layout/components/TabMenu/index.ts
yudao-ui-admin-vue3/src/components/TabMenu/src/TabMenu.vue renamed to yudao-ui-admin-vue3/src/layout/components/TabMenu/src/TabMenu.vue
... ... @@ -5,7 +5,7 @@ import { computed, unref, defineComponent, watch, ref, onMounted } from &#39;vue&#39;
5 5 import { useI18n } from '@/hooks/web/useI18n'
6 6 import { ElScrollbar } from 'element-plus'
7 7 import { Icon } from '@/components/Icon'
8   -import { Menu } from '@/components/Menu'
  8 +import { Menu } from '@/layout/components/Menu'
9 9 import { useRouter } from 'vue-router'
10 10 import { pathResolve } from '@/utils/routerHelper'
11 11 import { cloneDeep } from 'lodash-es'
... ...
yudao-ui-admin-vue3/src/components/TabMenu/src/helper.ts renamed to yudao-ui-admin-vue3/src/layout/components/TabMenu/src/helper.ts
1   -import { getAllParentPath } from '@/components/Menu/src/helper'
  1 +import { getAllParentPath } from '@/layout/components/Menu/src/helper'
2 2 import type { RouteMeta } from 'vue-router'
3 3 import { isUrl } from '@/utils/is'
4 4 import { cloneDeep } from 'lodash-es'
... ...
yudao-ui-admin-vue3/src/components/TagsView/index.ts renamed to yudao-ui-admin-vue3/src/layout/components/TagsView/index.ts
yudao-ui-admin-vue3/src/components/TagsView/src/TagsView.vue renamed to yudao-ui-admin-vue3/src/layout/components/TagsView/src/TagsView.vue
... ... @@ -7,7 +7,7 @@ import { useTagsViewStore } from &#39;@/store/modules/tagsView&#39;
7 7 import { useAppStore } from '@/store/modules/app'
8 8 import { useI18n } from '@/hooks/web/useI18n'
9 9 import { filterAffixTags } from './helper'
10   -import { ContextMenu, ContextMenuExpose } from '@/components/ContextMenu'
  10 +import { ContextMenu, ContextMenuExpose } from '@/layout/components/ContextMenu'
11 11 import { useDesign } from '@/hooks/web/useDesign'
12 12 import { useTemplateRefsList } from '@vueuse/core'
13 13 import { ElScrollbar } from 'element-plus'
... ... @@ -114,8 +114,8 @@ const toLastView = () =&gt; {
114 114 addTags()
115 115 return
116 116 }
117   - // You can set another route
118   - push(permissionStore.getAddRouters[0].path)
  117 + // TODO: You can set another route
  118 + push('/')
119 119 }
120 120 }
121 121  
... ... @@ -128,7 +128,6 @@ const moveToCurrentTag = async () =&gt; {
128 128 if (v.fullPath !== unref(currentRoute).fullPath) {
129 129 tagsViewStore.updateVisitedView(unref(currentRoute))
130 130 }
131   -
132 131 break
133 132 }
134 133 }
... ...
yudao-ui-admin-vue3/src/components/TagsView/src/helper.ts renamed to yudao-ui-admin-vue3/src/layout/components/TagsView/src/helper.ts
yudao-ui-admin-vue3/src/components/ThemeSwitch/index.ts renamed to yudao-ui-admin-vue3/src/layout/components/ThemeSwitch/index.ts
yudao-ui-admin-vue3/src/components/ThemeSwitch/src/ThemeSwitch.vue renamed to yudao-ui-admin-vue3/src/layout/components/ThemeSwitch/src/ThemeSwitch.vue
yudao-ui-admin-vue3/src/layout/components/ToolHeader.vue
1 1 <script lang="tsx">
2 2 import { defineComponent, computed } from 'vue'
3   -import { Collapse } from '@/components/Collapse'
4   -import { LocaleDropdown } from '@/components/LocaleDropdown'
5   -import { SizeDropdown } from '@/components/SizeDropdown'
6   -import { UserInfo } from '@/components/UserInfo'
7   -import { Screenfull } from '@/components/Screenfull'
8   -import { Breadcrumb } from '@/components/Breadcrumb'
  3 +import { Collapse } from '@/layout/components/Collapse'
  4 +import { LocaleDropdown } from '@/layout/components/LocaleDropdown'
  5 +import { SizeDropdown } from '@/layout/components/SizeDropdown'
  6 +import { UserInfo } from '@/layout/components/UserInfo'
  7 +import { Screenfull } from '@/layout/components/Screenfull'
  8 +import { Breadcrumb } from '@/layout/components/Breadcrumb'
9 9 import { useAppStore } from '@/store/modules/app'
10 10 import { useDesign } from '@/hooks/web/useDesign'
11 11  
... ...
yudao-ui-admin-vue3/src/components/UserInfo/index.ts renamed to yudao-ui-admin-vue3/src/layout/components/UserInfo/index.ts
yudao-ui-admin-vue3/src/components/UserInfo/src/UserInfo.vue renamed to yudao-ui-admin-vue3/src/layout/components/UserInfo/src/UserInfo.vue
1 1 <script setup lang="ts">
2 2 import { ElDropdown, ElDropdownMenu, ElDropdownItem, ElMessageBox } from 'element-plus'
3 3 import { useI18n } from '@/hooks/web/useI18n'
4   -import { useCache } from '@/hooks/web/useCache'
  4 +import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
5 5 import { useRouter } from 'vue-router'
6 6 import { useDesign } from '@/hooks/web/useDesign'
7 7 import avatarImg from '@/assets/imgs/avatar.gif'
... ... @@ -22,7 +22,7 @@ const { getPrefixCls } = useDesign()
22 22  
23 23 const prefixCls = getPrefixCls('user-info')
24 24  
25   -const user = wsCache.get('user')
  25 +const user = wsCache.get(CACHE_KEY.USER)
26 26  
27 27 const avatar = user.user.avatar ? user.user.avatar : avatarImg
28 28  
... ...
yudao-ui-admin-vue3/src/layout/components/useRenderLayout.tsx
1 1 import { computed } from 'vue'
2 2 import { useAppStore } from '@/store/modules/app'
3   -import { Menu } from '@/components/Menu'
4   -import { TabMenu } from '@/components/TabMenu'
5   -import { TagsView } from '@/components/TagsView'
6   -import { Logo } from '@/components/Logo'
  3 +import { Menu } from '@/layout/components/Menu'
  4 +import { TabMenu } from '@/layout/components/TabMenu'
  5 +import { TagsView } from '@/layout/components/TagsView'
  6 +import { Logo } from '@/layout/components/Logo'
7 7 import AppView from './AppView.vue'
8 8 import ToolHeader from './ToolHeader.vue'
9 9 import { ElScrollbar } from 'element-plus'
... ...
yudao-ui-admin-vue3/src/router/index.ts
1 1 import type { App } from 'vue'
2   -import { getAccessToken } from '@/utils/auth'
3 2 import type { RouteRecordRaw } from 'vue-router'
  3 +import { createRouter, createWebHashHistory } from 'vue-router'
4 4 import remainingRouter from './modules/remaining'
  5 +import { isRelogin } from '@/config/axios/service'
  6 +import { getAccessToken } from '@/utils/auth'
5 7 import { useTitle } from '@/hooks/web/useTitle'
6 8 import { useNProgress } from '@/hooks/web/useNProgress'
  9 +import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
7 10 import { usePageLoading } from '@/hooks/web/usePageLoading'
8   -import { createRouter, createWebHashHistory } from 'vue-router'
9   -import { usePermissionStoreWithOut } from '@/store/modules/permission'
10 11 import { useDictStoreWithOut } from '@/store/modules/dict'
11 12 import { useUserStoreWithOut } from '@/store/modules/user'
12   -import { listSimpleDictDataApi } from '@/api/system/dict/dict.data'
13   -import { isRelogin } from '@/config/axios/service'
  13 +import { usePermissionStoreWithOut } from '@/store/modules/permission'
14 14 import { getInfoApi } from '@/api/login'
15   -import { useCache } from '@/hooks/web/useCache'
  15 +import { listSimpleDictDataApi } from '@/api/system/dict/dict.data'
16 16  
17 17 const { wsCache } = useCache('sessionStorage')
18 18  
... ... @@ -50,12 +50,12 @@ router.beforeEach(async (to, from, next) =&gt; {
50 50 const dictStore = useDictStoreWithOut()
51 51 const userStore = useUserStoreWithOut()
52 52 const permissionStore = usePermissionStoreWithOut()
53   - const dictMap = wsCache.get('dictCache')
  53 + const dictMap = wsCache.get(CACHE_KEY.DICT_CACHE)
54 54 if (!dictMap) {
55 55 const res = await listSimpleDictDataApi()
56 56 dictStore.setDictMap(res)
57 57 }
58   - if (userStore.getRoles.length === 0) {
  58 + if (!userStore.getIsSetUser) {
59 59 isRelogin.show = true
60 60 const res = await getInfoApi()
61 61 await userStore.setUserInfoAction(res)
... ...
yudao-ui-admin-vue3/src/store/modules/app.ts
... ... @@ -2,7 +2,7 @@ import { defineStore } from &#39;pinia&#39;
2 2 import { store } from '../index'
3 3 import { setCssVar, humpToUnderline } from '@/utils'
4 4 import { ElMessage } from 'element-plus'
5   -import { useCache } from '@/hooks/web/useCache'
  5 +import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
6 6 import { ElementPlusSize } from '@/types/elementPlus'
7 7 import { LayoutType } from '@/types/layout'
8 8 import { ThemeTypes } from '@/types/theme'
... ... @@ -61,10 +61,10 @@ export const useAppStore = defineStore(&#39;app&#39;, {
61 61 greyMode: false, // 是否开始灰色模式,用于特殊悼念日
62 62 fixedMenu: wsCache.get('fixedMenu') || false, // 是否固定菜单
63 63  
64   - layout: wsCache.get('layout') || 'classic', // layout布局
65   - isDark: wsCache.get('isDark') || false, // 是否是暗黑模式
  64 + layout: wsCache.get(CACHE_KEY.LAYOUT) || 'classic', // layout布局
  65 + isDark: wsCache.get(CACHE_KEY.IS_DARK) || false, // 是否是暗黑模式
66 66 currentSize: wsCache.get('default') || 'default', // 组件尺寸
67   - theme: wsCache.get('theme') || {
  67 + theme: wsCache.get(CACHE_KEY.THEME) || {
68 68 // 主题色
69 69 elColorPrimary: '#409eff',
70 70 // 左侧菜单边框颜色
... ... @@ -223,7 +223,7 @@ export const useAppStore = defineStore(&#39;app&#39;, {
223 223 return
224 224 }
225 225 this.layout = layout
226   - wsCache.set('layout', this.layout)
  226 + wsCache.set(CACHE_KEY.LAYOUT, this.layout)
227 227 },
228 228 setTitle(title: string) {
229 229 this.title = title
... ... @@ -237,7 +237,7 @@ export const useAppStore = defineStore(&#39;app&#39;, {
237 237 document.documentElement.classList.add('light')
238 238 document.documentElement.classList.remove('dark')
239 239 }
240   - wsCache.set('isDark', this.isDark)
  240 + wsCache.set(CACHE_KEY.IS_DARK, this.isDark)
241 241 },
242 242 setCurrentSize(currentSize: ElementPlusSize) {
243 243 this.currentSize = currentSize
... ... @@ -248,7 +248,7 @@ export const useAppStore = defineStore(&#39;app&#39;, {
248 248 },
249 249 setTheme(theme: ThemeTypes) {
250 250 this.theme = Object.assign(this.theme, theme)
251   - wsCache.set('theme', this.theme)
  251 + wsCache.set(CACHE_KEY.THEME, this.theme)
252 252 },
253 253 setCssVarTheme() {
254 254 for (const key in this.theme) {
... ...
yudao-ui-admin-vue3/src/store/modules/dict.ts
1 1 import { defineStore } from 'pinia'
2 2 import { store } from '../index'
3 3 import { DictDataVO } from '@/api/system/dict/types'
4   -import { useCache } from '@/hooks/web/useCache'
  4 +import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
5 5 const { wsCache } = useCache('sessionStorage')
6 6  
7 7 export interface DictValueType {
... ... @@ -24,7 +24,7 @@ export const useDictStore = defineStore(&#39;dict&#39;, {
24 24 }),
25 25 getters: {
26 26 getDictMap(): Recordable {
27   - const dictMap = wsCache.get('dictCache')
  27 + const dictMap = wsCache.get(CACHE_KEY.DICT_CACHE)
28 28 return dictMap ? dictMap : this.dictMap
29 29 },
30 30 getHasDictData(): boolean {
... ... @@ -54,7 +54,7 @@ export const useDictStore = defineStore(&#39;dict&#39;, {
54 54 })
55 55 })
56 56 this.dictMap = dictDataMap
57   - wsCache.set('dictCache', dictDataMap, { exp: 60 }) // 60 秒 过期
  57 + wsCache.set(CACHE_KEY.DICT_CACHE, dictDataMap, { exp: 60 }) // 60 秒 过期
58 58 }
59 59 }
60 60 })
... ...
yudao-ui-admin-vue3/src/store/modules/locale.ts
... ... @@ -2,7 +2,7 @@ import { defineStore } from &#39;pinia&#39;
2 2 import { store } from '../index'
3 3 import zhCn from 'element-plus/es/locale/lang/zh-cn'
4 4 import en from 'element-plus/es/locale/lang/en'
5   -import { useCache } from '@/hooks/web/useCache'
  5 +import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
6 6 import { LocaleDropdownType } from '@/types/localeDropdown'
7 7  
8 8 const { wsCache } = useCache()
... ... @@ -20,8 +20,8 @@ export const useLocaleStore = defineStore(&#39;locales&#39;, {
20 20 state: (): LocaleState => {
21 21 return {
22 22 currentLocale: {
23   - lang: wsCache.get('lang') || 'zh-CN',
24   - elLocale: elLocaleMap[wsCache.get('lang') || 'zh-CN']
  23 + lang: wsCache.get(CACHE_KEY.LANG) || 'zh-CN',
  24 + elLocale: elLocaleMap[wsCache.get(CACHE_KEY.LANG) || 'zh-CN']
25 25 },
26 26 // 多语言
27 27 localeMap: [
... ... @@ -49,7 +49,7 @@ export const useLocaleStore = defineStore(&#39;locales&#39;, {
49 49 // this.locale = Object.assign(this.locale, localeMap)
50 50 this.currentLocale.lang = localeMap?.lang
51 51 this.currentLocale.elLocale = elLocaleMap[localeMap?.lang]
52   - wsCache.set('lang', localeMap?.lang)
  52 + wsCache.set(CACHE_KEY.LANG, localeMap?.lang)
53 53 }
54 54 }
55 55 })
... ...
yudao-ui-admin-vue3/src/store/modules/permission.ts
... ... @@ -4,7 +4,7 @@ import { cloneDeep } from &#39;lodash-es&#39;
4 4 import remainingRouter from '@/router/modules/remaining'
5 5 import { generateRoute, flatMultiLevelRoutes } from '@/utils/routerHelper'
6 6 import { getAsyncRoutesApi } from '@/api/login'
7   -import { useCache } from '@/hooks/web/useCache'
  7 +import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
8 8  
9 9 const { wsCache } = useCache()
10 10  
... ... @@ -35,11 +35,11 @@ export const usePermissionStore = defineStore(&#39;permission&#39;, {
35 35 async generateRoutes(): Promise<unknown> {
36 36 return new Promise<void>(async (resolve) => {
37 37 let res: AppCustomRouteRecordRaw[]
38   - if (wsCache.get('roleRouters')) {
39   - res = wsCache.get('roleRouters') as AppCustomRouteRecordRaw[]
  38 + if (wsCache.get(CACHE_KEY.ROLE_ROUTERS)) {
  39 + res = wsCache.get(CACHE_KEY.ROLE_ROUTERS) as AppCustomRouteRecordRaw[]
40 40 } else {
41 41 res = await getAsyncRoutesApi()
42   - wsCache.set('roleRouters', res)
  42 + wsCache.set(CACHE_KEY.ROLE_ROUTERS, res)
43 43 }
44 44 const routerMap: AppRouteRecordRaw[] = generateRoute(res as AppCustomRouteRecordRaw[])
45 45 // 动态路由,404一定要放到最后面
... ...
yudao-ui-admin-vue3/src/store/modules/user.ts
1 1 import { store } from '../index'
2 2 import { defineStore } from 'pinia'
3 3 import { getAccessToken, removeToken } from '@/utils/auth'
4   -import { useCache } from '@/hooks/web/useCache'
  4 +import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
5 5  
6 6 const { wsCache } = useCache()
7 7  
... ... @@ -13,6 +13,7 @@ interface UserVO {
13 13 interface UserInfoVO {
14 14 permissions: string[]
15 15 roles: string[]
  16 + isSetUser: boolean
16 17 user: UserVO
17 18 }
18 19  
... ... @@ -20,6 +21,7 @@ export const useUserStore = defineStore(&#39;admin-user&#39;, {
20 21 state: (): UserInfoVO => ({
21 22 permissions: [],
22 23 roles: [],
  24 + isSetUser: false,
23 25 user: {
24 26 id: 0,
25 27 avatar: '',
... ... @@ -33,6 +35,9 @@ export const useUserStore = defineStore(&#39;admin-user&#39;, {
33 35 getRoles(): string[] {
34 36 return this.roles
35 37 },
  38 + getIsSetUser(): boolean {
  39 + return this.isSetUser
  40 + },
36 41 getUser(): UserVO {
37 42 return this.user
38 43 }
... ... @@ -46,7 +51,8 @@ export const useUserStore = defineStore(&#39;admin-user&#39;, {
46 51 this.permissions = userInfo.permissions
47 52 this.roles = userInfo.roles
48 53 this.user = userInfo.user
49   - wsCache.set('user', userInfo)
  54 + this.isSetUser = true
  55 + wsCache.set(CACHE_KEY.USER, userInfo)
50 56 },
51 57 loginOut() {
52 58 removeToken()
... ... @@ -56,6 +62,7 @@ export const useUserStore = defineStore(&#39;admin-user&#39;, {
56 62 resetState() {
57 63 this.permissions = []
58 64 this.roles = []
  65 + this.isSetUser = false
59 66 this.user = {
60 67 id: 0,
61 68 avatar: '',
... ...
yudao-ui-admin-vue3/src/types/components.d.ts
... ... @@ -21,6 +21,8 @@ export type ComponentName =
21 21 | 'TreeSelect'
22 22 | 'InputPassword'
23 23 | 'Editor'
  24 + | 'UploadImg'
  25 + | 'UploadFile'
24 26  
25 27 export type ColProps = {
26 28 span?: number
... ...
yudao-ui-admin-vue3/src/utils/auth.ts
1   -import Cookies from 'js-cookie'
  1 +import { useCache } from '@/hooks/web/useCache'
2 2 import { TokenType } from '@/api/login/types'
3 3 import { decrypt, encrypt } from '@/utils/jsencrypt'
4 4  
  5 +const { wsCache } = useCache()
  6 +
5 7 const AccessTokenKey = 'ACCESS_TOKEN'
6 8 const RefreshTokenKey = 'REFRESH_TOKEN'
7 9  
8 10 // 获取token
9 11 export const getAccessToken = () => {
10 12 // 此处与TokenKey相同,此写法解决初始化时Cookies中不存在TokenKey报错
11   - return Cookies.get(AccessTokenKey) ? Cookies.get(AccessTokenKey) : Cookies.get('ACCESS_TOKEN')
  13 + return wsCache.get(AccessTokenKey) ? wsCache.get(AccessTokenKey) : wsCache.get('ACCESS_TOKEN')
12 14 }
13 15  
14 16 // 刷新token
15 17 export const getRefreshToken = () => {
16   - return Cookies.get(RefreshTokenKey)
  18 + return wsCache.get(RefreshTokenKey)
17 19 }
18 20  
19 21 // 设置token
20 22 export const setToken = (token: TokenType) => {
21   - Cookies.set(RefreshTokenKey, token.refreshToken, token.expiresTime)
22   - Cookies.set(AccessTokenKey, token.accessToken)
  23 + wsCache.set(RefreshTokenKey, token.refreshToken, { exp: token.expiresTime })
  24 + wsCache.set(AccessTokenKey, token.accessToken)
23 25 }
24 26  
25 27 // 删除token
26 28 export const removeToken = () => {
27   - Cookies.remove(AccessTokenKey)
28   - Cookies.remove(RefreshTokenKey)
  29 + wsCache.delete(AccessTokenKey)
  30 + wsCache.delete(RefreshTokenKey)
29 31 }
30 32  
31 33 /** 格式化token(jwt格式) */
... ... @@ -39,40 +41,40 @@ const PasswordKey = &#39;PASSWORD&#39;
39 41 const RememberMeKey = 'REMEMBER_ME'
40 42  
41 43 export const getUsername = () => {
42   - return Cookies.get(UsernameKey)
  44 + return wsCache.get(UsernameKey)
43 45 }
44 46  
45 47 export const setUsername = (username: string) => {
46   - Cookies.set(UsernameKey, username)
  48 + wsCache.set(UsernameKey, username, { exp: 30 * 24 * 60 * 60 })
47 49 }
48 50  
49 51 export const removeUsername = () => {
50   - Cookies.remove(UsernameKey)
  52 + wsCache.delete(UsernameKey)
51 53 }
52 54  
53 55 export const getPassword = () => {
54   - const password = Cookies.get(PasswordKey)
  56 + const password = wsCache.get(PasswordKey)
55 57 return password ? decrypt(password) : undefined
56 58 }
57 59  
58 60 export const setPassword = (password: string) => {
59   - Cookies.set(PasswordKey, encrypt(password))
  61 + wsCache.set(PasswordKey, encrypt(password), { exp: 30 * 24 * 60 * 60 })
60 62 }
61 63  
62 64 export const removePassword = () => {
63   - Cookies.remove(PasswordKey)
  65 + wsCache.delete(PasswordKey)
64 66 }
65 67  
66 68 export const getRememberMe = () => {
67   - return Cookies.get(RememberMeKey) === 'true'
  69 + return wsCache.get(RememberMeKey) === true
68 70 }
69 71  
70   -export const setRememberMe = (rememberMe: string) => {
71   - Cookies.set(RememberMeKey, rememberMe)
  72 +export const setRememberMe = (rememberMe: boolean) => {
  73 + wsCache.set(RememberMeKey, rememberMe, { exp: 30 * 24 * 60 * 60 })
72 74 }
73 75  
74 76 export const removeRememberMe = () => {
75   - Cookies.remove(RememberMeKey)
  77 + wsCache.delete(RememberMeKey)
76 78 }
77 79  
78 80 // ========== 租户相关 ==========
... ... @@ -81,25 +83,25 @@ const TenantIdKey = &#39;TENANT_ID&#39;
81 83 const TenantNameKey = 'TENANT_NAME'
82 84  
83 85 export const getTenantName = () => {
84   - return Cookies.get(TenantNameKey)
  86 + return wsCache.get(TenantNameKey)
85 87 }
86 88  
87 89 export const setTenantName = (username: string) => {
88   - Cookies.set(TenantNameKey, username)
  90 + wsCache.set(TenantNameKey, username, { exp: 30 * 24 * 60 * 60 })
89 91 }
90 92  
91 93 export const removeTenantName = () => {
92   - Cookies.remove(TenantNameKey)
  94 + wsCache.delete(TenantNameKey)
93 95 }
94 96  
95 97 export const getTenantId = () => {
96   - return Cookies.get(TenantIdKey)
  98 + return wsCache.get(TenantIdKey)
97 99 }
98 100  
99 101 export const setTenantId = (username: string) => {
100   - Cookies.set(TenantIdKey, username)
  102 + wsCache.set(TenantIdKey, username)
101 103 }
102 104  
103 105 export const removeTenantId = () => {
104   - Cookies.remove(TenantIdKey)
  106 + wsCache.delete(TenantIdKey)
105 107 }
... ...
yudao-ui-admin-vue3/src/utils/routerHelper.ts
... ... @@ -18,7 +18,7 @@ export const getParentLayout = () =&gt; {
18 18 }
19 19  
20 20 // 按照路由中meta下的rank等级升序来排序路由
21   -export function ascending(arr: any[]) {
  21 +export const ascending = (arr: any[]) => {
22 22 arr.forEach((v) => {
23 23 if (v?.meta?.rank === null) v.meta.rank = undefined
24 24 if (v?.meta?.rank === 0) {
... ... @@ -109,7 +109,7 @@ export const generateRoute = (routes: AppCustomRouteRecordRaw[]): AppRouteRecord
109 109 data.children = generateRoute(route.children)
110 110 }
111 111 }
112   - res.push(data)
  112 + res.push(data as AppRouteRecordRaw)
113 113 }
114 114 return res
115 115 }
... ... @@ -203,7 +203,7 @@ const addToChildren = (
203 203 }
204 204 }
205 205 }
206   -function toCamelCase(str: string, upperCaseFirst: boolean) {
  206 +const toCamelCase = (str: string, upperCaseFirst: boolean) => {
207 207 str = (str || '').toLowerCase().replace(/-(.)/g, function (group1: string) {
208 208 return group1.toUpperCase()
209 209 })
... ...
yudao-ui-admin-vue3/src/utils/tree.ts
... ... @@ -8,6 +8,11 @@ const DEFAULT_CONFIG: TreeHelperConfig = {
8 8 children: 'children',
9 9 pid: 'pid'
10 10 }
  11 +export const defaultProps = {
  12 + children: 'children',
  13 + label: 'name',
  14 + value: 'id'
  15 +}
11 16  
12 17 const getConfig = (config: Partial<TreeHelperConfig>) => Object.assign({}, DEFAULT_CONFIG, config)
13 18  
... ... @@ -214,6 +219,10 @@ export const eachTree = (treeDatas: any[], callBack: Fn, parentNode = {}) =&gt; {
214 219 * @param {*} children 孩子节点字段 默认 'children'
215 220 */
216 221 export const handleTree = (data: any[], id?: string, parentId?: string, children?: string) => {
  222 + if (!Array.isArray(data)) {
  223 + console.warn('data must be an array')
  224 + return []
  225 + }
217 226 const config = {
218 227 id: id || 'id',
219 228 parentId: parentId || 'parentId',
... ...
yudao-ui-admin-vue3/src/views/Error/403.vue
1 1 <template>
2   - <Error type="403" @error-click="errorClick" />
  2 + <Error type="403" @error-click="errorClick()" />
3 3 </template>
4 4 <script setup lang="ts">
5 5 import { Error } from '@/components/Error'
... ...
yudao-ui-admin-vue3/src/views/Error/404.vue
1 1 <template>
2   - <Error @error-click="errorClick" />
  2 + <Error @error-click="errorClick()" />
3 3 </template>
4 4 <script setup lang="ts">
5 5 import { Error } from '@/components/Error'
... ...
yudao-ui-admin-vue3/src/views/Error/500.vue
1 1 <template>
2   - <Error type="500" @error-click="errorClick" />
  2 + <Error type="500" @error-click="errorClick()" />
3 3 </template>
4 4 <script setup lang="ts">
5 5 import { Error } from '@/components/Error'
... ...
yudao-ui-admin-vue3/src/views/Home/Index.vue
... ... @@ -167,20 +167,21 @@ import { EChartsOption } from &#39;echarts&#39;
167 167 import { ElRow, ElCol, ElSkeleton, ElCard, ElDivider, ElLink } from 'element-plus'
168 168 import { formatTime } from '@/utils'
169 169 import { useI18n } from '@/hooks/web/useI18n'
170   -import { useCache } from '@/hooks/web/useCache'
  170 +import { useUserStore } from '@/store/modules/user'
171 171 import { useWatermark } from '@/hooks/web/useWatermark'
172 172 import { Echart } from '@/components/Echart'
173 173 import { CountTo } from '@/components/CountTo'
174 174 import { Highlight } from '@/components/Highlight'
  175 +import avatarImg from '@/assets/imgs/avatar.gif'
175 176 import type { WorkplaceTotal, Project, Notice, Shortcut } from './types'
176 177 import { pieOptions, barOptions } from './echarts-data'
177 178  
178 179 const { t } = useI18n()
179   -const { wsCache } = useCache()
  180 +const userStore = useUserStore()
180 181 const { setWatermark } = useWatermark()
181 182 const loading = ref(true)
182   -const avatar = wsCache.get('user').user.avatar
183   -const username = wsCache.get('user').user.nickname
  183 +const avatar = userStore.getUser.avatar ? userStore.getUser.avatar : avatarImg
  184 +const username = userStore.getUser.nickname
184 185 const pieOptionsData = reactive<EChartsOption>(pieOptions) as EChartsOption
185 186 // 获取统计数
186 187 let totalSate = reactive<WorkplaceTotal>({
... ...
yudao-ui-admin-vue3/src/views/Login/Login.vue
... ... @@ -63,8 +63,8 @@ import { underlineToHump } from &#39;@/utils&#39;
63 63 import { useI18n } from '@/hooks/web/useI18n'
64 64 import { useDesign } from '@/hooks/web/useDesign'
65 65 import { useAppStore } from '@/store/modules/app'
66   -import { ThemeSwitch } from '@/components/ThemeSwitch'
67   -import { LocaleDropdown } from '@/components/LocaleDropdown'
  66 +import { ThemeSwitch } from '@/layout/components/ThemeSwitch'
  67 +import { LocaleDropdown } from '@/layout/components/LocaleDropdown'
68 68 import { LoginForm, MobileForm, RegisterForm, QrCodeForm } from './components'
69 69  
70 70 const { t } = useI18n()
... ...
yudao-ui-admin-vue3/src/views/Login/components/LoginForm.vue
... ... @@ -16,7 +16,7 @@
16 16 </el-form-item>
17 17 </el-col>
18 18 <el-col :span="24" style="padding-left: 10px; padding-right: 10px">
19   - <el-form-item prop="tenantName">
  19 + <el-form-item prop="tenantName" v-if="loginData.tenantEnable === 'true'">
20 20 <el-input
21 21 type="text"
22 22 v-model="loginData.loginForm.tenantName"
... ... @@ -65,9 +65,13 @@
65 65 </el-col>
66 66 <el-col :span="24" style="padding-left: 10px; padding-right: 10px">
67 67 <el-form-item>
68   - <el-button :loading="loginLoading" type="primary" class="w-[100%]" @click="getCode()">
69   - {{ t('login.login') }}
70   - </el-button>
  68 + <XButton
  69 + :loading="loginLoading"
  70 + type="primary"
  71 + class="w-[100%]"
  72 + :title="t('login.login')"
  73 + @click="getCode()"
  74 + />
71 75 </el-form-item>
72 76 </el-col>
73 77 <Verify
... ... @@ -81,19 +85,25 @@
81 85 <el-form-item>
82 86 <el-row justify="space-between" style="width: 100%" :gutter="5">
83 87 <el-col :span="8">
84   - <el-button class="w-[100%]" @click="setLoginState(LoginStateEnum.MOBILE)">
85   - {{ t('login.btnMobile') }}
86   - </el-button>
  88 + <XButton
  89 + class="w-[100%]"
  90 + :title="t('login.btnMobile')"
  91 + @click="setLoginState(LoginStateEnum.MOBILE)"
  92 + />
87 93 </el-col>
88 94 <el-col :span="8">
89   - <el-button class="w-[100%]" @click="setLoginState(LoginStateEnum.QR_CODE)">
90   - {{ t('login.btnQRCode') }}
91   - </el-button>
  95 + <XButton
  96 + class="w-[100%]"
  97 + :title="t('login.btnQRCode')"
  98 + @click="setLoginState(LoginStateEnum.QR_CODE)"
  99 + />
92 100 </el-col>
93 101 <el-col :span="8">
94   - <el-button class="w-[100%]" @click="setLoginState(LoginStateEnum.REGISTER)">
95   - {{ t('login.btnRegister') }}
96   - </el-button>
  102 + <XButton
  103 + class="w-[100%]"
  104 + :title="t('login.btnRegister')"
  105 + @click="setLoginState(LoginStateEnum.REGISTER)"
  106 + />
97 107 </el-col>
98 108 </el-row>
99 109 </el-form-item>
... ... @@ -103,32 +113,13 @@
103 113 <el-form-item>
104 114 <div class="flex justify-between w-[100%]">
105 115 <Icon
106   - icon="ant-design:github-filled"
107   - :size="30"
108   - class="cursor-pointer anticon"
109   - color="#999"
110   - @click="doSocialLogin('github')"
111   - />
112   - <Icon
113   - icon="ant-design:wechat-filled"
  116 + v-for="(item, key) in socialList"
  117 + :key="key"
  118 + :icon="item.icon"
114 119 :size="30"
115 120 class="cursor-pointer anticon"
116 121 color="#999"
117   - @click="doSocialLogin('wechat')"
118   - />
119   - <Icon
120   - icon="ant-design:alipay-circle-filled"
121   - :size="30"
122   - color="#999"
123   - class="cursor-pointer anticon"
124   - @click="doSocialLogin('alipay')"
125   - />
126   - <Icon
127   - icon="ant-design:dingtalk-circle-filled"
128   - :size="30"
129   - color="#999"
130   - class="cursor-pointer anticon"
131   - @click="doSocialLogin('dingtalk')"
  122 + @click="doSocialLogin(item.type)"
132 123 />
133 124 </div>
134 125 </el-form-item>
... ... @@ -150,21 +141,24 @@ import {
150 141 ElDivider,
151 142 ElLoading
152 143 } from 'element-plus'
153   -import Cookies from 'js-cookie'
154 144 import { useRouter } from 'vue-router'
155 145 import type { RouteLocationNormalizedLoaded } from 'vue-router'
156 146 import { useI18n } from '@/hooks/web/useI18n'
157 147 import { useIcon } from '@/hooks/web/useIcon'
  148 +import { useMessage } from '@/hooks/web/useMessage'
158 149 import { required } from '@/utils/formRules'
159   -import { setToken, setTenantId } from '@/utils/auth'
160   -import { decrypt, encrypt } from '@/utils/jsencrypt'
161   -import { Icon } from '@/components/Icon'
  150 +import * as authUtil from '@/utils/auth'
  151 +import { decrypt } from '@/utils/jsencrypt'
162 152 import { Verify } from '@/components/Verifition'
163 153 import { usePermissionStore } from '@/store/modules/permission'
164 154 import * as LoginApi from '@/api/login'
165 155 import { LoginStateEnum, useLoginState, useFormValid } from './useLogin'
166 156  
167 157 const { t } = useI18n()
  158 +const message = useMessage()
  159 +const iconHouse = useIcon({ icon: 'ep:house' })
  160 +const iconAvatar = useIcon({ icon: 'ep:avatar' })
  161 +const iconLock = useIcon({ icon: 'ep:lock' })
168 162 const formLogin = ref()
169 163 const { validForm } = useFormValid(formLogin)
170 164 const { setLoginState, getLoginState } = useLoginState()
... ... @@ -172,9 +166,6 @@ const { currentRoute, push } = useRouter()
172 166 const permissionStore = usePermissionStore()
173 167 const redirect = ref<string>('')
174 168 const loginLoading = ref(false)
175   -const iconHouse = useIcon({ icon: 'ep:house' })
176   -const iconAvatar = useIcon({ icon: 'ep:avatar' })
177   -const iconLock = useIcon({ icon: 'ep:lock' })
178 169 const verify = ref()
179 170 const captchaType = ref('blockPuzzle') // blockPuzzle 滑块 clickWord 点击文字
180 171  
... ... @@ -194,16 +185,33 @@ const loginData = reactive({
194 185 signIn: false
195 186 },
196 187 loginForm: {
197   - tenantName: Cookies.get('tenantName') ? Cookies.get('tenantName') : '芋道源码',
198   - username: Cookies.get('username') ? Cookies.get('username') : 'admin',
199   - password: Cookies.get('password')
200   - ? (decrypt(Cookies.get('password')) as unknown as string)
201   - : 'admin123',
  188 + tenantName: '芋道源码',
  189 + username: 'admin',
  190 + password: 'admin123',
202 191 captchaVerification: '',
203 192 rememberMe: false
204 193 }
205 194 })
206 195  
  196 +const socialList = [
  197 + {
  198 + icon: 'ant-design:github-filled',
  199 + type: 0
  200 + },
  201 + {
  202 + icon: 'ant-design:wechat-filled',
  203 + type: 30
  204 + },
  205 + {
  206 + icon: 'ant-design:alipay-circle-filled',
  207 + type: 0
  208 + },
  209 + {
  210 + icon: 'ant-design:dingtalk-circle-filled',
  211 + type: 20
  212 + }
  213 +]
  214 +
207 215 // 获取验证码
208 216 const getCode = async () => {
209 217 // 情况一,未开启:则直接登录
... ... @@ -217,17 +225,19 @@ const getCode = async () =&gt; {
217 225 }
218 226 //获取租户ID
219 227 const getTenantId = async () => {
220   - const res = await LoginApi.getTenantIdByNameApi(loginData.loginForm.tenantName)
221   - setTenantId(res)
  228 + if (loginData.tenantEnable === 'true') {
  229 + const res = await LoginApi.getTenantIdByNameApi(loginData.loginForm.tenantName)
  230 + authUtil.setTenantId(res)
  231 + }
222 232 }
223 233 // 记住我
224 234 const getCookie = () => {
225   - const username = Cookies.get('username')
226   - const password = Cookies.get('password')
227   - ? (decrypt(Cookies.get('password')) as unknown as string)
  235 + const username = authUtil.getUsername()
  236 + const password = authUtil.getPassword()
  237 + ? decrypt(authUtil.getPassword() as unknown as string)
228 238 : undefined
229   - const rememberMe = Cookies.get('rememberMe')
230   - const tenantName = Cookies.get('tenantName')
  239 + const rememberMe = authUtil.getRememberMe()
  240 + const tenantName = authUtil.getTenantName()
231 241 loginData.loginForm = {
232 242 ...loginData.loginForm,
233 243 username: username ? username : loginData.loginForm.username,
... ... @@ -256,19 +266,17 @@ const handleLogin = async (params) =&gt; {
256 266 background: 'rgba(0, 0, 0, 0.7)'
257 267 })
258 268 if (loginData.loginForm.rememberMe) {
259   - Cookies.set('username', loginData.loginForm.username, { expires: 30 })
260   - Cookies.set('password', encrypt(loginData.loginForm.password as unknown as string), {
261   - expires: 30
262   - })
263   - Cookies.set('rememberMe', loginData.loginForm.rememberMe, { expires: 30 })
264   - Cookies.set('tenantName', loginData.loginForm.tenantName, { expires: 30 })
  269 + authUtil.setUsername(loginData.loginForm.username)
  270 + authUtil.setPassword(loginData.loginForm.password)
  271 + authUtil.setRememberMe(loginData.loginForm.rememberMe)
  272 + authUtil.setTenantName(loginData.loginForm.tenantName)
265 273 } else {
266   - Cookies.remove('username')
267   - Cookies.remove('password')
268   - Cookies.remove('rememberMe')
269   - Cookies.remove('tenantName')
  274 + authUtil.removeUsername()
  275 + authUtil.removePassword()
  276 + authUtil.removeRememberMe()
  277 + authUtil.removeTenantName()
270 278 }
271   - setToken(res)
  279 + authUtil.setToken(res)
272 280 if (!redirect.value) {
273 281 redirect.value = '/'
274 282 }
... ... @@ -284,14 +292,24 @@ const handleLogin = async (params) =&gt; {
284 292 }
285 293  
286 294 // 社交登录
287   -const doSocialLogin = async (type: string) => {
288   - loginLoading.value = true
289   - // 计算 redirectUri
290   - const redirectUri =
291   - location.origin + '/social-login?type=' + type + '&redirect=' + (redirect.value || '/')
292   - // 进行跳转
293   - const res = await LoginApi.socialAuthRedirectApi(type, encodeURIComponent(redirectUri))
294   - window.location.href = res
  295 +const doSocialLogin = async (type: number) => {
  296 + if (type === 0) {
  297 + message.error('此方式未配置')
  298 + } else {
  299 + loginLoading.value = true
  300 + if (loginData.tenantEnable === 'true') {
  301 + await message.prompt('请输入租户名称', t('common.reminder')).then(async ({ value }) => {
  302 + const res = await LoginApi.getTenantIdByNameApi(value)
  303 + authUtil.setTenantId(res)
  304 + })
  305 + }
  306 + // 计算 redirectUri
  307 + const redirectUri =
  308 + location.origin + '/social-login?type=' + type + '&redirect=' + (redirect.value || '/')
  309 + // 进行跳转
  310 + const res = await LoginApi.socialAuthRedirectApi(type, encodeURIComponent(redirectUri))
  311 + window.location.href = res
  312 + }
295 313 }
296 314 watch(
297 315 () => currentRoute.value,
... ...
yudao-ui-admin-vue3/src/views/Login/components/MobileForm.vue
... ... @@ -17,7 +17,7 @@
17 17 </el-form-item>
18 18 </el-col>
19 19 <el-col :span="24" style="padding-left: 10px; padding-right: 10px">
20   - <el-form-item prop="tenantName">
  20 + <el-form-item prop="tenantName" v-if="loginData.tenantEnable === 'true'">
21 21 <el-input
22 22 type="text"
23 23 v-model="loginData.loginForm.tenantName"
... ... @@ -69,16 +69,23 @@
69 69 <!-- 登录按钮 / 返回按钮 -->
70 70 <el-col :span="24" style="padding-left: 10px; padding-right: 10px">
71 71 <el-form-item>
72   - <el-button :loading="loginLoading" type="primary" class="w-[100%]" @click="signIn">
73   - {{ t('login.login') }}
74   - </el-button>
  72 + <XButton
  73 + :loading="loginLoading"
  74 + type="primary"
  75 + class="w-[100%]"
  76 + :title="t('login.login')"
  77 + @click="signIn()"
  78 + />
75 79 </el-form-item>
76 80 </el-col>
77 81 <el-col :span="24" style="padding-left: 10px; padding-right: 10px">
78 82 <el-form-item>
79   - <el-button :loading="loginLoading" class="w-[100%]" @click="handleBackLogin">
80   - {{ t('login.backLogin') }}
81   - </el-button>
  83 + <XButton
  84 + :loading="loginLoading"
  85 + class="w-[100%]"
  86 + :title="t('login.backLogin')"
  87 + @click="handleBackLogin()"
  88 + />
82 89 </el-form-item>
83 90 </el-col>
84 91 </el-row>
... ... @@ -91,17 +98,15 @@ import { useRouter } from &#39;vue-router&#39;
91 98 import type { RouteLocationNormalizedLoaded } from 'vue-router'
92 99 import { useI18n } from '@/hooks/web/useI18n'
93 100 import { useIcon } from '@/hooks/web/useIcon'
94   -import { useCache } from '@/hooks/web/useCache'
95 101 import { useMessage } from '@/hooks/web/useMessage'
96   -import { setToken } from '@/utils/auth'
97 102 import { required } from '@/utils/formRules'
  103 +import { setTenantId, setToken } from '@/utils/auth'
98 104 import { usePermissionStore } from '@/store/modules/permission'
99 105 import { getTenantIdByNameApi, sendSmsCodeApi, smsLoginApi } from '@/api/login'
100 106 import LoginFormTitle from './LoginFormTitle.vue'
101 107 import { useLoginState, LoginStateEnum, useFormValid } from './useLogin'
102 108  
103 109 const { t } = useI18n()
104   -const { wsCache } = useCache()
105 110 const message = useMessage()
106 111 const permissionStore = usePermissionStore()
107 112 const { currentRoute, push } = useRouter()
... ... @@ -121,7 +126,7 @@ const rules = {
121 126 }
122 127 const loginData = reactive({
123 128 codeImg: '',
124   - tenantEnable: true,
  129 + tenantEnable: import.meta.env.VITE_APP_TENANT_ENABLE,
125 130 token: '',
126 131 loading: {
127 132 signIn: false
... ... @@ -171,8 +176,10 @@ watch(
171 176 )
172 177 // 获取租户 ID
173 178 const getTenantId = async () => {
174   - const res = await getTenantIdByNameApi(loginData.loginForm.tenantName)
175   - wsCache.set('tenantId', res)
  179 + if (loginData.tenantEnable === 'true') {
  180 + const res = await getTenantIdByNameApi(loginData.loginForm.tenantName)
  181 + setTenantId(res)
  182 + }
176 183 }
177 184 // 登录
178 185 const signIn = async () => {
... ...
yudao-ui-admin-vue3/src/views/Login/components/QrCodeForm.vue
... ... @@ -11,9 +11,7 @@
11 11 <el-divider class="enter-x">{{ t('login.qrcode') }}</el-divider>
12 12 <el-col :span="24" style="padding-left: 10px; padding-right: 10px">
13 13 <div class="w-[100%] mt-15px">
14   - <el-button class="w-[100%]" @click="handleBackLogin">
15   - {{ t('sys.login.backSignIn') }}
16   - </el-button>
  14 + <XButton class="w-[100%]" :title="t('login.backLogin')" @click="handleBackLogin()" />
17 15 </div>
18 16 </el-col>
19 17 </el-row>
... ... @@ -21,11 +19,11 @@
21 19 <script setup lang="ts">
22 20 import { computed, unref } from 'vue'
23 21 import { ElRow, ElCol, ElCard, ElDivider } from 'element-plus'
24   -import { useI18n } from '@/hooks/web/useI18n'
25   -import { useLoginState, LoginStateEnum } from './useLogin'
26   -import LoginFormTitle from './LoginFormTitle.vue'
27 22 import { Qrcode } from '@/components/Qrcode'
28 23 import logoImg from '@/assets/imgs/logo.png'
  24 +import { useI18n } from '@/hooks/web/useI18n'
  25 +import LoginFormTitle from './LoginFormTitle.vue'
  26 +import { useLoginState, LoginStateEnum } from './useLogin'
29 27  
30 28 const { t } = useI18n()
31 29 const { handleBackLogin, getLoginState } = useLoginState()
... ...
yudao-ui-admin-vue3/src/views/Login/components/RegisterForm.vue
... ... @@ -21,14 +21,16 @@
21 21  
22 22 <template #register>
23 23 <div class="w-[100%]">
24   - <el-button type="primary" class="w-[100%]" :loading="loading" @click="loginRegister">
25   - {{ t('login.register') }}
26   - </el-button>
  24 + <XButton
  25 + :loading="loading"
  26 + type="primary"
  27 + class="w-[100%]"
  28 + :title="t('login.register')"
  29 + @click="loginRegister()"
  30 + />
27 31 </div>
28 32 <div class="w-[100%] mt-15px">
29   - <el-button class="w-[100%]" @click="handleBackLogin">
30   - {{ t('login.hasUser') }}
31   - </el-button>
  33 + <XButton class="w-[100%]" :title="t('login.hasUser')" @click="handleBackLogin()" />
32 34 </div>
33 35 </template>
34 36 </Form>
... ... @@ -40,8 +42,8 @@ import { Form } from &#39;@/components/Form&#39;
40 42 import { useI18n } from '@/hooks/web/useI18n'
41 43 import { useForm } from '@/hooks/web/useForm'
42 44 import { useValidator } from '@/hooks/web/useValidator'
43   -import { useLoginState, LoginStateEnum } from './useLogin'
44 45 import LoginFormTitle from './LoginFormTitle.vue'
  46 +import { useLoginState, LoginStateEnum } from './useLogin'
45 47 import { FormSchema } from '@/types/form'
46 48  
47 49 const { t } = useI18n()
... ...
yudao-ui-admin-vue3/src/views/Profile/components/BasicInfo.vue
1 1 <template>
2 2 <Form ref="formRef" :rules="rules" :schema="schema" :labelWidth="80">
3   - <template #sex>
4   - <el-radio-group v-model="sexVlue">
  3 + <template #sex="form">
  4 + <el-radio-group v-model="form['sex']">
5 5 <el-radio :label="1">{{ t('profile.user.man') }}</el-radio>
6 6 <el-radio :label="2">{{ t('profile.user.woman') }}</el-radio>
7 7 </el-radio-group>
... ... @@ -67,7 +67,6 @@ const schema = reactive&lt;FormSchema[]&gt;([
67 67 value: 0
68 68 }
69 69 ])
70   -const sexVlue = ref<number>()
71 70 const formRef = ref<FormExpose>() // 表单 Ref
72 71 const submit = () => {
73 72 const elForm = unref(formRef)?.getElFormRef()
... ... @@ -75,7 +74,6 @@ const submit = () =&gt; {
75 74 elForm.validate(async (valid) => {
76 75 if (valid) {
77 76 const data = unref(formRef)?.formModel as UserProfileUpdateReqVO
78   - data.sex = sexVlue.value as unknown as number
79 77 await updateUserProfileApi(data)
80 78 ElMessage.success(t('common.updateSuccess'))
81 79 await init()
... ... @@ -84,7 +82,6 @@ const submit = () =&gt; {
84 82 }
85 83 const init = async () => {
86 84 const res = await getUserProfileApi()
87   - sexVlue.value = res.sex
88 85 unref(formRef)?.setValues(res)
89 86 }
90 87 onMounted(async () => {
... ...
yudao-ui-admin-vue3/src/views/bpm/form/index.vue
... ... @@ -73,12 +73,12 @@ const submitForm = async () =&gt; {
73 73 }
74 74  
75 75 // ========== 详情相关 ==========
76   -const detailRef = ref() // 详情 Ref
  76 +const detailData = ref() // 详情 Ref
77 77  
78 78 // 详情操作
79 79 const handleDetail = async (row: FormVO) => {
80 80 // 设置数据
81   - detailRef.value = row
  81 + detailData.value = row
82 82 setDialogTile('detail')
83 83 }
84 84  
... ... @@ -148,7 +148,7 @@ getList()
148 148 <Descriptions
149 149 v-if="actionType === 'detail'"
150 150 :schema="allSchemas.detailSchema"
151   - :data="detailRef"
  151 + :data="detailData"
152 152 />
153 153 <!-- 操作按钮 -->
154 154 <template #footer>
... ...
yudao-ui-admin-vue3/src/views/bpm/group/index.vue
... ... @@ -29,7 +29,6 @@ const dialogTitle = ref(&#39;edit&#39;) // 弹出层标题
29 29 const formRef = ref<FormExpose>() // 表单 Ref
30 30  
31 31 // ========== 用户选择 ==========
32   -const userIds = ref<number[]>([])
33 32 const userOptions = ref<UserVO[]>([])
34 33 const getUserOptions = async () => {
35 34 const res = await getListSimpleUsersApi()
... ... @@ -46,7 +45,6 @@ const setDialogTile = (type: string) =&gt; {
46 45 // 新增操作
47 46 const handleCreate = () => {
48 47 setDialogTile('create')
49   - userIds.value = []
50 48 }
51 49  
52 50 // 修改操作
... ... @@ -54,7 +52,6 @@ const handleUpdate = async (row: UserGroupVO) =&gt; {
54 52 setDialogTile('update')
55 53 // 设置数据
56 54 const res = await UserGroupApi.getUserGroupApi(row.id)
57   - userIds.value = res.memberUserIds
58 55 unref(formRef)?.setValues(res)
59 56 }
60 57  
... ... @@ -68,7 +65,6 @@ const submitForm = async () =&gt; {
68 65 // 提交请求
69 66 try {
70 67 const data = unref(formRef)?.formModel as UserGroupVO
71   - data.memberUserIds = userIds.value
72 68 if (actionType.value === 'create') {
73 69 await UserGroupApi.createUserGroupApi(data)
74 70 ElMessage.success(t('common.createSuccess'))
... ... @@ -94,12 +90,12 @@ const getUserNickName = (userId: number) =&gt; {
94 90 return '未知(' + userId + ')'
95 91 }
96 92 // ========== 详情相关 ==========
97   -const detailRef = ref() // 详情 Ref
  93 +const detailData = ref() // 详情 Ref
98 94  
99 95 // 详情操作
100 96 const handleDetail = async (row: UserGroupVO) => {
101 97 // 设置数据
102   - detailRef.value = row
  98 + detailData.value = row
103 99 setDialogTile('detail')
104 100 }
105 101  
... ... @@ -183,8 +179,8 @@ onMounted(async () =&gt; {
183 179 :rules="rules"
184 180 ref="formRef"
185 181 >
186   - <template #memberUserIds>
187   - <el-select v-model="userIds" multiple>
  182 + <template #memberUserIds="form">
  183 + <el-select v-model="form['memberUserIds']" multiple>
188 184 <el-option
189 185 v-for="item in userOptions"
190 186 :key="item.id"
... ... @@ -198,7 +194,7 @@ onMounted(async () =&gt; {
198 194 <Descriptions
199 195 v-if="actionType === 'detail'"
200 196 :schema="allSchemas.detailSchema"
201   - :data="detailRef"
  197 + :data="detailData"
202 198 >
203 199 <template #memberUserIds="{ row }">
204 200 <span v-for="userId in row.memberUserIds" :key="userId">
... ...
yudao-ui-admin-vue3/src/views/bpm/model/index.vue
... ... @@ -92,12 +92,12 @@ const handleChangeState = async (row: ModelVO) =&gt; {
92 92 .catch(() => {})
93 93 }
94 94 // ========== 详情相关 ==========
95   -const detailRef = ref() // 详情 Ref
  95 +const detailData = ref() // 详情 Ref
96 96  
97 97 // 详情操作
98 98 const handleDetail = async (row: ModelVO) => {
99 99 // 设置数据
100   - detailRef.value = row
  100 + detailData.value = row
101 101 setDialogTile('detail')
102 102 }
103 103  
... ... @@ -198,7 +198,7 @@ getList()
198 198 <Descriptions
199 199 v-if="actionType === 'detail'"
200 200 :schema="allSchemas.detailSchema"
201   - :data="detailRef"
  201 + :data="detailData"
202 202 />
203 203 <!-- 操作按钮 -->
204 204 <template #footer>
... ...
yudao-ui-admin-vue3/src/views/bpm/processInstance/index.vue
... ... @@ -38,12 +38,12 @@ const handleCancel = (row: ProcessInstanceVO) =&gt; {
38 38 }
39 39  
40 40 // ========== 详情相关 ==========
41   -const detailRef = ref() // 详情 Ref
  41 +const detailData = ref() // 详情 Ref
42 42  
43 43 // 详情操作
44 44 const handleDetail = async (row: ProcessInstanceVO) => {
45 45 // 设置数据
46   - detailRef.value = row
  46 + detailData.value = row
47 47 dialogVisible.value = true
48 48 }
49 49  
... ... @@ -105,7 +105,7 @@ getList()
105 105  
106 106 <XModal v-model="dialogVisible" :title="t('action.detail')">
107 107 <!-- 对话框(详情) -->
108   - <Descriptions :schema="allSchemas.detailSchema" :data="detailRef" />
  108 + <Descriptions :schema="allSchemas.detailSchema" :data="detailData" />
109 109 <!-- 操作按钮 -->
110 110 <template #footer>
111 111 <el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>
... ...
yudao-ui-admin-vue3/src/views/infra/apiAccessLog/index.vue
... ... @@ -21,7 +21,7 @@
21 21 </ContentWrap>
22 22 <XModal v-model="dialogVisible" :title="dialogTitle">
23 23 <!-- 对话框(详情) -->
24   - <Descriptions :schema="allSchemas.detailSchema" :data="detailRef">
  24 + <Descriptions :schema="allSchemas.detailSchema" :data="detailData">
25 25 <template #duration="{ row }">
26 26 <span>{{ row.duration + 'ms' }}</span>
27 27 </template>
... ... @@ -52,14 +52,14 @@ const { gridOptions } = useVxeGrid&lt;ApiAccessLogApi.ApiAccessLogVO&gt;({
52 52 getListApi: ApiAccessLogApi.getApiAccessLogPageApi
53 53 })
54 54 // ========== 详情相关 ==========
55   -const detailRef = ref() // 详情 Ref
  55 +const detailData = ref() // 详情 Ref
56 56 const dialogVisible = ref(false) // 是否显示弹出层
57 57 const dialogTitle = ref('') // 弹出层标题
58 58  
59 59 // 详情操作
60 60 const handleDetail = (row: ApiAccessLogApi.ApiAccessLogVO) => {
61 61 // 设置数据
62   - detailRef.value = row
  62 + detailData.value = row
63 63 dialogTitle.value = t('action.detail')
64 64 dialogVisible.value = true
65 65 }
... ...
yudao-ui-admin-vue3/src/views/infra/apiErrorLog/index.vue
... ... @@ -44,7 +44,7 @@
44 44 </ContentWrap>
45 45 <XModal v-model="dialogVisible" :title="dialogTitle">
46 46 <!-- 对话框(详情) -->
47   - <Descriptions :schema="allSchemas.detailSchema" :data="detailRef" />
  47 + <Descriptions :schema="allSchemas.detailSchema" :data="detailData" />
48 48 <!-- 操作按钮 -->
49 49 <template #footer>
50 50 <XButton :title="t('dialog.close')" @click="dialogVisible = false" />
... ... @@ -71,14 +71,14 @@ const { gridOptions, getList, exportList } = useVxeGrid&lt;ApiErrorLogApi.ApiErrorL
71 71 exportListApi: ApiErrorLogApi.exportApiErrorLogApi
72 72 })
73 73 // ========== 详情相关 ==========
74   -const detailRef = ref() // 详情 Ref
  74 +const detailData = ref() // 详情 Ref
75 75 const dialogVisible = ref(false) // 是否显示弹出层
76 76 const dialogTitle = ref('') // 弹出层标题
77 77  
78 78 // 详情操作
79 79 const handleDetail = (row: ApiErrorLogApi.ApiErrorLogVO) => {
80 80 // 设置数据
81   - detailRef.value = row
  81 + detailData.value = row
82 82 dialogTitle.value = t('action.detail')
83 83 dialogVisible.value = true
84 84 }
... ...
yudao-ui-admin-vue3/src/views/infra/codegen/components/GenInfoForm.vue
... ... @@ -6,7 +6,7 @@ import { onMounted, PropType, reactive, ref, watch } from &#39;vue&#39;
6 6 import { Form } from '@/components/Form'
7 7 import { useForm } from '@/hooks/web/useForm'
8 8 import { required } from '@/utils/formRules'
9   -import { handleTree } from '@/utils/tree'
  9 +import { handleTree, defaultProps } from '@/utils/tree'
10 10 import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
11 11 import { listSimpleMenusApi } from '@/api/system/menu'
12 12 import { CodegenTableVO } from '@/api/infra/codegen/types'
... ... @@ -17,12 +17,6 @@ const props = defineProps({
17 17 default: () => null
18 18 }
19 19 })
20   -const menuProps = {
21   - checkStrictly: true,
22   - children: 'children',
23   - label: 'name',
24   - value: 'id'
25   -}
26 20 const rules = reactive({
27 21 templateType: [required],
28 22 scene: [required],
... ... @@ -104,7 +98,7 @@ const schema = reactive&lt;FormSchema[]&gt;([
104 98 component: 'TreeSelect',
105 99 componentProps: {
106 100 data: menuOptions,
107   - props: menuProps,
  101 + props: defaultProps,
108 102 checkStrictly: true,
109 103 nodeKey: 'id'
110 104 },
... ...
yudao-ui-admin-vue3/src/views/infra/codegen/components/Preview.vue
... ... @@ -8,7 +8,6 @@
8 8 node-key="id"
9 9 :data="preview.fileTree"
10 10 :expand-on-click-node="false"
11   - default-expanded-keys="[0]"
12 11 highlight-current
13 12 @node-click="handleNodeClick"
14 13 />
... ...
yudao-ui-admin-vue3/src/views/infra/fileConfig/index.vue
... ... @@ -35,12 +35,7 @@
35 35 @click="handleMaster(row)"
36 36 />
37 37 <!-- 操作:测试 -->
38   - <XTextButton
39   - preIcon="ep:share"
40   - :title="t('action.test')"
41   - v-hasPermi="['infra:file-config:update']"
42   - @click="handleUpdate(row.id)"
43   - />
  38 + <XTextButton preIcon="ep:share" :title="t('action.test')" @click="handleTest(row.id)" />
44 39 <!-- 操作:删除 -->
45 40 <XTextButton
46 41 preIcon="ep:delete"
... ... @@ -164,7 +159,7 @@
164 159 </template>
165 160 <script setup lang="ts" name="FileConfig">
166 161 // 全局相关的 import
167   -import { reactive, ref } from 'vue'
  162 +import { ref } from 'vue'
168 163 import {
169 164 ElForm,
170 165 ElFormItem,
... ... @@ -202,7 +197,7 @@ const dialogVisible = ref(false) // 是否显示弹出层
202 197 const dialogTitle = ref('edit') // 弹出层标题
203 198 const formRef = ref<FormInstance>() // 表单 Ref
204 199 const detailData = ref() // 详情 Ref
205   -let form = reactive<FileConfigApi.FileConfigVO>({
  200 +let form = ref<FileConfigApi.FileConfigVO>({
206 201 id: 0,
207 202 name: '',
208 203 storage: 0,
... ... @@ -211,7 +206,7 @@ let form = reactive&lt;FileConfigApi.FileConfigVO&gt;({
211 206 config: {
212 207 basePath: '',
213 208 host: '',
214   - port: '',
  209 + port: 0,
215 210 username: '',
216 211 password: '',
217 212 mode: '',
... ... @@ -222,7 +217,7 @@ let form = reactive&lt;FileConfigApi.FileConfigVO&gt;({
222 217 domain: ''
223 218 },
224 219 remark: '',
225   - createTime: ''
  220 + createTime: new Date()
226 221 })
227 222 // 设置标题
228 223 const setDialogTile = (type: string) => {
... ... @@ -241,7 +236,7 @@ const handleCreate = (formEl: FormInstance | undefined) =&gt; {
241 236 const handleUpdate = async (rowId: number) => {
242 237 // 设置数据
243 238 const res = await FileConfigApi.getFileConfigApi(rowId)
244   - form = res
  239 + form.value = res
245 240 setDialogTile('update')
246 241 }
247 242  
... ... @@ -263,6 +258,11 @@ const handleMaster = (row: FileConfigApi.FileConfigVO) =&gt; {
263 258 })
264 259 }
265 260  
  261 +const handleTest = async (rowId: number) => {
  262 + const res = await FileConfigApi.testFileConfigApi(rowId)
  263 + message.alert('测试通过,上传文件成功!访问地址:' + res)
  264 +}
  265 +
266 266 // 删除操作
267 267 const handleDelete = async (rowId: number) => {
268 268 await deleteData(xGrid, rowId)
... ... @@ -277,10 +277,10 @@ const submitForm = async (formEl: FormInstance | undefined) =&gt; {
277 277 // 提交请求
278 278 try {
279 279 if (actionType.value === 'create') {
280   - await FileConfigApi.createFileConfigApi(form)
  280 + await FileConfigApi.createFileConfigApi(form.value)
281 281 message.success(t('common.createSuccess'))
282 282 } else {
283   - await FileConfigApi.updateFileConfigApi(form)
  283 + await FileConfigApi.updateFileConfigApi(form.value)
284 284 message.success(t('common.updateSuccess'))
285 285 }
286 286 dialogVisible.value = false
... ...
yudao-ui-admin-vue3/src/views/infra/fileList/index.vue
... ... @@ -72,7 +72,7 @@
72 72 <!-- 按钮:保存 -->
73 73 <XButton
74 74 type="primary"
75   - prefix="ep:upload-filled"
  75 + preIcon="ep:upload-filled"
76 76 :title="t('action.save')"
77 77 @click="submitFileForm()"
78 78 />
... ...
yudao-ui-admin-vue3/src/views/infra/job/JobLog.vue
... ... @@ -33,7 +33,7 @@
33 33 </ContentWrap>
34 34 <XModal v-model="dialogVisible" :title="dialogTitle">
35 35 <!-- 对话框(详情) -->
36   - <Descriptions :schema="allSchemas.detailSchema" :data="detailRef">
  36 + <Descriptions :schema="allSchemas.detailSchema" :data="detailData">
37 37 <template #retryInterval="{ row }">
38 38 <span>{{ row.retryInterval + '毫秒' }} </span>
39 39 </template>
... ... @@ -69,13 +69,13 @@ const dialogVisible = ref(false) // 是否显示弹出层
69 69 const dialogTitle = ref('') // 弹出层标题
70 70  
71 71 // ========== 详情相关 ==========
72   -const detailRef = ref() // 详情 Ref
  72 +const detailData = ref() // 详情 Ref
73 73  
74 74 // 详情操作
75 75 const handleDetail = async (row: JobLogApi.JobLogVO) => {
76 76 // 设置数据
77 77 const res = JobLogApi.getJobLogApi(row.id)
78   - detailRef.value = res
  78 + detailData.value = res
79 79 dialogTitle.value = t('action.detail')
80 80 dialogVisible.value = true
81 81 }
... ...
yudao-ui-admin-vue3/src/views/infra/job/index.vue
... ... @@ -93,15 +93,15 @@
93 93 :rules="rules"
94 94 ref="formRef"
95 95 >
96   - <template #cronExpression>
97   - <Crontab v-model="cronExpression" :shortcuts="shortcuts" />
  96 + <template #cronExpression="form">
  97 + <Crontab v-model="form['cronExpression']" :shortcuts="shortcuts" />
98 98 </template>
99 99 </Form>
100 100 <!-- 对话框(详情) -->
101 101 <Descriptions
102 102 v-if="actionType === 'detail'"
103 103 :schema="allSchemas.detailSchema"
104   - :data="detailRef"
  104 + :data="detailData"
105 105 >
106 106 <template #retryInterval="{ row }">
107 107 <span>{{ row.retryInterval + '毫秒' }} </span>
... ... @@ -161,8 +161,7 @@ const actionType = ref(&#39;&#39;) // 操作按钮的类型
161 161 const dialogVisible = ref(false) // 是否显示弹出层
162 162 const dialogTitle = ref('edit') // 弹出层标题
163 163 const formRef = ref<FormExpose>() // 表单 Ref
164   -const detailRef = ref() // 详情 Ref
165   -const cronExpression = ref('')
  164 +const detailData = ref() // 详情 Ref
166 165 const nextTimes = ref([])
167 166 const shortcuts = ref([
168 167 {
... ... @@ -179,7 +178,6 @@ const setDialogTile = (type: string) =&gt; {
179 178  
180 179 // 新增操作
181 180 const handleCreate = () => {
182   - cronExpression.value = ''
183 181 setDialogTile('create')
184 182 }
185 183  
... ... @@ -193,7 +191,6 @@ const handleUpdate = async (rowId: number) =&gt; {
193 191 setDialogTile('update')
194 192 // 设置数据
195 193 const res = await JobApi.getJobApi(rowId)
196   - cronExpression.value = res.cronExpression
197 194 unref(formRef)?.setValues(res)
198 195 }
199 196  
... ... @@ -201,7 +198,7 @@ const handleUpdate = async (rowId: number) =&gt; {
201 198 const handleDetail = async (rowId: number) => {
202 199 // 设置数据
203 200 const res = await JobApi.getJobApi(rowId)
204   - detailRef.value = res
  201 + detailData.value = res
205 202 // 后续执行时长
206 203 const jobNextTime = await JobApi.getJobNextTimesApi(rowId)
207 204 nextTimes.value = jobNextTime
... ... @@ -305,7 +302,6 @@ const submitForm = async () =&gt; {
305 302 // 提交请求
306 303 try {
307 304 const data = unref(formRef)?.formModel as JobApi.JobVO
308   - data.cronExpression = cronExpression.value
309 305 if (actionType.value === 'create') {
310 306 await JobApi.createJobApi(data)
311 307 message.success(t('common.createSuccess'))
... ...
yudao-ui-admin-vue3/src/views/system/dept/index.vue
... ... @@ -38,20 +38,19 @@
38 38 <!-- 添加或修改菜单对话框 -->
39 39 <XModal id="deptModel" v-model="dialogVisible" :title="dialogTitle">
40 40 <!-- 对话框(添加 / 修改) -->
41   - <!-- 操作工具栏 -->
42 41 <Form ref="formRef" :schema="allSchemas.formSchema" :rules="rules">
43   - <template #parentId>
  42 + <template #parentId="form">
44 43 <el-tree-select
45 44 node-key="id"
46   - v-model="deptParentId"
  45 + v-model="form['parentId']"
47 46 :props="defaultProps"
48 47 :data="deptOptions"
49 48 :default-expanded-keys="[100]"
50 49 check-strictly
51 50 />
52 51 </template>
53   - <template #leaderUserId>
54   - <el-select v-model="leaderUserId">
  52 + <template #leaderUserId="form">
  53 + <el-select v-model="form['leaderUserId']">
55 54 <el-option
56 55 v-for="item in userOption"
57 56 :key="item.id"
... ... @@ -79,7 +78,7 @@
79 78 import { nextTick, onMounted, reactive, ref, unref } from 'vue'
80 79 import { ElSelect, ElTreeSelect, ElOption } from 'element-plus'
81 80 import { VxeGridInstance } from 'vxe-table'
82   -import { handleTree } from '@/utils/tree'
  81 +import { handleTree, defaultProps } from '@/utils/tree'
83 82 import { required } from '@/utils/formRules.js'
84 83 import { useI18n } from '@/hooks/web/useI18n'
85 84 import { useMessage } from '@/hooks/web/useMessage'
... ... @@ -105,8 +104,6 @@ const dialogVisible = ref(false) // 是否显示弹出层
105 104 const dialogTitle = ref('edit') // 弹出层标题
106 105 const actionType = ref('') // 操作按钮的类型
107 106 const actionLoading = ref(false) // 遮罩层
108   -const deptParentId = ref(0) // 上级ID
109   -const leaderUserId = ref()
110 107 const formRef = ref<FormExpose>() // 表单 Ref
111 108 const deptOptions = ref() // 树形结构
112 109 const userOption = ref<UserVO[]>([])
... ... @@ -118,13 +115,6 @@ const rules = reactive({
118 115 status: [required]
119 116 })
120 117  
121   -// 下拉框[上级]的配置项目
122   -const defaultProps = {
123   - checkStrictly: true,
124   - children: 'children',
125   - label: 'name',
126   - value: 'id'
127   -}
128 118 const getUserList = async () => {
129 119 const res = await getListSimpleUsersApi()
130 120 userOption.value = res
... ... @@ -154,8 +144,6 @@ const setDialogTile = (type: string) =&gt; {
154 144  
155 145 // 新增操作
156 146 const handleCreate = async () => {
157   - deptParentId.value = 0
158   - leaderUserId.value = null
159 147 setDialogTile('create')
160 148 }
161 149  
... ... @@ -164,8 +152,6 @@ const handleUpdate = async (rowId: number) =&gt; {
164 152 setDialogTile('update')
165 153 // 设置数据
166 154 const res = await DeptApi.getDeptApi(rowId)
167   - deptParentId.value = res.parentId
168   - leaderUserId.value = res.leaderUserId
169 155 await nextTick()
170 156 unref(formRef)?.setValues(res)
171 157 }
... ... @@ -180,8 +166,6 @@ const submitForm = async () =&gt; {
180 166 // 提交请求
181 167 try {
182 168 const data = unref(formRef)?.formModel as DeptApi.DeptVO
183   - data.parentId = deptParentId.value
184   - data.leaderUserId = leaderUserId.value
185 169 if (actionType.value === 'create') {
186 170 await DeptApi.createDeptApi(data)
187 171 message.success(t('common.createSuccess'))
... ...
yudao-ui-admin-vue3/src/views/system/errorCode/index.vue
... ... @@ -50,7 +50,7 @@
50 50 <Descriptions
51 51 v-if="actionType === 'detail'"
52 52 :schema="allSchemas.detailSchema"
53   - :data="detailRef"
  53 + :data="detailData"
54 54 />
55 55 <template #footer>
56 56 <!-- 按钮:保存 -->
... ... @@ -93,7 +93,7 @@ const dialogTitle = ref(&#39;edit&#39;) // 弹出层标题
93 93 const actionType = ref('') // 操作按钮的类型
94 94 const actionLoading = ref(false) // 按钮 Loading
95 95 const formRef = ref<FormExpose>() // 表单 Ref
96   -const detailRef = ref() // 详情 Ref
  96 +const detailData = ref() // 详情 Ref
97 97  
98 98 // 设置标题
99 99 const setDialogTile = (type: string) => {
... ... @@ -120,7 +120,7 @@ const handleDetail = async (rowId: number) =&gt; {
120 120 setDialogTile('detail')
121 121 // 设置数据
122 122 const res = await ErrorCodeApi.getErrorCodeApi(rowId)
123   - detailRef.value = res
  123 + detailData.value = res
124 124 }
125 125  
126 126 // 删除操作
... ...
yudao-ui-admin-vue3/src/views/system/loginlog/index.vue
... ... @@ -20,7 +20,7 @@
20 20 <!-- 弹窗 -->
21 21 <XModal id="postModel" v-model="dialogVisible" :title="dialogTitle">
22 22 <!-- 表单:详情 -->
23   - <Descriptions :schema="allSchemas.detailSchema" :data="detailRef" />
  23 + <Descriptions :schema="allSchemas.detailSchema" :data="detailData" />
24 24 <template #footer>
25 25 <!-- 按钮:关闭 -->
26 26 <XButton :title="t('dialog.close')" @click="dialogVisible = false" />
... ... @@ -47,13 +47,13 @@ const { gridOptions, exportList } = useVxeGrid&lt;LoginLogVO&gt;({
47 47 })
48 48  
49 49 // 详情操作
50   -const detailRef = ref() // 详情 Ref
  50 +const detailData = ref() // 详情 Ref
51 51 const dialogVisible = ref(false) // 是否显示弹出层
52 52 const dialogTitle = ref(t('action.detail')) // 弹出层标题
53 53 // 详情
54 54 const handleDetail = async (row: LoginLogVO) => {
55 55 // 设置数据
56   - detailRef.value = row
  56 + detailData.value = row
57 57 dialogVisible.value = true
58 58 }
59 59  
... ...
yudao-ui-admin-vue3/src/views/system/loginlog/loginLog.data.ts
... ... @@ -8,7 +8,7 @@ const crudSchemas = reactive&lt;VxeCrudSchema&gt;({
8 8 primaryType: 'seq',
9 9 primaryTitle: '日志编号',
10 10 action: true,
11   - actionWidth: '80px',
  11 + actionWidth: '100px',
12 12 columns: [
13 13 {
14 14 title: '日志类型',
... ... @@ -28,10 +28,7 @@ const crudSchemas = reactive&lt;VxeCrudSchema&gt;({
28 28 },
29 29 {
30 30 title: '浏览器',
31   - field: 'userAgent',
32   - table: {
33   - width: 100
34   - }
  31 + field: 'userAgent'
35 32 },
36 33 {
37 34 title: '登陆结果',
... ... @@ -44,7 +41,7 @@ const crudSchemas = reactive&lt;VxeCrudSchema&gt;({
44 41 field: 'createTime',
45 42 formatter: 'formatDate',
46 43 table: {
47   - width: 100
  44 + width: 150
48 45 },
49 46 search: {
50 47 show: true,
... ...
yudao-ui-admin-vue3/src/views/system/menu/index.vue
... ... @@ -98,20 +98,28 @@
98 98 <!-- 添加或修改菜单对话框 -->
99 99 <XModal id="menuModel" v-model="dialogVisible" :title="dialogTitle">
100 100 <!-- 对话框(添加 / 修改) -->
101   - <el-form ref="formRef" :model="menuForm" :rules="rules" label-width="auto" label-position="top">
  101 + <el-form
  102 + ref="formRef"
  103 + :model="menuForm"
  104 + :rules="rules"
  105 + label-width="100px"
  106 + label-position="right"
  107 + >
102 108 <el-form-item label="上级菜单">
103 109 <el-tree-select
104 110 node-key="id"
105 111 v-model="menuForm.parentId"
106   - :props="menuProps"
  112 + :props="defaultProps"
107 113 :data="menuOptions"
108 114 :default-expanded-keys="[0]"
109 115 check-strictly
110 116 />
111 117 </el-form-item>
112   - <el-form-item label="菜单名称" prop="name" span="12">
113   - <el-input v-model="menuForm.name" placeholder="请输入菜单名称" clearable />
114   - </el-form-item>
  118 + <el-col :span="16">
  119 + <el-form-item label="菜单名称" prop="name">
  120 + <el-input v-model="menuForm.name" placeholder="请输入菜单名称" clearable />
  121 + </el-form-item>
  122 + </el-col>
115 123 <el-form-item label="菜单类型" prop="type">
116 124 <el-radio-group v-model="menuForm.type">
117 125 <el-radio-button
... ... @@ -127,74 +135,88 @@
127 135 <el-form-item label="菜单图标">
128 136 <IconSelect v-model="menuForm.icon" clearable />
129 137 </el-form-item>
130   - <el-form-item label="路由地址" prop="path">
131   - <template #label>
132   - <Tooltip
133   - titel="路由地址"
134   - message="访问的路由地址,如:`user`。如需外网地址时,则以 `http(s)://` 开头"
135   - />
136   - </template>
137   - <el-input v-model="menuForm.path" placeholder="请输入路由地址" clearable />
138   - </el-form-item>
  138 + <el-col :span="16">
  139 + <el-form-item label="路由地址" prop="path">
  140 + <template #label>
  141 + <Tooltip
  142 + titel="路由地址"
  143 + message="访问的路由地址,如:`user`。如需外网地址时,则以 `http(s)://` 开头"
  144 + />
  145 + </template>
  146 + <el-input v-model="menuForm.path" placeholder="请输入路由地址" clearable />
  147 + </el-form-item>
  148 + </el-col>
139 149 </template>
140 150 <template v-if="menuForm.type === 2">
141   - <el-form-item label="路由地址" prop="component">
142   - <el-input v-model="menuForm.component" placeholder="请输入组件地址" clearable />
143   - </el-form-item>
  151 + <el-col :span="16">
  152 + <el-form-item label="路由地址" prop="component">
  153 + <el-input v-model="menuForm.component" placeholder="请输入组件地址" clearable />
  154 + </el-form-item>
  155 + </el-col>
144 156 </template>
145 157 <template v-if="menuForm.type !== 1">
146   - <el-form-item label="权限标识" prop="permission">
147   - <template #label>
148   - <Tooltip
149   - titel="权限标识"
150   - message="Controller 方法上的权限字符,如:@PreAuthorize(`@ss.hasPermission('system:user:list')`)"
151   - />
152   - </template>
153   - <el-input v-model="menuForm.permission" placeholder="请输入权限标识" clearable />
154   - </el-form-item>
  158 + <el-col :span="16">
  159 + <el-form-item label="权限标识" prop="permission">
  160 + <template #label>
  161 + <Tooltip
  162 + titel="权限标识"
  163 + message="Controller 方法上的权限字符,如:@PreAuthorize(`@ss.hasPermission('system:user:list')`)"
  164 + />
  165 + </template>
  166 + <el-input v-model="menuForm.permission" placeholder="请输入权限标识" clearable />
  167 + </el-form-item>
  168 + </el-col>
155 169 </template>
156   - <el-form-item label="显示排序" prop="sort">
157   - <el-input-number v-model="menuForm.sort" controls-position="right" :min="0" clearable />
158   - </el-form-item>
159   - <el-form-item label="菜单状态" prop="status">
160   - <el-radio-group v-model="menuForm.status">
161   - <el-radio
162   - border
163   - v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
164   - :key="dict.value"
165   - :label="dict.value"
166   - >
167   - {{ dict.label }}
168   - </el-radio>
169   - </el-radio-group>
170   - </el-form-item>
171   - <template v-if="menuForm.type !== 3">
172   - <el-form-item label="显示状态" prop="status">
173   - <template #label>
174   - <Tooltip
175   - titel="显示状态"
176   - message="选择隐藏时,路由将不会出现在侧边栏,但仍然可以访问"
177   - />
178   - </template>
179   - <el-radio-group v-model="menuForm.visible">
180   - <el-radio border key="true" :label="true">显示</el-radio>
181   - <el-radio border key="false" :label="false">隐藏</el-radio>
  170 + <el-col :span="16">
  171 + <el-form-item label="显示排序" prop="sort">
  172 + <el-input-number v-model="menuForm.sort" controls-position="right" :min="0" clearable />
  173 + </el-form-item>
  174 + </el-col>
  175 + <el-col :span="16">
  176 + <el-form-item label="菜单状态" prop="status">
  177 + <el-radio-group v-model="menuForm.status">
  178 + <el-radio
  179 + border
  180 + v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
  181 + :key="dict.value"
  182 + :label="dict.value"
  183 + >
  184 + {{ dict.label }}
  185 + </el-radio>
182 186 </el-radio-group>
183 187 </el-form-item>
  188 + </el-col>
  189 + <template v-if="menuForm.type !== 3">
  190 + <el-col :span="16">
  191 + <el-form-item label="显示状态" prop="status">
  192 + <template #label>
  193 + <Tooltip
  194 + titel="显示状态"
  195 + message="选择隐藏时,路由将不会出现在侧边栏,但仍然可以访问"
  196 + />
  197 + </template>
  198 + <el-radio-group v-model="menuForm.visible">
  199 + <el-radio border key="true" :label="true">显示</el-radio>
  200 + <el-radio border key="false" :label="false">隐藏</el-radio>
  201 + </el-radio-group>
  202 + </el-form-item>
  203 + </el-col>
184 204 </template>
185 205 <template v-if="menuForm.type === 2">
186   - <el-form-item label="缓存状态" prop="keepAlive">
187   - <template #label>
188   - <Tooltip
189   - titel="缓存状态"
190   - message="选择缓存时,则会被 `keep-alive` 缓存,需要匹配组件的 `name` 和路由地址保持一致"
191   - />
192   - </template>
193   - <el-radio-group v-model="menuForm.keepAlive">
194   - <el-radio border key="true" :label="true">缓存</el-radio>
195   - <el-radio border key="false" :label="false">不缓存</el-radio>
196   - </el-radio-group>
197   - </el-form-item>
  206 + <el-col :span="16">
  207 + <el-form-item label="缓存状态" prop="keepAlive">
  208 + <template #label>
  209 + <Tooltip
  210 + titel="缓存状态"
  211 + message="选择缓存时,则会被 `keep-alive` 缓存,需要匹配组件的 `name` 和路由地址保持一致"
  212 + />
  213 + </template>
  214 + <el-radio-group v-model="menuForm.keepAlive">
  215 + <el-radio border key="true" :label="true">缓存</el-radio>
  216 + <el-radio border key="false" :label="false">不缓存</el-radio>
  217 + </el-radio-group>
  218 + </el-form-item>
  219 + </el-col>
198 220 </template>
199 221 </el-form>
200 222 <template #footer>
... ... @@ -215,8 +237,10 @@
215 237 // 全局相关的 import
216 238 import { onMounted, reactive, ref } from 'vue'
217 239 import { useI18n } from '@/hooks/web/useI18n'
  240 +import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
218 241 import { useMessage } from '@/hooks/web/useMessage'
219 242 import {
  243 + ElCol,
220 244 ElForm,
221 245 ElFormItem,
222 246 ElInput,
... ... @@ -237,11 +261,11 @@ import * as MenuApi from &#39;@/api/system/menu&#39;
237 261 import { required } from '@/utils/formRules.js'
238 262 import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
239 263 import { SystemMenuTypeEnum, CommonStatusEnum } from '@/utils/constants'
240   -import { handleTree } from '@/utils/tree'
241   -import { deepCopy } from 'windicss/utils'
  264 +import { handleTree, defaultProps } from '@/utils/tree'
242 265  
243 266 const { t } = useI18n() // 国际化
244 267 const message = useMessage() // 消息弹窗
  268 +const { wsCache } = useCache()
245 269 // 列表相关的变量
246 270 const xTable = ref<VxeTableInstance>()
247 271 const tableLoading = ref(false)
... ... @@ -253,7 +277,7 @@ const actionType = ref(&#39;&#39;) // 操作按钮的类型
253 277 const actionLoading = ref(false) // 遮罩层
254 278 // 新增和修改的表单值
255 279 const formRef = ref<FormInstance>()
256   -const menuFormNull = {
  280 +const menuForm = ref<MenuApi.MenuVO>({
257 281 id: 0,
258 282 name: '',
259 283 permission: '',
... ... @@ -266,9 +290,8 @@ const menuFormNull = {
266 290 status: CommonStatusEnum.ENABLE,
267 291 visible: true,
268 292 keepAlive: true,
269   - createTime: ''
270   -}
271   -const menuForm = ref<MenuApi.MenuVO>(menuFormNull)
  293 + createTime: new Date()
  294 +})
272 295 // 新增和修改的表单校验
273 296 const rules = reactive({
274 297 name: [required],
... ... @@ -278,13 +301,6 @@ const rules = reactive({
278 301 })
279 302  
280 303 // ========== 下拉框[上级菜单] ==========
281   -// 下拉框[上级菜单]的配置项目
282   -const menuProps = {
283   - checkStrictly: true,
284   - children: 'children',
285   - label: 'name',
286   - value: 'id'
287   -}
288 304 const menuOptions = ref<any[]>([]) // 树形结构
289 305 // 获取下拉框[上级菜单]的数据
290 306 const getTree = async () => {
... ... @@ -335,7 +351,21 @@ const handleCreate = () =&gt; {
335 351 setDialogTile('create')
336 352 // 重置表单
337 353 formRef.value?.resetFields()
338   - menuForm.value = deepCopy(menuFormNull)
  354 + menuForm.value = {
  355 + id: 0,
  356 + name: '',
  357 + permission: '',
  358 + type: SystemMenuTypeEnum.DIR,
  359 + sort: 1,
  360 + parentId: 0,
  361 + path: '',
  362 + icon: '',
  363 + component: '',
  364 + status: CommonStatusEnum.ENABLE,
  365 + visible: true,
  366 + keepAlive: true,
  367 + createTime: new Date()
  368 + }
339 369 }
340 370  
341 371 // 修改操作
... ... @@ -375,6 +405,7 @@ const submitForm = async () =&gt; {
375 405 } finally {
376 406 dialogVisible.value = false
377 407 actionLoading.value = false
  408 + wsCache.delete(CACHE_KEY.ROLE_ROUTERS)
378 409 // 操作成功,重新加载列表
379 410 await getList()
380 411 }
... ...
yudao-ui-admin-vue3/src/views/system/notice/index.vue
... ... @@ -50,7 +50,7 @@
50 50 <Descriptions
51 51 v-if="actionType === 'detail'"
52 52 :schema="allSchemas.detailSchema"
53   - :data="detailRef"
  53 + :data="detailData"
54 54 >
55 55 <template #content="{ row }">
56 56 <Editor :model-value="row.content" read-only="true" />
... ... @@ -98,7 +98,7 @@ const dialogTitle = ref(&#39;edit&#39;) // 弹出层标题
98 98 const actionType = ref('') // 操作按钮的类型
99 99 const actionLoading = ref(false) // 按钮 Loading
100 100 const formRef = ref<FormExpose>() // 表单 Ref
101   -const detailRef = ref() // 详情 Ref
  101 +const detailData = ref() // 详情 Ref
102 102  
103 103 // 设置标题
104 104 const setDialogTile = (type: string) => {
... ... @@ -125,7 +125,7 @@ const handleDetail = async (rowId: number) =&gt; {
125 125 setDialogTile('detail')
126 126 // 设置数据
127 127 const res = await NoticeApi.getNoticeApi(rowId)
128   - detailRef.value = res
  128 + detailData.value = res
129 129 }
130 130  
131 131 // 删除操作
... ...
yudao-ui-admin-vue3/src/views/system/oauth2/client/client.data.ts
... ... @@ -41,6 +41,12 @@ const crudSchemas = reactive&lt;VxeCrudSchema&gt;({
41 41 cellRender: {
42 42 name: 'XImg'
43 43 }
  44 + },
  45 + form: {
  46 + component: 'UploadImg',
  47 + componentProps: {
  48 + limit: 1
  49 + }
44 50 }
45 51 },
46 52 {
... ...
yudao-ui-admin-vue3/src/views/system/oauth2/client/index.vue
... ... @@ -61,16 +61,12 @@
61 61 v-if="['create', 'update'].includes(actionType)"
62 62 :schema="allSchemas.formSchema"
63 63 :rules="rules"
64   - >
65   - <template #logo>
66   - <UploadImg :imgs="uploadLogo" :limit="1" />
67   - </template>
68   - </Form>
  64 + />
69 65 <!-- 表单:详情 -->
70 66 <Descriptions
71 67 v-if="actionType === 'detail'"
72 68 :schema="allSchemas.detailSchema"
73   - :data="detailRef"
  69 + :data="detailData"
74 70 >
75 71 <template #accessTokenValiditySeconds="{ row }">
76 72 {{ row.accessTokenValiditySeconds + '秒' }}
... ... @@ -142,7 +138,6 @@ import { useMessage } from &#39;@/hooks/web/useMessage&#39;
142 138 import { useVxeGrid } from '@/hooks/web/useVxeGrid'
143 139 import { VxeGridInstance } from 'vxe-table'
144 140 import { FormExpose } from '@/components/Form'
145   -import { UploadImg } from '@/components/UploadFile'
146 141 // 业务相关的 import
147 142 import * as ClientApi from '@/api/system/oauth2/client'
148 143 import { rules, allSchemas } from './client.data'
... ... @@ -163,8 +158,7 @@ const dialogTitle = ref(&#39;edit&#39;) // 弹出层标题
163 158 const actionType = ref('') // 操作按钮的类型
164 159 const actionLoading = ref(false) // 按钮 Loading
165 160 const formRef = ref<FormExpose>() // 表单 Ref
166   -const detailRef = ref() // 详情 Ref
167   -const uploadLogo = ref('')
  161 +const detailData = ref() // 详情 Ref
168 162 // 设置标题
169 163 const setDialogTile = (type: string) => {
170 164 dialogTitle.value = t('action.' + type)
... ... @@ -174,7 +168,6 @@ const setDialogTile = (type: string) =&gt; {
174 168  
175 169 // 新增操作
176 170 const handleCreate = () => {
177   - uploadLogo.value = ''
178 171 setDialogTile('create')
179 172 }
180 173  
... ... @@ -183,7 +176,6 @@ const handleUpdate = async (rowId: number) =&gt; {
183 176 setDialogTile('update')
184 177 // 设置数据
185 178 const res = await ClientApi.getOAuth2ClientApi(rowId)
186   - uploadLogo.value = res.logo
187 179 unref(formRef)?.setValues(res)
188 180 }
189 181  
... ... @@ -191,7 +183,7 @@ const handleUpdate = async (rowId: number) =&gt; {
191 183 const handleDetail = async (rowId: number) => {
192 184 setDialogTile('detail')
193 185 const res = await ClientApi.getOAuth2ClientApi(rowId)
194   - detailRef.value = res
  186 + detailData.value = res
195 187 }
196 188  
197 189 // 删除操作
... ... @@ -209,7 +201,6 @@ const submitForm = async () =&gt; {
209 201 // 提交请求
210 202 try {
211 203 const data = unref(formRef)?.formModel as ClientApi.OAuth2ClientVO
212   - data.logo = uploadLogo.value
213 204 if (actionType.value === 'create') {
214 205 await ClientApi.createOAuth2ClientApi(data)
215 206 message.success(t('common.createSuccess'))
... ...
yudao-ui-admin-vue3/src/views/system/oauth2/token/index.vue
... ... @@ -17,7 +17,7 @@
17 17 </ContentWrap>
18 18 <XModal v-model="dialogVisible" :title="dialogTitle">
19 19 <!-- 对话框(详情) -->
20   - <Descriptions :schema="allSchemas.detailSchema" :data="detailRef" />
  20 + <Descriptions :schema="allSchemas.detailSchema" :data="detailData" />
21 21 <!-- 操作按钮 -->
22 22 <template #footer>
23 23 <XButton :title="t('dialog.close')" @click="dialogVisible = false" />
... ... @@ -45,13 +45,13 @@ const { gridOptions, getList } = useVxeGrid&lt;TokenApi.OAuth2TokenVO&gt;({
45 45 })
46 46  
47 47 // ========== 详情相关 ==========
48   -const detailRef = ref() // 详情 Ref
  48 +const detailData = ref() // 详情 Ref
49 49 const dialogVisible = ref(false) // 是否显示弹出层
50 50 const dialogTitle = ref(t('action.detail')) // 弹出层标题
51 51 // 详情
52 52 const handleDetail = async (row: TokenApi.OAuth2TokenVO) => {
53 53 // 设置数据
54   - detailRef.value = row
  54 + detailData.value = row
55 55 dialogVisible.value = true
56 56 }
57 57  
... ...
yudao-ui-admin-vue3/src/views/system/operatelog/index.vue
... ... @@ -27,7 +27,7 @@
27 27 <!-- 弹窗 -->
28 28 <XModal id="postModel" v-model="dialogVisible" :title="t('action.detail')">
29 29 <!-- 对话框(详情) -->
30   - <Descriptions :schema="allSchemas.detailSchema" :data="detailRef">
  30 + <Descriptions :schema="allSchemas.detailSchema" :data="detailData">
31 31 <template #resultCode="{ row }">
32 32 <span>{{ row.resultCode === 0 ? '成功' : '失败' }}</span>
33 33 </template>
... ... @@ -63,16 +63,16 @@ const { gridOptions, exportList } = useVxeGrid&lt;OperateLogApi.OperateLogVO&gt;({
63 63 // 弹窗相关的变量
64 64 const dialogVisible = ref(false) // 是否显示弹出层
65 65 const actionLoading = ref(false) // 按钮 Loading
66   -const detailRef = ref() // 详情 Ref
  66 +const detailData = ref() // 详情 Ref
67 67 // 详情
68 68 const handleDetail = (row: OperateLogApi.OperateLogVO) => {
69 69 // 设置数据
70   - detailRef.value = row
  70 + detailData.value = row
71 71 dialogVisible.value = true
72 72 }
73 73  
74 74 // 导出操作
75 75 const handleExport = async () => {
76   - await exportList(xGrid, '岗位列表.xls')
  76 + await exportList(xGrid, '操作日志.xls')
77 77 }
78 78 </script>
... ...
yudao-ui-admin-vue3/src/views/system/role/index.vue
... ... @@ -64,7 +64,7 @@
64 64 <Descriptions
65 65 v-if="actionType === 'detail'"
66 66 :schema="allSchemas.detailSchema"
67   - :data="detailRef"
  67 + :data="detailData"
68 68 />
69 69 <!-- 操作按钮 -->
70 70 <template #footer>
... ... @@ -92,9 +92,9 @@
92 92 <el-select v-model="dataScopeForm.dataScope">
93 93 <el-option
94 94 v-for="item in dataScopeDictDatas"
95   - :key="parseInt(item.value)"
  95 + :key="item.value"
96 96 :label="item.label"
97   - :value="parseInt(item.value)"
  97 + :value="item.value"
98 98 />
99 99 </el-select>
100 100 </el-form-item>
... ... @@ -105,7 +105,7 @@
105 105 actionScopeType === 'menu' || dataScopeForm.dataScope === SystemDataScopeEnum.DEPT_CUSTOM
106 106 "
107 107 >
108   - <el-card class="box-card">
  108 + <el-card shadow="never">
109 109 <template #header>
110 110 父子联动(选中父节点,自动选择子节点):
111 111 <el-switch v-model="checkStrictly" inline-prompt active-text="是" inactive-text="否" />
... ... @@ -164,9 +164,9 @@ import { FormExpose } from &#39;@/components/Form&#39;
164 164 import { useI18n } from '@/hooks/web/useI18n'
165 165 import { useMessage } from '@/hooks/web/useMessage'
166 166 import { useVxeGrid } from '@/hooks/web/useVxeGrid'
167   -import { handleTree } from '@/utils/tree'
  167 +import { handleTree, defaultProps } from '@/utils/tree'
168 168 import { SystemDataScopeEnum } from '@/utils/constants'
169   -import { DICT_TYPE, getDictOptions } from '@/utils/dict'
  169 +import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
170 170 import { rules, allSchemas } from './role.data'
171 171 import * as RoleApi from '@/api/system/role'
172 172 import { listSimpleMenusApi } from '@/api/system/menu'
... ... @@ -189,7 +189,7 @@ const actionType = ref(&#39;&#39;) // 操作按钮的类型
189 189 const dialogVisible = ref(false) // 是否显示弹出层
190 190 const dialogTitle = ref('edit') // 弹出层标题
191 191 const formRef = ref<FormExpose>() // 表单 Ref
192   -const detailRef = ref() // 详情 Ref
  192 +const detailData = ref() // 详情 Ref
193 193  
194 194 // 设置标题
195 195 const setDialogTile = (type: string) => {
... ... @@ -216,7 +216,7 @@ const handleDetail = async (rowId: number) =&gt; {
216 216 setDialogTile('detail')
217 217 // 设置数据
218 218 const res = await RoleApi.getRoleApi(rowId)
219   - detailRef.value = res
  219 + detailData.value = res
220 220 }
221 221  
222 222 // 删除操作
... ... @@ -259,11 +259,6 @@ const dataScopeForm = reactive({
259 259 dataScope: 0,
260 260 checkList: []
261 261 })
262   -const defaultProps = {
263   - children: 'children',
264   - label: 'name',
265   - value: 'id'
266   -}
267 262 const treeOptions = ref<any[]>([]) // 菜单树形结构
268 263 const treeRef = ref<InstanceType<typeof ElTree>>()
269 264 const dialogScopeVisible = ref(false)
... ... @@ -306,18 +301,20 @@ const handleScope = async (type: string, row: RoleApi.RoleVO) =&gt; {
306 301 }
307 302 // 保存权限
308 303 const submitScope = async () => {
309   - const keys = treeRef.value!.getCheckedKeys(false) as unknown as Array<number>
310 304 if ('data' === actionScopeType.value) {
311 305 const data = ref<PermissionApi.PermissionAssignRoleDataScopeReqVO>({
312 306 roleId: dataScopeForm.id,
313 307 dataScope: dataScopeForm.dataScope,
314   - dataScopeDeptIds: dataScopeForm.dataScope !== SystemDataScopeEnum.DEPT_CUSTOM ? [] : keys
  308 + dataScopeDeptIds:
  309 + dataScopeForm.dataScope !== SystemDataScopeEnum.DEPT_CUSTOM
  310 + ? []
  311 + : (treeRef.value!.getCheckedKeys(false) as unknown as Array<number>)
315 312 })
316 313 await PermissionApi.assignRoleDataScopeApi(data.value)
317 314 } else if ('menu' === actionScopeType.value) {
318 315 const data = ref<PermissionApi.PermissionAssignRoleMenuReqVO>({
319 316 roleId: dataScopeForm.id,
320   - menuIds: keys
  317 + menuIds: treeRef.value!.getCheckedKeys(false) as unknown as Array<number>
321 318 })
322 319 await PermissionApi.assignRoleMenuApi(data.value)
323 320 }
... ... @@ -325,7 +322,7 @@ const submitScope = async () =&gt; {
325 322 dialogScopeVisible.value = false
326 323 }
327 324 const init = () => {
328   - dataScopeDictDatas.value = getDictOptions(DICT_TYPE.SYSTEM_DATA_SCOPE)
  325 + dataScopeDictDatas.value = getIntDictOptions(DICT_TYPE.SYSTEM_DATA_SCOPE)
329 326 }
330 327 // ========== 初始化 ==========
331 328 onMounted(() => {
... ...
yudao-ui-admin-vue3/src/views/system/role/role.data.ts
... ... @@ -28,7 +28,8 @@ const crudSchemas = reactive&lt;VxeCrudSchema&gt;({
28 28 title: '角色类型',
29 29 field: 'type',
30 30 dictType: DICT_TYPE.SYSTEM_ROLE_TYPE,
31   - dictClass: 'number'
  31 + dictClass: 'number',
  32 + isForm: false
32 33 },
33 34 {
34 35 title: '角色标识',
... ... @@ -40,6 +41,21 @@ const crudSchemas = reactive&lt;VxeCrudSchema&gt;({
40 41 field: 'sort'
41 42 },
42 43 {
  44 + title: t('form.remark'),
  45 + field: 'remark',
  46 + isTable: false,
  47 + form: {
  48 + component: 'Input',
  49 + componentProps: {
  50 + type: 'textarea',
  51 + rows: 4
  52 + },
  53 + colProps: {
  54 + span: 24
  55 + }
  56 + }
  57 + },
  58 + {
43 59 title: t('common.status'),
44 60 field: 'status',
45 61 dictType: DICT_TYPE.COMMON_STATUS,
... ...
yudao-ui-admin-vue3/src/views/system/sensitiveWord/index.vue
... ... @@ -64,8 +64,8 @@
64 64 :rules="rules"
65 65 ref="formRef"
66 66 >
67   - <template #tags>
68   - <el-select v-model="tags" multiple placeholder="请选择">
  67 + <template #tags="form">
  68 + <el-select v-model="form['tags']" multiple placeholder="请选择">
69 69 <el-option v-for="item in tagsOptions" :key="item" :label="item" :value="item" />
70 70 </el-select>
71 71 </template>
... ... @@ -130,7 +130,6 @@ const dialogVisible = ref(false) // 是否显示弹出层
130 130 const dialogTitle = ref('edit') // 弹出层标题
131 131 const formRef = ref<FormExpose>() // 表单 Ref
132 132 const detailData = ref() // 详情 Ref
133   -const tags = ref()
134 133  
135 134 // 获取标签
136 135 const tagsOptions = ref()
... ... @@ -148,7 +147,6 @@ const setDialogTile = (type: string) =&gt; {
148 147  
149 148 // 新增操作
150 149 const handleCreate = () => {
151   - tags.value = null
152 150 setDialogTile('create')
153 151 }
154 152  
... ... @@ -162,7 +160,6 @@ const handleUpdate = async (rowId: number) =&gt; {
162 160 setDialogTile('update')
163 161 // 设置数据
164 162 const res = await SensitiveWordApi.getSensitiveWordApi(rowId)
165   - tags.value = res.tags
166 163 unref(formRef)?.setValues(res)
167 164 }
168 165  
... ... @@ -188,7 +185,6 @@ const submitForm = async () =&gt; {
188 185 // 提交请求
189 186 try {
190 187 const data = unref(formRef)?.formModel as SensitiveWordApi.SensitiveWordVO
191   - data.tags = tags.value
192 188 if (actionType.value === 'create') {
193 189 await SensitiveWordApi.createSensitiveWordApi(data)
194 190 message.success(t('common.createSuccess'))
... ...
yudao-ui-admin-vue3/src/views/system/sms/smsLog/index.vue
... ... @@ -22,7 +22,7 @@
22 22 <Descriptions
23 23 v-if="actionType === 'detail'"
24 24 :schema="allSchemas.detailSchema"
25   - :data="detailRef"
  25 + :data="detailData"
26 26 />
27 27 <!-- 操作按钮 -->
28 28 <template #footer>
... ... @@ -53,10 +53,10 @@ const dialogVisible = ref(false) // 是否显示弹出层
53 53 const dialogTitle = ref('edit') // 弹出层标题
54 54 const actionType = ref('') // 操作按钮的类型
55 55 // ========== 详情相关 ==========
56   -const detailRef = ref() // 详情 Ref
  56 +const detailData = ref() // 详情 Ref
57 57 const handleDetail = (row: SmsLoglApi.SmsLogVO) => {
58 58 // 设置数据
59   - detailRef.value = row
  59 + detailData.value = row
60 60 dialogVisible.value = true
61 61 }
62 62  
... ...
yudao-ui-admin-vue3/src/views/system/tenant/index.vue
... ... @@ -63,7 +63,7 @@
63 63 <Descriptions
64 64 v-if="actionType === 'detail'"
65 65 :schema="allSchemas.detailSchema"
66   - :data="detailRef"
  66 + :data="detailData"
67 67 >
68 68 <template #packageId="{ row }">
69 69 <el-tag v-if="row.packageId === 0" type="danger">系统租户</el-tag>
... ... @@ -112,7 +112,7 @@ const actionType = ref(&#39;&#39;) // 操作按钮的类型
112 112 const dialogVisible = ref(false) // 是否显示弹出层
113 113 const dialogTitle = ref('edit') // 弹出层标题
114 114 const formRef = ref<FormExpose>() // 表单 Ref
115   -const detailRef = ref() // 详情 Ref
  115 +const detailData = ref() // 详情 Ref
116 116 const getPackageName = (packageId: number) => {
117 117 for (let item of tenantPackageOption) {
118 118 if (item.value === packageId) {
... ... @@ -147,7 +147,7 @@ const handleUpdate = async (rowId: number) =&gt; {
147 147 const handleDetail = async (rowId: number) => {
148 148 // 设置数据
149 149 const res = await TenantApi.getTenantApi(rowId)
150   - detailRef.value = res
  150 + detailData.value = res
151 151 setDialogTile('detail')
152 152 }
153 153  
... ...
yudao-ui-admin-vue3/src/views/system/tenantPackage/index.vue
... ... @@ -66,7 +66,7 @@
66 66 </template>
67 67 <script setup lang="ts" name="TenantPackage">
68 68 import { onMounted, ref, unref } from 'vue'
69   -import { handleTree } from '@/utils/tree'
  69 +import { handleTree, defaultProps } from '@/utils/tree'
70 70 import { useI18n } from '@/hooks/web/useI18n'
71 71 import { useMessage } from '@/hooks/web/useMessage'
72 72 import { useVxeGrid } from '@/hooks/web/useVxeGrid'
... ... @@ -93,12 +93,6 @@ const actionType = ref(&#39;&#39;) // 操作按钮的类型
93 93 const dialogVisible = ref(false) // 是否显示弹出层
94 94 const dialogTitle = ref('edit') // 弹出层标题
95 95  
96   -const defaultProps = {
97   - children: 'children',
98   - label: 'name',
99   - value: 'id'
100   -}
101   -
102 96 // 全选/全不选
103 97 const handleCheckedTreeNodeAll = () => {
104 98 treeRef.value!.setCheckedNodes(treeNodeAll.value ? menuOptions.value : [])
... ... @@ -155,7 +149,7 @@ const submitForm = async () =&gt; {
155 149 // 提交请求
156 150 try {
157 151 const data = unref(formRef)?.formModel as TenantPackageApi.TenantPackageVO
158   - data.menuIds = treeRef.value!.getCheckedKeys(false) as string[]
  152 + data.menuIds = treeRef.value!.getCheckedKeys(false) as number[]
159 153 if (actionType.value === 'create') {
160 154 await TenantPackageApi.createTenantPackageTypeApi(data)
161 155 message.success(t('common.createSuccess'))
... ...
yudao-ui-admin-vue3/src/views/system/user/index.vue
... ... @@ -77,7 +77,14 @@
77 77 v-hasPermi="['system:user:update']"
78 78 @click="handleDetail(row.id)"
79 79 />
80   - <el-dropdown class="p-0.5" v-hasPermi="['infra:job:trigger', 'infra:job:query']">
  80 + <el-dropdown
  81 + class="p-0.5"
  82 + v-hasPermi="[
  83 + 'system:user:update-password',
  84 + 'system:permission:assign-user-role',
  85 + 'system:user:delete'
  86 + ]"
  87 + >
81 88 <XTextButton :title="t('action.more')" postIcon="ep:arrow-down" />
82 89 <template #dropdown>
83 90 <el-dropdown-menu>
... ... @@ -123,17 +130,17 @@
123 130 :schema="allSchemas.formSchema"
124 131 ref="formRef"
125 132 >
126   - <template #deptId>
  133 + <template #deptId="form">
127 134 <el-tree-select
128 135 node-key="id"
129   - v-model="deptId"
  136 + v-model="form['deptId']"
130 137 :props="defaultProps"
131 138 :data="deptOptions"
132 139 check-strictly
133 140 />
134 141 </template>
135   - <template #postIds>
136   - <el-select v-model="postIds" multiple :placeholder="t('common.selectText')">
  142 + <template #postIds="form">
  143 + <el-select v-model="form['postIds']" multiple :placeholder="t('common.selectText')">
137 144 <el-option
138 145 v-for="item in postOptions"
139 146 :key="item.id"
... ... @@ -277,7 +284,7 @@ import {
277 284 } from 'element-plus'
278 285 import { useRouter } from 'vue-router'
279 286 import { VxeGridInstance } from 'vxe-table'
280   -import { handleTree } from '@/utils/tree'
  287 +import { handleTree, defaultProps } from '@/utils/tree'
281 288 import download from '@/utils/download'
282 289 import { CommonStatusEnum } from '@/utils/constants'
283 290 import { getAccessToken, getTenantId } from '@/utils/auth'
... ... @@ -299,11 +306,6 @@ import {
299 306 const { t } = useI18n() // 国际化
300 307 const message = useMessage() // 消息弹窗
301 308  
302   -const defaultProps = {
303   - children: 'children',
304   - label: 'name',
305   - value: 'id'
306   -}
307 309 const queryParams = reactive({
308 310 deptId: null
309 311 })
... ... @@ -320,7 +322,7 @@ const { gridOptions, getList, deleteData, exportList } = useVxeGrid&lt;UserApi.User
320 322 })
321 323 // ========== 创建部门树结构 ==========
322 324 const filterText = ref('')
323   -const deptOptions = ref<any[]>([]) // 树形结构
  325 +const deptOptions = ref<Tree[]>([]) // 树形结构
324 326 const treeRef = ref<InstanceType<typeof ElTree>>()
325 327 const getTree = async () => {
326 328 const res = await listSimpleDeptApi()
... ... @@ -347,8 +349,6 @@ const actionType = ref(&#39;&#39;) // 操作按钮的类型
347 349 const dialogVisible = ref(false) // 是否显示弹出层
348 350 const dialogTitle = ref('edit') // 弹出层标题
349 351 const formRef = ref<FormExpose>() // 表单 Ref
350   -const deptId = ref() // 部门ID
351   -const postIds = ref<string[]>([]) // 岗位ID
352 352 const postOptions = ref<PostVO[]>([]) //岗位列表
353 353  
354 354 // 获取岗位列表
... ... @@ -367,8 +367,6 @@ const setDialogTile = async (type: string) =&gt; {
367 367 const handleCreate = async () => {
368 368 setDialogTile('create')
369 369 // 重置表单
370   - deptId.value = null
371   - postIds.value = []
372 370 await nextTick()
373 371 if (allSchemas.formSchema[0].field !== 'username') {
374 372 unref(formRef)?.addSchema(
... ... @@ -398,8 +396,6 @@ const handleUpdate = async (rowId: number) =&gt; {
398 396 unref(formRef)?.delSchema('password')
399 397 // 设置数据
400 398 const res = await UserApi.getUserApi(rowId)
401   - deptId.value = res.deptId
402   - postIds.value = res.postIds
403 399 unref(formRef)?.setValues(res)
404 400 }
405 401 const detailData = ref()
... ... @@ -421,8 +417,6 @@ const submitForm = async () =&gt; {
421 417 // 提交请求
422 418 try {
423 419 const data = unref(formRef)?.formModel as UserApi.UserVO
424   - data.deptId = deptId.value
425   - data.postIds = postIds.value
426 420 if (actionType.value === 'create') {
427 421 await UserApi.createUserApi(data)
428 422 message.success(t('common.createSuccess'))
... ...
yudao-ui-admin-vue3/src/views/system/user/user.data.ts
... ... @@ -10,6 +10,7 @@ export const rules = reactive({
10 10 username: [required],
11 11 nickname: [required],
12 12 email: [required],
  13 + postIds: [required],
13 14 status: [required],
14 15 mobile: [
15 16 {
... ...
yudao-ui-admin-vue3/vite.config.ts
1 1 import { resolve } from 'path'
2 2 import { loadEnv } from 'vite'
3 3 import type { UserConfig, ConfigEnv } from 'vite'
4   -import Vue from '@vitejs/plugin-vue'
5   -import VueJsx from '@vitejs/plugin-vue-jsx'
6   -import VueI18n from '@intlify/vite-plugin-vue-i18n'
7   -import WindiCSS from 'vite-plugin-windicss'
8   -import progress from 'vite-plugin-progress'
9   -import EslintPlugin from 'vite-plugin-eslint'
10   -import PurgeIcons from 'vite-plugin-purge-icons'
11   -import { createHtmlPlugin } from 'vite-plugin-html'
12   -import viteCompression from 'vite-plugin-compression'
13   -import vueSetupExtend from 'vite-plugin-vue-setup-extend'
14   -import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
15   -import { createStyleImportPlugin, ElementPlusResolve, VxeTableResolve } from 'vite-plugin-style-import'
16   -
  4 +import { createVitePlugins } from './build/vite'
  5 +import { include, exclude } from "./build/vite/optimize"
17 6 // 当前执行node命令时文件夹的地址(工作目录)
18 7 const root = process.cwd()
19 8  
... ... @@ -44,68 +33,16 @@ export default ({ command, mode }: ConfigEnv): UserConfig =&gt; {
44 33 open: env.VITE_OPEN,
45 34 // 本地跨域代理
46 35 proxy: {
47   - ['/dev-api']: {
  36 + ['/admin-api']: {
48 37 target: env.VITE_BASE_URL,
49 38 ws: false,
50 39 changeOrigin: true,
51   - rewrite: (path) => path.replace(new RegExp(`^/dev-api`), ''),
  40 + rewrite: (path) => path.replace(new RegExp(`^/admin-api`), ''),
52 41 },
53 42 },
54 43 },
55   - plugins: [
56   - Vue(),
57   - VueJsx(),
58   - WindiCSS(),
59   - progress(),
60   - PurgeIcons(),
61   - vueSetupExtend(),
62   - createStyleImportPlugin({
63   - resolves: [ElementPlusResolve(),VxeTableResolve()],
64   - libs: [{
65   - libraryName: 'element-plus',
66   - esModule: true,
67   - resolveStyle: (name) => {
68   - return `element-plus/es/components/${name.substring(3)}/style/css`
69   - }
70   - },{
71   - libraryName: 'vxe-table',
72   - esModule: true,
73   - resolveStyle: (name) => {
74   - return `vxe-table/es/${name}/style.css`
75   - }
76   - }]
77   - }),
78   - EslintPlugin({
79   - cache: false,
80   - include: ['src/**/*.vue', 'src/**/*.ts', 'src/**/*.tsx'] // 检查的文件
81   - }),
82   - VueI18n({
83   - runtimeOnly: true,
84   - compositionOnly: true,
85   - include: [resolve(__dirname, 'src/locales/**')]
86   - }),
87   - createSvgIconsPlugin({
88   - iconDirs: [pathResolve('src/assets/svgs')],
89   - symbolId: 'icon-[dir]-[name]',
90   - svgoOptions: true
91   - }),
92   - viteCompression({
93   - verbose: true, // 是否在控制台输出压缩结果
94   - disable: false, // 是否禁用
95   - threshold: 10240, // 体积大于 threshold 才会被压缩,单位 b
96   - algorithm: 'gzip', // 压缩算法,可选 [ 'gzip' , 'brotliCompress' ,'deflate' , 'deflateRaw']
97   - ext: '.gz', // 生成的压缩包后缀
98   - deleteOriginFile: true //压缩后是否删除源文件
99   - }),
100   - createHtmlPlugin({
101   - inject: {
102   - data: {
103   - title: env.VITE_APP_TITLE,
104   - injectScript: `<script src="./inject.js"></script>`
105   - }
106   - }
107   - })
108   - ],
  44 + // 项目使用的vite插件。 单独提取到build/vite/plugin中管理
  45 + plugins: createVitePlugins(env.VITE_APP_TITLE),
109 46 css: {
110 47 preprocessorOptions: {
111 48 scss: {
... ... @@ -139,32 +76,6 @@ export default ({ command, mode }: ConfigEnv): UserConfig =&gt; {
139 76 }
140 77 }
141 78 },
142   - optimizeDeps: {
143   - include: [
144   - 'vue',
145   - 'vue-router',
146   - 'vue-types',
147   - 'vue-i18n',
148   - 'vxe-table',
149   - 'xe-utils',
150   - 'lodash-es',
151   - 'element-plus/es',
152   - 'element-plus/es/locale/lang/zh-cn',
153   - 'element-plus/es/locale/lang/en',
154   - '@iconify/iconify',
155   - '@vueuse/core',
156   - 'axios',
157   - 'qs',
158   - 'dayjs',
159   - 'echarts',
160   - 'echarts-wordcloud',
161   - 'intro.js',
162   - 'qrcode',
163   - 'pinia',
164   - 'crypto-js',
165   - '@wangeditor/editor',
166   - '@wangeditor/editor-for-vue'
167   - ]
168   - }
  79 + optimizeDeps: { include, exclude }
169 80 }
170 81 }
... ...
yudao-ui-admin/src/components/Verifition/Verify/VerifyPoints.vue
... ... @@ -223,7 +223,6 @@ export default {
223 223 this.checkPosArr.splice(0, this.checkPosArr.length)
224 224 this.num = 1
225 225 this.getPictrue()
226   - this.text = '验证失败'
227 226 this.showRefresh = true
228 227 },
229 228  
... ...
yudao-ui-admin/src/views/login.vue
... ... @@ -53,10 +53,10 @@
53 53 <el-form-item prop="mobileCode">
54 54 <el-input v-model="loginForm.mobileCode" type="text" auto-complete="off" placeholder="短信验证码"
55 55 @keyup.enter.native="handleLogin">
56   - <template slot="icon">
  56 + <template v-slot="icon">
57 57 <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon"/>
58 58 </template>
59   - <template slot="append">
  59 + <template v-slot="append">
60 60 <span v-if="mobileCodeTimer <= 0" class="getMobileCode" @click="getSmsCode" style="cursor: pointer;">获取验证码</span>
61 61 <span v-if="mobileCodeTimer > 0" class="getMobileCode">{{ mobileCodeTimer }}秒后可重新获取</span>
62 62 </template>
... ... @@ -115,6 +115,7 @@ import {
115 115 } from "@/utils/auth";
116 116  
117 117 import Verify from '@/components/Verifition/Verify';
  118 +import {resetUserPwd} from "@/api/system/user";
118 119  
119 120 export default {
120 121 name: "Login",
... ... @@ -254,19 +255,40 @@ export default {
254 255 }
255 256 });
256 257 },
257   - doSocialLogin(socialTypeEnum) {
  258 + async doSocialLogin(socialTypeEnum) {
258 259 // 设置登录中
259 260 this.loading = true;
260   - // 计算 redirectUri
261   - const redirectUri = location.origin + '/social-login?'
262   - + encodeURIComponent('type=' + socialTypeEnum.type + '&redirect=' + (this.redirect || "/")); // 重定向不能丢
263   - // const redirectUri = 'http://127.0.0.1:48080/api/gitee/callback';
264   - // const redirectUri = 'http://127.0.0.1:48080/api/dingtalk/callback';
265   - // 进行跳转
266   - socialAuthRedirect(socialTypeEnum.type, encodeURIComponent(redirectUri)).then((res) => {
267   - // console.log(res.url);
268   - window.location.href = res.data;
269   - });
  261 + let tenant = false;
  262 + if (this.tenantEnable) {
  263 + await this.$prompt('请输入租户名称', "提示", {
  264 + confirmButtonText: "确定",
  265 + cancelButtonText: "取消"
  266 + }).then(({value}) => {
  267 + getTenantIdByName(value).then(res => {
  268 + const tenantId = res.data;
  269 + tenant = true
  270 + if (tenantId && tenantId >= 0) {
  271 + setTenantId(tenantId)
  272 + }
  273 + });
  274 + }).catch(() => {
  275 + return false
  276 + });
  277 + } else {
  278 + tenant = true
  279 + }
  280 + if(tenant){
  281 + // 计算 redirectUri
  282 + const redirectUri = location.origin + '/social-login?'
  283 + + encodeURIComponent('type=' + socialTypeEnum.type + '&redirect=' + (this.redirect || "/")); // 重定向不能丢
  284 + // const redirectUri = 'http://127.0.0.1:48080/api/gitee/callback';
  285 + // const redirectUri = 'http://127.0.0.1:48080/api/dingtalk/callback';
  286 + // 进行跳转
  287 + socialAuthRedirect(socialTypeEnum.type, encodeURIComponent(redirectUri)).then((res) => {
  288 + // console.log(res.url);
  289 + window.location.href = res.data;
  290 + });
  291 + }
270 292 },
271 293 /** ========== 以下为升级短信登录 ========== */
272 294 getSmsCode() {
... ...