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,15 +28,15 @@
28 <dynamic-datasource.version>3.5.2</dynamic-datasource.version> 28 <dynamic-datasource.version>3.5.2</dynamic-datasource.version>
29 <redisson.version>3.18.0</redisson.version> 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 <resilience4j.version>1.7.1</resilience4j.version> 32 <resilience4j.version>1.7.1</resilience4j.version>
33 <!-- 监控相关 --> 33 <!-- 监控相关 -->
34 <skywalking.version>8.12.0</skywalking.version> 34 <skywalking.version>8.12.0</skywalking.version>
35 <spring-boot-admin.version>2.7.7</spring-boot-admin.version> 35 <spring-boot-admin.version>2.7.7</spring-boot-admin.version>
36 <opentracing.version>0.33.0</opentracing.version> 36 <opentracing.version>0.33.0</opentracing.version>
37 <!-- Test 测试相关 --> 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 <mockito-inline.version>4.8.0</mockito-inline.version> 40 <mockito-inline.version>4.8.0</mockito-inline.version>
41 <!-- Bpm 工作流相关 --> 41 <!-- Bpm 工作流相关 -->
42 <flowable.version>6.7.2</flowable.version> 42 <flowable.version>6.7.2</flowable.version>
@@ -50,19 +50,19 @@ @@ -50,19 +50,19 @@
50 <fastjson.version>1.2.83</fastjson.version> 50 <fastjson.version>1.2.83</fastjson.version>
51 <guava.version>31.1-jre</guava.version> 51 <guava.version>31.1-jre</guava.version>
52 <guice.version>5.1.0</guice.version> 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 <commons-net.version>3.8.0</commons-net.version> 54 <commons-net.version>3.8.0</commons-net.version>
55 <jsch.version>0.1.55</jsch.version> 55 <jsch.version>0.1.55</jsch.version>
56 <tika-core.version>2.5.0</tika-core.version> 56 <tika-core.version>2.5.0</tika-core.version>
57 <aj-captcha.version>1.3.0</aj-captcha.version> 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 <okio.version>3.0.0</okio.version> 60 <okio.version>3.0.0</okio.version>
61 <okhttp3.version>4.10.0</okhttp3.version> 61 <okhttp3.version>4.10.0</okhttp3.version>
62 <minio.version>8.4.6</minio.version> 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 <aliyun-java-sdk-dysmsapi.version>2.2.1</aliyun-java-sdk-dysmsapi.version> 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 <justauth.version>1.4.0</justauth.version> 66 <justauth.version>1.4.0</justauth.version>
67 <jimureport.version>1.5.4</jimureport.version> 67 <jimureport.version>1.5.4</jimureport.version>
68 <xercesImpl.version>2.12.2</xercesImpl.version> 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 package cn.iocoder.yudao.framework.common.util.object; 1 package cn.iocoder.yudao.framework.common.util.object;
2 2
3 -import cn.hutool.core.util.ArrayUtil;  
4 import cn.hutool.core.util.ObjectUtil; 3 import cn.hutool.core.util.ObjectUtil;
5 import cn.hutool.core.util.ReflectUtil; 4 import cn.hutool.core.util.ReflectUtil;
6 5
7 import java.lang.reflect.Field; 6 import java.lang.reflect.Field;
8 import java.util.Arrays; 7 import java.util.Arrays;
9 -import java.util.Objects;  
10 import java.util.function.Consumer; 8 import java.util.function.Consumer;
11 9
12 /** 10 /**
@@ -47,6 +45,7 @@ public class ObjectUtils { @@ -47,6 +45,7 @@ public class ObjectUtils {
47 return obj1.compareTo(obj2) > 0 ? obj1 : obj2; 45 return obj1.compareTo(obj2) > 0 ? obj1 : obj2;
48 } 46 }
49 47
  48 + @SafeVarargs
50 public static <T> T defaultIfNull(T... array) { 49 public static <T> T defaultIfNull(T... array) {
51 for (T item : array) { 50 for (T item : array) {
52 if (item != null) { 51 if (item != null) {
@@ -56,6 +55,7 @@ public class ObjectUtils { @@ -56,6 +55,7 @@ public class ObjectUtils {
56 return null; 55 return null;
57 } 56 }
58 57
  58 + @SafeVarargs
59 public static <T> boolean equalsAny(T obj, T... array) { 59 public static <T> boolean equalsAny(T obj, T... array) {
60 return Arrays.asList(array).contains(obj); 60 return Arrays.asList(array).contains(obj);
61 } 61 }
yudao-framework/yudao-spring-boot-starter-biz-pay/pom.xml
@@ -52,7 +52,7 @@ @@ -52,7 +52,7 @@
52 <dependency> 52 <dependency>
53 <groupId>com.alipay.sdk</groupId> 53 <groupId>com.alipay.sdk</groupId>
54 <artifactId>alipay-sdk-java</artifactId> 54 <artifactId>alipay-sdk-java</artifactId>
55 - <version>4.33.44.ALL</version> 55 + <version>4.34.71.ALL</version>
56 <exclusions> 56 <exclusions>
57 <exclusion> 57 <exclusion>
58 <groupId>org.bouncycastle</groupId> 58 <groupId>org.bouncycastle</groupId>
yudao-framework/yudao-spring-boot-starter-file/pom.xml
@@ -46,7 +46,7 @@ @@ -46,7 +46,7 @@
46 <dependency> 46 <dependency>
47 <groupId>com.fasterxml.jackson.core</groupId> 47 <groupId>com.fasterxml.jackson.core</groupId>
48 <artifactId>jackson-databind</artifactId> 48 <artifactId>jackson-databind</artifactId>
49 - <version>2.13.2.2</version> 49 + <version>2.13.4</version>
50 </dependency> 50 </dependency>
51 <dependency> 51 <dependency>
52 <groupId>com.fasterxml.jackson.core</groupId> 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,7 +48,7 @@ public interface BpmTaskConvert {
48 return null; 48 return null;
49 } 49 }
50 try { 50 try {
51 - T newInstance = target.newInstance(); 51 + T newInstance = target.getDeclaredConstructor().newInstance();
52 BeanUtils.copyProperties(source, newInstance); 52 BeanUtils.copyProperties(source, newInstance);
53 return newInstance; 53 return newInstance;
54 } catch (Exception e) { 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,7 +5,7 @@ export interface ${simpleClassName}VO {
5 #if ($column.createOperation || $column.updateOperation) 5 #if ($column.createOperation || $column.updateOperation)
6 #if(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer" || ${column.javaType.toLowerCase()} == "double") 6 #if(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer" || ${column.javaType.toLowerCase()} == "double")
7 ${column.javaField}: number 7 ${column.javaField}: number
8 -#elseif(${column.javaType.toLowerCase()} == "date") 8 +#elseif(${column.javaType.toLowerCase()} == "date" || ${column.javaType.toLowerCase()} == "localdatetime")
9 ${column.javaField}: Date 9 ${column.javaField}: Date
10 #else 10 #else
11 ${column.javaField}: ${column.javaType.toLowerCase()} 11 ${column.javaField}: ${column.javaType.toLowerCase()}
@@ -19,7 +19,7 @@ export interface ${simpleClassName}PageReqVO extends PageParam { @@ -19,7 +19,7 @@ export interface ${simpleClassName}PageReqVO extends PageParam {
19 #if (${column.listOperation})##查询操作 19 #if (${column.listOperation})##查询操作
20 #if(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer" || ${column.javaType.toLowerCase()} == "double") 20 #if(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer" || ${column.javaType.toLowerCase()} == "double")
21 ${column.javaField}?: number 21 ${column.javaField}?: number
22 -#elseif(${column.javaType.toLowerCase()} == "date") 22 +#elseif(${column.javaType.toLowerCase()} == "date" || ${column.javaType.toLowerCase()} == "localdatetime")
23 ${column.javaField}?: Date[] 23 ${column.javaField}?: Date[]
24 #else 24 #else
25 ${column.javaField}?: ${column.javaType.toLowerCase()} 25 ${column.javaField}?: ${column.javaType.toLowerCase()}
@@ -33,8 +33,8 @@ export interface ${simpleClassName}ExcelReqVO { @@ -33,8 +33,8 @@ export interface ${simpleClassName}ExcelReqVO {
33 #if (${column.listOperation})##查询操作 33 #if (${column.listOperation})##查询操作
34 #if(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer" || ${column.javaType.toLowerCase()} == "double") 34 #if(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer" || ${column.javaType.toLowerCase()} == "double")
35 ${column.javaField}?: number 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 #else 38 #else
39 ${column.javaField}?: ${column.javaType.toLowerCase()} 39 ${column.javaField}?: ${column.javaType.toLowerCase()}
40 #end 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,6 +28,9 @@ const crudSchemas = reactive&lt;VxeCrudSchema&gt;({
28 { 28 {
29 title: '${column.columnComment}', 29 title: '${column.columnComment}',
30 field: '${column.javaField}', 30 field: '${column.javaField}',
  31 + #if (!$column.listOperationResult)
  32 + isTable: false,
  33 + #end
31 #if ("" != $dictType)## 有数据字典 34 #if ("" != $dictType)## 有数据字典
32 dictType: DICT_TYPE.$dictType.toUpperCase(), 35 dictType: DICT_TYPE.$dictType.toUpperCase(),
33 #if (${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer") 36 #if (${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer")
@@ -39,7 +42,8 @@ const crudSchemas = reactive&lt;VxeCrudSchema&gt;({ @@ -39,7 +42,8 @@ const crudSchemas = reactive&lt;VxeCrudSchema&gt;({
39 #if (!$column.createOperation && !$column.updateOperation) 42 #if (!$column.createOperation && !$column.updateOperation)
40 isForm: false, 43 isForm: false,
41 #elseif(!("" != $column.dictType)) 44 #elseif(!("" != $column.dictType))
42 - #if ($column.htmlType == "datetime")## 时间框 45 + #if (${column.javaType.toLowerCase()} == "date" || ${column.javaType.toLowerCase()} == "localdatetime")
  46 + formatter: 'formatDate',
43 form: { 47 form: {
44 component: 'DatePicker', 48 component: 'DatePicker',
45 componentProps: { 49 componentProps: {
@@ -73,9 +77,20 @@ const crudSchemas = reactive&lt;VxeCrudSchema&gt;({ @@ -73,9 +77,20 @@ const crudSchemas = reactive&lt;VxeCrudSchema&gt;({
73 component: 'InputNumber', 77 component: 'InputNumber',
74 value: 0 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 #end 91 #end
77 #end 92 #end
78 - #if ($column.listOperationResult) 93 + #if ($column.listOperation)
79 #if($column.htmlType == "input") 94 #if($column.htmlType == "input")
80 isSearch: true, 95 isSearch: true,
81 #elseif("" != $dictType) 96 #elseif("" != $dictType)
yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/index.vue.vm
@@ -74,7 +74,7 @@ @@ -74,7 +74,7 @@
74 </template> 74 </template>
75 </XModal> 75 </XModal>
76 </template> 76 </template>
77 -<script setup lang="ts" name="${table.moduleName}"> 77 +<script setup lang="ts" name="${simpleClassName}">
78 // 全局相关的 import 78 // 全局相关的 import
79 import { ref, unref } from 'vue' 79 import { ref, unref } from 'vue'
80 import { useI18n } from '@/hooks/web/useI18n' 80 import { useI18n } from '@/hooks/web/useI18n'
@@ -91,7 +91,7 @@ const message = useMessage() // 消息弹窗 @@ -91,7 +91,7 @@ const message = useMessage() // 消息弹窗
91 91
92 // 列表相关的变量 92 // 列表相关的变量
93 const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref 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 allSchemas: allSchemas, 95 allSchemas: allSchemas,
96 getListApi: ${simpleClassName}Api.get${simpleClassName}PageApi, 96 getListApi: ${simpleClassName}Api.get${simpleClassName}PageApi,
97 deleteApi: ${simpleClassName}Api.delete${simpleClassName}Api, 97 deleteApi: ${simpleClassName}Api.delete${simpleClassName}Api,
@@ -169,7 +169,7 @@ const submitForm = async () =&gt; { @@ -169,7 +169,7 @@ const submitForm = async () =&gt; {
169 } finally { 169 } finally {
170 actionLoading.value = false 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,5 +6,4 @@
6 /vite.config.ts 6 /vite.config.ts
7 /src/types/env.d.ts 7 /src/types/env.d.ts
8 /docs/**/* 8 /docs/**/*
9 -/plop/**/*  
10 CHANGELOG 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 "description": "基于vue3、vite3、element-plus、typesScript", 4 "description": "基于vue3、vite3、element-plus、typesScript",
5 "author": "xingyu", 5 "author": "xingyu",
6 "private": false, 6 "private": false,
7 "scripts": { 7 "scripts": {
8 "i": "pnpm install", 8 "i": "pnpm install",
9 - "dev": "vite --mode base --open", 9 + "dev": "vite --mode base",
10 "ts:check": "vue-tsc --noEmit", 10 "ts:check": "vue-tsc --noEmit",
11 "build:pro": "vite build --mode pro", 11 "build:pro": "vite build --mode pro",
12 "build:dev": "vite build --mode dev", 12 "build:dev": "vite build --mode dev",
@@ -21,8 +21,7 @@ @@ -21,8 +21,7 @@
21 "lint:format": "prettier --write --loglevel warn \"src/**/*.{js,ts,json,tsx,css,less,scss,vue,html,md}\"", 21 "lint:format": "prettier --write --loglevel warn \"src/**/*.{js,ts,json,tsx,css,less,scss,vue,html,md}\"",
22 "lint:style": "stylelint --fix \"**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/", 22 "lint:style": "stylelint --fix \"**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/",
23 "lint:lint-staged": "lint-staged -c ", 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 "dependencies": { 26 "dependencies": {
28 "@iconify/iconify": "^3.0.1", 27 "@iconify/iconify": "^3.0.1",
@@ -31,14 +30,13 @@ @@ -31,14 +30,13 @@
31 "@wangeditor/editor-for-vue": "^5.1.10", 30 "@wangeditor/editor-for-vue": "^5.1.10",
32 "@zxcvbn-ts/core": "^2.1.0", 31 "@zxcvbn-ts/core": "^2.1.0",
33 "animate.css": "^4.1.1", 32 "animate.css": "^4.1.1",
34 - "axios": "^1.2.0", 33 + "axios": "^1.2.1",
35 "crypto-js": "^4.1.1", 34 "crypto-js": "^4.1.1",
36 - "dayjs": "^1.11.6", 35 + "dayjs": "^1.11.7",
37 "echarts": "^5.4.0", 36 "echarts": "^5.4.0",
38 "echarts-wordcloud": "^2.1.0", 37 "echarts-wordcloud": "^2.1.0",
39 - "element-plus": "2.2.25", 38 + "element-plus": "2.2.26",
40 "intro.js": "^6.0.0", 39 "intro.js": "^6.0.0",
41 - "js-cookie": "^3.0.1",  
42 "jsencrypt": "^3.3.1", 40 "jsencrypt": "^3.3.1",
43 "lodash-es": "^4.17.21", 41 "lodash-es": "^4.17.21",
44 "mitt": "^3.0.0", 42 "mitt": "^3.0.0",
@@ -59,52 +57,54 @@ @@ -59,52 +57,54 @@
59 "devDependencies": { 57 "devDependencies": {
60 "@commitlint/cli": "^17.3.0", 58 "@commitlint/cli": "^17.3.0",
61 "@commitlint/config-conventional": "^17.3.0", 59 "@commitlint/config-conventional": "^17.3.0",
62 - "@iconify/json": "^2.1.145", 60 + "@iconify/json": "^2.1.149",
63 "@intlify/vite-plugin-vue-i18n": "^6.0.3", 61 "@intlify/vite-plugin-vue-i18n": "^6.0.3",
64 "@purge-icons/generated": "^0.9.0", 62 "@purge-icons/generated": "^0.9.0",
65 "@types/intro.js": "^5.1.0", 63 "@types/intro.js": "^5.1.0",
66 "@types/lodash-es": "^4.17.6", 64 "@types/lodash-es": "^4.17.6",
67 - "@types/node": "^18.11.9", 65 + "@types/node": "^18.11.11",
68 "@types/nprogress": "^0.2.0", 66 "@types/nprogress": "^0.2.0",
69 "@types/qrcode": "^1.5.0", 67 "@types/qrcode": "^1.5.0",
70 "@types/qs": "^6.9.7", 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 "@vitejs/plugin-vue": "^3.2.0", 72 "@vitejs/plugin-vue": "^3.2.0",
74 "@vitejs/plugin-vue-jsx": "^2.1.1", 73 "@vitejs/plugin-vue-jsx": "^2.1.1",
75 "autoprefixer": "^10.4.13", 74 "autoprefixer": "^10.4.13",
76 - "eslint": "^8.28.0", 75 + "consola": "^2.15.3",
  76 + "eslint": "^8.29.0",
77 "eslint-config-prettier": "^8.5.0", 77 "eslint-config-prettier": "^8.5.0",
78 "eslint-define-config": "^1.12.0", 78 "eslint-define-config": "^1.12.0",
79 "eslint-plugin-prettier": "^4.2.1", 79 "eslint-plugin-prettier": "^4.2.1",
80 "eslint-plugin-vue": "^9.8.0", 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 "postcss": "^8.4.19", 82 "postcss": "^8.4.19",
84 "postcss-html": "^1.5.0", 83 "postcss-html": "^1.5.0",
85 "postcss-scss": "^4.0.6", 84 "postcss-scss": "^4.0.6",
86 "prettier": "^2.8.0", 85 "prettier": "^2.8.0",
87 "rimraf": "^3.0.2", 86 "rimraf": "^3.0.2",
88 - "rollup": "^3.5.0", 87 + "rollup": "^3.6.0",
89 "sass": "^1.56.1", 88 "sass": "^1.56.1",
90 - "stylelint": "^14.15.0", 89 + "stylelint": "^14.16.0",
91 "stylelint-config-html": "^1.1.0", 90 "stylelint-config-html": "^1.1.0",
92 "stylelint-config-prettier": "^9.0.4", 91 "stylelint-config-prettier": "^9.0.4",
93 "stylelint-config-recommended": "^9.0.0", 92 "stylelint-config-recommended": "^9.0.0",
94 "stylelint-config-standard": "^29.0.0", 93 "stylelint-config-standard": "^29.0.0",
95 "stylelint-order": "^5.0.0", 94 "stylelint-order": "^5.0.0",
  95 + "terser": "^5.16.1",
96 "typescript": "4.9.3", 96 "typescript": "4.9.3",
97 - "vite": "3.2.4", 97 + "vite": "3.2.5",
98 "vite-plugin-compression": "^0.5.1", 98 "vite-plugin-compression": "^0.5.1",
  99 + "vite-plugin-ejs": "^1.6.4",
99 "vite-plugin-eslint": "^1.8.1", 100 "vite-plugin-eslint": "^1.8.1",
100 - "vite-plugin-html": "^3.2.0",  
101 "vite-plugin-progress": "^0.0.6", 101 "vite-plugin-progress": "^0.0.6",
102 "vite-plugin-purge-icons": "^0.9.1", 102 "vite-plugin-purge-icons": "^0.9.1",
103 "vite-plugin-style-import": "2.0.0", 103 "vite-plugin-style-import": "2.0.0",
104 "vite-plugin-svg-icons": "^2.0.1", 104 "vite-plugin-svg-icons": "^2.0.1",
105 "vite-plugin-vue-setup-extend": "^0.4.0", 105 "vite-plugin-vue-setup-extend": "^0.4.0",
106 "vite-plugin-windicss": "^1.8.8", 106 "vite-plugin-windicss": "^1.8.8",
107 - "vue-tsc": "^1.0.10", 107 + "vue-tsc": "^1.0.11",
108 "windicss": "^3.5.6" 108 "windicss": "^3.5.6"
109 }, 109 },
110 "engines": { 110 "engines": {
@@ -116,7 +116,7 @@ @@ -116,7 +116,7 @@
116 "url": "git+https://gitee.com/zhijiantianya/ruoyi-vue-pro" 116 "url": "git+https://gitee.com/zhijiantianya/ruoyi-vue-pro"
117 }, 117 },
118 "bugs": { 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 "homepage": "https://gitee.com/zhijiantianya/ruoyi-vue-pro" 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,17 +4,18 @@ specifiers:
4 '@commitlint/cli': ^17.3.0 4 '@commitlint/cli': ^17.3.0
5 '@commitlint/config-conventional': ^17.3.0 5 '@commitlint/config-conventional': ^17.3.0
6 '@iconify/iconify': ^3.0.1 6 '@iconify/iconify': ^3.0.1
7 - '@iconify/json': ^2.1.145 7 + '@iconify/json': ^2.1.149
8 '@intlify/vite-plugin-vue-i18n': ^6.0.3 8 '@intlify/vite-plugin-vue-i18n': ^6.0.3
9 '@purge-icons/generated': ^0.9.0 9 '@purge-icons/generated': ^0.9.0
10 '@types/intro.js': ^5.1.0 10 '@types/intro.js': ^5.1.0
11 '@types/lodash-es': ^4.17.6 11 '@types/lodash-es': ^4.17.6
12 - '@types/node': ^18.11.9 12 + '@types/node': ^18.11.11
13 '@types/nprogress': ^0.2.0 13 '@types/nprogress': ^0.2.0
14 '@types/qrcode': ^1.5.0 14 '@types/qrcode': ^1.5.0
15 '@types/qs': ^6.9.7 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 '@vitejs/plugin-vue': ^3.2.0 19 '@vitejs/plugin-vue': ^3.2.0
19 '@vitejs/plugin-vue-jsx': ^2.1.1 20 '@vitejs/plugin-vue-jsx': ^2.1.1
20 '@vueuse/core': ^9.6.0 21 '@vueuse/core': ^9.6.0
@@ -23,26 +24,25 @@ specifiers: @@ -23,26 +24,25 @@ specifiers:
23 '@zxcvbn-ts/core': ^2.1.0 24 '@zxcvbn-ts/core': ^2.1.0
24 animate.css: ^4.1.1 25 animate.css: ^4.1.1
25 autoprefixer: ^10.4.13 26 autoprefixer: ^10.4.13
26 - axios: ^1.2.0 27 + axios: ^1.2.1
  28 + consola: ^2.15.3
27 crypto-js: ^4.1.1 29 crypto-js: ^4.1.1
28 - dayjs: ^1.11.6 30 + dayjs: ^1.11.7
29 echarts: ^5.4.0 31 echarts: ^5.4.0
30 echarts-wordcloud: ^2.1.0 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 eslint-config-prettier: ^8.5.0 35 eslint-config-prettier: ^8.5.0
34 eslint-define-config: ^1.12.0 36 eslint-define-config: ^1.12.0
35 eslint-plugin-prettier: ^4.2.1 37 eslint-plugin-prettier: ^4.2.1
36 eslint-plugin-vue: ^9.8.0 38 eslint-plugin-vue: ^9.8.0
37 intro.js: ^6.0.0 39 intro.js: ^6.0.0
38 - js-cookie: ^3.0.1  
39 jsencrypt: ^3.3.1 40 jsencrypt: ^3.3.1
40 - lint-staged: ^13.0.4 41 + lint-staged: ^13.1.0
41 lodash-es: ^4.17.21 42 lodash-es: ^4.17.21
42 mitt: ^3.0.0 43 mitt: ^3.0.0
43 nprogress: ^0.2.0 44 nprogress: ^0.2.0
44 pinia: ^2.0.27 45 pinia: ^2.0.27
45 - plop: ^3.1.1  
46 postcss: ^8.4.19 46 postcss: ^8.4.19
47 postcss-html: ^1.5.0 47 postcss-html: ^1.5.0
48 postcss-scss: ^4.0.6 48 postcss-scss: ^4.0.6
@@ -50,20 +50,21 @@ specifiers: @@ -50,20 +50,21 @@ specifiers:
50 qrcode: ^1.5.1 50 qrcode: ^1.5.1
51 qs: ^6.11.0 51 qs: ^6.11.0
52 rimraf: ^3.0.2 52 rimraf: ^3.0.2
53 - rollup: ^3.5.0 53 + rollup: ^3.6.0
54 sass: ^1.56.1 54 sass: ^1.56.1
55 - stylelint: ^14.15.0 55 + stylelint: ^14.16.0
56 stylelint-config-html: ^1.1.0 56 stylelint-config-html: ^1.1.0
57 stylelint-config-prettier: ^9.0.4 57 stylelint-config-prettier: ^9.0.4
58 stylelint-config-recommended: ^9.0.0 58 stylelint-config-recommended: ^9.0.0
59 stylelint-config-standard: ^29.0.0 59 stylelint-config-standard: ^29.0.0
60 stylelint-order: ^5.0.0 60 stylelint-order: ^5.0.0
  61 + terser: ^5.16.1
61 typescript: 4.9.3 62 typescript: 4.9.3
62 url: ^0.11.0 63 url: ^0.11.0
63 - vite: 3.2.4 64 + vite: 3.2.5
64 vite-plugin-compression: ^0.5.1 65 vite-plugin-compression: ^0.5.1
  66 + vite-plugin-ejs: ^1.6.4
65 vite-plugin-eslint: ^1.8.1 67 vite-plugin-eslint: ^1.8.1
66 - vite-plugin-html: ^3.2.0  
67 vite-plugin-progress: ^0.0.6 68 vite-plugin-progress: ^0.0.6
68 vite-plugin-purge-icons: ^0.9.1 69 vite-plugin-purge-icons: ^0.9.1
69 vite-plugin-style-import: 2.0.0 70 vite-plugin-style-import: 2.0.0
@@ -74,7 +75,7 @@ specifiers: @@ -74,7 +75,7 @@ specifiers:
74 vue-cropper: ^1.0.3 75 vue-cropper: ^1.0.3
75 vue-i18n: 9.2.2 76 vue-i18n: 9.2.2
76 vue-router: ^4.1.6 77 vue-router: ^4.1.6
77 - vue-tsc: ^1.0.10 78 + vue-tsc: ^1.0.11
78 vue-types: ^5.0.1 79 vue-types: ^5.0.1
79 vxe-table: ^4.3.6 80 vxe-table: ^4.3.6
80 web-storage-cache: ^1.1.1 81 web-storage-cache: ^1.1.1
@@ -88,14 +89,13 @@ dependencies: @@ -88,14 +89,13 @@ dependencies:
88 '@wangeditor/editor-for-vue': 5.1.12_3apfu3xbp6awzuex7ed3sbrv6y 89 '@wangeditor/editor-for-vue': 5.1.12_3apfu3xbp6awzuex7ed3sbrv6y
89 '@zxcvbn-ts/core': 2.1.0 90 '@zxcvbn-ts/core': 2.1.0
90 animate.css: 4.1.1 91 animate.css: 4.1.1
91 - axios: 1.2.0 92 + axios: 1.2.1
92 crypto-js: 4.1.1 93 crypto-js: 4.1.1
93 - dayjs: 1.11.6 94 + dayjs: 1.11.7
94 echarts: 5.4.0 95 echarts: 5.4.0
95 echarts-wordcloud: 2.1.0_echarts@5.4.0 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 intro.js: 6.0.0 98 intro.js: 6.0.0
98 - js-cookie: 3.0.1  
99 jsencrypt: 3.3.1 99 jsencrypt: 3.3.1
100 lodash-es: 4.17.21 100 lodash-es: 4.17.21
101 mitt: 3.0.0 101 mitt: 3.0.0
@@ -116,52 +116,54 @@ dependencies: @@ -116,52 +116,54 @@ dependencies:
116 devDependencies: 116 devDependencies:
117 '@commitlint/cli': 17.3.0 117 '@commitlint/cli': 17.3.0
118 '@commitlint/config-conventional': 17.3.0 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 '@purge-icons/generated': 0.9.0 121 '@purge-icons/generated': 0.9.0
122 '@types/intro.js': 5.1.0 122 '@types/intro.js': 5.1.0
123 '@types/lodash-es': 4.17.6 123 '@types/lodash-es': 4.17.6
124 - '@types/node': 18.11.9 124 + '@types/node': 18.11.11
125 '@types/nprogress': 0.2.0 125 '@types/nprogress': 0.2.0
126 '@types/qrcode': 1.5.0 126 '@types/qrcode': 1.5.0
127 '@types/qs': 6.9.7 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 autoprefixer: 10.4.13_postcss@8.4.19 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 eslint-define-config: 1.12.0 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 postcss: 8.4.19 141 postcss: 8.4.19
141 postcss-html: 1.5.0 142 postcss-html: 1.5.0
142 postcss-scss: 4.0.6_postcss@8.4.19 143 postcss-scss: 4.0.6_postcss@8.4.19
143 prettier: 2.8.0 144 prettier: 2.8.0
144 rimraf: 3.0.2 145 rimraf: 3.0.2
145 - rollup: 3.5.0 146 + rollup: 3.6.0
146 sass: 1.56.1 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 typescript: 4.9.3 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 windicss: 3.5.6 167 windicss: 3.5.6
166 168
167 packages: 169 packages:
@@ -217,7 +219,7 @@ packages: @@ -217,7 +219,7 @@ packages:
217 resolution: {integrity: sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==} 219 resolution: {integrity: sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==}
218 engines: {node: '>=6.9.0'} 220 engines: {node: '>=6.9.0'}
219 dependencies: 221 dependencies:
220 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2 222 + '@babel/types': 7.20.2
221 '@jridgewell/gen-mapping': 0.3.2 223 '@jridgewell/gen-mapping': 0.3.2
222 jsesc: 2.5.2 224 jsesc: 2.5.2
223 dev: true 225 dev: true
@@ -226,7 +228,7 @@ packages: @@ -226,7 +228,7 @@ packages:
226 resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} 228 resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==}
227 engines: {node: '>=6.9.0'} 229 engines: {node: '>=6.9.0'}
228 dependencies: 230 dependencies:
229 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2 231 + '@babel/types': 7.20.2
230 dev: true 232 dev: true
231 233
232 /@babel/helper-compilation-targets/7.20.0_@babel+core@7.20.2: 234 /@babel/helper-compilation-targets/7.20.0_@babel+core@7.20.2:
@@ -270,28 +272,28 @@ packages: @@ -270,28 +272,28 @@ packages:
270 engines: {node: '>=6.9.0'} 272 engines: {node: '>=6.9.0'}
271 dependencies: 273 dependencies:
272 '@babel/template': 7.18.10 274 '@babel/template': 7.18.10
273 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2 275 + '@babel/types': 7.20.2
274 dev: true 276 dev: true
275 277
276 /@babel/helper-hoist-variables/7.18.6: 278 /@babel/helper-hoist-variables/7.18.6:
277 resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} 279 resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==}
278 engines: {node: '>=6.9.0'} 280 engines: {node: '>=6.9.0'}
279 dependencies: 281 dependencies:
280 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2 282 + '@babel/types': 7.20.2
281 dev: true 283 dev: true
282 284
283 /@babel/helper-member-expression-to-functions/7.18.9: 285 /@babel/helper-member-expression-to-functions/7.18.9:
284 resolution: {integrity: sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==} 286 resolution: {integrity: sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==}
285 engines: {node: '>=6.9.0'} 287 engines: {node: '>=6.9.0'}
286 dependencies: 288 dependencies:
287 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2 289 + '@babel/types': 7.20.2
288 dev: true 290 dev: true
289 291
290 /@babel/helper-module-imports/7.18.6: 292 /@babel/helper-module-imports/7.18.6:
291 resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} 293 resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==}
292 engines: {node: '>=6.9.0'} 294 engines: {node: '>=6.9.0'}
293 dependencies: 295 dependencies:
294 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2 296 + '@babel/types': 7.20.2
295 dev: true 297 dev: true
296 298
297 /@babel/helper-module-transforms/7.20.2: 299 /@babel/helper-module-transforms/7.20.2:
@@ -302,10 +304,10 @@ packages: @@ -302,10 +304,10 @@ packages:
302 '@babel/helper-module-imports': 7.18.6 304 '@babel/helper-module-imports': 7.18.6
303 '@babel/helper-simple-access': 7.20.2 305 '@babel/helper-simple-access': 7.20.2
304 '@babel/helper-split-export-declaration': 7.18.6 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 '@babel/template': 7.18.10 308 '@babel/template': 7.18.10
307 '@babel/traverse': 7.20.1 309 '@babel/traverse': 7.20.1
308 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2 310 + '@babel/types': 7.20.2
309 transitivePeerDependencies: 311 transitivePeerDependencies:
310 - supports-color 312 - supports-color
311 dev: true 313 dev: true
@@ -314,7 +316,7 @@ packages: @@ -314,7 +316,7 @@ packages:
314 resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} 316 resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==}
315 engines: {node: '>=6.9.0'} 317 engines: {node: '>=6.9.0'}
316 dependencies: 318 dependencies:
317 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2 319 + '@babel/types': 7.20.2
318 dev: true 320 dev: true
319 321
320 /@babel/helper-plugin-utils/7.20.2: 322 /@babel/helper-plugin-utils/7.20.2:
@@ -330,7 +332,7 @@ packages: @@ -330,7 +332,7 @@ packages:
330 '@babel/helper-member-expression-to-functions': 7.18.9 332 '@babel/helper-member-expression-to-functions': 7.18.9
331 '@babel/helper-optimise-call-expression': 7.18.6 333 '@babel/helper-optimise-call-expression': 7.18.6
332 '@babel/traverse': 7.20.1 334 '@babel/traverse': 7.20.1
333 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2 335 + '@babel/types': 7.20.2
334 transitivePeerDependencies: 336 transitivePeerDependencies:
335 - supports-color 337 - supports-color
336 dev: true 338 dev: true
@@ -339,16 +341,24 @@ packages: @@ -339,16 +341,24 @@ packages:
339 resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} 341 resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==}
340 engines: {node: '>=6.9.0'} 342 engines: {node: '>=6.9.0'}
341 dependencies: 343 dependencies:
342 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2 344 + '@babel/types': 7.20.2
343 dev: true 345 dev: true
344 346
345 /@babel/helper-split-export-declaration/7.18.6: 347 /@babel/helper-split-export-declaration/7.18.6:
346 resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} 348 resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==}
347 engines: {node: '>=6.9.0'} 349 engines: {node: '>=6.9.0'}
348 dependencies: 350 dependencies:
349 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2 351 + '@babel/types': 7.20.2
350 dev: true 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 /@babel/helper-validator-option/7.18.6: 362 /@babel/helper-validator-option/7.18.6:
353 resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} 363 resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==}
354 engines: {node: '>=6.9.0'} 364 engines: {node: '>=6.9.0'}
@@ -360,7 +370,7 @@ packages: @@ -360,7 +370,7 @@ packages:
360 dependencies: 370 dependencies:
361 '@babel/template': 7.18.10 371 '@babel/template': 7.18.10
362 '@babel/traverse': 7.20.1 372 '@babel/traverse': 7.20.1
363 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2 373 + '@babel/types': 7.20.2
364 transitivePeerDependencies: 374 transitivePeerDependencies:
365 - supports-color 375 - supports-color
366 dev: true 376 dev: true
@@ -369,7 +379,7 @@ packages: @@ -369,7 +379,7 @@ packages:
369 resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} 379 resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==}
370 engines: {node: '>=6.9.0'} 380 engines: {node: '>=6.9.0'}
371 dependencies: 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 chalk: 2.4.2 383 chalk: 2.4.2
374 js-tokens: 4.0.0 384 js-tokens: 4.0.0
375 dev: true 385 dev: true
@@ -379,7 +389,7 @@ packages: @@ -379,7 +389,7 @@ packages:
379 engines: {node: '>=6.0.0'} 389 engines: {node: '>=6.0.0'}
380 hasBin: true 390 hasBin: true
381 dependencies: 391 dependencies:
382 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2 392 + '@babel/types': 7.20.2
383 393
384 /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.2: 394 /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.2:
385 resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} 395 resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==}
@@ -422,13 +432,18 @@ packages: @@ -422,13 +432,18 @@ packages:
422 regenerator-runtime: 0.13.11 432 regenerator-runtime: 0.13.11
423 dev: false 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 /@babel/template/7.18.10: 440 /@babel/template/7.18.10:
426 resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==} 441 resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==}
427 engines: {node: '>=6.9.0'} 442 engines: {node: '>=6.9.0'}
428 dependencies: 443 dependencies:
429 '@babel/code-frame': 7.18.6 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 dev: true 447 dev: true
433 448
434 /@babel/traverse/7.20.1: 449 /@babel/traverse/7.20.1:
@@ -441,8 +456,8 @@ packages: @@ -441,8 +456,8 @@ packages:
441 '@babel/helper-function-name': 7.19.0 456 '@babel/helper-function-name': 7.19.0
442 '@babel/helper-hoist-variables': 7.18.6 457 '@babel/helper-hoist-variables': 7.18.6
443 '@babel/helper-split-export-declaration': 7.18.6 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 debug: 4.3.4 461 debug: 4.3.4
447 globals: 11.12.0 462 globals: 11.12.0
448 transitivePeerDependencies: 463 transitivePeerDependencies:
@@ -453,10 +468,9 @@ packages: @@ -453,10 +468,9 @@ packages:
453 resolution: {integrity: sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==} 468 resolution: {integrity: sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==}
454 engines: {node: '>=6.9.0'} 469 engines: {node: '>=6.9.0'}
455 dependencies: 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 /@commitlint/cli/17.3.0: 475 /@commitlint/cli/17.3.0:
462 resolution: {integrity: sha512-/H0md7TsKflKzVPz226VfXzVafJFO1f9+r2KcFvmBu08V0T56lZU1s8WL7/xlxqLMqBTVaBf7Ixtc4bskdEEZg==} 476 resolution: {integrity: sha512-/H0md7TsKflKzVPz226VfXzVafJFO1f9+r2KcFvmBu08V0T56lZU1s8WL7/xlxqLMqBTVaBf7Ixtc4bskdEEZg==}
@@ -633,7 +647,7 @@ packages: @@ -633,7 +647,7 @@ packages:
633 '@jridgewell/trace-mapping': 0.3.9 647 '@jridgewell/trace-mapping': 0.3.9
634 dev: true 648 dev: true
635 649
636 - /@csstools/selector-specificity/2.0.2_45y636a2vqremknoajyxd5nkzy: 650 + /@csstools/selector-specificity/2.0.2_tbwh2mpcdwdeb2slx6bobindua:
637 resolution: {integrity: sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==} 651 resolution: {integrity: sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==}
638 engines: {node: ^12 || ^14 || >=16} 652 engines: {node: ^12 || ^14 || >=16}
639 peerDependencies: 653 peerDependencies:
@@ -641,7 +655,7 @@ packages: @@ -641,7 +655,7 @@ packages:
641 postcss-selector-parser: ^6.0.10 655 postcss-selector-parser: ^6.0.10
642 dependencies: 656 dependencies:
643 postcss: 8.4.19 657 postcss: 8.4.19
644 - postcss-selector-parser: 6.0.10 658 + postcss-selector-parser: 6.0.11
645 dev: true 659 dev: true
646 660
647 /@ctrl/tinycolor/3.4.1: 661 /@ctrl/tinycolor/3.4.1:
@@ -657,6 +671,24 @@ packages: @@ -657,6 +671,24 @@ packages:
657 vue: 3.2.45 671 vue: 3.2.45
658 dev: false 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 /@eslint/eslintrc/1.3.3: 692 /@eslint/eslintrc/1.3.3:
661 resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} 693 resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==}
662 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 694 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -717,8 +749,8 @@ packages: @@ -717,8 +749,8 @@ packages:
717 dependencies: 749 dependencies:
718 '@iconify/types': 2.0.0 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 dependencies: 754 dependencies:
723 '@iconify/types': 2.0.0 755 '@iconify/types': 2.0.0
724 pathe: 0.3.9 756 pathe: 0.3.9
@@ -739,8 +771,8 @@ packages: @@ -739,8 +771,8 @@ packages:
739 vue-i18n: 771 vue-i18n:
740 optional: true 772 optional: true
741 dependencies: 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 jsonc-eslint-parser: 1.4.1 776 jsonc-eslint-parser: 1.4.1
745 source-map: 0.6.1 777 source-map: 0.6.1
746 vue-i18n: 9.2.2_vue@3.2.45 778 vue-i18n: 9.2.2_vue@3.2.45
@@ -753,27 +785,40 @@ packages: @@ -753,27 +785,40 @@ packages:
753 dependencies: 785 dependencies:
754 '@intlify/devtools-if': 9.2.2 786 '@intlify/devtools-if': 9.2.2
755 '@intlify/message-compiler': 9.2.2 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 '@intlify/vue-devtools': 9.2.2 789 '@intlify/vue-devtools': 9.2.2
758 790
759 /@intlify/devtools-if/9.2.2: 791 /@intlify/devtools-if/9.2.2:
760 resolution: {integrity: sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg==} 792 resolution: {integrity: sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg==}
761 engines: {node: '>= 14'} 793 engines: {node: '>= 14'}
762 dependencies: 794 dependencies:
763 - '@intlify/shared': registry.npmmirror.com/@intlify/shared/9.2.2 795 + '@intlify/shared': 9.2.2
764 796
765 /@intlify/message-compiler/9.2.2: 797 /@intlify/message-compiler/9.2.2:
766 resolution: {integrity: sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA==} 798 resolution: {integrity: sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA==}
767 engines: {node: '>= 14'} 799 engines: {node: '>= 14'}
768 dependencies: 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 /@intlify/shared/9.2.2: 812 /@intlify/shared/9.2.2:
773 resolution: {integrity: sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==} 813 resolution: {integrity: sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==}
774 engines: {node: '>= 14'} 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 resolution: {integrity: sha512-6SgNzPAOCR90wvt368lKzi7f/5ZEWJn22UCGvhFsP3XvKqlF3cVzojahgQ6o+LTdCkExeM6wPgd+haFf28E9VQ==} 822 resolution: {integrity: sha512-6SgNzPAOCR90wvt368lKzi7f/5ZEWJn22UCGvhFsP3XvKqlF3cVzojahgQ6o+LTdCkExeM6wPgd+haFf28E9VQ==}
778 engines: {node: '>= 14.6'} 823 engines: {node: '>= 14.6'}
779 peerDependencies: 824 peerDependencies:
@@ -789,12 +834,12 @@ packages: @@ -789,12 +834,12 @@ packages:
789 optional: true 834 optional: true
790 dependencies: 835 dependencies:
791 '@intlify/bundle-utils': 3.4.0_vue-i18n@9.2.2 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 '@rollup/pluginutils': 4.2.1 838 '@rollup/pluginutils': 4.2.1
794 debug: 4.3.4 839 debug: 4.3.4
795 fast-glob: 3.2.12 840 fast-glob: 3.2.12
796 source-map: 0.6.1 841 source-map: 0.6.1
797 - vite: 3.2.4_ajklay5k626t46b6fyghkbup3i 842 + vite: 3.2.5_egxhkvvxjoy6k24tlk4nbv6pfm
798 vue-i18n: 9.2.2_vue@3.2.45 843 vue-i18n: 9.2.2_vue@3.2.45
799 transitivePeerDependencies: 844 transitivePeerDependencies:
800 - supports-color 845 - supports-color
@@ -805,7 +850,7 @@ packages: @@ -805,7 +850,7 @@ packages:
805 engines: {node: '>= 14'} 850 engines: {node: '>= 14'}
806 dependencies: 851 dependencies:
807 '@intlify/core-base': 9.2.2 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 /@jridgewell/gen-mapping/0.1.1: 855 /@jridgewell/gen-mapping/0.1.1:
811 resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} 856 resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==}
@@ -907,6 +952,10 @@ packages: @@ -907,6 +952,10 @@ packages:
907 picomatch: 2.3.1 952 picomatch: 2.3.1
908 dev: true 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 /@transloadit/prettier-bytes/0.0.7: 959 /@transloadit/prettier-bytes/0.0.7:
911 resolution: {integrity: sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA==} 960 resolution: {integrity: sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA==}
912 dev: false 961 dev: false
@@ -947,29 +996,12 @@ packages: @@ -947,29 +996,12 @@ packages:
947 resolution: {integrity: sha512-UfnOK1pIxO7P+EgPRZXD9jMpimd8QEFcEZ5R67R1UhGbv4zghU5+NE7U8M8G9H5Jc8FI51rqDWQs6FtUfq2e/Q==} 996 resolution: {integrity: sha512-UfnOK1pIxO7P+EgPRZXD9jMpimd8QEFcEZ5R67R1UhGbv4zghU5+NE7U8M8G9H5Jc8FI51rqDWQs6FtUfq2e/Q==}
948 dev: false 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 /@types/intro.js/5.1.0: 999 /@types/intro.js/5.1.0:
961 resolution: {integrity: sha512-XHkD6t7f3bn8B2//kOlznRzmk15KvsRkFpY6i8em/eDphblQ8QHbCiW+6OPjX7CxI0aVNVJK6Yamb2h2KMmFdA==} 1000 resolution: {integrity: sha512-XHkD6t7f3bn8B2//kOlznRzmk15KvsRkFpY6i8em/eDphblQ8QHbCiW+6OPjX7CxI0aVNVJK6Yamb2h2KMmFdA==}
962 dev: true 1001 dev: true
963 1002
964 /@types/json-schema/7.0.11: 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 dev: true 1005 dev: true
974 1006
975 /@types/lodash-es/4.17.6: 1007 /@types/lodash-es/4.17.6:
@@ -985,15 +1017,15 @@ packages: @@ -985,15 +1017,15 @@ packages:
985 dev: true 1017 dev: true
986 1018
987 /@types/node/10.17.60: 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 dev: true 1021 dev: true
990 1022
991 /@types/node/14.18.33: 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 dev: true 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 dev: true 1029 dev: true
998 1030
999 /@types/normalize-package-data/2.4.1: 1031 /@types/normalize-package-data/2.4.1:
@@ -1011,7 +1043,7 @@ packages: @@ -1011,7 +1043,7 @@ packages:
1011 /@types/qrcode/1.5.0: 1043 /@types/qrcode/1.5.0:
1012 resolution: {integrity: sha512-x5ilHXRxUPIMfjtM+1vf/GPTRWZ81nqscursm5gMznJeK9M0YnZ1c3bEvRLQ0zSSgedLx1J6MGL231ObQGGhaA==} 1044 resolution: {integrity: sha512-x5ilHXRxUPIMfjtM+1vf/GPTRWZ81nqscursm5gMznJeK9M0YnZ1c3bEvRLQ0zSSgedLx1J6MGL231ObQGGhaA==}
1013 dependencies: 1045 dependencies:
1014 - '@types/node': 18.11.9 1046 + '@types/node': 18.11.11
1015 dev: true 1047 dev: true
1016 1048
1017 /@types/qs/6.9.7: 1049 /@types/qs/6.9.7:
@@ -1019,27 +1051,21 @@ packages: @@ -1019,27 +1051,21 @@ packages:
1019 dev: true 1051 dev: true
1020 1052
1021 /@types/semver/7.3.13: 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 dev: true 1055 dev: true
1024 1056
1025 /@types/svgo/2.6.4: 1057 /@types/svgo/2.6.4:
1026 resolution: {integrity: sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==} 1058 resolution: {integrity: sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==}
1027 dependencies: 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 dev: true 1061 dev: true
1036 1062
1037 /@types/web-bluetooth/0.0.16: 1063 /@types/web-bluetooth/0.0.16:
1038 resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} 1064 resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==}
1039 dev: false 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 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1069 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1044 peerDependencies: 1070 peerDependencies:
1045 '@typescript-eslint/parser': ^5.0.0 1071 '@typescript-eslint/parser': ^5.0.0
@@ -1049,13 +1075,13 @@ packages: @@ -1049,13 +1075,13 @@ packages:
1049 typescript: 1075 typescript:
1050 optional: true 1076 optional: true
1051 dependencies: 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 debug: 4.3.4 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 natural-compare-lite: 1.4.0 1085 natural-compare-lite: 1.4.0
1060 regexpp: 3.2.0 1086 regexpp: 3.2.0
1061 semver: 7.3.8 1087 semver: 7.3.8
@@ -1065,8 +1091,8 @@ packages: @@ -1065,8 +1091,8 @@ packages:
1065 - supports-color 1091 - supports-color
1066 dev: true 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 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1096 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1071 peerDependencies: 1097 peerDependencies:
1072 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 1098 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
@@ -1075,26 +1101,26 @@ packages: @@ -1075,26 +1101,26 @@ packages:
1075 typescript: 1101 typescript:
1076 optional: true 1102 optional: true
1077 dependencies: 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 debug: 4.3.4 1107 debug: 4.3.4
1082 - eslint: 8.28.0 1108 + eslint: 8.29.0
1083 typescript: 4.9.3 1109 typescript: 4.9.3
1084 transitivePeerDependencies: 1110 transitivePeerDependencies:
1085 - supports-color 1111 - supports-color
1086 dev: true 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 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1116 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1091 dependencies: 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 dev: true 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 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1124 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1099 peerDependencies: 1125 peerDependencies:
1100 eslint: '*' 1126 eslint: '*'
@@ -1103,23 +1129,23 @@ packages: @@ -1103,23 +1129,23 @@ packages:
1103 typescript: 1129 typescript:
1104 optional: true 1130 optional: true
1105 dependencies: 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 debug: 4.3.4 1134 debug: 4.3.4
1109 - eslint: 8.28.0 1135 + eslint: 8.29.0
1110 tsutils: 3.21.0_typescript@4.9.3 1136 tsutils: 3.21.0_typescript@4.9.3
1111 typescript: 4.9.3 1137 typescript: 4.9.3
1112 transitivePeerDependencies: 1138 transitivePeerDependencies:
1113 - supports-color 1139 - supports-color
1114 dev: true 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 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1144 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1119 dev: true 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 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1149 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1124 peerDependencies: 1150 peerDependencies:
1125 typescript: '*' 1151 typescript: '*'
@@ -1127,8 +1153,8 @@ packages: @@ -1127,8 +1153,8 @@ packages:
1127 typescript: 1153 typescript:
1128 optional: true 1154 optional: true
1129 dependencies: 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 debug: 4.3.4 1158 debug: 4.3.4
1133 globby: 11.1.0 1159 globby: 11.1.0
1134 is-glob: 4.0.3 1160 is-glob: 4.0.3
@@ -1139,31 +1165,31 @@ packages: @@ -1139,31 +1165,31 @@ packages:
1139 - supports-color 1165 - supports-color
1140 dev: true 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 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1170 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1145 peerDependencies: 1171 peerDependencies:
1146 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 1172 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
1147 dependencies: 1173 dependencies:
1148 '@types/json-schema': 7.0.11 1174 '@types/json-schema': 7.0.11
1149 '@types/semver': 7.3.13 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 eslint-scope: 5.1.1 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 semver: 7.3.8 1182 semver: 7.3.8
1157 transitivePeerDependencies: 1183 transitivePeerDependencies:
1158 - supports-color 1184 - supports-color
1159 - typescript 1185 - typescript
1160 dev: true 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 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1190 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1165 dependencies: 1191 dependencies:
1166 - '@typescript-eslint/types': 5.45.0 1192 + '@typescript-eslint/types': 5.45.1
1167 eslint-visitor-keys: 3.3.0 1193 eslint-visitor-keys: 3.3.0
1168 dev: true 1194 dev: true
1169 1195
@@ -1208,7 +1234,23 @@ packages: @@ -1208,7 +1234,23 @@ packages:
1208 nanoid: 3.3.4 1234 nanoid: 3.3.4
1209 dev: false 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 resolution: {integrity: sha512-JgDhxstQlwnHBvZ1BSnU5mbmyQ14/t5JhREc6YH5kWyu2QdAAOsLF6xgHoIWarj8tddaiwFrNzLbWJPudpXKYA==} 1254 resolution: {integrity: sha512-JgDhxstQlwnHBvZ1BSnU5mbmyQ14/t5JhREc6YH5kWyu2QdAAOsLF6xgHoIWarj8tddaiwFrNzLbWJPudpXKYA==}
1213 engines: {node: ^14.18.0 || >=16.0.0} 1255 engines: {node: ^14.18.0 || >=16.0.0}
1214 peerDependencies: 1256 peerDependencies:
@@ -1218,23 +1260,63 @@ packages: @@ -1218,23 +1260,63 @@ packages:
1218 '@babel/core': 7.20.2 1260 '@babel/core': 7.20.2
1219 '@babel/plugin-transform-typescript': 7.20.2_@babel+core@7.20.2 1261 '@babel/plugin-transform-typescript': 7.20.2_@babel+core@7.20.2
1220 '@vue/babel-plugin-jsx': 1.1.1_@babel+core@7.20.2 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 vue: 3.2.45 1264 vue: 3.2.45
1223 transitivePeerDependencies: 1265 transitivePeerDependencies:
1224 - supports-color 1266 - supports-color
1225 dev: true 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 resolution: {integrity: sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw==} 1270 resolution: {integrity: sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw==}
1229 engines: {node: ^14.18.0 || >=16.0.0} 1271 engines: {node: ^14.18.0 || >=16.0.0}
1230 peerDependencies: 1272 peerDependencies:
1231 vite: ^3.0.0 1273 vite: ^3.0.0
1232 vue: ^3.2.25 1274 vue: ^3.2.25
1233 dependencies: 1275 dependencies:
1234 - vite: 3.2.4_ajklay5k626t46b6fyghkbup3i 1276 + vite: 3.2.5_egxhkvvxjoy6k24tlk4nbv6pfm
1235 vue: 3.2.45 1277 vue: 3.2.45
1236 dev: true 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 /@vue/babel-helper-vue-transform-on/1.0.2: 1320 /@vue/babel-helper-vue-transform-on/1.0.2:
1239 resolution: {integrity: sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==} 1321 resolution: {integrity: sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==}
1240 dev: true 1322 dev: true
@@ -1259,16 +1341,16 @@ packages: @@ -1259,16 +1341,16 @@ packages:
1259 /@vue/compiler-core/3.2.45: 1341 /@vue/compiler-core/3.2.45:
1260 resolution: {integrity: sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==} 1342 resolution: {integrity: sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==}
1261 dependencies: 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 /@vue/compiler-dom/3.2.45: 1349 /@vue/compiler-dom/3.2.45:
1268 resolution: {integrity: sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==} 1350 resolution: {integrity: sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==}
1269 dependencies: 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 /@vue/compiler-sfc/3.2.45: 1355 /@vue/compiler-sfc/3.2.45:
1274 resolution: {integrity: sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==} 1356 resolution: {integrity: sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==}
@@ -1287,8 +1369,8 @@ packages: @@ -1287,8 +1369,8 @@ packages:
1287 /@vue/compiler-ssr/3.2.45: 1369 /@vue/compiler-ssr/3.2.45:
1288 resolution: {integrity: sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==} 1370 resolution: {integrity: sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==}
1289 dependencies: 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 /@vue/devtools-api/6.4.5: 1375 /@vue/devtools-api/6.4.5:
1294 resolution: {integrity: sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ==} 1376 resolution: {integrity: sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ==}
@@ -1296,23 +1378,28 @@ packages: @@ -1296,23 +1378,28 @@ packages:
1296 /@vue/reactivity-transform/3.2.45: 1378 /@vue/reactivity-transform/3.2.45:
1297 resolution: {integrity: sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==} 1379 resolution: {integrity: sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==}
1298 dependencies: 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 /@vue/runtime-core/3.2.45: 1392 /@vue/runtime-core/3.2.45:
1306 resolution: {integrity: sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==} 1393 resolution: {integrity: sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==}
1307 dependencies: 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 /@vue/runtime-dom/3.2.45: 1398 /@vue/runtime-dom/3.2.45:
1312 resolution: {integrity: sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==} 1399 resolution: {integrity: sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==}
1313 dependencies: 1400 dependencies:
1314 '@vue/runtime-core': 3.2.45 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 csstype: 2.6.21 1403 csstype: 2.6.21
1317 1404
1318 /@vue/server-renderer/3.2.45_vue@3.2.45: 1405 /@vue/server-renderer/3.2.45_vue@3.2.45:
@@ -1320,8 +1407,8 @@ packages: @@ -1320,8 +1407,8 @@ packages:
1320 peerDependencies: 1407 peerDependencies:
1321 vue: 3.2.45 1408 vue: 3.2.45
1322 dependencies: 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 vue: 3.2.45 1412 vue: 3.2.45
1326 1413
1327 /@vue/shared/3.2.45: 1414 /@vue/shared/3.2.45:
@@ -1712,20 +1799,10 @@ packages: @@ -1712,20 +1799,10 @@ packages:
1712 engines: {node: '>=0.10.0'} 1799 engines: {node: '>=0.10.0'}
1713 dev: true 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 /array-ify/1.0.0: 1802 /array-ify/1.0.0:
1721 resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} 1803 resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==}
1722 dev: true 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 /array-union/2.1.0: 1806 /array-union/2.1.0:
1730 resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 1807 resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
1731 engines: {node: '>=8'} 1808 engines: {node: '>=8'}
@@ -1760,7 +1837,7 @@ packages: @@ -1760,7 +1837,7 @@ packages:
1760 dev: true 1837 dev: true
1761 1838
1762 /asynckit/0.4.0: 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 dev: false 1841 dev: false
1765 1842
1766 /atob/2.1.2: 1843 /atob/2.1.2:
@@ -1786,15 +1863,15 @@ packages: @@ -1786,15 +1863,15 @@ packages:
1786 dev: true 1863 dev: true
1787 1864
1788 /axios/0.26.1_debug@4.3.4: 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 dependencies: 1867 dependencies:
1791 follow-redirects: 1.15.2 1868 follow-redirects: 1.15.2
1792 transitivePeerDependencies: 1869 transitivePeerDependencies:
1793 - debug 1870 - debug
1794 dev: true 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 dependencies: 1875 dependencies:
1799 follow-redirects: 1.15.2 1876 follow-redirects: 1.15.2
1800 form-data: 4.0.0 1877 form-data: 4.0.0
@@ -1803,6 +1880,10 @@ packages: @@ -1803,6 +1880,10 @@ packages:
1803 - debug 1880 - debug
1804 dev: false 1881 dev: false
1805 1882
  1883 + /balanced-match/1.0.2:
  1884 + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
  1885 + dev: true
  1886 +
1806 /balanced-match/2.0.0: 1887 /balanced-match/2.0.0:
1807 resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} 1888 resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==}
1808 dev: true 1889 dev: true
@@ -1820,10 +1901,6 @@ packages: @@ -1820,10 +1901,6 @@ packages:
1820 pascalcase: 0.1.1 1901 pascalcase: 0.1.1
1821 dev: true 1902 dev: true
1822 1903
1823 - /base64-js/1.5.1:  
1824 - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}  
1825 - dev: true  
1826 -  
1827 /big.js/5.2.2: 1904 /big.js/5.2.2:
1828 resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} 1905 resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==}
1829 dev: true 1906 dev: true
@@ -1833,22 +1910,6 @@ packages: @@ -1833,22 +1910,6 @@ packages:
1833 engines: {node: '>=8'} 1910 engines: {node: '>=8'}
1834 dev: true 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 /bluebird/3.7.2: 1913 /bluebird/3.7.2:
1853 resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} 1914 resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
1854 dev: true 1915 dev: true
@@ -1860,12 +1921,18 @@ packages: @@ -1860,12 +1921,18 @@ packages:
1860 /brace-expansion/1.1.11: 1921 /brace-expansion/1.1.11:
1861 resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 1922 resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
1862 dependencies: 1923 dependencies:
1863 - balanced-match: registry.npmmirror.com/balanced-match/1.0.2 1924 + balanced-match: 1.0.2
1864 concat-map: 0.0.1 1925 concat-map: 0.0.1
1865 dev: true 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 /braces/2.3.2: 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 engines: {node: '>=0.10.0'} 1936 engines: {node: '>=0.10.0'}
1870 dependencies: 1937 dependencies:
1871 arr-flatten: 1.1.0 1938 arr-flatten: 1.1.0
@@ -1904,20 +1971,6 @@ packages: @@ -1904,20 +1971,6 @@ packages:
1904 resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 1971 resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
1905 dev: true 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 /cache-base/1.0.1: 1974 /cache-base/1.0.1:
1922 resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} 1975 resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==}
1923 engines: {node: '>=0.10.0'} 1976 engines: {node: '>=0.10.0'}
@@ -2010,11 +2063,6 @@ packages: @@ -2010,11 +2063,6 @@ packages:
2010 supports-color: 7.2.0 2063 supports-color: 7.2.0
2011 dev: true 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 /change-case/4.1.2: 2066 /change-case/4.1.2:
2019 resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} 2067 resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==}
2020 dependencies: 2068 dependencies:
@@ -2032,10 +2080,6 @@ packages: @@ -2032,10 +2080,6 @@ packages:
2032 tslib: 2.4.1 2080 tslib: 2.4.1
2033 dev: true 2081 dev: true
2034 2082
2035 - /chardet/0.7.0:  
2036 - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}  
2037 - dev: true  
2038 -  
2039 /chokidar/3.5.3: 2083 /chokidar/3.5.3:
2040 resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 2084 resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
2041 engines: {node: '>= 8.10.0'} 2085 engines: {node: '>= 8.10.0'}
@@ -2048,7 +2092,7 @@ packages: @@ -2048,7 +2092,7 @@ packages:
2048 normalize-path: 3.0.0 2092 normalize-path: 3.0.0
2049 readdirp: 3.6.0 2093 readdirp: 3.6.0
2050 optionalDependencies: 2094 optionalDependencies:
2051 - fsevents: registry.npmmirror.com/fsevents/2.3.2 2095 + fsevents: 2.3.2
2052 dev: true 2096 dev: true
2053 2097
2054 /class-utils/0.3.6: 2098 /class-utils/0.3.6:
@@ -2061,13 +2105,6 @@ packages: @@ -2061,13 +2105,6 @@ packages:
2061 static-extend: 0.1.2 2105 static-extend: 0.1.2
2062 dev: true 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 /clean-stack/2.2.0: 2108 /clean-stack/2.2.0:
2072 resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} 2109 resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
2073 engines: {node: '>=6'} 2110 engines: {node: '>=6'}
@@ -2080,18 +2117,6 @@ packages: @@ -2080,18 +2117,6 @@ packages:
2080 restore-cursor: 3.1.0 2117 restore-cursor: 3.1.0
2081 dev: true 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 /cli-truncate/2.1.0: 2120 /cli-truncate/2.1.0:
2096 resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} 2121 resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==}
2097 engines: {node: '>=8'} 2122 engines: {node: '>=8'}
@@ -2108,11 +2133,6 @@ packages: @@ -2108,11 +2133,6 @@ packages:
2108 string-width: 5.1.2 2133 string-width: 5.1.2
2109 dev: true 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 /cliui/6.0.0: 2136 /cliui/6.0.0:
2117 resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} 2137 resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
2118 dependencies: 2138 dependencies:
@@ -2130,11 +2150,6 @@ packages: @@ -2130,11 +2150,6 @@ packages:
2130 wrap-ansi: 7.0.0 2150 wrap-ansi: 7.0.0
2131 dev: true 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 /clone/2.1.2: 2153 /clone/2.1.2:
2139 resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} 2154 resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==}
2140 engines: {node: '>=0.8'} 2155 engines: {node: '>=0.8'}
@@ -2176,7 +2191,7 @@ packages: @@ -2176,7 +2191,7 @@ packages:
2176 dev: true 2191 dev: true
2177 2192
2178 /combined-stream/1.0.8: 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 engines: {node: '>= 0.8'} 2195 engines: {node: '>= 0.8'}
2181 dependencies: 2196 dependencies:
2182 delayed-stream: 1.0.0 2197 delayed-stream: 1.0.0
@@ -2191,11 +2206,6 @@ packages: @@ -2191,11 +2206,6 @@ packages:
2191 engines: {node: '>= 10'} 2206 engines: {node: '>= 10'}
2192 dev: true 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 /commander/9.4.1: 2209 /commander/9.4.1:
2200 resolution: {integrity: sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==} 2210 resolution: {integrity: sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==}
2201 engines: {node: ^12.20.0 || >=14} 2211 engines: {node: ^12.20.0 || >=14}
@@ -2220,11 +2230,6 @@ packages: @@ -2220,11 +2230,6 @@ packages:
2220 resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 2230 resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
2221 dev: true 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 /consola/2.15.3: 2233 /consola/2.15.3:
2229 resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==} 2234 resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==}
2230 dev: true 2235 dev: true
@@ -2280,6 +2285,11 @@ packages: @@ -2280,6 +2285,11 @@ packages:
2280 engines: {node: '>=0.10.0'} 2285 engines: {node: '>=0.10.0'}
2281 dev: true 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 /cors/2.8.5: 2293 /cors/2.8.5:
2284 resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} 2294 resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
2285 engines: {node: '>= 0.10'} 2295 engines: {node: '>= 0.10'}
@@ -2359,7 +2369,7 @@ packages: @@ -2359,7 +2369,7 @@ packages:
2359 engines: {node: '>=8.0.0'} 2369 engines: {node: '>=8.0.0'}
2360 dependencies: 2370 dependencies:
2361 mdn-data: 2.0.14 2371 mdn-data: 2.0.14
2362 - source-map: registry.npmmirror.com/source-map/0.6.1 2372 + source-map: 0.6.1
2363 dev: true 2373 dev: true
2364 2374
2365 /css-what/6.1.0: 2375 /css-what/6.1.0:
@@ -2395,12 +2405,16 @@ packages: @@ -2395,12 +2405,16 @@ packages:
2395 engines: {node: '>=8'} 2405 engines: {node: '>=8'}
2396 dev: true 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 dev: false 2410 dev: false
2401 2411
  2412 + /de-indent/1.0.2:
  2413 + resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
  2414 + dev: true
  2415 +
2402 /debug/2.6.9: 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 peerDependencies: 2418 peerDependencies:
2405 supports-color: '*' 2419 supports-color: '*'
2406 peerDependenciesMeta: 2420 peerDependenciesMeta:
@@ -2443,12 +2457,6 @@ packages: @@ -2443,12 +2457,6 @@ packages:
2443 resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 2457 resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
2444 dev: true 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 /define-property/0.2.5: 2460 /define-property/0.2.5:
2453 resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} 2461 resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==}
2454 engines: {node: '>=0.10.0'} 2462 engines: {node: '>=0.10.0'}
@@ -2471,30 +2479,11 @@ packages: @@ -2471,30 +2479,11 @@ packages:
2471 isobject: 3.0.1 2479 isobject: 3.0.1
2472 dev: true 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 /delayed-stream/1.0.0: 2482 /delayed-stream/1.0.0:
2489 - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 2483 + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, registry: https://registry.npm.taobao.org/}
2490 engines: {node: '>=0.4.0'} 2484 engines: {node: '>=0.4.0'}
2491 dev: false 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 /diff/4.0.2: 2487 /diff/4.0.2:
2499 resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} 2488 resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
2500 engines: {node: '>=0.3.1'} 2489 engines: {node: '>=0.3.1'}
@@ -2612,16 +2601,6 @@ packages: @@ -2612,16 +2601,6 @@ packages:
2612 is-obj: 2.0.0 2601 is-obj: 2.0.0
2613 dev: true 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 /eastasianwidth/0.2.0: 2604 /eastasianwidth/0.2.0:
2626 resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 2605 resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
2627 dev: true 2606 dev: true
@@ -2653,20 +2632,20 @@ packages: @@ -2653,20 +2632,20 @@ packages:
2653 resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==} 2632 resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==}
2654 dev: true 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 peerDependencies: 2637 peerDependencies:
2659 vue: ^3.2.0 2638 vue: ^3.2.0
2660 dependencies: 2639 dependencies:
2661 '@ctrl/tinycolor': 3.4.1 2640 '@ctrl/tinycolor': 3.4.1
2662 '@element-plus/icons-vue': 2.0.10_vue@3.2.45 2641 '@element-plus/icons-vue': 2.0.10_vue@3.2.45
2663 '@floating-ui/dom': 1.0.6 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 '@types/lodash': 4.14.189 2644 '@types/lodash': 4.14.189
2666 '@types/lodash-es': 4.17.6 2645 '@types/lodash-es': 4.17.6
2667 '@vueuse/core': 9.6.0_vue@3.2.45 2646 '@vueuse/core': 9.6.0_vue@3.2.45
2668 async-validator: 4.2.5 2647 async-validator: 4.2.5
2669 - dayjs: 1.11.6 2648 + dayjs: 1.11.7
2670 escape-html: 1.0.3 2649 escape-html: 1.0.3
2671 lodash: 4.17.21 2650 lodash: 4.17.21
2672 lodash-es: 4.17.21 2651 lodash-es: 4.17.21
@@ -2742,70 +2721,250 @@ packages: @@ -2742,70 +2721,250 @@ packages:
2742 ext: 1.7.0 2721 ext: 1.7.0
2743 dev: false 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 engines: {node: '>=12'} 2726 engines: {node: '>=12'}
2748 - hasBin: true 2727 + cpu: [x64]
  2728 + os: [android]
2749 requiresBuild: true 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 dev: true 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 dev: true 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 dev: true 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 dev: true 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 dev: true 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 dev: true 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 resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} 2968 resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==}
2810 engines: {node: '>=12.0.0'} 2969 engines: {node: '>=12.0.0'}
2811 peerDependencies: 2970 peerDependencies:
@@ -2816,32 +2975,32 @@ packages: @@ -2816,32 +2975,32 @@ packages:
2816 eslint-config-prettier: 2975 eslint-config-prettier:
2817 optional: true 2976 optional: true
2818 dependencies: 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 prettier: 2.8.0 2980 prettier: 2.8.0
2822 prettier-linter-helpers: 1.0.0 2981 prettier-linter-helpers: 1.0.0
2823 dev: true 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 resolution: {integrity: sha512-E/AXwcTzunyzM83C2QqDHxepMzvI2y6x+mmeYHbVDQlKFqmKYvRrhaVixEeeG27uI44p9oKDFiyCRw4XxgtfHA==} 2985 resolution: {integrity: sha512-E/AXwcTzunyzM83C2QqDHxepMzvI2y6x+mmeYHbVDQlKFqmKYvRrhaVixEeeG27uI44p9oKDFiyCRw4XxgtfHA==}
2827 engines: {node: ^14.17.0 || >=16.0.0} 2986 engines: {node: ^14.17.0 || >=16.0.0}
2828 peerDependencies: 2987 peerDependencies:
2829 eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 2988 eslint: ^6.2.0 || ^7.0.0 || ^8.0.0
2830 dependencies: 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 natural-compare: 1.4.0 2992 natural-compare: 1.4.0
2834 nth-check: 2.1.1 2993 nth-check: 2.1.1
2835 postcss-selector-parser: 6.0.10 2994 postcss-selector-parser: 6.0.10
2836 semver: 7.3.8 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 xml-name-validator: 4.0.0 2997 xml-name-validator: 4.0.0
2839 transitivePeerDependencies: 2998 transitivePeerDependencies:
2840 - supports-color 2999 - supports-color
2841 dev: true 3000 dev: true
2842 3001
2843 /eslint-scope/5.1.1: 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 engines: {node: '>=8.0.0'} 3004 engines: {node: '>=8.0.0'}
2846 dependencies: 3005 dependencies:
2847 esrecurse: 4.3.0 3006 esrecurse: 4.3.0
@@ -2857,24 +3016,24 @@ packages: @@ -2857,24 +3016,24 @@ packages:
2857 dev: true 3016 dev: true
2858 3017
2859 /eslint-utils/2.1.0: 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 engines: {node: '>=6'} 3020 engines: {node: '>=6'}
2862 dependencies: 3021 dependencies:
2863 eslint-visitor-keys: 1.3.0 3022 eslint-visitor-keys: 1.3.0
2864 dev: true 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 resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} 3026 resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
2868 engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} 3027 engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
2869 peerDependencies: 3028 peerDependencies:
2870 eslint: '>=5' 3029 eslint: '>=5'
2871 dependencies: 3030 dependencies:
2872 - eslint: 8.28.0 3031 + eslint: 8.29.0
2873 eslint-visitor-keys: 2.1.0 3032 eslint-visitor-keys: 2.1.0
2874 dev: true 3033 dev: true
2875 3034
2876 /eslint-visitor-keys/1.3.0: 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 engines: {node: '>=4'} 3037 engines: {node: '>=4'}
2879 dev: true 3038 dev: true
2880 3039
@@ -2888,8 +3047,8 @@ packages: @@ -2888,8 +3047,8 @@ packages:
2888 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 3047 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
2889 dev: true 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 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 3052 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
2894 hasBin: true 3053 hasBin: true
2895 dependencies: 3054 dependencies:
@@ -2904,7 +3063,7 @@ packages: @@ -2904,7 +3063,7 @@ packages:
2904 doctrine: 3.0.0 3063 doctrine: 3.0.0
2905 escape-string-regexp: 4.0.0 3064 escape-string-regexp: 4.0.0
2906 eslint-scope: 7.1.1 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 eslint-visitor-keys: 3.3.0 3067 eslint-visitor-keys: 3.3.0
2909 espree: 9.4.1 3068 espree: 9.4.1
2910 esquery: 1.4.0 3069 esquery: 1.4.0
@@ -2969,7 +3128,7 @@ packages: @@ -2969,7 +3128,7 @@ packages:
2969 dev: true 3128 dev: true
2970 3129
2971 /estraverse/4.3.0: 3130 /estraverse/4.3.0:
2972 - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} 3131 + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==, registry: https://registry.npm.taobao.org/}
2973 engines: {node: '>=4.0'} 3132 engines: {node: '>=4.0'}
2974 dev: true 3133 dev: true
2975 3134
@@ -3043,13 +3202,6 @@ packages: @@ -3043,13 +3202,6 @@ packages:
3043 - supports-color 3202 - supports-color
3044 dev: true 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 /ext/1.7.0: 3205 /ext/1.7.0:
3054 resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} 3206 resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==}
3055 dependencies: 3207 dependencies:
@@ -3071,19 +3223,6 @@ packages: @@ -3071,19 +3223,6 @@ packages:
3071 is-extendable: 1.0.1 3223 is-extendable: 1.0.1
3072 dev: true 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 /extglob/2.0.4: 3226 /extglob/2.0.4:
3088 resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} 3227 resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==}
3089 engines: {node: '>=0.10.0'} 3228 engines: {node: '>=0.10.0'}
@@ -3138,13 +3277,6 @@ packages: @@ -3138,13 +3277,6 @@ packages:
3138 reusify: 1.0.4 3277 reusify: 1.0.4
3139 dev: true 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 /file-entry-cache/6.0.1: 3280 /file-entry-cache/6.0.1:
3149 resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 3281 resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
3150 engines: {node: ^10.12.0 || >=12.0.0} 3282 engines: {node: ^10.12.0 || >=12.0.0}
@@ -3155,11 +3287,11 @@ packages: @@ -3155,11 +3287,11 @@ packages:
3155 /filelist/1.0.4: 3287 /filelist/1.0.4:
3156 resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} 3288 resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
3157 dependencies: 3289 dependencies:
3158 - minimatch: registry.npmmirror.com/minimatch/5.1.0 3290 + minimatch: 5.1.0
3159 dev: true 3291 dev: true
3160 3292
3161 /fill-range/4.0.0: 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 engines: {node: '>=0.10.0'} 3295 engines: {node: '>=0.10.0'}
3164 dependencies: 3296 dependencies:
3165 extend-shallow: 2.0.1 3297 extend-shallow: 2.0.1
@@ -3169,7 +3301,7 @@ packages: @@ -3169,7 +3301,7 @@ packages:
3169 dev: true 3301 dev: true
3170 3302
3171 /fill-range/7.0.1: 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 engines: {node: '>=8'} 3305 engines: {node: '>=8'}
3174 dependencies: 3306 dependencies:
3175 to-regex-range: 5.0.1 3307 to-regex-range: 5.0.1
@@ -3190,32 +3322,6 @@ packages: @@ -3190,32 +3322,6 @@ packages:
3190 path-exists: 4.0.0 3322 path-exists: 4.0.0
3191 dev: true 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 /flat-cache/3.0.4: 3325 /flat-cache/3.0.4:
3220 resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} 3326 resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==}
3221 engines: {node: ^10.12.0 || >=12.0.0} 3327 engines: {node: ^10.12.0 || >=12.0.0}
@@ -3229,7 +3335,7 @@ packages: @@ -3229,7 +3335,7 @@ packages:
3229 dev: true 3335 dev: true
3230 3336
3231 /follow-redirects/1.15.2: 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 engines: {node: '>=4.0'} 3339 engines: {node: '>=4.0'}
3234 peerDependencies: 3340 peerDependencies:
3235 debug: '*' 3341 debug: '*'
@@ -3242,15 +3348,8 @@ packages: @@ -3242,15 +3348,8 @@ packages:
3242 engines: {node: '>=0.10.0'} 3348 engines: {node: '>=0.10.0'}
3243 dev: true 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 /form-data/4.0.0: 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 engines: {node: '>= 6'} 3353 engines: {node: '>= 6'}
3255 dependencies: 3354 dependencies:
3256 asynckit: 0.4.0 3355 asynckit: 0.4.0
@@ -3282,6 +3381,14 @@ packages: @@ -3282,6 +3381,14 @@ packages:
3282 resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 3381 resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
3283 dev: true 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 /function-bind/1.1.1: 3392 /function-bind/1.1.1:
3286 resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 3393 resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
3287 3394
@@ -3356,15 +3463,6 @@ packages: @@ -3356,15 +3463,6 @@ packages:
3356 ini: 1.3.8 3463 ini: 1.3.8
3357 dev: true 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 /global-modules/2.0.0: 3466 /global-modules/2.0.0:
3369 resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} 3467 resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==}
3370 engines: {node: '>=6'} 3468 engines: {node: '>=6'}
@@ -3372,17 +3470,6 @@ packages: @@ -3372,17 +3470,6 @@ packages:
3372 global-prefix: 3.0.0 3470 global-prefix: 3.0.0
3373 dev: true 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 /global-prefix/3.0.0: 3473 /global-prefix/3.0.0:
3387 resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} 3474 resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==}
3388 engines: {node: '>=6'} 3475 engines: {node: '>=6'}
@@ -3411,22 +3498,11 @@ packages: @@ -3411,22 +3498,11 @@ packages:
3411 array-union: 2.1.0 3498 array-union: 2.1.0
3412 dir-glob: 3.0.1 3499 dir-glob: 3.0.1
3413 fast-glob: 3.2.12 3500 fast-glob: 3.2.12
3414 - ignore: 5.2.0 3501 + ignore: 5.2.1
3415 merge2: 1.4.1 3502 merge2: 1.4.1
3416 slash: 3.0.0 3503 slash: 3.0.0
3417 dev: true 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 /globjoin/0.1.4: 3506 /globjoin/0.1.4:
3431 resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==} 3507 resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==}
3432 dev: true 3508 dev: true
@@ -3439,19 +3515,6 @@ packages: @@ -3439,19 +3515,6 @@ packages:
3439 resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} 3515 resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
3440 dev: true 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 /hard-rejection/2.1.0: 3518 /hard-rejection/2.1.0:
3456 resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} 3519 resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==}
3457 engines: {node: '>=6'} 3520 engines: {node: '>=6'}
@@ -3533,13 +3596,6 @@ packages: @@ -3533,13 +3596,6 @@ packages:
3533 tslib: 2.4.1 3596 tslib: 2.4.1
3534 dev: true 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 /hosted-git-info/2.8.9: 3599 /hosted-git-info/2.8.9:
3544 resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} 3600 resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
3545 dev: true 3601 dev: true
@@ -3551,20 +3607,6 @@ packages: @@ -3551,20 +3607,6 @@ packages:
3551 lru-cache: 6.0.0 3607 lru-cache: 6.0.0
3552 dev: true 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 /html-tags/3.2.0: 3610 /html-tags/3.2.0:
3569 resolution: {integrity: sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==} 3611 resolution: {integrity: sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==}
3570 engines: {node: '>=8'} 3612 engines: {node: '>=8'}
@@ -3610,22 +3652,16 @@ packages: @@ -3610,22 +3652,16 @@ packages:
3610 '@babel/runtime': 7.20.1 3652 '@babel/runtime': 7.20.1
3611 dev: false 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 /ignore/5.2.0: 3655 /ignore/5.2.0:
3625 resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} 3656 resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==}
3626 engines: {node: '>= 4'} 3657 engines: {node: '>= 4'}
3627 dev: true 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 /image-size/0.5.5: 3665 /image-size/0.5.5:
3630 resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} 3666 resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==}
3631 engines: {node: '>=0.10.0'} 3667 engines: {node: '>=0.10.0'}
@@ -3678,44 +3714,10 @@ packages: @@ -3678,44 +3714,10 @@ packages:
3678 resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} 3714 resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
3679 dev: true 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 /intro.js/6.0.0: 3717 /intro.js/6.0.0:
3708 resolution: {integrity: sha512-ZUiR6BoLSvPSlLG0boewnWVgji1fE1gBvP/pyw5pgCKXEDQz1mMeUxarggClPNs71UTq364LwSk9zxz17A9gaQ==} 3718 resolution: {integrity: sha512-ZUiR6BoLSvPSlLG0boewnWVgji1fE1gBvP/pyw5pgCKXEDQz1mMeUxarggClPNs71UTq364LwSk9zxz17A9gaQ==}
3709 dev: false 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 /is-accessor-descriptor/0.1.6: 3721 /is-accessor-descriptor/0.1.6:
3720 resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==} 3722 resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==}
3721 engines: {node: '>=0.10.0'} 3723 engines: {node: '>=0.10.0'}
@@ -3820,25 +3822,15 @@ packages: @@ -3820,25 +3822,15 @@ packages:
3820 resolution: {integrity: sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==} 3822 resolution: {integrity: sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==}
3821 dev: false 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 /is-number/3.0.0: 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 engines: {node: '>=0.10.0'} 3827 engines: {node: '>=0.10.0'}
3836 dependencies: 3828 dependencies:
3837 kind-of: 3.2.2 3829 kind-of: 3.2.2
3838 dev: true 3830 dev: true
3839 3831
3840 /is-number/7.0.0: 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 engines: {node: '>=0.12.0'} 3834 engines: {node: '>=0.12.0'}
3843 dev: true 3835 dev: true
3844 3836
@@ -3847,11 +3839,6 @@ packages: @@ -3847,11 +3839,6 @@ packages:
3847 engines: {node: '>=8'} 3839 engines: {node: '>=8'}
3848 dev: true 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 /is-path-inside/3.0.3: 3842 /is-path-inside/3.0.3:
3856 resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 3843 resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
3857 engines: {node: '>=8'} 3844 engines: {node: '>=8'}
@@ -3873,13 +3860,6 @@ packages: @@ -3873,13 +3860,6 @@ packages:
3873 resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} 3860 resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
3874 engines: {node: '>=0.10.0'} 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 /is-stream/2.0.1: 3863 /is-stream/2.0.1:
3884 resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 3864 resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
3885 engines: {node: '>=8'} 3865 engines: {node: '>=8'}
@@ -3897,26 +3877,9 @@ packages: @@ -3897,26 +3877,9 @@ packages:
3897 text-extensions: 1.9.0 3877 text-extensions: 1.9.0
3898 dev: true 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 /is-windows/1.0.2: 3884 /is-windows/1.0.2:
3922 resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} 3885 resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
@@ -3927,11 +3890,6 @@ packages: @@ -3927,11 +3890,6 @@ packages:
3927 resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} 3890 resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
3928 dev: true 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 /isexe/2.0.0: 3893 /isexe/2.0.0:
3936 resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 3894 resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
3937 dev: true 3895 dev: true
@@ -3956,7 +3914,7 @@ packages: @@ -3956,7 +3914,7 @@ packages:
3956 async: 3.2.4 3914 async: 3.2.4
3957 chalk: 4.1.2 3915 chalk: 4.1.2
3958 filelist: 1.0.4 3916 filelist: 1.0.4
3959 - minimatch: registry.npmmirror.com/minimatch/3.1.2 3917 + minimatch: 3.1.2
3960 dev: true 3918 dev: true
3961 3919
3962 /jiti/1.16.0: 3920 /jiti/1.16.0:
@@ -3968,11 +3926,6 @@ packages: @@ -3968,11 +3926,6 @@ packages:
3968 resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==} 3926 resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==}
3969 dev: true 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 /js-sdsl/4.1.5: 3929 /js-sdsl/4.1.5:
3977 resolution: {integrity: sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==} 3930 resolution: {integrity: sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==}
3978 dev: true 3931 dev: true
@@ -4047,7 +4000,7 @@ packages: @@ -4047,7 +4000,7 @@ packages:
4047 dependencies: 4000 dependencies:
4048 universalify: 2.0.0 4001 universalify: 2.0.0
4049 optionalDependencies: 4002 optionalDependencies:
4050 - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10 4003 + graceful-fs: 4.2.10
4051 dev: true 4004 dev: true
4052 4005
4053 /jsonparse/1.3.1: 4006 /jsonparse/1.3.1:
@@ -4095,20 +4048,6 @@ packages: @@ -4095,20 +4048,6 @@ packages:
4095 type-check: 0.4.0 4048 type-check: 0.4.0
4096 dev: true 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 /lilconfig/2.0.6: 4051 /lilconfig/2.0.6:
4113 resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} 4052 resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==}
4114 engines: {node: '>=10'} 4053 engines: {node: '>=10'}
@@ -4118,8 +4057,8 @@ packages: @@ -4118,8 +4057,8 @@ packages:
4118 resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 4057 resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
4119 dev: true 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 engines: {node: ^14.13.1 || >=16.0.0} 4062 engines: {node: ^14.13.1 || >=16.0.0}
4124 hasBin: true 4063 hasBin: true
4125 dependencies: 4064 dependencies:
@@ -4213,10 +4152,6 @@ packages: @@ -4213,10 +4152,6 @@ packages:
4213 resolution: {integrity: sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==} 4152 resolution: {integrity: sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==}
4214 dev: false 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 /lodash.isequal/4.5.0: 4155 /lodash.isequal/4.5.0:
4221 resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} 4156 resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
4222 dev: false 4157 dev: false
@@ -4272,22 +4207,6 @@ packages: @@ -4272,22 +4207,6 @@ packages:
4272 /lodash/4.17.21: 4207 /lodash/4.17.21:
4273 resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 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 /log-update/4.0.0: 4210 /log-update/4.0.0:
4292 resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} 4211 resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==}
4293 engines: {node: '>=10'} 4212 engines: {node: '>=10'}
@@ -4305,7 +4224,7 @@ packages: @@ -4305,7 +4224,7 @@ packages:
4305 dev: true 4224 dev: true
4306 4225
4307 /lru-cache/6.0.0: 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 engines: {node: '>=10'} 4228 engines: {node: '>=10'}
4310 dependencies: 4229 dependencies:
4311 yallist: 4.0.0 4230 yallist: 4.0.0
@@ -4320,20 +4239,13 @@ packages: @@ -4320,20 +4239,13 @@ packages:
4320 resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==} 4239 resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==}
4321 engines: {node: '>=12'} 4240 engines: {node: '>=12'}
4322 dependencies: 4241 dependencies:
4323 - sourcemap-codec: registry.npmmirror.com/sourcemap-codec/1.4.8 4242 + sourcemap-codec: 1.4.8
4324 dev: true 4243 dev: true
4325 4244
4326 /make-error/1.3.6: 4245 /make-error/1.3.6:
4327 resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} 4246 resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
4328 dev: true 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 /map-cache/0.2.2: 4249 /map-cache/0.2.2:
4338 resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} 4250 resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==}
4339 engines: {node: '>=0.10.0'} 4251 engines: {node: '>=0.10.0'}
@@ -4449,7 +4361,7 @@ packages: @@ -4449,7 +4361,7 @@ packages:
4449 dev: true 4361 dev: true
4450 4362
4451 /mime-db/1.52.0: 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 engines: {node: '>= 0.6'} 4365 engines: {node: '>= 0.6'}
4454 dev: false 4366 dev: false
4455 4367
@@ -4460,7 +4372,7 @@ packages: @@ -4460,7 +4372,7 @@ packages:
4460 dev: false 4372 dev: false
4461 4373
4462 /mime-types/2.1.35: 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 engines: {node: '>= 0.6'} 4376 engines: {node: '>= 0.6'}
4465 dependencies: 4377 dependencies:
4466 mime-db: 1.52.0 4378 mime-db: 1.52.0
@@ -4487,6 +4399,13 @@ packages: @@ -4487,6 +4399,13 @@ packages:
4487 brace-expansion: 1.1.11 4399 brace-expansion: 1.1.11
4488 dev: true 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 /minimist-options/4.1.0: 4409 /minimist-options/4.1.0:
4491 resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} 4410 resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==}
4492 engines: {node: '>= 6'} 4411 engines: {node: '>= 6'}
@@ -4512,22 +4431,16 @@ packages: @@ -4512,22 +4431,16 @@ packages:
4512 is-extendable: 1.0.1 4431 is-extendable: 1.0.1
4513 dev: true 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 /ms/2.0.0: 4434 /ms/2.0.0:
4522 - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} 4435 + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==, registry: https://registry.npm.taobao.org/}
4523 dev: true 4436 dev: true
4524 4437
4525 /ms/2.1.2: 4438 /ms/2.1.2:
4526 resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 4439 resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
4527 dev: true 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 dev: true 4444 dev: true
4532 4445
4533 /namespace-emitter/2.0.1: 4446 /namespace-emitter/2.0.1:
@@ -4559,17 +4472,13 @@ packages: @@ -4559,17 +4472,13 @@ packages:
4559 dev: true 4472 dev: true
4560 4473
4561 /natural-compare-lite/1.4.0: 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 dev: true 4476 dev: true
4564 4477
4565 /natural-compare/1.4.0: 4478 /natural-compare/1.4.0:
4566 resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 4479 resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
4567 dev: true 4480 dev: true
4568 4481
4569 - /neo-async/2.6.2:  
4570 - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}  
4571 - dev: true  
4572 -  
4573 /next-tick/1.1.0: 4482 /next-tick/1.1.0:
4574 resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} 4483 resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==}
4575 dev: false 4484 dev: false
@@ -4593,32 +4502,6 @@ packages: @@ -4593,32 +4502,6 @@ packages:
4593 whatwg-url: 5.0.0 4502 whatwg-url: 5.0.0
4594 dev: true 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 /node-releases/2.0.6: 4505 /node-releases/2.0.6:
4623 resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} 4506 resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==}
4624 dev: true 4507 dev: true
@@ -4704,24 +4587,6 @@ packages: @@ -4704,24 +4587,6 @@ packages:
4704 isobject: 3.0.1 4587 isobject: 3.0.1
4705 dev: true 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 /object.pick/1.3.0: 4590 /object.pick/1.3.0:
4726 resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} 4591 resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==}
4727 engines: {node: '>=0.10.0'} 4592 engines: {node: '>=0.10.0'}
@@ -4761,41 +4626,6 @@ packages: @@ -4761,41 +4626,6 @@ packages:
4761 word-wrap: 1.2.3 4626 word-wrap: 1.2.3
4762 dev: true 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 /p-limit/2.3.0: 4629 /p-limit/2.3.0:
4800 resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 4630 resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
4801 engines: {node: '>=6'} 4631 engines: {node: '>=6'}
@@ -4847,15 +4677,6 @@ packages: @@ -4847,15 +4677,6 @@ packages:
4847 callsites: 3.1.0 4677 callsites: 3.1.0
4848 dev: true 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 /parse-json/5.2.0: 4680 /parse-json/5.2.0:
4860 resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 4681 resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
4861 engines: {node: '>=8'} 4682 engines: {node: '>=8'}
@@ -4866,11 +4687,6 @@ packages: @@ -4866,11 +4687,6 @@ packages:
4866 lines-and-columns: 1.2.4 4687 lines-and-columns: 1.2.4
4867 dev: true 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 /pascal-case/3.1.2: 4690 /pascal-case/3.1.2:
4875 resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} 4691 resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==}
4876 dependencies: 4692 dependencies:
@@ -4913,18 +4729,6 @@ packages: @@ -4913,18 +4729,6 @@ packages:
4913 resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 4729 resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
4914 dev: true 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 /path-type/4.0.0: 4732 /path-type/4.0.0:
4929 resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 4733 resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
4930 engines: {node: '>=8'} 4734 engines: {node: '>=8'}
@@ -4970,21 +4774,6 @@ packages: @@ -4970,21 +4774,6 @@ packages:
4970 vue-demi: 0.13.11_vue@3.2.45 4774 vue-demi: 0.13.11_vue@3.2.45
4971 dev: false 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 /pngjs/5.0.0: 4777 /pngjs/5.0.0:
4989 resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} 4778 resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==}
4990 engines: {node: '>=10.13.0'} 4779 engines: {node: '>=10.13.0'}
@@ -5047,6 +4836,14 @@ packages: @@ -5047,6 +4836,14 @@ packages:
5047 util-deprecate: 1.0.2 4836 util-deprecate: 1.0.2
5048 dev: true 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 /postcss-sorting/7.0.1_postcss@8.4.19: 4847 /postcss-sorting/7.0.1_postcss@8.4.19:
5051 resolution: {integrity: sha512-iLBFYz6VRYyLJEJsBJ8M3TCqNcckVzz4wFounSc5Oez35ogE/X+aoC5fFu103Ot7NyvjU3/xqIXn93Gp3kJk4g==} 4848 resolution: {integrity: sha512-iLBFYz6VRYyLJEJsBJ8M3TCqNcckVzz4wFounSc5Oez35ogE/X+aoC5fFu103Ot7NyvjU3/xqIXn93Gp3kJk4g==}
5052 peerDependencies: 4849 peerDependencies:
@@ -5065,7 +4862,7 @@ packages: @@ -5065,7 +4862,7 @@ packages:
5065 dependencies: 4862 dependencies:
5066 chalk: 1.1.3 4863 chalk: 1.1.3
5067 js-base64: 2.6.4 4864 js-base64: 2.6.4
5068 - source-map: registry.npmmirror.com/source-map/0.5.7 4865 + source-map: 0.5.7
5069 supports-color: 3.2.3 4866 supports-color: 3.2.3
5070 dev: true 4867 dev: true
5071 4868
@@ -5145,7 +4942,7 @@ packages: @@ -5145,7 +4942,7 @@ packages:
5145 dev: true 4942 dev: true
5146 4943
5147 /proxy-from-env/1.1.0: 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 dev: false 4946 dev: false
5150 4947
5151 /punycode/1.3.2: 4948 /punycode/1.3.2:
@@ -5195,7 +4992,7 @@ packages: @@ -5195,7 +4992,7 @@ packages:
5195 dev: false 4992 dev: false
5196 4993
5197 /queue-microtask/1.2.3: 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 dev: true 4996 dev: true
5200 4997
5201 /quick-lru/4.0.1: 4998 /quick-lru/4.0.1:
@@ -5244,13 +5041,6 @@ packages: @@ -5244,13 +5041,6 @@ packages:
5244 picomatch: 2.3.1 5041 picomatch: 2.3.1
5245 dev: true 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 /redent/3.0.0: 5044 /redent/3.0.0:
5255 resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} 5045 resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
5256 engines: {node: '>=8'} 5046 engines: {node: '>=8'}
@@ -5261,7 +5051,6 @@ packages: @@ -5261,7 +5051,6 @@ packages:
5261 5051
5262 /regenerator-runtime/0.13.11: 5052 /regenerator-runtime/0.13.11:
5263 resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} 5053 resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
5264 - dev: false  
5265 5054
5266 /regex-not/1.0.2: 5055 /regex-not/1.0.2:
5267 resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} 5056 resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==}
@@ -5272,15 +5061,10 @@ packages: @@ -5272,15 +5061,10 @@ packages:
5272 dev: true 5061 dev: true
5273 5062
5274 /regexpp/3.2.0: 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 engines: {node: '>=8'} 5065 engines: {node: '>=8'}
5277 dev: true 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 /repeat-element/1.1.4: 5068 /repeat-element/1.1.4:
5285 resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} 5069 resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==}
5286 engines: {node: '>=0.10.0'} 5070 engines: {node: '>=0.10.0'}
@@ -5304,14 +5088,6 @@ packages: @@ -5304,14 +5088,6 @@ packages:
5304 resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} 5088 resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
5305 dev: false 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 /resolve-from/4.0.0: 5091 /resolve-from/4.0.0:
5316 resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 5092 resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
5317 engines: {node: '>=4'} 5093 engines: {node: '>=4'}
@@ -5351,21 +5127,13 @@ packages: @@ -5351,21 +5127,13 @@ packages:
5351 signal-exit: 3.0.7 5127 signal-exit: 3.0.7
5352 dev: true 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 /ret/0.1.15: 5130 /ret/0.1.15:
5363 resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} 5131 resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==}
5364 engines: {node: '>=0.12'} 5132 engines: {node: '>=0.12'}
5365 dev: true 5133 dev: true
5366 5134
5367 /reusify/1.0.4: 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 engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 5137 engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
5370 dev: true 5138 dev: true
5371 5139
@@ -5392,28 +5160,23 @@ packages: @@ -5392,28 +5160,23 @@ packages:
5392 dev: true 5160 dev: true
5393 5161
5394 /rollup/2.79.1: 5162 /rollup/2.79.1:
5395 - resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} 5163 + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==, registry: https://registry.npm.taobao.org/}
5396 engines: {node: '>=10.0.0'} 5164 engines: {node: '>=10.0.0'}
5397 hasBin: true 5165 hasBin: true
5398 optionalDependencies: 5166 optionalDependencies:
5399 - fsevents: registry.npmmirror.com/fsevents/2.3.2 5167 + fsevents: 2.3.2
5400 dev: true 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 engines: {node: '>=14.18.0', npm: '>=8.0.0'} 5172 engines: {node: '>=14.18.0', npm: '>=8.0.0'}
5405 hasBin: true 5173 hasBin: true
5406 optionalDependencies: 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 dev: true 5176 dev: true
5414 5177
5415 /run-parallel/1.2.0: 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 dependencies: 5180 dependencies:
5418 queue-microtask: 1.2.3 5181 queue-microtask: 1.2.3
5419 dev: true 5182 dev: true
@@ -5434,10 +5197,6 @@ packages: @@ -5434,10 +5197,6 @@ packages:
5434 ret: 0.1.15 5197 ret: 0.1.15
5435 dev: true 5198 dev: true
5436 5199
5437 - /safer-buffer/2.1.2:  
5438 - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}  
5439 - dev: true  
5440 -  
5441 /sass/1.56.1: 5200 /sass/1.56.1:
5442 resolution: {integrity: sha512-VpEyKpyBPCxE7qGDtOcdJ6fFbcpOM+Emu7uZLxVrkX8KVU/Dp5UF7WLvzqRuUhB6mqqQt1xffLoG+AndxTZrCQ==} 5201 resolution: {integrity: sha512-VpEyKpyBPCxE7qGDtOcdJ6fFbcpOM+Emu7uZLxVrkX8KVU/Dp5UF7WLvzqRuUhB6mqqQt1xffLoG+AndxTZrCQ==}
5443 engines: {node: '>=12.0.0'} 5202 engines: {node: '>=12.0.0'}
@@ -5455,7 +5214,7 @@ packages: @@ -5455,7 +5214,7 @@ packages:
5455 dev: false 5214 dev: false
5456 5215
5457 /semver/5.7.1: 5216 /semver/5.7.1:
5458 - resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} 5217 + resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==, registry: https://registry.npm.taobao.org/}
5459 hasBin: true 5218 hasBin: true
5460 dev: true 5219 dev: true
5461 5220
@@ -5465,7 +5224,7 @@ packages: @@ -5465,7 +5224,7 @@ packages:
5465 dev: true 5224 dev: true
5466 5225
5467 /semver/7.3.7: 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 engines: {node: '>=10'} 5228 engines: {node: '>=10'}
5470 hasBin: true 5229 hasBin: true
5471 dependencies: 5230 dependencies:
@@ -5473,7 +5232,7 @@ packages: @@ -5473,7 +5232,7 @@ packages:
5473 dev: true 5232 dev: true
5474 5233
5475 /semver/7.3.8: 5234 /semver/7.3.8:
5476 - resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} 5235 + resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==, registry: https://registry.npm.taobao.org/}
5477 engines: {node: '>=10'} 5236 engines: {node: '>=10'}
5478 hasBin: true 5237 hasBin: true
5479 dependencies: 5238 dependencies:
@@ -5531,11 +5290,6 @@ packages: @@ -5531,11 +5290,6 @@ packages:
5531 engines: {node: '>=8'} 5290 engines: {node: '>=8'}
5532 dev: true 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 /slate-history/0.66.0_slate@0.72.8: 5293 /slate-history/0.66.0_slate@0.72.8:
5540 resolution: {integrity: sha512-6MWpxGQZiMvSINlCbMW43E2YBSVMCMCIwQfBzGssjWw4kb0qfvj0pIdblWNRQZD0hR6WHP+dHHgGSeVdMWzfng==} 5294 resolution: {integrity: sha512-6MWpxGQZiMvSINlCbMW43E2YBSVMCMCIwQfBzGssjWw4kb0qfvj0pIdblWNRQZD0hR6WHP+dHHgGSeVdMWzfng==}
5541 peerDependencies: 5295 peerDependencies:
@@ -5616,7 +5370,7 @@ packages: @@ -5616,7 +5370,7 @@ packages:
5616 define-property: 0.2.5 5370 define-property: 0.2.5
5617 extend-shallow: 2.0.1 5371 extend-shallow: 2.0.1
5618 map-cache: 0.2.2 5372 map-cache: 0.2.2
5619 - source-map: registry.npmmirror.com/source-map/0.5.7 5373 + source-map: 0.5.7
5620 source-map-resolve: 0.5.3 5374 source-map-resolve: 0.5.3
5621 use: 3.1.1 5375 use: 3.1.1
5622 transitivePeerDependencies: 5376 transitivePeerDependencies:
@@ -5642,7 +5396,7 @@ packages: @@ -5642,7 +5396,7 @@ packages:
5642 resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 5396 resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
5643 dependencies: 5397 dependencies:
5644 buffer-from: 1.1.2 5398 buffer-from: 1.1.2
5645 - source-map: registry.npmmirror.com/source-map/0.6.1 5399 + source-map: 0.6.1
5646 dev: true 5400 dev: true
5647 5401
5648 /source-map-url/0.4.1: 5402 /source-map-url/0.4.1:
@@ -5650,12 +5404,18 @@ packages: @@ -5650,12 +5404,18 @@ packages:
5650 deprecated: See https://github.com/lydell/source-map-url#deprecated 5404 deprecated: See https://github.com/lydell/source-map-url#deprecated
5651 dev: true 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 /source-map/0.6.1: 5412 /source-map/0.6.1:
5654 resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 5413 resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
5655 engines: {node: '>=0.10.0'} 5414 engines: {node: '>=0.10.0'}
5656 5415
5657 /sourcemap-codec/1.4.8: 5416 /sourcemap-codec/1.4.8:
5658 resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} 5417 resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
  5418 + deprecated: Please use @jridgewell/sourcemap-codec instead
5659 5419
5660 /spdx-correct/3.1.1: 5420 /spdx-correct/3.1.1:
5661 resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} 5421 resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==}
@@ -5788,7 +5548,7 @@ packages: @@ -5788,7 +5548,7 @@ packages:
5788 resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==} 5548 resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==}
5789 dev: true 5549 dev: true
5790 5550
5791 - /stylelint-config-html/1.1.0_qendsqix7hqecpnpx4fjs6qry4: 5551 + /stylelint-config-html/1.1.0_bto6pmslw3cibsiuq6smxboytq:
5792 resolution: {integrity: sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==} 5552 resolution: {integrity: sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==}
5793 engines: {node: ^12 || >=14} 5553 engines: {node: ^12 || >=14}
5794 peerDependencies: 5554 peerDependencies:
@@ -5796,52 +5556,52 @@ packages: @@ -5796,52 +5556,52 @@ packages:
5796 stylelint: '>=14.0.0' 5556 stylelint: '>=14.0.0'
5797 dependencies: 5557 dependencies:
5798 postcss-html: 1.5.0 5558 postcss-html: 1.5.0
5799 - stylelint: 14.15.0 5559 + stylelint: 14.16.0
5800 dev: true 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 resolution: {integrity: sha512-38nIGTGpFOiK5LjJ8Ma1yUgpKENxoKSOhbDNSemY7Ep0VsJoXIW9Iq/2hSt699oB9tReynfWicTAoIHiq8Rvbg==} 5563 resolution: {integrity: sha512-38nIGTGpFOiK5LjJ8Ma1yUgpKENxoKSOhbDNSemY7Ep0VsJoXIW9Iq/2hSt699oB9tReynfWicTAoIHiq8Rvbg==}
5804 engines: {node: '>= 12'} 5564 engines: {node: '>= 12'}
5805 hasBin: true 5565 hasBin: true
5806 peerDependencies: 5566 peerDependencies:
5807 stylelint: '>=11.0.0' 5567 stylelint: '>=11.0.0'
5808 dependencies: 5568 dependencies:
5809 - stylelint: 14.15.0 5569 + stylelint: 14.16.0
5810 dev: true 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 resolution: {integrity: sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ==} 5573 resolution: {integrity: sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ==}
5814 peerDependencies: 5574 peerDependencies:
5815 stylelint: ^14.10.0 5575 stylelint: ^14.10.0
5816 dependencies: 5576 dependencies:
5817 - stylelint: 14.15.0 5577 + stylelint: 14.16.0
5818 dev: true 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 resolution: {integrity: sha512-uy8tZLbfq6ZrXy4JKu3W+7lYLgRQBxYTUUB88vPgQ+ZzAxdrvcaSUW9hOMNLYBnwH+9Kkj19M2DHdZ4gKwI7tg==} 5581 resolution: {integrity: sha512-uy8tZLbfq6ZrXy4JKu3W+7lYLgRQBxYTUUB88vPgQ+ZzAxdrvcaSUW9hOMNLYBnwH+9Kkj19M2DHdZ4gKwI7tg==}
5822 peerDependencies: 5582 peerDependencies:
5823 stylelint: ^14.14.0 5583 stylelint: ^14.14.0
5824 dependencies: 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 dev: true 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 resolution: {integrity: sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw==} 5590 resolution: {integrity: sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw==}
5831 peerDependencies: 5591 peerDependencies:
5832 stylelint: ^14.0.0 5592 stylelint: ^14.0.0
5833 dependencies: 5593 dependencies:
5834 postcss: 8.4.19 5594 postcss: 8.4.19
5835 postcss-sorting: 7.0.1_postcss@8.4.19 5595 postcss-sorting: 7.0.1_postcss@8.4.19
5836 - stylelint: 14.15.0 5596 + stylelint: 14.16.0
5837 dev: true 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 engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 5601 engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
5842 hasBin: true 5602 hasBin: true
5843 dependencies: 5603 dependencies:
5844 - '@csstools/selector-specificity': 2.0.2_45y636a2vqremknoajyxd5nkzy 5604 + '@csstools/selector-specificity': 2.0.2_tbwh2mpcdwdeb2slx6bobindua
5845 balanced-match: 2.0.0 5605 balanced-match: 2.0.0
5846 colord: 2.9.3 5606 colord: 2.9.3
5847 cosmiconfig: 7.1.0 5607 cosmiconfig: 7.1.0
@@ -5854,7 +5614,7 @@ packages: @@ -5854,7 +5614,7 @@ packages:
5854 globby: 11.1.0 5614 globby: 11.1.0
5855 globjoin: 0.1.4 5615 globjoin: 0.1.4
5856 html-tags: 3.2.0 5616 html-tags: 3.2.0
5857 - ignore: 5.2.0 5617 + ignore: 5.2.1
5858 import-lazy: 4.0.0 5618 import-lazy: 4.0.0
5859 imurmurhash: 0.1.4 5619 imurmurhash: 0.1.4
5860 is-plain-object: 5.0.0 5620 is-plain-object: 5.0.0
@@ -5868,7 +5628,7 @@ packages: @@ -5868,7 +5628,7 @@ packages:
5868 postcss-media-query-parser: 0.2.3 5628 postcss-media-query-parser: 0.2.3
5869 postcss-resolve-nested-selector: 0.1.1 5629 postcss-resolve-nested-selector: 0.1.1
5870 postcss-safe-parser: 6.0.0_postcss@8.4.19 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 postcss-value-parser: 4.2.0 5632 postcss-value-parser: 4.2.0
5873 resolve-from: 5.0.0 5633 resolve-from: 5.0.0
5874 string-width: 4.2.3 5634 string-width: 4.2.3
@@ -5960,6 +5720,10 @@ packages: @@ -5960,6 +5720,10 @@ packages:
5960 stable: 0.1.8 5720 stable: 0.1.8
5961 dev: true 5721 dev: true
5962 5722
  5723 + /systemjs/6.13.0:
  5724 + resolution: {integrity: sha512-P3cgh2bpaPvAO2NE3uRp/n6hmk4xPX4DQf+UzTlCAycssKdqhp6hjw+ENWe+aUS7TogKRFtptMosTSFeC6R55g==}
  5725 + dev: true
  5726 +
5963 /table/6.8.1: 5727 /table/6.8.1:
5964 resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} 5728 resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==}
5965 engines: {node: '>=10.0.0'} 5729 engines: {node: '>=10.0.0'}
@@ -5971,8 +5735,8 @@ packages: @@ -5971,8 +5735,8 @@ packages:
5971 strip-ansi: 6.0.1 5735 strip-ansi: 6.0.1
5972 dev: true 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 engines: {node: '>=10'} 5740 engines: {node: '>=10'}
5977 hasBin: true 5741 hasBin: true
5978 dependencies: 5742 dependencies:
@@ -6005,18 +5769,9 @@ packages: @@ -6005,18 +5769,9 @@ packages:
6005 resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} 5769 resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==}
6006 dev: false 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 /to-object-path/0.3.0: 5776 /to-object-path/0.3.0:
6022 resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} 5777 resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==}
@@ -6026,7 +5781,7 @@ packages: @@ -6026,7 +5781,7 @@ packages:
6026 dev: true 5781 dev: true
6027 5782
6028 /to-regex-range/2.1.1: 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 engines: {node: '>=0.10.0'} 5785 engines: {node: '>=0.10.0'}
6031 dependencies: 5786 dependencies:
6032 is-number: 3.0.0 5787 is-number: 3.0.0
@@ -6034,7 +5789,7 @@ packages: @@ -6034,7 +5789,7 @@ packages:
6034 dev: true 5789 dev: true
6035 5790
6036 /to-regex-range/5.0.1: 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 engines: {node: '>=8.0'} 5793 engines: {node: '>=8.0'}
6039 dependencies: 5794 dependencies:
6040 is-number: 7.0.0 5795 is-number: 7.0.0
@@ -6095,7 +5850,7 @@ packages: @@ -6095,7 +5850,7 @@ packages:
6095 dev: true 5850 dev: true
6096 5851
6097 /tslib/1.14.1: 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 dev: true 5854 dev: true
6100 5855
6101 /tslib/2.3.0: 5856 /tslib/2.3.0:
@@ -6107,7 +5862,7 @@ packages: @@ -6107,7 +5862,7 @@ packages:
6107 dev: true 5862 dev: true
6108 5863
6109 /tsutils/3.21.0_typescript@4.9.3: 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 engines: {node: '>= 6'} 5866 engines: {node: '>= 6'}
6112 peerDependencies: 5867 peerDependencies:
6113 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' 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,11 +5916,6 @@ packages:
6161 engines: {node: '>=4.2.0'} 5916 engines: {node: '>=4.2.0'}
6162 hasBin: true 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 /union-value/1.0.1: 5919 /union-value/1.0.1:
6170 resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} 5920 resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==}
6171 engines: {node: '>=0.10.0'} 5921 engines: {node: '>=0.10.0'}
@@ -6197,7 +5947,7 @@ packages: @@ -6197,7 +5947,7 @@ packages:
6197 dependencies: 5947 dependencies:
6198 browserslist: 4.21.4 5948 browserslist: 4.21.4
6199 escalade: 3.1.1 5949 escalade: 3.1.1
6200 - picocolors: registry.npmmirror.com/picocolors/1.0.0 5950 + picocolors: 1.0.0
6201 dev: true 5951 dev: true
6202 5952
6203 /upper-case-first/2.0.2: 5953 /upper-case-first/2.0.2:
@@ -6247,11 +5997,6 @@ packages: @@ -6247,11 +5997,6 @@ packages:
6247 resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} 5997 resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==}
6248 dev: true 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 /validate-npm-package-license/3.0.4: 6000 /validate-npm-package-license/3.0.4:
6256 resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} 6001 resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
6257 dependencies: 6002 dependencies:
@@ -6264,7 +6009,7 @@ packages: @@ -6264,7 +6009,7 @@ packages:
6264 engines: {node: '>= 0.8'} 6009 engines: {node: '>= 0.8'}
6265 dev: true 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 resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==} 6013 resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==}
6269 peerDependencies: 6014 peerDependencies:
6270 vite: '>=2.0.0' 6015 vite: '>=2.0.0'
@@ -6272,12 +6017,18 @@ packages: @@ -6272,12 +6017,18 @@ packages:
6272 chalk: 4.1.2 6017 chalk: 4.1.2
6273 debug: 4.3.4 6018 debug: 4.3.4
6274 fs-extra: 10.1.0 6019 fs-extra: 10.1.0
6275 - vite: 3.2.4_ajklay5k626t46b6fyghkbup3i 6020 + vite: 3.2.5_egxhkvvxjoy6k24tlk4nbv6pfm
6276 transitivePeerDependencies: 6021 transitivePeerDependencies:
6277 - supports-color 6022 - supports-color
6278 dev: true 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 resolution: {integrity: sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==} 6032 resolution: {integrity: sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==}
6282 peerDependencies: 6033 peerDependencies:
6283 eslint: '>=7' 6034 eslint: '>=7'
@@ -6285,32 +6036,12 @@ packages: @@ -6285,32 +6036,12 @@ packages:
6285 dependencies: 6036 dependencies:
6286 '@rollup/pluginutils': 4.2.1 6037 '@rollup/pluginutils': 4.2.1
6287 '@types/eslint': 8.4.10 6038 '@types/eslint': 8.4.10
6288 - eslint: 8.28.0 6039 + eslint: 8.29.0
6289 rollup: 2.79.1 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 dev: true 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 resolution: {integrity: sha512-pIK2TVEY4XFGrz10CQDdEufBBCDaV0geRHfXV3abGTBr+OF9O0Zmd3ZDrHJXDv4Rl3qAQP4BTCuPYQ3XqstmqA==} 6045 resolution: {integrity: sha512-pIK2TVEY4XFGrz10CQDdEufBBCDaV0geRHfXV3abGTBr+OF9O0Zmd3ZDrHJXDv4Rl3qAQP4BTCuPYQ3XqstmqA==}
6315 engines: {node: '>=14', pnpm: '>=7.0.0'} 6046 engines: {node: '>=14', pnpm: '>=7.0.0'}
6316 peerDependencies: 6047 peerDependencies:
@@ -6319,10 +6050,10 @@ packages: @@ -6319,10 +6050,10 @@ packages:
6319 picocolors: 1.0.0 6050 picocolors: 1.0.0
6320 progress: 2.0.3 6051 progress: 2.0.3
6321 rd: 2.0.1 6052 rd: 2.0.1
6322 - vite: 3.2.4_ajklay5k626t46b6fyghkbup3i 6053 + vite: 3.2.5_egxhkvvxjoy6k24tlk4nbv6pfm
6323 dev: true 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 resolution: {integrity: sha512-oS0Y9Iq6vGnTDVRzB8xJNhA/gGlyR0lfCICU6+9FRKdrO5PnT34fRjvd8YWEsegCrk91+w3GVZc0HJDj/dPp5Q==} 6057 resolution: {integrity: sha512-oS0Y9Iq6vGnTDVRzB8xJNhA/gGlyR0lfCICU6+9FRKdrO5PnT34fRjvd8YWEsegCrk91+w3GVZc0HJDj/dPp5Q==}
6327 engines: {node: '>= 12'} 6058 engines: {node: '>= 12'}
6328 peerDependencies: 6059 peerDependencies:
@@ -6331,13 +6062,13 @@ packages: @@ -6331,13 +6062,13 @@ packages:
6331 '@purge-icons/core': 0.9.1 6062 '@purge-icons/core': 0.9.1
6332 '@purge-icons/generated': 0.9.0 6063 '@purge-icons/generated': 0.9.0
6333 rollup-plugin-purge-icons: 0.9.1 6064 rollup-plugin-purge-icons: 0.9.1
6334 - vite: 3.2.4_ajklay5k626t46b6fyghkbup3i 6065 + vite: 3.2.5_egxhkvvxjoy6k24tlk4nbv6pfm
6335 transitivePeerDependencies: 6066 transitivePeerDependencies:
6336 - encoding 6067 - encoding
6337 - supports-color 6068 - supports-color
6338 dev: true 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 resolution: {integrity: sha512-qtoHQae5dSUQPo/rYz/8p190VU5y19rtBaeV7ryLa/AYAU/e9CG89NrN/3+k7MR8mJy/GPIu91iJ3zk9foUOSA==} 6072 resolution: {integrity: sha512-qtoHQae5dSUQPo/rYz/8p190VU5y19rtBaeV7ryLa/AYAU/e9CG89NrN/3+k7MR8mJy/GPIu91iJ3zk9foUOSA==}
6342 peerDependencies: 6073 peerDependencies:
6343 vite: '>=2.0.0' 6074 vite: '>=2.0.0'
@@ -6349,10 +6080,10 @@ packages: @@ -6349,10 +6080,10 @@ packages:
6349 fs-extra: 10.1.0 6080 fs-extra: 10.1.0
6350 magic-string: 0.25.9 6081 magic-string: 0.25.9
6351 pathe: 0.2.0 6082 pathe: 0.2.0
6352 - vite: 3.2.4_ajklay5k626t46b6fyghkbup3i 6083 + vite: 3.2.5_egxhkvvxjoy6k24tlk4nbv6pfm
6353 dev: true 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 resolution: {integrity: sha512-6ktD+DhV6Rz3VtedYvBKKVA2eXF+sAQVaKkKLDSqGUfnhqXl3bj5PPkVTl3VexfTuZy66PmINi8Q6eFnVfRUmA==} 6087 resolution: {integrity: sha512-6ktD+DhV6Rz3VtedYvBKKVA2eXF+sAQVaKkKLDSqGUfnhqXl3bj5PPkVTl3VexfTuZy66PmINi8Q6eFnVfRUmA==}
6357 peerDependencies: 6088 peerDependencies:
6358 vite: '>=2.0.0' 6089 vite: '>=2.0.0'
@@ -6365,22 +6096,22 @@ packages: @@ -6365,22 +6096,22 @@ packages:
6365 pathe: 0.2.0 6096 pathe: 0.2.0
6366 svg-baker: 1.7.0 6097 svg-baker: 1.7.0
6367 svgo: 2.8.0 6098 svgo: 2.8.0
6368 - vite: 3.2.4_ajklay5k626t46b6fyghkbup3i 6099 + vite: 3.2.5_egxhkvvxjoy6k24tlk4nbv6pfm
6369 transitivePeerDependencies: 6100 transitivePeerDependencies:
6370 - supports-color 6101 - supports-color
6371 dev: true 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 resolution: {integrity: sha512-WMbjPCui75fboFoUTHhdbXzu4Y/bJMv5N9QT9a7do3wNMNHHqrk+Tn2jrSJU0LS5fGl/EG+FEDBYVUeWIkDqXQ==} 6105 resolution: {integrity: sha512-WMbjPCui75fboFoUTHhdbXzu4Y/bJMv5N9QT9a7do3wNMNHHqrk+Tn2jrSJU0LS5fGl/EG+FEDBYVUeWIkDqXQ==}
6375 peerDependencies: 6106 peerDependencies:
6376 vite: '>=2.0.0' 6107 vite: '>=2.0.0'
6377 dependencies: 6108 dependencies:
6378 '@vue/compiler-sfc': 3.2.45 6109 '@vue/compiler-sfc': 3.2.45
6379 magic-string: 0.25.9 6110 magic-string: 0.25.9
6380 - vite: 3.2.4_ajklay5k626t46b6fyghkbup3i 6111 + vite: 3.2.5_egxhkvvxjoy6k24tlk4nbv6pfm
6381 dev: true 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 resolution: {integrity: sha512-iyu+ZX0NmhNEUaLPv7xtC+EFRBpWMmw0nhd9a9upayfuNG/thwslKiQKmRB7U/dG0k/2oWLvPDvN/B9i7oRgSA==} 6115 resolution: {integrity: sha512-iyu+ZX0NmhNEUaLPv7xtC+EFRBpWMmw0nhd9a9upayfuNG/thwslKiQKmRB7U/dG0k/2oWLvPDvN/B9i7oRgSA==}
6385 peerDependencies: 6116 peerDependencies:
6386 vite: ^2.0.1 || ^3.0.0 6117 vite: ^2.0.1 || ^3.0.0
@@ -6388,14 +6119,14 @@ packages: @@ -6388,14 +6119,14 @@ packages:
6388 '@windicss/plugin-utils': 1.8.8 6119 '@windicss/plugin-utils': 1.8.8
6389 debug: 4.3.4 6120 debug: 4.3.4
6390 kolorist: 1.6.0 6121 kolorist: 1.6.0
6391 - vite: 3.2.4_ajklay5k626t46b6fyghkbup3i 6122 + vite: 3.2.5_egxhkvvxjoy6k24tlk4nbv6pfm
6392 windicss: 3.5.6 6123 windicss: 3.5.6
6393 transitivePeerDependencies: 6124 transitivePeerDependencies:
6394 - supports-color 6125 - supports-color
6395 dev: true 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 engines: {node: ^14.18.0 || >=16.0.0} 6130 engines: {node: ^14.18.0 || >=16.0.0}
6400 hasBin: true 6131 hasBin: true
6401 peerDependencies: 6132 peerDependencies:
@@ -6419,14 +6150,15 @@ packages: @@ -6419,14 +6150,15 @@ packages:
6419 terser: 6150 terser:
6420 optional: true 6151 optional: true
6421 dependencies: 6152 dependencies:
6422 - '@types/node': 18.11.9 6153 + '@types/node': 18.11.11
6423 esbuild: 0.15.14 6154 esbuild: 0.15.14
6424 postcss: 8.4.19 6155 postcss: 8.4.19
6425 resolve: 1.22.1 6156 resolve: 1.22.1
6426 rollup: 2.79.1 6157 rollup: 2.79.1
6427 sass: 1.56.1 6158 sass: 1.56.1
  6159 + terser: 5.16.1
6428 optionalDependencies: 6160 optionalDependencies:
6429 - fsevents: registry.npmmirror.com/fsevents/2.3.2 6161 + fsevents: 2.3.2
6430 dev: true 6162 dev: true
6431 6163
6432 /vue-cropper/1.0.5: 6164 /vue-cropper/1.0.5:
@@ -6448,14 +6180,14 @@ packages: @@ -6448,14 +6180,14 @@ packages:
6448 vue: 3.2.45 6180 vue: 3.2.45
6449 dev: false 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 resolution: {integrity: sha512-NGn/iQy8/Wb7RrRa4aRkokyCZfOUWk19OP5HP6JEozQFX5AoS/t+Z0ZN7FY4LlmWc4FNI922V7cvX28zctN8dQ==} 6184 resolution: {integrity: sha512-NGn/iQy8/Wb7RrRa4aRkokyCZfOUWk19OP5HP6JEozQFX5AoS/t+Z0ZN7FY4LlmWc4FNI922V7cvX28zctN8dQ==}
6453 engines: {node: ^14.17.0 || >=16.0.0} 6185 engines: {node: ^14.17.0 || >=16.0.0}
6454 peerDependencies: 6186 peerDependencies:
6455 eslint: '>=6.0.0' 6187 eslint: '>=6.0.0'
6456 dependencies: 6188 dependencies:
6457 debug: 4.3.4 6189 debug: 4.3.4
6458 - eslint: 8.28.0 6190 + eslint: 8.29.0
6459 eslint-scope: 7.1.1 6191 eslint-scope: 7.1.1
6460 eslint-visitor-keys: 3.3.0 6192 eslint-visitor-keys: 3.3.0
6461 espree: 9.4.1 6193 espree: 9.4.1
@@ -6487,6 +6219,24 @@ packages: @@ -6487,6 +6219,24 @@ packages:
6487 vue: 3.2.45 6219 vue: 3.2.45
6488 dev: false 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 /vue-types/5.0.1_vue@3.2.45: 6240 /vue-types/5.0.1_vue@3.2.45:
6491 resolution: {integrity: sha512-pHahh/Ht+mxAhSGXfFe0WQidZukYUoCevPoQtePpONrmNP+OjX3/ps/XjYLgw/Zbv4rks242eiVJcjE3EELsyw==} 6241 resolution: {integrity: sha512-pHahh/Ht+mxAhSGXfFe0WQidZukYUoCevPoQtePpONrmNP+OjX3/ps/XjYLgw/Zbv4rks242eiVJcjE3EELsyw==}
6492 engines: {node: '>=14.0.0'} 6242 engines: {node: '>=14.0.0'}
@@ -6519,12 +6269,6 @@ packages: @@ -6519,12 +6269,6 @@ packages:
6519 xe-utils: 3.5.7 6269 xe-utils: 3.5.7
6520 dev: false 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 /web-storage-cache/1.1.1: 6272 /web-storage-cache/1.1.1:
6529 resolution: {integrity: sha512-D0MieGooOs8RpsrK+vnejXnvh4OOv/+lTFB35JRkJJQt+uOjPE08XpaE0QBLMTRu47B1KGT/Nq3Gbag3Orinzw==} 6273 resolution: {integrity: sha512-D0MieGooOs8RpsrK+vnejXnvh4OOv/+lTFB35JRkJJQt+uOjPE08XpaE0QBLMTRu47B1KGT/Nq3Gbag3Orinzw==}
6530 dev: false 6274 dev: false
@@ -6574,10 +6318,6 @@ packages: @@ -6574,10 +6318,6 @@ packages:
6574 engines: {node: '>=0.10.0'} 6318 engines: {node: '>=0.10.0'}
6575 dev: true 6319 dev: true
6576 6320
6577 - /wordwrap/1.0.0:  
6578 - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}  
6579 - dev: true  
6580 -  
6581 /wrap-ansi/6.2.0: 6321 /wrap-ansi/6.2.0:
6582 resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} 6322 resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
6583 engines: {node: '>=8'} 6323 engines: {node: '>=8'}
@@ -6626,7 +6366,7 @@ packages: @@ -6626,7 +6366,7 @@ packages:
6626 dev: true 6366 dev: true
6627 6367
6628 /yallist/4.0.0: 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 dev: true 6370 dev: true
6631 6371
6632 /yaml-eslint-parser/0.3.2: 6372 /yaml-eslint-parser/0.3.2:
@@ -6710,600 +6450,3 @@ packages: @@ -6710,600 +6450,3 @@ packages:
6710 dependencies: 6450 dependencies:
6711 tslib: 2.3.0 6451 tslib: 2.3.0
6712 dev: false 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,7 +4,7 @@ import { isDark } from &#39;@/utils/is&#39;
4 import { useAppStore } from '@/store/modules/app' 4 import { useAppStore } from '@/store/modules/app'
5 import { useDesign } from '@/hooks/web/useDesign' 5 import { useDesign } from '@/hooks/web/useDesign'
6 import { ConfigGlobal } from '@/components/ConfigGlobal' 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 const { getPrefixCls } = useDesign() 9 const { getPrefixCls } = useDesign()
10 const prefixCls = getPrefixCls('app') 10 const prefixCls = getPrefixCls('app')
@@ -15,15 +15,10 @@ const { wsCache } = useCache() @@ -15,15 +15,10 @@ const { wsCache } = useCache()
15 15
16 // 根据浏览器当前主题设置系统主题色 16 // 根据浏览器当前主题设置系统主题色
17 const setDefaultTheme = () => { 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 appStore.setIsDark(isDarkTheme) 22 appStore.setIsDark(isDarkTheme)
28 } 23 }
29 setDefaultTheme() 24 setDefaultTheme()
yudao-ui-admin-vue3/src/api/infra/fileConfig/index.ts
@@ -42,7 +42,7 @@ export const getFileConfigApi = (id: number) =&gt; { @@ -42,7 +42,7 @@ export const getFileConfigApi = (id: number) =&gt; {
42 42
43 // 更新文件配置为主配置 43 // 更新文件配置为主配置
44 export const updateFileConfigMasterApi = (id: number) => { 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,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 return request.get({ 61 return request.get({
62 url: '/system/auth/social-auth-redirect?type=' + type + '&redirectUri=' + redirectUri 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,6 +21,7 @@ import {
21 } from 'element-plus' 21 } from 'element-plus'
22 import { InputPassword } from '@/components/InputPassword' 22 import { InputPassword } from '@/components/InputPassword'
23 import { Editor } from '@/components/Editor' 23 import { Editor } from '@/components/Editor'
  24 +import { UploadImg, UploadFile } from '@/components/UploadFile'
24 import { ComponentName } from '@/types/components' 25 import { ComponentName } from '@/types/components'
25 26
26 const componentMap: Recordable<Component, ComponentName> = { 27 const componentMap: Recordable<Component, ComponentName> = {
@@ -45,7 +46,9 @@ const componentMap: Recordable&lt;Component, ComponentName&gt; = { @@ -45,7 +46,9 @@ const componentMap: Recordable&lt;Component, ComponentName&gt; = {
45 TreeSelect: ElTreeSelect, 46 TreeSelect: ElTreeSelect,
46 RadioButton: ElRadioGroup, 47 RadioButton: ElRadioGroup,
47 InputPassword: InputPassword, 48 InputPassword: InputPassword,
48 - Editor: Editor 49 + Editor: Editor,
  50 + UploadImg: UploadImg,
  51 + UploadFile: UploadFile
49 } 52 }
50 53
51 export { componentMap } 54 export { componentMap }
yudao-ui-admin-vue3/src/components/UploadFile/index.ts
1 import UploadImg from './src/UploadImg.vue' 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 <template> 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 <Dialog v-model="dialogVisible" title="预览" width="800" append-to-body> 26 <Dialog v-model="dialogVisible" title="预览" width="800" append-to-body>
24 <img :src="dialogImageUrl" style="display: block; max-width: 100%; margin: 0 auto" /> 27 <img :src="dialogImageUrl" style="display: block; max-width: 100%; margin: 0 auto" />
@@ -26,16 +29,17 @@ @@ -26,16 +29,17 @@
26 </template> 29 </template>
27 <script setup lang="ts"> 30 <script setup lang="ts">
28 import { ref, watch } from 'vue' 31 import { ref, watch } from 'vue'
  32 +import { Dialog } from '@/components/Dialog'
29 import { useMessage } from '@/hooks/web/useMessage' 33 import { useMessage } from '@/hooks/web/useMessage'
30 import { propTypes } from '@/utils/propTypes' 34 import { propTypes } from '@/utils/propTypes'
31 import { getAccessToken, getTenantId } from '@/utils/auth' 35 import { getAccessToken, getTenantId } from '@/utils/auth'
32 import { ElUpload, UploadInstance, UploadProps, UploadRawFile, UploadUserFile } from 'element-plus' 36 import { ElUpload, UploadInstance, UploadProps, UploadRawFile, UploadUserFile } from 'element-plus'
33 37
34 const message = useMessage() // 消息弹窗 38 const message = useMessage() // 消息弹窗
35 -const emit = defineEmits(['input']) 39 +const emit = defineEmits(['update:modelValue'])
36 40
37 const props = defineProps({ 41 const props = defineProps({
38 - imgs: propTypes.oneOfType([String, Object, Array]), 42 + modelValue: propTypes.oneOfType([String, Object, Array]),
39 title: propTypes.string.def('图片上传'), 43 title: propTypes.string.def('图片上传'),
40 updateUrl: propTypes.string.def(import.meta.env.VITE_UPLOAD_URL), 44 updateUrl: propTypes.string.def(import.meta.env.VITE_UPLOAD_URL),
41 fileType: propTypes.array.def(['jpg', 'png', 'gif', 'jpeg']), // 文件类型, 例如['png', 'jpg', 'jpeg'] 45 fileType: propTypes.array.def(['jpg', 'png', 'gif', 'jpeg']), // 文件类型, 例如['png', 'jpg', 'jpeg']
@@ -44,6 +48,7 @@ const props = defineProps({ @@ -44,6 +48,7 @@ const props = defineProps({
44 isShowTip: propTypes.bool.def(false) // 是否显示提示 48 isShowTip: propTypes.bool.def(false) // 是否显示提示
45 }) 49 })
46 // ========== 上传相关 ========== 50 // ========== 上传相关 ==========
  51 +const valueRef = ref(props.modelValue)
47 const uploadRef = ref<UploadInstance>() 52 const uploadRef = ref<UploadInstance>()
48 const uploadList = ref<UploadUserFile[]>([]) 53 const uploadList = ref<UploadUserFile[]>([])
49 const fileList = ref<UploadUserFile[]>([]) 54 const fileList = ref<UploadUserFile[]>([])
@@ -55,15 +60,15 @@ const uploadHeaders = ref({ @@ -55,15 +60,15 @@ const uploadHeaders = ref({
55 'tenant-id': getTenantId() 60 'tenant-id': getTenantId()
56 }) 61 })
57 watch( 62 watch(
58 - () => props.imgs, 63 + () => props.modelValue,
59 (val) => { 64 (val) => {
60 if (val) { 65 if (val) {
61 // 首先将值转为数组, 当只穿了一个图片时,会报map方法错误 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 fileList.value = list.map((item) => { 73 fileList.value = list.map((item) => {
69 if (typeof item === 'string') { 74 if (typeof item === 'string') {
@@ -84,6 +89,10 @@ watch( @@ -84,6 +89,10 @@ watch(
84 ) 89 )
85 // 文件上传之前判断 90 // 文件上传之前判断
86 const beforeUpload: UploadProps['beforeUpload'] = (file: UploadRawFile) => { 91 const beforeUpload: UploadProps['beforeUpload'] = (file: UploadRawFile) => {
  92 + if (fileList.value.length >= props.limit) {
  93 + message.error(`上传文件数量不能超过${props.limit}个!`)
  94 + return false
  95 + }
87 let fileExtension = '' 96 let fileExtension = ''
88 if (file.name.lastIndexOf('.') > -1) { 97 if (file.name.lastIndexOf('.') > -1) {
89 fileExtension = file.name.slice(file.name.lastIndexOf('.') + 1) 98 fileExtension = file.name.slice(file.name.lastIndexOf('.') + 1)
@@ -111,14 +120,12 @@ const beforeUpload: UploadProps[&#39;beforeUpload&#39;] = (file: UploadRawFile) =&gt; { @@ -111,14 +120,12 @@ const beforeUpload: UploadProps[&#39;beforeUpload&#39;] = (file: UploadRawFile) =&gt; {
111 // 文件上传成功 120 // 文件上传成功
112 const handleFileSuccess: UploadProps['onSuccess'] = (res: any): void => { 121 const handleFileSuccess: UploadProps['onSuccess'] = (res: any): void => {
113 message.success('上传成功') 122 message.success('上传成功')
114 - console.info(uploadList.value)  
115 - console.info(fileList.value)  
116 uploadList.value.push({ name: res.data, url: res.data }) 123 uploadList.value.push({ name: res.data, url: res.data })
117 if (uploadList.value.length == uploadNumber.value) { 124 if (uploadList.value.length == uploadNumber.value) {
118 fileList.value = fileList.value.concat(uploadList.value) 125 fileList.value = fileList.value.concat(uploadList.value)
119 uploadList.value = [] 126 uploadList.value = []
120 uploadNumber.value = 0 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,7 +141,7 @@ const handleRemove = (file) =&gt; {
134 const findex = fileList.value.map((f) => f.name).indexOf(file.name) 141 const findex = fileList.value.map((f) => f.name).indexOf(file.name)
135 if (findex > -1) { 142 if (findex > -1) {
136 fileList.value.splice(findex, 1) 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,6 +191,7 @@ export default {
191 transition: all 0.5s; 191 transition: all 0.5s;
192 } 192 }
193 .verify-tips { 193 .verify-tips {
  194 + text-indent: 10px;
194 position: absolute; 195 position: absolute;
195 left: 0px; 196 left: 0px;
196 bottom: 0px; 197 bottom: 0px;
yudao-ui-admin-vue3/src/components/Verifition/src/Verify/VerifyPoints.vue
@@ -57,7 +57,7 @@ @@ -57,7 +57,7 @@
57 </div> 57 </div>
58 </div> 58 </div>
59 </template> 59 </template>
60 -<script type="text/babel"> 60 +<script type="text/babel" setup>
61 /** 61 /**
62 * VerifyPoints 62 * VerifyPoints
63 * @description 点选 63 * @description 点选
@@ -67,215 +67,185 @@ import { aesEncrypt } from &#39;./../utils/ase&#39; @@ -67,215 +67,185 @@ import { aesEncrypt } from &#39;./../utils/ase&#39;
67 import { getCodeApi, reqCheckApi } from '@/api/login' 67 import { getCodeApi, reqCheckApi } from '@/api/login'
68 import { onMounted, reactive, ref, nextTick, toRefs, getCurrentInstance } from 'vue' 68 import { onMounted, reactive, ref, nextTick, toRefs, getCurrentInstance } from 'vue'
69 import { useI18n } from '@/hooks/web/useI18n' 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 let data = { 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 if (res.repCode == '0000') { 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 } else { 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 </script> 251 </script>
yudao-ui-admin-vue3/src/components/Verifition/src/Verify/VerifySlide.vue
@@ -71,7 +71,7 @@ @@ -71,7 +71,7 @@
71 </div> 71 </div>
72 </div> 72 </div>
73 </template> 73 </template>
74 -<script type="text/babel"> 74 +<script type="text/babel" setup>
75 /** 75 /**
76 * VerifySlide 76 * VerifySlide
77 * @description 滑块 77 * @description 滑块
@@ -90,337 +90,298 @@ import { @@ -90,337 +90,298 @@ import {
90 toRefs, 90 toRefs,
91 getCurrentInstance 91 getCurrentInstance
92 } from 'vue' 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 ${t('captcha.success')}` 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 </script> 387 </script>
yudao-ui-admin-vue3/src/components/XModal/src/XModal.vue
@@ -10,8 +10,8 @@ const props = defineProps({ @@ -10,8 +10,8 @@ const props = defineProps({
10 fullscreen: propTypes.bool.def(false), 10 fullscreen: propTypes.bool.def(false),
11 loading: propTypes.bool.def(false), 11 loading: propTypes.bool.def(false),
12 title: propTypes.string.def('弹窗'), 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 minWidth: propTypes.string.def('460'), 15 minWidth: propTypes.string.def('460'),
16 minHeight: propTypes.string.def('320'), 16 minHeight: propTypes.string.def('320'),
17 showFooter: propTypes.bool.def(true) 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,7 +3,6 @@ import { Icon } from &#39;./Icon&#39;
3 import { Form } from '@/components/Form' 3 import { Form } from '@/components/Form'
4 import { Table } from '@/components/Table' 4 import { Table } from '@/components/Table'
5 import { Search } from '@/components/Search' 5 import { Search } from '@/components/Search'
6 -import { Dialog } from '@/components/Dialog'  
7 import { XModal } from '@/components/XModal' 6 import { XModal } from '@/components/XModal'
8 import { XButton, XTextButton } from '@/components/XButton' 7 import { XButton, XTextButton } from '@/components/XButton'
9 import { DictTag } from '@/components/DictTag' 8 import { DictTag } from '@/components/DictTag'
@@ -15,7 +14,6 @@ export const setupGlobCom = (app: App&lt;Element&gt;): void =&gt; { @@ -15,7 +14,6 @@ export const setupGlobCom = (app: App&lt;Element&gt;): void =&gt; {
15 app.component('Form', Form) 14 app.component('Form', Form)
16 app.component('Table', Table) 15 app.component('Table', Table)
17 app.component('Search', Search) 16 app.component('Search', Search)
18 - app.component('Dialog', Dialog)  
19 app.component('XModal', XModal) 17 app.component('XModal', XModal)
20 app.component('XButton', XButton) 18 app.component('XButton', XButton)
21 app.component('XTextButton', XTextButton) 19 app.component('XTextButton', XTextButton)
yudao-ui-admin-vue3/src/config/axios/service.ts
@@ -168,15 +168,19 @@ service.interceptors.response.use( @@ -168,15 +168,19 @@ service.interceptors.response.use(
168 ElMessage.error(t('sys.api.errMsg500')) 168 ElMessage.error(t('sys.api.errMsg500'))
169 return Promise.reject(new Error(msg)) 169 return Promise.reject(new Error(msg))
170 } else if (code === 901) { 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 t('sys.api.errMsg901') + 177 t('sys.api.errMsg901') +
174 '</div>' + 178 '</div>' +
175 '<div> &nbsp; </div>' + 179 '<div> &nbsp; </div>' +
176 '<div>参考 https://doc.iocoder.cn/ 教程</div>' + 180 '<div>参考 https://doc.iocoder.cn/ 教程</div>' +
177 '<div> &nbsp; </div>' + 181 '<div> &nbsp; </div>' +
178 '<div>5 分钟搭建本地环境</div>' 182 '<div>5 分钟搭建本地环境</div>'
179 - ) 183 + })
180 return Promise.reject(new Error(msg)) 184 return Promise.reject(new Error(msg))
181 } else if (code !== 200) { 185 } else if (code !== 200) {
182 if (msg === '无效的刷新令牌') { 186 if (msg === '无效的刷新令牌') {
yudao-ui-admin-vue3/src/directives/permission/hasPermi.ts
1 import type { App } from 'vue' 1 import type { App } from 'vue'
2 -import { useCache } from '@/hooks/web/useCache' 2 +import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
3 import { useI18n } from '@/hooks/web/useI18n' 3 import { useI18n } from '@/hooks/web/useI18n'
4 const { t } = useI18n() // 国际化 4 const { t } = useI18n() // 国际化
5 5
@@ -8,7 +8,7 @@ export function hasPermi(app: App&lt;Element&gt;) { @@ -8,7 +8,7 @@ export function hasPermi(app: App&lt;Element&gt;) {
8 const { wsCache } = useCache() 8 const { wsCache } = useCache()
9 const { value } = binding 9 const { value } = binding
10 const all_permission = '*:*:*' 10 const all_permission = '*:*:*'
11 - const permissions = wsCache.get('user').permissions 11 + const permissions = wsCache.get(CACHE_KEY.USER).permissions
12 12
13 if (value && value instanceof Array && value.length > 0) { 13 if (value && value instanceof Array && value.length > 0) {
14 const permissionFlag = value 14 const permissionFlag = value
yudao-ui-admin-vue3/src/directives/permission/hasRole.ts
1 import type { App } from 'vue' 1 import type { App } from 'vue'
2 -import { useCache } from '@/hooks/web/useCache' 2 +import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
3 import { useI18n } from '@/hooks/web/useI18n' 3 import { useI18n } from '@/hooks/web/useI18n'
4 const { t } = useI18n() // 国际化 4 const { t } = useI18n() // 国际化
5 5
@@ -8,7 +8,7 @@ export function hasRole(app: App&lt;Element&gt;) { @@ -8,7 +8,7 @@ export function hasRole(app: App&lt;Element&gt;) {
8 const { wsCache } = useCache() 8 const { wsCache } = useCache()
9 const { value } = binding 9 const { value } = binding
10 const super_admin = 'admin' 10 const super_admin = 'admin'
11 - const roles = wsCache.get('user').roles 11 + const roles = wsCache.get(CACHE_KEY.USER).roles
12 12
13 if (value && value instanceof Array && value.length > 0) { 13 if (value && value instanceof Array && value.length > 0) {
14 const roleFlag = value 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 +6,16 @@ import WebStorageCache from &#39;web-storage-cache&#39;
6 6
7 type CacheType = 'localStorage' | 'sessionStorage' 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 export const useCache = (type: CacheType = 'localStorage') => { 19 export const useCache = (type: CacheType = 'localStorage') => {
10 const wsCache: WebStorageCache = new WebStorageCache({ 20 const wsCache: WebStorageCache = new WebStorageCache({
11 storage: type 21 storage: type
yudao-ui-admin-vue3/src/hooks/web/useVxeCrudSchemas.ts
@@ -208,7 +208,8 @@ const filterTableSchema = (crudSchema: VxeCrudSchema): VxeGridPropTypes.Columns @@ -208,7 +208,8 @@ const filterTableSchema = (crudSchema: VxeCrudSchema): VxeGridPropTypes.Columns
208 const tableSchemaItem = { 208 const tableSchemaItem = {
209 ...schemaItem.table, 209 ...schemaItem.table,
210 field: schemaItem.field, 210 field: schemaItem.field,
211 - title: schemaItem.table?.title || schemaItem.title 211 + title: schemaItem.table?.title || schemaItem.title,
  212 + minWidth: '80px'
212 } 213 }
213 tableSchemaItem.showOverflow = 'tooltip' 214 tableSchemaItem.showOverflow = 'tooltip'
214 if (schemaItem?.formatter) { 215 if (schemaItem?.formatter) {
@@ -231,6 +232,7 @@ const filterTableSchema = (crudSchema: VxeCrudSchema): VxeGridPropTypes.Columns @@ -231,6 +232,7 @@ const filterTableSchema = (crudSchema: VxeCrudSchema): VxeGridPropTypes.Columns
231 const tableSchemaItem = { 232 const tableSchemaItem = {
232 title: crudSchema.actionTitle ? crudSchema.actionTitle : t('table.action'), 233 title: crudSchema.actionTitle ? crudSchema.actionTitle : t('table.action'),
233 field: 'actionbtns', 234 field: 'actionbtns',
  235 + fixed: 'right' as unknown as VxeColumnPropTypes.Fixed,
234 width: crudSchema.actionWidth ? crudSchema.actionWidth : '200px', 236 width: crudSchema.actionWidth ? crudSchema.actionWidth : '200px',
235 slots: { 237 slots: {
236 default: 'actionbtns_default' 238 default: 'actionbtns_default'
yudao-ui-admin-vue3/src/hooks/web/useVxeGrid.ts
@@ -11,10 +11,12 @@ const message = useMessage() // 消息弹窗 @@ -11,10 +11,12 @@ const message = useMessage() // 消息弹窗
11 11
12 interface UseVxeGridConfig<T = any> { 12 interface UseVxeGridConfig<T = any> {
13 allSchemas: VxeAllSchemas 13 allSchemas: VxeAllSchemas
  14 + height?: number // 高度 默认730
14 topActionSlots?: boolean // 是否开启表格内顶部操作栏插槽 15 topActionSlots?: boolean // 是否开启表格内顶部操作栏插槽
15 treeConfig?: VxeTablePropTypes.TreeConfig // 树形表单配置 16 treeConfig?: VxeTablePropTypes.TreeConfig // 树形表单配置
16 isList?: boolean // 是否不带分页的list 17 isList?: boolean // 是否不带分页的list
17 getListApi: (option: any) => Promise<T> // 获取列表接口 18 getListApi: (option: any) => Promise<T> // 获取列表接口
  19 + getAllListApi?: (option: any) => Promise<T> // 获取全部数据接口 用于VXE导出
18 deleteApi?: (option: any) => Promise<T> // 删除接口 20 deleteApi?: (option: any) => Promise<T> // 删除接口
19 exportListApi?: (option: any) => Promise<T> // 导出接口 21 exportListApi?: (option: any) => Promise<T> // 导出接口
20 exportName?: string // 导出文件夹名称 22 exportName?: string // 导出文件夹名称
@@ -47,7 +49,7 @@ export const useVxeGrid = &lt;T = any&gt;(config?: UseVxeGridConfig&lt;T&gt;) =&gt; { @@ -47,7 +49,7 @@ export const useVxeGrid = &lt;T = any&gt;(config?: UseVxeGridConfig&lt;T&gt;) =&gt; {
47 const gridOptions = reactive<VxeGridProps<any>>({ 49 const gridOptions = reactive<VxeGridProps<any>>({
48 loading: true, 50 loading: true,
49 size: currentSize as any, 51 size: currentSize as any,
50 - height: 730, // 1080高度 52 + height: config?.height ? config.height : 730,
51 rowConfig: { 53 rowConfig: {
52 isCurrent: true, // 当鼠标点击行时,是否要高亮当前行 54 isCurrent: true, // 当鼠标点击行时,是否要高亮当前行
53 isHover: true // 当鼠标移到行时,是否要高亮当前行 55 isHover: true // 当鼠标移到行时,是否要高亮当前行
@@ -99,8 +101,8 @@ export const useVxeGrid = &lt;T = any&gt;(config?: UseVxeGridConfig&lt;T&gt;) =&gt; { @@ -99,8 +101,8 @@ export const useVxeGrid = &lt;T = any&gt;(config?: UseVxeGridConfig&lt;T&gt;) =&gt; {
99 queryAll: ({ form }) => { 101 queryAll: ({ form }) => {
100 const queryParams = Object.assign({}, JSON.parse(JSON.stringify(form))) 102 const queryParams = Object.assign({}, JSON.parse(JSON.stringify(form)))
101 return new Promise(async (resolve) => { 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 } else { 106 } else {
105 resolve(await config?.getListApi(queryParams)) 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,7 +115,7 @@ export const useVxeGrid = &lt;T = any&gt;(config?: UseVxeGridConfig&lt;T&gt;) =&gt; {
113 // 默认选中类型 115 // 默认选中类型
114 type: 'csv', 116 type: 'csv',
115 // 自定义数据量列表 117 // 自定义数据量列表
116 - modes: ['current', 'all'], 118 + modes: config?.getAllListApi ? ['current', 'all'] : ['current'],
117 columns: config?.allSchemas.printSchema 119 columns: config?.allSchemas.printSchema
118 } 120 }
119 }) 121 })
yudao-ui-admin-vue3/src/layout/Layout.vue
@@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
2 import { computed, defineComponent, unref } from 'vue' 2 import { computed, defineComponent, unref } from 'vue'
3 import { useAppStore } from '@/store/modules/app' 3 import { useAppStore } from '@/store/modules/app'
4 import { Backtop } from '@/components/Backtop' 4 import { Backtop } from '@/components/Backtop'
5 -import { Setting } from '@/components/Setting' 5 +import { Setting } from '@/layout/components/Setting'
6 import { useRenderLayout } from './components/useRenderLayout' 6 import { useRenderLayout } from './components/useRenderLayout'
7 import { useDesign } from '@/hooks/web/useDesign' 7 import { useDesign } from '@/hooks/web/useDesign'
8 8
yudao-ui-admin-vue3/src/layout/components/AppView.vue
1 <script setup lang="ts"> 1 <script setup lang="ts">
2 import { useTagsViewStore } from '@/store/modules/tagsView' 2 import { useTagsViewStore } from '@/store/modules/tagsView'
3 import { useAppStore } from '@/store/modules/app' 3 import { useAppStore } from '@/store/modules/app'
4 -import { Footer } from '@/components/Footer' 4 +import { Footer } from '@/layout/components/Footer'
5 import { computed } from 'vue' 5 import { computed } from 'vue'
6 6
7 const appStore = useAppStore() 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,13 +3,13 @@ import { ElDrawer, ElDivider, ElMessage } from &#39;element-plus&#39;
3 import { ref, unref, computed, watch } from 'vue' 3 import { ref, unref, computed, watch } from 'vue'
4 import { useCssVar, useClipboard } from '@vueuse/core' 4 import { useCssVar, useClipboard } from '@vueuse/core'
5 import { useI18n } from '@/hooks/web/useI18n' 5 import { useI18n } from '@/hooks/web/useI18n'
6 -import { useCache } from '@/hooks/web/useCache' 6 +import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
7 import { useDesign } from '@/hooks/web/useDesign' 7 import { useDesign } from '@/hooks/web/useDesign'
8 8
9 import { trim, setCssVar } from '@/utils' 9 import { trim, setCssVar } from '@/utils'
10 import { colorIsDark, lighten, hexToRGB } from '@/utils/color' 10 import { colorIsDark, lighten, hexToRGB } from '@/utils/color'
11 import { useAppStore } from '@/store/modules/app' 11 import { useAppStore } from '@/store/modules/app'
12 -import { ThemeSwitch } from '@/components/ThemeSwitch' 12 +import { ThemeSwitch } from '@/layout/components/ThemeSwitch'
13 import ColorRadioPicker from './components/ColorRadioPicker.vue' 13 import ColorRadioPicker from './components/ColorRadioPicker.vue'
14 import InterfaceDisplay from './components/InterfaceDisplay.vue' 14 import InterfaceDisplay from './components/InterfaceDisplay.vue'
15 import LayoutRadioPicker from './components/LayoutRadioPicker.vue' 15 import LayoutRadioPicker from './components/LayoutRadioPicker.vue'
@@ -188,9 +188,9 @@ const copyConfig = async () =&gt; { @@ -188,9 +188,9 @@ const copyConfig = async () =&gt; {
188 // 清空缓存 188 // 清空缓存
189 const clear = () => { 189 const clear = () => {
190 const { wsCache } = useCache() 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 window.location.reload() 194 window.location.reload()
195 } 195 }
196 </script> 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,7 +5,7 @@ import { computed, unref, defineComponent, watch, ref, onMounted } from &#39;vue&#39;
5 import { useI18n } from '@/hooks/web/useI18n' 5 import { useI18n } from '@/hooks/web/useI18n'
6 import { ElScrollbar } from 'element-plus' 6 import { ElScrollbar } from 'element-plus'
7 import { Icon } from '@/components/Icon' 7 import { Icon } from '@/components/Icon'
8 -import { Menu } from '@/components/Menu' 8 +import { Menu } from '@/layout/components/Menu'
9 import { useRouter } from 'vue-router' 9 import { useRouter } from 'vue-router'
10 import { pathResolve } from '@/utils/routerHelper' 10 import { pathResolve } from '@/utils/routerHelper'
11 import { cloneDeep } from 'lodash-es' 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 import type { RouteMeta } from 'vue-router' 2 import type { RouteMeta } from 'vue-router'
3 import { isUrl } from '@/utils/is' 3 import { isUrl } from '@/utils/is'
4 import { cloneDeep } from 'lodash-es' 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 +7,7 @@ import { useTagsViewStore } from &#39;@/store/modules/tagsView&#39;
7 import { useAppStore } from '@/store/modules/app' 7 import { useAppStore } from '@/store/modules/app'
8 import { useI18n } from '@/hooks/web/useI18n' 8 import { useI18n } from '@/hooks/web/useI18n'
9 import { filterAffixTags } from './helper' 9 import { filterAffixTags } from './helper'
10 -import { ContextMenu, ContextMenuExpose } from '@/components/ContextMenu' 10 +import { ContextMenu, ContextMenuExpose } from '@/layout/components/ContextMenu'
11 import { useDesign } from '@/hooks/web/useDesign' 11 import { useDesign } from '@/hooks/web/useDesign'
12 import { useTemplateRefsList } from '@vueuse/core' 12 import { useTemplateRefsList } from '@vueuse/core'
13 import { ElScrollbar } from 'element-plus' 13 import { ElScrollbar } from 'element-plus'
@@ -114,8 +114,8 @@ const toLastView = () =&gt; { @@ -114,8 +114,8 @@ const toLastView = () =&gt; {
114 addTags() 114 addTags()
115 return 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,7 +128,6 @@ const moveToCurrentTag = async () =&gt; {
128 if (v.fullPath !== unref(currentRoute).fullPath) { 128 if (v.fullPath !== unref(currentRoute).fullPath) {
129 tagsViewStore.updateVisitedView(unref(currentRoute)) 129 tagsViewStore.updateVisitedView(unref(currentRoute))
130 } 130 }
131 -  
132 break 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 <script lang="tsx"> 1 <script lang="tsx">
2 import { defineComponent, computed } from 'vue' 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 import { useAppStore } from '@/store/modules/app' 9 import { useAppStore } from '@/store/modules/app'
10 import { useDesign } from '@/hooks/web/useDesign' 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 <script setup lang="ts"> 1 <script setup lang="ts">
2 import { ElDropdown, ElDropdownMenu, ElDropdownItem, ElMessageBox } from 'element-plus' 2 import { ElDropdown, ElDropdownMenu, ElDropdownItem, ElMessageBox } from 'element-plus'
3 import { useI18n } from '@/hooks/web/useI18n' 3 import { useI18n } from '@/hooks/web/useI18n'
4 -import { useCache } from '@/hooks/web/useCache' 4 +import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
5 import { useRouter } from 'vue-router' 5 import { useRouter } from 'vue-router'
6 import { useDesign } from '@/hooks/web/useDesign' 6 import { useDesign } from '@/hooks/web/useDesign'
7 import avatarImg from '@/assets/imgs/avatar.gif' 7 import avatarImg from '@/assets/imgs/avatar.gif'
@@ -22,7 +22,7 @@ const { getPrefixCls } = useDesign() @@ -22,7 +22,7 @@ const { getPrefixCls } = useDesign()
22 22
23 const prefixCls = getPrefixCls('user-info') 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 const avatar = user.user.avatar ? user.user.avatar : avatarImg 27 const avatar = user.user.avatar ? user.user.avatar : avatarImg
28 28
yudao-ui-admin-vue3/src/layout/components/useRenderLayout.tsx
1 import { computed } from 'vue' 1 import { computed } from 'vue'
2 import { useAppStore } from '@/store/modules/app' 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 import AppView from './AppView.vue' 7 import AppView from './AppView.vue'
8 import ToolHeader from './ToolHeader.vue' 8 import ToolHeader from './ToolHeader.vue'
9 import { ElScrollbar } from 'element-plus' 9 import { ElScrollbar } from 'element-plus'
yudao-ui-admin-vue3/src/router/index.ts
1 import type { App } from 'vue' 1 import type { App } from 'vue'
2 -import { getAccessToken } from '@/utils/auth'  
3 import type { RouteRecordRaw } from 'vue-router' 2 import type { RouteRecordRaw } from 'vue-router'
  3 +import { createRouter, createWebHashHistory } from 'vue-router'
4 import remainingRouter from './modules/remaining' 4 import remainingRouter from './modules/remaining'
  5 +import { isRelogin } from '@/config/axios/service'
  6 +import { getAccessToken } from '@/utils/auth'
5 import { useTitle } from '@/hooks/web/useTitle' 7 import { useTitle } from '@/hooks/web/useTitle'
6 import { useNProgress } from '@/hooks/web/useNProgress' 8 import { useNProgress } from '@/hooks/web/useNProgress'
  9 +import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
7 import { usePageLoading } from '@/hooks/web/usePageLoading' 10 import { usePageLoading } from '@/hooks/web/usePageLoading'
8 -import { createRouter, createWebHashHistory } from 'vue-router'  
9 -import { usePermissionStoreWithOut } from '@/store/modules/permission'  
10 import { useDictStoreWithOut } from '@/store/modules/dict' 11 import { useDictStoreWithOut } from '@/store/modules/dict'
11 import { useUserStoreWithOut } from '@/store/modules/user' 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 import { getInfoApi } from '@/api/login' 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 const { wsCache } = useCache('sessionStorage') 17 const { wsCache } = useCache('sessionStorage')
18 18
@@ -50,12 +50,12 @@ router.beforeEach(async (to, from, next) =&gt; { @@ -50,12 +50,12 @@ router.beforeEach(async (to, from, next) =&gt; {
50 const dictStore = useDictStoreWithOut() 50 const dictStore = useDictStoreWithOut()
51 const userStore = useUserStoreWithOut() 51 const userStore = useUserStoreWithOut()
52 const permissionStore = usePermissionStoreWithOut() 52 const permissionStore = usePermissionStoreWithOut()
53 - const dictMap = wsCache.get('dictCache') 53 + const dictMap = wsCache.get(CACHE_KEY.DICT_CACHE)
54 if (!dictMap) { 54 if (!dictMap) {
55 const res = await listSimpleDictDataApi() 55 const res = await listSimpleDictDataApi()
56 dictStore.setDictMap(res) 56 dictStore.setDictMap(res)
57 } 57 }
58 - if (userStore.getRoles.length === 0) { 58 + if (!userStore.getIsSetUser) {
59 isRelogin.show = true 59 isRelogin.show = true
60 const res = await getInfoApi() 60 const res = await getInfoApi()
61 await userStore.setUserInfoAction(res) 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,7 +2,7 @@ import { defineStore } from &#39;pinia&#39;
2 import { store } from '../index' 2 import { store } from '../index'
3 import { setCssVar, humpToUnderline } from '@/utils' 3 import { setCssVar, humpToUnderline } from '@/utils'
4 import { ElMessage } from 'element-plus' 4 import { ElMessage } from 'element-plus'
5 -import { useCache } from '@/hooks/web/useCache' 5 +import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
6 import { ElementPlusSize } from '@/types/elementPlus' 6 import { ElementPlusSize } from '@/types/elementPlus'
7 import { LayoutType } from '@/types/layout' 7 import { LayoutType } from '@/types/layout'
8 import { ThemeTypes } from '@/types/theme' 8 import { ThemeTypes } from '@/types/theme'
@@ -61,10 +61,10 @@ export const useAppStore = defineStore(&#39;app&#39;, { @@ -61,10 +61,10 @@ export const useAppStore = defineStore(&#39;app&#39;, {
61 greyMode: false, // 是否开始灰色模式,用于特殊悼念日 61 greyMode: false, // 是否开始灰色模式,用于特殊悼念日
62 fixedMenu: wsCache.get('fixedMenu') || false, // 是否固定菜单 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 currentSize: wsCache.get('default') || 'default', // 组件尺寸 66 currentSize: wsCache.get('default') || 'default', // 组件尺寸
67 - theme: wsCache.get('theme') || { 67 + theme: wsCache.get(CACHE_KEY.THEME) || {
68 // 主题色 68 // 主题色
69 elColorPrimary: '#409eff', 69 elColorPrimary: '#409eff',
70 // 左侧菜单边框颜色 70 // 左侧菜单边框颜色
@@ -223,7 +223,7 @@ export const useAppStore = defineStore(&#39;app&#39;, { @@ -223,7 +223,7 @@ export const useAppStore = defineStore(&#39;app&#39;, {
223 return 223 return
224 } 224 }
225 this.layout = layout 225 this.layout = layout
226 - wsCache.set('layout', this.layout) 226 + wsCache.set(CACHE_KEY.LAYOUT, this.layout)
227 }, 227 },
228 setTitle(title: string) { 228 setTitle(title: string) {
229 this.title = title 229 this.title = title
@@ -237,7 +237,7 @@ export const useAppStore = defineStore(&#39;app&#39;, { @@ -237,7 +237,7 @@ export const useAppStore = defineStore(&#39;app&#39;, {
237 document.documentElement.classList.add('light') 237 document.documentElement.classList.add('light')
238 document.documentElement.classList.remove('dark') 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 setCurrentSize(currentSize: ElementPlusSize) { 242 setCurrentSize(currentSize: ElementPlusSize) {
243 this.currentSize = currentSize 243 this.currentSize = currentSize
@@ -248,7 +248,7 @@ export const useAppStore = defineStore(&#39;app&#39;, { @@ -248,7 +248,7 @@ export const useAppStore = defineStore(&#39;app&#39;, {
248 }, 248 },
249 setTheme(theme: ThemeTypes) { 249 setTheme(theme: ThemeTypes) {
250 this.theme = Object.assign(this.theme, theme) 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 setCssVarTheme() { 253 setCssVarTheme() {
254 for (const key in this.theme) { 254 for (const key in this.theme) {
yudao-ui-admin-vue3/src/store/modules/dict.ts
1 import { defineStore } from 'pinia' 1 import { defineStore } from 'pinia'
2 import { store } from '../index' 2 import { store } from '../index'
3 import { DictDataVO } from '@/api/system/dict/types' 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 const { wsCache } = useCache('sessionStorage') 5 const { wsCache } = useCache('sessionStorage')
6 6
7 export interface DictValueType { 7 export interface DictValueType {
@@ -24,7 +24,7 @@ export const useDictStore = defineStore(&#39;dict&#39;, { @@ -24,7 +24,7 @@ export const useDictStore = defineStore(&#39;dict&#39;, {
24 }), 24 }),
25 getters: { 25 getters: {
26 getDictMap(): Recordable { 26 getDictMap(): Recordable {
27 - const dictMap = wsCache.get('dictCache') 27 + const dictMap = wsCache.get(CACHE_KEY.DICT_CACHE)
28 return dictMap ? dictMap : this.dictMap 28 return dictMap ? dictMap : this.dictMap
29 }, 29 },
30 getHasDictData(): boolean { 30 getHasDictData(): boolean {
@@ -54,7 +54,7 @@ export const useDictStore = defineStore(&#39;dict&#39;, { @@ -54,7 +54,7 @@ export const useDictStore = defineStore(&#39;dict&#39;, {
54 }) 54 })
55 }) 55 })
56 this.dictMap = dictDataMap 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,7 +2,7 @@ import { defineStore } from &#39;pinia&#39;
2 import { store } from '../index' 2 import { store } from '../index'
3 import zhCn from 'element-plus/es/locale/lang/zh-cn' 3 import zhCn from 'element-plus/es/locale/lang/zh-cn'
4 import en from 'element-plus/es/locale/lang/en' 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 import { LocaleDropdownType } from '@/types/localeDropdown' 6 import { LocaleDropdownType } from '@/types/localeDropdown'
7 7
8 const { wsCache } = useCache() 8 const { wsCache } = useCache()
@@ -20,8 +20,8 @@ export const useLocaleStore = defineStore(&#39;locales&#39;, { @@ -20,8 +20,8 @@ export const useLocaleStore = defineStore(&#39;locales&#39;, {
20 state: (): LocaleState => { 20 state: (): LocaleState => {
21 return { 21 return {
22 currentLocale: { 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 localeMap: [ 27 localeMap: [
@@ -49,7 +49,7 @@ export const useLocaleStore = defineStore(&#39;locales&#39;, { @@ -49,7 +49,7 @@ export const useLocaleStore = defineStore(&#39;locales&#39;, {
49 // this.locale = Object.assign(this.locale, localeMap) 49 // this.locale = Object.assign(this.locale, localeMap)
50 this.currentLocale.lang = localeMap?.lang 50 this.currentLocale.lang = localeMap?.lang
51 this.currentLocale.elLocale = elLocaleMap[localeMap?.lang] 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,7 +4,7 @@ import { cloneDeep } from &#39;lodash-es&#39;
4 import remainingRouter from '@/router/modules/remaining' 4 import remainingRouter from '@/router/modules/remaining'
5 import { generateRoute, flatMultiLevelRoutes } from '@/utils/routerHelper' 5 import { generateRoute, flatMultiLevelRoutes } from '@/utils/routerHelper'
6 import { getAsyncRoutesApi } from '@/api/login' 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 const { wsCache } = useCache() 9 const { wsCache } = useCache()
10 10
@@ -35,11 +35,11 @@ export const usePermissionStore = defineStore(&#39;permission&#39;, { @@ -35,11 +35,11 @@ export const usePermissionStore = defineStore(&#39;permission&#39;, {
35 async generateRoutes(): Promise<unknown> { 35 async generateRoutes(): Promise<unknown> {
36 return new Promise<void>(async (resolve) => { 36 return new Promise<void>(async (resolve) => {
37 let res: AppCustomRouteRecordRaw[] 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 } else { 40 } else {
41 res = await getAsyncRoutesApi() 41 res = await getAsyncRoutesApi()
42 - wsCache.set('roleRouters', res) 42 + wsCache.set(CACHE_KEY.ROLE_ROUTERS, res)
43 } 43 }
44 const routerMap: AppRouteRecordRaw[] = generateRoute(res as AppCustomRouteRecordRaw[]) 44 const routerMap: AppRouteRecordRaw[] = generateRoute(res as AppCustomRouteRecordRaw[])
45 // 动态路由,404一定要放到最后面 45 // 动态路由,404一定要放到最后面
yudao-ui-admin-vue3/src/store/modules/user.ts
1 import { store } from '../index' 1 import { store } from '../index'
2 import { defineStore } from 'pinia' 2 import { defineStore } from 'pinia'
3 import { getAccessToken, removeToken } from '@/utils/auth' 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 const { wsCache } = useCache() 6 const { wsCache } = useCache()
7 7
@@ -13,6 +13,7 @@ interface UserVO { @@ -13,6 +13,7 @@ interface UserVO {
13 interface UserInfoVO { 13 interface UserInfoVO {
14 permissions: string[] 14 permissions: string[]
15 roles: string[] 15 roles: string[]
  16 + isSetUser: boolean
16 user: UserVO 17 user: UserVO
17 } 18 }
18 19
@@ -20,6 +21,7 @@ export const useUserStore = defineStore(&#39;admin-user&#39;, { @@ -20,6 +21,7 @@ export const useUserStore = defineStore(&#39;admin-user&#39;, {
20 state: (): UserInfoVO => ({ 21 state: (): UserInfoVO => ({
21 permissions: [], 22 permissions: [],
22 roles: [], 23 roles: [],
  24 + isSetUser: false,
23 user: { 25 user: {
24 id: 0, 26 id: 0,
25 avatar: '', 27 avatar: '',
@@ -33,6 +35,9 @@ export const useUserStore = defineStore(&#39;admin-user&#39;, { @@ -33,6 +35,9 @@ export const useUserStore = defineStore(&#39;admin-user&#39;, {
33 getRoles(): string[] { 35 getRoles(): string[] {
34 return this.roles 36 return this.roles
35 }, 37 },
  38 + getIsSetUser(): boolean {
  39 + return this.isSetUser
  40 + },
36 getUser(): UserVO { 41 getUser(): UserVO {
37 return this.user 42 return this.user
38 } 43 }
@@ -46,7 +51,8 @@ export const useUserStore = defineStore(&#39;admin-user&#39;, { @@ -46,7 +51,8 @@ export const useUserStore = defineStore(&#39;admin-user&#39;, {
46 this.permissions = userInfo.permissions 51 this.permissions = userInfo.permissions
47 this.roles = userInfo.roles 52 this.roles = userInfo.roles
48 this.user = userInfo.user 53 this.user = userInfo.user
49 - wsCache.set('user', userInfo) 54 + this.isSetUser = true
  55 + wsCache.set(CACHE_KEY.USER, userInfo)
50 }, 56 },
51 loginOut() { 57 loginOut() {
52 removeToken() 58 removeToken()
@@ -56,6 +62,7 @@ export const useUserStore = defineStore(&#39;admin-user&#39;, { @@ -56,6 +62,7 @@ export const useUserStore = defineStore(&#39;admin-user&#39;, {
56 resetState() { 62 resetState() {
57 this.permissions = [] 63 this.permissions = []
58 this.roles = [] 64 this.roles = []
  65 + this.isSetUser = false
59 this.user = { 66 this.user = {
60 id: 0, 67 id: 0,
61 avatar: '', 68 avatar: '',
yudao-ui-admin-vue3/src/types/components.d.ts
@@ -21,6 +21,8 @@ export type ComponentName = @@ -21,6 +21,8 @@ export type ComponentName =
21 | 'TreeSelect' 21 | 'TreeSelect'
22 | 'InputPassword' 22 | 'InputPassword'
23 | 'Editor' 23 | 'Editor'
  24 + | 'UploadImg'
  25 + | 'UploadFile'
24 26
25 export type ColProps = { 27 export type ColProps = {
26 span?: number 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 import { TokenType } from '@/api/login/types' 2 import { TokenType } from '@/api/login/types'
3 import { decrypt, encrypt } from '@/utils/jsencrypt' 3 import { decrypt, encrypt } from '@/utils/jsencrypt'
4 4
  5 +const { wsCache } = useCache()
  6 +
5 const AccessTokenKey = 'ACCESS_TOKEN' 7 const AccessTokenKey = 'ACCESS_TOKEN'
6 const RefreshTokenKey = 'REFRESH_TOKEN' 8 const RefreshTokenKey = 'REFRESH_TOKEN'
7 9
8 // 获取token 10 // 获取token
9 export const getAccessToken = () => { 11 export const getAccessToken = () => {
10 // 此处与TokenKey相同,此写法解决初始化时Cookies中不存在TokenKey报错 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 // 刷新token 16 // 刷新token
15 export const getRefreshToken = () => { 17 export const getRefreshToken = () => {
16 - return Cookies.get(RefreshTokenKey) 18 + return wsCache.get(RefreshTokenKey)
17 } 19 }
18 20
19 // 设置token 21 // 设置token
20 export const setToken = (token: TokenType) => { 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 // 删除token 27 // 删除token
26 export const removeToken = () => { 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 /** 格式化token(jwt格式) */ 33 /** 格式化token(jwt格式) */
@@ -39,40 +41,40 @@ const PasswordKey = &#39;PASSWORD&#39; @@ -39,40 +41,40 @@ const PasswordKey = &#39;PASSWORD&#39;
39 const RememberMeKey = 'REMEMBER_ME' 41 const RememberMeKey = 'REMEMBER_ME'
40 42
41 export const getUsername = () => { 43 export const getUsername = () => {
42 - return Cookies.get(UsernameKey) 44 + return wsCache.get(UsernameKey)
43 } 45 }
44 46
45 export const setUsername = (username: string) => { 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 export const removeUsername = () => { 51 export const removeUsername = () => {
50 - Cookies.remove(UsernameKey) 52 + wsCache.delete(UsernameKey)
51 } 53 }
52 54
53 export const getPassword = () => { 55 export const getPassword = () => {
54 - const password = Cookies.get(PasswordKey) 56 + const password = wsCache.get(PasswordKey)
55 return password ? decrypt(password) : undefined 57 return password ? decrypt(password) : undefined
56 } 58 }
57 59
58 export const setPassword = (password: string) => { 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 export const removePassword = () => { 64 export const removePassword = () => {
63 - Cookies.remove(PasswordKey) 65 + wsCache.delete(PasswordKey)
64 } 66 }
65 67
66 export const getRememberMe = () => { 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 export const removeRememberMe = () => { 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,25 +83,25 @@ const TenantIdKey = &#39;TENANT_ID&#39;
81 const TenantNameKey = 'TENANT_NAME' 83 const TenantNameKey = 'TENANT_NAME'
82 84
83 export const getTenantName = () => { 85 export const getTenantName = () => {
84 - return Cookies.get(TenantNameKey) 86 + return wsCache.get(TenantNameKey)
85 } 87 }
86 88
87 export const setTenantName = (username: string) => { 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 export const removeTenantName = () => { 93 export const removeTenantName = () => {
92 - Cookies.remove(TenantNameKey) 94 + wsCache.delete(TenantNameKey)
93 } 95 }
94 96
95 export const getTenantId = () => { 97 export const getTenantId = () => {
96 - return Cookies.get(TenantIdKey) 98 + return wsCache.get(TenantIdKey)
97 } 99 }
98 100
99 export const setTenantId = (username: string) => { 101 export const setTenantId = (username: string) => {
100 - Cookies.set(TenantIdKey, username) 102 + wsCache.set(TenantIdKey, username)
101 } 103 }
102 104
103 export const removeTenantId = () => { 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,7 +18,7 @@ export const getParentLayout = () =&gt; {
18 } 18 }
19 19
20 // 按照路由中meta下的rank等级升序来排序路由 20 // 按照路由中meta下的rank等级升序来排序路由
21 -export function ascending(arr: any[]) { 21 +export const ascending = (arr: any[]) => {
22 arr.forEach((v) => { 22 arr.forEach((v) => {
23 if (v?.meta?.rank === null) v.meta.rank = undefined 23 if (v?.meta?.rank === null) v.meta.rank = undefined
24 if (v?.meta?.rank === 0) { 24 if (v?.meta?.rank === 0) {
@@ -109,7 +109,7 @@ export const generateRoute = (routes: AppCustomRouteRecordRaw[]): AppRouteRecord @@ -109,7 +109,7 @@ export const generateRoute = (routes: AppCustomRouteRecordRaw[]): AppRouteRecord
109 data.children = generateRoute(route.children) 109 data.children = generateRoute(route.children)
110 } 110 }
111 } 111 }
112 - res.push(data) 112 + res.push(data as AppRouteRecordRaw)
113 } 113 }
114 return res 114 return res
115 } 115 }
@@ -203,7 +203,7 @@ const addToChildren = ( @@ -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 str = (str || '').toLowerCase().replace(/-(.)/g, function (group1: string) { 207 str = (str || '').toLowerCase().replace(/-(.)/g, function (group1: string) {
208 return group1.toUpperCase() 208 return group1.toUpperCase()
209 }) 209 })
yudao-ui-admin-vue3/src/utils/tree.ts
@@ -8,6 +8,11 @@ const DEFAULT_CONFIG: TreeHelperConfig = { @@ -8,6 +8,11 @@ const DEFAULT_CONFIG: TreeHelperConfig = {
8 children: 'children', 8 children: 'children',
9 pid: 'pid' 9 pid: 'pid'
10 } 10 }
  11 +export const defaultProps = {
  12 + children: 'children',
  13 + label: 'name',
  14 + value: 'id'
  15 +}
11 16
12 const getConfig = (config: Partial<TreeHelperConfig>) => Object.assign({}, DEFAULT_CONFIG, config) 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,6 +219,10 @@ export const eachTree = (treeDatas: any[], callBack: Fn, parentNode = {}) =&gt; {
214 * @param {*} children 孩子节点字段 默认 'children' 219 * @param {*} children 孩子节点字段 默认 'children'
215 */ 220 */
216 export const handleTree = (data: any[], id?: string, parentId?: string, children?: string) => { 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 const config = { 226 const config = {
218 id: id || 'id', 227 id: id || 'id',
219 parentId: parentId || 'parentId', 228 parentId: parentId || 'parentId',
yudao-ui-admin-vue3/src/views/Error/403.vue
1 <template> 1 <template>
2 - <Error type="403" @error-click="errorClick" /> 2 + <Error type="403" @error-click="errorClick()" />
3 </template> 3 </template>
4 <script setup lang="ts"> 4 <script setup lang="ts">
5 import { Error } from '@/components/Error' 5 import { Error } from '@/components/Error'
yudao-ui-admin-vue3/src/views/Error/404.vue
1 <template> 1 <template>
2 - <Error @error-click="errorClick" /> 2 + <Error @error-click="errorClick()" />
3 </template> 3 </template>
4 <script setup lang="ts"> 4 <script setup lang="ts">
5 import { Error } from '@/components/Error' 5 import { Error } from '@/components/Error'
yudao-ui-admin-vue3/src/views/Error/500.vue
1 <template> 1 <template>
2 - <Error type="500" @error-click="errorClick" /> 2 + <Error type="500" @error-click="errorClick()" />
3 </template> 3 </template>
4 <script setup lang="ts"> 4 <script setup lang="ts">
5 import { Error } from '@/components/Error' 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,20 +167,21 @@ import { EChartsOption } from &#39;echarts&#39;
167 import { ElRow, ElCol, ElSkeleton, ElCard, ElDivider, ElLink } from 'element-plus' 167 import { ElRow, ElCol, ElSkeleton, ElCard, ElDivider, ElLink } from 'element-plus'
168 import { formatTime } from '@/utils' 168 import { formatTime } from '@/utils'
169 import { useI18n } from '@/hooks/web/useI18n' 169 import { useI18n } from '@/hooks/web/useI18n'
170 -import { useCache } from '@/hooks/web/useCache' 170 +import { useUserStore } from '@/store/modules/user'
171 import { useWatermark } from '@/hooks/web/useWatermark' 171 import { useWatermark } from '@/hooks/web/useWatermark'
172 import { Echart } from '@/components/Echart' 172 import { Echart } from '@/components/Echart'
173 import { CountTo } from '@/components/CountTo' 173 import { CountTo } from '@/components/CountTo'
174 import { Highlight } from '@/components/Highlight' 174 import { Highlight } from '@/components/Highlight'
  175 +import avatarImg from '@/assets/imgs/avatar.gif'
175 import type { WorkplaceTotal, Project, Notice, Shortcut } from './types' 176 import type { WorkplaceTotal, Project, Notice, Shortcut } from './types'
176 import { pieOptions, barOptions } from './echarts-data' 177 import { pieOptions, barOptions } from './echarts-data'
177 178
178 const { t } = useI18n() 179 const { t } = useI18n()
179 -const { wsCache } = useCache() 180 +const userStore = useUserStore()
180 const { setWatermark } = useWatermark() 181 const { setWatermark } = useWatermark()
181 const loading = ref(true) 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 const pieOptionsData = reactive<EChartsOption>(pieOptions) as EChartsOption 185 const pieOptionsData = reactive<EChartsOption>(pieOptions) as EChartsOption
185 // 获取统计数 186 // 获取统计数
186 let totalSate = reactive<WorkplaceTotal>({ 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,8 +63,8 @@ import { underlineToHump } from &#39;@/utils&#39;
63 import { useI18n } from '@/hooks/web/useI18n' 63 import { useI18n } from '@/hooks/web/useI18n'
64 import { useDesign } from '@/hooks/web/useDesign' 64 import { useDesign } from '@/hooks/web/useDesign'
65 import { useAppStore } from '@/store/modules/app' 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 import { LoginForm, MobileForm, RegisterForm, QrCodeForm } from './components' 68 import { LoginForm, MobileForm, RegisterForm, QrCodeForm } from './components'
69 69
70 const { t } = useI18n() 70 const { t } = useI18n()
yudao-ui-admin-vue3/src/views/Login/components/LoginForm.vue
@@ -16,7 +16,7 @@ @@ -16,7 +16,7 @@
16 </el-form-item> 16 </el-form-item>
17 </el-col> 17 </el-col>
18 <el-col :span="24" style="padding-left: 10px; padding-right: 10px"> 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 <el-input 20 <el-input
21 type="text" 21 type="text"
22 v-model="loginData.loginForm.tenantName" 22 v-model="loginData.loginForm.tenantName"
@@ -65,9 +65,13 @@ @@ -65,9 +65,13 @@
65 </el-col> 65 </el-col>
66 <el-col :span="24" style="padding-left: 10px; padding-right: 10px"> 66 <el-col :span="24" style="padding-left: 10px; padding-right: 10px">
67 <el-form-item> 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 </el-form-item> 75 </el-form-item>
72 </el-col> 76 </el-col>
73 <Verify 77 <Verify
@@ -81,19 +85,25 @@ @@ -81,19 +85,25 @@
81 <el-form-item> 85 <el-form-item>
82 <el-row justify="space-between" style="width: 100%" :gutter="5"> 86 <el-row justify="space-between" style="width: 100%" :gutter="5">
83 <el-col :span="8"> 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 </el-col> 93 </el-col>
88 <el-col :span="8"> 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 </el-col> 100 </el-col>
93 <el-col :span="8"> 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 </el-col> 107 </el-col>
98 </el-row> 108 </el-row>
99 </el-form-item> 109 </el-form-item>
@@ -103,32 +113,13 @@ @@ -103,32 +113,13 @@
103 <el-form-item> 113 <el-form-item>
104 <div class="flex justify-between w-[100%]"> 114 <div class="flex justify-between w-[100%]">
105 <Icon 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 :size="30" 119 :size="30"
115 class="cursor-pointer anticon" 120 class="cursor-pointer anticon"
116 color="#999" 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 </div> 124 </div>
134 </el-form-item> 125 </el-form-item>
@@ -150,21 +141,24 @@ import { @@ -150,21 +141,24 @@ import {
150 ElDivider, 141 ElDivider,
151 ElLoading 142 ElLoading
152 } from 'element-plus' 143 } from 'element-plus'
153 -import Cookies from 'js-cookie'  
154 import { useRouter } from 'vue-router' 144 import { useRouter } from 'vue-router'
155 import type { RouteLocationNormalizedLoaded } from 'vue-router' 145 import type { RouteLocationNormalizedLoaded } from 'vue-router'
156 import { useI18n } from '@/hooks/web/useI18n' 146 import { useI18n } from '@/hooks/web/useI18n'
157 import { useIcon } from '@/hooks/web/useIcon' 147 import { useIcon } from '@/hooks/web/useIcon'
  148 +import { useMessage } from '@/hooks/web/useMessage'
158 import { required } from '@/utils/formRules' 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 import { Verify } from '@/components/Verifition' 152 import { Verify } from '@/components/Verifition'
163 import { usePermissionStore } from '@/store/modules/permission' 153 import { usePermissionStore } from '@/store/modules/permission'
164 import * as LoginApi from '@/api/login' 154 import * as LoginApi from '@/api/login'
165 import { LoginStateEnum, useLoginState, useFormValid } from './useLogin' 155 import { LoginStateEnum, useLoginState, useFormValid } from './useLogin'
166 156
167 const { t } = useI18n() 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 const formLogin = ref() 162 const formLogin = ref()
169 const { validForm } = useFormValid(formLogin) 163 const { validForm } = useFormValid(formLogin)
170 const { setLoginState, getLoginState } = useLoginState() 164 const { setLoginState, getLoginState } = useLoginState()
@@ -172,9 +166,6 @@ const { currentRoute, push } = useRouter() @@ -172,9 +166,6 @@ const { currentRoute, push } = useRouter()
172 const permissionStore = usePermissionStore() 166 const permissionStore = usePermissionStore()
173 const redirect = ref<string>('') 167 const redirect = ref<string>('')
174 const loginLoading = ref(false) 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 const verify = ref() 169 const verify = ref()
179 const captchaType = ref('blockPuzzle') // blockPuzzle 滑块 clickWord 点击文字 170 const captchaType = ref('blockPuzzle') // blockPuzzle 滑块 clickWord 点击文字
180 171
@@ -194,16 +185,33 @@ const loginData = reactive({ @@ -194,16 +185,33 @@ const loginData = reactive({
194 signIn: false 185 signIn: false
195 }, 186 },
196 loginForm: { 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 captchaVerification: '', 191 captchaVerification: '',
203 rememberMe: false 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 const getCode = async () => { 216 const getCode = async () => {
209 // 情况一,未开启:则直接登录 217 // 情况一,未开启:则直接登录
@@ -217,17 +225,19 @@ const getCode = async () =&gt; { @@ -217,17 +225,19 @@ const getCode = async () =&gt; {
217 } 225 }
218 //获取租户ID 226 //获取租户ID
219 const getTenantId = async () => { 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 const getCookie = () => { 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 : undefined 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 loginData.loginForm = { 241 loginData.loginForm = {
232 ...loginData.loginForm, 242 ...loginData.loginForm,
233 username: username ? username : loginData.loginForm.username, 243 username: username ? username : loginData.loginForm.username,
@@ -256,19 +266,17 @@ const handleLogin = async (params) =&gt; { @@ -256,19 +266,17 @@ const handleLogin = async (params) =&gt; {
256 background: 'rgba(0, 0, 0, 0.7)' 266 background: 'rgba(0, 0, 0, 0.7)'
257 }) 267 })
258 if (loginData.loginForm.rememberMe) { 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 } else { 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 if (!redirect.value) { 280 if (!redirect.value) {
273 redirect.value = '/' 281 redirect.value = '/'
274 } 282 }
@@ -284,14 +292,24 @@ const handleLogin = async (params) =&gt; { @@ -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 watch( 314 watch(
297 () => currentRoute.value, 315 () => currentRoute.value,
yudao-ui-admin-vue3/src/views/Login/components/MobileForm.vue
@@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
17 </el-form-item> 17 </el-form-item>
18 </el-col> 18 </el-col>
19 <el-col :span="24" style="padding-left: 10px; padding-right: 10px"> 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 <el-input 21 <el-input
22 type="text" 22 type="text"
23 v-model="loginData.loginForm.tenantName" 23 v-model="loginData.loginForm.tenantName"
@@ -69,16 +69,23 @@ @@ -69,16 +69,23 @@
69 <!-- 登录按钮 / 返回按钮 --> 69 <!-- 登录按钮 / 返回按钮 -->
70 <el-col :span="24" style="padding-left: 10px; padding-right: 10px"> 70 <el-col :span="24" style="padding-left: 10px; padding-right: 10px">
71 <el-form-item> 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 </el-form-item> 79 </el-form-item>
76 </el-col> 80 </el-col>
77 <el-col :span="24" style="padding-left: 10px; padding-right: 10px"> 81 <el-col :span="24" style="padding-left: 10px; padding-right: 10px">
78 <el-form-item> 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 </el-form-item> 89 </el-form-item>
83 </el-col> 90 </el-col>
84 </el-row> 91 </el-row>
@@ -91,17 +98,15 @@ import { useRouter } from &#39;vue-router&#39; @@ -91,17 +98,15 @@ import { useRouter } from &#39;vue-router&#39;
91 import type { RouteLocationNormalizedLoaded } from 'vue-router' 98 import type { RouteLocationNormalizedLoaded } from 'vue-router'
92 import { useI18n } from '@/hooks/web/useI18n' 99 import { useI18n } from '@/hooks/web/useI18n'
93 import { useIcon } from '@/hooks/web/useIcon' 100 import { useIcon } from '@/hooks/web/useIcon'
94 -import { useCache } from '@/hooks/web/useCache'  
95 import { useMessage } from '@/hooks/web/useMessage' 101 import { useMessage } from '@/hooks/web/useMessage'
96 -import { setToken } from '@/utils/auth'  
97 import { required } from '@/utils/formRules' 102 import { required } from '@/utils/formRules'
  103 +import { setTenantId, setToken } from '@/utils/auth'
98 import { usePermissionStore } from '@/store/modules/permission' 104 import { usePermissionStore } from '@/store/modules/permission'
99 import { getTenantIdByNameApi, sendSmsCodeApi, smsLoginApi } from '@/api/login' 105 import { getTenantIdByNameApi, sendSmsCodeApi, smsLoginApi } from '@/api/login'
100 import LoginFormTitle from './LoginFormTitle.vue' 106 import LoginFormTitle from './LoginFormTitle.vue'
101 import { useLoginState, LoginStateEnum, useFormValid } from './useLogin' 107 import { useLoginState, LoginStateEnum, useFormValid } from './useLogin'
102 108
103 const { t } = useI18n() 109 const { t } = useI18n()
104 -const { wsCache } = useCache()  
105 const message = useMessage() 110 const message = useMessage()
106 const permissionStore = usePermissionStore() 111 const permissionStore = usePermissionStore()
107 const { currentRoute, push } = useRouter() 112 const { currentRoute, push } = useRouter()
@@ -121,7 +126,7 @@ const rules = { @@ -121,7 +126,7 @@ const rules = {
121 } 126 }
122 const loginData = reactive({ 127 const loginData = reactive({
123 codeImg: '', 128 codeImg: '',
124 - tenantEnable: true, 129 + tenantEnable: import.meta.env.VITE_APP_TENANT_ENABLE,
125 token: '', 130 token: '',
126 loading: { 131 loading: {
127 signIn: false 132 signIn: false
@@ -171,8 +176,10 @@ watch( @@ -171,8 +176,10 @@ watch(
171 ) 176 )
172 // 获取租户 ID 177 // 获取租户 ID
173 const getTenantId = async () => { 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 const signIn = async () => { 185 const signIn = async () => {
yudao-ui-admin-vue3/src/views/Login/components/QrCodeForm.vue
@@ -11,9 +11,7 @@ @@ -11,9 +11,7 @@
11 <el-divider class="enter-x">{{ t('login.qrcode') }}</el-divider> 11 <el-divider class="enter-x">{{ t('login.qrcode') }}</el-divider>
12 <el-col :span="24" style="padding-left: 10px; padding-right: 10px"> 12 <el-col :span="24" style="padding-left: 10px; padding-right: 10px">
13 <div class="w-[100%] mt-15px"> 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 </div> 15 </div>
18 </el-col> 16 </el-col>
19 </el-row> 17 </el-row>
@@ -21,11 +19,11 @@ @@ -21,11 +19,11 @@
21 <script setup lang="ts"> 19 <script setup lang="ts">
22 import { computed, unref } from 'vue' 20 import { computed, unref } from 'vue'
23 import { ElRow, ElCol, ElCard, ElDivider } from 'element-plus' 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 import { Qrcode } from '@/components/Qrcode' 22 import { Qrcode } from '@/components/Qrcode'
28 import logoImg from '@/assets/imgs/logo.png' 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 const { t } = useI18n() 28 const { t } = useI18n()
31 const { handleBackLogin, getLoginState } = useLoginState() 29 const { handleBackLogin, getLoginState } = useLoginState()
yudao-ui-admin-vue3/src/views/Login/components/RegisterForm.vue
@@ -21,14 +21,16 @@ @@ -21,14 +21,16 @@
21 21
22 <template #register> 22 <template #register>
23 <div class="w-[100%]"> 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 </div> 31 </div>
28 <div class="w-[100%] mt-15px"> 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 </div> 34 </div>
33 </template> 35 </template>
34 </Form> 36 </Form>
@@ -40,8 +42,8 @@ import { Form } from &#39;@/components/Form&#39; @@ -40,8 +42,8 @@ import { Form } from &#39;@/components/Form&#39;
40 import { useI18n } from '@/hooks/web/useI18n' 42 import { useI18n } from '@/hooks/web/useI18n'
41 import { useForm } from '@/hooks/web/useForm' 43 import { useForm } from '@/hooks/web/useForm'
42 import { useValidator } from '@/hooks/web/useValidator' 44 import { useValidator } from '@/hooks/web/useValidator'
43 -import { useLoginState, LoginStateEnum } from './useLogin'  
44 import LoginFormTitle from './LoginFormTitle.vue' 45 import LoginFormTitle from './LoginFormTitle.vue'
  46 +import { useLoginState, LoginStateEnum } from './useLogin'
45 import { FormSchema } from '@/types/form' 47 import { FormSchema } from '@/types/form'
46 48
47 const { t } = useI18n() 49 const { t } = useI18n()
yudao-ui-admin-vue3/src/views/Profile/components/BasicInfo.vue
1 <template> 1 <template>
2 <Form ref="formRef" :rules="rules" :schema="schema" :labelWidth="80"> 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 <el-radio :label="1">{{ t('profile.user.man') }}</el-radio> 5 <el-radio :label="1">{{ t('profile.user.man') }}</el-radio>
6 <el-radio :label="2">{{ t('profile.user.woman') }}</el-radio> 6 <el-radio :label="2">{{ t('profile.user.woman') }}</el-radio>
7 </el-radio-group> 7 </el-radio-group>
@@ -67,7 +67,6 @@ const schema = reactive&lt;FormSchema[]&gt;([ @@ -67,7 +67,6 @@ const schema = reactive&lt;FormSchema[]&gt;([
67 value: 0 67 value: 0
68 } 68 }
69 ]) 69 ])
70 -const sexVlue = ref<number>()  
71 const formRef = ref<FormExpose>() // 表单 Ref 70 const formRef = ref<FormExpose>() // 表单 Ref
72 const submit = () => { 71 const submit = () => {
73 const elForm = unref(formRef)?.getElFormRef() 72 const elForm = unref(formRef)?.getElFormRef()
@@ -75,7 +74,6 @@ const submit = () =&gt; { @@ -75,7 +74,6 @@ const submit = () =&gt; {
75 elForm.validate(async (valid) => { 74 elForm.validate(async (valid) => {
76 if (valid) { 75 if (valid) {
77 const data = unref(formRef)?.formModel as UserProfileUpdateReqVO 76 const data = unref(formRef)?.formModel as UserProfileUpdateReqVO
78 - data.sex = sexVlue.value as unknown as number  
79 await updateUserProfileApi(data) 77 await updateUserProfileApi(data)
80 ElMessage.success(t('common.updateSuccess')) 78 ElMessage.success(t('common.updateSuccess'))
81 await init() 79 await init()
@@ -84,7 +82,6 @@ const submit = () =&gt; { @@ -84,7 +82,6 @@ const submit = () =&gt; {
84 } 82 }
85 const init = async () => { 83 const init = async () => {
86 const res = await getUserProfileApi() 84 const res = await getUserProfileApi()
87 - sexVlue.value = res.sex  
88 unref(formRef)?.setValues(res) 85 unref(formRef)?.setValues(res)
89 } 86 }
90 onMounted(async () => { 87 onMounted(async () => {
yudao-ui-admin-vue3/src/views/bpm/form/index.vue
@@ -73,12 +73,12 @@ const submitForm = async () =&gt; { @@ -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 const handleDetail = async (row: FormVO) => { 79 const handleDetail = async (row: FormVO) => {
80 // 设置数据 80 // 设置数据
81 - detailRef.value = row 81 + detailData.value = row
82 setDialogTile('detail') 82 setDialogTile('detail')
83 } 83 }
84 84
@@ -148,7 +148,7 @@ getList() @@ -148,7 +148,7 @@ getList()
148 <Descriptions 148 <Descriptions
149 v-if="actionType === 'detail'" 149 v-if="actionType === 'detail'"
150 :schema="allSchemas.detailSchema" 150 :schema="allSchemas.detailSchema"
151 - :data="detailRef" 151 + :data="detailData"
152 /> 152 />
153 <!-- 操作按钮 --> 153 <!-- 操作按钮 -->
154 <template #footer> 154 <template #footer>
yudao-ui-admin-vue3/src/views/bpm/group/index.vue
@@ -29,7 +29,6 @@ const dialogTitle = ref(&#39;edit&#39;) // 弹出层标题 @@ -29,7 +29,6 @@ const dialogTitle = ref(&#39;edit&#39;) // 弹出层标题
29 const formRef = ref<FormExpose>() // 表单 Ref 29 const formRef = ref<FormExpose>() // 表单 Ref
30 30
31 // ========== 用户选择 ========== 31 // ========== 用户选择 ==========
32 -const userIds = ref<number[]>([])  
33 const userOptions = ref<UserVO[]>([]) 32 const userOptions = ref<UserVO[]>([])
34 const getUserOptions = async () => { 33 const getUserOptions = async () => {
35 const res = await getListSimpleUsersApi() 34 const res = await getListSimpleUsersApi()
@@ -46,7 +45,6 @@ const setDialogTile = (type: string) =&gt; { @@ -46,7 +45,6 @@ const setDialogTile = (type: string) =&gt; {
46 // 新增操作 45 // 新增操作
47 const handleCreate = () => { 46 const handleCreate = () => {
48 setDialogTile('create') 47 setDialogTile('create')
49 - userIds.value = []  
50 } 48 }
51 49
52 // 修改操作 50 // 修改操作
@@ -54,7 +52,6 @@ const handleUpdate = async (row: UserGroupVO) =&gt; { @@ -54,7 +52,6 @@ const handleUpdate = async (row: UserGroupVO) =&gt; {
54 setDialogTile('update') 52 setDialogTile('update')
55 // 设置数据 53 // 设置数据
56 const res = await UserGroupApi.getUserGroupApi(row.id) 54 const res = await UserGroupApi.getUserGroupApi(row.id)
57 - userIds.value = res.memberUserIds  
58 unref(formRef)?.setValues(res) 55 unref(formRef)?.setValues(res)
59 } 56 }
60 57
@@ -68,7 +65,6 @@ const submitForm = async () =&gt; { @@ -68,7 +65,6 @@ const submitForm = async () =&gt; {
68 // 提交请求 65 // 提交请求
69 try { 66 try {
70 const data = unref(formRef)?.formModel as UserGroupVO 67 const data = unref(formRef)?.formModel as UserGroupVO
71 - data.memberUserIds = userIds.value  
72 if (actionType.value === 'create') { 68 if (actionType.value === 'create') {
73 await UserGroupApi.createUserGroupApi(data) 69 await UserGroupApi.createUserGroupApi(data)
74 ElMessage.success(t('common.createSuccess')) 70 ElMessage.success(t('common.createSuccess'))
@@ -94,12 +90,12 @@ const getUserNickName = (userId: number) =&gt; { @@ -94,12 +90,12 @@ const getUserNickName = (userId: number) =&gt; {
94 return '未知(' + userId + ')' 90 return '未知(' + userId + ')'
95 } 91 }
96 // ========== 详情相关 ========== 92 // ========== 详情相关 ==========
97 -const detailRef = ref() // 详情 Ref 93 +const detailData = ref() // 详情 Ref
98 94
99 // 详情操作 95 // 详情操作
100 const handleDetail = async (row: UserGroupVO) => { 96 const handleDetail = async (row: UserGroupVO) => {
101 // 设置数据 97 // 设置数据
102 - detailRef.value = row 98 + detailData.value = row
103 setDialogTile('detail') 99 setDialogTile('detail')
104 } 100 }
105 101
@@ -183,8 +179,8 @@ onMounted(async () =&gt; { @@ -183,8 +179,8 @@ onMounted(async () =&gt; {
183 :rules="rules" 179 :rules="rules"
184 ref="formRef" 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 <el-option 184 <el-option
189 v-for="item in userOptions" 185 v-for="item in userOptions"
190 :key="item.id" 186 :key="item.id"
@@ -198,7 +194,7 @@ onMounted(async () =&gt; { @@ -198,7 +194,7 @@ onMounted(async () =&gt; {
198 <Descriptions 194 <Descriptions
199 v-if="actionType === 'detail'" 195 v-if="actionType === 'detail'"
200 :schema="allSchemas.detailSchema" 196 :schema="allSchemas.detailSchema"
201 - :data="detailRef" 197 + :data="detailData"
202 > 198 >
203 <template #memberUserIds="{ row }"> 199 <template #memberUserIds="{ row }">
204 <span v-for="userId in row.memberUserIds" :key="userId"> 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,12 +92,12 @@ const handleChangeState = async (row: ModelVO) =&gt; {
92 .catch(() => {}) 92 .catch(() => {})
93 } 93 }
94 // ========== 详情相关 ========== 94 // ========== 详情相关 ==========
95 -const detailRef = ref() // 详情 Ref 95 +const detailData = ref() // 详情 Ref
96 96
97 // 详情操作 97 // 详情操作
98 const handleDetail = async (row: ModelVO) => { 98 const handleDetail = async (row: ModelVO) => {
99 // 设置数据 99 // 设置数据
100 - detailRef.value = row 100 + detailData.value = row
101 setDialogTile('detail') 101 setDialogTile('detail')
102 } 102 }
103 103
@@ -198,7 +198,7 @@ getList() @@ -198,7 +198,7 @@ getList()
198 <Descriptions 198 <Descriptions
199 v-if="actionType === 'detail'" 199 v-if="actionType === 'detail'"
200 :schema="allSchemas.detailSchema" 200 :schema="allSchemas.detailSchema"
201 - :data="detailRef" 201 + :data="detailData"
202 /> 202 />
203 <!-- 操作按钮 --> 203 <!-- 操作按钮 -->
204 <template #footer> 204 <template #footer>
yudao-ui-admin-vue3/src/views/bpm/processInstance/index.vue
@@ -38,12 +38,12 @@ const handleCancel = (row: ProcessInstanceVO) =&gt; { @@ -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 const handleDetail = async (row: ProcessInstanceVO) => { 44 const handleDetail = async (row: ProcessInstanceVO) => {
45 // 设置数据 45 // 设置数据
46 - detailRef.value = row 46 + detailData.value = row
47 dialogVisible.value = true 47 dialogVisible.value = true
48 } 48 }
49 49
@@ -105,7 +105,7 @@ getList() @@ -105,7 +105,7 @@ getList()
105 105
106 <XModal v-model="dialogVisible" :title="t('action.detail')"> 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 <template #footer> 110 <template #footer>
111 <el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button> 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,7 +21,7 @@
21 </ContentWrap> 21 </ContentWrap>
22 <XModal v-model="dialogVisible" :title="dialogTitle"> 22 <XModal v-model="dialogVisible" :title="dialogTitle">
23 <!-- 对话框(详情) --> 23 <!-- 对话框(详情) -->
24 - <Descriptions :schema="allSchemas.detailSchema" :data="detailRef"> 24 + <Descriptions :schema="allSchemas.detailSchema" :data="detailData">
25 <template #duration="{ row }"> 25 <template #duration="{ row }">
26 <span>{{ row.duration + 'ms' }}</span> 26 <span>{{ row.duration + 'ms' }}</span>
27 </template> 27 </template>
@@ -52,14 +52,14 @@ const { gridOptions } = useVxeGrid&lt;ApiAccessLogApi.ApiAccessLogVO&gt;({ @@ -52,14 +52,14 @@ const { gridOptions } = useVxeGrid&lt;ApiAccessLogApi.ApiAccessLogVO&gt;({
52 getListApi: ApiAccessLogApi.getApiAccessLogPageApi 52 getListApi: ApiAccessLogApi.getApiAccessLogPageApi
53 }) 53 })
54 // ========== 详情相关 ========== 54 // ========== 详情相关 ==========
55 -const detailRef = ref() // 详情 Ref 55 +const detailData = ref() // 详情 Ref
56 const dialogVisible = ref(false) // 是否显示弹出层 56 const dialogVisible = ref(false) // 是否显示弹出层
57 const dialogTitle = ref('') // 弹出层标题 57 const dialogTitle = ref('') // 弹出层标题
58 58
59 // 详情操作 59 // 详情操作
60 const handleDetail = (row: ApiAccessLogApi.ApiAccessLogVO) => { 60 const handleDetail = (row: ApiAccessLogApi.ApiAccessLogVO) => {
61 // 设置数据 61 // 设置数据
62 - detailRef.value = row 62 + detailData.value = row
63 dialogTitle.value = t('action.detail') 63 dialogTitle.value = t('action.detail')
64 dialogVisible.value = true 64 dialogVisible.value = true
65 } 65 }
yudao-ui-admin-vue3/src/views/infra/apiErrorLog/index.vue
@@ -44,7 +44,7 @@ @@ -44,7 +44,7 @@
44 </ContentWrap> 44 </ContentWrap>
45 <XModal v-model="dialogVisible" :title="dialogTitle"> 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 <template #footer> 49 <template #footer>
50 <XButton :title="t('dialog.close')" @click="dialogVisible = false" /> 50 <XButton :title="t('dialog.close')" @click="dialogVisible = false" />
@@ -71,14 +71,14 @@ const { gridOptions, getList, exportList } = useVxeGrid&lt;ApiErrorLogApi.ApiErrorL @@ -71,14 +71,14 @@ const { gridOptions, getList, exportList } = useVxeGrid&lt;ApiErrorLogApi.ApiErrorL
71 exportListApi: ApiErrorLogApi.exportApiErrorLogApi 71 exportListApi: ApiErrorLogApi.exportApiErrorLogApi
72 }) 72 })
73 // ========== 详情相关 ========== 73 // ========== 详情相关 ==========
74 -const detailRef = ref() // 详情 Ref 74 +const detailData = ref() // 详情 Ref
75 const dialogVisible = ref(false) // 是否显示弹出层 75 const dialogVisible = ref(false) // 是否显示弹出层
76 const dialogTitle = ref('') // 弹出层标题 76 const dialogTitle = ref('') // 弹出层标题
77 77
78 // 详情操作 78 // 详情操作
79 const handleDetail = (row: ApiErrorLogApi.ApiErrorLogVO) => { 79 const handleDetail = (row: ApiErrorLogApi.ApiErrorLogVO) => {
80 // 设置数据 80 // 设置数据
81 - detailRef.value = row 81 + detailData.value = row
82 dialogTitle.value = t('action.detail') 82 dialogTitle.value = t('action.detail')
83 dialogVisible.value = true 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,7 +6,7 @@ import { onMounted, PropType, reactive, ref, watch } from &#39;vue&#39;
6 import { Form } from '@/components/Form' 6 import { Form } from '@/components/Form'
7 import { useForm } from '@/hooks/web/useForm' 7 import { useForm } from '@/hooks/web/useForm'
8 import { required } from '@/utils/formRules' 8 import { required } from '@/utils/formRules'
9 -import { handleTree } from '@/utils/tree' 9 +import { handleTree, defaultProps } from '@/utils/tree'
10 import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' 10 import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
11 import { listSimpleMenusApi } from '@/api/system/menu' 11 import { listSimpleMenusApi } from '@/api/system/menu'
12 import { CodegenTableVO } from '@/api/infra/codegen/types' 12 import { CodegenTableVO } from '@/api/infra/codegen/types'
@@ -17,12 +17,6 @@ const props = defineProps({ @@ -17,12 +17,6 @@ const props = defineProps({
17 default: () => null 17 default: () => null
18 } 18 }
19 }) 19 })
20 -const menuProps = {  
21 - checkStrictly: true,  
22 - children: 'children',  
23 - label: 'name',  
24 - value: 'id'  
25 -}  
26 const rules = reactive({ 20 const rules = reactive({
27 templateType: [required], 21 templateType: [required],
28 scene: [required], 22 scene: [required],
@@ -104,7 +98,7 @@ const schema = reactive&lt;FormSchema[]&gt;([ @@ -104,7 +98,7 @@ const schema = reactive&lt;FormSchema[]&gt;([
104 component: 'TreeSelect', 98 component: 'TreeSelect',
105 componentProps: { 99 componentProps: {
106 data: menuOptions, 100 data: menuOptions,
107 - props: menuProps, 101 + props: defaultProps,
108 checkStrictly: true, 102 checkStrictly: true,
109 nodeKey: 'id' 103 nodeKey: 'id'
110 }, 104 },
yudao-ui-admin-vue3/src/views/infra/codegen/components/Preview.vue
@@ -8,7 +8,6 @@ @@ -8,7 +8,6 @@
8 node-key="id" 8 node-key="id"
9 :data="preview.fileTree" 9 :data="preview.fileTree"
10 :expand-on-click-node="false" 10 :expand-on-click-node="false"
11 - default-expanded-keys="[0]"  
12 highlight-current 11 highlight-current
13 @node-click="handleNodeClick" 12 @node-click="handleNodeClick"
14 /> 13 />
yudao-ui-admin-vue3/src/views/infra/fileConfig/index.vue
@@ -35,12 +35,7 @@ @@ -35,12 +35,7 @@
35 @click="handleMaster(row)" 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 <XTextButton 40 <XTextButton
46 preIcon="ep:delete" 41 preIcon="ep:delete"
@@ -164,7 +159,7 @@ @@ -164,7 +159,7 @@
164 </template> 159 </template>
165 <script setup lang="ts" name="FileConfig"> 160 <script setup lang="ts" name="FileConfig">
166 // 全局相关的 import 161 // 全局相关的 import
167 -import { reactive, ref } from 'vue' 162 +import { ref } from 'vue'
168 import { 163 import {
169 ElForm, 164 ElForm,
170 ElFormItem, 165 ElFormItem,
@@ -202,7 +197,7 @@ const dialogVisible = ref(false) // 是否显示弹出层 @@ -202,7 +197,7 @@ const dialogVisible = ref(false) // 是否显示弹出层
202 const dialogTitle = ref('edit') // 弹出层标题 197 const dialogTitle = ref('edit') // 弹出层标题
203 const formRef = ref<FormInstance>() // 表单 Ref 198 const formRef = ref<FormInstance>() // 表单 Ref
204 const detailData = ref() // 详情 Ref 199 const detailData = ref() // 详情 Ref
205 -let form = reactive<FileConfigApi.FileConfigVO>({ 200 +let form = ref<FileConfigApi.FileConfigVO>({
206 id: 0, 201 id: 0,
207 name: '', 202 name: '',
208 storage: 0, 203 storage: 0,
@@ -211,7 +206,7 @@ let form = reactive&lt;FileConfigApi.FileConfigVO&gt;({ @@ -211,7 +206,7 @@ let form = reactive&lt;FileConfigApi.FileConfigVO&gt;({
211 config: { 206 config: {
212 basePath: '', 207 basePath: '',
213 host: '', 208 host: '',
214 - port: '', 209 + port: 0,
215 username: '', 210 username: '',
216 password: '', 211 password: '',
217 mode: '', 212 mode: '',
@@ -222,7 +217,7 @@ let form = reactive&lt;FileConfigApi.FileConfigVO&gt;({ @@ -222,7 +217,7 @@ let form = reactive&lt;FileConfigApi.FileConfigVO&gt;({
222 domain: '' 217 domain: ''
223 }, 218 },
224 remark: '', 219 remark: '',
225 - createTime: '' 220 + createTime: new Date()
226 }) 221 })
227 // 设置标题 222 // 设置标题
228 const setDialogTile = (type: string) => { 223 const setDialogTile = (type: string) => {
@@ -241,7 +236,7 @@ const handleCreate = (formEl: FormInstance | undefined) =&gt; { @@ -241,7 +236,7 @@ const handleCreate = (formEl: FormInstance | undefined) =&gt; {
241 const handleUpdate = async (rowId: number) => { 236 const handleUpdate = async (rowId: number) => {
242 // 设置数据 237 // 设置数据
243 const res = await FileConfigApi.getFileConfigApi(rowId) 238 const res = await FileConfigApi.getFileConfigApi(rowId)
244 - form = res 239 + form.value = res
245 setDialogTile('update') 240 setDialogTile('update')
246 } 241 }
247 242
@@ -263,6 +258,11 @@ const handleMaster = (row: FileConfigApi.FileConfigVO) =&gt; { @@ -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 const handleDelete = async (rowId: number) => { 267 const handleDelete = async (rowId: number) => {
268 await deleteData(xGrid, rowId) 268 await deleteData(xGrid, rowId)
@@ -277,10 +277,10 @@ const submitForm = async (formEl: FormInstance | undefined) =&gt; { @@ -277,10 +277,10 @@ const submitForm = async (formEl: FormInstance | undefined) =&gt; {
277 // 提交请求 277 // 提交请求
278 try { 278 try {
279 if (actionType.value === 'create') { 279 if (actionType.value === 'create') {
280 - await FileConfigApi.createFileConfigApi(form) 280 + await FileConfigApi.createFileConfigApi(form.value)
281 message.success(t('common.createSuccess')) 281 message.success(t('common.createSuccess'))
282 } else { 282 } else {
283 - await FileConfigApi.updateFileConfigApi(form) 283 + await FileConfigApi.updateFileConfigApi(form.value)
284 message.success(t('common.updateSuccess')) 284 message.success(t('common.updateSuccess'))
285 } 285 }
286 dialogVisible.value = false 286 dialogVisible.value = false
yudao-ui-admin-vue3/src/views/infra/fileList/index.vue
@@ -72,7 +72,7 @@ @@ -72,7 +72,7 @@
72 <!-- 按钮:保存 --> 72 <!-- 按钮:保存 -->
73 <XButton 73 <XButton
74 type="primary" 74 type="primary"
75 - prefix="ep:upload-filled" 75 + preIcon="ep:upload-filled"
76 :title="t('action.save')" 76 :title="t('action.save')"
77 @click="submitFileForm()" 77 @click="submitFileForm()"
78 /> 78 />
yudao-ui-admin-vue3/src/views/infra/job/JobLog.vue
@@ -33,7 +33,7 @@ @@ -33,7 +33,7 @@
33 </ContentWrap> 33 </ContentWrap>
34 <XModal v-model="dialogVisible" :title="dialogTitle"> 34 <XModal v-model="dialogVisible" :title="dialogTitle">
35 <!-- 对话框(详情) --> 35 <!-- 对话框(详情) -->
36 - <Descriptions :schema="allSchemas.detailSchema" :data="detailRef"> 36 + <Descriptions :schema="allSchemas.detailSchema" :data="detailData">
37 <template #retryInterval="{ row }"> 37 <template #retryInterval="{ row }">
38 <span>{{ row.retryInterval + '毫秒' }} </span> 38 <span>{{ row.retryInterval + '毫秒' }} </span>
39 </template> 39 </template>
@@ -69,13 +69,13 @@ const dialogVisible = ref(false) // 是否显示弹出层 @@ -69,13 +69,13 @@ const dialogVisible = ref(false) // 是否显示弹出层
69 const dialogTitle = ref('') // 弹出层标题 69 const dialogTitle = ref('') // 弹出层标题
70 70
71 // ========== 详情相关 ========== 71 // ========== 详情相关 ==========
72 -const detailRef = ref() // 详情 Ref 72 +const detailData = ref() // 详情 Ref
73 73
74 // 详情操作 74 // 详情操作
75 const handleDetail = async (row: JobLogApi.JobLogVO) => { 75 const handleDetail = async (row: JobLogApi.JobLogVO) => {
76 // 设置数据 76 // 设置数据
77 const res = JobLogApi.getJobLogApi(row.id) 77 const res = JobLogApi.getJobLogApi(row.id)
78 - detailRef.value = res 78 + detailData.value = res
79 dialogTitle.value = t('action.detail') 79 dialogTitle.value = t('action.detail')
80 dialogVisible.value = true 80 dialogVisible.value = true
81 } 81 }
yudao-ui-admin-vue3/src/views/infra/job/index.vue
@@ -93,15 +93,15 @@ @@ -93,15 +93,15 @@
93 :rules="rules" 93 :rules="rules"
94 ref="formRef" 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 </template> 98 </template>
99 </Form> 99 </Form>
100 <!-- 对话框(详情) --> 100 <!-- 对话框(详情) -->
101 <Descriptions 101 <Descriptions
102 v-if="actionType === 'detail'" 102 v-if="actionType === 'detail'"
103 :schema="allSchemas.detailSchema" 103 :schema="allSchemas.detailSchema"
104 - :data="detailRef" 104 + :data="detailData"
105 > 105 >
106 <template #retryInterval="{ row }"> 106 <template #retryInterval="{ row }">
107 <span>{{ row.retryInterval + '毫秒' }} </span> 107 <span>{{ row.retryInterval + '毫秒' }} </span>
@@ -161,8 +161,7 @@ const actionType = ref(&#39;&#39;) // 操作按钮的类型 @@ -161,8 +161,7 @@ const actionType = ref(&#39;&#39;) // 操作按钮的类型
161 const dialogVisible = ref(false) // 是否显示弹出层 161 const dialogVisible = ref(false) // 是否显示弹出层
162 const dialogTitle = ref('edit') // 弹出层标题 162 const dialogTitle = ref('edit') // 弹出层标题
163 const formRef = ref<FormExpose>() // 表单 Ref 163 const formRef = ref<FormExpose>() // 表单 Ref
164 -const detailRef = ref() // 详情 Ref  
165 -const cronExpression = ref('') 164 +const detailData = ref() // 详情 Ref
166 const nextTimes = ref([]) 165 const nextTimes = ref([])
167 const shortcuts = ref([ 166 const shortcuts = ref([
168 { 167 {
@@ -179,7 +178,6 @@ const setDialogTile = (type: string) =&gt; { @@ -179,7 +178,6 @@ const setDialogTile = (type: string) =&gt; {
179 178
180 // 新增操作 179 // 新增操作
181 const handleCreate = () => { 180 const handleCreate = () => {
182 - cronExpression.value = ''  
183 setDialogTile('create') 181 setDialogTile('create')
184 } 182 }
185 183
@@ -193,7 +191,6 @@ const handleUpdate = async (rowId: number) =&gt; { @@ -193,7 +191,6 @@ const handleUpdate = async (rowId: number) =&gt; {
193 setDialogTile('update') 191 setDialogTile('update')
194 // 设置数据 192 // 设置数据
195 const res = await JobApi.getJobApi(rowId) 193 const res = await JobApi.getJobApi(rowId)
196 - cronExpression.value = res.cronExpression  
197 unref(formRef)?.setValues(res) 194 unref(formRef)?.setValues(res)
198 } 195 }
199 196
@@ -201,7 +198,7 @@ const handleUpdate = async (rowId: number) =&gt; { @@ -201,7 +198,7 @@ const handleUpdate = async (rowId: number) =&gt; {
201 const handleDetail = async (rowId: number) => { 198 const handleDetail = async (rowId: number) => {
202 // 设置数据 199 // 设置数据
203 const res = await JobApi.getJobApi(rowId) 200 const res = await JobApi.getJobApi(rowId)
204 - detailRef.value = res 201 + detailData.value = res
205 // 后续执行时长 202 // 后续执行时长
206 const jobNextTime = await JobApi.getJobNextTimesApi(rowId) 203 const jobNextTime = await JobApi.getJobNextTimesApi(rowId)
207 nextTimes.value = jobNextTime 204 nextTimes.value = jobNextTime
@@ -305,7 +302,6 @@ const submitForm = async () =&gt; { @@ -305,7 +302,6 @@ const submitForm = async () =&gt; {
305 // 提交请求 302 // 提交请求
306 try { 303 try {
307 const data = unref(formRef)?.formModel as JobApi.JobVO 304 const data = unref(formRef)?.formModel as JobApi.JobVO
308 - data.cronExpression = cronExpression.value  
309 if (actionType.value === 'create') { 305 if (actionType.value === 'create') {
310 await JobApi.createJobApi(data) 306 await JobApi.createJobApi(data)
311 message.success(t('common.createSuccess')) 307 message.success(t('common.createSuccess'))
yudao-ui-admin-vue3/src/views/system/dept/index.vue
@@ -38,20 +38,19 @@ @@ -38,20 +38,19 @@
38 <!-- 添加或修改菜单对话框 --> 38 <!-- 添加或修改菜单对话框 -->
39 <XModal id="deptModel" v-model="dialogVisible" :title="dialogTitle"> 39 <XModal id="deptModel" v-model="dialogVisible" :title="dialogTitle">
40 <!-- 对话框(添加 / 修改) --> 40 <!-- 对话框(添加 / 修改) -->
41 - <!-- 操作工具栏 -->  
42 <Form ref="formRef" :schema="allSchemas.formSchema" :rules="rules"> 41 <Form ref="formRef" :schema="allSchemas.formSchema" :rules="rules">
43 - <template #parentId> 42 + <template #parentId="form">
44 <el-tree-select 43 <el-tree-select
45 node-key="id" 44 node-key="id"
46 - v-model="deptParentId" 45 + v-model="form['parentId']"
47 :props="defaultProps" 46 :props="defaultProps"
48 :data="deptOptions" 47 :data="deptOptions"
49 :default-expanded-keys="[100]" 48 :default-expanded-keys="[100]"
50 check-strictly 49 check-strictly
51 /> 50 />
52 </template> 51 </template>
53 - <template #leaderUserId>  
54 - <el-select v-model="leaderUserId"> 52 + <template #leaderUserId="form">
  53 + <el-select v-model="form['leaderUserId']">
55 <el-option 54 <el-option
56 v-for="item in userOption" 55 v-for="item in userOption"
57 :key="item.id" 56 :key="item.id"
@@ -79,7 +78,7 @@ @@ -79,7 +78,7 @@
79 import { nextTick, onMounted, reactive, ref, unref } from 'vue' 78 import { nextTick, onMounted, reactive, ref, unref } from 'vue'
80 import { ElSelect, ElTreeSelect, ElOption } from 'element-plus' 79 import { ElSelect, ElTreeSelect, ElOption } from 'element-plus'
81 import { VxeGridInstance } from 'vxe-table' 80 import { VxeGridInstance } from 'vxe-table'
82 -import { handleTree } from '@/utils/tree' 81 +import { handleTree, defaultProps } from '@/utils/tree'
83 import { required } from '@/utils/formRules.js' 82 import { required } from '@/utils/formRules.js'
84 import { useI18n } from '@/hooks/web/useI18n' 83 import { useI18n } from '@/hooks/web/useI18n'
85 import { useMessage } from '@/hooks/web/useMessage' 84 import { useMessage } from '@/hooks/web/useMessage'
@@ -105,8 +104,6 @@ const dialogVisible = ref(false) // 是否显示弹出层 @@ -105,8 +104,6 @@ const dialogVisible = ref(false) // 是否显示弹出层
105 const dialogTitle = ref('edit') // 弹出层标题 104 const dialogTitle = ref('edit') // 弹出层标题
106 const actionType = ref('') // 操作按钮的类型 105 const actionType = ref('') // 操作按钮的类型
107 const actionLoading = ref(false) // 遮罩层 106 const actionLoading = ref(false) // 遮罩层
108 -const deptParentId = ref(0) // 上级ID  
109 -const leaderUserId = ref()  
110 const formRef = ref<FormExpose>() // 表单 Ref 107 const formRef = ref<FormExpose>() // 表单 Ref
111 const deptOptions = ref() // 树形结构 108 const deptOptions = ref() // 树形结构
112 const userOption = ref<UserVO[]>([]) 109 const userOption = ref<UserVO[]>([])
@@ -118,13 +115,6 @@ const rules = reactive({ @@ -118,13 +115,6 @@ const rules = reactive({
118 status: [required] 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 const getUserList = async () => { 118 const getUserList = async () => {
129 const res = await getListSimpleUsersApi() 119 const res = await getListSimpleUsersApi()
130 userOption.value = res 120 userOption.value = res
@@ -154,8 +144,6 @@ const setDialogTile = (type: string) =&gt; { @@ -154,8 +144,6 @@ const setDialogTile = (type: string) =&gt; {
154 144
155 // 新增操作 145 // 新增操作
156 const handleCreate = async () => { 146 const handleCreate = async () => {
157 - deptParentId.value = 0  
158 - leaderUserId.value = null  
159 setDialogTile('create') 147 setDialogTile('create')
160 } 148 }
161 149
@@ -164,8 +152,6 @@ const handleUpdate = async (rowId: number) =&gt; { @@ -164,8 +152,6 @@ const handleUpdate = async (rowId: number) =&gt; {
164 setDialogTile('update') 152 setDialogTile('update')
165 // 设置数据 153 // 设置数据
166 const res = await DeptApi.getDeptApi(rowId) 154 const res = await DeptApi.getDeptApi(rowId)
167 - deptParentId.value = res.parentId  
168 - leaderUserId.value = res.leaderUserId  
169 await nextTick() 155 await nextTick()
170 unref(formRef)?.setValues(res) 156 unref(formRef)?.setValues(res)
171 } 157 }
@@ -180,8 +166,6 @@ const submitForm = async () =&gt; { @@ -180,8 +166,6 @@ const submitForm = async () =&gt; {
180 // 提交请求 166 // 提交请求
181 try { 167 try {
182 const data = unref(formRef)?.formModel as DeptApi.DeptVO 168 const data = unref(formRef)?.formModel as DeptApi.DeptVO
183 - data.parentId = deptParentId.value  
184 - data.leaderUserId = leaderUserId.value  
185 if (actionType.value === 'create') { 169 if (actionType.value === 'create') {
186 await DeptApi.createDeptApi(data) 170 await DeptApi.createDeptApi(data)
187 message.success(t('common.createSuccess')) 171 message.success(t('common.createSuccess'))
yudao-ui-admin-vue3/src/views/system/errorCode/index.vue
@@ -50,7 +50,7 @@ @@ -50,7 +50,7 @@
50 <Descriptions 50 <Descriptions
51 v-if="actionType === 'detail'" 51 v-if="actionType === 'detail'"
52 :schema="allSchemas.detailSchema" 52 :schema="allSchemas.detailSchema"
53 - :data="detailRef" 53 + :data="detailData"
54 /> 54 />
55 <template #footer> 55 <template #footer>
56 <!-- 按钮:保存 --> 56 <!-- 按钮:保存 -->
@@ -93,7 +93,7 @@ const dialogTitle = ref(&#39;edit&#39;) // 弹出层标题 @@ -93,7 +93,7 @@ const dialogTitle = ref(&#39;edit&#39;) // 弹出层标题
93 const actionType = ref('') // 操作按钮的类型 93 const actionType = ref('') // 操作按钮的类型
94 const actionLoading = ref(false) // 按钮 Loading 94 const actionLoading = ref(false) // 按钮 Loading
95 const formRef = ref<FormExpose>() // 表单 Ref 95 const formRef = ref<FormExpose>() // 表单 Ref
96 -const detailRef = ref() // 详情 Ref 96 +const detailData = ref() // 详情 Ref
97 97
98 // 设置标题 98 // 设置标题
99 const setDialogTile = (type: string) => { 99 const setDialogTile = (type: string) => {
@@ -120,7 +120,7 @@ const handleDetail = async (rowId: number) =&gt; { @@ -120,7 +120,7 @@ const handleDetail = async (rowId: number) =&gt; {
120 setDialogTile('detail') 120 setDialogTile('detail')
121 // 设置数据 121 // 设置数据
122 const res = await ErrorCodeApi.getErrorCodeApi(rowId) 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,7 +20,7 @@
20 <!-- 弹窗 --> 20 <!-- 弹窗 -->
21 <XModal id="postModel" v-model="dialogVisible" :title="dialogTitle"> 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 <template #footer> 24 <template #footer>
25 <!-- 按钮:关闭 --> 25 <!-- 按钮:关闭 -->
26 <XButton :title="t('dialog.close')" @click="dialogVisible = false" /> 26 <XButton :title="t('dialog.close')" @click="dialogVisible = false" />
@@ -47,13 +47,13 @@ const { gridOptions, exportList } = useVxeGrid&lt;LoginLogVO&gt;({ @@ -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 const dialogVisible = ref(false) // 是否显示弹出层 51 const dialogVisible = ref(false) // 是否显示弹出层
52 const dialogTitle = ref(t('action.detail')) // 弹出层标题 52 const dialogTitle = ref(t('action.detail')) // 弹出层标题
53 // 详情 53 // 详情
54 const handleDetail = async (row: LoginLogVO) => { 54 const handleDetail = async (row: LoginLogVO) => {
55 // 设置数据 55 // 设置数据
56 - detailRef.value = row 56 + detailData.value = row
57 dialogVisible.value = true 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,7 +8,7 @@ const crudSchemas = reactive&lt;VxeCrudSchema&gt;({
8 primaryType: 'seq', 8 primaryType: 'seq',
9 primaryTitle: '日志编号', 9 primaryTitle: '日志编号',
10 action: true, 10 action: true,
11 - actionWidth: '80px', 11 + actionWidth: '100px',
12 columns: [ 12 columns: [
13 { 13 {
14 title: '日志类型', 14 title: '日志类型',
@@ -28,10 +28,7 @@ const crudSchemas = reactive&lt;VxeCrudSchema&gt;({ @@ -28,10 +28,7 @@ const crudSchemas = reactive&lt;VxeCrudSchema&gt;({
28 }, 28 },
29 { 29 {
30 title: '浏览器', 30 title: '浏览器',
31 - field: 'userAgent',  
32 - table: {  
33 - width: 100  
34 - } 31 + field: 'userAgent'
35 }, 32 },
36 { 33 {
37 title: '登陆结果', 34 title: '登陆结果',
@@ -44,7 +41,7 @@ const crudSchemas = reactive&lt;VxeCrudSchema&gt;({ @@ -44,7 +41,7 @@ const crudSchemas = reactive&lt;VxeCrudSchema&gt;({
44 field: 'createTime', 41 field: 'createTime',
45 formatter: 'formatDate', 42 formatter: 'formatDate',
46 table: { 43 table: {
47 - width: 100 44 + width: 150
48 }, 45 },
49 search: { 46 search: {
50 show: true, 47 show: true,
yudao-ui-admin-vue3/src/views/system/menu/index.vue
@@ -98,20 +98,28 @@ @@ -98,20 +98,28 @@
98 <!-- 添加或修改菜单对话框 --> 98 <!-- 添加或修改菜单对话框 -->
99 <XModal id="menuModel" v-model="dialogVisible" :title="dialogTitle"> 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 <el-form-item label="上级菜单"> 108 <el-form-item label="上级菜单">
103 <el-tree-select 109 <el-tree-select
104 node-key="id" 110 node-key="id"
105 v-model="menuForm.parentId" 111 v-model="menuForm.parentId"
106 - :props="menuProps" 112 + :props="defaultProps"
107 :data="menuOptions" 113 :data="menuOptions"
108 :default-expanded-keys="[0]" 114 :default-expanded-keys="[0]"
109 check-strictly 115 check-strictly
110 /> 116 />
111 </el-form-item> 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 <el-form-item label="菜单类型" prop="type"> 123 <el-form-item label="菜单类型" prop="type">
116 <el-radio-group v-model="menuForm.type"> 124 <el-radio-group v-model="menuForm.type">
117 <el-radio-button 125 <el-radio-button
@@ -127,74 +135,88 @@ @@ -127,74 +135,88 @@
127 <el-form-item label="菜单图标"> 135 <el-form-item label="菜单图标">
128 <IconSelect v-model="menuForm.icon" clearable /> 136 <IconSelect v-model="menuForm.icon" clearable />
129 </el-form-item> 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 </template> 149 </template>
140 <template v-if="menuForm.type === 2"> 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 </template> 156 </template>
145 <template v-if="menuForm.type !== 1"> 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 </template> 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 </el-radio-group> 186 </el-radio-group>
183 </el-form-item> 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 </template> 204 </template>
185 <template v-if="menuForm.type === 2"> 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 </template> 220 </template>
199 </el-form> 221 </el-form>
200 <template #footer> 222 <template #footer>
@@ -215,8 +237,10 @@ @@ -215,8 +237,10 @@
215 // 全局相关的 import 237 // 全局相关的 import
216 import { onMounted, reactive, ref } from 'vue' 238 import { onMounted, reactive, ref } from 'vue'
217 import { useI18n } from '@/hooks/web/useI18n' 239 import { useI18n } from '@/hooks/web/useI18n'
  240 +import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
218 import { useMessage } from '@/hooks/web/useMessage' 241 import { useMessage } from '@/hooks/web/useMessage'
219 import { 242 import {
  243 + ElCol,
220 ElForm, 244 ElForm,
221 ElFormItem, 245 ElFormItem,
222 ElInput, 246 ElInput,
@@ -237,11 +261,11 @@ import * as MenuApi from &#39;@/api/system/menu&#39; @@ -237,11 +261,11 @@ import * as MenuApi from &#39;@/api/system/menu&#39;
237 import { required } from '@/utils/formRules.js' 261 import { required } from '@/utils/formRules.js'
238 import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' 262 import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
239 import { SystemMenuTypeEnum, CommonStatusEnum } from '@/utils/constants' 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 const { t } = useI18n() // 国际化 266 const { t } = useI18n() // 国际化
244 const message = useMessage() // 消息弹窗 267 const message = useMessage() // 消息弹窗
  268 +const { wsCache } = useCache()
245 // 列表相关的变量 269 // 列表相关的变量
246 const xTable = ref<VxeTableInstance>() 270 const xTable = ref<VxeTableInstance>()
247 const tableLoading = ref(false) 271 const tableLoading = ref(false)
@@ -253,7 +277,7 @@ const actionType = ref(&#39;&#39;) // 操作按钮的类型 @@ -253,7 +277,7 @@ const actionType = ref(&#39;&#39;) // 操作按钮的类型
253 const actionLoading = ref(false) // 遮罩层 277 const actionLoading = ref(false) // 遮罩层
254 // 新增和修改的表单值 278 // 新增和修改的表单值
255 const formRef = ref<FormInstance>() 279 const formRef = ref<FormInstance>()
256 -const menuFormNull = { 280 +const menuForm = ref<MenuApi.MenuVO>({
257 id: 0, 281 id: 0,
258 name: '', 282 name: '',
259 permission: '', 283 permission: '',
@@ -266,9 +290,8 @@ const menuFormNull = { @@ -266,9 +290,8 @@ const menuFormNull = {
266 status: CommonStatusEnum.ENABLE, 290 status: CommonStatusEnum.ENABLE,
267 visible: true, 291 visible: true,
268 keepAlive: true, 292 keepAlive: true,
269 - createTime: ''  
270 -}  
271 -const menuForm = ref<MenuApi.MenuVO>(menuFormNull) 293 + createTime: new Date()
  294 +})
272 // 新增和修改的表单校验 295 // 新增和修改的表单校验
273 const rules = reactive({ 296 const rules = reactive({
274 name: [required], 297 name: [required],
@@ -278,13 +301,6 @@ const rules = reactive({ @@ -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 const menuOptions = ref<any[]>([]) // 树形结构 304 const menuOptions = ref<any[]>([]) // 树形结构
289 // 获取下拉框[上级菜单]的数据 305 // 获取下拉框[上级菜单]的数据
290 const getTree = async () => { 306 const getTree = async () => {
@@ -335,7 +351,21 @@ const handleCreate = () =&gt; { @@ -335,7 +351,21 @@ const handleCreate = () =&gt; {
335 setDialogTile('create') 351 setDialogTile('create')
336 // 重置表单 352 // 重置表单
337 formRef.value?.resetFields() 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,6 +405,7 @@ const submitForm = async () =&gt; {
375 } finally { 405 } finally {
376 dialogVisible.value = false 406 dialogVisible.value = false
377 actionLoading.value = false 407 actionLoading.value = false
  408 + wsCache.delete(CACHE_KEY.ROLE_ROUTERS)
378 // 操作成功,重新加载列表 409 // 操作成功,重新加载列表
379 await getList() 410 await getList()
380 } 411 }
yudao-ui-admin-vue3/src/views/system/notice/index.vue
@@ -50,7 +50,7 @@ @@ -50,7 +50,7 @@
50 <Descriptions 50 <Descriptions
51 v-if="actionType === 'detail'" 51 v-if="actionType === 'detail'"
52 :schema="allSchemas.detailSchema" 52 :schema="allSchemas.detailSchema"
53 - :data="detailRef" 53 + :data="detailData"
54 > 54 >
55 <template #content="{ row }"> 55 <template #content="{ row }">
56 <Editor :model-value="row.content" read-only="true" /> 56 <Editor :model-value="row.content" read-only="true" />
@@ -98,7 +98,7 @@ const dialogTitle = ref(&#39;edit&#39;) // 弹出层标题 @@ -98,7 +98,7 @@ const dialogTitle = ref(&#39;edit&#39;) // 弹出层标题
98 const actionType = ref('') // 操作按钮的类型 98 const actionType = ref('') // 操作按钮的类型
99 const actionLoading = ref(false) // 按钮 Loading 99 const actionLoading = ref(false) // 按钮 Loading
100 const formRef = ref<FormExpose>() // 表单 Ref 100 const formRef = ref<FormExpose>() // 表单 Ref
101 -const detailRef = ref() // 详情 Ref 101 +const detailData = ref() // 详情 Ref
102 102
103 // 设置标题 103 // 设置标题
104 const setDialogTile = (type: string) => { 104 const setDialogTile = (type: string) => {
@@ -125,7 +125,7 @@ const handleDetail = async (rowId: number) =&gt; { @@ -125,7 +125,7 @@ const handleDetail = async (rowId: number) =&gt; {
125 setDialogTile('detail') 125 setDialogTile('detail')
126 // 设置数据 126 // 设置数据
127 const res = await NoticeApi.getNoticeApi(rowId) 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,6 +41,12 @@ const crudSchemas = reactive&lt;VxeCrudSchema&gt;({
41 cellRender: { 41 cellRender: {
42 name: 'XImg' 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,16 +61,12 @@
61 v-if="['create', 'update'].includes(actionType)" 61 v-if="['create', 'update'].includes(actionType)"
62 :schema="allSchemas.formSchema" 62 :schema="allSchemas.formSchema"
63 :rules="rules" 63 :rules="rules"
64 - >  
65 - <template #logo>  
66 - <UploadImg :imgs="uploadLogo" :limit="1" />  
67 - </template>  
68 - </Form> 64 + />
69 <!-- 表单:详情 --> 65 <!-- 表单:详情 -->
70 <Descriptions 66 <Descriptions
71 v-if="actionType === 'detail'" 67 v-if="actionType === 'detail'"
72 :schema="allSchemas.detailSchema" 68 :schema="allSchemas.detailSchema"
73 - :data="detailRef" 69 + :data="detailData"
74 > 70 >
75 <template #accessTokenValiditySeconds="{ row }"> 71 <template #accessTokenValiditySeconds="{ row }">
76 {{ row.accessTokenValiditySeconds + '秒' }} 72 {{ row.accessTokenValiditySeconds + '秒' }}
@@ -142,7 +138,6 @@ import { useMessage } from &#39;@/hooks/web/useMessage&#39; @@ -142,7 +138,6 @@ import { useMessage } from &#39;@/hooks/web/useMessage&#39;
142 import { useVxeGrid } from '@/hooks/web/useVxeGrid' 138 import { useVxeGrid } from '@/hooks/web/useVxeGrid'
143 import { VxeGridInstance } from 'vxe-table' 139 import { VxeGridInstance } from 'vxe-table'
144 import { FormExpose } from '@/components/Form' 140 import { FormExpose } from '@/components/Form'
145 -import { UploadImg } from '@/components/UploadFile'  
146 // 业务相关的 import 141 // 业务相关的 import
147 import * as ClientApi from '@/api/system/oauth2/client' 142 import * as ClientApi from '@/api/system/oauth2/client'
148 import { rules, allSchemas } from './client.data' 143 import { rules, allSchemas } from './client.data'
@@ -163,8 +158,7 @@ const dialogTitle = ref(&#39;edit&#39;) // 弹出层标题 @@ -163,8 +158,7 @@ const dialogTitle = ref(&#39;edit&#39;) // 弹出层标题
163 const actionType = ref('') // 操作按钮的类型 158 const actionType = ref('') // 操作按钮的类型
164 const actionLoading = ref(false) // 按钮 Loading 159 const actionLoading = ref(false) // 按钮 Loading
165 const formRef = ref<FormExpose>() // 表单 Ref 160 const formRef = ref<FormExpose>() // 表单 Ref
166 -const detailRef = ref() // 详情 Ref  
167 -const uploadLogo = ref('') 161 +const detailData = ref() // 详情 Ref
168 // 设置标题 162 // 设置标题
169 const setDialogTile = (type: string) => { 163 const setDialogTile = (type: string) => {
170 dialogTitle.value = t('action.' + type) 164 dialogTitle.value = t('action.' + type)
@@ -174,7 +168,6 @@ const setDialogTile = (type: string) =&gt; { @@ -174,7 +168,6 @@ const setDialogTile = (type: string) =&gt; {
174 168
175 // 新增操作 169 // 新增操作
176 const handleCreate = () => { 170 const handleCreate = () => {
177 - uploadLogo.value = ''  
178 setDialogTile('create') 171 setDialogTile('create')
179 } 172 }
180 173
@@ -183,7 +176,6 @@ const handleUpdate = async (rowId: number) =&gt; { @@ -183,7 +176,6 @@ const handleUpdate = async (rowId: number) =&gt; {
183 setDialogTile('update') 176 setDialogTile('update')
184 // 设置数据 177 // 设置数据
185 const res = await ClientApi.getOAuth2ClientApi(rowId) 178 const res = await ClientApi.getOAuth2ClientApi(rowId)
186 - uploadLogo.value = res.logo  
187 unref(formRef)?.setValues(res) 179 unref(formRef)?.setValues(res)
188 } 180 }
189 181
@@ -191,7 +183,7 @@ const handleUpdate = async (rowId: number) =&gt; { @@ -191,7 +183,7 @@ const handleUpdate = async (rowId: number) =&gt; {
191 const handleDetail = async (rowId: number) => { 183 const handleDetail = async (rowId: number) => {
192 setDialogTile('detail') 184 setDialogTile('detail')
193 const res = await ClientApi.getOAuth2ClientApi(rowId) 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,7 +201,6 @@ const submitForm = async () =&gt; {
209 // 提交请求 201 // 提交请求
210 try { 202 try {
211 const data = unref(formRef)?.formModel as ClientApi.OAuth2ClientVO 203 const data = unref(formRef)?.formModel as ClientApi.OAuth2ClientVO
212 - data.logo = uploadLogo.value  
213 if (actionType.value === 'create') { 204 if (actionType.value === 'create') {
214 await ClientApi.createOAuth2ClientApi(data) 205 await ClientApi.createOAuth2ClientApi(data)
215 message.success(t('common.createSuccess')) 206 message.success(t('common.createSuccess'))
yudao-ui-admin-vue3/src/views/system/oauth2/token/index.vue
@@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
17 </ContentWrap> 17 </ContentWrap>
18 <XModal v-model="dialogVisible" :title="dialogTitle"> 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 <template #footer> 22 <template #footer>
23 <XButton :title="t('dialog.close')" @click="dialogVisible = false" /> 23 <XButton :title="t('dialog.close')" @click="dialogVisible = false" />
@@ -45,13 +45,13 @@ const { gridOptions, getList } = useVxeGrid&lt;TokenApi.OAuth2TokenVO&gt;({ @@ -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 const dialogVisible = ref(false) // 是否显示弹出层 49 const dialogVisible = ref(false) // 是否显示弹出层
50 const dialogTitle = ref(t('action.detail')) // 弹出层标题 50 const dialogTitle = ref(t('action.detail')) // 弹出层标题
51 // 详情 51 // 详情
52 const handleDetail = async (row: TokenApi.OAuth2TokenVO) => { 52 const handleDetail = async (row: TokenApi.OAuth2TokenVO) => {
53 // 设置数据 53 // 设置数据
54 - detailRef.value = row 54 + detailData.value = row
55 dialogVisible.value = true 55 dialogVisible.value = true
56 } 56 }
57 57
yudao-ui-admin-vue3/src/views/system/operatelog/index.vue
@@ -27,7 +27,7 @@ @@ -27,7 +27,7 @@
27 <!-- 弹窗 --> 27 <!-- 弹窗 -->
28 <XModal id="postModel" v-model="dialogVisible" :title="t('action.detail')"> 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 <template #resultCode="{ row }"> 31 <template #resultCode="{ row }">
32 <span>{{ row.resultCode === 0 ? '成功' : '失败' }}</span> 32 <span>{{ row.resultCode === 0 ? '成功' : '失败' }}</span>
33 </template> 33 </template>
@@ -63,16 +63,16 @@ const { gridOptions, exportList } = useVxeGrid&lt;OperateLogApi.OperateLogVO&gt;({ @@ -63,16 +63,16 @@ const { gridOptions, exportList } = useVxeGrid&lt;OperateLogApi.OperateLogVO&gt;({
63 // 弹窗相关的变量 63 // 弹窗相关的变量
64 const dialogVisible = ref(false) // 是否显示弹出层 64 const dialogVisible = ref(false) // 是否显示弹出层
65 const actionLoading = ref(false) // 按钮 Loading 65 const actionLoading = ref(false) // 按钮 Loading
66 -const detailRef = ref() // 详情 Ref 66 +const detailData = ref() // 详情 Ref
67 // 详情 67 // 详情
68 const handleDetail = (row: OperateLogApi.OperateLogVO) => { 68 const handleDetail = (row: OperateLogApi.OperateLogVO) => {
69 // 设置数据 69 // 设置数据
70 - detailRef.value = row 70 + detailData.value = row
71 dialogVisible.value = true 71 dialogVisible.value = true
72 } 72 }
73 73
74 // 导出操作 74 // 导出操作
75 const handleExport = async () => { 75 const handleExport = async () => {
76 - await exportList(xGrid, '岗位列表.xls') 76 + await exportList(xGrid, '操作日志.xls')
77 } 77 }
78 </script> 78 </script>
yudao-ui-admin-vue3/src/views/system/role/index.vue
@@ -64,7 +64,7 @@ @@ -64,7 +64,7 @@
64 <Descriptions 64 <Descriptions
65 v-if="actionType === 'detail'" 65 v-if="actionType === 'detail'"
66 :schema="allSchemas.detailSchema" 66 :schema="allSchemas.detailSchema"
67 - :data="detailRef" 67 + :data="detailData"
68 /> 68 />
69 <!-- 操作按钮 --> 69 <!-- 操作按钮 -->
70 <template #footer> 70 <template #footer>
@@ -92,9 +92,9 @@ @@ -92,9 +92,9 @@
92 <el-select v-model="dataScopeForm.dataScope"> 92 <el-select v-model="dataScopeForm.dataScope">
93 <el-option 93 <el-option
94 v-for="item in dataScopeDictDatas" 94 v-for="item in dataScopeDictDatas"
95 - :key="parseInt(item.value)" 95 + :key="item.value"
96 :label="item.label" 96 :label="item.label"
97 - :value="parseInt(item.value)" 97 + :value="item.value"
98 /> 98 />
99 </el-select> 99 </el-select>
100 </el-form-item> 100 </el-form-item>
@@ -105,7 +105,7 @@ @@ -105,7 +105,7 @@
105 actionScopeType === 'menu' || dataScopeForm.dataScope === SystemDataScopeEnum.DEPT_CUSTOM 105 actionScopeType === 'menu' || dataScopeForm.dataScope === SystemDataScopeEnum.DEPT_CUSTOM
106 " 106 "
107 > 107 >
108 - <el-card class="box-card"> 108 + <el-card shadow="never">
109 <template #header> 109 <template #header>
110 父子联动(选中父节点,自动选择子节点): 110 父子联动(选中父节点,自动选择子节点):
111 <el-switch v-model="checkStrictly" inline-prompt active-text="是" inactive-text="否" /> 111 <el-switch v-model="checkStrictly" inline-prompt active-text="是" inactive-text="否" />
@@ -164,9 +164,9 @@ import { FormExpose } from &#39;@/components/Form&#39; @@ -164,9 +164,9 @@ import { FormExpose } from &#39;@/components/Form&#39;
164 import { useI18n } from '@/hooks/web/useI18n' 164 import { useI18n } from '@/hooks/web/useI18n'
165 import { useMessage } from '@/hooks/web/useMessage' 165 import { useMessage } from '@/hooks/web/useMessage'
166 import { useVxeGrid } from '@/hooks/web/useVxeGrid' 166 import { useVxeGrid } from '@/hooks/web/useVxeGrid'
167 -import { handleTree } from '@/utils/tree' 167 +import { handleTree, defaultProps } from '@/utils/tree'
168 import { SystemDataScopeEnum } from '@/utils/constants' 168 import { SystemDataScopeEnum } from '@/utils/constants'
169 -import { DICT_TYPE, getDictOptions } from '@/utils/dict' 169 +import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
170 import { rules, allSchemas } from './role.data' 170 import { rules, allSchemas } from './role.data'
171 import * as RoleApi from '@/api/system/role' 171 import * as RoleApi from '@/api/system/role'
172 import { listSimpleMenusApi } from '@/api/system/menu' 172 import { listSimpleMenusApi } from '@/api/system/menu'
@@ -189,7 +189,7 @@ const actionType = ref(&#39;&#39;) // 操作按钮的类型 @@ -189,7 +189,7 @@ const actionType = ref(&#39;&#39;) // 操作按钮的类型
189 const dialogVisible = ref(false) // 是否显示弹出层 189 const dialogVisible = ref(false) // 是否显示弹出层
190 const dialogTitle = ref('edit') // 弹出层标题 190 const dialogTitle = ref('edit') // 弹出层标题
191 const formRef = ref<FormExpose>() // 表单 Ref 191 const formRef = ref<FormExpose>() // 表单 Ref
192 -const detailRef = ref() // 详情 Ref 192 +const detailData = ref() // 详情 Ref
193 193
194 // 设置标题 194 // 设置标题
195 const setDialogTile = (type: string) => { 195 const setDialogTile = (type: string) => {
@@ -216,7 +216,7 @@ const handleDetail = async (rowId: number) =&gt; { @@ -216,7 +216,7 @@ const handleDetail = async (rowId: number) =&gt; {
216 setDialogTile('detail') 216 setDialogTile('detail')
217 // 设置数据 217 // 设置数据
218 const res = await RoleApi.getRoleApi(rowId) 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,11 +259,6 @@ const dataScopeForm = reactive({
259 dataScope: 0, 259 dataScope: 0,
260 checkList: [] 260 checkList: []
261 }) 261 })
262 -const defaultProps = {  
263 - children: 'children',  
264 - label: 'name',  
265 - value: 'id'  
266 -}  
267 const treeOptions = ref<any[]>([]) // 菜单树形结构 262 const treeOptions = ref<any[]>([]) // 菜单树形结构
268 const treeRef = ref<InstanceType<typeof ElTree>>() 263 const treeRef = ref<InstanceType<typeof ElTree>>()
269 const dialogScopeVisible = ref(false) 264 const dialogScopeVisible = ref(false)
@@ -306,18 +301,20 @@ const handleScope = async (type: string, row: RoleApi.RoleVO) =&gt; { @@ -306,18 +301,20 @@ const handleScope = async (type: string, row: RoleApi.RoleVO) =&gt; {
306 } 301 }
307 // 保存权限 302 // 保存权限
308 const submitScope = async () => { 303 const submitScope = async () => {
309 - const keys = treeRef.value!.getCheckedKeys(false) as unknown as Array<number>  
310 if ('data' === actionScopeType.value) { 304 if ('data' === actionScopeType.value) {
311 const data = ref<PermissionApi.PermissionAssignRoleDataScopeReqVO>({ 305 const data = ref<PermissionApi.PermissionAssignRoleDataScopeReqVO>({
312 roleId: dataScopeForm.id, 306 roleId: dataScopeForm.id,
313 dataScope: dataScopeForm.dataScope, 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 await PermissionApi.assignRoleDataScopeApi(data.value) 313 await PermissionApi.assignRoleDataScopeApi(data.value)
317 } else if ('menu' === actionScopeType.value) { 314 } else if ('menu' === actionScopeType.value) {
318 const data = ref<PermissionApi.PermissionAssignRoleMenuReqVO>({ 315 const data = ref<PermissionApi.PermissionAssignRoleMenuReqVO>({
319 roleId: dataScopeForm.id, 316 roleId: dataScopeForm.id,
320 - menuIds: keys 317 + menuIds: treeRef.value!.getCheckedKeys(false) as unknown as Array<number>
321 }) 318 })
322 await PermissionApi.assignRoleMenuApi(data.value) 319 await PermissionApi.assignRoleMenuApi(data.value)
323 } 320 }
@@ -325,7 +322,7 @@ const submitScope = async () =&gt; { @@ -325,7 +322,7 @@ const submitScope = async () =&gt; {
325 dialogScopeVisible.value = false 322 dialogScopeVisible.value = false
326 } 323 }
327 const init = () => { 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 onMounted(() => { 328 onMounted(() => {
yudao-ui-admin-vue3/src/views/system/role/role.data.ts
@@ -28,7 +28,8 @@ const crudSchemas = reactive&lt;VxeCrudSchema&gt;({ @@ -28,7 +28,8 @@ const crudSchemas = reactive&lt;VxeCrudSchema&gt;({
28 title: '角色类型', 28 title: '角色类型',
29 field: 'type', 29 field: 'type',
30 dictType: DICT_TYPE.SYSTEM_ROLE_TYPE, 30 dictType: DICT_TYPE.SYSTEM_ROLE_TYPE,
31 - dictClass: 'number' 31 + dictClass: 'number',
  32 + isForm: false
32 }, 33 },
33 { 34 {
34 title: '角色标识', 35 title: '角色标识',
@@ -40,6 +41,21 @@ const crudSchemas = reactive&lt;VxeCrudSchema&gt;({ @@ -40,6 +41,21 @@ const crudSchemas = reactive&lt;VxeCrudSchema&gt;({
40 field: 'sort' 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 title: t('common.status'), 59 title: t('common.status'),
44 field: 'status', 60 field: 'status',
45 dictType: DICT_TYPE.COMMON_STATUS, 61 dictType: DICT_TYPE.COMMON_STATUS,
yudao-ui-admin-vue3/src/views/system/sensitiveWord/index.vue
@@ -64,8 +64,8 @@ @@ -64,8 +64,8 @@
64 :rules="rules" 64 :rules="rules"
65 ref="formRef" 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 <el-option v-for="item in tagsOptions" :key="item" :label="item" :value="item" /> 69 <el-option v-for="item in tagsOptions" :key="item" :label="item" :value="item" />
70 </el-select> 70 </el-select>
71 </template> 71 </template>
@@ -130,7 +130,6 @@ const dialogVisible = ref(false) // 是否显示弹出层 @@ -130,7 +130,6 @@ const dialogVisible = ref(false) // 是否显示弹出层
130 const dialogTitle = ref('edit') // 弹出层标题 130 const dialogTitle = ref('edit') // 弹出层标题
131 const formRef = ref<FormExpose>() // 表单 Ref 131 const formRef = ref<FormExpose>() // 表单 Ref
132 const detailData = ref() // 详情 Ref 132 const detailData = ref() // 详情 Ref
133 -const tags = ref()  
134 133
135 // 获取标签 134 // 获取标签
136 const tagsOptions = ref() 135 const tagsOptions = ref()
@@ -148,7 +147,6 @@ const setDialogTile = (type: string) =&gt; { @@ -148,7 +147,6 @@ const setDialogTile = (type: string) =&gt; {
148 147
149 // 新增操作 148 // 新增操作
150 const handleCreate = () => { 149 const handleCreate = () => {
151 - tags.value = null  
152 setDialogTile('create') 150 setDialogTile('create')
153 } 151 }
154 152
@@ -162,7 +160,6 @@ const handleUpdate = async (rowId: number) =&gt; { @@ -162,7 +160,6 @@ const handleUpdate = async (rowId: number) =&gt; {
162 setDialogTile('update') 160 setDialogTile('update')
163 // 设置数据 161 // 设置数据
164 const res = await SensitiveWordApi.getSensitiveWordApi(rowId) 162 const res = await SensitiveWordApi.getSensitiveWordApi(rowId)
165 - tags.value = res.tags  
166 unref(formRef)?.setValues(res) 163 unref(formRef)?.setValues(res)
167 } 164 }
168 165
@@ -188,7 +185,6 @@ const submitForm = async () =&gt; { @@ -188,7 +185,6 @@ const submitForm = async () =&gt; {
188 // 提交请求 185 // 提交请求
189 try { 186 try {
190 const data = unref(formRef)?.formModel as SensitiveWordApi.SensitiveWordVO 187 const data = unref(formRef)?.formModel as SensitiveWordApi.SensitiveWordVO
191 - data.tags = tags.value  
192 if (actionType.value === 'create') { 188 if (actionType.value === 'create') {
193 await SensitiveWordApi.createSensitiveWordApi(data) 189 await SensitiveWordApi.createSensitiveWordApi(data)
194 message.success(t('common.createSuccess')) 190 message.success(t('common.createSuccess'))
yudao-ui-admin-vue3/src/views/system/sms/smsLog/index.vue
@@ -22,7 +22,7 @@ @@ -22,7 +22,7 @@
22 <Descriptions 22 <Descriptions
23 v-if="actionType === 'detail'" 23 v-if="actionType === 'detail'"
24 :schema="allSchemas.detailSchema" 24 :schema="allSchemas.detailSchema"
25 - :data="detailRef" 25 + :data="detailData"
26 /> 26 />
27 <!-- 操作按钮 --> 27 <!-- 操作按钮 -->
28 <template #footer> 28 <template #footer>
@@ -53,10 +53,10 @@ const dialogVisible = ref(false) // 是否显示弹出层 @@ -53,10 +53,10 @@ const dialogVisible = ref(false) // 是否显示弹出层
53 const dialogTitle = ref('edit') // 弹出层标题 53 const dialogTitle = ref('edit') // 弹出层标题
54 const actionType = ref('') // 操作按钮的类型 54 const actionType = ref('') // 操作按钮的类型
55 // ========== 详情相关 ========== 55 // ========== 详情相关 ==========
56 -const detailRef = ref() // 详情 Ref 56 +const detailData = ref() // 详情 Ref
57 const handleDetail = (row: SmsLoglApi.SmsLogVO) => { 57 const handleDetail = (row: SmsLoglApi.SmsLogVO) => {
58 // 设置数据 58 // 设置数据
59 - detailRef.value = row 59 + detailData.value = row
60 dialogVisible.value = true 60 dialogVisible.value = true
61 } 61 }
62 62
yudao-ui-admin-vue3/src/views/system/tenant/index.vue
@@ -63,7 +63,7 @@ @@ -63,7 +63,7 @@
63 <Descriptions 63 <Descriptions
64 v-if="actionType === 'detail'" 64 v-if="actionType === 'detail'"
65 :schema="allSchemas.detailSchema" 65 :schema="allSchemas.detailSchema"
66 - :data="detailRef" 66 + :data="detailData"
67 > 67 >
68 <template #packageId="{ row }"> 68 <template #packageId="{ row }">
69 <el-tag v-if="row.packageId === 0" type="danger">系统租户</el-tag> 69 <el-tag v-if="row.packageId === 0" type="danger">系统租户</el-tag>
@@ -112,7 +112,7 @@ const actionType = ref(&#39;&#39;) // 操作按钮的类型 @@ -112,7 +112,7 @@ const actionType = ref(&#39;&#39;) // 操作按钮的类型
112 const dialogVisible = ref(false) // 是否显示弹出层 112 const dialogVisible = ref(false) // 是否显示弹出层
113 const dialogTitle = ref('edit') // 弹出层标题 113 const dialogTitle = ref('edit') // 弹出层标题
114 const formRef = ref<FormExpose>() // 表单 Ref 114 const formRef = ref<FormExpose>() // 表单 Ref
115 -const detailRef = ref() // 详情 Ref 115 +const detailData = ref() // 详情 Ref
116 const getPackageName = (packageId: number) => { 116 const getPackageName = (packageId: number) => {
117 for (let item of tenantPackageOption) { 117 for (let item of tenantPackageOption) {
118 if (item.value === packageId) { 118 if (item.value === packageId) {
@@ -147,7 +147,7 @@ const handleUpdate = async (rowId: number) =&gt; { @@ -147,7 +147,7 @@ const handleUpdate = async (rowId: number) =&gt; {
147 const handleDetail = async (rowId: number) => { 147 const handleDetail = async (rowId: number) => {
148 // 设置数据 148 // 设置数据
149 const res = await TenantApi.getTenantApi(rowId) 149 const res = await TenantApi.getTenantApi(rowId)
150 - detailRef.value = res 150 + detailData.value = res
151 setDialogTile('detail') 151 setDialogTile('detail')
152 } 152 }
153 153
yudao-ui-admin-vue3/src/views/system/tenantPackage/index.vue
@@ -66,7 +66,7 @@ @@ -66,7 +66,7 @@
66 </template> 66 </template>
67 <script setup lang="ts" name="TenantPackage"> 67 <script setup lang="ts" name="TenantPackage">
68 import { onMounted, ref, unref } from 'vue' 68 import { onMounted, ref, unref } from 'vue'
69 -import { handleTree } from '@/utils/tree' 69 +import { handleTree, defaultProps } from '@/utils/tree'
70 import { useI18n } from '@/hooks/web/useI18n' 70 import { useI18n } from '@/hooks/web/useI18n'
71 import { useMessage } from '@/hooks/web/useMessage' 71 import { useMessage } from '@/hooks/web/useMessage'
72 import { useVxeGrid } from '@/hooks/web/useVxeGrid' 72 import { useVxeGrid } from '@/hooks/web/useVxeGrid'
@@ -93,12 +93,6 @@ const actionType = ref(&#39;&#39;) // 操作按钮的类型 @@ -93,12 +93,6 @@ const actionType = ref(&#39;&#39;) // 操作按钮的类型
93 const dialogVisible = ref(false) // 是否显示弹出层 93 const dialogVisible = ref(false) // 是否显示弹出层
94 const dialogTitle = ref('edit') // 弹出层标题 94 const dialogTitle = ref('edit') // 弹出层标题
95 95
96 -const defaultProps = {  
97 - children: 'children',  
98 - label: 'name',  
99 - value: 'id'  
100 -}  
101 -  
102 // 全选/全不选 96 // 全选/全不选
103 const handleCheckedTreeNodeAll = () => { 97 const handleCheckedTreeNodeAll = () => {
104 treeRef.value!.setCheckedNodes(treeNodeAll.value ? menuOptions.value : []) 98 treeRef.value!.setCheckedNodes(treeNodeAll.value ? menuOptions.value : [])
@@ -155,7 +149,7 @@ const submitForm = async () =&gt; { @@ -155,7 +149,7 @@ const submitForm = async () =&gt; {
155 // 提交请求 149 // 提交请求
156 try { 150 try {
157 const data = unref(formRef)?.formModel as TenantPackageApi.TenantPackageVO 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 if (actionType.value === 'create') { 153 if (actionType.value === 'create') {
160 await TenantPackageApi.createTenantPackageTypeApi(data) 154 await TenantPackageApi.createTenantPackageTypeApi(data)
161 message.success(t('common.createSuccess')) 155 message.success(t('common.createSuccess'))
yudao-ui-admin-vue3/src/views/system/user/index.vue
@@ -77,7 +77,14 @@ @@ -77,7 +77,14 @@
77 v-hasPermi="['system:user:update']" 77 v-hasPermi="['system:user:update']"
78 @click="handleDetail(row.id)" 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 <XTextButton :title="t('action.more')" postIcon="ep:arrow-down" /> 88 <XTextButton :title="t('action.more')" postIcon="ep:arrow-down" />
82 <template #dropdown> 89 <template #dropdown>
83 <el-dropdown-menu> 90 <el-dropdown-menu>
@@ -123,17 +130,17 @@ @@ -123,17 +130,17 @@
123 :schema="allSchemas.formSchema" 130 :schema="allSchemas.formSchema"
124 ref="formRef" 131 ref="formRef"
125 > 132 >
126 - <template #deptId> 133 + <template #deptId="form">
127 <el-tree-select 134 <el-tree-select
128 node-key="id" 135 node-key="id"
129 - v-model="deptId" 136 + v-model="form['deptId']"
130 :props="defaultProps" 137 :props="defaultProps"
131 :data="deptOptions" 138 :data="deptOptions"
132 check-strictly 139 check-strictly
133 /> 140 />
134 </template> 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 <el-option 144 <el-option
138 v-for="item in postOptions" 145 v-for="item in postOptions"
139 :key="item.id" 146 :key="item.id"
@@ -277,7 +284,7 @@ import { @@ -277,7 +284,7 @@ import {
277 } from 'element-plus' 284 } from 'element-plus'
278 import { useRouter } from 'vue-router' 285 import { useRouter } from 'vue-router'
279 import { VxeGridInstance } from 'vxe-table' 286 import { VxeGridInstance } from 'vxe-table'
280 -import { handleTree } from '@/utils/tree' 287 +import { handleTree, defaultProps } from '@/utils/tree'
281 import download from '@/utils/download' 288 import download from '@/utils/download'
282 import { CommonStatusEnum } from '@/utils/constants' 289 import { CommonStatusEnum } from '@/utils/constants'
283 import { getAccessToken, getTenantId } from '@/utils/auth' 290 import { getAccessToken, getTenantId } from '@/utils/auth'
@@ -299,11 +306,6 @@ import { @@ -299,11 +306,6 @@ import {
299 const { t } = useI18n() // 国际化 306 const { t } = useI18n() // 国际化
300 const message = useMessage() // 消息弹窗 307 const message = useMessage() // 消息弹窗
301 308
302 -const defaultProps = {  
303 - children: 'children',  
304 - label: 'name',  
305 - value: 'id'  
306 -}  
307 const queryParams = reactive({ 309 const queryParams = reactive({
308 deptId: null 310 deptId: null
309 }) 311 })
@@ -320,7 +322,7 @@ const { gridOptions, getList, deleteData, exportList } = useVxeGrid&lt;UserApi.User @@ -320,7 +322,7 @@ const { gridOptions, getList, deleteData, exportList } = useVxeGrid&lt;UserApi.User
320 }) 322 })
321 // ========== 创建部门树结构 ========== 323 // ========== 创建部门树结构 ==========
322 const filterText = ref('') 324 const filterText = ref('')
323 -const deptOptions = ref<any[]>([]) // 树形结构 325 +const deptOptions = ref<Tree[]>([]) // 树形结构
324 const treeRef = ref<InstanceType<typeof ElTree>>() 326 const treeRef = ref<InstanceType<typeof ElTree>>()
325 const getTree = async () => { 327 const getTree = async () => {
326 const res = await listSimpleDeptApi() 328 const res = await listSimpleDeptApi()
@@ -347,8 +349,6 @@ const actionType = ref(&#39;&#39;) // 操作按钮的类型 @@ -347,8 +349,6 @@ const actionType = ref(&#39;&#39;) // 操作按钮的类型
347 const dialogVisible = ref(false) // 是否显示弹出层 349 const dialogVisible = ref(false) // 是否显示弹出层
348 const dialogTitle = ref('edit') // 弹出层标题 350 const dialogTitle = ref('edit') // 弹出层标题
349 const formRef = ref<FormExpose>() // 表单 Ref 351 const formRef = ref<FormExpose>() // 表单 Ref
350 -const deptId = ref() // 部门ID  
351 -const postIds = ref<string[]>([]) // 岗位ID  
352 const postOptions = ref<PostVO[]>([]) //岗位列表 352 const postOptions = ref<PostVO[]>([]) //岗位列表
353 353
354 // 获取岗位列表 354 // 获取岗位列表
@@ -367,8 +367,6 @@ const setDialogTile = async (type: string) =&gt; { @@ -367,8 +367,6 @@ const setDialogTile = async (type: string) =&gt; {
367 const handleCreate = async () => { 367 const handleCreate = async () => {
368 setDialogTile('create') 368 setDialogTile('create')
369 // 重置表单 369 // 重置表单
370 - deptId.value = null  
371 - postIds.value = []  
372 await nextTick() 370 await nextTick()
373 if (allSchemas.formSchema[0].field !== 'username') { 371 if (allSchemas.formSchema[0].field !== 'username') {
374 unref(formRef)?.addSchema( 372 unref(formRef)?.addSchema(
@@ -398,8 +396,6 @@ const handleUpdate = async (rowId: number) =&gt; { @@ -398,8 +396,6 @@ const handleUpdate = async (rowId: number) =&gt; {
398 unref(formRef)?.delSchema('password') 396 unref(formRef)?.delSchema('password')
399 // 设置数据 397 // 设置数据
400 const res = await UserApi.getUserApi(rowId) 398 const res = await UserApi.getUserApi(rowId)
401 - deptId.value = res.deptId  
402 - postIds.value = res.postIds  
403 unref(formRef)?.setValues(res) 399 unref(formRef)?.setValues(res)
404 } 400 }
405 const detailData = ref() 401 const detailData = ref()
@@ -421,8 +417,6 @@ const submitForm = async () =&gt; { @@ -421,8 +417,6 @@ const submitForm = async () =&gt; {
421 // 提交请求 417 // 提交请求
422 try { 418 try {
423 const data = unref(formRef)?.formModel as UserApi.UserVO 419 const data = unref(formRef)?.formModel as UserApi.UserVO
424 - data.deptId = deptId.value  
425 - data.postIds = postIds.value  
426 if (actionType.value === 'create') { 420 if (actionType.value === 'create') {
427 await UserApi.createUserApi(data) 421 await UserApi.createUserApi(data)
428 message.success(t('common.createSuccess')) 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,6 +10,7 @@ export const rules = reactive({
10 username: [required], 10 username: [required],
11 nickname: [required], 11 nickname: [required],
12 email: [required], 12 email: [required],
  13 + postIds: [required],
13 status: [required], 14 status: [required],
14 mobile: [ 15 mobile: [
15 { 16 {
yudao-ui-admin-vue3/vite.config.ts
1 import { resolve } from 'path' 1 import { resolve } from 'path'
2 import { loadEnv } from 'vite' 2 import { loadEnv } from 'vite'
3 import type { UserConfig, ConfigEnv } from 'vite' 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 // 当前执行node命令时文件夹的地址(工作目录) 6 // 当前执行node命令时文件夹的地址(工作目录)
18 const root = process.cwd() 7 const root = process.cwd()
19 8
@@ -44,68 +33,16 @@ export default ({ command, mode }: ConfigEnv): UserConfig =&gt; { @@ -44,68 +33,16 @@ export default ({ command, mode }: ConfigEnv): UserConfig =&gt; {
44 open: env.VITE_OPEN, 33 open: env.VITE_OPEN,
45 // 本地跨域代理 34 // 本地跨域代理
46 proxy: { 35 proxy: {
47 - ['/dev-api']: { 36 + ['/admin-api']: {
48 target: env.VITE_BASE_URL, 37 target: env.VITE_BASE_URL,
49 ws: false, 38 ws: false,
50 changeOrigin: true, 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 css: { 46 css: {
110 preprocessorOptions: { 47 preprocessorOptions: {
111 scss: { 48 scss: {
@@ -139,32 +76,6 @@ export default ({ command, mode }: ConfigEnv): UserConfig =&gt; { @@ -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,7 +223,6 @@ export default {
223 this.checkPosArr.splice(0, this.checkPosArr.length) 223 this.checkPosArr.splice(0, this.checkPosArr.length)
224 this.num = 1 224 this.num = 1
225 this.getPictrue() 225 this.getPictrue()
226 - this.text = '验证失败'  
227 this.showRefresh = true 226 this.showRefresh = true
228 }, 227 },
229 228
yudao-ui-admin/src/views/login.vue
@@ -53,10 +53,10 @@ @@ -53,10 +53,10 @@
53 <el-form-item prop="mobileCode"> 53 <el-form-item prop="mobileCode">
54 <el-input v-model="loginForm.mobileCode" type="text" auto-complete="off" placeholder="短信验证码" 54 <el-input v-model="loginForm.mobileCode" type="text" auto-complete="off" placeholder="短信验证码"
55 @keyup.enter.native="handleLogin"> 55 @keyup.enter.native="handleLogin">
56 - <template slot="icon"> 56 + <template v-slot="icon">
57 <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon"/> 57 <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon"/>
58 </template> 58 </template>
59 - <template slot="append"> 59 + <template v-slot="append">
60 <span v-if="mobileCodeTimer <= 0" class="getMobileCode" @click="getSmsCode" style="cursor: pointer;">获取验证码</span> 60 <span v-if="mobileCodeTimer <= 0" class="getMobileCode" @click="getSmsCode" style="cursor: pointer;">获取验证码</span>
61 <span v-if="mobileCodeTimer > 0" class="getMobileCode">{{ mobileCodeTimer }}秒后可重新获取</span> 61 <span v-if="mobileCodeTimer > 0" class="getMobileCode">{{ mobileCodeTimer }}秒后可重新获取</span>
62 </template> 62 </template>
@@ -115,6 +115,7 @@ import { @@ -115,6 +115,7 @@ import {
115 } from "@/utils/auth"; 115 } from "@/utils/auth";
116 116
117 import Verify from '@/components/Verifition/Verify'; 117 import Verify from '@/components/Verifition/Verify';
  118 +import {resetUserPwd} from "@/api/system/user";
118 119
119 export default { 120 export default {
120 name: "Login", 121 name: "Login",
@@ -254,19 +255,40 @@ export default { @@ -254,19 +255,40 @@ export default {
254 } 255 }
255 }); 256 });
256 }, 257 },
257 - doSocialLogin(socialTypeEnum) { 258 + async doSocialLogin(socialTypeEnum) {
258 // 设置登录中 259 // 设置登录中
259 this.loading = true; 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 getSmsCode() { 294 getSmsCode() {