Commit 1c0d8fc1eb7da8cf87e2f6fdfdae14a3293359f8

Authored by xingyu
2 parents d6fdd924 b4b23596

Merge remote-tracking branch 'origin/dev' into feature/springdoc

# Conflicts:
#	yudao-dependencies/pom.xml
#	yudao-framework/yudao-spring-boot-starter-web/pom.xml
#	yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/swagger/config/YudaoSwaggerAutoConfiguration.java
#	yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/swagger/core/SpringFoxHandlerProviderBeanPostProcessor.java
#	yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/captcha/CaptchaController.java
Showing 117 changed files with 2762 additions and 2558 deletions
README.md
@@ -191,19 +191,19 @@ ps:核心功能已经实现,正在对接微信小程序中... @@ -191,19 +191,19 @@ ps:核心功能已经实现,正在对接微信小程序中...
191 | [Spring Boot](https://spring.io/projects/spring-boot) | 应用开发框架 | 2.7.7 | [文档](https://github.com/YunaiV/SpringBoot-Labs) | 191 | [Spring Boot](https://spring.io/projects/spring-boot) | 应用开发框架 | 2.7.7 | [文档](https://github.com/YunaiV/SpringBoot-Labs) |
192 | [MySQL](https://www.mysql.com/cn/) | 数据库服务器 | 5.7 / 8.0+ | | 192 | [MySQL](https://www.mysql.com/cn/) | 数据库服务器 | 5.7 / 8.0+ | |
193 | [Druid](https://github.com/alibaba/druid) | JDBC 连接池、监控组件 | 1.2.15 | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) | 193 | [Druid](https://github.com/alibaba/druid) | JDBC 连接池、监控组件 | 1.2.15 | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) |
194 -| [MyBatis Plus](https://mp.baomidou.com/) | MyBatis 增强工具包 | 3.5.3 | [文档](http://www.iocoder.cn/Spring-Boot/MyBatis/?yudao) | 194 +| [MyBatis Plus](https://mp.baomidou.com/) | MyBatis 增强工具包 | 3.5.3.1 | [文档](http://www.iocoder.cn/Spring-Boot/MyBatis/?yudao) |
195 | [Dynamic Datasource](https://dynamic-datasource.com/) | 动态数据源 | 3.6.1 | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) | 195 | [Dynamic Datasource](https://dynamic-datasource.com/) | 动态数据源 | 3.6.1 | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) |
196 | [Redis](https://redis.io/) | key-value 数据库 | 5.0 / 6.0 | | 196 | [Redis](https://redis.io/) | key-value 数据库 | 5.0 / 6.0 | |
197 | [Redisson](https://github.com/redisson/redisson) | Redis 客户端 | 3.18.0 | [文档](http://www.iocoder.cn/Spring-Boot/Redis/?yudao) | 197 | [Redisson](https://github.com/redisson/redisson) | Redis 客户端 | 3.18.0 | [文档](http://www.iocoder.cn/Spring-Boot/Redis/?yudao) |
198 | [Spring MVC](https://github.com/spring-projects/spring-framework/tree/master/spring-webmvc) | MVC 框架 | 5.3.24 | [文档](http://www.iocoder.cn/SpringMVC/MVC/?yudao) | 198 | [Spring MVC](https://github.com/spring-projects/spring-framework/tree/master/spring-webmvc) | MVC 框架 | 5.3.24 | [文档](http://www.iocoder.cn/SpringMVC/MVC/?yudao) |
199 -| [Spring Security](https://github.com/spring-projects/spring-security) | Spring 安全框架 | 5.7.5 | [文档](http://www.iocoder.cn/Spring-Boot/Spring-Security/?yudao) | 199 +| [Spring Security](https://github.com/spring-projects/spring-security) | Spring 安全框架 | 5.7.6 | [文档](http://www.iocoder.cn/Spring-Boot/Spring-Security/?yudao) |
200 | [Hibernate Validator](https://github.com/hibernate/hibernate-validator) | 参数校验组件 | 6.2.5 | [文档](http://www.iocoder.cn/Spring-Boot/Validation/?yudao) | 200 | [Hibernate Validator](https://github.com/hibernate/hibernate-validator) | 参数校验组件 | 6.2.5 | [文档](http://www.iocoder.cn/Spring-Boot/Validation/?yudao) |
201 | [Flowable](https://github.com/flowable/flowable-engine) | 工作流引擎 | 6.8.0 | [文档](https://doc.iocoder.cn/bpm/) | 201 | [Flowable](https://github.com/flowable/flowable-engine) | 工作流引擎 | 6.8.0 | [文档](https://doc.iocoder.cn/bpm/) |
202 | [Quartz](https://github.com/quartz-scheduler) | 任务调度组件 | 2.3.2 | [文档](http://www.iocoder.cn/Spring-Boot/Job/?yudao) | 202 | [Quartz](https://github.com/quartz-scheduler) | 任务调度组件 | 2.3.2 | [文档](http://www.iocoder.cn/Spring-Boot/Job/?yudao) |
203 | [Knife4j](https://gitee.com/xiaoym/knife4j) | Swagger 增强 UI 实现 | 4.0.0 | [文档](http://www.iocoder.cn/Spring-Boot/Swagger/?yudao) | 203 | [Knife4j](https://gitee.com/xiaoym/knife4j) | Swagger 增强 UI 实现 | 4.0.0 | [文档](http://www.iocoder.cn/Spring-Boot/Swagger/?yudao) |
204 | [Resilience4j](https://github.com/resilience4j/resilience4j) | 服务保障组件 | 1.7.1 | [文档](http://www.iocoder.cn/Spring-Boot/Resilience4j/?yudao) | 204 | [Resilience4j](https://github.com/resilience4j/resilience4j) | 服务保障组件 | 1.7.1 | [文档](http://www.iocoder.cn/Spring-Boot/Resilience4j/?yudao) |
205 | [SkyWalking](https://skywalking.apache.org/) | 分布式应用追踪系统 | 8.12.0 | [文档](http://www.iocoder.cn/Spring-Boot/SkyWalking/?yudao) | 205 | [SkyWalking](https://skywalking.apache.org/) | 分布式应用追踪系统 | 8.12.0 | [文档](http://www.iocoder.cn/Spring-Boot/SkyWalking/?yudao) |
206 -| [Spring Boot Admin](https://github.com/codecentric/spring-boot-admin) | Spring Boot 监控平台 | 2.7.9 | [文档](http://www.iocoder.cn/Spring-Boot/Admin/?yudao) | 206 +| [Spring Boot Admin](https://github.com/codecentric/spring-boot-admin) | Spring Boot 监控平台 | 2.7.10 | [文档](http://www.iocoder.cn/Spring-Boot/Admin/?yudao) |
207 | [Jackson](https://github.com/FasterXML/jackson) | JSON 工具库 | 2.13.3 | | 207 | [Jackson](https://github.com/FasterXML/jackson) | JSON 工具库 | 2.13.3 | |
208 | [MapStruct](https://mapstruct.org/) | Java Bean 转换 | 1.5.3.Final | [文档](http://www.iocoder.cn/Spring-Boot/MapStruct/?yudao) | 208 | [MapStruct](https://mapstruct.org/) | Java Bean 转换 | 1.5.3.Final | [文档](http://www.iocoder.cn/Spring-Boot/MapStruct/?yudao) |
209 | [Lombok](https://projectlombok.org/) | 消除冗长的 Java 代码 | 1.18.24 | [文档](http://www.iocoder.cn/Spring-Boot/Lombok/?yudao) | 209 | [Lombok](https://projectlombok.org/) | 消除冗长的 Java 代码 | 1.18.24 | [文档](http://www.iocoder.cn/Spring-Boot/Lombok/?yudao) |
@@ -227,7 +227,7 @@ ps:核心功能已经实现,正在对接微信小程序中... @@ -227,7 +227,7 @@ ps:核心功能已经实现,正在对接微信小程序中...
227 | [TypeScript](https://www.typescriptlang.org/docs/) | TypeScript | 4.9.4 | 227 | [TypeScript](https://www.typescriptlang.org/docs/) | TypeScript | 4.9.4 |
228 | [pinia](https://pinia.vuejs.org/) | vuex5 | 2.0.28 | 228 | [pinia](https://pinia.vuejs.org/) | vuex5 | 2.0.28 |
229 | [vue-i18n](https://kazupon.github.io/vue-i18n/zh/introduction.html/) | 国际化 | 9.2.2 | 229 | [vue-i18n](https://kazupon.github.io/vue-i18n/zh/introduction.html/) | 国际化 | 9.2.2 |
230 -| [vxe-table](https://vxetable.cn/) | vue最强表单 | 4.3.7 | 230 +| [vxe-table](https://vxetable.cn/) | vue最强表单 | 4.3.9 |
231 231
232 ### [管理后台 uni-app 跨端](./yudao-ui-admin-uniapp) 232 ### [管理后台 uni-app 跨端](./yudao-ui-admin-uniapp)
233 233
@@ -29,15 +29,16 @@ @@ -29,15 +29,16 @@
29 <url>https://github.com/YunaiV/ruoyi-vue-pro</url> 29 <url>https://github.com/YunaiV/ruoyi-vue-pro</url>
30 30
31 <properties> 31 <properties>
32 - <revision>1.6.5-snapshot</revision> 32 + <revision>1.6.6-snapshot</revision>
33 <!-- Maven 相关 --> 33 <!-- Maven 相关 -->
34 <java.version>1.8</java.version> 34 <java.version>1.8</java.version>
35 <maven.compiler.source>${java.version}</maven.compiler.source> 35 <maven.compiler.source>${java.version}</maven.compiler.source>
36 <maven.compiler.target>${java.version}</maven.compiler.target> 36 <maven.compiler.target>${java.version}</maven.compiler.target>
37 <maven-surefire-plugin.version>3.0.0-M5</maven-surefire-plugin.version> 37 <maven-surefire-plugin.version>3.0.0-M5</maven-surefire-plugin.version>
38 - <maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version> 38 + <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
39 <!-- 看看咋放到 bom 里 --> 39 <!-- 看看咋放到 bom 里 -->
40 <lombok.version>1.18.24</lombok.version> 40 <lombok.version>1.18.24</lombok.version>
  41 + <spring.boot.version>2.7.7</spring.boot.version>
41 <mapstruct.version>1.5.3.Final</mapstruct.version> 42 <mapstruct.version>1.5.3.Final</mapstruct.version>
42 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 43 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
43 </properties> 44 </properties>
@@ -64,7 +65,8 @@ @@ -64,7 +65,8 @@
64 <artifactId>maven-surefire-plugin</artifactId> 65 <artifactId>maven-surefire-plugin</artifactId>
65 <version>${maven-surefire-plugin.version}</version> 66 <version>${maven-surefire-plugin.version}</version>
66 </plugin> 67 </plugin>
67 - <!-- maven-compiler-plugin 插件,解决 Lombok + MapStruct 组合 --> 68 + <!-- maven-compiler-plugin 插件,解决 spring-boot-configuration-processor + Lombok + MapStruct 组合 -->
  69 + <!-- https://stackoverflow.com/questions/33483697/re-run-spring-boot-configuration-annotation-processor-to-update-generated-metada -->
68 <plugin> 70 <plugin>
69 <groupId>org.apache.maven.plugins</groupId> 71 <groupId>org.apache.maven.plugins</groupId>
70 <artifactId>maven-compiler-plugin</artifactId> 72 <artifactId>maven-compiler-plugin</artifactId>
@@ -72,6 +74,11 @@ @@ -72,6 +74,11 @@
72 <configuration> 74 <configuration>
73 <annotationProcessorPaths> 75 <annotationProcessorPaths>
74 <path> 76 <path>
  77 + <groupId>org.springframework.boot</groupId>
  78 + <artifactId>spring-boot-configuration-processor</artifactId>
  79 + <version>${spring.boot.version}</version>
  80 + </path>
  81 + <path>
75 <groupId>org.projectlombok</groupId> 82 <groupId>org.projectlombok</groupId>
76 <artifactId>lombok</artifactId> 83 <artifactId>lombok</artifactId>
77 <version>${lombok.version}</version> 84 <version>${lombok.version}</version>
sql/mysql/optional/vue3-menu.sql
@@ -262,5 +262,6 @@ INSERT INTO `system_menu` VALUES (1266, &#39;客户端更新&#39;, &#39;system:oauth2-client @@ -262,5 +262,6 @@ INSERT INTO `system_menu` VALUES (1266, &#39;客户端更新&#39;, &#39;system:oauth2-client
262 INSERT INTO `system_menu` VALUES (1267, '客户端删除', 'system:oauth2-client:delete', 3, 4, 1263, '', '', '', 0, b'1', b'1', '', '2022-05-10 16:26:33', '1', '2022-05-11 00:31:33', b'0'); 262 INSERT INTO `system_menu` VALUES (1267, '客户端删除', 'system:oauth2-client:delete', 3, 4, 1263, '', '', '', 0, b'1', b'1', '', '2022-05-10 16:26:33', '1', '2022-05-11 00:31:33', b'0');
263 INSERT INTO `system_menu` VALUES (1281, '可视化报表', '', 1, 12, 0, '/visualization', 'ep:histogram', NULL, 0, b'1', b'1', '1', '2022-07-10 20:22:15', '1', '2022-07-10 20:33:30', b'0'); 263 INSERT INTO `system_menu` VALUES (1281, '可视化报表', '', 1, 12, 0, '/visualization', 'ep:histogram', NULL, 0, b'1', b'1', '1', '2022-07-10 20:22:15', '1', '2022-07-10 20:33:30', b'0');
264 INSERT INTO `system_menu` VALUES (1282, '积木报表', '', 2, 1, 1281, 'jimu-report', 'ep:histogram', 'visualization/jmreport/index', 0, b'1', b'1', '1', '2022-07-10 20:26:36', '1', '2022-07-28 21:17:34', b'0'); 264 INSERT INTO `system_menu` VALUES (1282, '积木报表', '', 2, 1, 1281, 'jimu-report', 'ep:histogram', 'visualization/jmreport/index', 0, b'1', b'1', '1', '2022-07-10 20:26:36', '1', '2022-07-28 21:17:34', b'0');
  265 +INSERT INTO `system_menu` VALUES (1283, 'webSocket连接', '', 2, 14, 2, 'webSocket', 'ep:turn-off', 'infra/webSocket/index', 0, b'1', b'1', '1', '2023-01-01 11:43:04', '1', '2023-01-01 11:43:04', b'0');
265 266
266 SET FOREIGN_KEY_CHECKS = 1; 267 SET FOREIGN_KEY_CHECKS = 1;
sql/mysql/ruoyi-vue-pro.sql
@@ -1710,6 +1710,8 @@ INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_i @@ -1710,6 +1710,8 @@ INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_i
1710 INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `visible`, `keep_alive`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1267, '客户端删除', 'system:oauth2-client:delete', 3, 4, 1263, '', '', '', 0, b'1', b'1', '', '2022-05-10 16:26:33', '1', '2022-05-11 00:31:33', b'0'); 1710 INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `visible`, `keep_alive`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1267, '客户端删除', 'system:oauth2-client:delete', 3, 4, 1263, '', '', '', 0, b'1', b'1', '', '2022-05-10 16:26:33', '1', '2022-05-11 00:31:33', b'0');
1711 INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `visible`, `keep_alive`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1281, '可视化报表', '', 1, 12, 0, '/visualization', 'chart', NULL, 0, b'1', b'1', '1', '2022-07-10 20:22:15', '1', '2022-07-10 20:33:30', b'0'); 1711 INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `visible`, `keep_alive`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1281, '可视化报表', '', 1, 12, 0, '/visualization', 'chart', NULL, 0, b'1', b'1', '1', '2022-07-10 20:22:15', '1', '2022-07-10 20:33:30', b'0');
1712 INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `visible`, `keep_alive`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1282, '积木报表', '', 2, 1, 1281, 'jimu-report', 'example', 'visualization/jmreport/index', 0, b'1', b'1', '1', '2022-07-10 20:26:36', '1', '2022-07-28 21:17:34', b'0'); 1712 INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `visible`, `keep_alive`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1282, '积木报表', '', 2, 1, 1281, 'jimu-report', 'example', 'visualization/jmreport/index', 0, b'1', b'1', '1', '2022-07-10 20:26:36', '1', '2022-07-28 21:17:34', b'0');
  1713 +INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `visible`, `keep_alive`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1283, 'webSocket连接', '', 2, 14, 2, 'webSocket', 'message', 'infra/webSocket/index', 0, b'1', b'1', '1', '2023-01-01 11:43:04', '1', '2023-01-01 11:43:04', b'0');
  1714 +
1713 COMMIT; 1715 COMMIT;
1714 1716
1715 -- ---------------------------- 1717 -- ----------------------------
sql/optional/visualization/jimureport.mysql5.7.create.sql
@@ -1344,6 +1344,7 @@ CREATE TABLE `jimu_report_share` ( @@ -1344,6 +1344,7 @@ CREATE TABLE `jimu_report_share` (
1344 `last_update_time` datetime NULL DEFAULT NULL COMMENT '最后更新时间', 1344 `last_update_time` datetime NULL DEFAULT NULL COMMENT '最后更新时间',
1345 `term_of_validity` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '有效期(0:永久有效,1:1天,2:7天)', 1345 `term_of_validity` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '有效期(0:永久有效,1:1天,2:7天)',
1346 `status` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否过期(0未过期,1已过期)', 1346 `status` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否过期(0未过期,1已过期)',
  1347 + `preview_lock_status` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '密码锁状态',
1347 PRIMARY KEY (`id`) USING BTREE 1348 PRIMARY KEY (`id`) USING BTREE
1348 ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '积木报表预览权限表' ROW_FORMAT = Dynamic; 1349 ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '积木报表预览权限表' ROW_FORMAT = Dynamic;
1349 1350
yudao-dependencies/pom.xml
@@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
14 <url>https://github.com/YunaiV/ruoyi-vue-pro</url> 14 <url>https://github.com/YunaiV/ruoyi-vue-pro</url>
15 15
16 <properties> 16 <properties>
17 - <revision>1.6.5-snapshot</revision> 17 + <revision>1.6.6-snapshot</revision>
18 <!-- 统一依赖管理 --> 18 <!-- 统一依赖管理 -->
19 <spring.boot.version>2.7.7</spring.boot.version> 19 <spring.boot.version>2.7.7</spring.boot.version>
20 <!-- Web 相关 --> 20 <!-- Web 相关 -->
@@ -23,8 +23,8 @@ @@ -23,8 +23,8 @@
23 <servlet.versoin>2.5</servlet.versoin> 23 <servlet.versoin>2.5</servlet.versoin>
24 <!-- DB 相关 --> 24 <!-- DB 相关 -->
25 <druid.version>1.2.15</druid.version> 25 <druid.version>1.2.15</druid.version>
26 - <mybatis-plus.version>3.5.3</mybatis-plus.version>  
27 - <mybatis-plus-generator.version>3.5.2</mybatis-plus-generator.version> 26 + <mybatis-plus.version>3.5.3.1</mybatis-plus.version>
  27 + <mybatis-plus-generator.version>3.5.3.1</mybatis-plus-generator.version>
28 <dynamic-datasource.version>3.6.1</dynamic-datasource.version> 28 <dynamic-datasource.version>3.6.1</dynamic-datasource.version>
29 <redisson.version>3.18.0</redisson.version> 29 <redisson.version>3.18.0</redisson.version>
30 <!-- 服务保障相关 --> 30 <!-- 服务保障相关 -->
@@ -32,7 +32,7 @@ @@ -32,7 +32,7 @@
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.9</spring-boot-admin.version> 35 + <spring-boot-admin.version>2.7.10</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.11.RELEASE</podam.version> 38 <podam.version>7.2.11.RELEASE</podam.version>
@@ -41,10 +41,12 @@ @@ -41,10 +41,12 @@
41 <!-- Bpm 工作流相关 --> 41 <!-- Bpm 工作流相关 -->
42 <flowable.version>6.8.0</flowable.version> 42 <flowable.version>6.8.0</flowable.version>
43 <!-- 工具类相关 --> 43 <!-- 工具类相关 -->
  44 + <captcha-plus.version>1.0.0</captcha-plus.version>
  45 + <jsoup.version>1.15.3</jsoup.version>
44 <lombok.version>1.18.24</lombok.version> 46 <lombok.version>1.18.24</lombok.version>
45 <mapstruct.version>1.5.3.Final</mapstruct.version> 47 <mapstruct.version>1.5.3.Final</mapstruct.version>
46 <hutool.version>5.8.11</hutool.version> 48 <hutool.version>5.8.11</hutool.version>
47 - <easyexcel.verion>3.1.4</easyexcel.verion> 49 + <easyexcel.verion>3.1.5</easyexcel.verion>
48 <velocity.version>2.3</velocity.version> 50 <velocity.version>2.3</velocity.version>
49 <screw.version>1.0.5</screw.version> 51 <screw.version>1.0.5</screw.version>
50 <fastjson.version>1.2.83</fastjson.version> 52 <fastjson.version>1.2.83</fastjson.version>
@@ -54,16 +56,15 @@ @@ -54,16 +56,15 @@
54 <commons-net.version>3.8.0</commons-net.version> 56 <commons-net.version>3.8.0</commons-net.version>
55 <jsch.version>0.1.55</jsch.version> 57 <jsch.version>0.1.55</jsch.version>
56 <tika-core.version>2.6.0</tika-core.version> 58 <tika-core.version>2.6.0</tika-core.version>
57 - <aj-captcha.version>1.3.0</aj-captcha.version>  
58 <netty-all.version>4.1.86.Final</netty-all.version> 59 <netty-all.version>4.1.86.Final</netty-all.version>
59 <ip2region.version>2.6.6</ip2region.version> 60 <ip2region.version>2.6.6</ip2region.version>
60 <!-- 三方云服务相关 --> 61 <!-- 三方云服务相关 -->
61 <okio.version>3.0.0</okio.version> 62 <okio.version>3.0.0</okio.version>
62 <okhttp3.version>4.10.0</okhttp3.version> 63 <okhttp3.version>4.10.0</okhttp3.version>
63 - <minio.version>8.4.6</minio.version> 64 + <minio.version>8.5.1</minio.version>
64 <aliyun-java-sdk-core.version>4.6.3</aliyun-java-sdk-core.version> 65 <aliyun-java-sdk-core.version>4.6.3</aliyun-java-sdk-core.version>
65 <aliyun-java-sdk-dysmsapi.version>2.2.1</aliyun-java-sdk-dysmsapi.version> 66 <aliyun-java-sdk-dysmsapi.version>2.2.1</aliyun-java-sdk-dysmsapi.version>
66 - <tencentcloud-sdk-java.version>3.1.660</tencentcloud-sdk-java.version> 67 + <tencentcloud-sdk-java.version>3.1.676</tencentcloud-sdk-java.version>
67 <justauth.version>1.4.0</justauth.version> 68 <justauth.version>1.4.0</justauth.version>
68 <jimureport.version>1.5.6</jimureport.version> 69 <jimureport.version>1.5.6</jimureport.version>
69 <xercesImpl.version>2.12.2</xercesImpl.version> 70 <xercesImpl.version>2.12.2</xercesImpl.version>
@@ -440,12 +441,6 @@ @@ -440,12 +441,6 @@
440 </dependency> 441 </dependency>
441 442
442 <dependency> 443 <dependency>
443 - <groupId>com.anji-plus</groupId>  
444 - <artifactId>spring-boot-starter-captcha</artifactId>  
445 - <version>${aj-captcha.version}</version>  
446 - </dependency>  
447 -  
448 - <dependency>  
449 <groupId>org.apache.velocity</groupId> 444 <groupId>org.apache.velocity</groupId>
450 <artifactId>velocity-engine-core</artifactId> 445 <artifactId>velocity-engine-core</artifactId>
451 <version>${velocity.version}</version> 446 <version>${velocity.version}</version>
@@ -510,11 +505,23 @@ @@ -510,11 +505,23 @@
510 </dependency> 505 </dependency>
511 506
512 <dependency> 507 <dependency>
  508 + <groupId>com.xingyuv</groupId>
  509 + <artifactId>spring-boot-starter-captcha-plus</artifactId>
  510 + <version>${captcha-plus.version}</version>
  511 + </dependency>
  512 +
  513 + <dependency>
513 <groupId>org.lionsoul</groupId> 514 <groupId>org.lionsoul</groupId>
514 <artifactId>ip2region</artifactId> 515 <artifactId>ip2region</artifactId>
515 <version>${ip2region.version}</version> 516 <version>${ip2region.version}</version>
516 </dependency> 517 </dependency>
517 518
  519 + <dependency>
  520 + <groupId>org.jsoup</groupId>
  521 + <artifactId>jsoup</artifactId>
  522 + <version>${jsoup.version}</version>
  523 + </dependency>
  524 +
518 <!-- 三方云服务相关 --> 525 <!-- 三方云服务相关 -->
519 <dependency> 526 <dependency>
520 <groupId>com.squareup.okio</groupId> 527 <groupId>com.squareup.okio</groupId>
@@ -588,6 +595,12 @@ @@ -588,6 +595,12 @@
588 <artifactId>xercesImpl</artifactId> 595 <artifactId>xercesImpl</artifactId>
589 <version>${xercesImpl.version}</version> 596 <version>${xercesImpl.version}</version>
590 </dependency> 597 </dependency>
  598 + <!-- SpringBoot Websocket -->
  599 + <dependency>
  600 + <groupId>org.springframework.boot</groupId>
  601 + <artifactId>spring-boot-starter-websocket</artifactId>
  602 + <version>${spring.boot.version}</version>
  603 + </dependency>
591 </dependencies> 604 </dependencies>
592 </dependencyManagement> 605 </dependencyManagement>
593 606
yudao-framework/pom.xml
@@ -40,6 +40,7 @@ @@ -40,6 +40,7 @@
40 40
41 <module>yudao-spring-boot-starter-flowable</module> 41 <module>yudao-spring-boot-starter-flowable</module>
42 <module>yudao-spring-boot-starter-captcha</module> 42 <module>yudao-spring-boot-starter-captcha</module>
  43 + <module>yudao-spring-boot-starter-websocket</module>
43 </modules> 44 </modules>
44 45
45 <artifactId>yudao-framework</artifactId> 46 <artifactId>yudao-framework</artifactId>
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/validation/ValidationUtils.java
1 package cn.iocoder.yudao.framework.common.util.validation; 1 package cn.iocoder.yudao.framework.common.util.validation;
2 2
3 import cn.hutool.core.collection.CollUtil; 3 import cn.hutool.core.collection.CollUtil;
4 -import cn.hutool.core.util.StrUtil;  
5 import org.springframework.util.StringUtils; 4 import org.springframework.util.StringUtils;
6 5
7 import javax.validation.ConstraintViolation; 6 import javax.validation.ConstraintViolation;
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.35.9.ALL</version> 55 + <version>4.35.32.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-captcha/pom.xml
@@ -17,6 +17,10 @@ @@ -17,6 +17,10 @@
17 </description> 17 </description>
18 18
19 <dependencies> 19 <dependencies>
  20 + <dependency>
  21 + <groupId>com.xingyuv</groupId>
  22 + <artifactId>spring-boot-starter-captcha-plus</artifactId>
  23 + </dependency>
20 <!-- Spring 核心 --> 24 <!-- Spring 核心 -->
21 <dependency> 25 <dependency>
22 <groupId>org.springframework.boot</groupId> 26 <groupId>org.springframework.boot</groupId>
@@ -29,11 +33,6 @@ @@ -29,11 +33,6 @@
29 <artifactId>yudao-spring-boot-starter-redis</artifactId> 33 <artifactId>yudao-spring-boot-starter-redis</artifactId>
30 </dependency> 34 </dependency>
31 35
32 - <!-- 验证码相关 -->  
33 - <dependency>  
34 - <groupId>com.anji-plus</groupId>  
35 - <artifactId>spring-boot-starter-captcha</artifactId>  
36 - </dependency>  
37 </dependencies> 36 </dependencies>
38 37
39 </project> 38 </project>
yudao-framework/yudao-spring-boot-starter-captcha/src/main/java/cn/iocoder/yudao/framework/captcha/core/enums/CaptchaRedisKeyConstants.java
@@ -2,12 +2,9 @@ package cn.iocoder.yudao.framework.captcha.core.enums; @@ -2,12 +2,9 @@ package cn.iocoder.yudao.framework.captcha.core.enums;
2 2
3 import cn.iocoder.yudao.framework.redis.core.RedisKeyDefine; 3 import cn.iocoder.yudao.framework.redis.core.RedisKeyDefine;
4 import com.anji.captcha.model.vo.PointVO; 4 import com.anji.captcha.model.vo.PointVO;
5 -import org.redisson.api.RLock;  
6 5
7 import java.time.Duration; 6 import java.time.Duration;
8 -import java.util.Map;  
9 7
10 -import static cn.iocoder.yudao.framework.redis.core.RedisKeyDefine.KeyTypeEnum.HASH;  
11 import static cn.iocoder.yudao.framework.redis.core.RedisKeyDefine.KeyTypeEnum.STRING; 8 import static cn.iocoder.yudao.framework.redis.core.RedisKeyDefine.KeyTypeEnum.STRING;
12 9
13 /** 10 /**
yudao-framework/yudao-spring-boot-starter-captcha/src/main/java/cn/iocoder/yudao/framework/captcha/core/service/RedisCaptchaServiceImpl.java
@@ -3,7 +3,6 @@ package cn.iocoder.yudao.framework.captcha.core.service; @@ -3,7 +3,6 @@ package cn.iocoder.yudao.framework.captcha.core.service;
3 import com.anji.captcha.service.CaptchaCacheService; 3 import com.anji.captcha.service.CaptchaCacheService;
4 import lombok.AllArgsConstructor; 4 import lombok.AllArgsConstructor;
5 import lombok.NoArgsConstructor; 5 import lombok.NoArgsConstructor;
6 -import lombok.RequiredArgsConstructor;  
7 import org.springframework.data.redis.core.StringRedisTemplate; 6 import org.springframework.data.redis.core.StringRedisTemplate;
8 7
9 import javax.annotation.Resource; 8 import javax.annotation.Resource;
yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java
@@ -2,7 +2,6 @@ package cn.iocoder.yudao.framework.mybatis.core.mapper; @@ -2,7 +2,6 @@ package cn.iocoder.yudao.framework.mybatis.core.mapper;
2 2
3 import cn.iocoder.yudao.framework.common.pojo.PageParam; 3 import cn.iocoder.yudao.framework.common.pojo.PageParam;
4 import cn.iocoder.yudao.framework.common.pojo.PageResult; 4 import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;  
6 import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils; 5 import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
7 import com.baomidou.mybatisplus.core.conditions.Wrapper; 6 import com.baomidou.mybatisplus.core.conditions.Wrapper;
8 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 7 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -10,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -10,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
10 import com.baomidou.mybatisplus.core.mapper.BaseMapper; 9 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
11 import com.baomidou.mybatisplus.core.metadata.IPage; 10 import com.baomidou.mybatisplus.core.metadata.IPage;
12 import com.baomidou.mybatisplus.core.toolkit.support.SFunction; 11 import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
  12 +import com.baomidou.mybatisplus.extension.toolkit.Db;
13 import org.apache.ibatis.annotations.Param; 13 import org.apache.ibatis.annotations.Param;
14 14
15 import java.util.Collection; 15 import java.util.Collection;
@@ -92,8 +92,22 @@ public interface BaseMapperX&lt;T&gt; extends BaseMapper&lt;T&gt; { @@ -92,8 +92,22 @@ public interface BaseMapperX&lt;T&gt; extends BaseMapper&lt;T&gt; {
92 entities.forEach(this::insert); 92 entities.forEach(this::insert);
93 } 93 }
94 94
  95 + /**
  96 + * 批量插入,适合大量数据插入
  97 + *
  98 + * @param entities 实体们
  99 + * @param size 插入数量 Db.saveBatch 默认为1000
  100 + */
  101 + default void insertBatch(Collection<T> entities, int size) {
  102 + Db.saveBatch(entities, size);
  103 + }
  104 +
95 default void updateBatch(T update) { 105 default void updateBatch(T update) {
96 update(update, new QueryWrapper<>()); 106 update(update, new QueryWrapper<>());
97 } 107 }
98 108
  109 + default void updateBatch(Collection<T> entities, int size) {
  110 + Db.updateBatchById(entities, size);
  111 + }
  112 +
99 } 113 }
yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java
@@ -129,6 +129,8 @@ public class YudaoWebSecurityConfigurerAdapter { @@ -129,6 +129,8 @@ public class YudaoWebSecurityConfigurerAdapter {
129 .antMatchers(buildAppApi("/**")).permitAll() 129 .antMatchers(buildAppApi("/**")).permitAll()
130 // 1.5 验证码captcha 允许匿名访问 130 // 1.5 验证码captcha 允许匿名访问
131 .antMatchers("/captcha/get", "/captcha/check").permitAll() 131 .antMatchers("/captcha/get", "/captcha/check").permitAll()
  132 + // 1.6 webSocket 允许匿名访问
  133 + .antMatchers("/websocket/message").permitAll()
132 // ②:每个项目的自定义规则 134 // ②:每个项目的自定义规则
133 .and().authorizeRequests(registry -> // 下面,循环设置自定义规则 135 .and().authorizeRequests(registry -> // 下面,循环设置自定义规则
134 authorizeRequestsCustomizers.forEach(customizer -> customizer.customize(registry))) 136 authorizeRequestsCustomizers.forEach(customizer -> customizer.customize(registry)))
yudao-framework/yudao-spring-boot-starter-web/pom.xml
@@ -68,6 +68,12 @@ @@ -68,6 +68,12 @@
68 <scope>provided</scope> <!-- 设置为 provided,主要是 GlobalExceptionHandler 使用 --> 68 <scope>provided</scope> <!-- 设置为 provided,主要是 GlobalExceptionHandler 使用 -->
69 </dependency> 69 </dependency>
70 70
  71 + <!-- xss -->
  72 + <dependency>
  73 + <groupId>org.jsoup</groupId>
  74 + <artifactId>jsoup</artifactId>
  75 + </dependency>
  76 +
71 </dependencies> 77 </dependencies>
72 78
73 </project> 79 </project>
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/config/YudaoWebAutoConfiguration.java
@@ -2,15 +2,22 @@ package cn.iocoder.yudao.framework.web.config; @@ -2,15 +2,22 @@ package cn.iocoder.yudao.framework.web.config;
2 2
3 import cn.iocoder.yudao.framework.apilog.core.service.ApiErrorLogFrameworkService; 3 import cn.iocoder.yudao.framework.apilog.core.service.ApiErrorLogFrameworkService;
4 import cn.iocoder.yudao.framework.common.enums.WebFilterOrderEnum; 4 import cn.iocoder.yudao.framework.common.enums.WebFilterOrderEnum;
  5 +import cn.iocoder.yudao.framework.web.core.clean.JsoupXssCleaner;
  6 +import cn.iocoder.yudao.framework.web.core.clean.XssCleaner;
5 import cn.iocoder.yudao.framework.web.core.filter.CacheRequestBodyFilter; 7 import cn.iocoder.yudao.framework.web.core.filter.CacheRequestBodyFilter;
6 import cn.iocoder.yudao.framework.web.core.filter.DemoFilter; 8 import cn.iocoder.yudao.framework.web.core.filter.DemoFilter;
7 import cn.iocoder.yudao.framework.web.core.filter.XssFilter; 9 import cn.iocoder.yudao.framework.web.core.filter.XssFilter;
8 import cn.iocoder.yudao.framework.web.core.handler.GlobalExceptionHandler; 10 import cn.iocoder.yudao.framework.web.core.handler.GlobalExceptionHandler;
9 import cn.iocoder.yudao.framework.web.core.handler.GlobalResponseBodyHandler; 11 import cn.iocoder.yudao.framework.web.core.handler.GlobalResponseBodyHandler;
  12 +import cn.iocoder.yudao.framework.web.core.json.XssStringJsonDeserializer;
10 import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils; 13 import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
  14 +import com.fasterxml.jackson.databind.ObjectMapper;
11 import org.springframework.beans.factory.annotation.Value; 15 import org.springframework.beans.factory.annotation.Value;
12 import org.springframework.boot.autoconfigure.AutoConfiguration; 16 import org.springframework.boot.autoconfigure.AutoConfiguration;
  17 +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
  18 +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
13 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 19 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
  20 +import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
14 import org.springframework.boot.context.properties.EnableConfigurationProperties; 21 import org.springframework.boot.context.properties.EnableConfigurationProperties;
15 import org.springframework.boot.web.servlet.FilterRegistrationBean; 22 import org.springframework.boot.web.servlet.FilterRegistrationBean;
16 import org.springframework.context.annotation.Bean; 23 import org.springframework.context.annotation.Bean;
@@ -48,7 +55,7 @@ public class YudaoWebAutoConfiguration implements WebMvcConfigurer { @@ -48,7 +55,7 @@ public class YudaoWebAutoConfiguration implements WebMvcConfigurer {
48 * 设置 API 前缀,仅仅匹配 controller 包下的 55 * 设置 API 前缀,仅仅匹配 controller 包下的
49 * 56 *
50 * @param configurer 配置 57 * @param configurer 配置
51 - * @param api API 配置 58 + * @param api API 配置
52 */ 59 */
53 private void configurePathMatch(PathMatchConfigurer configurer, WebProperties.Api api) { 60 private void configurePathMatch(PathMatchConfigurer configurer, WebProperties.Api api) {
54 AntPathMatcher antPathMatcher = new AntPathMatcher("."); 61 AntPathMatcher antPathMatcher = new AntPathMatcher(".");
@@ -104,8 +111,9 @@ public class YudaoWebAutoConfiguration implements WebMvcConfigurer { @@ -104,8 +111,9 @@ public class YudaoWebAutoConfiguration implements WebMvcConfigurer {
104 * 创建 XssFilter Bean,解决 Xss 安全问题 111 * 创建 XssFilter Bean,解决 Xss 安全问题
105 */ 112 */
106 @Bean 113 @Bean
107 - public FilterRegistrationBean<XssFilter> xssFilter(XssProperties properties, PathMatcher pathMatcher) {  
108 - return createFilterBean(new XssFilter(properties, pathMatcher), WebFilterOrderEnum.XSS_FILTER); 114 + @ConditionalOnBean(XssCleaner.class)
  115 + public FilterRegistrationBean<XssFilter> xssFilter(XssProperties properties, PathMatcher pathMatcher, XssCleaner xssCleaner) {
  116 + return createFilterBean(new XssFilter(properties, pathMatcher, xssCleaner), WebFilterOrderEnum.XSS_FILTER);
109 } 117 }
110 118
111 /** 119 /**
@@ -117,6 +125,32 @@ public class YudaoWebAutoConfiguration implements WebMvcConfigurer { @@ -117,6 +125,32 @@ public class YudaoWebAutoConfiguration implements WebMvcConfigurer {
117 return createFilterBean(new DemoFilter(), WebFilterOrderEnum.DEMO_FILTER); 125 return createFilterBean(new DemoFilter(), WebFilterOrderEnum.DEMO_FILTER);
118 } 126 }
119 127
  128 +
  129 + /**
  130 + * Xss 清理者
  131 + *
  132 + * @return XssCleaner
  133 + */
  134 + @Bean
  135 + @ConditionalOnMissingBean(XssCleaner.class)
  136 + public XssCleaner xssCleaner() {
  137 + return new JsoupXssCleaner();
  138 + }
  139 +
  140 + /**
  141 + * 注册 Jackson 的序列化器,用于处理 json 类型参数的 xss 过滤
  142 + *
  143 + * @return Jackson2ObjectMapperBuilderCustomizer
  144 + */
  145 + @Bean
  146 + @ConditionalOnMissingBean(name = "xssJacksonCustomizer")
  147 + @ConditionalOnBean(ObjectMapper.class)
  148 + @ConditionalOnProperty(value = "yudao.xss.enable", havingValue = "true")
  149 + public Jackson2ObjectMapperBuilderCustomizer xssJacksonCustomizer(XssCleaner xssCleaner) {
  150 + // 在反序列化时进行 xss 过滤,可以替换使用 XssStringJsonSerializer,在序列化时进行处理
  151 + return builder -> builder.deserializerByType(String.class, new XssStringJsonDeserializer(xssCleaner));
  152 + }
  153 +
120 private static <T extends Filter> FilterRegistrationBean<T> createFilterBean(T filter, Integer order) { 154 private static <T extends Filter> FilterRegistrationBean<T> createFilterBean(T filter, Integer order) {
121 FilterRegistrationBean<T> bean = new FilterRegistrationBean<>(filter); 155 FilterRegistrationBean<T> bean = new FilterRegistrationBean<>(filter);
122 bean.setOrder(order); 156 bean.setOrder(order);
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/clean/JsoupXssCleaner.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.web.core.clean;
  2 +
  3 +import org.jsoup.Jsoup;
  4 +import org.jsoup.nodes.Document;
  5 +import org.jsoup.safety.Safelist;
  6 +
  7 +/**
  8 + * jsonp 过滤字符串
  9 + */
  10 +public class JsoupXssCleaner implements XssCleaner {
  11 +
  12 + private final Safelist safelist;
  13 +
  14 + /**
  15 + * 用于在 src 属性使用相对路径时,强制转换为绝对路径。 为空时不处理,值应为绝对路径的前缀(包含协议部分)
  16 + */
  17 + private final String baseUri;
  18 +
  19 + /**
  20 + * 无参构造,默认使用 {@link JsoupXssCleaner#buildSafelist} 方法构建一个安全列表
  21 + */
  22 + public JsoupXssCleaner() {
  23 + this.safelist = buildSafelist();
  24 + this.baseUri = "";
  25 + }
  26 +
  27 + public JsoupXssCleaner(Safelist safelist) {
  28 + this.safelist = safelist;
  29 + this.baseUri = "";
  30 + }
  31 +
  32 + public JsoupXssCleaner(String baseUri) {
  33 + this.safelist = buildSafelist();
  34 + this.baseUri = baseUri;
  35 + }
  36 +
  37 + public JsoupXssCleaner(Safelist safelist, String baseUri) {
  38 + this.safelist = safelist;
  39 + this.baseUri = baseUri;
  40 + }
  41 +
  42 + /**
  43 + * 构建一个 Xss 清理的 Safelist 规则。
  44 + * 基于 Safelist#relaxed() 的基础上:
  45 + * 1. 扩展支持了 style 和 class 属性
  46 + * 2. a 标签额外支持了 target 属性
  47 + * 3. img 标签额外支持了 data 协议,便于支持 base64
  48 + *
  49 + * @return Safelist
  50 + */
  51 + private Safelist buildSafelist() {
  52 + // 使用 jsoup 提供的默认的
  53 + Safelist relaxedSafelist = Safelist.relaxed();
  54 + // 富文本编辑时一些样式是使用 style 来进行实现的
  55 + // 比如红色字体 style="color:red;", 所以需要给所有标签添加 style 属性
  56 + // 注意:style 属性会有注入风险 <img STYLE="background-image:url(javascript:alert('XSS'))">
  57 + relaxedSafelist.addAttributes(":all", "style", "class");
  58 + // 保留 a 标签的 target 属性
  59 + relaxedSafelist.addAttributes("a", "target");
  60 + // 支持img 为base64
  61 + relaxedSafelist.addProtocols("img", "src", "data");
  62 +
  63 + // 保留相对路径, 保留相对路径时,必须提供对应的 baseUri 属性,否则依然会被删除
  64 + // WHITELIST.preserveRelativeLinks(false);
  65 +
  66 + // 移除 a 标签和 img 标签的一些协议限制,这会导致 xss 防注入失效,如 <img src=javascript:alert("xss")>
  67 + // 虽然可以重写 WhiteList#isSafeAttribute 来处理,但是有隐患,所以暂时不支持相对路径
  68 + // WHITELIST.removeProtocols("a", "href", "ftp", "http", "https", "mailto");
  69 + // WHITELIST.removeProtocols("img", "src", "http", "https");
  70 +
  71 + return relaxedSafelist;
  72 + }
  73 +
  74 + @Override
  75 + public String clean(String html) {
  76 + return Jsoup.clean(html, baseUri, safelist, new Document.OutputSettings().prettyPrint(false));
  77 + }
  78 +
  79 +}
  80 +
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/clean/XssCleaner.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.web.core.clean;
  2 +
  3 +/**
  4 + * 对 html 文本中的有 Xss 风险的数据进行清理
  5 + */
  6 +public interface XssCleaner {
  7 +
  8 + /**
  9 + * 清理有 Xss 风险的文本
  10 + *
  11 + * @param html 原 html
  12 + * @return 清理后的 html
  13 + */
  14 + String clean(String html);
  15 +}
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/filter/XssFilter.java
1 package cn.iocoder.yudao.framework.web.core.filter; 1 package cn.iocoder.yudao.framework.web.core.filter;
2 2
3 import cn.iocoder.yudao.framework.web.config.XssProperties; 3 import cn.iocoder.yudao.framework.web.config.XssProperties;
  4 +import cn.iocoder.yudao.framework.web.core.clean.XssCleaner;
4 import lombok.AllArgsConstructor; 5 import lombok.AllArgsConstructor;
5 import org.springframework.util.PathMatcher; 6 import org.springframework.util.PathMatcher;
6 import org.springframework.web.filter.OncePerRequestFilter; 7 import org.springframework.web.filter.OncePerRequestFilter;
@@ -13,7 +14,7 @@ import java.io.IOException; @@ -13,7 +14,7 @@ import java.io.IOException;
13 14
14 /** 15 /**
15 * Xss 过滤器 16 * Xss 过滤器
16 - * 17 + * <p>
17 * 对 Xss 不了解的胖友,可以看看 http://www.iocoder.cn/Fight/The-new-girl-asked-me-why-AJAX-requests-are-not-secure-I-did-not-answer/ 18 * 对 Xss 不了解的胖友,可以看看 http://www.iocoder.cn/Fight/The-new-girl-asked-me-why-AJAX-requests-are-not-secure-I-did-not-answer/
18 * 19 *
19 * @author 芋道源码 20 * @author 芋道源码
@@ -30,10 +31,12 @@ public class XssFilter extends OncePerRequestFilter { @@ -30,10 +31,12 @@ public class XssFilter extends OncePerRequestFilter {
30 */ 31 */
31 private final PathMatcher pathMatcher; 32 private final PathMatcher pathMatcher;
32 33
  34 + private final XssCleaner xssCleaner;
  35 +
33 @Override 36 @Override
34 protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) 37 protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
35 throws IOException, ServletException { 38 throws IOException, ServletException {
36 - filterChain.doFilter(new XssRequestWrapper(request), response); 39 + filterChain.doFilter(new XssRequestWrapper(request, xssCleaner), response);
37 } 40 }
38 41
39 @Override 42 @Override
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/filter/XssRequestWrapper.java
1 package cn.iocoder.yudao.framework.web.core.filter; 1 package cn.iocoder.yudao.framework.web.core.filter;
2 2
3 -import cn.hutool.core.collection.CollUtil;  
4 -import cn.hutool.core.io.IoUtil;  
5 -import cn.hutool.core.util.ArrayUtil;  
6 -import cn.hutool.core.util.ReflectUtil;  
7 -import cn.hutool.core.util.StrUtil;  
8 -import cn.hutool.http.HTMLFilter;  
9 -import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; 3 +import cn.iocoder.yudao.framework.web.core.clean.XssCleaner;
10 4
11 -import javax.servlet.ReadListener;  
12 -import javax.servlet.ServletInputStream;  
13 import javax.servlet.http.HttpServletRequest; 5 import javax.servlet.http.HttpServletRequest;
14 import javax.servlet.http.HttpServletRequestWrapper; 6 import javax.servlet.http.HttpServletRequestWrapper;
15 -import java.io.BufferedReader;  
16 -import java.io.ByteArrayInputStream;  
17 -import java.io.IOException;  
18 -import java.io.InputStreamReader; 7 +import java.util.LinkedHashMap;
19 import java.util.Map; 8 import java.util.Map;
20 9
21 /** 10 /**
@@ -24,113 +13,79 @@ import java.util.Map; @@ -24,113 +13,79 @@ import java.util.Map;
24 * @author 芋道源码 13 * @author 芋道源码
25 */ 14 */
26 public class XssRequestWrapper extends HttpServletRequestWrapper { 15 public class XssRequestWrapper extends HttpServletRequestWrapper {
  16 + private final XssCleaner xssCleaner;
27 17
28 - /**  
29 - * 基于线程级别的 HTMLFilter 对象,因为它线程非安全  
30 - */  
31 - private static final ThreadLocal<HTMLFilter> HTML_FILTER = ThreadLocal.withInitial(() -> {  
32 - HTMLFilter htmlFilter = new HTMLFilter();  
33 - // 反射修改 encodeQuotes 属性为 false,避免 " 被转移成 &quot; 字符  
34 - ReflectUtil.setFieldValue(htmlFilter, "encodeQuotes", false);  
35 - return htmlFilter;  
36 - });  
37 -  
38 - public XssRequestWrapper(HttpServletRequest request) { 18 + public XssRequestWrapper(HttpServletRequest request, XssCleaner xssCleaner) {
39 super(request); 19 super(request);
  20 + this.xssCleaner = xssCleaner;
40 } 21 }
41 22
42 - private static String filterXss(String content) {  
43 - if (StrUtil.isEmpty(content)) {  
44 - return content;  
45 - }  
46 - return HTML_FILTER.get().filter(content);  
47 - }  
48 -  
49 - // ========== IO 流相关 ==========  
50 - 23 + // ============================ parameter ============================
51 @Override 24 @Override
52 - public BufferedReader getReader() throws IOException {  
53 - return new BufferedReader(new InputStreamReader(this.getInputStream())); 25 + public Map<String, String[]> getParameterMap() {
  26 + Map<String, String[]> map = new LinkedHashMap<>();
  27 + Map<String, String[]> parameters = super.getParameterMap();
  28 + for (Map.Entry<String, String[]> entry : parameters.entrySet()) {
  29 + String[] values = entry.getValue();
  30 + for (int i = 0; i < values.length; i++) {
  31 + values[i] = xssCleaner.clean(values[i]);
  32 + }
  33 + map.put(entry.getKey(), values);
  34 + }
  35 + return map;
54 } 36 }
55 37
56 @Override 38 @Override
57 - public ServletInputStream getInputStream() throws IOException {  
58 - // 如果非 json 请求,不进行 Xss 处理  
59 - if (!ServletUtils.isJsonRequest(this)) {  
60 - return super.getInputStream(); 39 + public String[] getParameterValues(String name) {
  40 + String[] values = super.getParameterValues(name);
  41 + if (values == null) {
  42 + return null;
61 } 43 }
62 -  
63 - // 读取内容,并过滤  
64 - String content = IoUtil.readUtf8(super.getInputStream());  
65 - content = filterXss(content);  
66 - final ByteArrayInputStream newInputStream = new ByteArrayInputStream(content.getBytes());  
67 - // 返回 ServletInputStream  
68 - return new ServletInputStream() {  
69 -  
70 - @Override  
71 - public int read() {  
72 - return newInputStream.read();  
73 - }  
74 -  
75 - @Override  
76 - public boolean isFinished() {  
77 - return true;  
78 - }  
79 -  
80 - @Override  
81 - public boolean isReady() {  
82 - return true;  
83 - }  
84 -  
85 - @Override  
86 - public void setReadListener(ReadListener readListener) {}  
87 -  
88 - }; 44 + int count = values.length;
  45 + String[] encodedValues = new String[count];
  46 + for (int i = 0; i < count; i++) {
  47 + encodedValues[i] = xssCleaner.clean(values[i]);
  48 + }
  49 + return encodedValues;
89 } 50 }
90 51
91 - // ========== Param 相关 ==========  
92 -  
93 @Override 52 @Override
94 public String getParameter(String name) { 53 public String getParameter(String name) {
95 String value = super.getParameter(name); 54 String value = super.getParameter(name);
96 - return filterXss(value); 55 + if (value == null) {
  56 + return null;
  57 + }
  58 + return xssCleaner.clean(value);
97 } 59 }
98 60
  61 + // ============================ attribute ============================
99 @Override 62 @Override
100 - public String[] getParameterValues(String name) {  
101 - String[] values = super.getParameterValues(name);  
102 - if (ArrayUtil.isEmpty(values)) {  
103 - return values;  
104 - }  
105 - // 过滤处理  
106 - for (int i = 0; i < values.length; i++) {  
107 - values[i] = filterXss(values[i]); 63 + public Object getAttribute(String name) {
  64 + Object value = super.getAttribute(name);
  65 + if (value instanceof String) {
  66 + xssCleaner.clean((String) value);
108 } 67 }
109 - return values; 68 + return value;
110 } 69 }
111 70
  71 + // ============================ header ============================
112 @Override 72 @Override
113 - public Map<String, String[]> getParameterMap() {  
114 - Map<String, String[]> valueMap = super.getParameterMap();  
115 - if (CollUtil.isEmpty(valueMap)) {  
116 - return valueMap;  
117 - }  
118 - // 过滤处理  
119 - for (Map.Entry<String, String[]> entry : valueMap.entrySet()) {  
120 - String[] values = entry.getValue();  
121 - for (int i = 0; i < values.length; i++) {  
122 - values[i] = filterXss(values[i]);  
123 - } 73 + public String getHeader(String name) {
  74 + String value = super.getHeader(name);
  75 + if (value == null) {
  76 + return null;
124 } 77 }
125 - return valueMap; 78 + return xssCleaner.clean(value);
126 } 79 }
127 80
128 - // ========== Header 相关 ==========  
129 - 81 + // ============================ queryString ============================
130 @Override 82 @Override
131 - public String getHeader(String name) {  
132 - String value = super.getHeader(name);  
133 - return filterXss(value); 83 + public String getQueryString() {
  84 + String value = super.getQueryString();
  85 + if (value == null) {
  86 + return null;
  87 + }
  88 + return xssCleaner.clean(value);
134 } 89 }
135 90
136 } 91 }
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/json/XssStringJsonDeserializer.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.web.core.json;
  2 +
  3 +import cn.iocoder.yudao.framework.web.core.clean.XssCleaner;
  4 +import com.fasterxml.jackson.core.JsonParser;
  5 +import com.fasterxml.jackson.core.JsonToken;
  6 +import com.fasterxml.jackson.databind.DeserializationContext;
  7 +import com.fasterxml.jackson.databind.deser.std.StringDeserializer;
  8 +import lombok.AllArgsConstructor;
  9 +import lombok.extern.slf4j.Slf4j;
  10 +
  11 +import java.io.IOException;
  12 +
  13 +/**
  14 + * XSS 过滤 jackson 反序列化器。
  15 + * 在反序列化的过程中,会对字符串进行 XSS 过滤。
  16 + *
  17 + * @author Hccake
  18 + */
  19 +@Slf4j
  20 +@AllArgsConstructor
  21 +public class XssStringJsonDeserializer extends StringDeserializer {
  22 +
  23 + private final XssCleaner xssCleaner;
  24 +
  25 + @Override
  26 + public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
  27 + if (p.hasToken(JsonToken.VALUE_STRING)) {
  28 + return xssCleaner.clean(p.getText());
  29 + }
  30 + JsonToken t = p.currentToken();
  31 + // [databind#381]
  32 + if (t == JsonToken.START_ARRAY) {
  33 + return _deserializeFromArray(p, ctxt);
  34 + }
  35 + // need to gracefully handle byte[] data, as base64
  36 + if (t == JsonToken.VALUE_EMBEDDED_OBJECT) {
  37 + Object ob = p.getEmbeddedObject();
  38 + if (ob == null) {
  39 + return null;
  40 + }
  41 + if (ob instanceof byte[]) {
  42 + return ctxt.getBase64Variant().encode((byte[]) ob, false);
  43 + }
  44 + // otherwise, try conversion using toString()...
  45 + return ob.toString();
  46 + }
  47 + // 29-Jun-2020, tatu: New! "Scalar from Object" (mostly for XML)
  48 + if (t == JsonToken.START_OBJECT) {
  49 + return ctxt.extractScalarFromObject(p, this, _valueClass);
  50 + }
  51 +
  52 + if (t.isScalarValue()) {
  53 + String text = p.getValueAsString();
  54 + return xssCleaner.clean(text);
  55 + }
  56 + return (String) ctxt.handleUnexpectedToken(_valueClass, p);
  57 + }
  58 +}
  59 +
yudao-framework/yudao-spring-boot-starter-websocket/pom.xml 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project xmlns="http://maven.apache.org/POM/4.0.0"
  3 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5 + <parent>
  6 + <groupId>cn.iocoder.boot</groupId>
  7 + <artifactId>yudao-framework</artifactId>
  8 + <version>${revision}</version>
  9 + </parent>
  10 + <modelVersion>4.0.0</modelVersion>
  11 + <artifactId>yudao-spring-boot-starter-websocket</artifactId>
  12 + <packaging>jar</packaging>
  13 +
  14 + <name>${project.artifactId}</name>
  15 + <description>WebSocket</description>
  16 + <url>https://github.com/YunaiV/ruoyi-vue-pro</url>
  17 +
  18 +
  19 + <dependencies>
  20 +
  21 + <dependency>
  22 + <groupId>cn.iocoder.boot</groupId>
  23 + <artifactId>yudao-common</artifactId>
  24 + </dependency>
  25 +
  26 + <dependency>
  27 + <groupId>cn.iocoder.boot</groupId>
  28 + <artifactId>yudao-spring-boot-starter-security</artifactId>
  29 + </dependency>
  30 +
  31 + <dependency>
  32 + <groupId>org.springframework.boot</groupId>
  33 + <artifactId>spring-boot-starter-websocket</artifactId>
  34 + </dependency>
  35 + </dependencies>
  36 +
  37 +</project>
0 \ No newline at end of file 38 \ No newline at end of file
yudao-framework/yudao-spring-boot-starter-websocket/src/main/java/cn/iocoder/yudao/framework/websocket/config/WebSocketHandlerConfig.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.websocket.config;
  2 +
  3 +import cn.iocoder.yudao.framework.websocket.core.UserHandshakeInterceptor;
  4 +import org.springframework.boot.context.properties.EnableConfigurationProperties;
  5 +import org.springframework.context.annotation.Bean;
  6 +import org.springframework.web.socket.server.HandshakeInterceptor;
  7 +
  8 +@EnableConfigurationProperties(WebSocketProperties.class)
  9 +public class WebSocketHandlerConfig {
  10 + @Bean
  11 + public HandshakeInterceptor handshakeInterceptor() {
  12 + return new UserHandshakeInterceptor();
  13 + }
  14 +}
yudao-framework/yudao-spring-boot-starter-websocket/src/main/java/cn/iocoder/yudao/framework/websocket/config/WebSocketProperties.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.websocket.config;
  2 +
  3 +import lombok.Data;
  4 +import org.springframework.boot.context.properties.ConfigurationProperties;
  5 +import org.springframework.validation.annotation.Validated;
  6 +
  7 +/**
  8 + * WebSocket 配置项
  9 + *
  10 + * @author xingyu4j
  11 + */
  12 +@ConfigurationProperties("yudao.websocket")
  13 +@Data
  14 +@Validated
  15 +public class WebSocketProperties {
  16 +
  17 + /**
  18 + * 路径
  19 + */
  20 + private String path = "";
  21 + /**
  22 + * 默认最多允许同时在线用户数
  23 + */
  24 + private int maxOnlineCount = 0;
  25 + /**
  26 + * 是否保存session
  27 + */
  28 + private boolean sessionMap = true;
  29 +}
yudao-framework/yudao-spring-boot-starter-websocket/src/main/java/cn/iocoder/yudao/framework/websocket/config/YudaoWebSocketAutoConfiguration.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.websocket.config;
  2 +
  3 +import org.springframework.boot.autoconfigure.AutoConfiguration;
  4 +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
  5 +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
  6 +import org.springframework.boot.context.properties.EnableConfigurationProperties;
  7 +import org.springframework.context.annotation.Bean;
  8 +import org.springframework.web.socket.WebSocketHandler;
  9 +import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
  10 +import org.springframework.web.socket.server.HandshakeInterceptor;
  11 +
  12 +import java.util.List;
  13 +
  14 +/**
  15 + * WebSocket 自动配置
  16 + *
  17 + * @author xingyu4j
  18 + */
  19 +@AutoConfiguration
  20 +// 允许使用 yudao.websocket.enable=false 禁用websocket
  21 +@ConditionalOnProperty(prefix = "yudao.websocket", value = "enable", matchIfMissing = true)
  22 +@EnableConfigurationProperties(WebSocketProperties.class)
  23 +public class YudaoWebSocketAutoConfiguration {
  24 + @Bean
  25 + @ConditionalOnMissingBean
  26 + public WebSocketConfigurer webSocketConfigurer(List<HandshakeInterceptor> handshakeInterceptor,
  27 + WebSocketHandler webSocketHandler,
  28 + WebSocketProperties webSocketProperties) {
  29 +
  30 + return registry -> registry
  31 + .addHandler(webSocketHandler, webSocketProperties.getPath())
  32 + .addInterceptors(handshakeInterceptor.toArray(new HandshakeInterceptor[0]));
  33 + }
  34 +}
yudao-framework/yudao-spring-boot-starter-websocket/src/main/java/cn/iocoder/yudao/framework/websocket/core/UserHandshakeInterceptor.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.websocket.core;
  2 +
  3 +import cn.iocoder.yudao.framework.security.core.LoginUser;
  4 +import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
  5 +import org.springframework.http.server.ServerHttpRequest;
  6 +import org.springframework.http.server.ServerHttpResponse;
  7 +import org.springframework.web.socket.WebSocketHandler;
  8 +import org.springframework.web.socket.server.HandshakeInterceptor;
  9 +
  10 +import java.util.Map;
  11 +
  12 +public class UserHandshakeInterceptor implements HandshakeInterceptor {
  13 + @Override
  14 + public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {
  15 + LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
  16 + attributes.put(WebSocketKeyDefine.LOGIN_USER, loginUser);
  17 + return true;
  18 + }
  19 +
  20 + @Override
  21 + public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) {
  22 +
  23 + }
  24 +}
yudao-framework/yudao-spring-boot-starter-websocket/src/main/java/cn/iocoder/yudao/framework/websocket/core/WebSocketKeyDefine.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.websocket.core;
  2 +
  3 +
  4 +import lombok.Data;
  5 +
  6 +@Data
  7 +public class WebSocketKeyDefine {
  8 + public static final String LOGIN_USER ="LOGIN_USER";
  9 +}
yudao-framework/yudao-spring-boot-starter-websocket/src/main/java/cn/iocoder/yudao/framework/websocket/core/WebSocketMessageDO.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.websocket.core;
  2 +
  3 +import lombok.Data;
  4 +import lombok.experimental.Accessors;
  5 +
  6 +import java.util.List;
  7 +
  8 +@Data
  9 +@Accessors(chain = true)
  10 +public class WebSocketMessageDO {
  11 + /**
  12 + * 接收消息的seesion
  13 + */
  14 + private List<Object> seesionKeyList;
  15 + /**
  16 + * 发送消息
  17 + */
  18 + private String msgText;
  19 +
  20 + public static WebSocketMessageDO build(List<Object> seesionKeyList, String msgText) {
  21 + return new WebSocketMessageDO().setMsgText(msgText).setSeesionKeyList(seesionKeyList);
  22 + }
  23 +
  24 +}
yudao-framework/yudao-spring-boot-starter-websocket/src/main/java/cn/iocoder/yudao/framework/websocket/core/WebSocketSessionHandler.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.websocket.core;
  2 +
  3 +import org.springframework.web.socket.WebSocketSession;
  4 +
  5 +import java.util.Collection;
  6 +import java.util.Map;
  7 +import java.util.Set;
  8 +import java.util.concurrent.ConcurrentHashMap;
  9 +
  10 +public final class WebSocketSessionHandler {
  11 + private WebSocketSessionHandler() {
  12 + }
  13 +
  14 + private static final Map<String, WebSocketSession> SESSION_MAP = new ConcurrentHashMap<>();
  15 +
  16 + public static void addSession(Object sessionKey, WebSocketSession session) {
  17 + SESSION_MAP.put(sessionKey.toString(), session);
  18 + }
  19 +
  20 + public static void removeSession(Object sessionKey) {
  21 + SESSION_MAP.remove(sessionKey.toString());
  22 + }
  23 +
  24 + public static WebSocketSession getSession(Object sessionKey) {
  25 + return SESSION_MAP.get(sessionKey.toString());
  26 + }
  27 +
  28 + public static Collection<WebSocketSession> getSessions() {
  29 + return SESSION_MAP.values();
  30 + }
  31 +
  32 + public static Set<String> getSessionKeys() {
  33 + return SESSION_MAP.keySet();
  34 + }
  35 +
  36 +}
yudao-framework/yudao-spring-boot-starter-websocket/src/main/java/cn/iocoder/yudao/framework/websocket/core/WebSocketUtils.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.websocket.core;
  2 +
  3 +import lombok.extern.slf4j.Slf4j;
  4 +import org.springframework.web.socket.TextMessage;
  5 +import org.springframework.web.socket.WebSocketSession;
  6 +
  7 +import java.io.IOException;
  8 +
  9 +@Slf4j
  10 +public class WebSocketUtils {
  11 + public static boolean sendMessage(WebSocketSession seesion, String message) {
  12 + if (seesion == null) {
  13 + log.error("seesion 不存在");
  14 + return false;
  15 + }
  16 + if (seesion.isOpen()) {
  17 + try {
  18 + seesion.sendMessage(new TextMessage(message));
  19 + } catch (IOException e) {
  20 + log.error("WebSocket 消息发送异常 Session={} | msg= {} | exception={}", seesion, message, e);
  21 + return false;
  22 + }
  23 + }
  24 + return true;
  25 + }
  26 +
  27 + public static boolean sendMessage(Object sessionKey, String message) {
  28 + WebSocketSession session = WebSocketSessionHandler.getSession(sessionKey);
  29 + return sendMessage(session, message);
  30 + }
  31 +}
yudao-framework/yudao-spring-boot-starter-websocket/src/main/java/cn/iocoder/yudao/framework/websocket/core/YudaoWebSocketHandlerDecorator.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.websocket.core;
  2 +
  3 +import cn.iocoder.yudao.framework.security.core.LoginUser;
  4 +import org.springframework.web.socket.CloseStatus;
  5 +import org.springframework.web.socket.WebSocketHandler;
  6 +import org.springframework.web.socket.WebSocketSession;
  7 +import org.springframework.web.socket.handler.WebSocketHandlerDecorator;
  8 +
  9 +public class YudaoWebSocketHandlerDecorator extends WebSocketHandlerDecorator {
  10 + public YudaoWebSocketHandlerDecorator(WebSocketHandler delegate) {
  11 + super(delegate);
  12 + }
  13 +
  14 + /**
  15 + * websocket 连接时执行的动作
  16 + * @param session websocket session 对象
  17 + * @throws Exception 异常对象
  18 + */
  19 + @Override
  20 + public void afterConnectionEstablished(final WebSocketSession session) throws Exception {
  21 + Object sessionKey = sessionKeyGen(session);
  22 + WebSocketSessionHandler.addSession(sessionKey, session);
  23 + }
  24 +
  25 + /**
  26 + * websocket 关闭连接时执行的动作
  27 + * @param session websocket session 对象
  28 + * @param closeStatus 关闭状态对象
  29 + * @throws Exception 异常对象
  30 + */
  31 + @Override
  32 + public void afterConnectionClosed(final WebSocketSession session, CloseStatus closeStatus) throws Exception {
  33 + Object sessionKey = sessionKeyGen(session);
  34 + WebSocketSessionHandler.removeSession(sessionKey);
  35 + }
  36 +
  37 + public Object sessionKeyGen(WebSocketSession webSocketSession) {
  38 +
  39 + Object obj = webSocketSession.getAttributes().get(WebSocketKeyDefine.LOGIN_USER);
  40 +
  41 + if (obj instanceof LoginUser) {
  42 + LoginUser loginUser = (LoginUser) obj;
  43 + // userId 作为唯一区分
  44 + return String.valueOf(loginUser.getId());
  45 + }
  46 +
  47 + return null;
  48 + }
  49 +}
yudao-framework/yudao-spring-boot-starter-websocket/src/main/java/cn/iocoder/yudao/framework/websocket/package-info.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.websocket;
yudao-framework/yudao-spring-boot-starter-websocket/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 0 → 100644
  1 +cn.iocoder.yudao.framework.websocket.config.YudaoWebSocketAutoConfiguration
0 \ No newline at end of file 2 \ No newline at end of file
yudao-module-infra/yudao-module-infra-biz/pom.xml
@@ -111,6 +111,12 @@ @@ -111,6 +111,12 @@
111 <groupId>cn.iocoder.boot</groupId> 111 <groupId>cn.iocoder.boot</groupId>
112 <artifactId>yudao-spring-boot-starter-file</artifactId> 112 <artifactId>yudao-spring-boot-starter-file</artifactId>
113 </dependency> 113 </dependency>
  114 +
  115 + <!-- WebSocket -->
  116 + <dependency>
  117 + <groupId>org.springframework.boot</groupId>
  118 + <artifactId>spring-boot-starter-websocket</artifactId>
  119 + </dependency>
114 </dependencies> 120 </dependencies>
115 121
116 </project> 122 </project>
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/config/ConfigController.java
@@ -75,7 +75,7 @@ public class ConfigController { @@ -75,7 +75,7 @@ public class ConfigController {
75 if (config == null) { 75 if (config == null) {
76 return null; 76 return null;
77 } 77 }
78 - if (config.getVisible()) { 78 + if (!config.getVisible()) {
79 throw ServiceExceptionUtil.exception(ErrorCodeConstants.CONFIG_GET_VALUE_ERROR_IF_VISIBLE); 79 throw ServiceExceptionUtil.exception(ErrorCodeConstants.CONFIG_GET_VALUE_ERROR_IF_VISIBLE);
80 } 80 }
81 return success(config.getValue()); 81 return success(config.getValue());
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/convert/codegen/CodegenConvert.java
@@ -11,9 +11,11 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenColumnDO; @@ -11,9 +11,11 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenColumnDO;
11 import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenTableDO; 11 import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenTableDO;
12 import com.baomidou.mybatisplus.generator.config.po.TableField; 12 import com.baomidou.mybatisplus.generator.config.po.TableField;
13 import com.baomidou.mybatisplus.generator.config.po.TableInfo; 13 import com.baomidou.mybatisplus.generator.config.po.TableInfo;
  14 +import org.apache.ibatis.type.JdbcType;
14 import org.mapstruct.Mapper; 15 import org.mapstruct.Mapper;
15 import org.mapstruct.Mapping; 16 import org.mapstruct.Mapping;
16 import org.mapstruct.Mappings; 17 import org.mapstruct.Mappings;
  18 +import org.mapstruct.Named;
17 import org.mapstruct.factory.Mappers; 19 import org.mapstruct.factory.Mappers;
18 20
19 import java.util.List; 21 import java.util.List;
@@ -37,7 +39,7 @@ public interface CodegenConvert { @@ -37,7 +39,7 @@ public interface CodegenConvert {
37 39
38 @Mappings({ 40 @Mappings({
39 @Mapping(source = "name", target = "columnName"), 41 @Mapping(source = "name", target = "columnName"),
40 - @Mapping(source = "type", target = "dataType"), 42 + @Mapping(source = "metaInfo.jdbcType", target = "dataType", qualifiedByName = "getDataType"),
41 @Mapping(source = "comment", target = "columnComment"), 43 @Mapping(source = "comment", target = "columnComment"),
42 @Mapping(source = "metaInfo.nullable", target = "nullable"), 44 @Mapping(source = "metaInfo.nullable", target = "nullable"),
43 @Mapping(source = "keyFlag", target = "primaryKey"), 45 @Mapping(source = "keyFlag", target = "primaryKey"),
@@ -47,6 +49,11 @@ public interface CodegenConvert { @@ -47,6 +49,11 @@ public interface CodegenConvert {
47 }) 49 })
48 CodegenColumnDO convert(TableField bean); 50 CodegenColumnDO convert(TableField bean);
49 51
  52 + @Named("getDataType")
  53 + default String getDataType(JdbcType jdbcType) {
  54 + return jdbcType.name();
  55 + }
  56 +
50 // ========== CodegenTableDO 相关 ========== 57 // ========== CodegenTableDO 相关 ==========
51 58
52 // List<CodegenTableRespVO> convertList02(List<CodegenTableDO> list); 59 // List<CodegenTableRespVO> convertList02(List<CodegenTableDO> list);
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/codegen/CodegenColumnDO.java
@@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.infra.enums.codegen.CodegenColumnListConditionEnu @@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.infra.enums.codegen.CodegenColumnListConditionEnu
6 import com.baomidou.mybatisplus.annotation.KeySequence; 6 import com.baomidou.mybatisplus.annotation.KeySequence;
7 import com.baomidou.mybatisplus.annotation.TableId; 7 import com.baomidou.mybatisplus.annotation.TableId;
8 import com.baomidou.mybatisplus.annotation.TableName; 8 import com.baomidou.mybatisplus.annotation.TableName;
  9 +import com.baomidou.mybatisplus.generator.config.po.TableField;
9 import lombok.Data; 10 import lombok.Data;
10 import lombok.EqualsAndHashCode; 11 import lombok.EqualsAndHashCode;
11 import lombok.experimental.Accessors; 12 import lombok.experimental.Accessors;
@@ -29,7 +30,7 @@ public class CodegenColumnDO extends BaseDO { @@ -29,7 +30,7 @@ public class CodegenColumnDO extends BaseDO {
29 private Long id; 30 private Long id;
30 /** 31 /**
31 * 表编号 32 * 表编号
32 - * 33 + * <p>
33 * 关联 {@link CodegenTableDO#getId()} 34 * 关联 {@link CodegenTableDO#getId()}
34 */ 35 */
35 private Long tableId; 36 private Long tableId;
@@ -41,7 +42,8 @@ public class CodegenColumnDO extends BaseDO { @@ -41,7 +42,8 @@ public class CodegenColumnDO extends BaseDO {
41 */ 42 */
42 private String columnName; 43 private String columnName;
43 /** 44 /**
44 - * 字段类型 45 + * 数据库字段类型
  46 + * 关联 {@link TableField.MetaInfo#getJdbcType()}
45 */ 47 */
46 private String dataType; 48 private String dataType;
47 /** 49 /**
@@ -69,7 +71,7 @@ public class CodegenColumnDO extends BaseDO { @@ -69,7 +71,7 @@ public class CodegenColumnDO extends BaseDO {
69 71
70 /** 72 /**
71 * Java 属性类型 73 * Java 属性类型
72 - * 74 + * <p>
73 * 例如说 String、Boolean 等等 75 * 例如说 String、Boolean 等等
74 */ 76 */
75 private String javaType; 77 private String javaType;
@@ -79,7 +81,7 @@ public class CodegenColumnDO extends BaseDO { @@ -79,7 +81,7 @@ public class CodegenColumnDO extends BaseDO {
79 private String javaField; 81 private String javaField;
80 /** 82 /**
81 * 字典类型 83 * 字典类型
82 - * 84 + * <p>
83 * 关联 DictTypeDO 的 type 属性 85 * 关联 DictTypeDO 的 type 属性
84 */ 86 */
85 private String dictType; 87 private String dictType;
@@ -104,7 +106,7 @@ public class CodegenColumnDO extends BaseDO { @@ -104,7 +106,7 @@ public class CodegenColumnDO extends BaseDO {
104 private Boolean listOperation; 106 private Boolean listOperation;
105 /** 107 /**
106 * List 查询操作的条件类型 108 * List 查询操作的条件类型
107 - * 109 + * <p>
108 * 枚举 {@link CodegenColumnListConditionEnum} 110 * 枚举 {@link CodegenColumnListConditionEnum}
109 */ 111 */
110 private String listOperationCondition; 112 private String listOperationCondition;
@@ -117,7 +119,7 @@ public class CodegenColumnDO extends BaseDO { @@ -117,7 +119,7 @@ public class CodegenColumnDO extends BaseDO {
117 119
118 /** 120 /**
119 * 显示类型 121 * 显示类型
120 - * 122 + * <p>
121 * 枚举 {@link CodegenColumnHtmlTypeEnum} 123 * 枚举 {@link CodegenColumnHtmlTypeEnum}
122 */ 124 */
123 private String htmlType; 125 private String htmlType;
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/websocket/SemaphoreUtils.java 0 → 100644
  1 +package cn.iocoder.yudao.module.infra.websocket;
  2 +
  3 +import lombok.extern.slf4j.Slf4j;
  4 +
  5 +import java.util.concurrent.Semaphore;
  6 +
  7 +/**
  8 + * 信号量相关处理
  9 + *
  10 + */
  11 +@Slf4j
  12 +public class SemaphoreUtils {
  13 +
  14 + /**
  15 + * 获取信号量
  16 + *
  17 + * @param semaphore
  18 + * @return
  19 + */
  20 + public static boolean tryAcquire(Semaphore semaphore) {
  21 + boolean flag = false;
  22 +
  23 + try {
  24 + flag = semaphore.tryAcquire();
  25 + } catch (Exception e) {
  26 + log.error("获取信号量异常", e);
  27 + }
  28 +
  29 + return flag;
  30 + }
  31 +
  32 + /**
  33 + * 释放信号量
  34 + *
  35 + * @param semaphore
  36 + */
  37 + public static void release(Semaphore semaphore) {
  38 +
  39 + try {
  40 + semaphore.release();
  41 + } catch (Exception e) {
  42 + log.error("释放信号量异常", e);
  43 + }
  44 + }
  45 +}
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/websocket/WebSocketConfig.java 0 → 100644
  1 +package cn.iocoder.yudao.module.infra.websocket;
  2 +
  3 +import org.springframework.context.annotation.Bean;
  4 +import org.springframework.context.annotation.Configuration;
  5 +import org.springframework.web.socket.server.standard.ServerEndpointExporter;
  6 +
  7 +/**
  8 + * websocket 配置
  9 + */
  10 +@Configuration
  11 +public class WebSocketConfig {
  12 + @Bean
  13 + public ServerEndpointExporter serverEndpointExporter() {
  14 + return new ServerEndpointExporter();
  15 + }
  16 +}
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/websocket/WebSocketServer.java 0 → 100644
  1 +package cn.iocoder.yudao.module.infra.websocket;
  2 +
  3 +import lombok.extern.slf4j.Slf4j;
  4 +import org.springframework.stereotype.Component;
  5 +
  6 +import javax.websocket.*;
  7 +import javax.websocket.server.ServerEndpoint;
  8 +import java.util.concurrent.Semaphore;
  9 +
  10 +/**
  11 + * websocket 消息处理
  12 + */
  13 +@Component
  14 +@ServerEndpoint("/websocket/message")
  15 +@Slf4j
  16 +public class WebSocketServer {
  17 +
  18 + /**
  19 + * 默认最多允许同时在线用户数100
  20 + */
  21 + public static int socketMaxOnlineCount = 100;
  22 +
  23 + private static final Semaphore SOCKET_SEMAPHORE = new Semaphore(socketMaxOnlineCount);
  24 +
  25 + /**
  26 + * 连接建立成功调用的方法
  27 + */
  28 + @OnOpen
  29 + public void onOpen(Session session) throws Exception {
  30 + // 尝试获取信号量
  31 + boolean semaphoreFlag = SemaphoreUtils.tryAcquire(SOCKET_SEMAPHORE);
  32 + if (!semaphoreFlag) {
  33 + // 未获取到信号量
  34 + log.error("当前在线人数超过限制数:{}", socketMaxOnlineCount);
  35 + WebSocketUsers.sendMessage(session, "当前在线人数超过限制数:" + socketMaxOnlineCount);
  36 + session.close();
  37 + } else {
  38 + String userId = WebSocketUsers.getParam("userId", session);
  39 + if (userId != null) {
  40 + // 添加用户
  41 + WebSocketUsers.addSession(userId, session);
  42 + log.info("用户【userId={}】建立连接,当前连接用户总数:{}", userId, WebSocketUsers.getUsers().size());
  43 + WebSocketUsers.sendMessage(session, "接收内容:连接成功");
  44 + } else {
  45 + WebSocketUsers.sendMessage(session, "接收内容:连接失败");
  46 + }
  47 + }
  48 + }
  49 +
  50 + /**
  51 + * 连接关闭时处理
  52 + */
  53 + @OnClose
  54 + public void onClose(Session session) {
  55 + log.info("用户【sessionId={}】关闭连接!", session.getId());
  56 + // 移除用户
  57 + WebSocketUsers.removeSession(session);
  58 + // 获取到信号量则需释放
  59 + SemaphoreUtils.release(SOCKET_SEMAPHORE);
  60 + }
  61 +
  62 + /**
  63 + * 抛出异常时处理
  64 + */
  65 + @OnError
  66 + public void onError(Session session, Throwable exception) throws Exception {
  67 + if (session.isOpen()) {
  68 + // 关闭连接
  69 + session.close();
  70 + }
  71 + String sessionId = session.getId();
  72 + log.info("用户【sessionId={}】连接异常!异常信息:{}", sessionId, exception);
  73 + // 移出用户
  74 + WebSocketUsers.removeSession(session);
  75 + // 获取到信号量则需释放
  76 + SemaphoreUtils.release(SOCKET_SEMAPHORE);
  77 + }
  78 +
  79 + /**
  80 + * 收到客户端消息时调用的方法
  81 + */
  82 + @OnMessage
  83 + public void onMessage(Session session, String message) {
  84 + WebSocketUsers.sendMessage(session, "接收内容:" + message);
  85 + }
  86 +}
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/websocket/WebSocketUsers.java 0 → 100644
  1 +package cn.iocoder.yudao.module.infra.websocket;
  2 +
  3 +import cn.hutool.core.map.MapUtil;
  4 +import cn.hutool.core.util.StrUtil;
  5 +import lombok.extern.slf4j.Slf4j;
  6 +import org.bouncycastle.util.Strings;
  7 +
  8 +import javax.validation.constraints.NotNull;
  9 +import javax.websocket.Session;
  10 +import java.io.IOException;
  11 +import java.util.List;
  12 +import java.util.Map;
  13 +import java.util.Set;
  14 +import java.util.concurrent.ConcurrentHashMap;
  15 +
  16 +/**
  17 + * websocket 客户端用户
  18 + */
  19 +@Slf4j
  20 +public class WebSocketUsers {
  21 +
  22 + /**
  23 + * 用户集
  24 + * TODO 需要登录用户的session?
  25 + */
  26 + private static final Map<String, Session> SESSION_MAP = new ConcurrentHashMap<>();
  27 +
  28 + /**
  29 + * 存储用户
  30 + *
  31 + * @param userId 唯一键
  32 + * @param session 用户信息
  33 + */
  34 + public static void addSession(String userId, Session session) {
  35 + SESSION_MAP.put(userId, session);
  36 + }
  37 +
  38 + /**
  39 + * 移除用户
  40 + *
  41 + * @param session 用户信息
  42 + * @return 移除结果
  43 + */
  44 + public static boolean removeSession(Session session) {
  45 + String key = null;
  46 + boolean flag = SESSION_MAP.containsValue(session);
  47 + if (flag) {
  48 + Set<Map.Entry<String, Session>> entries = SESSION_MAP.entrySet();
  49 + for (Map.Entry<String, Session> entry : entries) {
  50 + Session value = entry.getValue();
  51 + if (value.equals(session)) {
  52 + key = entry.getKey();
  53 + break;
  54 + }
  55 + }
  56 + } else {
  57 + return true;
  58 + }
  59 + return removeSession(key);
  60 + }
  61 +
  62 + /**
  63 + * 移出用户
  64 + *
  65 + * @param userId 用户id
  66 + */
  67 + public static boolean removeSession(String userId) {
  68 + log.info("用户【userId={}】退出", userId);
  69 + Session remove = SESSION_MAP.remove(userId);
  70 + if (remove != null) {
  71 + boolean containsValue = SESSION_MAP.containsValue(remove);
  72 + log.info("用户【userId={}】退出{},当前连接用户总数:{}", userId, containsValue ? "失败" : "成功", SESSION_MAP.size());
  73 + return containsValue;
  74 + } else {
  75 + return true;
  76 + }
  77 + }
  78 +
  79 + /**
  80 + * 获取在线用户列表
  81 + *
  82 + * @return 返回用户集合
  83 + */
  84 + public static Map<String, Session> getUsers() {
  85 + return SESSION_MAP;
  86 + }
  87 +
  88 + /**
  89 + * 向所有在线人发送消息
  90 + *
  91 + * @param message 消息内容
  92 + */
  93 + public static void sendMessageToAll(String message) {
  94 + SESSION_MAP.forEach((userId, session) -> {
  95 + if (session.isOpen()) {
  96 + sendMessage(session, message);
  97 + }
  98 + });
  99 + }
  100 +
  101 + /**
  102 + * 异步发送文本消息
  103 + *
  104 + * @param session 用户session
  105 + * @param message 消息内容
  106 + */
  107 + public static void sendMessageAsync(Session session, String message) {
  108 + if (session.isOpen()) {
  109 + // TODO 需要加synchronized锁(synchronized(session))?单个session创建线程?
  110 + session.getAsyncRemote().sendText(message);
  111 + } else {
  112 + log.warn("用户【session={}】不在线", session.getId());
  113 + }
  114 + }
  115 +
  116 + /**
  117 + * 同步发送文本消息
  118 + *
  119 + * @param session 用户session
  120 + * @param message 消息内容
  121 + */
  122 + public static void sendMessage(Session session, String message) {
  123 + try {
  124 + if (session.isOpen()) {
  125 + // TODO 需要加synchronized锁(synchronized(session))?单个session创建线程?
  126 + session.getBasicRemote().sendText(message);
  127 + } else {
  128 + log.warn("用户【session={}】不在线", session.getId());
  129 + }
  130 + } catch (IOException e) {
  131 + log.error("发送消息异常", e);
  132 + }
  133 +
  134 + }
  135 +
  136 + /**
  137 + * 根据用户id发送消息
  138 + *
  139 + * @param userId 用户id
  140 + * @param message 消息内容
  141 + */
  142 + public static void sendMessage(String userId, String message) {
  143 + Session session = SESSION_MAP.get(userId);
  144 + //判断是否存在该用户的session,并且是否在线
  145 + if (session == null || !session.isOpen()) {
  146 + return;
  147 + }
  148 + sendMessage(session, message);
  149 + }
  150 +
  151 +
  152 + /**
  153 + * 获取session中的指定参数值
  154 + *
  155 + * @param key 参数key
  156 + * @param session 用户session
  157 + */
  158 + public static String getParam(@NotNull String key, Session session) {
  159 + //TODO 目前只针对获取一个key的值,后期根据情况拓展多个 或者直接在onClose onOpen上获取参数?
  160 + String value = null;
  161 + Map<String, List<String>> parameters = session.getRequestParameterMap();
  162 + if (MapUtil.isNotEmpty(parameters)) {
  163 + value = parameters.get(key).get(0);
  164 + } else {
  165 + String queryString = session.getQueryString();
  166 + if (!StrUtil.isEmpty(queryString)) {
  167 + String[] params = Strings.split(queryString, '&');
  168 + for (String paramPair : params) {
  169 + String[] nameValues = Strings.split(paramPair, '=');
  170 + if (key.equals(nameValues[0])) {
  171 + value = nameValues[1];
  172 + }
  173 + }
  174 + }
  175 + }
  176 + return value;
  177 + }
  178 +}
yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/index.vue.vm
@@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
17 preIcon="ep:download" 17 preIcon="ep:download"
18 :title="t('action.export')" 18 :title="t('action.export')"
19 v-hasPermi="['${permissionPrefix}:export']" 19 v-hasPermi="['${permissionPrefix}:export']"
20 - @click="handleExport()" 20 + @click="exportList('${table.classComment}.xls')"
21 /> 21 />
22 </template> 22 </template>
23 <template #actionbtns_default="{ row }"> 23 <template #actionbtns_default="{ row }">
@@ -40,7 +40,7 @@ @@ -40,7 +40,7 @@
40 preIcon="ep:delete" 40 preIcon="ep:delete"
41 :title="t('action.del')" 41 :title="t('action.del')"
42 v-hasPermi="['${permissionPrefix}:delete']" 42 v-hasPermi="['${permissionPrefix}:delete']"
43 - @click="handleDelete(row.id)" 43 + @click="deleteData(row.id)"
44 /> 44 />
45 </template> 45 </template>
46 </XTable> 46 </XTable>
@@ -119,11 +119,6 @@ const handleCreate = () =&gt; { @@ -119,11 +119,6 @@ const handleCreate = () =&gt; {
119 modelLoading.value = false 119 modelLoading.value = false
120 } 120 }
121 121
122 -// 导出操作  
123 -const handleExport = async () => {  
124 - await exportList('${table.classComment}.xls')  
125 -}  
126 -  
127 // 修改操作 122 // 修改操作
128 const handleUpdate = async (rowId: number) => { 123 const handleUpdate = async (rowId: number) => {
129 setDialogTile('update') 124 setDialogTile('update')
@@ -141,11 +136,6 @@ const handleDetail = async (rowId: number) =&gt; { @@ -141,11 +136,6 @@ const handleDetail = async (rowId: number) =&gt; {
141 modelLoading.value = false 136 modelLoading.value = false
142 } 137 }
143 138
144 -// 删除操作  
145 -const handleDelete = async (rowId: number) => {  
146 - await deleteData(rowId)  
147 -}  
148 -  
149 // 提交按钮 139 // 提交按钮
150 const submitForm = async () => { 140 const submitForm = async () => {
151 const elForm = unref(formRef)?.getElFormRef() 141 const elForm = unref(formRef)?.getElFormRef()
yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/DefaultDatabaseQueryTest.java
1 package cn.iocoder.yudao.module.infra.service; 1 package cn.iocoder.yudao.module.infra.service;
2 2
3 import cn.hutool.core.util.StrUtil; 3 import cn.hutool.core.util.StrUtil;
4 -import com.baomidou.mybatisplus.generator.IDatabaseQuery.DefaultDatabaseQuery; 4 +import com.baomidou.mybatisplus.generator.query.DefaultQuery;
5 import com.baomidou.mybatisplus.generator.config.DataSourceConfig; 5 import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
6 import com.baomidou.mybatisplus.generator.config.builder.ConfigBuilder; 6 import com.baomidou.mybatisplus.generator.config.builder.ConfigBuilder;
7 import com.baomidou.mybatisplus.generator.config.po.TableInfo; 7 import com.baomidou.mybatisplus.generator.config.po.TableInfo;
@@ -19,7 +19,7 @@ public class DefaultDatabaseQueryTest { @@ -19,7 +19,7 @@ public class DefaultDatabaseQueryTest {
19 19
20 ConfigBuilder builder = new ConfigBuilder(null, dataSourceConfig, null, null, null, null); 20 ConfigBuilder builder = new ConfigBuilder(null, dataSourceConfig, null, null, null, null);
21 21
22 - DefaultDatabaseQuery query = new DefaultDatabaseQuery(builder); 22 + DefaultQuery query = new DefaultQuery(builder);
23 23
24 long time = System.currentTimeMillis(); 24 long time = System.currentTimeMillis();
25 List<TableInfo> tableInfos = query.queryTables(); 25 List<TableInfo> tableInfos = query.queryTables();
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/captcha/CaptchaController.java
1 package cn.iocoder.yudao.module.system.controller.admin.captcha; 1 package cn.iocoder.yudao.module.system.controller.admin.captcha;
2 2
  3 +import cn.hutool.core.util.StrUtil;
  4 +import cn.hutool.extra.servlet.ServletUtil;
3 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; 5 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
4 import com.anji.captcha.model.common.ResponseModel; 6 import com.anji.captcha.model.common.ResponseModel;
5 import com.anji.captcha.model.vo.CaptchaVO; 7 import com.anji.captcha.model.vo.CaptchaVO;
6 -import io.swagger.v3.oas.annotations.tags.Tag;  
7 -import io.swagger.v3.oas.annotations.Operation; 8 +import com.anji.captcha.service.CaptchaService;
  9 +import io.swagger.annotations.Api;
  10 +import io.swagger.annotations.ApiOperation;
8 import org.springframework.web.bind.annotation.PostMapping; 11 import org.springframework.web.bind.annotation.PostMapping;
9 import org.springframework.web.bind.annotation.RequestBody; 12 import org.springframework.web.bind.annotation.RequestBody;
10 import org.springframework.web.bind.annotation.RequestMapping; 13 import org.springframework.web.bind.annotation.RequestMapping;
11 import org.springframework.web.bind.annotation.RestController; 14 import org.springframework.web.bind.annotation.RestController;
12 15
  16 +import javax.annotation.Resource;
13 import javax.annotation.security.PermitAll; 17 import javax.annotation.security.PermitAll;
14 import javax.servlet.http.HttpServletRequest; 18 import javax.servlet.http.HttpServletRequest;
15 19
16 /** 20 /**
17 * 验证码 21 * 验证码
18 * 22 *
19 - * 问题:为什么不直接使用 anji 提供的 CaptchaController,而要另外继承?  
20 - * 回答:管理使用 /admin-api/* 作为前缀,所以需要继承!  
21 - *  
22 * @author 芋道源码 23 * @author 芋道源码
23 */ 24 */
24 -@Tag(name = "管理后台 - 验证码") 25 +@Api(tags = "管理后台 - 验证码")
25 @RestController("adminCaptchaController") 26 @RestController("adminCaptchaController")
26 @RequestMapping("/system/captcha") 27 @RequestMapping("/system/captcha")
27 -public class CaptchaController extends com.anji.captcha.controller.CaptchaController { 28 +public class CaptchaController {
  29 +
  30 + @Resource
  31 + private CaptchaService captchaService;
28 32
29 @PostMapping({"/get"}) 33 @PostMapping({"/get"})
30 - @Operation(summary = "获得验证码") 34 + @ApiOperation("获得验证码")
31 @PermitAll 35 @PermitAll
32 @OperateLog(enable = false) // 避免 Post 请求被记录操作日志 36 @OperateLog(enable = false) // 避免 Post 请求被记录操作日志
33 - @Override  
34 public ResponseModel get(@RequestBody CaptchaVO data, HttpServletRequest request) { 37 public ResponseModel get(@RequestBody CaptchaVO data, HttpServletRequest request) {
35 - return super.get(data, request); 38 + assert request.getRemoteHost() != null;
  39 + data.setBrowserInfo(getRemoteId(request));
  40 + return captchaService.get(data);
36 } 41 }
37 42
38 @PostMapping("/check") 43 @PostMapping("/check")
39 - @Operation(summary = "校验验证码") 44 + @ApiOperation("校验验证码")
40 @PermitAll 45 @PermitAll
41 @OperateLog(enable = false) // 避免 Post 请求被记录操作日志 46 @OperateLog(enable = false) // 避免 Post 请求被记录操作日志
42 - @Override  
43 public ResponseModel check(@RequestBody CaptchaVO data, HttpServletRequest request) { 47 public ResponseModel check(@RequestBody CaptchaVO data, HttpServletRequest request) {
44 - return super.check(data, request); 48 + data.setBrowserInfo(getRemoteId(request));
  49 + return captchaService.check(data);
  50 + }
  51 +
  52 + public static String getRemoteId(HttpServletRequest request) {
  53 + String ip = ServletUtil.getClientIP(request);
  54 + String ua = request.getHeader("user-agent");
  55 + if (StrUtil.isNotBlank(ip)) {
  56 + return ip + ua;
  57 + }
  58 + return request.getRemoteAddr() + ua;
45 } 59 }
46 60
47 } 61 }
yudao-module-visualization/yudao-module-visualization-biz/src/main/java/cn/iocoder/yudao/module/visualization/framework/jmreport/config/JmReportConfiguration.java
1 package cn.iocoder.yudao.module.visualization.framework.jmreport.config; 1 package cn.iocoder.yudao.module.visualization.framework.jmreport.config;
2 2
  3 +import cn.iocoder.yudao.framework.security.config.SecurityProperties;
3 import cn.iocoder.yudao.module.system.api.oauth2.OAuth2TokenApi; 4 import cn.iocoder.yudao.module.system.api.oauth2.OAuth2TokenApi;
4 import cn.iocoder.yudao.module.visualization.framework.jmreport.core.service.JmReportTokenServiceImpl; 5 import cn.iocoder.yudao.module.visualization.framework.jmreport.core.service.JmReportTokenServiceImpl;
5 import org.jeecg.modules.jmreport.api.JmReportTokenServiceI; 6 import org.jeecg.modules.jmreport.api.JmReportTokenServiceI;
@@ -18,8 +19,8 @@ public class JmReportConfiguration { @@ -18,8 +19,8 @@ public class JmReportConfiguration {
18 19
19 @Bean 20 @Bean
20 @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection") 21 @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
21 - public JmReportTokenServiceI jmReportTokenService(OAuth2TokenApi oAuth2TokenApi) {  
22 - return new JmReportTokenServiceImpl(oAuth2TokenApi); 22 + public JmReportTokenServiceI jmReportTokenService(OAuth2TokenApi oAuth2TokenApi, SecurityProperties securityProperties) {
  23 + return new JmReportTokenServiceImpl(oAuth2TokenApi, securityProperties);
23 } 24 }
24 25
25 } 26 }
yudao-module-visualization/yudao-module-visualization-biz/src/main/java/cn/iocoder/yudao/module/visualization/framework/jmreport/core/service/JmReportTokenServiceImpl.java
1 package cn.iocoder.yudao.module.visualization.framework.jmreport.core.service; 1 package cn.iocoder.yudao.module.visualization.framework.jmreport.core.service;
2 2
  3 +import cn.hutool.core.util.ObjectUtil;
3 import cn.hutool.core.util.StrUtil; 4 import cn.hutool.core.util.StrUtil;
4 import cn.iocoder.yudao.framework.common.exception.ServiceException; 5 import cn.iocoder.yudao.framework.common.exception.ServiceException;
  6 +import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils;
  7 +import cn.iocoder.yudao.framework.security.config.SecurityProperties;
5 import cn.iocoder.yudao.framework.security.core.LoginUser; 8 import cn.iocoder.yudao.framework.security.core.LoginUser;
6 import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; 9 import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
7 import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; 10 import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
@@ -10,6 +13,10 @@ import cn.iocoder.yudao.module.system.api.oauth2.OAuth2TokenApi; @@ -10,6 +13,10 @@ import cn.iocoder.yudao.module.system.api.oauth2.OAuth2TokenApi;
10 import cn.iocoder.yudao.module.system.api.oauth2.dto.OAuth2AccessTokenCheckRespDTO; 13 import cn.iocoder.yudao.module.system.api.oauth2.dto.OAuth2AccessTokenCheckRespDTO;
11 import lombok.RequiredArgsConstructor; 14 import lombok.RequiredArgsConstructor;
12 import org.jeecg.modules.jmreport.api.JmReportTokenServiceI; 15 import org.jeecg.modules.jmreport.api.JmReportTokenServiceI;
  16 +import org.springframework.http.HttpHeaders;
  17 +
  18 +import javax.servlet.http.HttpServletRequest;
  19 +import java.util.Objects;
13 20
14 /** 21 /**
15 * {@link JmReportTokenServiceI} 实现类,提供积木报表的 Token 校验、用户信息的查询等功能 22 * {@link JmReportTokenServiceI} 实现类,提供积木报表的 Token 校验、用户信息的查询等功能
@@ -19,8 +26,37 @@ import org.jeecg.modules.jmreport.api.JmReportTokenServiceI; @@ -19,8 +26,37 @@ import org.jeecg.modules.jmreport.api.JmReportTokenServiceI;
19 @RequiredArgsConstructor 26 @RequiredArgsConstructor
20 public class JmReportTokenServiceImpl implements JmReportTokenServiceI { 27 public class JmReportTokenServiceImpl implements JmReportTokenServiceI {
21 28
  29 + /**
  30 + * 积木 token head 头
  31 + */
  32 + private static final String JM_TOKEN_HEADER = "X-Access-Token";
  33 + /**
  34 + * auth 相关格式
  35 + */
  36 + private static final String AUTHORIZATION_FORMAT = SecurityFrameworkUtils.AUTHORIZATION_BEARER + " %s";
  37 +
22 private final OAuth2TokenApi oauth2TokenApi; 38 private final OAuth2TokenApi oauth2TokenApi;
23 39
  40 + private final SecurityProperties securityProperties;
  41 +
  42 + /**
  43 + * 自定义 API 数据集appian自定义 Header,解决 Token 传递。
  44 + * 参考 <a href="http://report.jeecg.com/2222224">api数据集token机制详解</a> 文档
  45 + *
  46 + * @return 新 head
  47 + */
  48 + @Override
  49 + public HttpHeaders customApiHeader() {
  50 + // 读取积木标标系统的 token
  51 + HttpServletRequest request = ServletUtils.getRequest();
  52 + String token = request.getHeader(JM_TOKEN_HEADER);
  53 +
  54 + // 设置到 yudao 系统的 token
  55 + HttpHeaders headers = new HttpHeaders();
  56 + headers.add(securityProperties.getTokenHeader(), String.format(AUTHORIZATION_FORMAT, token));
  57 + return headers;
  58 + }
  59 +
24 /** 60 /**
25 * 校验 Token 是否有效,即验证通过 61 * 校验 Token 是否有效,即验证通过
26 * 62 *
@@ -29,8 +65,40 @@ public class JmReportTokenServiceImpl implements JmReportTokenServiceI { @@ -29,8 +65,40 @@ public class JmReportTokenServiceImpl implements JmReportTokenServiceI {
29 */ 65 */
30 @Override 66 @Override
31 public Boolean verifyToken(String token) { 67 public Boolean verifyToken(String token) {
  68 + Long userId = SecurityFrameworkUtils.getLoginUserId();
  69 + if (!Objects.isNull(userId)) {
  70 + return true;
  71 + }
  72 + return buildLoginUserByToken(token) != null;
  73 + }
  74 +
  75 + /**
  76 + * 获得用户编号
  77 + * <p>
  78 + * 虽然方法名获得的是 username,实际对应到项目中是用户编号
  79 + *
  80 + * @param token JmReport 前端传递的 token
  81 + * @return 用户编号
  82 + */
  83 + @Override
  84 + public String getUsername(String token) {
  85 + Long userId = SecurityFrameworkUtils.getLoginUserId();
  86 + if (ObjectUtil.isNotNull(userId)) {
  87 + return String.valueOf(userId);
  88 + }
  89 + LoginUser user = buildLoginUserByToken(token);
  90 + return user == null ? null : String.valueOf(user.getId());
  91 + }
  92 +
  93 + /**
  94 + * 基于 token 构建登录用户
  95 + *
  96 + * @param token token
  97 + * @return 返回 token 对应的用户信息
  98 + */
  99 + private LoginUser buildLoginUserByToken(String token) {
32 if (StrUtil.isEmpty(token)) { 100 if (StrUtil.isEmpty(token)) {
33 - return false; 101 + return null;
34 } 102 }
35 // TODO 如下的实现不算特别优雅,主要咱是不想搞的太复杂,所以参考对应的 Filter 先实现了 103 // TODO 如下的实现不算特别优雅,主要咱是不想搞的太复杂,所以参考对应的 Filter 先实现了
36 104
@@ -41,7 +109,7 @@ public class JmReportTokenServiceImpl implements JmReportTokenServiceI { @@ -41,7 +109,7 @@ public class JmReportTokenServiceImpl implements JmReportTokenServiceI {
41 try { 109 try {
42 OAuth2AccessTokenCheckRespDTO accessToken = oauth2TokenApi.checkAccessToken(token); 110 OAuth2AccessTokenCheckRespDTO accessToken = oauth2TokenApi.checkAccessToken(token);
43 if (accessToken == null) { 111 if (accessToken == null) {
44 - return false; 112 + return null;
45 } 113 }
46 user = new LoginUser().setId(accessToken.getUserId()).setUserType(accessToken.getUserType()) 114 user = new LoginUser().setId(accessToken.getUserId()).setUserType(accessToken.getUserType())
47 .setTenantId(accessToken.getTenantId()).setScopes(accessToken.getScopes()); 115 .setTenantId(accessToken.getTenantId()).setScopes(accessToken.getScopes());
@@ -49,7 +117,7 @@ public class JmReportTokenServiceImpl implements JmReportTokenServiceI { @@ -49,7 +117,7 @@ public class JmReportTokenServiceImpl implements JmReportTokenServiceI {
49 // do nothing:如果报错,说明认证失败,则返回 false 即可 117 // do nothing:如果报错,说明认证失败,则返回 false 即可
50 } 118 }
51 if (user == null) { 119 if (user == null) {
52 - return false; 120 + return null;
53 } 121 }
54 SecurityFrameworkUtils.setLoginUser(user, WebFrameworkUtils.getRequest()); 122 SecurityFrameworkUtils.setLoginUser(user, WebFrameworkUtils.getRequest());
55 123
@@ -57,21 +125,7 @@ public class JmReportTokenServiceImpl implements JmReportTokenServiceI { @@ -57,21 +125,7 @@ public class JmReportTokenServiceImpl implements JmReportTokenServiceI {
57 // 目的:基于 LoginUser 获得到的租户编号,设置到 Tenant 上下文,避免查询数据库时的报错 125 // 目的:基于 LoginUser 获得到的租户编号,设置到 Tenant 上下文,避免查询数据库时的报错
58 TenantContextHolder.setIgnore(false); 126 TenantContextHolder.setIgnore(false);
59 TenantContextHolder.setTenantId(user.getTenantId()); 127 TenantContextHolder.setTenantId(user.getTenantId());
60 - return true;  
61 - }  
62 -  
63 - /**  
64 - * 获得用户编号  
65 - *  
66 - * 虽然方法名获得的是 username,实际对应到项目中是用户编号  
67 - *  
68 - * @param token JmReport 前端传递的 token  
69 - * @return 用户编号  
70 - */  
71 - @Override  
72 - public String getUsername(String token) {  
73 - Long userId = SecurityFrameworkUtils.getLoginUserId();  
74 - return userId != null ? String.valueOf(userId) : null; 128 + return user;
75 } 129 }
76 130
77 } 131 }
yudao-server/pom.xml
@@ -104,7 +104,7 @@ @@ -104,7 +104,7 @@
104 <plugin> 104 <plugin>
105 <groupId>org.springframework.boot</groupId> 105 <groupId>org.springframework.boot</groupId>
106 <artifactId>spring-boot-maven-plugin</artifactId> 106 <artifactId>spring-boot-maven-plugin</artifactId>
107 - <version>2.7.6</version> <!-- 如果 spring.boot.version 版本修改,则这里也要跟着修改 --> 107 + <version>2.7.7</version> <!-- 如果 spring.boot.version 版本修改,则这里也要跟着修改 -->
108 <configuration> 108 <configuration>
109 <fork>true</fork> 109 <fork>true</fork>
110 </configuration> 110 </configuration>
yudao-server/src/main/resources/application.yaml
@@ -97,6 +97,11 @@ yudao: @@ -97,6 +97,11 @@ yudao:
97 security: 97 security:
98 permit-all_urls: 98 permit-all_urls:
99 - /admin-ui/** # /resources/admin-ui 目录下的静态资源 99 - /admin-ui/** # /resources/admin-ui 目录下的静态资源
  100 + websocket:
  101 + enable: true # websocket的开关
  102 + path: /websocket/message # 路径
  103 + maxOnlineCount: 0 # 最大连接人数
  104 + sessionMap: true # 保存sessionMap
100 swagger: 105 swagger:
101 title: 管理后台 106 title: 管理后台
102 description: 提供管理员管理的所有功能 107 description: 提供管理员管理的所有功能
yudao-ui-admin-vue3/README.md
@@ -34,7 +34,7 @@ @@ -34,7 +34,7 @@
34 | [TypeScript](https://www.typescriptlang.org/docs/) | JavaScript 的超集 | 4.9.4 | 34 | [TypeScript](https://www.typescriptlang.org/docs/) | JavaScript 的超集 | 4.9.4 |
35 | [pinia](https://pinia.vuejs.org/) | Vue 存储库 替代 vuex5 | 2.0.28 | 35 | [pinia](https://pinia.vuejs.org/) | Vue 存储库 替代 vuex5 | 2.0.28 |
36 | [vueuse](https://vueuse.org/) | 常用工具集 | 9.10.0 | 36 | [vueuse](https://vueuse.org/) | 常用工具集 | 9.10.0 |
37 -| [vxe-table](https://vxetable.cn/) | vue 最强表单 | 4.3.7 | 37 +| [vxe-table](https://vxetable.cn/) | vue 最强表单 | 4.3.9 |
38 | [vue-i18n](https://kazupon.github.io/vue-i18n/zh/introduction.html/) | 国际化 | 9.2.2 | 38 | [vue-i18n](https://kazupon.github.io/vue-i18n/zh/introduction.html/) | 国际化 | 9.2.2 |
39 | [vue-router](https://router.vuejs.org/) | vue 路由 | 4.1.6 | 39 | [vue-router](https://router.vuejs.org/) | vue 路由 | 4.1.6 |
40 | [windicss](https://cn.windicss.org/) | 下一代工具优先的 CSS 框架 | 3.5.6 | 40 | [windicss](https://cn.windicss.org/) | 下一代工具优先的 CSS 框架 | 3.5.6 |
yudao-ui-admin-vue3/package.json
1 { 1 {
2 "name": "yudao-ui-admin-vue3", 2 "name": "yudao-ui-admin-vue3",
3 - "version": "1.6.5.1901", 3 + "version": "1.6.6-snapshot.1912",
4 "description": "基于vue3、vite4、element-plus、typesScript", 4 "description": "基于vue3、vite4、element-plus、typesScript",
5 "author": "xingyu", 5 "author": "xingyu",
6 "private": false, 6 "private": false,
@@ -42,7 +42,7 @@ @@ -42,7 +42,7 @@
42 "lodash-es": "^4.17.21", 42 "lodash-es": "^4.17.21",
43 "mitt": "^3.0.0", 43 "mitt": "^3.0.0",
44 "nprogress": "^0.2.0", 44 "nprogress": "^0.2.0",
45 - "pinia": "^2.0.28", 45 + "pinia": "^2.0.29",
46 "qrcode": "^1.5.1", 46 "qrcode": "^1.5.1",
47 "qs": "^6.11.0", 47 "qs": "^6.11.0",
48 "url": "^0.11.0", 48 "url": "^0.11.0",
@@ -50,14 +50,14 @@ @@ -50,14 +50,14 @@
50 "vue-i18n": "9.2.2", 50 "vue-i18n": "9.2.2",
51 "vue-router": "^4.1.6", 51 "vue-router": "^4.1.6",
52 "vue-types": "^5.0.2", 52 "vue-types": "^5.0.2",
53 - "vxe-table": "^4.3.7", 53 + "vxe-table": "^4.3.9",
54 "web-storage-cache": "^1.1.1", 54 "web-storage-cache": "^1.1.1",
55 "xe-utils": "^3.5.7" 55 "xe-utils": "^3.5.7"
56 }, 56 },
57 "devDependencies": { 57 "devDependencies": {
58 - "@commitlint/cli": "^17.3.0",  
59 - "@commitlint/config-conventional": "^17.3.0",  
60 - "@iconify/json": "^2.2.1", 58 + "@commitlint/cli": "^17.4.2",
  59 + "@commitlint/config-conventional": "^17.4.2",
  60 + "@iconify/json": "^2.2.7",
61 "@intlify/unplugin-vue-i18n": "^0.8.1", 61 "@intlify/unplugin-vue-i18n": "^0.8.1",
62 "@purge-icons/generated": "^0.9.0", 62 "@purge-icons/generated": "^0.9.0",
63 "@types/intro.js": "^5.1.0", 63 "@types/intro.js": "^5.1.0",
@@ -66,32 +66,32 @@ @@ -66,32 +66,32 @@
66 "@types/nprogress": "^0.2.0", 66 "@types/nprogress": "^0.2.0",
67 "@types/qrcode": "^1.5.0", 67 "@types/qrcode": "^1.5.0",
68 "@types/qs": "^6.9.7", 68 "@types/qs": "^6.9.7",
69 - "@typescript-eslint/eslint-plugin": "^5.48.0",  
70 - "@typescript-eslint/parser": "^5.48.0", 69 + "@typescript-eslint/eslint-plugin": "^5.48.1",
  70 + "@typescript-eslint/parser": "^5.48.1",
71 "@vitejs/plugin-legacy": "^3.0.1", 71 "@vitejs/plugin-legacy": "^3.0.1",
72 "@vitejs/plugin-vue": "^4.0.0", 72 "@vitejs/plugin-vue": "^4.0.0",
73 "@vitejs/plugin-vue-jsx": "^3.0.0", 73 "@vitejs/plugin-vue-jsx": "^3.0.0",
74 "autoprefixer": "^10.4.13", 74 "autoprefixer": "^10.4.13",
75 "consola": "^2.15.3", 75 "consola": "^2.15.3",
76 - "eslint": "^8.31.0", 76 + "eslint": "^8.32.0",
77 "eslint-config-prettier": "^8.6.0", 77 "eslint-config-prettier": "^8.6.0",
78 - "eslint-define-config": "^1.13.0", 78 + "eslint-define-config": "^1.14.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.9.0",
81 "lint-staged": "^13.1.0", 81 "lint-staged": "^13.1.0",
82 - "postcss": "^8.4.20", 82 + "postcss": "^8.4.21",
83 "postcss-html": "^1.5.0", 83 "postcss-html": "^1.5.0",
84 "postcss-scss": "^4.0.6", 84 "postcss-scss": "^4.0.6",
85 - "prettier": "^2.8.1",  
86 - "rimraf": "^3.0.2",  
87 - "rollup": "^3.9.1", 85 + "prettier": "^2.8.3",
  86 + "rimraf": "^4.0.7",
  87 + "rollup": "^3.10.0",
88 "sass": "^1.57.1", 88 "sass": "^1.57.1",
89 "stylelint": "^14.16.1", 89 "stylelint": "^14.16.1",
90 "stylelint-config-html": "^1.1.0", 90 "stylelint-config-html": "^1.1.0",
91 "stylelint-config-prettier": "^9.0.4", 91 "stylelint-config-prettier": "^9.0.4",
92 "stylelint-config-recommended": "^9.0.0", 92 "stylelint-config-recommended": "^9.0.0",
93 "stylelint-config-standard": "^29.0.0", 93 "stylelint-config-standard": "^29.0.0",
94 - "stylelint-order": "^5.0.0", 94 + "stylelint-order": "^6.0.1",
95 "terser": "^5.16.1", 95 "terser": "^5.16.1",
96 "typescript": "4.9.4", 96 "typescript": "4.9.4",
97 "vite": "4.0.4", 97 "vite": "4.0.4",
@@ -104,7 +104,7 @@ @@ -104,7 +104,7 @@
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.10", 106 "vite-plugin-windicss": "^1.8.10",
107 - "vue-tsc": "^1.0.20", 107 + "vue-tsc": "^1.0.24",
108 "windicss": "^3.5.6" 108 "windicss": "^3.5.6"
109 }, 109 },
110 "engines": { 110 "engines": {
yudao-ui-admin-vue3/pnpm-lock.yaml
1 lockfileVersion: 5.4 1 lockfileVersion: 5.4
2 2
3 specifiers: 3 specifiers:
4 - '@commitlint/cli': ^17.3.0  
5 - '@commitlint/config-conventional': ^17.3.0 4 + '@commitlint/cli': ^17.4.2
  5 + '@commitlint/config-conventional': ^17.4.2
6 '@iconify/iconify': ^3.0.1 6 '@iconify/iconify': ^3.0.1
7 - '@iconify/json': ^2.2.1 7 + '@iconify/json': ^2.2.7
8 '@intlify/unplugin-vue-i18n': ^0.8.1 8 '@intlify/unplugin-vue-i18n': ^0.8.1
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
@@ -13,8 +13,8 @@ specifiers: @@ -13,8 +13,8 @@ specifiers:
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.48.0  
17 - '@typescript-eslint/parser': ^5.48.0 16 + '@typescript-eslint/eslint-plugin': ^5.48.1
  17 + '@typescript-eslint/parser': ^5.48.1
18 '@vitejs/plugin-legacy': ^3.0.1 18 '@vitejs/plugin-legacy': ^3.0.1
19 '@vitejs/plugin-vue': ^4.0.0 19 '@vitejs/plugin-vue': ^4.0.0
20 '@vitejs/plugin-vue-jsx': ^3.0.0 20 '@vitejs/plugin-vue-jsx': ^3.0.0
@@ -32,33 +32,33 @@ specifiers: @@ -32,33 +32,33 @@ specifiers:
32 echarts: ^5.4.1 32 echarts: ^5.4.1
33 echarts-wordcloud: ^2.1.0 33 echarts-wordcloud: ^2.1.0
34 element-plus: 2.2.28 34 element-plus: 2.2.28
35 - eslint: ^8.31.0 35 + eslint: ^8.32.0
36 eslint-config-prettier: ^8.6.0 36 eslint-config-prettier: ^8.6.0
37 - eslint-define-config: ^1.13.0 37 + eslint-define-config: ^1.14.0
38 eslint-plugin-prettier: ^4.2.1 38 eslint-plugin-prettier: ^4.2.1
39 - eslint-plugin-vue: ^9.8.0 39 + eslint-plugin-vue: ^9.9.0
40 intro.js: ^6.0.0 40 intro.js: ^6.0.0
41 jsencrypt: ^3.3.1 41 jsencrypt: ^3.3.1
42 lint-staged: ^13.1.0 42 lint-staged: ^13.1.0
43 lodash-es: ^4.17.21 43 lodash-es: ^4.17.21
44 mitt: ^3.0.0 44 mitt: ^3.0.0
45 nprogress: ^0.2.0 45 nprogress: ^0.2.0
46 - pinia: ^2.0.28  
47 - postcss: ^8.4.20 46 + pinia: ^2.0.29
  47 + postcss: ^8.4.21
48 postcss-html: ^1.5.0 48 postcss-html: ^1.5.0
49 postcss-scss: ^4.0.6 49 postcss-scss: ^4.0.6
50 - prettier: ^2.8.1 50 + prettier: ^2.8.3
51 qrcode: ^1.5.1 51 qrcode: ^1.5.1
52 qs: ^6.11.0 52 qs: ^6.11.0
53 - rimraf: ^3.0.2  
54 - rollup: ^3.9.1 53 + rimraf: ^4.0.7
  54 + rollup: ^3.10.0
55 sass: ^1.57.1 55 sass: ^1.57.1
56 stylelint: ^14.16.1 56 stylelint: ^14.16.1
57 stylelint-config-html: ^1.1.0 57 stylelint-config-html: ^1.1.0
58 stylelint-config-prettier: ^9.0.4 58 stylelint-config-prettier: ^9.0.4
59 stylelint-config-recommended: ^9.0.0 59 stylelint-config-recommended: ^9.0.0
60 stylelint-config-standard: ^29.0.0 60 stylelint-config-standard: ^29.0.0
61 - stylelint-order: ^5.0.0 61 + stylelint-order: ^6.0.1
62 terser: ^5.16.1 62 terser: ^5.16.1
63 typescript: 4.9.4 63 typescript: 4.9.4
64 url: ^0.11.0 64 url: ^0.11.0
@@ -75,9 +75,9 @@ specifiers: @@ -75,9 +75,9 @@ specifiers:
75 vue: 3.2.45 75 vue: 3.2.45
76 vue-i18n: 9.2.2 76 vue-i18n: 9.2.2
77 vue-router: ^4.1.6 77 vue-router: ^4.1.6
78 - vue-tsc: ^1.0.20 78 + vue-tsc: ^1.0.24
79 vue-types: ^5.0.2 79 vue-types: ^5.0.2
80 - vxe-table: ^4.3.7 80 + vxe-table: ^4.3.9
81 web-storage-cache: ^1.1.1 81 web-storage-cache: ^1.1.1
82 windicss: ^3.5.6 82 windicss: ^3.5.6
83 xe-utils: ^3.5.7 83 xe-utils: ^3.5.7
@@ -93,7 +93,7 @@ dependencies: @@ -93,7 +93,7 @@ dependencies:
93 cropperjs: 1.5.13 93 cropperjs: 1.5.13
94 crypto-js: 4.1.1 94 crypto-js: 4.1.1
95 dayjs: 1.11.7 95 dayjs: 1.11.7
96 - echarts: registry.npmmirror.com/echarts/5.4.1 96 + echarts: 5.4.1
97 echarts-wordcloud: 2.1.0_echarts@5.4.1 97 echarts-wordcloud: 2.1.0_echarts@5.4.1
98 element-plus: 2.2.28_vue@3.2.45 98 element-plus: 2.2.28_vue@3.2.45
99 intro.js: 6.0.0 99 intro.js: 6.0.0
@@ -101,7 +101,7 @@ dependencies: @@ -101,7 +101,7 @@ dependencies:
101 lodash-es: 4.17.21 101 lodash-es: 4.17.21
102 mitt: 3.0.0 102 mitt: 3.0.0
103 nprogress: 0.2.0 103 nprogress: 0.2.0
104 - pinia: registry.npmmirror.com/pinia/2.0.28_prq2uz4lho2pwp6irk4cfkrxwu 104 + pinia: 2.0.29_prq2uz4lho2pwp6irk4cfkrxwu
105 qrcode: 1.5.1 105 qrcode: 1.5.1
106 qs: 6.11.0 106 qs: 6.11.0
107 url: 0.11.0 107 url: 0.11.0
@@ -109,14 +109,14 @@ dependencies: @@ -109,14 +109,14 @@ dependencies:
109 vue-i18n: 9.2.2_vue@3.2.45 109 vue-i18n: 9.2.2_vue@3.2.45
110 vue-router: 4.1.6_vue@3.2.45 110 vue-router: 4.1.6_vue@3.2.45
111 vue-types: 5.0.2_vue@3.2.45 111 vue-types: 5.0.2_vue@3.2.45
112 - vxe-table: registry.npmmirror.com/vxe-table/4.3.7_vue@3.2.45+xe-utils@3.5.7 112 + vxe-table: 4.3.9_vue@3.2.45+xe-utils@3.5.7
113 web-storage-cache: 1.1.1 113 web-storage-cache: 1.1.1
114 xe-utils: 3.5.7 114 xe-utils: 3.5.7
115 115
116 devDependencies: 116 devDependencies:
117 - '@commitlint/cli': 17.3.0  
118 - '@commitlint/config-conventional': 17.3.0  
119 - '@iconify/json': 2.2.1 117 + '@commitlint/cli': 17.4.2
  118 + '@commitlint/config-conventional': 17.4.2
  119 + '@iconify/json': 2.2.7
120 '@intlify/unplugin-vue-i18n': 0.8.1_vue-i18n@9.2.2 120 '@intlify/unplugin-vue-i18n': 0.8.1_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
@@ -125,66 +125,258 @@ devDependencies: @@ -125,66 +125,258 @@ devDependencies:
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.48.0_k73wpmdolxikpyqun3p36akaaq  
129 - '@typescript-eslint/parser': 5.48.0_iukboom6ndih5an6iafl45j2fe  
130 - '@vitejs/plugin-legacy': registry.npmmirror.com/@vitejs/plugin-legacy/3.0.1_terser@5.16.1+vite@4.0.4  
131 - '@vitejs/plugin-vue': registry.npmmirror.com/@vitejs/plugin-vue/4.0.0_vite@4.0.4+vue@3.2.45  
132 - '@vitejs/plugin-vue-jsx': registry.npmmirror.com/@vitejs/plugin-vue-jsx/3.0.0_vite@4.0.4+vue@3.2.45  
133 - autoprefixer: 10.4.13_postcss@8.4.20 128 + '@typescript-eslint/eslint-plugin': 5.48.1_oomjohfipuyaxs2zyomcx4f5by
  129 + '@typescript-eslint/parser': 5.48.1_7uibuqfxkfaozanbtbziikiqje
  130 + '@vitejs/plugin-legacy': 3.0.1_terser@5.16.1+vite@4.0.4
  131 + '@vitejs/plugin-vue': 4.0.0_vite@4.0.4+vue@3.2.45
  132 + '@vitejs/plugin-vue-jsx': 3.0.0_vite@4.0.4+vue@3.2.45
  133 + autoprefixer: 10.4.13_postcss@8.4.21
134 consola: 2.15.3 134 consola: 2.15.3
135 - eslint: 8.31.0  
136 - eslint-config-prettier: 8.6.0_eslint@8.31.0  
137 - eslint-define-config: 1.13.0  
138 - eslint-plugin-prettier: 4.2.1_32m5uc2milwdw3tnkcq5del26y  
139 - eslint-plugin-vue: 9.8.0_eslint@8.31.0 135 + eslint: 8.32.0
  136 + eslint-config-prettier: 8.6.0_eslint@8.32.0
  137 + eslint-define-config: 1.14.0
  138 + eslint-plugin-prettier: 4.2.1_cn4lalcyadplruoxa5mhp7j3dq
  139 + eslint-plugin-vue: 9.9.0_eslint@8.32.0
140 lint-staged: 13.1.0 140 lint-staged: 13.1.0
141 - postcss: registry.npmmirror.com/postcss/8.4.20 141 + postcss: 8.4.21
142 postcss-html: 1.5.0 142 postcss-html: 1.5.0
143 - postcss-scss: 4.0.6_postcss@8.4.20  
144 - prettier: 2.8.1  
145 - rimraf: 3.0.2  
146 - rollup: 3.9.1 143 + postcss-scss: 4.0.6_postcss@8.4.21
  144 + prettier: 2.8.3
  145 + rimraf: 4.0.7
  146 + rollup: 3.10.0
147 sass: 1.57.1 147 sass: 1.57.1
148 stylelint: 14.16.1 148 stylelint: 14.16.1
149 stylelint-config-html: 1.1.0_kbto3rg3njmczth2rrsgfnlsqa 149 stylelint-config-html: 1.1.0_kbto3rg3njmczth2rrsgfnlsqa
150 stylelint-config-prettier: 9.0.4_stylelint@14.16.1 150 stylelint-config-prettier: 9.0.4_stylelint@14.16.1
151 stylelint-config-recommended: 9.0.0_stylelint@14.16.1 151 stylelint-config-recommended: 9.0.0_stylelint@14.16.1
152 stylelint-config-standard: 29.0.0_stylelint@14.16.1 152 stylelint-config-standard: 29.0.0_stylelint@14.16.1
153 - stylelint-order: 5.0.0_stylelint@14.16.1 153 + stylelint-order: 6.0.1_stylelint@14.16.1
154 terser: 5.16.1 154 terser: 5.16.1
155 typescript: 4.9.4 155 typescript: 4.9.4
156 vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i 156 vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i
157 vite-plugin-compression: 0.5.1_vite@4.0.4 157 vite-plugin-compression: 0.5.1_vite@4.0.4
158 vite-plugin-ejs: 1.6.4 158 vite-plugin-ejs: 1.6.4
159 - vite-plugin-eslint: 1.8.1_eslint@8.31.0+vite@4.0.4 159 + vite-plugin-eslint: 1.8.1_eslint@8.32.0+vite@4.0.4
160 vite-plugin-progress: 0.0.6_vite@4.0.4 160 vite-plugin-progress: 0.0.6_vite@4.0.4
161 - vite-plugin-purge-icons: registry.npmmirror.com/vite-plugin-purge-icons/0.9.2_vite@4.0.4 161 + vite-plugin-purge-icons: 0.9.2_vite@4.0.4
162 vite-plugin-style-import: 2.0.0_vite@4.0.4 162 vite-plugin-style-import: 2.0.0_vite@4.0.4
163 vite-plugin-svg-icons: 2.0.1_vite@4.0.4 163 vite-plugin-svg-icons: 2.0.1_vite@4.0.4
164 vite-plugin-vue-setup-extend: 0.4.0_vite@4.0.4 164 vite-plugin-vue-setup-extend: 0.4.0_vite@4.0.4
165 - vite-plugin-windicss: registry.npmmirror.com/vite-plugin-windicss/1.8.10_vite@4.0.4  
166 - vue-tsc: 1.0.20_typescript@4.9.4 165 + vite-plugin-windicss: 1.8.10_vite@4.0.4
  166 + vue-tsc: 1.0.24_typescript@4.9.4
167 windicss: 3.5.6 167 windicss: 3.5.6
168 168
169 packages: 169 packages:
170 170
  171 + /@ampproject/remapping/2.2.0:
  172 + resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@ampproject/remapping/-/remapping-2.2.0.tgz}
  173 + engines: {node: '>=6.0.0'}
  174 + dependencies:
  175 + '@jridgewell/gen-mapping': 0.1.1
  176 + '@jridgewell/trace-mapping': 0.3.17
  177 + dev: true
  178 +
  179 + /@antfu/utils/0.7.2:
  180 + resolution: {integrity: sha512-vy9fM3pIxZmX07dL+VX1aZe7ynZ+YyB0jY+jE6r3hOK6GNY2t6W8rzpFC4tgpbXUYABkFQwgJq2XYXlxbXAI0g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@antfu/utils/-/utils-0.7.2.tgz}
  181 + dev: true
  182 +
171 /@babel/code-frame/7.18.6: 183 /@babel/code-frame/7.18.6:
172 - resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} 184 + resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/code-frame/-/code-frame-7.18.6.tgz}
173 engines: {node: '>=6.9.0'} 185 engines: {node: '>=6.9.0'}
174 dependencies: 186 dependencies:
175 '@babel/highlight': 7.18.6 187 '@babel/highlight': 7.18.6
176 dev: true 188 dev: true
177 189
  190 + /@babel/compat-data/7.20.1:
  191 + resolution: {integrity: sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/compat-data/-/compat-data-7.20.1.tgz}
  192 + engines: {node: '>=6.9.0'}
  193 + dev: true
  194 +
  195 + /@babel/core/7.20.5:
  196 + resolution: {integrity: sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/core/-/core-7.20.5.tgz}
  197 + engines: {node: '>=6.9.0'}
  198 + dependencies:
  199 + '@ampproject/remapping': 2.2.0
  200 + '@babel/code-frame': 7.18.6
  201 + '@babel/generator': 7.20.5
  202 + '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.5
  203 + '@babel/helper-module-transforms': 7.20.2
  204 + '@babel/helpers': 7.20.6
  205 + '@babel/parser': 7.20.5
  206 + '@babel/template': 7.18.10
  207 + '@babel/traverse': 7.20.5
  208 + '@babel/types': 7.20.5
  209 + convert-source-map: 1.9.0
  210 + debug: 4.3.4
  211 + gensync: 1.0.0-beta.2
  212 + json5: 2.2.1
  213 + semver: 6.3.0
  214 + transitivePeerDependencies:
  215 + - supports-color
  216 + dev: true
  217 +
  218 + /@babel/generator/7.20.5:
  219 + resolution: {integrity: sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/generator/-/generator-7.20.5.tgz}
  220 + engines: {node: '>=6.9.0'}
  221 + dependencies:
  222 + '@babel/types': 7.20.5
  223 + '@jridgewell/gen-mapping': 0.3.2
  224 + jsesc: 2.5.2
  225 + dev: true
  226 +
  227 + /@babel/helper-annotate-as-pure/7.18.6:
  228 + resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz}
  229 + engines: {node: '>=6.9.0'}
  230 + dependencies:
  231 + '@babel/types': 7.20.5
  232 + dev: true
  233 +
  234 + /@babel/helper-compilation-targets/7.20.0_@babel+core@7.20.5:
  235 + resolution: {integrity: sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz}
  236 + engines: {node: '>=6.9.0'}
  237 + peerDependencies:
  238 + '@babel/core': ^7.0.0
  239 + dependencies:
  240 + '@babel/compat-data': 7.20.1
  241 + '@babel/core': 7.20.5
  242 + '@babel/helper-validator-option': 7.18.6
  243 + browserslist: 4.21.4
  244 + semver: 6.3.0
  245 + dev: true
  246 +
  247 + /@babel/helper-create-class-features-plugin/7.20.2_@babel+core@7.20.5:
  248 + resolution: {integrity: sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz}
  249 + engines: {node: '>=6.9.0'}
  250 + peerDependencies:
  251 + '@babel/core': ^7.0.0
  252 + dependencies:
  253 + '@babel/core': 7.20.5
  254 + '@babel/helper-annotate-as-pure': 7.18.6
  255 + '@babel/helper-environment-visitor': 7.18.9
  256 + '@babel/helper-function-name': 7.19.0
  257 + '@babel/helper-member-expression-to-functions': 7.18.9
  258 + '@babel/helper-optimise-call-expression': 7.18.6
  259 + '@babel/helper-replace-supers': 7.19.1
  260 + '@babel/helper-split-export-declaration': 7.18.6
  261 + transitivePeerDependencies:
  262 + - supports-color
  263 + dev: true
  264 +
  265 + /@babel/helper-environment-visitor/7.18.9:
  266 + resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz}
  267 + engines: {node: '>=6.9.0'}
  268 + dev: true
  269 +
  270 + /@babel/helper-function-name/7.19.0:
  271 + resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz}
  272 + engines: {node: '>=6.9.0'}
  273 + dependencies:
  274 + '@babel/template': 7.18.10
  275 + '@babel/types': 7.20.5
  276 + dev: true
  277 +
  278 + /@babel/helper-hoist-variables/7.18.6:
  279 + resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz}
  280 + engines: {node: '>=6.9.0'}
  281 + dependencies:
  282 + '@babel/types': 7.20.5
  283 + dev: true
  284 +
  285 + /@babel/helper-member-expression-to-functions/7.18.9:
  286 + resolution: {integrity: sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz}
  287 + engines: {node: '>=6.9.0'}
  288 + dependencies:
  289 + '@babel/types': 7.20.5
  290 + dev: true
  291 +
  292 + /@babel/helper-module-imports/7.18.6:
  293 + resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz}
  294 + engines: {node: '>=6.9.0'}
  295 + dependencies:
  296 + '@babel/types': 7.20.5
  297 + dev: true
  298 +
  299 + /@babel/helper-module-transforms/7.20.2:
  300 + resolution: {integrity: sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz}
  301 + engines: {node: '>=6.9.0'}
  302 + dependencies:
  303 + '@babel/helper-environment-visitor': 7.18.9
  304 + '@babel/helper-module-imports': 7.18.6
  305 + '@babel/helper-simple-access': 7.20.2
  306 + '@babel/helper-split-export-declaration': 7.18.6
  307 + '@babel/helper-validator-identifier': 7.19.1
  308 + '@babel/template': 7.18.10
  309 + '@babel/traverse': 7.20.5
  310 + '@babel/types': 7.20.5
  311 + transitivePeerDependencies:
  312 + - supports-color
  313 + dev: true
  314 +
  315 + /@babel/helper-optimise-call-expression/7.18.6:
  316 + resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz}
  317 + engines: {node: '>=6.9.0'}
  318 + dependencies:
  319 + '@babel/types': 7.20.5
  320 + dev: true
  321 +
  322 + /@babel/helper-plugin-utils/7.20.2:
  323 + resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz}
  324 + engines: {node: '>=6.9.0'}
  325 + dev: true
  326 +
  327 + /@babel/helper-replace-supers/7.19.1:
  328 + resolution: {integrity: sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz}
  329 + engines: {node: '>=6.9.0'}
  330 + dependencies:
  331 + '@babel/helper-environment-visitor': 7.18.9
  332 + '@babel/helper-member-expression-to-functions': 7.18.9
  333 + '@babel/helper-optimise-call-expression': 7.18.6
  334 + '@babel/traverse': 7.20.5
  335 + '@babel/types': 7.20.5
  336 + transitivePeerDependencies:
  337 + - supports-color
  338 + dev: true
  339 +
  340 + /@babel/helper-simple-access/7.20.2:
  341 + resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz}
  342 + engines: {node: '>=6.9.0'}
  343 + dependencies:
  344 + '@babel/types': 7.20.5
  345 + dev: true
  346 +
  347 + /@babel/helper-split-export-declaration/7.18.6:
  348 + resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz}
  349 + engines: {node: '>=6.9.0'}
  350 + dependencies:
  351 + '@babel/types': 7.20.5
  352 + dev: true
  353 +
178 /@babel/helper-string-parser/7.19.4: 354 /@babel/helper-string-parser/7.19.4:
179 - resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} 355 + resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz}
180 engines: {node: '>=6.9.0'} 356 engines: {node: '>=6.9.0'}
181 357
182 /@babel/helper-validator-identifier/7.19.1: 358 /@babel/helper-validator-identifier/7.19.1:
183 - resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} 359 + resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz}
  360 + engines: {node: '>=6.9.0'}
  361 +
  362 + /@babel/helper-validator-option/7.18.6:
  363 + resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz}
  364 + engines: {node: '>=6.9.0'}
  365 + dev: true
  366 +
  367 + /@babel/helpers/7.20.6:
  368 + resolution: {integrity: sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/helpers/-/helpers-7.20.6.tgz}
184 engines: {node: '>=6.9.0'} 369 engines: {node: '>=6.9.0'}
  370 + dependencies:
  371 + '@babel/template': 7.18.10
  372 + '@babel/traverse': 7.20.5
  373 + '@babel/types': 7.20.5
  374 + transitivePeerDependencies:
  375 + - supports-color
  376 + dev: true
185 377
186 /@babel/highlight/7.18.6: 378 /@babel/highlight/7.18.6:
187 - resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} 379 + resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/highlight/-/highlight-7.18.6.tgz}
188 engines: {node: '>=6.9.0'} 380 engines: {node: '>=6.9.0'}
189 dependencies: 381 dependencies:
190 '@babel/helper-validator-identifier': 7.19.1 382 '@babel/helper-validator-identifier': 7.19.1
@@ -197,40 +389,133 @@ packages: @@ -197,40 +389,133 @@ packages:
197 engines: {node: '>=6.0.0'} 389 engines: {node: '>=6.0.0'}
198 hasBin: true 390 hasBin: true
199 dependencies: 391 dependencies:
200 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.5 392 + '@babel/types': 7.20.5
201 393
202 /@babel/parser/7.20.5: 394 /@babel/parser/7.20.5:
203 - resolution: {integrity: sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==} 395 + resolution: {integrity: sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/parser/-/parser-7.20.5.tgz}
204 engines: {node: '>=6.0.0'} 396 engines: {node: '>=6.0.0'}
205 hasBin: true 397 hasBin: true
206 dependencies: 398 dependencies:
207 '@babel/types': 7.20.5 399 '@babel/types': 7.20.5
208 400
  401 + /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.5:
  402 + resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz}
  403 + engines: {node: '>=6.9.0'}
  404 + peerDependencies:
  405 + '@babel/core': ^7.0.0-0
  406 + dependencies:
  407 + '@babel/core': 7.20.5
  408 + '@babel/helper-plugin-utils': 7.20.2
  409 + dev: true
  410 +
  411 + /@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.20.5:
  412 + resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz}
  413 + engines: {node: '>=6.9.0'}
  414 + peerDependencies:
  415 + '@babel/core': ^7.0.0-0
  416 + dependencies:
  417 + '@babel/core': 7.20.5
  418 + '@babel/helper-plugin-utils': 7.20.2
  419 + dev: true
  420 +
  421 + /@babel/plugin-transform-typescript/7.20.2_@babel+core@7.20.5:
  422 + resolution: {integrity: sha512-jvS+ngBfrnTUBfOQq8NfGnSbF9BrqlR6hjJ2yVxMkmO5nL/cdifNbI30EfjRlN4g5wYWNnMPyj5Sa6R1pbLeag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.2.tgz}
  423 + engines: {node: '>=6.9.0'}
  424 + peerDependencies:
  425 + '@babel/core': ^7.0.0-0
  426 + dependencies:
  427 + '@babel/core': 7.20.5
  428 + '@babel/helper-create-class-features-plugin': 7.20.2_@babel+core@7.20.5
  429 + '@babel/helper-plugin-utils': 7.20.2
  430 + '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.5
  431 + transitivePeerDependencies:
  432 + - supports-color
  433 + dev: true
  434 +
209 /@babel/runtime/7.20.1: 435 /@babel/runtime/7.20.1:
210 resolution: {integrity: sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==} 436 resolution: {integrity: sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==}
211 engines: {node: '>=6.9.0'} 437 engines: {node: '>=6.9.0'}
212 dependencies: 438 dependencies:
213 - regenerator-runtime: registry.npmmirror.com/regenerator-runtime/0.13.11 439 + regenerator-runtime: 0.13.11
214 dev: false 440 dev: false
215 441
  442 + /@babel/standalone/7.20.6:
  443 + resolution: {integrity: sha512-u5at/CbBLETf7kx2LOY4XdhseD79Y099WZKAOMXeT8qvd9OSR515my2UNBBLY4qIht/Qi9KySeQHQwQwxJN4Sw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/standalone/-/standalone-7.20.6.tgz}
  444 + engines: {node: '>=6.9.0'}
  445 + dev: true
  446 +
  447 + /@babel/template/7.18.10:
  448 + resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/template/-/template-7.18.10.tgz}
  449 + engines: {node: '>=6.9.0'}
  450 + dependencies:
  451 + '@babel/code-frame': 7.18.6
  452 + '@babel/parser': 7.20.5
  453 + '@babel/types': 7.20.5
  454 + dev: true
  455 +
  456 + /@babel/traverse/7.20.1:
  457 + resolution: {integrity: sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/traverse/-/traverse-7.20.1.tgz}
  458 + engines: {node: '>=6.9.0'}
  459 + dependencies:
  460 + '@babel/code-frame': 7.18.6
  461 + '@babel/generator': 7.20.5
  462 + '@babel/helper-environment-visitor': 7.18.9
  463 + '@babel/helper-function-name': 7.19.0
  464 + '@babel/helper-hoist-variables': 7.18.6
  465 + '@babel/helper-split-export-declaration': 7.18.6
  466 + '@babel/parser': 7.20.5
  467 + '@babel/types': 7.20.5
  468 + debug: 4.3.4
  469 + globals: 11.12.0
  470 + transitivePeerDependencies:
  471 + - supports-color
  472 + dev: true
  473 +
  474 + /@babel/traverse/7.20.5:
  475 + resolution: {integrity: sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/traverse/-/traverse-7.20.5.tgz}
  476 + engines: {node: '>=6.9.0'}
  477 + dependencies:
  478 + '@babel/code-frame': 7.18.6
  479 + '@babel/generator': 7.20.5
  480 + '@babel/helper-environment-visitor': 7.18.9
  481 + '@babel/helper-function-name': 7.19.0
  482 + '@babel/helper-hoist-variables': 7.18.6
  483 + '@babel/helper-split-export-declaration': 7.18.6
  484 + '@babel/parser': 7.20.5
  485 + '@babel/types': 7.20.5
  486 + debug: 4.3.4
  487 + globals: 11.12.0
  488 + transitivePeerDependencies:
  489 + - supports-color
  490 + dev: true
  491 +
  492 + /@babel/types/7.20.2:
  493 + resolution: {integrity: sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/types/-/types-7.20.2.tgz}
  494 + engines: {node: '>=6.9.0'}
  495 + dependencies:
  496 + '@babel/helper-string-parser': 7.19.4
  497 + '@babel/helper-validator-identifier': 7.19.1
  498 + to-fast-properties: 2.0.0
  499 + dev: true
  500 +
216 /@babel/types/7.20.5: 501 /@babel/types/7.20.5:
217 - resolution: {integrity: sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==} 502 + resolution: {integrity: sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/types/-/types-7.20.5.tgz}
218 engines: {node: '>=6.9.0'} 503 engines: {node: '>=6.9.0'}
219 dependencies: 504 dependencies:
220 '@babel/helper-string-parser': 7.19.4 505 '@babel/helper-string-parser': 7.19.4
221 '@babel/helper-validator-identifier': 7.19.1 506 '@babel/helper-validator-identifier': 7.19.1
222 to-fast-properties: 2.0.0 507 to-fast-properties: 2.0.0
223 508
224 - /@commitlint/cli/17.3.0:  
225 - resolution: {integrity: sha512-/H0md7TsKflKzVPz226VfXzVafJFO1f9+r2KcFvmBu08V0T56lZU1s8WL7/xlxqLMqBTVaBf7Ixtc4bskdEEZg==} 509 + /@commitlint/cli/17.4.2:
  510 + resolution: {integrity: sha512-0rPGJ2O1owhpxMIXL9YJ2CgPkdrFLKZElIZHXDN8L8+qWK1DGH7Q7IelBT1pchXTYTuDlqkOTdh//aTvT3bSUA==}
226 engines: {node: '>=v14'} 511 engines: {node: '>=v14'}
227 hasBin: true 512 hasBin: true
228 dependencies: 513 dependencies:
229 - '@commitlint/format': 17.0.0  
230 - '@commitlint/lint': 17.3.0  
231 - '@commitlint/load': 17.3.0  
232 - '@commitlint/read': 17.2.0  
233 - '@commitlint/types': 17.0.0 514 + '@commitlint/format': 17.4.0
  515 + '@commitlint/lint': 17.4.2
  516 + '@commitlint/load': 17.4.2
  517 + '@commitlint/read': 17.4.2
  518 + '@commitlint/types': 17.4.0
234 execa: 5.1.1 519 execa: 5.1.1
235 lodash.isfunction: 3.0.9 520 lodash.isfunction: 3.0.9
236 resolve-from: 5.0.0 521 resolve-from: 5.0.0
@@ -241,26 +526,26 @@ packages: @@ -241,26 +526,26 @@ packages:
241 - '@swc/wasm' 526 - '@swc/wasm'
242 dev: true 527 dev: true
243 528
244 - /@commitlint/config-conventional/17.3.0:  
245 - resolution: {integrity: sha512-hgI+fN5xF8nhS9uG/V06xyT0nlcyvHHMkq0kwRSr96vl5BFlRGaL2C0/YY4kQagfU087tmj01bJkG9Ek98Wllw==} 529 + /@commitlint/config-conventional/17.4.2:
  530 + resolution: {integrity: sha512-JVo1moSj5eDMoql159q8zKCU8lkOhQ+b23Vl3LVVrS6PXDLQIELnJ34ChQmFVbBdSSRNAbbXnRDhosFU+wnuHw==}
246 engines: {node: '>=v14'} 531 engines: {node: '>=v14'}
247 dependencies: 532 dependencies:
248 conventional-changelog-conventionalcommits: 5.0.0 533 conventional-changelog-conventionalcommits: 5.0.0
249 dev: true 534 dev: true
250 535
251 - /@commitlint/config-validator/17.1.0:  
252 - resolution: {integrity: sha512-Q1rRRSU09ngrTgeTXHq6ePJs2KrI+axPTgkNYDWSJIuS1Op4w3J30vUfSXjwn5YEJHklK3fSqWNHmBhmTR7Vdg==} 536 + /@commitlint/config-validator/17.4.0:
  537 + resolution: {integrity: sha512-Sa/+8KNpDXz4zT4bVbz2fpFjvgkPO6u2V2fP4TKgt6FjmOw2z3eEX859vtfeaTav/ukBw0/0jr+5ZTZp9zCBhA==}
253 engines: {node: '>=v14'} 538 engines: {node: '>=v14'}
254 dependencies: 539 dependencies:
255 - '@commitlint/types': 17.0.0 540 + '@commitlint/types': 17.4.0
256 ajv: 8.11.2 541 ajv: 8.11.2
257 dev: true 542 dev: true
258 543
259 - /@commitlint/ensure/17.3.0:  
260 - resolution: {integrity: sha512-kWbrQHDoW5veIUQx30gXoLOCjWvwC6OOEofhPCLl5ytRPBDAQObMbxTha1Bt2aSyNE/IrJ0s0xkdZ1Gi3wJwQg==} 544 + /@commitlint/ensure/17.4.0:
  545 + resolution: {integrity: sha512-7oAxt25je0jeQ/E0O/M8L3ADb1Cvweu/5lc/kYF8g/kXatI0wxGE5La52onnAUAWeWlsuvBNar15WcrmDmr5Mw==}
261 engines: {node: '>=v14'} 546 engines: {node: '>=v14'}
262 dependencies: 547 dependencies:
263 - '@commitlint/types': 17.0.0 548 + '@commitlint/types': 17.4.0
264 lodash.camelcase: 4.3.0 549 lodash.camelcase: 4.3.0
265 lodash.kebabcase: 4.1.1 550 lodash.kebabcase: 4.1.1
266 lodash.snakecase: 4.1.1 551 lodash.snakecase: 4.1.1
@@ -268,122 +553,122 @@ packages: @@ -268,122 +553,122 @@ packages:
268 lodash.upperfirst: 4.3.1 553 lodash.upperfirst: 4.3.1
269 dev: true 554 dev: true
270 555
271 - /@commitlint/execute-rule/17.0.0:  
272 - resolution: {integrity: sha512-nVjL/w/zuqjCqSJm8UfpNaw66V9WzuJtQvEnCrK4jDw6qKTmZB+1JQ8m6BQVZbNBcwfYdDNKnhIhqI0Rk7lgpQ==} 556 + /@commitlint/execute-rule/17.4.0:
  557 + resolution: {integrity: sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==}
273 engines: {node: '>=v14'} 558 engines: {node: '>=v14'}
274 dev: true 559 dev: true
275 560
276 - /@commitlint/format/17.0.0:  
277 - resolution: {integrity: sha512-MZzJv7rBp/r6ZQJDEodoZvdRM0vXu1PfQvMTNWFb8jFraxnISMTnPBWMMjr2G/puoMashwaNM//fl7j8gGV5lA==} 561 + /@commitlint/format/17.4.0:
  562 + resolution: {integrity: sha512-Z2bWAU5+f1YZh9W76c84J8iLIWIvvm+mzqogTz0Nsc1x6EHW0Z2gI38g5HAjB0r0I3ZjR15IDEJKhsxyblcyhA==}
278 engines: {node: '>=v14'} 563 engines: {node: '>=v14'}
279 dependencies: 564 dependencies:
280 - '@commitlint/types': 17.0.0 565 + '@commitlint/types': 17.4.0
281 chalk: 4.1.2 566 chalk: 4.1.2
282 dev: true 567 dev: true
283 568
284 - /@commitlint/is-ignored/17.2.0:  
285 - resolution: {integrity: sha512-rgUPUQraHxoMLxiE8GK430HA7/R2vXyLcOT4fQooNrZq9ERutNrP6dw3gdKLkq22Nede3+gEHQYUzL4Wu75ndg==} 569 + /@commitlint/is-ignored/17.4.2:
  570 + resolution: {integrity: sha512-1b2Y2qJ6n7bHG9K6h8S4lBGUl6kc7mMhJN9gy1SQfUZqe92ToDjUTtgNWb6LbzR1X8Cq4SEus4VU8Z/riEa94Q==}
286 engines: {node: '>=v14'} 571 engines: {node: '>=v14'}
287 dependencies: 572 dependencies:
288 - '@commitlint/types': 17.0.0  
289 - semver: registry.npmmirror.com/semver/7.3.7 573 + '@commitlint/types': 17.4.0
  574 + semver: 7.3.8
290 dev: true 575 dev: true
291 576
292 - /@commitlint/lint/17.3.0:  
293 - resolution: {integrity: sha512-VilOTPg0i9A7CCWM49E9bl5jytfTvfTxf9iwbWAWNjxJ/A5mhPKbm3sHuAdwJ87tDk1k4j8vomYfH23iaY+1Rw==} 577 + /@commitlint/lint/17.4.2:
  578 + resolution: {integrity: sha512-HcymabrdBhsDMNzIv146+ZPNBPBK5gMNsVH+el2lCagnYgCi/4ixrHooeVyS64Fgce2K26+MC7OQ4vVH8wQWVw==}
294 engines: {node: '>=v14'} 579 engines: {node: '>=v14'}
295 dependencies: 580 dependencies:
296 - '@commitlint/is-ignored': 17.2.0  
297 - '@commitlint/parse': 17.2.0  
298 - '@commitlint/rules': 17.3.0  
299 - '@commitlint/types': 17.0.0 581 + '@commitlint/is-ignored': 17.4.2
  582 + '@commitlint/parse': 17.4.2
  583 + '@commitlint/rules': 17.4.2
  584 + '@commitlint/types': 17.4.0
300 dev: true 585 dev: true
301 586
302 - /@commitlint/load/17.3.0:  
303 - resolution: {integrity: sha512-u/pV6rCAJrCUN+HylBHLzZ4qj1Ew3+eN9GBPhNi9otGxtOfA8b+8nJSxaNbcC23Ins/kcpjGf9zPSVW7628Umw==} 587 + /@commitlint/load/17.4.2:
  588 + resolution: {integrity: sha512-Si++F85rJ9t4hw6JcOw1i2h0fdpdFQt0YKwjuK4bk9KhFjyFkRxvR3SB2dPaMs+EwWlDrDBGL+ygip1QD6gmPw==}
304 engines: {node: '>=v14'} 589 engines: {node: '>=v14'}
305 dependencies: 590 dependencies:
306 - '@commitlint/config-validator': 17.1.0  
307 - '@commitlint/execute-rule': 17.0.0  
308 - '@commitlint/resolve-extends': 17.3.0  
309 - '@commitlint/types': 17.0.0  
310 - '@types/node': 14.18.33 591 + '@commitlint/config-validator': 17.4.0
  592 + '@commitlint/execute-rule': 17.4.0
  593 + '@commitlint/resolve-extends': 17.4.0
  594 + '@commitlint/types': 17.4.0
  595 + '@types/node': 18.11.18
311 chalk: 4.1.2 596 chalk: 4.1.2
312 - cosmiconfig: 7.1.0  
313 - cosmiconfig-typescript-loader: 4.2.0_wb7bklcl6jlvxijczjyxggip4a 597 + cosmiconfig: 8.0.0
  598 + cosmiconfig-typescript-loader: 4.2.0_bxtyj3et3xbsdyxhh3oblnfbj4
314 lodash.isplainobject: 4.0.6 599 lodash.isplainobject: 4.0.6
315 lodash.merge: 4.6.2 600 lodash.merge: 4.6.2
316 lodash.uniq: 4.5.0 601 lodash.uniq: 4.5.0
317 resolve-from: 5.0.0 602 resolve-from: 5.0.0
318 - ts-node: 10.9.1_rju6pyblifsagdmqm3y74zsi6q 603 + ts-node: 10.9.1_awa2wsr5thmg3i7jqycphctjfq
319 typescript: 4.9.4 604 typescript: 4.9.4
320 transitivePeerDependencies: 605 transitivePeerDependencies:
321 - '@swc/core' 606 - '@swc/core'
322 - '@swc/wasm' 607 - '@swc/wasm'
323 dev: true 608 dev: true
324 609
325 - /@commitlint/message/17.2.0:  
326 - resolution: {integrity: sha512-/4l2KFKxBOuoEn1YAuuNNlAU05Zt7sNsC9H0mPdPm3chOrT4rcX0pOqrQcLtdMrMkJz0gC7b3SF80q2+LtdL9Q==} 610 + /@commitlint/message/17.4.2:
  611 + resolution: {integrity: sha512-3XMNbzB+3bhKA1hSAWPCQA3lNxR4zaeQAQcHj0Hx5sVdO6ryXtgUBGGv+1ZCLMgAPRixuc6en+iNAzZ4NzAa8Q==}
327 engines: {node: '>=v14'} 612 engines: {node: '>=v14'}
328 dev: true 613 dev: true
329 614
330 - /@commitlint/parse/17.2.0:  
331 - resolution: {integrity: sha512-vLzLznK9Y21zQ6F9hf8D6kcIJRb2haAK5T/Vt1uW2CbHYOIfNsR/hJs0XnF/J9ctM20Tfsqv4zBitbYvVw7F6Q==} 615 + /@commitlint/parse/17.4.2:
  616 + resolution: {integrity: sha512-DK4EwqhxfXpyCA+UH8TBRIAXAfmmX4q9QRBz/2h9F9sI91yt6mltTrL6TKURMcjUVmgaB80wgS9QybNIyVBIJA==}
332 engines: {node: '>=v14'} 617 engines: {node: '>=v14'}
333 dependencies: 618 dependencies:
334 - '@commitlint/types': 17.0.0 619 + '@commitlint/types': 17.4.0
335 conventional-changelog-angular: 5.0.13 620 conventional-changelog-angular: 5.0.13
336 conventional-commits-parser: 3.2.4 621 conventional-commits-parser: 3.2.4
337 dev: true 622 dev: true
338 623
339 - /@commitlint/read/17.2.0:  
340 - resolution: {integrity: sha512-bbblBhrHkjxra3ptJNm0abxu7yeAaxumQ8ZtD6GIVqzURCETCP7Dm0tlVvGRDyXBuqX6lIJxh3W7oyKqllDsHQ==} 624 + /@commitlint/read/17.4.2:
  625 + resolution: {integrity: sha512-hasYOdbhEg+W4hi0InmXHxtD/1favB4WdwyFxs1eOy/DvMw6+2IZBmATgGOlqhahsypk4kChhxjAFJAZ2F+JBg==}
341 engines: {node: '>=v14'} 626 engines: {node: '>=v14'}
342 dependencies: 627 dependencies:
343 - '@commitlint/top-level': 17.0.0  
344 - '@commitlint/types': 17.0.0  
345 - fs-extra: 10.1.0 628 + '@commitlint/top-level': 17.4.0
  629 + '@commitlint/types': 17.4.0
  630 + fs-extra: 11.1.0
346 git-raw-commits: 2.0.11 631 git-raw-commits: 2.0.11
347 minimist: 1.2.7 632 minimist: 1.2.7
348 dev: true 633 dev: true
349 634
350 - /@commitlint/resolve-extends/17.3.0:  
351 - resolution: {integrity: sha512-Lf3JufJlc5yVEtJWC8o4IAZaB8FQAUaVlhlAHRACd0TTFizV2Lk2VH70et23KgvbQNf7kQzHs/2B4QZalBv6Cg==} 635 + /@commitlint/resolve-extends/17.4.0:
  636 + resolution: {integrity: sha512-3JsmwkrCzoK8sO22AzLBvNEvC1Pmdn/65RKXzEtQMy6oYMl0Snrq97a5bQQEFETF0VsvbtUuKttLqqgn99OXRQ==}
352 engines: {node: '>=v14'} 637 engines: {node: '>=v14'}
353 dependencies: 638 dependencies:
354 - '@commitlint/config-validator': 17.1.0  
355 - '@commitlint/types': 17.0.0 639 + '@commitlint/config-validator': 17.4.0
  640 + '@commitlint/types': 17.4.0
356 import-fresh: 3.3.0 641 import-fresh: 3.3.0
357 lodash.mergewith: 4.6.2 642 lodash.mergewith: 4.6.2
358 resolve-from: 5.0.0 643 resolve-from: 5.0.0
359 resolve-global: 1.0.0 644 resolve-global: 1.0.0
360 dev: true 645 dev: true
361 646
362 - /@commitlint/rules/17.3.0:  
363 - resolution: {integrity: sha512-s2UhDjC5yP2utx3WWqsnZRzjgzAX8BMwr1nltC0u0p8T/nzpkx4TojEfhlsOUj1t7efxzZRjUAV0NxNwdJyk+g==} 647 + /@commitlint/rules/17.4.2:
  648 + resolution: {integrity: sha512-OGrPsMb9Fx3/bZ64/EzJehY9YDSGWzp81Pj+zJiY+r/NSgJI3nUYdlS37jykNIugzazdEXfMtQ10kmA+Kx2pZQ==}
364 engines: {node: '>=v14'} 649 engines: {node: '>=v14'}
365 dependencies: 650 dependencies:
366 - '@commitlint/ensure': 17.3.0  
367 - '@commitlint/message': 17.2.0  
368 - '@commitlint/to-lines': 17.0.0  
369 - '@commitlint/types': 17.0.0 651 + '@commitlint/ensure': 17.4.0
  652 + '@commitlint/message': 17.4.2
  653 + '@commitlint/to-lines': 17.4.0
  654 + '@commitlint/types': 17.4.0
370 execa: 5.1.1 655 execa: 5.1.1
371 dev: true 656 dev: true
372 657
373 - /@commitlint/to-lines/17.0.0:  
374 - resolution: {integrity: sha512-nEi4YEz04Rf2upFbpnEorG8iymyH7o9jYIVFBG1QdzebbIFET3ir+8kQvCZuBE5pKCtViE4XBUsRZz139uFrRQ==} 658 + /@commitlint/to-lines/17.4.0:
  659 + resolution: {integrity: sha512-LcIy/6ZZolsfwDUWfN1mJ+co09soSuNASfKEU5sCmgFCvX5iHwRYLiIuoqXzOVDYOy7E7IcHilr/KS0e5T+0Hg==}
375 engines: {node: '>=v14'} 660 engines: {node: '>=v14'}
376 dev: true 661 dev: true
377 662
378 - /@commitlint/top-level/17.0.0:  
379 - resolution: {integrity: sha512-dZrEP1PBJvodNWYPOYiLWf6XZergdksKQaT6i1KSROLdjf5Ai0brLOv5/P+CPxBeoj3vBxK4Ax8H1Pg9t7sHIQ==} 663 + /@commitlint/top-level/17.4.0:
  664 + resolution: {integrity: sha512-/1loE/g+dTTQgHnjoCy0AexKAEFyHsR2zRB4NWrZ6lZSMIxAhBJnmCqwao7b4H8888PsfoTBCLBYIw8vGnej8g==}
380 engines: {node: '>=v14'} 665 engines: {node: '>=v14'}
381 dependencies: 666 dependencies:
382 find-up: 5.0.0 667 find-up: 5.0.0
383 dev: true 668 dev: true
384 669
385 - /@commitlint/types/17.0.0:  
386 - resolution: {integrity: sha512-hBAw6U+SkAT5h47zDMeOu3HSiD0SODw4Aq7rRNh1ceUmL7GyLKYhPbUvlRWqZ65XjBLPHZhFyQlRaPNz8qvUyQ==} 670 + /@commitlint/types/17.4.0:
  671 + resolution: {integrity: sha512-2NjAnq5IcxY9kXtUeO2Ac0aPpvkuOmwbH/BxIm36XXK5LtWFObWJWjXOA+kcaABMrthjWu6la+FUpyYFMHRvbA==}
387 engines: {node: '>=v14'} 672 engines: {node: '>=v14'}
388 dependencies: 673 dependencies:
389 chalk: 4.1.2 674 chalk: 4.1.2
@@ -393,17 +678,17 @@ packages: @@ -393,17 +678,17 @@ packages:
393 resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} 678 resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
394 engines: {node: '>=12'} 679 engines: {node: '>=12'}
395 dependencies: 680 dependencies:
396 - '@jridgewell/trace-mapping': registry.npmmirror.com/@jridgewell/trace-mapping/0.3.9 681 + '@jridgewell/trace-mapping': 0.3.9
397 dev: true 682 dev: true
398 683
399 - /@csstools/selector-specificity/2.0.2_2xshye3abirqjlplmebvmaxyna: 684 + /@csstools/selector-specificity/2.0.2_wajs5nedgkikc5pcuwett7legi:
400 resolution: {integrity: sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==} 685 resolution: {integrity: sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==}
401 engines: {node: ^12 || ^14 || >=16} 686 engines: {node: ^12 || ^14 || >=16}
402 peerDependencies: 687 peerDependencies:
403 postcss: ^8.2 688 postcss: ^8.2
404 postcss-selector-parser: ^6.0.10 689 postcss-selector-parser: ^6.0.10
405 dependencies: 690 dependencies:
406 - postcss: 8.4.20 691 + postcss: 8.4.21
407 postcss-selector-parser: 6.0.11 692 postcss-selector-parser: 6.0.11
408 dev: true 693 dev: true
409 694
@@ -665,13 +950,21 @@ packages: @@ -665,13 +950,21 @@ packages:
665 resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} 950 resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
666 dev: true 951 dev: true
667 952
  953 + /@iconify/iconify/2.1.2:
  954 + resolution: {integrity: sha512-QcUzFeEWkE/mW+BVtEGmcWATClcCOIJFiYUD/PiCWuTcdEA297o8D4oN6Ra44WrNOHu1wqNW4J0ioaDIiqaFOQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@iconify/iconify/-/iconify-2.1.2.tgz}
  955 + dependencies:
  956 + cross-fetch: 3.1.5
  957 + transitivePeerDependencies:
  958 + - encoding
  959 + dev: true
  960 +
668 /@iconify/iconify/3.0.1: 961 /@iconify/iconify/3.0.1:
669 resolution: {integrity: sha512-OPqVBTh8YsfrYZRVFv3OkmFNLqacM0dy/Oiw1h2wO+RZW5LieNGHlG2f9pzaeVRFWbEB8LHTeo8mcwgUTUbibQ==} 962 resolution: {integrity: sha512-OPqVBTh8YsfrYZRVFv3OkmFNLqacM0dy/Oiw1h2wO+RZW5LieNGHlG2f9pzaeVRFWbEB8LHTeo8mcwgUTUbibQ==}
670 dependencies: 963 dependencies:
671 '@iconify/types': 2.0.0 964 '@iconify/types': 2.0.0
672 965
673 - /@iconify/json/2.2.1:  
674 - resolution: {integrity: sha512-h6QAV4i0B/QdpJRWExgE5am3WtmNAy/NucsAGNtYsNzeLBa+TVig4QpO9nQrX172tQvEZAfSqUkvCx/y7GN0GQ==} 966 + /@iconify/json/2.2.7:
  967 + resolution: {integrity: sha512-cWDwr+KE0KNSFmxrR0rvM5AmP4JmJWCZiyhFZ1bywwBJsrV/x+19bLbEAvmn4pmKKYWCAy4F9clpVWynYslzoQ==}
675 dependencies: 968 dependencies:
676 '@iconify/types': 2.0.0 969 '@iconify/types': 2.0.0
677 pathe: 1.0.0 970 pathe: 1.0.0
@@ -692,8 +985,8 @@ packages: @@ -692,8 +985,8 @@ packages:
692 vue-i18n: 985 vue-i18n:
693 optional: true 986 optional: true
694 dependencies: 987 dependencies:
695 - '@intlify/message-compiler': 9.3.0-beta.12  
696 - '@intlify/shared': 9.3.0-beta.12 988 + '@intlify/message-compiler': 9.3.0-beta.16
  989 + '@intlify/shared': 9.3.0-beta.16
697 jsonc-eslint-parser: 1.4.1 990 jsonc-eslint-parser: 1.4.1
698 source-map: 0.6.1 991 source-map: 0.6.1
699 vue-i18n: 9.2.2_vue@3.2.45 992 vue-i18n: 9.2.2_vue@3.2.45
@@ -722,11 +1015,11 @@ packages: @@ -722,11 +1015,11 @@ packages:
722 '@intlify/shared': 9.2.2 1015 '@intlify/shared': 9.2.2
723 source-map: 0.6.1 1016 source-map: 0.6.1
724 1017
725 - /@intlify/message-compiler/9.3.0-beta.12:  
726 - resolution: {integrity: sha512-A8/s7pb3v8nf6HG77qFPJntxgQKI9GXxGnkn7aO+b03/X/GkF/4WceDSAIk3i+yLeIgszeBn9GZ23tSg4sTEHA==} 1018 + /@intlify/message-compiler/9.3.0-beta.16:
  1019 + resolution: {integrity: sha512-CGQI3xRcs1ET75eDQ0DUy3MRYOqTauRIIgaMoISKiF83gqRWg93FqN8lGMKcpBqaF4tI0JhsfosCaGiBL9+dnw==}
727 engines: {node: '>= 14'} 1020 engines: {node: '>= 14'}
728 dependencies: 1021 dependencies:
729 - '@intlify/shared': 9.3.0-beta.11 1022 + '@intlify/shared': 9.3.0-beta.16
730 source-map: 0.6.1 1023 source-map: 0.6.1
731 dev: true 1024 dev: true
732 1025
@@ -734,13 +1027,8 @@ packages: @@ -734,13 +1027,8 @@ packages:
734 resolution: {integrity: sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==} 1027 resolution: {integrity: sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==}
735 engines: {node: '>= 14'} 1028 engines: {node: '>= 14'}
736 1029
737 - /@intlify/shared/9.3.0-beta.11:  
738 - resolution: {integrity: sha512-CtbotesxTRiC3bRyXyv1NG39fkqJ790f8z8xFaeIXSZpOdiyxoh5BIyypCzSFQZDGLwz0Q9gyWbW1XpxQJm68Q==}  
739 - engines: {node: '>= 14'}  
740 - dev: true  
741 -  
742 - /@intlify/shared/9.3.0-beta.12:  
743 - resolution: {integrity: sha512-WsmaS54sA8xuwezPKpa/OMoaX1v2VF2fCgAmYS6prDr2ir0CkUFWPm9A8ilmxzv4nkS61/v8+vf4lGGkn5uBdA==} 1030 + /@intlify/shared/9.3.0-beta.16:
  1031 + resolution: {integrity: sha512-kXbm4svALe3lX+EjdJxfnabOphqS4yQ1Ge/iIlR8tvUiYRCoNz3hig1M4336iY++Dfx5ytEQJPNjIcknNIuvig==}
744 engines: {node: '>= 14'} 1032 engines: {node: '>= 14'}
745 dev: true 1033 dev: true
746 1034
@@ -760,7 +1048,7 @@ packages: @@ -760,7 +1048,7 @@ packages:
760 optional: true 1048 optional: true
761 dependencies: 1049 dependencies:
762 '@intlify/bundle-utils': 3.4.0_vue-i18n@9.2.2 1050 '@intlify/bundle-utils': 3.4.0_vue-i18n@9.2.2
763 - '@intlify/shared': 9.3.0-beta.12 1051 + '@intlify/shared': 9.3.0-beta.16
764 '@rollup/pluginutils': 4.2.1 1052 '@rollup/pluginutils': 4.2.1
765 '@vue/compiler-sfc': 3.2.45 1053 '@vue/compiler-sfc': 3.2.45
766 debug: 4.3.4 1054 debug: 4.3.4
@@ -783,13 +1071,31 @@ packages: @@ -783,13 +1071,31 @@ packages:
783 '@intlify/core-base': 9.2.2 1071 '@intlify/core-base': 9.2.2
784 '@intlify/shared': 9.2.2 1072 '@intlify/shared': 9.2.2
785 1073
  1074 + /@jridgewell/gen-mapping/0.1.1:
  1075 + resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz}
  1076 + engines: {node: '>=6.0.0'}
  1077 + dependencies:
  1078 + '@jridgewell/set-array': 1.1.2
  1079 + '@jridgewell/sourcemap-codec': 1.4.14
  1080 + dev: true
  1081 +
786 /@jridgewell/gen-mapping/0.3.2: 1082 /@jridgewell/gen-mapping/0.3.2:
787 resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} 1083 resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==}
788 engines: {node: '>=6.0.0'} 1084 engines: {node: '>=6.0.0'}
789 dependencies: 1085 dependencies:
790 - '@jridgewell/set-array': registry.npmmirror.com/@jridgewell/set-array/1.1.2  
791 - '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14  
792 - '@jridgewell/trace-mapping': registry.npmmirror.com/@jridgewell/trace-mapping/0.3.17 1086 + '@jridgewell/set-array': 1.1.2
  1087 + '@jridgewell/sourcemap-codec': 1.4.14
  1088 + '@jridgewell/trace-mapping': 0.3.17
  1089 + dev: true
  1090 +
  1091 + /@jridgewell/resolve-uri/3.1.0:
  1092 + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
  1093 + engines: {node: '>=6.0.0'}
  1094 + dev: true
  1095 +
  1096 + /@jridgewell/set-array/1.1.2:
  1097 + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@jridgewell/set-array/-/set-array-1.1.2.tgz}
  1098 + engines: {node: '>=6.0.0'}
793 dev: true 1099 dev: true
794 1100
795 /@jridgewell/source-map/0.3.2: 1101 /@jridgewell/source-map/0.3.2:
@@ -799,11 +1105,22 @@ packages: @@ -799,11 +1105,22 @@ packages:
799 '@jridgewell/trace-mapping': 0.3.17 1105 '@jridgewell/trace-mapping': 0.3.17
800 dev: true 1106 dev: true
801 1107
  1108 + /@jridgewell/sourcemap-codec/1.4.14:
  1109 + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
  1110 + dev: true
  1111 +
802 /@jridgewell/trace-mapping/0.3.17: 1112 /@jridgewell/trace-mapping/0.3.17:
803 resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} 1113 resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==}
804 dependencies: 1114 dependencies:
805 - '@jridgewell/resolve-uri': registry.npmmirror.com/@jridgewell/resolve-uri/3.1.0  
806 - '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14 1115 + '@jridgewell/resolve-uri': 3.1.0
  1116 + '@jridgewell/sourcemap-codec': 1.4.14
  1117 + dev: true
  1118 +
  1119 + /@jridgewell/trace-mapping/0.3.9:
  1120 + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
  1121 + dependencies:
  1122 + '@jridgewell/resolve-uri': 3.1.0
  1123 + '@jridgewell/sourcemap-codec': 1.4.14
807 dev: true 1124 dev: true
808 1125
809 /@nodelib/fs.scandir/2.1.5: 1126 /@nodelib/fs.scandir/2.1.5:
@@ -827,6 +1144,19 @@ packages: @@ -827,6 +1144,19 @@ packages:
827 fastq: 1.13.0 1144 fastq: 1.13.0
828 dev: true 1145 dev: true
829 1146
  1147 + /@purge-icons/core/0.9.1:
  1148 + resolution: {integrity: sha512-sx8/a30MbbqQVEqhuMPE1wJpdVRRbEmwEPZpFzVkcDixzX4p+R2A0WVxqkb0xfHUBAVQwrSE2SeAyniIQLqbLw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@purge-icons/core/-/core-0.9.1.tgz}
  1149 + dependencies:
  1150 + '@iconify/iconify': 2.1.2
  1151 + axios: 0.26.1_debug@4.3.4
  1152 + debug: 4.3.4
  1153 + fast-glob: 3.2.12
  1154 + fs-extra: 10.1.0
  1155 + transitivePeerDependencies:
  1156 + - encoding
  1157 + - supports-color
  1158 + dev: true
  1159 +
830 /@purge-icons/generated/0.9.0: 1160 /@purge-icons/generated/0.9.0:
831 resolution: {integrity: sha512-s2t+1oVtGDV6KtqfCXtUOhxfeYvOdDF90IVm+nMs/6bUP0HeGZLslguuL/AibpwtfL4FA/oCsIu/RhwapgAdJw==} 1161 resolution: {integrity: sha512-s2t+1oVtGDV6KtqfCXtUOhxfeYvOdDF90IVm+nMs/6bUP0HeGZLslguuL/AibpwtfL4FA/oCsIu/RhwapgAdJw==}
832 dependencies: 1162 dependencies:
@@ -909,10 +1239,6 @@ packages: @@ -909,10 +1239,6 @@ packages:
909 resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} 1239 resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==}
910 dev: true 1240 dev: true
911 1241
912 - /@types/node/14.18.33:  
913 - resolution: {integrity: sha512-qelS/Ra6sacc4loe/3MSjXNL1dNQ/GjxNHVzuChwMfmk7HuycRLVQN2qNY3XahK+fZc5E2szqQSKUyAF0E+2bg==}  
914 - dev: true  
915 -  
916 /@types/node/18.11.18: 1242 /@types/node/18.11.18:
917 resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} 1243 resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==}
918 dev: true 1244 dev: true
@@ -953,8 +1279,8 @@ packages: @@ -953,8 +1279,8 @@ packages:
953 resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} 1279 resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==}
954 dev: false 1280 dev: false
955 1281
956 - /@typescript-eslint/eslint-plugin/5.48.0_k73wpmdolxikpyqun3p36akaaq:  
957 - resolution: {integrity: sha512-SVLafp0NXpoJY7ut6VFVUU9I+YeFsDzeQwtK0WZ+xbRN3mtxJ08je+6Oi2N89qDn087COdO0u3blKZNv9VetRQ==} 1282 + /@typescript-eslint/eslint-plugin/5.48.1_oomjohfipuyaxs2zyomcx4f5by:
  1283 + resolution: {integrity: sha512-9nY5K1Rp2ppmpb9s9S2aBiF3xo5uExCehMDmYmmFqqyxgenbHJ3qbarcLt4ITgaD6r/2ypdlcFRdcuVPnks+fQ==}
958 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1284 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
959 peerDependencies: 1285 peerDependencies:
960 '@typescript-eslint/parser': ^5.0.0 1286 '@typescript-eslint/parser': ^5.0.0
@@ -964,12 +1290,12 @@ packages: @@ -964,12 +1290,12 @@ packages:
964 typescript: 1290 typescript:
965 optional: true 1291 optional: true
966 dependencies: 1292 dependencies:
967 - '@typescript-eslint/parser': 5.48.0_iukboom6ndih5an6iafl45j2fe  
968 - '@typescript-eslint/scope-manager': 5.48.0  
969 - '@typescript-eslint/type-utils': 5.48.0_iukboom6ndih5an6iafl45j2fe  
970 - '@typescript-eslint/utils': 5.48.0_iukboom6ndih5an6iafl45j2fe 1293 + '@typescript-eslint/parser': 5.48.1_7uibuqfxkfaozanbtbziikiqje
  1294 + '@typescript-eslint/scope-manager': 5.48.1
  1295 + '@typescript-eslint/type-utils': 5.48.1_7uibuqfxkfaozanbtbziikiqje
  1296 + '@typescript-eslint/utils': 5.48.1_7uibuqfxkfaozanbtbziikiqje
971 debug: 4.3.4 1297 debug: 4.3.4
972 - eslint: 8.31.0 1298 + eslint: 8.32.0
973 ignore: 5.2.1 1299 ignore: 5.2.1
974 natural-compare-lite: 1.4.0 1300 natural-compare-lite: 1.4.0
975 regexpp: 3.2.0 1301 regexpp: 3.2.0
@@ -980,8 +1306,8 @@ packages: @@ -980,8 +1306,8 @@ packages:
980 - supports-color 1306 - supports-color
981 dev: true 1307 dev: true
982 1308
983 - /@typescript-eslint/parser/5.48.0_iukboom6ndih5an6iafl45j2fe:  
984 - resolution: {integrity: sha512-1mxNA8qfgxX8kBvRDIHEzrRGrKHQfQlbW6iHyfHYS0Q4X1af+S6mkLNtgCOsGVl8+/LUPrqdHMssAemkrQ01qg==} 1309 + /@typescript-eslint/parser/5.48.1_7uibuqfxkfaozanbtbziikiqje:
  1310 + resolution: {integrity: sha512-4yg+FJR/V1M9Xoq56SF9Iygqm+r5LMXvheo6DQ7/yUWynQ4YfCRnsKuRgqH4EQ5Ya76rVwlEpw4Xu+TgWQUcdA==}
985 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1311 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
986 peerDependencies: 1312 peerDependencies:
987 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 1313 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
@@ -990,26 +1316,26 @@ packages: @@ -990,26 +1316,26 @@ packages:
990 typescript: 1316 typescript:
991 optional: true 1317 optional: true
992 dependencies: 1318 dependencies:
993 - '@typescript-eslint/scope-manager': 5.48.0  
994 - '@typescript-eslint/types': 5.48.0  
995 - '@typescript-eslint/typescript-estree': 5.48.0_typescript@4.9.4 1319 + '@typescript-eslint/scope-manager': 5.48.1
  1320 + '@typescript-eslint/types': 5.48.1
  1321 + '@typescript-eslint/typescript-estree': 5.48.1_typescript@4.9.4
996 debug: 4.3.4 1322 debug: 4.3.4
997 - eslint: 8.31.0 1323 + eslint: 8.32.0
998 typescript: 4.9.4 1324 typescript: 4.9.4
999 transitivePeerDependencies: 1325 transitivePeerDependencies:
1000 - supports-color 1326 - supports-color
1001 dev: true 1327 dev: true
1002 1328
1003 - /@typescript-eslint/scope-manager/5.48.0:  
1004 - resolution: {integrity: sha512-0AA4LviDtVtZqlyUQnZMVHydDATpD9SAX/RC5qh6cBd3xmyWvmXYF+WT1oOmxkeMnWDlUVTwdODeucUnjz3gow==} 1329 + /@typescript-eslint/scope-manager/5.48.1:
  1330 + resolution: {integrity: sha512-S035ueRrbxRMKvSTv9vJKIWgr86BD8s3RqoRZmsSh/s8HhIs90g6UlK8ZabUSjUZQkhVxt7nmZ63VJ9dcZhtDQ==}
1005 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1331 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1006 dependencies: 1332 dependencies:
1007 - '@typescript-eslint/types': 5.48.0  
1008 - '@typescript-eslint/visitor-keys': 5.48.0 1333 + '@typescript-eslint/types': 5.48.1
  1334 + '@typescript-eslint/visitor-keys': 5.48.1
1009 dev: true 1335 dev: true
1010 1336
1011 - /@typescript-eslint/type-utils/5.48.0_iukboom6ndih5an6iafl45j2fe:  
1012 - resolution: {integrity: sha512-vbtPO5sJyFjtHkGlGK4Sthmta0Bbls4Onv0bEqOGm7hP9h8UpRsHJwsrCiWtCUndTRNQO/qe6Ijz9rnT/DB+7g==} 1337 + /@typescript-eslint/type-utils/5.48.1_7uibuqfxkfaozanbtbziikiqje:
  1338 + resolution: {integrity: sha512-Hyr8HU8Alcuva1ppmqSYtM/Gp0q4JOp1F+/JH5D1IZm/bUBrV0edoewQZiEc1r6I8L4JL21broddxK8HAcZiqQ==}
1013 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1339 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1014 peerDependencies: 1340 peerDependencies:
1015 eslint: '*' 1341 eslint: '*'
@@ -1018,23 +1344,23 @@ packages: @@ -1018,23 +1344,23 @@ packages:
1018 typescript: 1344 typescript:
1019 optional: true 1345 optional: true
1020 dependencies: 1346 dependencies:
1021 - '@typescript-eslint/typescript-estree': 5.48.0_typescript@4.9.4  
1022 - '@typescript-eslint/utils': 5.48.0_iukboom6ndih5an6iafl45j2fe 1347 + '@typescript-eslint/typescript-estree': 5.48.1_typescript@4.9.4
  1348 + '@typescript-eslint/utils': 5.48.1_7uibuqfxkfaozanbtbziikiqje
1023 debug: 4.3.4 1349 debug: 4.3.4
1024 - eslint: 8.31.0 1350 + eslint: 8.32.0
1025 tsutils: 3.21.0_typescript@4.9.4 1351 tsutils: 3.21.0_typescript@4.9.4
1026 typescript: 4.9.4 1352 typescript: 4.9.4
1027 transitivePeerDependencies: 1353 transitivePeerDependencies:
1028 - supports-color 1354 - supports-color
1029 dev: true 1355 dev: true
1030 1356
1031 - /@typescript-eslint/types/5.48.0:  
1032 - resolution: {integrity: sha512-UTe67B0Ypius0fnEE518NB2N8gGutIlTojeTg4nt0GQvikReVkurqxd2LvYa9q9M5MQ6rtpNyWTBxdscw40Xhw==} 1357 + /@typescript-eslint/types/5.48.1:
  1358 + resolution: {integrity: sha512-xHyDLU6MSuEEdIlzrrAerCGS3T7AA/L8Hggd0RCYBi0w3JMvGYxlLlXHeg50JI9Tfg5MrtsfuNxbS/3zF1/ATg==}
1033 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1359 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1034 dev: true 1360 dev: true
1035 1361
1036 - /@typescript-eslint/typescript-estree/5.48.0_typescript@4.9.4:  
1037 - resolution: {integrity: sha512-7pjd94vvIjI1zTz6aq/5wwE/YrfIyEPLtGJmRfyNR9NYIW+rOvzzUv3Cmq2hRKpvt6e9vpvPUQ7puzX7VSmsEw==} 1362 + /@typescript-eslint/typescript-estree/5.48.1_typescript@4.9.4:
  1363 + resolution: {integrity: sha512-Hut+Osk5FYr+sgFh8J/FHjqX6HFcDzTlWLrFqGoK5kVUN3VBHF/QzZmAsIXCQ8T/W9nQNBTqalxi1P3LSqWnRA==}
1038 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1364 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1039 peerDependencies: 1365 peerDependencies:
1040 typescript: '*' 1366 typescript: '*'
@@ -1042,8 +1368,8 @@ packages: @@ -1042,8 +1368,8 @@ packages:
1042 typescript: 1368 typescript:
1043 optional: true 1369 optional: true
1044 dependencies: 1370 dependencies:
1045 - '@typescript-eslint/types': 5.48.0  
1046 - '@typescript-eslint/visitor-keys': 5.48.0 1371 + '@typescript-eslint/types': 5.48.1
  1372 + '@typescript-eslint/visitor-keys': 5.48.1
1047 debug: 4.3.4 1373 debug: 4.3.4
1048 globby: 11.1.0 1374 globby: 11.1.0
1049 is-glob: 4.0.3 1375 is-glob: 4.0.3
@@ -1054,31 +1380,31 @@ packages: @@ -1054,31 +1380,31 @@ packages:
1054 - supports-color 1380 - supports-color
1055 dev: true 1381 dev: true
1056 1382
1057 - /@typescript-eslint/utils/5.48.0_iukboom6ndih5an6iafl45j2fe:  
1058 - resolution: {integrity: sha512-x2jrMcPaMfsHRRIkL+x96++xdzvrdBCnYRd5QiW5Wgo1OB4kDYPbC1XjWP/TNqlfK93K/lUL92erq5zPLgFScQ==} 1383 + /@typescript-eslint/utils/5.48.1_7uibuqfxkfaozanbtbziikiqje:
  1384 + resolution: {integrity: sha512-SmQuSrCGUOdmGMwivW14Z0Lj8dxG1mOFZ7soeJ0TQZEJcs3n5Ndgkg0A4bcMFzBELqLJ6GTHnEU+iIoaD6hFGA==}
1059 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1385 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1060 peerDependencies: 1386 peerDependencies:
1061 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 1387 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
1062 dependencies: 1388 dependencies:
1063 '@types/json-schema': 7.0.11 1389 '@types/json-schema': 7.0.11
1064 '@types/semver': 7.3.13 1390 '@types/semver': 7.3.13
1065 - '@typescript-eslint/scope-manager': 5.48.0  
1066 - '@typescript-eslint/types': 5.48.0  
1067 - '@typescript-eslint/typescript-estree': 5.48.0_typescript@4.9.4  
1068 - eslint: 8.31.0 1391 + '@typescript-eslint/scope-manager': 5.48.1
  1392 + '@typescript-eslint/types': 5.48.1
  1393 + '@typescript-eslint/typescript-estree': 5.48.1_typescript@4.9.4
  1394 + eslint: 8.32.0
1069 eslint-scope: 5.1.1 1395 eslint-scope: 5.1.1
1070 - eslint-utils: 3.0.0_eslint@8.31.0 1396 + eslint-utils: 3.0.0_eslint@8.32.0
1071 semver: 7.3.8 1397 semver: 7.3.8
1072 transitivePeerDependencies: 1398 transitivePeerDependencies:
1073 - supports-color 1399 - supports-color
1074 - typescript 1400 - typescript
1075 dev: true 1401 dev: true
1076 1402
1077 - /@typescript-eslint/visitor-keys/5.48.0:  
1078 - resolution: {integrity: sha512-5motVPz5EgxQ0bHjut3chzBkJ3Z3sheYVcSwS5BpHZpLqSptSmELNtGixmgj65+rIfhvtQTz5i9OP2vtzdDH7Q==} 1403 + /@typescript-eslint/visitor-keys/5.48.1:
  1404 + resolution: {integrity: sha512-Ns0XBwmfuX7ZknznfXozgnydyR8F6ev/KEGePP4i74uL3ArsKbEhJ7raeKr1JSa997DBDwol/4a0Y+At82c9dA==}
1079 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1405 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1080 dependencies: 1406 dependencies:
1081 - '@typescript-eslint/types': 5.48.0 1407 + '@typescript-eslint/types': 5.48.1
1082 eslint-visitor-keys: 3.3.0 1408 eslint-visitor-keys: 3.3.0
1083 dev: true 1409 dev: true
1084 1410
@@ -1123,30 +1449,73 @@ packages: @@ -1123,30 +1449,73 @@ packages:
1123 nanoid: 3.3.4 1449 nanoid: 3.3.4
1124 dev: false 1450 dev: false
1125 1451
1126 - /@volar/language-core/1.0.20:  
1127 - resolution: {integrity: sha512-FU6TC+xQDLkBmp226NTeZ454MTb8VFLga6CIzWP+TsxuxGwB9Exvzof9TKpilIhTdF4IGVJJ4X1aCP6ycnLMbg==} 1452 + /@vitejs/plugin-legacy/3.0.1_terser@5.16.1+vite@4.0.4:
  1453 + resolution: {integrity: sha512-XCtEjxoR3rmy000ujYRBp5kggWqzHz9+F20/yIMUWOzbvu0+KW1e14Fvb8h7SpNn+bfjGW1RiAs1Vrgb7Js+iQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@vitejs/plugin-legacy/-/plugin-legacy-3.0.1.tgz}
  1454 + engines: {node: ^14.18.0 || >=16.0.0}
  1455 + peerDependencies:
  1456 + terser: ^5.4.0
  1457 + vite: ^4.0.0
  1458 + dependencies:
  1459 + '@babel/standalone': 7.20.6
  1460 + core-js: 3.26.1
  1461 + magic-string: 0.27.0
  1462 + regenerator-runtime: 0.13.11
  1463 + systemjs: 6.13.0
  1464 + terser: 5.16.1
  1465 + vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i
  1466 + dev: true
  1467 +
  1468 + /@vitejs/plugin-vue-jsx/3.0.0_vite@4.0.4+vue@3.2.45:
  1469 + resolution: {integrity: sha512-vurkuzgac5SYuxd2HUZqAFAWGTF10diKBwJNbCvnWijNZfXd+7jMtqjPFbGt7idOJUn584fP1Ar9j/GN2jQ3Ew==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-3.0.0.tgz}
  1470 + engines: {node: ^14.18.0 || >=16.0.0}
  1471 + peerDependencies:
  1472 + vite: ^4.0.0
  1473 + vue: ^3.0.0
  1474 + dependencies:
  1475 + '@babel/core': 7.20.5
  1476 + '@babel/plugin-transform-typescript': 7.20.2_@babel+core@7.20.5
  1477 + '@vue/babel-plugin-jsx': 1.1.1_@babel+core@7.20.5
  1478 + vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i
  1479 + vue: 3.2.45
  1480 + transitivePeerDependencies:
  1481 + - supports-color
  1482 + dev: true
  1483 +
  1484 + /@vitejs/plugin-vue/4.0.0_vite@4.0.4+vue@3.2.45:
  1485 + resolution: {integrity: sha512-e0X4jErIxAB5oLtDqbHvHpJe/uWNkdpYV83AOG2xo2tEVSzCzewgJMtREZM30wXnM5ls90hxiOtAuVU6H5JgbA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@vitejs/plugin-vue/-/plugin-vue-4.0.0.tgz}
  1486 + engines: {node: ^14.18.0 || >=16.0.0}
  1487 + peerDependencies:
  1488 + vite: ^4.0.0
  1489 + vue: ^3.2.25
  1490 + dependencies:
  1491 + vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i
  1492 + vue: 3.2.45
  1493 + dev: true
  1494 +
  1495 + /@volar/language-core/1.0.24:
  1496 + resolution: {integrity: sha512-vTN+alJiWwK0Pax6POqrmevbtFW2dXhjwWiW/MW4f48eDYPLdyURWcr8TixO7EN/nHsUBj2udT7igFKPtjyAKg==}
1128 dependencies: 1497 dependencies:
1129 - '@volar/source-map': 1.0.20 1498 + '@volar/source-map': 1.0.24
1130 muggle-string: 0.1.0 1499 muggle-string: 0.1.0
1131 dev: true 1500 dev: true
1132 1501
1133 - /@volar/source-map/1.0.20:  
1134 - resolution: {integrity: sha512-6wwrvAjuy7HepvHW7CqCw5b57YIFrj9mcfJvjic1WCX9TqjnXAcuHFqiUPid7EdZ4SCRKCYQbWmWreThYbHaZw==} 1502 + /@volar/source-map/1.0.24:
  1503 + resolution: {integrity: sha512-Qsv/tkplx18pgBr8lKAbM1vcDqgkGKQzbChg6NW+v0CZc3G7FLmK+WrqEPzKlN7Cwdc6XVL559Nod8WKAfKr4A==}
1135 dependencies: 1504 dependencies:
1136 muggle-string: 0.1.0 1505 muggle-string: 0.1.0
1137 dev: true 1506 dev: true
1138 1507
1139 - /@volar/typescript/1.0.20:  
1140 - resolution: {integrity: sha512-98D2+rC4igqPL7emqIf0NtIx3UYXZ8xqILiP/ihwP7G2T4oyoGr2vKEOwo49sUzvgUvQl2AI5p8ZQ71mFJfP7w==} 1508 + /@volar/typescript/1.0.24:
  1509 + resolution: {integrity: sha512-f8hCSk+PfKR1/RQHxZ79V1NpDImHoivqoizK+mstphm25tn/YJ/JnKNjZHB+o21fuW0yKlI26NV3jkVb2Cc/7A==}
1141 dependencies: 1510 dependencies:
1142 - '@volar/language-core': 1.0.20 1511 + '@volar/language-core': 1.0.24
1143 dev: true 1512 dev: true
1144 1513
1145 - /@volar/vue-language-core/1.0.20:  
1146 - resolution: {integrity: sha512-Zz6yuxtA6BG6YU8KPwV4qhO5kh3e2Et6+YOu0QC43SiDgjIw2Vzzi+qAqm8UYofg9UBn82OArO1L+VrZPCCK8A==} 1514 + /@volar/vue-language-core/1.0.24:
  1515 + resolution: {integrity: sha512-2NTJzSgrwKu6uYwPqLiTMuAzi7fAY3yFy5PJ255bGJc82If0Xr+cW8pC80vpjG0D/aVLmlwAdO4+Ya2BI8GdDg==}
1147 dependencies: 1516 dependencies:
1148 - '@volar/language-core': 1.0.20  
1149 - '@volar/source-map': 1.0.20 1517 + '@volar/language-core': 1.0.24
  1518 + '@volar/source-map': 1.0.24
1150 '@vue/compiler-dom': 3.2.45 1519 '@vue/compiler-dom': 3.2.45
1151 '@vue/compiler-sfc': 3.2.45 1520 '@vue/compiler-sfc': 3.2.45
1152 '@vue/reactivity': 3.2.45 1521 '@vue/reactivity': 3.2.45
@@ -1155,11 +1524,32 @@ packages: @@ -1155,11 +1524,32 @@ packages:
1155 vue-template-compiler: 2.7.14 1524 vue-template-compiler: 2.7.14
1156 dev: true 1525 dev: true
1157 1526
1158 - /@volar/vue-typescript/1.0.20:  
1159 - resolution: {integrity: sha512-FxucnAIZc503CfkdEGmUSw8EQfT31gi0DST7YmCNBK3cWOqJTF7UaHaBDpejnYGbsB568KZQbWTLNSpid5S/lA==} 1527 + /@volar/vue-typescript/1.0.24:
  1528 + resolution: {integrity: sha512-9a25oHDvGaNC0okRS47uqJI6FxY4hUQZUsxeOUFHcqVxZEv8s17LPuP/pMMXyz7jPygrZubB/qXqHY5jEu/akA==}
  1529 + dependencies:
  1530 + '@volar/typescript': 1.0.24
  1531 + '@volar/vue-language-core': 1.0.24
  1532 + dev: true
  1533 +
  1534 + /@vue/babel-helper-vue-transform-on/1.0.2:
  1535 + resolution: {integrity: sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz}
  1536 + dev: true
  1537 +
  1538 + /@vue/babel-plugin-jsx/1.1.1_@babel+core@7.20.5:
  1539 + resolution: {integrity: sha512-j2uVfZjnB5+zkcbc/zsOc0fSNGCMMjaEXP52wdwdIfn0qjFfEYpYZBFKFg+HHnQeJCVrjOeO0YxgaL7DMrym9w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.1.tgz}
1160 dependencies: 1540 dependencies:
1161 - '@volar/typescript': 1.0.20  
1162 - '@volar/vue-language-core': 1.0.20 1541 + '@babel/helper-module-imports': 7.18.6
  1542 + '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.5
  1543 + '@babel/template': 7.18.10
  1544 + '@babel/traverse': 7.20.1
  1545 + '@babel/types': 7.20.2
  1546 + '@vue/babel-helper-vue-transform-on': 1.0.2
  1547 + camelcase: 6.3.0
  1548 + html-tags: 3.2.0
  1549 + svg-tags: 1.0.0
  1550 + transitivePeerDependencies:
  1551 + - '@babel/core'
  1552 + - supports-color
1163 dev: true 1553 dev: true
1164 1554
1165 /@vue/compiler-core/3.2.45: 1555 /@vue/compiler-core/3.2.45:
@@ -1186,8 +1576,8 @@ packages: @@ -1186,8 +1576,8 @@ packages:
1186 '@vue/reactivity-transform': 3.2.45 1576 '@vue/reactivity-transform': 3.2.45
1187 '@vue/shared': 3.2.45 1577 '@vue/shared': 3.2.45
1188 estree-walker: 2.0.2 1578 estree-walker: 2.0.2
1189 - magic-string: registry.npmmirror.com/magic-string/0.25.9  
1190 - postcss: registry.npmmirror.com/postcss/8.4.20 1579 + magic-string: 0.25.9
  1580 + postcss: 8.4.21
1191 source-map: 0.6.1 1581 source-map: 0.6.1
1192 1582
1193 /@vue/compiler-ssr/3.2.45: 1583 /@vue/compiler-ssr/3.2.45:
@@ -1197,7 +1587,7 @@ packages: @@ -1197,7 +1587,7 @@ packages:
1197 '@vue/shared': 3.2.45 1587 '@vue/shared': 3.2.45
1198 1588
1199 /@vue/devtools-api/6.4.5: 1589 /@vue/devtools-api/6.4.5:
1200 - resolution: {integrity: sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ==} 1590 + resolution: {integrity: sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@vue/devtools-api/-/devtools-api-6.4.5.tgz}
1201 1591
1202 /@vue/reactivity-transform/3.2.45: 1592 /@vue/reactivity-transform/3.2.45:
1203 resolution: {integrity: sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==} 1593 resolution: {integrity: sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==}
@@ -1206,7 +1596,7 @@ packages: @@ -1206,7 +1596,7 @@ packages:
1206 '@vue/compiler-core': 3.2.45 1596 '@vue/compiler-core': 3.2.45
1207 '@vue/shared': 3.2.45 1597 '@vue/shared': 3.2.45
1208 estree-walker: 2.0.2 1598 estree-walker: 2.0.2
1209 - magic-string: registry.npmmirror.com/magic-string/0.25.9 1599 + magic-string: 0.25.9
1210 1600
1211 /@vue/reactivity/3.2.45: 1601 /@vue/reactivity/3.2.45:
1212 resolution: {integrity: sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==} 1602 resolution: {integrity: sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==}
@@ -1449,6 +1839,30 @@ packages: @@ -1449,6 +1839,30 @@ packages:
1449 snabbdom: 3.5.1 1839 snabbdom: 3.5.1
1450 dev: false 1840 dev: false
1451 1841
  1842 + /@windicss/config/1.8.10:
  1843 + resolution: {integrity: sha512-O9SsC110b1Ik3YYa4Ck/0TWuCo7YFfA9KDrwD5sAeqscT5COIGK1HszdCT3oh0MJFej2wNrvpfyW9h6yQaW6PA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@windicss/config/-/config-1.8.10.tgz}
  1844 + dependencies:
  1845 + debug: 4.3.4
  1846 + jiti: 1.16.0
  1847 + windicss: 3.5.6
  1848 + transitivePeerDependencies:
  1849 + - supports-color
  1850 + dev: true
  1851 +
  1852 + /@windicss/plugin-utils/1.8.10:
  1853 + resolution: {integrity: sha512-Phqk5OW1w+Mv+ry6t7BzAeDq3aMhbI94gR49j9vQCufFfDGCHndhhjtMK0sBv+NPJUsIAIh6qayb1iwBCXUGrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@windicss/plugin-utils/-/plugin-utils-1.8.10.tgz}
  1854 + dependencies:
  1855 + '@antfu/utils': 0.7.2
  1856 + '@windicss/config': 1.8.10
  1857 + debug: 4.3.4
  1858 + fast-glob: 3.2.12
  1859 + magic-string: 0.27.0
  1860 + micromatch: 4.0.5
  1861 + windicss: 3.5.6
  1862 + transitivePeerDependencies:
  1863 + - supports-color
  1864 + dev: true
  1865 +
1452 /@zxcvbn-ts/core/2.1.0: 1866 /@zxcvbn-ts/core/2.1.0:
1453 resolution: {integrity: sha512-doxol9xrO7LgyVJhguXe7vO0xthnIYmsOKoDwrLg0Ho2kkpQaVtM+AOQw+BkEiKIqNg1V48eUf4/cTzMElXdiA==} 1867 resolution: {integrity: sha512-doxol9xrO7LgyVJhguXe7vO0xthnIYmsOKoDwrLg0Ho2kkpQaVtM+AOQw+BkEiKIqNg1V48eUf4/cTzMElXdiA==}
1454 dev: false 1868 dev: false
@@ -1554,7 +1968,7 @@ packages: @@ -1554,7 +1968,7 @@ packages:
1554 resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 1968 resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
1555 engines: {node: '>=4'} 1969 engines: {node: '>=4'}
1556 dependencies: 1970 dependencies:
1557 - color-convert: registry.npmmirror.com/color-convert/1.9.3 1971 + color-convert: 1.9.3
1558 dev: true 1972 dev: true
1559 1973
1560 /ansi-styles/4.3.0: 1974 /ansi-styles/4.3.0:
@@ -1562,7 +1976,6 @@ packages: @@ -1562,7 +1976,6 @@ packages:
1562 engines: {node: '>=8'} 1976 engines: {node: '>=8'}
1563 dependencies: 1977 dependencies:
1564 color-convert: 2.0.1 1978 color-convert: 2.0.1
1565 - dev: true  
1566 1979
1567 /ansi-styles/6.2.1: 1980 /ansi-styles/6.2.1:
1568 resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 1981 resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
@@ -1647,7 +2060,7 @@ packages: @@ -1647,7 +2060,7 @@ packages:
1647 hasBin: true 2060 hasBin: true
1648 dev: true 2061 dev: true
1649 2062
1650 - /autoprefixer/10.4.13_postcss@8.4.20: 2063 + /autoprefixer/10.4.13_postcss@8.4.21:
1651 resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==} 2064 resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==}
1652 engines: {node: ^10 || ^12 || >=14} 2065 engines: {node: ^10 || ^12 || >=14}
1653 hasBin: true 2066 hasBin: true
@@ -1659,7 +2072,7 @@ packages: @@ -1659,7 +2072,7 @@ packages:
1659 fraction.js: 4.2.0 2072 fraction.js: 4.2.0
1660 normalize-range: 0.1.2 2073 normalize-range: 0.1.2
1661 picocolors: 1.0.0 2074 picocolors: 1.0.0
1662 - postcss: registry.npmmirror.com/postcss/8.4.20 2075 + postcss: 8.4.21
1663 postcss-value-parser: 4.2.0 2076 postcss-value-parser: 4.2.0
1664 dev: true 2077 dev: true
1665 2078
@@ -1732,11 +2145,29 @@ packages: @@ -1732,11 +2145,29 @@ packages:
1732 balanced-match: 1.0.2 2145 balanced-match: 1.0.2
1733 dev: true 2146 dev: true
1734 2147
  2148 + /braces/2.3.2:
  2149 + resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/braces/-/braces-2.3.2.tgz}
  2150 + engines: {node: '>=0.10.0'}
  2151 + dependencies:
  2152 + arr-flatten: 1.1.0
  2153 + array-unique: 0.3.2
  2154 + extend-shallow: 2.0.1
  2155 + fill-range: 4.0.0
  2156 + isobject: 3.0.1
  2157 + repeat-element: 1.1.4
  2158 + snapdragon: 0.8.2
  2159 + snapdragon-node: 2.1.1
  2160 + split-string: 3.1.0
  2161 + to-regex: 3.0.2
  2162 + transitivePeerDependencies:
  2163 + - supports-color
  2164 + dev: true
  2165 +
1735 /braces/3.0.2: 2166 /braces/3.0.2:
1736 resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 2167 resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
1737 engines: {node: '>=8'} 2168 engines: {node: '>=8'}
1738 dependencies: 2169 dependencies:
1739 - fill-range: registry.npmmirror.com/fill-range/7.0.1 2170 + fill-range: 7.0.1
1740 dev: true 2171 dev: true
1741 2172
1742 /browserslist/4.21.4: 2173 /browserslist/4.21.4:
@@ -1785,18 +2216,27 @@ packages: @@ -1785,18 +2216,27 @@ packages:
1785 resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} 2216 resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==}
1786 dependencies: 2217 dependencies:
1787 pascal-case: 3.1.2 2218 pascal-case: 3.1.2
1788 - tslib: registry.npmmirror.com/tslib/2.4.1 2219 + tslib: 2.4.1
1789 dev: true 2220 dev: true
1790 2221
1791 /camelcase-keys/6.2.2: 2222 /camelcase-keys/6.2.2:
1792 resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} 2223 resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==}
1793 engines: {node: '>=8'} 2224 engines: {node: '>=8'}
1794 dependencies: 2225 dependencies:
1795 - camelcase: registry.npmmirror.com/camelcase/5.3.1 2226 + camelcase: 5.3.1
1796 map-obj: 4.3.0 2227 map-obj: 4.3.0
1797 quick-lru: 4.0.1 2228 quick-lru: 4.0.1
1798 dev: true 2229 dev: true
1799 2230
  2231 + /camelcase/5.3.1:
  2232 + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
  2233 + engines: {node: '>=6'}
  2234 +
  2235 + /camelcase/6.3.0:
  2236 + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/camelcase/-/camelcase-6.3.0.tgz}
  2237 + engines: {node: '>=10'}
  2238 + dev: true
  2239 +
1800 /caniuse-lite/1.0.30001431: 2240 /caniuse-lite/1.0.30001431:
1801 resolution: {integrity: sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==} 2241 resolution: {integrity: sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==}
1802 dev: true 2242 dev: true
@@ -1805,7 +2245,7 @@ packages: @@ -1805,7 +2245,7 @@ packages:
1805 resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} 2245 resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==}
1806 dependencies: 2246 dependencies:
1807 no-case: 3.0.4 2247 no-case: 3.0.4
1808 - tslib: registry.npmmirror.com/tslib/2.4.1 2248 + tslib: 2.4.1
1809 upper-case-first: 2.0.2 2249 upper-case-first: 2.0.2
1810 dev: true 2250 dev: true
1811 2251
@@ -1937,13 +2377,25 @@ packages: @@ -1937,13 +2377,25 @@ packages:
1937 object-visit: 1.0.1 2377 object-visit: 1.0.1
1938 dev: true 2378 dev: true
1939 2379
  2380 + /color-convert/1.9.3:
  2381 + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
  2382 + dependencies:
  2383 + color-name: 1.1.3
  2384 + dev: true
  2385 +
1940 /color-convert/2.0.1: 2386 /color-convert/2.0.1:
1941 resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 2387 resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
1942 engines: {node: '>=7.0.0'} 2388 engines: {node: '>=7.0.0'}
1943 dependencies: 2389 dependencies:
1944 - color-name: registry.npmmirror.com/color-name/1.1.4 2390 + color-name: 1.1.4
  2391 +
  2392 + /color-name/1.1.3:
  2393 + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
1945 dev: true 2394 dev: true
1946 2395
  2396 + /color-name/1.1.4:
  2397 + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
  2398 +
1947 /colord/2.9.3: 2399 /colord/2.9.3:
1948 resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} 2400 resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==}
1949 dev: true 2401 dev: true
@@ -2004,7 +2456,7 @@ packages: @@ -2004,7 +2456,7 @@ packages:
2004 resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} 2456 resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==}
2005 dependencies: 2457 dependencies:
2006 no-case: 3.0.4 2458 no-case: 3.0.4
2007 - tslib: registry.npmmirror.com/tslib/2.4.1 2459 + tslib: 2.4.1
2008 upper-case: 2.0.2 2460 upper-case: 2.0.2
2009 dev: true 2461 dev: true
2010 2462
@@ -2038,11 +2490,20 @@ packages: @@ -2038,11 +2490,20 @@ packages:
2038 through2: 4.0.2 2490 through2: 4.0.2
2039 dev: true 2491 dev: true
2040 2492
  2493 + /convert-source-map/1.9.0:
  2494 + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/convert-source-map/-/convert-source-map-1.9.0.tgz}
  2495 + dev: true
  2496 +
2041 /copy-descriptor/0.1.1: 2497 /copy-descriptor/0.1.1:
2042 resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} 2498 resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==}
2043 engines: {node: '>=0.10.0'} 2499 engines: {node: '>=0.10.0'}
2044 dev: true 2500 dev: true
2045 2501
  2502 + /core-js/3.26.1:
  2503 + resolution: {integrity: sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/core-js/-/core-js-3.26.1.tgz}
  2504 + requiresBuild: true
  2505 + dev: true
  2506 +
2046 /cors/2.8.5: 2507 /cors/2.8.5:
2047 resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} 2508 resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
2048 engines: {node: '>= 0.10'} 2509 engines: {node: '>= 0.10'}
@@ -2051,7 +2512,7 @@ packages: @@ -2051,7 +2512,7 @@ packages:
2051 vary: 1.1.2 2512 vary: 1.1.2
2052 dev: true 2513 dev: true
2053 2514
2054 - /cosmiconfig-typescript-loader/4.2.0_wb7bklcl6jlvxijczjyxggip4a: 2515 + /cosmiconfig-typescript-loader/4.2.0_bxtyj3et3xbsdyxhh3oblnfbj4:
2055 resolution: {integrity: sha512-NkANeMnaHrlaSSlpKGyvn2R4rqUDeE/9E5YHx+b4nwo0R8dZyAqcih8/gxpCZvqWP9Vf6xuLpMSzSgdVEIM78g==} 2516 resolution: {integrity: sha512-NkANeMnaHrlaSSlpKGyvn2R4rqUDeE/9E5YHx+b4nwo0R8dZyAqcih8/gxpCZvqWP9Vf6xuLpMSzSgdVEIM78g==}
2056 engines: {node: '>=12', npm: '>=6'} 2517 engines: {node: '>=12', npm: '>=6'}
2057 peerDependencies: 2518 peerDependencies:
@@ -2060,9 +2521,9 @@ packages: @@ -2060,9 +2521,9 @@ packages:
2060 ts-node: '>=10' 2521 ts-node: '>=10'
2061 typescript: '>=3' 2522 typescript: '>=3'
2062 dependencies: 2523 dependencies:
2063 - '@types/node': 14.18.33  
2064 - cosmiconfig: 7.1.0  
2065 - ts-node: 10.9.1_rju6pyblifsagdmqm3y74zsi6q 2524 + '@types/node': 18.11.18
  2525 + cosmiconfig: 8.0.0
  2526 + ts-node: 10.9.1_awa2wsr5thmg3i7jqycphctjfq
2066 typescript: 4.9.4 2527 typescript: 4.9.4
2067 dev: true 2528 dev: true
2068 2529
@@ -2077,6 +2538,16 @@ packages: @@ -2077,6 +2538,16 @@ packages:
2077 yaml: 1.10.2 2538 yaml: 1.10.2
2078 dev: true 2539 dev: true
2079 2540
  2541 + /cosmiconfig/8.0.0:
  2542 + resolution: {integrity: sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==}
  2543 + engines: {node: '>=14'}
  2544 + dependencies:
  2545 + import-fresh: 3.3.0
  2546 + js-yaml: 4.1.0
  2547 + parse-json: 5.2.0
  2548 + path-type: 4.0.0
  2549 + dev: true
  2550 +
2080 /create-require/1.1.1: 2551 /create-require/1.1.1:
2081 resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} 2552 resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
2082 dev: true 2553 dev: true
@@ -2085,6 +2556,14 @@ packages: @@ -2085,6 +2556,14 @@ packages:
2085 resolution: {integrity: sha512-by7jKAo73y5/Do0K6sxdTKHgndY0NMjG2bEdgeJxycbcmHuCiMXqw8sxy5C5Y5WTOTcDGmbT7Sr5CgKOXR06OA==} 2556 resolution: {integrity: sha512-by7jKAo73y5/Do0K6sxdTKHgndY0NMjG2bEdgeJxycbcmHuCiMXqw8sxy5C5Y5WTOTcDGmbT7Sr5CgKOXR06OA==}
2086 dev: false 2557 dev: false
2087 2558
  2559 + /cross-fetch/3.1.5:
  2560 + resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/cross-fetch/-/cross-fetch-3.1.5.tgz}
  2561 + dependencies:
  2562 + node-fetch: 2.6.7
  2563 + transitivePeerDependencies:
  2564 + - encoding
  2565 + dev: true
  2566 +
2088 /cross-spawn/7.0.3: 2567 /cross-spawn/7.0.3:
2089 resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 2568 resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
2090 engines: {node: '>= 8'} 2569 engines: {node: '>= 8'}
@@ -2340,7 +2819,7 @@ packages: @@ -2340,7 +2819,7 @@ packages:
2340 resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} 2819 resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
2341 dependencies: 2820 dependencies:
2342 no-case: 3.0.4 2821 no-case: 3.0.4
2343 - tslib: registry.npmmirror.com/tslib/2.4.1 2822 + tslib: 2.4.1
2344 dev: true 2823 dev: true
2345 2824
2346 /dot-prop/5.3.0: 2825 /dot-prop/5.3.0:
@@ -2359,7 +2838,14 @@ packages: @@ -2359,7 +2838,14 @@ packages:
2359 peerDependencies: 2838 peerDependencies:
2360 echarts: ^5.0.1 2839 echarts: ^5.0.1
2361 dependencies: 2840 dependencies:
2362 - echarts: registry.npmmirror.com/echarts/5.4.1 2841 + echarts: 5.4.1
  2842 + dev: false
  2843 +
  2844 + /echarts/5.4.1:
  2845 + resolution: {integrity: sha512-9ltS3M2JB0w2EhcYjCdmtrJ+6haZcW6acBolMGIuf01Hql1yrIV01L1aRj7jsaaIULJslEP9Z3vKlEmnJaWJVQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/echarts/-/echarts-5.4.1.tgz}
  2846 + dependencies:
  2847 + tslib: 2.3.0
  2848 + zrender: 5.4.1
2363 dev: false 2849 dev: false
2364 2850
2365 /ejs/3.1.8: 2851 /ejs/3.1.8:
@@ -2512,21 +2998,21 @@ packages: @@ -2512,21 +2998,21 @@ packages:
2512 engines: {node: '>=10'} 2998 engines: {node: '>=10'}
2513 dev: true 2999 dev: true
2514 3000
2515 - /eslint-config-prettier/8.6.0_eslint@8.31.0: 3001 + /eslint-config-prettier/8.6.0_eslint@8.32.0:
2516 resolution: {integrity: sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==} 3002 resolution: {integrity: sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==}
2517 hasBin: true 3003 hasBin: true
2518 peerDependencies: 3004 peerDependencies:
2519 eslint: '>=7.0.0' 3005 eslint: '>=7.0.0'
2520 dependencies: 3006 dependencies:
2521 - eslint: 8.31.0 3007 + eslint: 8.32.0
2522 dev: true 3008 dev: true
2523 3009
2524 - /eslint-define-config/1.13.0:  
2525 - resolution: {integrity: sha512-d0BfmPGBcMusfiz6QY/piAhWaEyJriJtvk9SHfuJzI7am9k4ce07SfmPkpcR0ckXNyu4FBons10akOO2Tx+X+Q==} 3010 + /eslint-define-config/1.14.0:
  3011 + resolution: {integrity: sha512-NREt5SzMwKmLAY28YdaqIiTSJxfPpuZ+1ZLJxY2Wbj02dYF4QX81z0q9MPMjZB8C+SlCu66qAhcPpFJyhXOiuA==}
2526 engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: '>=6.14.13', pnpm: '>= 7.0.0'} 3012 engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: '>=6.14.13', pnpm: '>= 7.0.0'}
2527 dev: true 3013 dev: true
2528 3014
2529 - /eslint-plugin-prettier/4.2.1_32m5uc2milwdw3tnkcq5del26y: 3015 + /eslint-plugin-prettier/4.2.1_cn4lalcyadplruoxa5mhp7j3dq:
2530 resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} 3016 resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==}
2531 engines: {node: '>=12.0.0'} 3017 engines: {node: '>=12.0.0'}
2532 peerDependencies: 3018 peerDependencies:
@@ -2537,25 +3023,25 @@ packages: @@ -2537,25 +3023,25 @@ packages:
2537 eslint-config-prettier: 3023 eslint-config-prettier:
2538 optional: true 3024 optional: true
2539 dependencies: 3025 dependencies:
2540 - eslint: 8.31.0  
2541 - eslint-config-prettier: 8.6.0_eslint@8.31.0  
2542 - prettier: 2.8.1 3026 + eslint: 8.32.0
  3027 + eslint-config-prettier: 8.6.0_eslint@8.32.0
  3028 + prettier: 2.8.3
2543 prettier-linter-helpers: 1.0.0 3029 prettier-linter-helpers: 1.0.0
2544 dev: true 3030 dev: true
2545 3031
2546 - /eslint-plugin-vue/9.8.0_eslint@8.31.0:  
2547 - resolution: {integrity: sha512-E/AXwcTzunyzM83C2QqDHxepMzvI2y6x+mmeYHbVDQlKFqmKYvRrhaVixEeeG27uI44p9oKDFiyCRw4XxgtfHA==} 3032 + /eslint-plugin-vue/9.9.0_eslint@8.32.0:
  3033 + resolution: {integrity: sha512-YbubS7eK0J7DCf0U2LxvVP7LMfs6rC6UltihIgval3azO3gyDwEGVgsCMe1TmDiEkl6GdMKfRpaME6QxIYtzDQ==}
2548 engines: {node: ^14.17.0 || >=16.0.0} 3034 engines: {node: ^14.17.0 || >=16.0.0}
2549 peerDependencies: 3035 peerDependencies:
2550 eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 3036 eslint: ^6.2.0 || ^7.0.0 || ^8.0.0
2551 dependencies: 3037 dependencies:
2552 - eslint: 8.31.0  
2553 - eslint-utils: 3.0.0_eslint@8.31.0 3038 + eslint: 8.32.0
  3039 + eslint-utils: 3.0.0_eslint@8.32.0
2554 natural-compare: 1.4.0 3040 natural-compare: 1.4.0
2555 nth-check: 2.1.1 3041 nth-check: 2.1.1
2556 - postcss-selector-parser: 6.0.10 3042 + postcss-selector-parser: 6.0.11
2557 semver: 7.3.8 3043 semver: 7.3.8
2558 - vue-eslint-parser: 9.1.0_eslint@8.31.0 3044 + vue-eslint-parser: 9.1.0_eslint@8.32.0
2559 xml-name-validator: 4.0.0 3045 xml-name-validator: 4.0.0
2560 transitivePeerDependencies: 3046 transitivePeerDependencies:
2561 - supports-color 3047 - supports-color
@@ -2584,13 +3070,13 @@ packages: @@ -2584,13 +3070,13 @@ packages:
2584 eslint-visitor-keys: 1.3.0 3070 eslint-visitor-keys: 1.3.0
2585 dev: true 3071 dev: true
2586 3072
2587 - /eslint-utils/3.0.0_eslint@8.31.0: 3073 + /eslint-utils/3.0.0_eslint@8.32.0:
2588 resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} 3074 resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
2589 engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} 3075 engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
2590 peerDependencies: 3076 peerDependencies:
2591 eslint: '>=5' 3077 eslint: '>=5'
2592 dependencies: 3078 dependencies:
2593 - eslint: 8.31.0 3079 + eslint: 8.32.0
2594 eslint-visitor-keys: 2.1.0 3080 eslint-visitor-keys: 2.1.0
2595 dev: true 3081 dev: true
2596 3082
@@ -2609,8 +3095,8 @@ packages: @@ -2609,8 +3095,8 @@ packages:
2609 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 3095 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
2610 dev: true 3096 dev: true
2611 3097
2612 - /eslint/8.31.0:  
2613 - resolution: {integrity: sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==} 3098 + /eslint/8.32.0:
  3099 + resolution: {integrity: sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==}
2614 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 3100 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
2615 hasBin: true 3101 hasBin: true
2616 dependencies: 3102 dependencies:
@@ -2625,7 +3111,7 @@ packages: @@ -2625,7 +3111,7 @@ packages:
2625 doctrine: 3.0.0 3111 doctrine: 3.0.0
2626 escape-string-regexp: 4.0.0 3112 escape-string-regexp: 4.0.0
2627 eslint-scope: 7.1.1 3113 eslint-scope: 7.1.1
2628 - eslint-utils: 3.0.0_eslint@8.31.0 3114 + eslint-utils: 3.0.0_eslint@8.32.0
2629 eslint-visitor-keys: 3.3.0 3115 eslint-visitor-keys: 3.3.0
2630 espree: 9.4.1 3116 espree: 9.4.1
2631 esquery: 1.4.0 3117 esquery: 1.4.0
@@ -2852,6 +3338,23 @@ packages: @@ -2852,6 +3338,23 @@ packages:
2852 minimatch: 5.1.2 3338 minimatch: 5.1.2
2853 dev: true 3339 dev: true
2854 3340
  3341 + /fill-range/4.0.0:
  3342 + resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/fill-range/-/fill-range-4.0.0.tgz}
  3343 + engines: {node: '>=0.10.0'}
  3344 + dependencies:
  3345 + extend-shallow: 2.0.1
  3346 + is-number: 3.0.0
  3347 + repeat-string: 1.6.1
  3348 + to-regex-range: 2.1.1
  3349 + dev: true
  3350 +
  3351 + /fill-range/7.0.1:
  3352 + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/fill-range/-/fill-range-7.0.1.tgz}
  3353 + engines: {node: '>=8'}
  3354 + dependencies:
  3355 + to-regex-range: 5.0.1
  3356 + dev: true
  3357 +
2855 /find-up/4.1.0: 3358 /find-up/4.1.0:
2856 resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 3359 resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
2857 engines: {node: '>=8'} 3360 engines: {node: '>=8'}
@@ -2922,6 +3425,15 @@ packages: @@ -2922,6 +3425,15 @@ packages:
2922 universalify: 2.0.0 3425 universalify: 2.0.0
2923 dev: true 3426 dev: true
2924 3427
  3428 + /fs-extra/11.1.0:
  3429 + resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==}
  3430 + engines: {node: '>=14.14'}
  3431 + dependencies:
  3432 + graceful-fs: 4.2.10
  3433 + jsonfile: 6.1.0
  3434 + universalify: 2.0.0
  3435 + dev: true
  3436 +
2925 /fs.realpath/1.0.0: 3437 /fs.realpath/1.0.0:
2926 resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 3438 resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
2927 dev: true 3439 dev: true
@@ -2937,6 +3449,11 @@ packages: @@ -2937,6 +3449,11 @@ packages:
2937 /function-bind/1.1.1: 3449 /function-bind/1.1.1:
2938 resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 3450 resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
2939 3451
  3452 + /gensync/1.0.0-beta.2:
  3453 + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/gensync/-/gensync-1.0.0-beta.2.tgz}
  3454 + engines: {node: '>=6.9.0'}
  3455 + dev: true
  3456 +
2940 /get-caller-file/2.0.5: 3457 /get-caller-file/2.0.5:
2941 resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 3458 resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
2942 engines: {node: 6.* || 8.* || >= 10.*} 3459 engines: {node: 6.* || 8.* || >= 10.*}
@@ -3114,7 +3631,7 @@ packages: @@ -3114,7 +3631,7 @@ packages:
3114 resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} 3631 resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==}
3115 engines: {node: '>=0.10.0'} 3632 engines: {node: '>=0.10.0'}
3116 dependencies: 3633 dependencies:
3117 - is-number: registry.npmmirror.com/is-number/3.0.0 3634 + is-number: 3.0.0
3118 kind-of: 4.0.0 3635 kind-of: 4.0.0
3119 dev: true 3636 dev: true
3120 3637
@@ -3133,7 +3650,7 @@ packages: @@ -3133,7 +3650,7 @@ packages:
3133 resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} 3650 resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==}
3134 dependencies: 3651 dependencies:
3135 capital-case: 1.0.4 3652 capital-case: 1.0.4
3136 - tslib: registry.npmmirror.com/tslib/2.4.1 3653 + tslib: 2.4.1
3137 dev: true 3654 dev: true
3138 3655
3139 /hosted-git-info/2.8.9: 3656 /hosted-git-info/2.8.9:
@@ -3144,7 +3661,7 @@ packages: @@ -3144,7 +3661,7 @@ packages:
3144 resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} 3661 resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==}
3145 engines: {node: '>=10'} 3662 engines: {node: '>=10'}
3146 dependencies: 3663 dependencies:
3147 - lru-cache: registry.npmmirror.com/lru-cache/6.0.0 3664 + lru-cache: 6.0.0
3148 dev: true 3665 dev: true
3149 3666
3150 /html-tags/3.2.0: 3667 /html-tags/3.2.0:
@@ -3357,6 +3874,18 @@ packages: @@ -3357,6 +3874,18 @@ packages:
3357 resolution: {integrity: sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==} 3874 resolution: {integrity: sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==}
3358 dev: false 3875 dev: false
3359 3876
  3877 + /is-number/3.0.0:
  3878 + resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/is-number/-/is-number-3.0.0.tgz}
  3879 + engines: {node: '>=0.10.0'}
  3880 + dependencies:
  3881 + kind-of: 3.2.2
  3882 + dev: true
  3883 +
  3884 + /is-number/7.0.0:
  3885 + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/is-number/-/is-number-7.0.0.tgz}
  3886 + engines: {node: '>=0.12.0'}
  3887 + dev: true
  3888 +
3360 /is-obj/2.0.0: 3889 /is-obj/2.0.0:
3361 resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} 3890 resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
3362 engines: {node: '>=8'} 3891 engines: {node: '>=8'}
@@ -3440,6 +3969,11 @@ packages: @@ -3440,6 +3969,11 @@ packages:
3440 minimatch: 3.1.2 3969 minimatch: 3.1.2
3441 dev: true 3970 dev: true
3442 3971
  3972 + /jiti/1.16.0:
  3973 + resolution: {integrity: sha512-L3BJStEf5NAqNuzrpfbN71dp43mYIcBUlCRea/vdyv5dW/AYa1d4bpelko4SHdY3I6eN9Wzyasxirj1/vv5kmg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/jiti/-/jiti-1.16.0.tgz}
  3974 + hasBin: true
  3975 + dev: true
  3976 +
3443 /js-base64/2.6.4: 3977 /js-base64/2.6.4:
3444 resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==} 3978 resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==}
3445 dev: true 3979 dev: true
@@ -3449,7 +3983,7 @@ packages: @@ -3449,7 +3983,7 @@ packages:
3449 dev: true 3983 dev: true
3450 3984
3451 /js-tokens/4.0.0: 3985 /js-tokens/4.0.0:
3452 - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 3986 + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/js-tokens/-/js-tokens-4.0.0.tgz}
3453 dev: true 3987 dev: true
3454 3988
3455 /js-tokens/8.0.0: 3989 /js-tokens/8.0.0:
@@ -3467,6 +4001,12 @@ packages: @@ -3467,6 +4001,12 @@ packages:
3467 resolution: {integrity: sha512-dVvV54GdFuJgmEKn+oBiaifDMen4p6o6j/lJh0OVMcouME8sST0bJ7bldIgKBQk4za0zyGn0/pm4vOznR25mLw==} 4001 resolution: {integrity: sha512-dVvV54GdFuJgmEKn+oBiaifDMen4p6o6j/lJh0OVMcouME8sST0bJ7bldIgKBQk4za0zyGn0/pm4vOznR25mLw==}
3468 dev: false 4002 dev: false
3469 4003
  4004 + /jsesc/2.5.2:
  4005 + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/jsesc/-/jsesc-2.5.2.tgz}
  4006 + engines: {node: '>=4'}
  4007 + hasBin: true
  4008 + dev: true
  4009 +
3470 /json-parse-even-better-errors/2.3.1: 4010 /json-parse-even-better-errors/2.3.1:
3471 resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 4011 resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
3472 dev: true 4012 dev: true
@@ -3510,7 +4050,7 @@ packages: @@ -3510,7 +4050,7 @@ packages:
3510 /jsonfile/6.1.0: 4050 /jsonfile/6.1.0:
3511 resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} 4051 resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
3512 dependencies: 4052 dependencies:
3513 - universalify: registry.npmmirror.com/universalify/2.0.0 4053 + universalify: 2.0.0
3514 optionalDependencies: 4054 optionalDependencies:
3515 graceful-fs: 4.2.10 4055 graceful-fs: 4.2.10
3516 dev: true 4056 dev: true
@@ -3548,6 +4088,10 @@ packages: @@ -3548,6 +4088,10 @@ packages:
3548 resolution: {integrity: sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==} 4088 resolution: {integrity: sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==}
3549 dev: true 4089 dev: true
3550 4090
  4091 + /kolorist/1.6.0:
  4092 + resolution: {integrity: sha512-dLkz37Ab97HWMx9KTes3Tbi3D1ln9fCAy2zr2YVExJasDRPGRaKcoE4fycWNtnCAJfjFqe0cnY+f8KT2JePEXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/kolorist/-/kolorist-1.6.0.tgz}
  4093 + dev: true
  4094 +
3551 /levn/0.4.1: 4095 /levn/0.4.1:
3552 resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 4096 resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
3553 engines: {node: '>= 0.8.0'} 4097 engines: {node: '>= 0.8.0'}
@@ -3728,7 +4272,7 @@ packages: @@ -3728,7 +4272,7 @@ packages:
3728 /lower-case/2.0.2: 4272 /lower-case/2.0.2:
3729 resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} 4273 resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
3730 dependencies: 4274 dependencies:
3731 - tslib: registry.npmmirror.com/tslib/2.4.1 4275 + tslib: 2.4.1
3732 dev: true 4276 dev: true
3733 4277
3734 /lru-cache/6.0.0: 4278 /lru-cache/6.0.0:
@@ -3742,6 +4286,12 @@ packages: @@ -3742,6 +4286,12 @@ packages:
3742 resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} 4286 resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
3743 dependencies: 4287 dependencies:
3744 sourcemap-codec: 1.4.8 4288 sourcemap-codec: 1.4.8
  4289 +
  4290 + /magic-string/0.27.0:
  4291 + resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/magic-string/-/magic-string-0.27.0.tgz}
  4292 + engines: {node: '>=12'}
  4293 + dependencies:
  4294 + '@jridgewell/sourcemap-codec': 1.4.14
3745 dev: true 4295 dev: true
3746 4296
3747 /make-error/1.3.6: 4297 /make-error/1.3.6:
@@ -3839,7 +4389,7 @@ packages: @@ -3839,7 +4389,7 @@ packages:
3839 dependencies: 4389 dependencies:
3840 arr-diff: 4.0.0 4390 arr-diff: 4.0.0
3841 array-unique: 0.3.2 4391 array-unique: 0.3.2
3842 - braces: registry.npmmirror.com/braces/2.3.2 4392 + braces: 2.3.2
3843 define-property: 1.0.0 4393 define-property: 1.0.0
3844 extend-shallow: 2.0.1 4394 extend-shallow: 2.0.1
3845 extglob: 2.0.4 4395 extglob: 2.0.4
@@ -3989,7 +4539,19 @@ packages: @@ -3989,7 +4539,19 @@ packages:
3989 resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} 4539 resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
3990 dependencies: 4540 dependencies:
3991 lower-case: 2.0.2 4541 lower-case: 2.0.2
3992 - tslib: registry.npmmirror.com/tslib/2.4.1 4542 + tslib: 2.4.1
  4543 + dev: true
  4544 +
  4545 + /node-fetch/2.6.7:
  4546 + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/node-fetch/-/node-fetch-2.6.7.tgz}
  4547 + engines: {node: 4.x || >=6.0.0}
  4548 + peerDependencies:
  4549 + encoding: ^0.1.0
  4550 + peerDependenciesMeta:
  4551 + encoding:
  4552 + optional: true
  4553 + dependencies:
  4554 + whatwg-url: 5.0.0
3993 dev: true 4555 dev: true
3994 4556
3995 /node-releases/2.0.6: 4557 /node-releases/2.0.6:
@@ -4011,7 +4573,7 @@ packages: @@ -4011,7 +4573,7 @@ packages:
4011 dependencies: 4573 dependencies:
4012 hosted-git-info: 4.1.0 4574 hosted-git-info: 4.1.0
4013 is-core-module: 2.11.0 4575 is-core-module: 2.11.0
4014 - semver: registry.npmmirror.com/semver/7.3.8 4576 + semver: 7.3.8
4015 validate-npm-package-license: 3.0.4 4577 validate-npm-package-license: 3.0.4
4016 dev: true 4578 dev: true
4017 4579
@@ -4157,7 +4719,7 @@ packages: @@ -4157,7 +4719,7 @@ packages:
4157 resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} 4719 resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==}
4158 dependencies: 4720 dependencies:
4159 dot-case: 3.0.4 4721 dot-case: 3.0.4
4160 - tslib: registry.npmmirror.com/tslib/2.4.1 4722 + tslib: 2.4.1
4161 dev: true 4723 dev: true
4162 4724
4163 /parent-module/1.0.1: 4725 /parent-module/1.0.1:
@@ -4181,7 +4743,7 @@ packages: @@ -4181,7 +4743,7 @@ packages:
4181 resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} 4743 resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==}
4182 dependencies: 4744 dependencies:
4183 no-case: 3.0.4 4745 no-case: 3.0.4
4184 - tslib: registry.npmmirror.com/tslib/2.4.1 4746 + tslib: 2.4.1
4185 dev: true 4747 dev: true
4186 4748
4187 /pascalcase/0.1.1: 4749 /pascalcase/0.1.1:
@@ -4193,7 +4755,7 @@ packages: @@ -4193,7 +4755,7 @@ packages:
4193 resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} 4755 resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==}
4194 dependencies: 4756 dependencies:
4195 dot-case: 3.0.4 4757 dot-case: 3.0.4
4196 - tslib: registry.npmmirror.com/tslib/2.4.1 4758 + tslib: 2.4.1
4197 dev: true 4759 dev: true
4198 4760
4199 /path-exists/4.0.0: 4761 /path-exists/4.0.0:
@@ -4234,7 +4796,6 @@ packages: @@ -4234,7 +4796,6 @@ packages:
4234 4796
4235 /picocolors/1.0.0: 4797 /picocolors/1.0.0:
4236 resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 4798 resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
4237 - dev: true  
4238 4799
4239 /picomatch/2.3.1: 4800 /picomatch/2.3.1:
4240 resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 4801 resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
@@ -4247,6 +4808,24 @@ packages: @@ -4247,6 +4808,24 @@ packages:
4247 hasBin: true 4808 hasBin: true
4248 dev: true 4809 dev: true
4249 4810
  4811 + /pinia/2.0.29_prq2uz4lho2pwp6irk4cfkrxwu:
  4812 + resolution: {integrity: sha512-5z/KpFecq/cIgfeTnulJXldiLcTITRkTe3N58RKYSj0Pc1EdR6oyCdnf5A9jLoVwBqX5LtHhd0kGlpzWvk9oiQ==}
  4813 + peerDependencies:
  4814 + '@vue/composition-api': ^1.4.0
  4815 + typescript: '>=4.4.4'
  4816 + vue: ^2.6.14 || ^3.2.0
  4817 + peerDependenciesMeta:
  4818 + '@vue/composition-api':
  4819 + optional: true
  4820 + typescript:
  4821 + optional: true
  4822 + dependencies:
  4823 + '@vue/devtools-api': 6.4.5
  4824 + typescript: 4.9.4
  4825 + vue: 3.2.45
  4826 + vue-demi: 0.13.11_vue@3.2.45
  4827 + dev: false
  4828 +
4250 /pngjs/5.0.0: 4829 /pngjs/5.0.0:
4251 resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} 4830 resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==}
4252 engines: {node: '>=10.13.0'} 4831 engines: {node: '>=10.13.0'}
@@ -4263,8 +4842,8 @@ packages: @@ -4263,8 +4842,8 @@ packages:
4263 dependencies: 4842 dependencies:
4264 htmlparser2: 8.0.1 4843 htmlparser2: 8.0.1
4265 js-tokens: 8.0.0 4844 js-tokens: 8.0.0
4266 - postcss: registry.npmmirror.com/postcss/8.4.20  
4267 - postcss-safe-parser: 6.0.0_postcss@8.4.20 4845 + postcss: 8.4.21
  4846 + postcss-safe-parser: 6.0.0_postcss@8.4.21
4268 dev: true 4847 dev: true
4269 4848
4270 /postcss-media-query-parser/0.2.3: 4849 /postcss-media-query-parser/0.2.3:
@@ -4283,30 +4862,22 @@ packages: @@ -4283,30 +4862,22 @@ packages:
4283 resolution: {integrity: sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==} 4862 resolution: {integrity: sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==}
4284 dev: true 4863 dev: true
4285 4864
4286 - /postcss-safe-parser/6.0.0_postcss@8.4.20: 4865 + /postcss-safe-parser/6.0.0_postcss@8.4.21:
4287 resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} 4866 resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==}
4288 engines: {node: '>=12.0'} 4867 engines: {node: '>=12.0'}
4289 peerDependencies: 4868 peerDependencies:
4290 postcss: ^8.3.3 4869 postcss: ^8.3.3
4291 dependencies: 4870 dependencies:
4292 - postcss: registry.npmmirror.com/postcss/8.4.20 4871 + postcss: 8.4.21
4293 dev: true 4872 dev: true
4294 4873
4295 - /postcss-scss/4.0.6_postcss@8.4.20: 4874 + /postcss-scss/4.0.6_postcss@8.4.21:
4296 resolution: {integrity: sha512-rLDPhJY4z/i4nVFZ27j9GqLxj1pwxE80eAzUNRMXtcpipFYIeowerzBgG3yJhMtObGEXidtIgbUpQ3eLDsf5OQ==} 4875 resolution: {integrity: sha512-rLDPhJY4z/i4nVFZ27j9GqLxj1pwxE80eAzUNRMXtcpipFYIeowerzBgG3yJhMtObGEXidtIgbUpQ3eLDsf5OQ==}
4297 engines: {node: '>=12.0'} 4876 engines: {node: '>=12.0'}
4298 peerDependencies: 4877 peerDependencies:
4299 postcss: ^8.4.19 4878 postcss: ^8.4.19
4300 dependencies: 4879 dependencies:
4301 - postcss: registry.npmmirror.com/postcss/8.4.20  
4302 - dev: true  
4303 -  
4304 - /postcss-selector-parser/6.0.10:  
4305 - resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==}  
4306 - engines: {node: '>=4'}  
4307 - dependencies:  
4308 - cssesc: 3.0.0  
4309 - util-deprecate: 1.0.2 4880 + postcss: 8.4.21
4310 dev: true 4881 dev: true
4311 4882
4312 /postcss-selector-parser/6.0.11: 4883 /postcss-selector-parser/6.0.11:
@@ -4317,12 +4888,12 @@ packages: @@ -4317,12 +4888,12 @@ packages:
4317 util-deprecate: 1.0.2 4888 util-deprecate: 1.0.2
4318 dev: true 4889 dev: true
4319 4890
4320 - /postcss-sorting/7.0.1_postcss@8.4.20:  
4321 - resolution: {integrity: sha512-iLBFYz6VRYyLJEJsBJ8M3TCqNcckVzz4wFounSc5Oez35ogE/X+aoC5fFu103Ot7NyvjU3/xqIXn93Gp3kJk4g==} 4891 + /postcss-sorting/8.0.1_postcss@8.4.21:
  4892 + resolution: {integrity: sha512-go9Zoxx7KQH+uLrJ9xa5wRErFeXu01ydA6O8m7koPXkmAN7Ts//eRcIqjo0stBR4+Nir2gMYDOWAOx7O5EPUZA==}
4322 peerDependencies: 4893 peerDependencies:
4323 - postcss: ^8.3.9 4894 + postcss: ^8.4.20
4324 dependencies: 4895 dependencies:
4325 - postcss: registry.npmmirror.com/postcss/8.4.20 4896 + postcss: 8.4.21
4326 dev: true 4897 dev: true
4327 4898
4328 /postcss-value-parser/4.2.0: 4899 /postcss-value-parser/4.2.0:
@@ -4336,17 +4907,16 @@ packages: @@ -4336,17 +4907,16 @@ packages:
4336 chalk: 1.1.3 4907 chalk: 1.1.3
4337 js-base64: 2.6.4 4908 js-base64: 2.6.4
4338 source-map: 0.5.7 4909 source-map: 0.5.7
4339 - supports-color: registry.npmmirror.com/supports-color/3.2.3 4910 + supports-color: 3.2.3
4340 dev: true 4911 dev: true
4341 4912
4342 - /postcss/8.4.20:  
4343 - resolution: {integrity: sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==} 4913 + /postcss/8.4.21:
  4914 + resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==}
4344 engines: {node: ^10 || ^12 || >=14} 4915 engines: {node: ^10 || ^12 || >=14}
4345 dependencies: 4916 dependencies:
4346 nanoid: 3.3.4 4917 nanoid: 3.3.4
4347 picocolors: 1.0.0 4918 picocolors: 1.0.0
4348 source-map-js: 1.0.2 4919 source-map-js: 1.0.2
4349 - dev: true  
4350 4920
4351 /posthtml-parser/0.2.1: 4921 /posthtml-parser/0.2.1:
4352 resolution: {integrity: sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==} 4922 resolution: {integrity: sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==}
@@ -4399,8 +4969,8 @@ packages: @@ -4399,8 +4969,8 @@ packages:
4399 fast-diff: 1.2.0 4969 fast-diff: 1.2.0
4400 dev: true 4970 dev: true
4401 4971
4402 - /prettier/2.8.1:  
4403 - resolution: {integrity: sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==} 4972 + /prettier/2.8.3:
  4973 + resolution: {integrity: sha512-tJ/oJ4amDihPoufT5sM0Z1SKEuKay8LfVAMlbbhnnkvt6BUserZylqo2PN+p9KeljLr0OHa2rXHU1T8reeoTrw==}
4404 engines: {node: '>=10.13.0'} 4974 engines: {node: '>=10.13.0'}
4405 hasBin: true 4975 hasBin: true
4406 dev: true 4976 dev: true
@@ -4523,6 +5093,9 @@ packages: @@ -4523,6 +5093,9 @@ packages:
4523 strip-indent: 3.0.0 5093 strip-indent: 3.0.0
4524 dev: true 5094 dev: true
4525 5095
  5096 + /regenerator-runtime/0.13.11:
  5097 + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz}
  5098 +
4526 /regex-not/1.0.2: 5099 /regex-not/1.0.2:
4527 resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} 5100 resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==}
4528 engines: {node: '>=0.10.0'} 5101 engines: {node: '>=0.10.0'}
@@ -4619,6 +5192,23 @@ packages: @@ -4619,6 +5192,23 @@ packages:
4619 glob: 7.2.3 5192 glob: 7.2.3
4620 dev: true 5193 dev: true
4621 5194
  5195 + /rimraf/4.0.7:
  5196 + resolution: {integrity: sha512-CUEDDrZvc0swDgVdXGiv3FcYYQMpJxjvSGt85Amj6yU+MCVWurrLCeLiJDdJPHCzNJnwuebBEdcO//eP11Xa7w==}
  5197 + engines: {node: '>=14'}
  5198 + hasBin: true
  5199 + dev: true
  5200 +
  5201 + /rollup-plugin-purge-icons/0.9.1:
  5202 + resolution: {integrity: sha512-hRDKBsPUz47UMdBufki2feTmBF2ClEJlYqL7N6vpVAHSLd7V2BJUaNKOF7YYbLMofVVF+9hm44YSkYO6k9hUgg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/rollup-plugin-purge-icons/-/rollup-plugin-purge-icons-0.9.1.tgz}
  5203 + engines: {node: '>= 12'}
  5204 + dependencies:
  5205 + '@purge-icons/core': 0.9.1
  5206 + '@purge-icons/generated': 0.9.0
  5207 + transitivePeerDependencies:
  5208 + - encoding
  5209 + - supports-color
  5210 + dev: true
  5211 +
4622 /rollup/2.79.1: 5212 /rollup/2.79.1:
4623 resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} 5213 resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==}
4624 engines: {node: '>=10.0.0'} 5214 engines: {node: '>=10.0.0'}
@@ -4627,8 +5217,8 @@ packages: @@ -4627,8 +5217,8 @@ packages:
4627 fsevents: 2.3.2 5217 fsevents: 2.3.2
4628 dev: true 5218 dev: true
4629 5219
4630 - /rollup/3.9.1:  
4631 - resolution: {integrity: sha512-GswCYHXftN8ZKGVgQhTFUJB/NBXxrRGgO2NCy6E8s1rwEJ4Q9/VttNqcYfEvx4dTo4j58YqdC3OVztPzlKSX8w==} 5220 + /rollup/3.10.0:
  5221 + resolution: {integrity: sha512-JmRYz44NjC1MjVF2VKxc0M1a97vn+cDxeqWmnwyAF4FvpjK8YFdHpaqvQB+3IxCvX05vJxKZkoMDU8TShhmJVA==}
4632 engines: {node: '>=14.18.0', npm: '>=8.0.0'} 5222 engines: {node: '>=14.18.0', npm: '>=8.0.0'}
4633 hasBin: true 5223 hasBin: true
4634 optionalDependencies: 5224 optionalDependencies:
@@ -4644,7 +5234,7 @@ packages: @@ -4644,7 +5234,7 @@ packages:
4644 /rxjs/7.5.7: 5234 /rxjs/7.5.7:
4645 resolution: {integrity: sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==} 5235 resolution: {integrity: sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==}
4646 dependencies: 5236 dependencies:
4647 - tslib: registry.npmmirror.com/tslib/2.4.1 5237 + tslib: 2.4.1
4648 dev: true 5238 dev: true
4649 5239
4650 /safe-buffer/5.2.1: 5240 /safe-buffer/5.2.1:
@@ -4695,7 +5285,7 @@ packages: @@ -4695,7 +5285,7 @@ packages:
4695 resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} 5285 resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==}
4696 dependencies: 5286 dependencies:
4697 no-case: 3.0.4 5287 no-case: 3.0.4
4698 - tslib: registry.npmmirror.com/tslib/2.4.1 5288 + tslib: 2.4.1
4699 upper-case-first: 2.0.2 5289 upper-case-first: 2.0.2
4700 dev: true 5290 dev: true
4701 5291
@@ -4772,7 +5362,7 @@ packages: @@ -4772,7 +5362,7 @@ packages:
4772 resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} 5362 resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==}
4773 engines: {node: '>=10'} 5363 engines: {node: '>=10'}
4774 dependencies: 5364 dependencies:
4775 - ansi-styles: registry.npmmirror.com/ansi-styles/4.3.0 5365 + ansi-styles: 4.3.0
4776 astral-regex: 2.0.0 5366 astral-regex: 2.0.0
4777 is-fullwidth-code-point: 3.0.0 5367 is-fullwidth-code-point: 3.0.0
4778 dev: true 5368 dev: true
@@ -4794,7 +5384,7 @@ packages: @@ -4794,7 +5384,7 @@ packages:
4794 resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} 5384 resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
4795 dependencies: 5385 dependencies:
4796 dot-case: 3.0.4 5386 dot-case: 3.0.4
4797 - tslib: registry.npmmirror.com/tslib/2.4.1 5387 + tslib: 2.4.1
4798 dev: true 5388 dev: true
4799 5389
4800 /snapdragon-node/2.1.1: 5390 /snapdragon-node/2.1.1:
@@ -4832,7 +5422,6 @@ packages: @@ -4832,7 +5422,6 @@ packages:
4832 /source-map-js/1.0.2: 5422 /source-map-js/1.0.2:
4833 resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 5423 resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
4834 engines: {node: '>=0.10.0'} 5424 engines: {node: '>=0.10.0'}
4835 - dev: true  
4836 5425
4837 /source-map-resolve/0.5.3: 5426 /source-map-resolve/0.5.3:
4838 resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} 5427 resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==}
@@ -5039,13 +5628,13 @@ packages: @@ -5039,13 +5628,13 @@ packages:
5039 stylelint-config-recommended: 9.0.0_stylelint@14.16.1 5628 stylelint-config-recommended: 9.0.0_stylelint@14.16.1
5040 dev: true 5629 dev: true
5041 5630
5042 - /stylelint-order/5.0.0_stylelint@14.16.1:  
5043 - resolution: {integrity: sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw==} 5631 + /stylelint-order/6.0.1_stylelint@14.16.1:
  5632 + resolution: {integrity: sha512-C9gJDZArRBZvn+4MPgggwYTp7dK49WPnYa5+6tBEkZnW/YWj4xBVNJdQjIik14w5orlF9RqFpYDHN0FPWIFOSQ==}
5044 peerDependencies: 5633 peerDependencies:
5045 stylelint: ^14.0.0 5634 stylelint: ^14.0.0
5046 dependencies: 5635 dependencies:
5047 - postcss: registry.npmmirror.com/postcss/8.4.20  
5048 - postcss-sorting: 7.0.1_postcss@8.4.20 5636 + postcss: 8.4.21
  5637 + postcss-sorting: 8.0.1_postcss@8.4.21
5049 stylelint: 14.16.1 5638 stylelint: 14.16.1
5050 dev: true 5639 dev: true
5051 5640
@@ -5054,7 +5643,7 @@ packages: @@ -5054,7 +5643,7 @@ packages:
5054 engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 5643 engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
5055 hasBin: true 5644 hasBin: true
5056 dependencies: 5645 dependencies:
5057 - '@csstools/selector-specificity': 2.0.2_2xshye3abirqjlplmebvmaxyna 5646 + '@csstools/selector-specificity': 2.0.2_wajs5nedgkikc5pcuwett7legi
5058 balanced-match: 2.0.0 5647 balanced-match: 2.0.0
5059 colord: 2.9.3 5648 colord: 2.9.3
5060 cosmiconfig: 7.1.0 5649 cosmiconfig: 7.1.0
@@ -5077,10 +5666,10 @@ packages: @@ -5077,10 +5666,10 @@ packages:
5077 micromatch: 4.0.5 5666 micromatch: 4.0.5
5078 normalize-path: 3.0.0 5667 normalize-path: 3.0.0
5079 picocolors: 1.0.0 5668 picocolors: 1.0.0
5080 - postcss: 8.4.20 5669 + postcss: 8.4.21
5081 postcss-media-query-parser: 0.2.3 5670 postcss-media-query-parser: 0.2.3
5082 postcss-resolve-nested-selector: 0.1.1 5671 postcss-resolve-nested-selector: 0.1.1
5083 - postcss-safe-parser: 6.0.0_postcss@8.4.20 5672 + postcss-safe-parser: 6.0.0_postcss@8.4.21
5084 postcss-selector-parser: 6.0.11 5673 postcss-selector-parser: 6.0.11
5085 postcss-value-parser: 4.2.0 5674 postcss-value-parser: 4.2.0
5086 resolve-from: 5.0.0 5675 resolve-from: 5.0.0
@@ -5101,6 +5690,13 @@ packages: @@ -5101,6 +5690,13 @@ packages:
5101 engines: {node: '>=0.8.0'} 5690 engines: {node: '>=0.8.0'}
5102 dev: true 5691 dev: true
5103 5692
  5693 + /supports-color/3.2.3:
  5694 + resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==}
  5695 + engines: {node: '>=0.8.0'}
  5696 + dependencies:
  5697 + has-flag: 1.0.0
  5698 + dev: true
  5699 +
5104 /supports-color/5.5.0: 5700 /supports-color/5.5.0:
5105 resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 5701 resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
5106 engines: {node: '>=4'} 5702 engines: {node: '>=4'}
@@ -5162,10 +5758,14 @@ packages: @@ -5162,10 +5758,14 @@ packages:
5162 css-select: 4.3.0 5758 css-select: 4.3.0
5163 css-tree: 1.1.3 5759 css-tree: 1.1.3
5164 csso: 4.2.0 5760 csso: 4.2.0
5165 - picocolors: registry.npmmirror.com/picocolors/1.0.0 5761 + picocolors: 1.0.0
5166 stable: 0.1.8 5762 stable: 0.1.8
5167 dev: true 5763 dev: true
5168 5764
  5765 + /systemjs/6.13.0:
  5766 + resolution: {integrity: sha512-P3cgh2bpaPvAO2NE3uRp/n6hmk4xPX4DQf+UzTlCAycssKdqhp6hjw+ENWe+aUS7TogKRFtptMosTSFeC6R55g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/systemjs/-/systemjs-6.13.0.tgz}
  5767 + dev: true
  5768 +
5169 /table/6.8.1: 5769 /table/6.8.1:
5170 resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} 5770 resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==}
5171 engines: {node: '>=10.0.0'} 5771 engines: {node: '>=10.0.0'}
@@ -5212,7 +5812,7 @@ packages: @@ -5212,7 +5812,7 @@ packages:
5212 dev: false 5812 dev: false
5213 5813
5214 /to-fast-properties/2.0.0: 5814 /to-fast-properties/2.0.0:
5215 - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 5815 + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz}
5216 engines: {node: '>=4'} 5816 engines: {node: '>=4'}
5217 5817
5218 /to-object-path/0.3.0: 5818 /to-object-path/0.3.0:
@@ -5222,6 +5822,21 @@ packages: @@ -5222,6 +5822,21 @@ packages:
5222 kind-of: 3.2.2 5822 kind-of: 3.2.2
5223 dev: true 5823 dev: true
5224 5824
  5825 + /to-regex-range/2.1.1:
  5826 + resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/to-regex-range/-/to-regex-range-2.1.1.tgz}
  5827 + engines: {node: '>=0.10.0'}
  5828 + dependencies:
  5829 + is-number: 3.0.0
  5830 + repeat-string: 1.6.1
  5831 + dev: true
  5832 +
  5833 + /to-regex-range/5.0.1:
  5834 + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/to-regex-range/-/to-regex-range-5.0.1.tgz}
  5835 + engines: {node: '>=8.0'}
  5836 + dependencies:
  5837 + is-number: 7.0.0
  5838 + dev: true
  5839 +
5225 /to-regex/3.0.2: 5840 /to-regex/3.0.2:
5226 resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} 5841 resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==}
5227 engines: {node: '>=0.10.0'} 5842 engines: {node: '>=0.10.0'}
@@ -5232,6 +5847,10 @@ packages: @@ -5232,6 +5847,10 @@ packages:
5232 safe-regex: 1.1.0 5847 safe-regex: 1.1.0
5233 dev: true 5848 dev: true
5234 5849
  5850 + /tr46/0.0.3:
  5851 + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/tr46/-/tr46-0.0.3.tgz}
  5852 + dev: true
  5853 +
5235 /traverse/0.6.7: 5854 /traverse/0.6.7:
5236 resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==} 5855 resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==}
5237 dev: true 5856 dev: true
@@ -5241,7 +5860,7 @@ packages: @@ -5241,7 +5860,7 @@ packages:
5241 engines: {node: '>=8'} 5860 engines: {node: '>=8'}
5242 dev: true 5861 dev: true
5243 5862
5244 - /ts-node/10.9.1_rju6pyblifsagdmqm3y74zsi6q: 5863 + /ts-node/10.9.1_awa2wsr5thmg3i7jqycphctjfq:
5245 resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} 5864 resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
5246 hasBin: true 5865 hasBin: true
5247 peerDependencies: 5866 peerDependencies:
@@ -5260,7 +5879,7 @@ packages: @@ -5260,7 +5879,7 @@ packages:
5260 '@tsconfig/node12': 1.0.11 5879 '@tsconfig/node12': 1.0.11
5261 '@tsconfig/node14': 1.0.3 5880 '@tsconfig/node14': 1.0.3
5262 '@tsconfig/node16': 1.0.3 5881 '@tsconfig/node16': 1.0.3
5263 - '@types/node': 14.18.33 5882 + '@types/node': 18.11.18
5264 acorn: 8.8.1 5883 acorn: 8.8.1
5265 acorn-walk: 8.2.0 5884 acorn-walk: 8.2.0
5266 arg: 4.1.3 5885 arg: 4.1.3
@@ -5276,6 +5895,10 @@ packages: @@ -5276,6 +5895,10 @@ packages:
5276 resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 5895 resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
5277 dev: true 5896 dev: true
5278 5897
  5898 + /tslib/2.3.0:
  5899 + resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/tslib/-/tslib-2.3.0.tgz}
  5900 + dev: false
  5901 +
5279 /tslib/2.4.1: 5902 /tslib/2.4.1:
5280 resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} 5903 resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==}
5281 dev: true 5904 dev: true
@@ -5381,13 +6004,13 @@ packages: @@ -5381,13 +6004,13 @@ packages:
5381 /upper-case-first/2.0.2: 6004 /upper-case-first/2.0.2:
5382 resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} 6005 resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==}
5383 dependencies: 6006 dependencies:
5384 - tslib: registry.npmmirror.com/tslib/2.4.1 6007 + tslib: 2.4.1
5385 dev: true 6008 dev: true
5386 6009
5387 /upper-case/2.0.2: 6010 /upper-case/2.0.2:
5388 resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} 6011 resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==}
5389 dependencies: 6012 dependencies:
5390 - tslib: registry.npmmirror.com/tslib/2.4.1 6013 + tslib: 2.4.1
5391 dev: true 6014 dev: true
5392 6015
5393 /uri-js/4.4.1: 6016 /uri-js/4.4.1:
@@ -5456,7 +6079,7 @@ packages: @@ -5456,7 +6079,7 @@ packages:
5456 ejs: 3.1.8 6079 ejs: 3.1.8
5457 dev: true 6080 dev: true
5458 6081
5459 - /vite-plugin-eslint/1.8.1_eslint@8.31.0+vite@4.0.4: 6082 + /vite-plugin-eslint/1.8.1_eslint@8.32.0+vite@4.0.4:
5460 resolution: {integrity: sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==} 6083 resolution: {integrity: sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==}
5461 peerDependencies: 6084 peerDependencies:
5462 eslint: '>=7' 6085 eslint: '>=7'
@@ -5464,7 +6087,7 @@ packages: @@ -5464,7 +6087,7 @@ packages:
5464 dependencies: 6087 dependencies:
5465 '@rollup/pluginutils': 4.2.1 6088 '@rollup/pluginutils': 4.2.1
5466 '@types/eslint': 8.4.10 6089 '@types/eslint': 8.4.10
5467 - eslint: 8.31.0 6090 + eslint: 8.32.0
5468 rollup: 2.79.1 6091 rollup: 2.79.1
5469 vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i 6092 vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i
5470 dev: true 6093 dev: true
@@ -5481,6 +6104,21 @@ packages: @@ -5481,6 +6104,21 @@ packages:
5481 vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i 6104 vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i
5482 dev: true 6105 dev: true
5483 6106
  6107 + /vite-plugin-purge-icons/0.9.2_vite@4.0.4:
  6108 + resolution: {integrity: sha512-vxJEMyNyckqLr/4HPsW9P6BMLUvOVMvjjFz3jLl4Wke1KWE8ITJUxIUwodxaOmEp9L2lxVk5an3TYeycZCfqFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/vite-plugin-purge-icons/-/vite-plugin-purge-icons-0.9.2.tgz}
  6109 + engines: {node: '>= 12'}
  6110 + peerDependencies:
  6111 + vite: ^2.0.0 || ^3.0.0 || ^4.0.0
  6112 + dependencies:
  6113 + '@purge-icons/core': 0.9.1
  6114 + '@purge-icons/generated': 0.9.0
  6115 + rollup-plugin-purge-icons: 0.9.1
  6116 + vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i
  6117 + transitivePeerDependencies:
  6118 + - encoding
  6119 + - supports-color
  6120 + dev: true
  6121 +
5484 /vite-plugin-style-import/2.0.0_vite@4.0.4: 6122 /vite-plugin-style-import/2.0.0_vite@4.0.4:
5485 resolution: {integrity: sha512-qtoHQae5dSUQPo/rYz/8p190VU5y19rtBaeV7ryLa/AYAU/e9CG89NrN/3+k7MR8mJy/GPIu91iJ3zk9foUOSA==} 6123 resolution: {integrity: sha512-qtoHQae5dSUQPo/rYz/8p190VU5y19rtBaeV7ryLa/AYAU/e9CG89NrN/3+k7MR8mJy/GPIu91iJ3zk9foUOSA==}
5486 peerDependencies: 6124 peerDependencies:
@@ -5524,6 +6162,20 @@ packages: @@ -5524,6 +6162,20 @@ packages:
5524 vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i 6162 vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i
5525 dev: true 6163 dev: true
5526 6164
  6165 + /vite-plugin-windicss/1.8.10_vite@4.0.4:
  6166 + resolution: {integrity: sha512-scywsuzo46lcTBohspmF0WiwhWEte6p+OUVrX4yr7VMRvLHMHVfLtJReyD5pppjijG7YOwVsZn7XBWWZtF658Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/vite-plugin-windicss/-/vite-plugin-windicss-1.8.10.tgz}
  6167 + peerDependencies:
  6168 + vite: ^2.0.1 || ^3.0.0 || ^4.0.0
  6169 + dependencies:
  6170 + '@windicss/plugin-utils': 1.8.10
  6171 + debug: 4.3.4
  6172 + kolorist: 1.6.0
  6173 + vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i
  6174 + windicss: 3.5.6
  6175 + transitivePeerDependencies:
  6176 + - supports-color
  6177 + dev: true
  6178 +
5527 /vite/4.0.4_zxbrnrc4iyldik6mikh3pswz4i: 6179 /vite/4.0.4_zxbrnrc4iyldik6mikh3pswz4i:
5528 resolution: {integrity: sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==} 6180 resolution: {integrity: sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==}
5529 engines: {node: ^14.18.0 || >=16.0.0} 6181 engines: {node: ^14.18.0 || >=16.0.0}
@@ -5551,9 +6203,9 @@ packages: @@ -5551,9 +6203,9 @@ packages:
5551 dependencies: 6203 dependencies:
5552 '@types/node': 18.11.18 6204 '@types/node': 18.11.18
5553 esbuild: 0.16.5 6205 esbuild: 0.16.5
5554 - postcss: 8.4.20 6206 + postcss: 8.4.21
5555 resolve: 1.22.1 6207 resolve: 1.22.1
5556 - rollup: 3.9.1 6208 + rollup: 3.10.0
5557 sass: 1.57.1 6209 sass: 1.57.1
5558 terser: 5.16.1 6210 terser: 5.16.1
5559 optionalDependencies: 6211 optionalDependencies:
@@ -5575,14 +6227,14 @@ packages: @@ -5575,14 +6227,14 @@ packages:
5575 vue: 3.2.45 6227 vue: 3.2.45
5576 dev: false 6228 dev: false
5577 6229
5578 - /vue-eslint-parser/9.1.0_eslint@8.31.0: 6230 + /vue-eslint-parser/9.1.0_eslint@8.32.0:
5579 resolution: {integrity: sha512-NGn/iQy8/Wb7RrRa4aRkokyCZfOUWk19OP5HP6JEozQFX5AoS/t+Z0ZN7FY4LlmWc4FNI922V7cvX28zctN8dQ==} 6231 resolution: {integrity: sha512-NGn/iQy8/Wb7RrRa4aRkokyCZfOUWk19OP5HP6JEozQFX5AoS/t+Z0ZN7FY4LlmWc4FNI922V7cvX28zctN8dQ==}
5580 engines: {node: ^14.17.0 || >=16.0.0} 6232 engines: {node: ^14.17.0 || >=16.0.0}
5581 peerDependencies: 6233 peerDependencies:
5582 eslint: '>=6.0.0' 6234 eslint: '>=6.0.0'
5583 dependencies: 6235 dependencies:
5584 debug: 4.3.4 6236 debug: 4.3.4
5585 - eslint: 8.31.0 6237 + eslint: 8.32.0
5586 eslint-scope: 7.1.1 6238 eslint-scope: 7.1.1
5587 eslint-visitor-keys: 3.3.0 6239 eslint-visitor-keys: 3.3.0
5588 espree: 9.4.1 6240 espree: 9.4.1
@@ -5621,14 +6273,14 @@ packages: @@ -5621,14 +6273,14 @@ packages:
5621 he: 1.2.0 6273 he: 1.2.0
5622 dev: true 6274 dev: true
5623 6275
5624 - /vue-tsc/1.0.20_typescript@4.9.4:  
5625 - resolution: {integrity: sha512-AApewYXozAD7v4Iz9I0QzQebSVgvlUvpfbGe2e9TwtBdcw5gBsGiX8Oj5BdxRRiGnOdDG3BHPK8msl7Qhmy/1A==} 6276 + /vue-tsc/1.0.24_typescript@4.9.4:
  6277 + resolution: {integrity: sha512-mmU1s5SAqE1nByQAiQnao9oU4vX+mSdsgI8H57SfKH6UVzq/jP9+Dbi2GaV+0b4Cn361d2ln8m6xeU60ApiEXg==}
5626 hasBin: true 6278 hasBin: true
5627 peerDependencies: 6279 peerDependencies:
5628 typescript: '*' 6280 typescript: '*'
5629 dependencies: 6281 dependencies:
5630 - '@volar/vue-language-core': 1.0.20  
5631 - '@volar/vue-typescript': 1.0.20 6282 + '@volar/vue-language-core': 1.0.24
  6283 + '@volar/vue-typescript': 1.0.24
5632 typescript: 4.9.4 6284 typescript: 4.9.4
5633 dev: true 6285 dev: true
5634 6286
@@ -5654,10 +6306,24 @@ packages: @@ -5654,10 +6306,24 @@ packages:
5654 '@vue/server-renderer': 3.2.45_vue@3.2.45 6306 '@vue/server-renderer': 3.2.45_vue@3.2.45
5655 '@vue/shared': 3.2.45 6307 '@vue/shared': 3.2.45
5656 6308
  6309 + /vxe-table/4.3.9_vue@3.2.45+xe-utils@3.5.7:
  6310 + resolution: {integrity: sha512-Ns7Ooa7lOHBpks90i0k0BMNyxfMpUo39ryxTgKE41X3xVnI9tGQs2U6+klfDlsuqYfmG3ibyzHN3OCrWbbKo4Q==}
  6311 + peerDependencies:
  6312 + vue: ^3.2.28
  6313 + xe-utils: ^3.5.0
  6314 + dependencies:
  6315 + vue: 3.2.45
  6316 + xe-utils: 3.5.7
  6317 + dev: false
  6318 +
5657 /web-storage-cache/1.1.1: 6319 /web-storage-cache/1.1.1:
5658 resolution: {integrity: sha512-D0MieGooOs8RpsrK+vnejXnvh4OOv/+lTFB35JRkJJQt+uOjPE08XpaE0QBLMTRu47B1KGT/Nq3Gbag3Orinzw==} 6320 resolution: {integrity: sha512-D0MieGooOs8RpsrK+vnejXnvh4OOv/+lTFB35JRkJJQt+uOjPE08XpaE0QBLMTRu47B1KGT/Nq3Gbag3Orinzw==}
5659 dev: false 6321 dev: false
5660 6322
  6323 + /webidl-conversions/3.0.1:
  6324 + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz}
  6325 + dev: true
  6326 +
5661 /webpack-sources/3.2.3: 6327 /webpack-sources/3.2.3:
5662 resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} 6328 resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
5663 engines: {node: '>=10.13.0'} 6329 engines: {node: '>=10.13.0'}
@@ -5667,6 +6333,13 @@ packages: @@ -5667,6 +6333,13 @@ packages:
5667 resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} 6333 resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==}
5668 dev: true 6334 dev: true
5669 6335
  6336 + /whatwg-url/5.0.0:
  6337 + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/whatwg-url/-/whatwg-url-5.0.0.tgz}
  6338 + dependencies:
  6339 + tr46: 0.0.3
  6340 + webidl-conversions: 3.0.1
  6341 + dev: true
  6342 +
5670 /which-module/2.0.0: 6343 /which-module/2.0.0:
5671 resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} 6344 resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==}
5672 dev: false 6345 dev: false
@@ -5705,7 +6378,7 @@ packages: @@ -5705,7 +6378,7 @@ packages:
5705 resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} 6378 resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
5706 engines: {node: '>=8'} 6379 engines: {node: '>=8'}
5707 dependencies: 6380 dependencies:
5708 - ansi-styles: registry.npmmirror.com/ansi-styles/4.3.0 6381 + ansi-styles: 4.3.0
5709 string-width: 4.2.3 6382 string-width: 4.2.3
5710 strip-ansi: 6.0.1 6383 strip-ansi: 6.0.1
5711 6384
@@ -5774,7 +6447,7 @@ packages: @@ -5774,7 +6447,7 @@ packages:
5774 resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} 6447 resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
5775 engines: {node: '>=6'} 6448 engines: {node: '>=6'}
5776 dependencies: 6449 dependencies:
5777 - camelcase: registry.npmmirror.com/camelcase/5.3.1 6450 + camelcase: 5.3.1
5778 decamelize: 1.2.0 6451 decamelize: 1.2.0
5779 dev: false 6452 dev: false
5780 6453
@@ -5828,1259 +6501,8 @@ packages: @@ -5828,1259 +6501,8 @@ packages:
5828 engines: {node: '>=10'} 6501 engines: {node: '>=10'}
5829 dev: true 6502 dev: true
5830 6503
5831 - registry.npmmirror.com/@ampproject/remapping/2.2.0:  
5832 - resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.0.tgz}  
5833 - name: '@ampproject/remapping'  
5834 - version: 2.2.0  
5835 - engines: {node: '>=6.0.0'}  
5836 - dependencies:  
5837 - '@jridgewell/gen-mapping': registry.npmmirror.com/@jridgewell/gen-mapping/0.1.1  
5838 - '@jridgewell/trace-mapping': registry.npmmirror.com/@jridgewell/trace-mapping/0.3.17  
5839 - dev: true  
5840 -  
5841 - registry.npmmirror.com/@antfu/utils/0.7.2:  
5842 - resolution: {integrity: sha512-vy9fM3pIxZmX07dL+VX1aZe7ynZ+YyB0jY+jE6r3hOK6GNY2t6W8rzpFC4tgpbXUYABkFQwgJq2XYXlxbXAI0g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.2.tgz}  
5843 - name: '@antfu/utils'  
5844 - version: 0.7.2  
5845 - dev: true  
5846 -  
5847 - registry.npmmirror.com/@babel/code-frame/7.18.6:  
5848 - resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.18.6.tgz}  
5849 - name: '@babel/code-frame'  
5850 - version: 7.18.6  
5851 - engines: {node: '>=6.9.0'}  
5852 - dependencies:  
5853 - '@babel/highlight': registry.npmmirror.com/@babel/highlight/7.18.6  
5854 - dev: true  
5855 -  
5856 - registry.npmmirror.com/@babel/compat-data/7.20.1:  
5857 - resolution: {integrity: sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.20.1.tgz}  
5858 - name: '@babel/compat-data'  
5859 - version: 7.20.1  
5860 - engines: {node: '>=6.9.0'}  
5861 - dev: true  
5862 -  
5863 - registry.npmmirror.com/@babel/core/7.20.5:  
5864 - resolution: {integrity: sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/core/-/core-7.20.5.tgz}  
5865 - name: '@babel/core'  
5866 - version: 7.20.5  
5867 - engines: {node: '>=6.9.0'}  
5868 - dependencies:  
5869 - '@ampproject/remapping': registry.npmmirror.com/@ampproject/remapping/2.2.0  
5870 - '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.18.6  
5871 - '@babel/generator': registry.npmmirror.com/@babel/generator/7.20.5  
5872 - '@babel/helper-compilation-targets': registry.npmmirror.com/@babel/helper-compilation-targets/7.20.0_@babel+core@7.20.5  
5873 - '@babel/helper-module-transforms': registry.npmmirror.com/@babel/helper-module-transforms/7.20.2  
5874 - '@babel/helpers': registry.npmmirror.com/@babel/helpers/7.20.6  
5875 - '@babel/parser': registry.npmmirror.com/@babel/parser/7.20.5  
5876 - '@babel/template': registry.npmmirror.com/@babel/template/7.18.10  
5877 - '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.20.5  
5878 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.5  
5879 - convert-source-map: registry.npmmirror.com/convert-source-map/1.9.0  
5880 - debug: 4.3.4  
5881 - gensync: registry.npmmirror.com/gensync/1.0.0-beta.2  
5882 - json5: registry.npmmirror.com/json5/2.2.1  
5883 - semver: registry.npmmirror.com/semver/6.3.0  
5884 - transitivePeerDependencies:  
5885 - - supports-color  
5886 - dev: true  
5887 -  
5888 - registry.npmmirror.com/@babel/generator/7.20.5:  
5889 - resolution: {integrity: sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/generator/-/generator-7.20.5.tgz}  
5890 - name: '@babel/generator'  
5891 - version: 7.20.5  
5892 - engines: {node: '>=6.9.0'}  
5893 - dependencies:  
5894 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.5  
5895 - '@jridgewell/gen-mapping': registry.npmmirror.com/@jridgewell/gen-mapping/0.3.2  
5896 - jsesc: registry.npmmirror.com/jsesc/2.5.2  
5897 - dev: true  
5898 -  
5899 - registry.npmmirror.com/@babel/helper-annotate-as-pure/7.18.6:  
5900 - resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz}  
5901 - name: '@babel/helper-annotate-as-pure'  
5902 - version: 7.18.6  
5903 - engines: {node: '>=6.9.0'}  
5904 - dependencies:  
5905 - '@babel/types': 7.20.5  
5906 - dev: true  
5907 -  
5908 - registry.npmmirror.com/@babel/helper-compilation-targets/7.20.0_@babel+core@7.20.5:  
5909 - resolution: {integrity: sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz}  
5910 - id: registry.npmmirror.com/@babel/helper-compilation-targets/7.20.0  
5911 - name: '@babel/helper-compilation-targets'  
5912 - version: 7.20.0  
5913 - engines: {node: '>=6.9.0'}  
5914 - peerDependencies:  
5915 - '@babel/core': ^7.0.0  
5916 - dependencies:  
5917 - '@babel/compat-data': registry.npmmirror.com/@babel/compat-data/7.20.1  
5918 - '@babel/core': registry.npmmirror.com/@babel/core/7.20.5  
5919 - '@babel/helper-validator-option': registry.npmmirror.com/@babel/helper-validator-option/7.18.6  
5920 - browserslist: registry.npmmirror.com/browserslist/4.21.4  
5921 - semver: registry.npmmirror.com/semver/6.3.0  
5922 - dev: true  
5923 -  
5924 - registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.20.2_@babel+core@7.20.5:  
5925 - resolution: {integrity: sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz}  
5926 - id: registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.20.2  
5927 - name: '@babel/helper-create-class-features-plugin'  
5928 - version: 7.20.2  
5929 - engines: {node: '>=6.9.0'}  
5930 - peerDependencies:  
5931 - '@babel/core': ^7.0.0  
5932 - dependencies:  
5933 - '@babel/core': registry.npmmirror.com/@babel/core/7.20.5  
5934 - '@babel/helper-annotate-as-pure': registry.npmmirror.com/@babel/helper-annotate-as-pure/7.18.6  
5935 - '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.18.9  
5936 - '@babel/helper-function-name': registry.npmmirror.com/@babel/helper-function-name/7.19.0  
5937 - '@babel/helper-member-expression-to-functions': registry.npmmirror.com/@babel/helper-member-expression-to-functions/7.18.9  
5938 - '@babel/helper-optimise-call-expression': registry.npmmirror.com/@babel/helper-optimise-call-expression/7.18.6  
5939 - '@babel/helper-replace-supers': registry.npmmirror.com/@babel/helper-replace-supers/7.19.1  
5940 - '@babel/helper-split-export-declaration': registry.npmmirror.com/@babel/helper-split-export-declaration/7.18.6  
5941 - transitivePeerDependencies:  
5942 - - supports-color  
5943 - dev: true  
5944 -  
5945 - registry.npmmirror.com/@babel/helper-environment-visitor/7.18.9:  
5946 - resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz}  
5947 - name: '@babel/helper-environment-visitor'  
5948 - version: 7.18.9  
5949 - engines: {node: '>=6.9.0'}  
5950 - dev: true  
5951 -  
5952 - registry.npmmirror.com/@babel/helper-function-name/7.19.0:  
5953 - resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz}  
5954 - name: '@babel/helper-function-name'  
5955 - version: 7.19.0  
5956 - engines: {node: '>=6.9.0'}  
5957 - dependencies:  
5958 - '@babel/template': registry.npmmirror.com/@babel/template/7.18.10  
5959 - '@babel/types': 7.20.5  
5960 - dev: true  
5961 -  
5962 - registry.npmmirror.com/@babel/helper-hoist-variables/7.18.6:  
5963 - resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz}  
5964 - name: '@babel/helper-hoist-variables'  
5965 - version: 7.18.6  
5966 - engines: {node: '>=6.9.0'}  
5967 - dependencies:  
5968 - '@babel/types': 7.20.5  
5969 - dev: true  
5970 -  
5971 - registry.npmmirror.com/@babel/helper-member-expression-to-functions/7.18.9:  
5972 - resolution: {integrity: sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz}  
5973 - name: '@babel/helper-member-expression-to-functions'  
5974 - version: 7.18.9  
5975 - engines: {node: '>=6.9.0'}  
5976 - dependencies:  
5977 - '@babel/types': 7.20.5  
5978 - dev: true  
5979 -  
5980 - registry.npmmirror.com/@babel/helper-module-imports/7.18.6:  
5981 - resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz}  
5982 - name: '@babel/helper-module-imports'  
5983 - version: 7.18.6  
5984 - engines: {node: '>=6.9.0'}  
5985 - dependencies:  
5986 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.5  
5987 - dev: true  
5988 -  
5989 - registry.npmmirror.com/@babel/helper-module-transforms/7.20.2:  
5990 - resolution: {integrity: sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz}  
5991 - name: '@babel/helper-module-transforms'  
5992 - version: 7.20.2  
5993 - engines: {node: '>=6.9.0'}  
5994 - dependencies:  
5995 - '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.18.9  
5996 - '@babel/helper-module-imports': registry.npmmirror.com/@babel/helper-module-imports/7.18.6  
5997 - '@babel/helper-simple-access': registry.npmmirror.com/@babel/helper-simple-access/7.20.2  
5998 - '@babel/helper-split-export-declaration': registry.npmmirror.com/@babel/helper-split-export-declaration/7.18.6  
5999 - '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier/7.19.1  
6000 - '@babel/template': registry.npmmirror.com/@babel/template/7.18.10  
6001 - '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.20.5  
6002 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.5  
6003 - transitivePeerDependencies:  
6004 - - supports-color  
6005 - dev: true  
6006 -  
6007 - registry.npmmirror.com/@babel/helper-optimise-call-expression/7.18.6:  
6008 - resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz}  
6009 - name: '@babel/helper-optimise-call-expression'  
6010 - version: 7.18.6  
6011 - engines: {node: '>=6.9.0'}  
6012 - dependencies:  
6013 - '@babel/types': 7.20.5  
6014 - dev: true  
6015 -  
6016 - registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2:  
6017 - resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz}  
6018 - name: '@babel/helper-plugin-utils'  
6019 - version: 7.20.2  
6020 - engines: {node: '>=6.9.0'}  
6021 - dev: true  
6022 -  
6023 - registry.npmmirror.com/@babel/helper-replace-supers/7.19.1:  
6024 - resolution: {integrity: sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz}  
6025 - name: '@babel/helper-replace-supers'  
6026 - version: 7.19.1  
6027 - engines: {node: '>=6.9.0'}  
6028 - dependencies:  
6029 - '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.18.9  
6030 - '@babel/helper-member-expression-to-functions': registry.npmmirror.com/@babel/helper-member-expression-to-functions/7.18.9  
6031 - '@babel/helper-optimise-call-expression': registry.npmmirror.com/@babel/helper-optimise-call-expression/7.18.6  
6032 - '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.20.5  
6033 - '@babel/types': 7.20.5  
6034 - transitivePeerDependencies:  
6035 - - supports-color  
6036 - dev: true  
6037 -  
6038 - registry.npmmirror.com/@babel/helper-simple-access/7.20.2:  
6039 - resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz}  
6040 - name: '@babel/helper-simple-access'  
6041 - version: 7.20.2  
6042 - engines: {node: '>=6.9.0'}  
6043 - dependencies:  
6044 - '@babel/types': 7.20.5  
6045 - dev: true  
6046 -  
6047 - registry.npmmirror.com/@babel/helper-split-export-declaration/7.18.6:  
6048 - resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz}  
6049 - name: '@babel/helper-split-export-declaration'  
6050 - version: 7.18.6  
6051 - engines: {node: '>=6.9.0'}  
6052 - dependencies:  
6053 - '@babel/types': 7.20.5  
6054 - dev: true  
6055 -  
6056 - registry.npmmirror.com/@babel/helper-string-parser/7.19.4:  
6057 - 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}  
6058 - name: '@babel/helper-string-parser'  
6059 - version: 7.19.4  
6060 - engines: {node: '>=6.9.0'}  
6061 -  
6062 - registry.npmmirror.com/@babel/helper-validator-identifier/7.19.1:  
6063 - 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}  
6064 - name: '@babel/helper-validator-identifier'  
6065 - version: 7.19.1  
6066 - engines: {node: '>=6.9.0'}  
6067 -  
6068 - registry.npmmirror.com/@babel/helper-validator-option/7.18.6:  
6069 - resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz}  
6070 - name: '@babel/helper-validator-option'  
6071 - version: 7.18.6  
6072 - engines: {node: '>=6.9.0'}  
6073 - dev: true  
6074 -  
6075 - registry.npmmirror.com/@babel/helpers/7.20.6:  
6076 - resolution: {integrity: sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helpers/-/helpers-7.20.6.tgz}  
6077 - name: '@babel/helpers'  
6078 - version: 7.20.6  
6079 - engines: {node: '>=6.9.0'}  
6080 - dependencies:  
6081 - '@babel/template': registry.npmmirror.com/@babel/template/7.18.10  
6082 - '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.20.5  
6083 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.5  
6084 - transitivePeerDependencies:  
6085 - - supports-color  
6086 - dev: true  
6087 -  
6088 - registry.npmmirror.com/@babel/highlight/7.18.6:  
6089 - resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/highlight/-/highlight-7.18.6.tgz}  
6090 - name: '@babel/highlight'  
6091 - version: 7.18.6  
6092 - engines: {node: '>=6.9.0'}  
6093 - dependencies:  
6094 - '@babel/helper-validator-identifier': 7.19.1  
6095 - chalk: 2.4.2  
6096 - js-tokens: registry.npmmirror.com/js-tokens/4.0.0  
6097 - dev: true  
6098 -  
6099 - registry.npmmirror.com/@babel/parser/7.20.5:  
6100 - resolution: {integrity: sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/parser/-/parser-7.20.5.tgz}  
6101 - name: '@babel/parser'  
6102 - version: 7.20.5  
6103 - engines: {node: '>=6.0.0'}  
6104 - hasBin: true  
6105 - dependencies:  
6106 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.5  
6107 - dev: true  
6108 -  
6109 - registry.npmmirror.com/@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.5:  
6110 - resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz}  
6111 - id: registry.npmmirror.com/@babel/plugin-syntax-jsx/7.18.6  
6112 - name: '@babel/plugin-syntax-jsx'  
6113 - version: 7.18.6  
6114 - engines: {node: '>=6.9.0'}  
6115 - peerDependencies:  
6116 - '@babel/core': ^7.0.0-0  
6117 - dependencies:  
6118 - '@babel/core': registry.npmmirror.com/@babel/core/7.20.5  
6119 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2  
6120 - dev: true  
6121 -  
6122 - registry.npmmirror.com/@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.20.5:  
6123 - resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz}  
6124 - id: registry.npmmirror.com/@babel/plugin-syntax-typescript/7.20.0  
6125 - name: '@babel/plugin-syntax-typescript'  
6126 - version: 7.20.0  
6127 - engines: {node: '>=6.9.0'}  
6128 - peerDependencies:  
6129 - '@babel/core': ^7.0.0-0  
6130 - dependencies:  
6131 - '@babel/core': registry.npmmirror.com/@babel/core/7.20.5  
6132 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2  
6133 - dev: true  
6134 -  
6135 - registry.npmmirror.com/@babel/plugin-transform-typescript/7.20.2_@babel+core@7.20.5:  
6136 - resolution: {integrity: sha512-jvS+ngBfrnTUBfOQq8NfGnSbF9BrqlR6hjJ2yVxMkmO5nL/cdifNbI30EfjRlN4g5wYWNnMPyj5Sa6R1pbLeag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.2.tgz}  
6137 - id: registry.npmmirror.com/@babel/plugin-transform-typescript/7.20.2  
6138 - name: '@babel/plugin-transform-typescript'  
6139 - version: 7.20.2  
6140 - engines: {node: '>=6.9.0'}  
6141 - peerDependencies:  
6142 - '@babel/core': ^7.0.0-0  
6143 - dependencies:  
6144 - '@babel/core': registry.npmmirror.com/@babel/core/7.20.5  
6145 - '@babel/helper-create-class-features-plugin': registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.20.2_@babel+core@7.20.5  
6146 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2  
6147 - '@babel/plugin-syntax-typescript': registry.npmmirror.com/@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.20.5  
6148 - transitivePeerDependencies:  
6149 - - supports-color  
6150 - dev: true  
6151 -  
6152 - registry.npmmirror.com/@babel/standalone/7.20.6:  
6153 - resolution: {integrity: sha512-u5at/CbBLETf7kx2LOY4XdhseD79Y099WZKAOMXeT8qvd9OSR515my2UNBBLY4qIht/Qi9KySeQHQwQwxJN4Sw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/standalone/-/standalone-7.20.6.tgz}  
6154 - name: '@babel/standalone'  
6155 - version: 7.20.6  
6156 - engines: {node: '>=6.9.0'}  
6157 - dev: true  
6158 -  
6159 - registry.npmmirror.com/@babel/template/7.18.10:  
6160 - resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/template/-/template-7.18.10.tgz}  
6161 - name: '@babel/template'  
6162 - version: 7.18.10  
6163 - engines: {node: '>=6.9.0'}  
6164 - dependencies:  
6165 - '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.18.6  
6166 - '@babel/parser': registry.npmmirror.com/@babel/parser/7.20.5  
6167 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.5  
6168 - dev: true  
6169 -  
6170 - registry.npmmirror.com/@babel/traverse/7.20.1:  
6171 - resolution: {integrity: sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/traverse/-/traverse-7.20.1.tgz}  
6172 - name: '@babel/traverse'  
6173 - version: 7.20.1  
6174 - engines: {node: '>=6.9.0'}  
6175 - dependencies:  
6176 - '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.18.6  
6177 - '@babel/generator': registry.npmmirror.com/@babel/generator/7.20.5  
6178 - '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.18.9  
6179 - '@babel/helper-function-name': registry.npmmirror.com/@babel/helper-function-name/7.19.0  
6180 - '@babel/helper-hoist-variables': registry.npmmirror.com/@babel/helper-hoist-variables/7.18.6  
6181 - '@babel/helper-split-export-declaration': registry.npmmirror.com/@babel/helper-split-export-declaration/7.18.6  
6182 - '@babel/parser': registry.npmmirror.com/@babel/parser/7.20.5  
6183 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.5  
6184 - debug: 4.3.4  
6185 - globals: 11.12.0  
6186 - transitivePeerDependencies:  
6187 - - supports-color  
6188 - dev: true  
6189 -  
6190 - registry.npmmirror.com/@babel/traverse/7.20.5:  
6191 - resolution: {integrity: sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/traverse/-/traverse-7.20.5.tgz}  
6192 - name: '@babel/traverse'  
6193 - version: 7.20.5  
6194 - engines: {node: '>=6.9.0'}  
6195 - dependencies:  
6196 - '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.18.6  
6197 - '@babel/generator': registry.npmmirror.com/@babel/generator/7.20.5  
6198 - '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.18.9  
6199 - '@babel/helper-function-name': registry.npmmirror.com/@babel/helper-function-name/7.19.0  
6200 - '@babel/helper-hoist-variables': registry.npmmirror.com/@babel/helper-hoist-variables/7.18.6  
6201 - '@babel/helper-split-export-declaration': registry.npmmirror.com/@babel/helper-split-export-declaration/7.18.6  
6202 - '@babel/parser': registry.npmmirror.com/@babel/parser/7.20.5  
6203 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.5  
6204 - debug: 4.3.4  
6205 - globals: 11.12.0  
6206 - transitivePeerDependencies:  
6207 - - supports-color  
6208 - dev: true  
6209 -  
6210 - registry.npmmirror.com/@babel/types/7.20.2:  
6211 - 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}  
6212 - name: '@babel/types'  
6213 - version: 7.20.2  
6214 - engines: {node: '>=6.9.0'}  
6215 - dependencies:  
6216 - '@babel/helper-string-parser': registry.npmmirror.com/@babel/helper-string-parser/7.19.4  
6217 - '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier/7.19.1  
6218 - to-fast-properties: registry.npmmirror.com/to-fast-properties/2.0.0  
6219 - dev: true  
6220 -  
6221 - registry.npmmirror.com/@babel/types/7.20.5:  
6222 - resolution: {integrity: sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/types/-/types-7.20.5.tgz}  
6223 - name: '@babel/types'  
6224 - version: 7.20.5  
6225 - engines: {node: '>=6.9.0'}  
6226 - dependencies:  
6227 - '@babel/helper-string-parser': registry.npmmirror.com/@babel/helper-string-parser/7.19.4  
6228 - '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier/7.19.1  
6229 - to-fast-properties: registry.npmmirror.com/to-fast-properties/2.0.0  
6230 -  
6231 - registry.npmmirror.com/@iconify/iconify/2.1.2:  
6232 - resolution: {integrity: sha512-QcUzFeEWkE/mW+BVtEGmcWATClcCOIJFiYUD/PiCWuTcdEA297o8D4oN6Ra44WrNOHu1wqNW4J0ioaDIiqaFOQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@iconify/iconify/-/iconify-2.1.2.tgz}  
6233 - name: '@iconify/iconify'  
6234 - version: 2.1.2  
6235 - dependencies:  
6236 - cross-fetch: registry.npmmirror.com/cross-fetch/3.1.5  
6237 - transitivePeerDependencies:  
6238 - - encoding  
6239 - dev: true  
6240 -  
6241 - registry.npmmirror.com/@iconify/iconify/3.0.1:  
6242 - resolution: {integrity: sha512-OPqVBTh8YsfrYZRVFv3OkmFNLqacM0dy/Oiw1h2wO+RZW5LieNGHlG2f9pzaeVRFWbEB8LHTeo8mcwgUTUbibQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@iconify/iconify/-/iconify-3.0.1.tgz}  
6243 - name: '@iconify/iconify'  
6244 - version: 3.0.1  
6245 - dependencies:  
6246 - '@iconify/types': 2.0.0  
6247 - dev: true  
6248 -  
6249 - registry.npmmirror.com/@jridgewell/gen-mapping/0.1.1:  
6250 - resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz}  
6251 - name: '@jridgewell/gen-mapping'  
6252 - version: 0.1.1  
6253 - engines: {node: '>=6.0.0'}  
6254 - dependencies:  
6255 - '@jridgewell/set-array': registry.npmmirror.com/@jridgewell/set-array/1.1.2  
6256 - '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14  
6257 - dev: true  
6258 -  
6259 - registry.npmmirror.com/@jridgewell/gen-mapping/0.3.2:  
6260 - resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz}  
6261 - name: '@jridgewell/gen-mapping'  
6262 - version: 0.3.2  
6263 - engines: {node: '>=6.0.0'}  
6264 - dependencies:  
6265 - '@jridgewell/set-array': registry.npmmirror.com/@jridgewell/set-array/1.1.2  
6266 - '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14  
6267 - '@jridgewell/trace-mapping': registry.npmmirror.com/@jridgewell/trace-mapping/0.3.17  
6268 - dev: true  
6269 -  
6270 - registry.npmmirror.com/@jridgewell/resolve-uri/3.1.0:  
6271 - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz}  
6272 - name: '@jridgewell/resolve-uri'  
6273 - version: 3.1.0  
6274 - engines: {node: '>=6.0.0'}  
6275 - dev: true  
6276 -  
6277 - registry.npmmirror.com/@jridgewell/set-array/1.1.2:  
6278 - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.2.tgz}  
6279 - name: '@jridgewell/set-array'  
6280 - version: 1.1.2  
6281 - engines: {node: '>=6.0.0'}  
6282 - dev: true  
6283 -  
6284 - registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14:  
6285 - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz}  
6286 - name: '@jridgewell/sourcemap-codec'  
6287 - version: 1.4.14  
6288 - dev: true  
6289 -  
6290 - registry.npmmirror.com/@jridgewell/trace-mapping/0.3.17:  
6291 - resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz}  
6292 - name: '@jridgewell/trace-mapping'  
6293 - version: 0.3.17  
6294 - dependencies:  
6295 - '@jridgewell/resolve-uri': registry.npmmirror.com/@jridgewell/resolve-uri/3.1.0  
6296 - '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14  
6297 - dev: true  
6298 -  
6299 - registry.npmmirror.com/@jridgewell/trace-mapping/0.3.9:  
6300 - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz}  
6301 - name: '@jridgewell/trace-mapping'  
6302 - version: 0.3.9  
6303 - dependencies:  
6304 - '@jridgewell/resolve-uri': registry.npmmirror.com/@jridgewell/resolve-uri/3.1.0  
6305 - '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14  
6306 - dev: true  
6307 -  
6308 - registry.npmmirror.com/@nodelib/fs.stat/2.0.5:  
6309 - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz}  
6310 - name: '@nodelib/fs.stat'  
6311 - version: 2.0.5  
6312 - engines: {node: '>= 8'}  
6313 - dev: true  
6314 -  
6315 - registry.npmmirror.com/@purge-icons/core/0.9.1:  
6316 - resolution: {integrity: sha512-sx8/a30MbbqQVEqhuMPE1wJpdVRRbEmwEPZpFzVkcDixzX4p+R2A0WVxqkb0xfHUBAVQwrSE2SeAyniIQLqbLw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@purge-icons/core/-/core-0.9.1.tgz}  
6317 - name: '@purge-icons/core'  
6318 - version: 0.9.1  
6319 - dependencies:  
6320 - '@iconify/iconify': registry.npmmirror.com/@iconify/iconify/2.1.2  
6321 - axios: 0.26.1_debug@4.3.4  
6322 - debug: 4.3.4  
6323 - fast-glob: registry.npmmirror.com/fast-glob/3.2.12  
6324 - fs-extra: registry.npmmirror.com/fs-extra/10.1.0  
6325 - transitivePeerDependencies:  
6326 - - encoding  
6327 - - supports-color  
6328 - dev: true  
6329 -  
6330 - registry.npmmirror.com/@purge-icons/generated/0.9.0:  
6331 - resolution: {integrity: sha512-s2t+1oVtGDV6KtqfCXtUOhxfeYvOdDF90IVm+nMs/6bUP0HeGZLslguuL/AibpwtfL4FA/oCsIu/RhwapgAdJw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@purge-icons/generated/-/generated-0.9.0.tgz}  
6332 - name: '@purge-icons/generated'  
6333 - version: 0.9.0  
6334 - dependencies:  
6335 - '@iconify/iconify': registry.npmmirror.com/@iconify/iconify/3.0.1  
6336 - dev: true  
6337 -  
6338 - registry.npmmirror.com/@vitejs/plugin-legacy/3.0.1_terser@5.16.1+vite@4.0.4:  
6339 - resolution: {integrity: sha512-XCtEjxoR3rmy000ujYRBp5kggWqzHz9+F20/yIMUWOzbvu0+KW1e14Fvb8h7SpNn+bfjGW1RiAs1Vrgb7Js+iQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vitejs/plugin-legacy/-/plugin-legacy-3.0.1.tgz}  
6340 - id: registry.npmmirror.com/@vitejs/plugin-legacy/3.0.1  
6341 - name: '@vitejs/plugin-legacy'  
6342 - version: 3.0.1  
6343 - engines: {node: ^14.18.0 || >=16.0.0}  
6344 - peerDependencies:  
6345 - terser: ^5.4.0  
6346 - vite: ^4.0.0  
6347 - dependencies:  
6348 - '@babel/standalone': registry.npmmirror.com/@babel/standalone/7.20.6  
6349 - core-js: registry.npmmirror.com/core-js/3.26.1  
6350 - magic-string: registry.npmmirror.com/magic-string/0.27.0  
6351 - regenerator-runtime: registry.npmmirror.com/regenerator-runtime/0.13.11  
6352 - systemjs: registry.npmmirror.com/systemjs/6.13.0  
6353 - terser: 5.16.1  
6354 - vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i  
6355 - dev: true  
6356 -  
6357 - registry.npmmirror.com/@vitejs/plugin-vue-jsx/3.0.0_vite@4.0.4+vue@3.2.45:  
6358 - resolution: {integrity: sha512-vurkuzgac5SYuxd2HUZqAFAWGTF10diKBwJNbCvnWijNZfXd+7jMtqjPFbGt7idOJUn584fP1Ar9j/GN2jQ3Ew==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-3.0.0.tgz}  
6359 - id: registry.npmmirror.com/@vitejs/plugin-vue-jsx/3.0.0  
6360 - name: '@vitejs/plugin-vue-jsx'  
6361 - version: 3.0.0  
6362 - engines: {node: ^14.18.0 || >=16.0.0}  
6363 - peerDependencies:  
6364 - vite: ^4.0.0  
6365 - vue: ^3.0.0  
6366 - dependencies:  
6367 - '@babel/core': registry.npmmirror.com/@babel/core/7.20.5  
6368 - '@babel/plugin-transform-typescript': registry.npmmirror.com/@babel/plugin-transform-typescript/7.20.2_@babel+core@7.20.5  
6369 - '@vue/babel-plugin-jsx': registry.npmmirror.com/@vue/babel-plugin-jsx/1.1.1_@babel+core@7.20.5  
6370 - vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i  
6371 - vue: 3.2.45  
6372 - transitivePeerDependencies:  
6373 - - supports-color  
6374 - dev: true  
6375 -  
6376 - registry.npmmirror.com/@vitejs/plugin-vue/4.0.0_vite@4.0.4+vue@3.2.45:  
6377 - resolution: {integrity: sha512-e0X4jErIxAB5oLtDqbHvHpJe/uWNkdpYV83AOG2xo2tEVSzCzewgJMtREZM30wXnM5ls90hxiOtAuVU6H5JgbA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.0.0.tgz}  
6378 - id: registry.npmmirror.com/@vitejs/plugin-vue/4.0.0  
6379 - name: '@vitejs/plugin-vue'  
6380 - version: 4.0.0  
6381 - engines: {node: ^14.18.0 || >=16.0.0}  
6382 - peerDependencies:  
6383 - vite: ^4.0.0  
6384 - vue: ^3.2.25  
6385 - dependencies:  
6386 - vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i  
6387 - vue: 3.2.45  
6388 - dev: true  
6389 -  
6390 - registry.npmmirror.com/@vue/babel-helper-vue-transform-on/1.0.2:  
6391 - resolution: {integrity: sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz}  
6392 - name: '@vue/babel-helper-vue-transform-on'  
6393 - version: 1.0.2  
6394 - dev: true  
6395 -  
6396 - registry.npmmirror.com/@vue/babel-plugin-jsx/1.1.1_@babel+core@7.20.5:  
6397 - resolution: {integrity: sha512-j2uVfZjnB5+zkcbc/zsOc0fSNGCMMjaEXP52wdwdIfn0qjFfEYpYZBFKFg+HHnQeJCVrjOeO0YxgaL7DMrym9w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.1.tgz}  
6398 - id: registry.npmmirror.com/@vue/babel-plugin-jsx/1.1.1  
6399 - name: '@vue/babel-plugin-jsx'  
6400 - version: 1.1.1  
6401 - dependencies:  
6402 - '@babel/helper-module-imports': registry.npmmirror.com/@babel/helper-module-imports/7.18.6  
6403 - '@babel/plugin-syntax-jsx': registry.npmmirror.com/@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.5  
6404 - '@babel/template': registry.npmmirror.com/@babel/template/7.18.10  
6405 - '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.20.1  
6406 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2  
6407 - '@vue/babel-helper-vue-transform-on': registry.npmmirror.com/@vue/babel-helper-vue-transform-on/1.0.2  
6408 - camelcase: registry.npmmirror.com/camelcase/6.3.0  
6409 - html-tags: registry.npmmirror.com/html-tags/3.2.0  
6410 - svg-tags: registry.npmmirror.com/svg-tags/1.0.0  
6411 - transitivePeerDependencies:  
6412 - - '@babel/core'  
6413 - - supports-color  
6414 - dev: true  
6415 -  
6416 - registry.npmmirror.com/@vue/devtools-api/6.4.5:  
6417 - resolution: {integrity: sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.4.5.tgz}  
6418 - name: '@vue/devtools-api'  
6419 - version: 6.4.5  
6420 - dev: false  
6421 -  
6422 - registry.npmmirror.com/@windicss/config/1.8.10:  
6423 - resolution: {integrity: sha512-O9SsC110b1Ik3YYa4Ck/0TWuCo7YFfA9KDrwD5sAeqscT5COIGK1HszdCT3oh0MJFej2wNrvpfyW9h6yQaW6PA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@windicss/config/-/config-1.8.10.tgz}  
6424 - name: '@windicss/config'  
6425 - version: 1.8.10  
6426 - dependencies:  
6427 - debug: 4.3.4  
6428 - jiti: registry.npmmirror.com/jiti/1.16.0  
6429 - windicss: registry.npmmirror.com/windicss/3.5.6  
6430 - transitivePeerDependencies:  
6431 - - supports-color  
6432 - dev: true  
6433 -  
6434 - registry.npmmirror.com/@windicss/plugin-utils/1.8.10:  
6435 - resolution: {integrity: sha512-Phqk5OW1w+Mv+ry6t7BzAeDq3aMhbI94gR49j9vQCufFfDGCHndhhjtMK0sBv+NPJUsIAIh6qayb1iwBCXUGrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@windicss/plugin-utils/-/plugin-utils-1.8.10.tgz}  
6436 - name: '@windicss/plugin-utils'  
6437 - version: 1.8.10  
6438 - dependencies:  
6439 - '@antfu/utils': registry.npmmirror.com/@antfu/utils/0.7.2  
6440 - '@windicss/config': registry.npmmirror.com/@windicss/config/1.8.10  
6441 - debug: 4.3.4  
6442 - fast-glob: registry.npmmirror.com/fast-glob/3.2.12  
6443 - magic-string: registry.npmmirror.com/magic-string/0.27.0  
6444 - micromatch: registry.npmmirror.com/micromatch/4.0.5  
6445 - windicss: registry.npmmirror.com/windicss/3.5.6  
6446 - transitivePeerDependencies:  
6447 - - supports-color  
6448 - dev: true  
6449 -  
6450 - registry.npmmirror.com/ansi-styles/4.3.0:  
6451 - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz}  
6452 - name: ansi-styles  
6453 - version: 4.3.0  
6454 - engines: {node: '>=8'}  
6455 - dependencies:  
6456 - color-convert: registry.npmmirror.com/color-convert/2.0.1  
6457 -  
6458 - registry.npmmirror.com/braces/2.3.2:  
6459 - resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz}  
6460 - name: braces  
6461 - version: 2.3.2  
6462 - engines: {node: '>=0.10.0'}  
6463 - dependencies:  
6464 - arr-flatten: 1.1.0  
6465 - array-unique: 0.3.2  
6466 - extend-shallow: 2.0.1  
6467 - fill-range: registry.npmmirror.com/fill-range/4.0.0  
6468 - isobject: 3.0.1  
6469 - repeat-element: 1.1.4  
6470 - snapdragon: 0.8.2  
6471 - snapdragon-node: 2.1.1  
6472 - split-string: 3.1.0  
6473 - to-regex: 3.0.2  
6474 - transitivePeerDependencies:  
6475 - - supports-color  
6476 - dev: true  
6477 -  
6478 - registry.npmmirror.com/braces/3.0.2:  
6479 - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz}  
6480 - name: braces  
6481 - version: 3.0.2  
6482 - engines: {node: '>=8'}  
6483 - dependencies:  
6484 - fill-range: registry.npmmirror.com/fill-range/7.0.1  
6485 - dev: true  
6486 -  
6487 - registry.npmmirror.com/browserslist/4.21.4:  
6488 - resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/browserslist/-/browserslist-4.21.4.tgz}  
6489 - name: browserslist  
6490 - version: 4.21.4  
6491 - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}  
6492 - hasBin: true  
6493 - dependencies:  
6494 - caniuse-lite: registry.npmmirror.com/caniuse-lite/1.0.30001431  
6495 - electron-to-chromium: registry.npmmirror.com/electron-to-chromium/1.4.284  
6496 - node-releases: registry.npmmirror.com/node-releases/2.0.6  
6497 - update-browserslist-db: registry.npmmirror.com/update-browserslist-db/1.0.10_browserslist@4.21.4  
6498 - dev: true  
6499 -  
6500 - registry.npmmirror.com/camelcase/5.3.1:  
6501 - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz}  
6502 - name: camelcase  
6503 - version: 5.3.1  
6504 - engines: {node: '>=6'}  
6505 -  
6506 - registry.npmmirror.com/camelcase/6.3.0:  
6507 - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz}  
6508 - name: camelcase  
6509 - version: 6.3.0  
6510 - engines: {node: '>=10'}  
6511 - dev: true  
6512 -  
6513 - registry.npmmirror.com/caniuse-lite/1.0.30001431:  
6514 - resolution: {integrity: sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz}  
6515 - name: caniuse-lite  
6516 - version: 1.0.30001431  
6517 - dev: true  
6518 -  
6519 - registry.npmmirror.com/color-convert/1.9.3:  
6520 - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz}  
6521 - name: color-convert  
6522 - version: 1.9.3  
6523 - dependencies:  
6524 - color-name: registry.npmmirror.com/color-name/1.1.3  
6525 - dev: true  
6526 -  
6527 - registry.npmmirror.com/color-convert/2.0.1:  
6528 - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz}  
6529 - name: color-convert  
6530 - version: 2.0.1  
6531 - engines: {node: '>=7.0.0'}  
6532 - dependencies:  
6533 - color-name: registry.npmmirror.com/color-name/1.1.4  
6534 -  
6535 - registry.npmmirror.com/color-name/1.1.3:  
6536 - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz}  
6537 - name: color-name  
6538 - version: 1.1.3  
6539 - dev: true  
6540 -  
6541 - registry.npmmirror.com/color-name/1.1.4:  
6542 - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz}  
6543 - name: color-name  
6544 - version: 1.1.4  
6545 -  
6546 - registry.npmmirror.com/convert-source-map/1.9.0:  
6547 - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.9.0.tgz}  
6548 - name: convert-source-map  
6549 - version: 1.9.0  
6550 - dev: true  
6551 -  
6552 - registry.npmmirror.com/core-js/3.26.1:  
6553 - resolution: {integrity: sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/core-js/-/core-js-3.26.1.tgz}  
6554 - name: core-js  
6555 - version: 3.26.1  
6556 - requiresBuild: true  
6557 - dev: true  
6558 -  
6559 - registry.npmmirror.com/cross-fetch/3.1.5:  
6560 - resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cross-fetch/-/cross-fetch-3.1.5.tgz}  
6561 - name: cross-fetch  
6562 - version: 3.1.5  
6563 - dependencies:  
6564 - node-fetch: registry.npmmirror.com/node-fetch/2.6.7  
6565 - transitivePeerDependencies:  
6566 - - encoding  
6567 - dev: true  
6568 -  
6569 - registry.npmmirror.com/debug/4.3.4:  
6570 - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz}  
6571 - name: debug  
6572 - version: 4.3.4  
6573 - engines: {node: '>=6.0'}  
6574 - peerDependencies:  
6575 - supports-color: '*'  
6576 - peerDependenciesMeta:  
6577 - supports-color:  
6578 - optional: true  
6579 - dependencies:  
6580 - ms: registry.npmmirror.com/ms/2.1.2  
6581 - dev: true  
6582 -  
6583 - registry.npmmirror.com/echarts/5.4.1:  
6584 - resolution: {integrity: sha512-9ltS3M2JB0w2EhcYjCdmtrJ+6haZcW6acBolMGIuf01Hql1yrIV01L1aRj7jsaaIULJslEP9Z3vKlEmnJaWJVQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/echarts/-/echarts-5.4.1.tgz}  
6585 - name: echarts  
6586 - version: 5.4.1  
6587 - dependencies:  
6588 - tslib: registry.npmmirror.com/tslib/2.3.0  
6589 - zrender: registry.npmmirror.com/zrender/5.4.1  
6590 - dev: false  
6591 -  
6592 - registry.npmmirror.com/electron-to-chromium/1.4.284:  
6593 - resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz}  
6594 - name: electron-to-chromium  
6595 - version: 1.4.284  
6596 - dev: true  
6597 -  
6598 - registry.npmmirror.com/escalade/3.1.1:  
6599 - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz}  
6600 - name: escalade  
6601 - version: 3.1.1  
6602 - engines: {node: '>=6'}  
6603 - dev: true  
6604 -  
6605 - registry.npmmirror.com/fast-glob/3.2.12:  
6606 - resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz}  
6607 - name: fast-glob  
6608 - version: 3.2.12  
6609 - engines: {node: '>=8.6.0'}  
6610 - dependencies:  
6611 - '@nodelib/fs.stat': registry.npmmirror.com/@nodelib/fs.stat/2.0.5  
6612 - '@nodelib/fs.walk': 1.2.8  
6613 - glob-parent: 5.1.2  
6614 - merge2: registry.npmmirror.com/merge2/1.4.1  
6615 - micromatch: 4.0.5  
6616 - dev: true  
6617 -  
6618 - registry.npmmirror.com/fill-range/4.0.0:  
6619 - resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz}  
6620 - name: fill-range  
6621 - version: 4.0.0  
6622 - engines: {node: '>=0.10.0'}  
6623 - dependencies:  
6624 - extend-shallow: 2.0.1  
6625 - is-number: registry.npmmirror.com/is-number/3.0.0  
6626 - repeat-string: 1.6.1  
6627 - to-regex-range: registry.npmmirror.com/to-regex-range/2.1.1  
6628 - dev: true  
6629 -  
6630 - registry.npmmirror.com/fill-range/7.0.1:  
6631 - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz}  
6632 - name: fill-range  
6633 - version: 7.0.1  
6634 - engines: {node: '>=8'}  
6635 - dependencies:  
6636 - to-regex-range: registry.npmmirror.com/to-regex-range/5.0.1  
6637 - dev: true  
6638 -  
6639 - registry.npmmirror.com/fs-extra/10.1.0:  
6640 - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz}  
6641 - name: fs-extra  
6642 - version: 10.1.0  
6643 - engines: {node: '>=12'}  
6644 - dependencies:  
6645 - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10  
6646 - jsonfile: registry.npmmirror.com/jsonfile/6.1.0  
6647 - universalify: registry.npmmirror.com/universalify/2.0.0  
6648 - dev: true  
6649 -  
6650 - registry.npmmirror.com/gensync/1.0.0-beta.2:  
6651 - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz}  
6652 - name: gensync  
6653 - version: 1.0.0-beta.2  
6654 - engines: {node: '>=6.9.0'}  
6655 - dev: true  
6656 -  
6657 - registry.npmmirror.com/graceful-fs/4.2.10:  
6658 - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz}  
6659 - name: graceful-fs  
6660 - version: 4.2.10  
6661 - dev: true  
6662 -  
6663 - registry.npmmirror.com/html-tags/3.2.0:  
6664 - resolution: {integrity: sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/html-tags/-/html-tags-3.2.0.tgz}  
6665 - name: html-tags  
6666 - version: 3.2.0  
6667 - engines: {node: '>=8'}  
6668 - dev: true  
6669 -  
6670 - registry.npmmirror.com/is-number/3.0.0:  
6671 - resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz}  
6672 - name: is-number  
6673 - version: 3.0.0  
6674 - engines: {node: '>=0.10.0'}  
6675 - dependencies:  
6676 - kind-of: 3.2.2  
6677 - dev: true  
6678 -  
6679 - registry.npmmirror.com/is-number/7.0.0:  
6680 - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz}  
6681 - name: is-number  
6682 - version: 7.0.0  
6683 - engines: {node: '>=0.12.0'}  
6684 - dev: true  
6685 -  
6686 - registry.npmmirror.com/jiti/1.16.0:  
6687 - resolution: {integrity: sha512-L3BJStEf5NAqNuzrpfbN71dp43mYIcBUlCRea/vdyv5dW/AYa1d4bpelko4SHdY3I6eN9Wzyasxirj1/vv5kmg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jiti/-/jiti-1.16.0.tgz}  
6688 - name: jiti  
6689 - version: 1.16.0  
6690 - hasBin: true  
6691 - dev: true  
6692 -  
6693 - registry.npmmirror.com/js-tokens/4.0.0:  
6694 - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz}  
6695 - name: js-tokens  
6696 - version: 4.0.0  
6697 - dev: true  
6698 -  
6699 - registry.npmmirror.com/jsesc/2.5.2:  
6700 - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz}  
6701 - name: jsesc  
6702 - version: 2.5.2  
6703 - engines: {node: '>=4'}  
6704 - hasBin: true  
6705 - dev: true  
6706 -  
6707 - registry.npmmirror.com/json5/2.2.1:  
6708 - resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json5/-/json5-2.2.1.tgz}  
6709 - name: json5  
6710 - version: 2.2.1  
6711 - engines: {node: '>=6'}  
6712 - hasBin: true  
6713 - dev: true  
6714 -  
6715 - registry.npmmirror.com/jsonfile/6.1.0:  
6716 - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz}  
6717 - name: jsonfile  
6718 - version: 6.1.0  
6719 - dependencies:  
6720 - universalify: registry.npmmirror.com/universalify/2.0.0  
6721 - optionalDependencies:  
6722 - graceful-fs: 4.2.10  
6723 - dev: true  
6724 -  
6725 - registry.npmmirror.com/kolorist/1.6.0:  
6726 - resolution: {integrity: sha512-dLkz37Ab97HWMx9KTes3Tbi3D1ln9fCAy2zr2YVExJasDRPGRaKcoE4fycWNtnCAJfjFqe0cnY+f8KT2JePEXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/kolorist/-/kolorist-1.6.0.tgz}  
6727 - name: kolorist  
6728 - version: 1.6.0  
6729 - dev: true  
6730 -  
6731 - registry.npmmirror.com/lru-cache/6.0.0:  
6732 - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz}  
6733 - name: lru-cache  
6734 - version: 6.0.0  
6735 - engines: {node: '>=10'}  
6736 - dependencies:  
6737 - yallist: registry.npmmirror.com/yallist/4.0.0  
6738 - dev: true  
6739 -  
6740 - registry.npmmirror.com/magic-string/0.25.9:  
6741 - 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}  
6742 - name: magic-string  
6743 - version: 0.25.9  
6744 - dependencies:  
6745 - sourcemap-codec: 1.4.8  
6746 -  
6747 - registry.npmmirror.com/magic-string/0.27.0:  
6748 - resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/magic-string/-/magic-string-0.27.0.tgz}  
6749 - name: magic-string  
6750 - version: 0.27.0  
6751 - engines: {node: '>=12'}  
6752 - dependencies:  
6753 - '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14  
6754 - dev: true  
6755 -  
6756 - registry.npmmirror.com/merge2/1.4.1:  
6757 - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz}  
6758 - name: merge2  
6759 - version: 1.4.1  
6760 - engines: {node: '>= 8'}  
6761 - dev: true  
6762 -  
6763 - registry.npmmirror.com/micromatch/4.0.5:  
6764 - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz}  
6765 - name: micromatch  
6766 - version: 4.0.5  
6767 - engines: {node: '>=8.6'}  
6768 - dependencies:  
6769 - braces: registry.npmmirror.com/braces/3.0.2  
6770 - picomatch: registry.npmmirror.com/picomatch/2.3.1  
6771 - dev: true  
6772 -  
6773 - registry.npmmirror.com/ms/2.1.2:  
6774 - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz}  
6775 - name: ms  
6776 - version: 2.1.2  
6777 - dev: true  
6778 -  
6779 - registry.npmmirror.com/nanoid/3.3.4:  
6780 - resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz}  
6781 - name: nanoid  
6782 - version: 3.3.4  
6783 - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}  
6784 - hasBin: true  
6785 -  
6786 - registry.npmmirror.com/node-fetch/2.6.7:  
6787 - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-fetch/-/node-fetch-2.6.7.tgz}  
6788 - name: node-fetch  
6789 - version: 2.6.7  
6790 - engines: {node: 4.x || >=6.0.0}  
6791 - peerDependencies:  
6792 - encoding: ^0.1.0  
6793 - peerDependenciesMeta:  
6794 - encoding:  
6795 - optional: true  
6796 - dependencies:  
6797 - whatwg-url: registry.npmmirror.com/whatwg-url/5.0.0  
6798 - dev: true  
6799 -  
6800 - registry.npmmirror.com/node-releases/2.0.6:  
6801 - resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-releases/-/node-releases-2.0.6.tgz}  
6802 - name: node-releases  
6803 - version: 2.0.6  
6804 - dev: true  
6805 -  
6806 - registry.npmmirror.com/picocolors/1.0.0:  
6807 - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz}  
6808 - name: picocolors  
6809 - version: 1.0.0  
6810 -  
6811 - registry.npmmirror.com/picomatch/2.3.1:  
6812 - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz}  
6813 - name: picomatch  
6814 - version: 2.3.1  
6815 - engines: {node: '>=8.6'}  
6816 - dev: true  
6817 -  
6818 - registry.npmmirror.com/pinia/2.0.28_prq2uz4lho2pwp6irk4cfkrxwu:  
6819 - resolution: {integrity: sha512-YClq9DkqCblq9rlyUual7ezMu/iICWdBtfJrDt4oWU9Zxpijyz7xB2xTwx57DaBQ96UGvvTMORzALr+iO5PVMw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pinia/-/pinia-2.0.28.tgz}  
6820 - id: registry.npmmirror.com/pinia/2.0.28  
6821 - name: pinia  
6822 - version: 2.0.28  
6823 - peerDependencies:  
6824 - '@vue/composition-api': ^1.4.0  
6825 - typescript: '>=4.4.4'  
6826 - vue: ^2.6.14 || ^3.2.0  
6827 - peerDependenciesMeta:  
6828 - '@vue/composition-api':  
6829 - optional: true  
6830 - typescript:  
6831 - optional: true  
6832 - dependencies:  
6833 - '@vue/devtools-api': registry.npmmirror.com/@vue/devtools-api/6.4.5  
6834 - typescript: 4.9.4  
6835 - vue: 3.2.45  
6836 - vue-demi: registry.npmmirror.com/vue-demi/0.13.11_vue@3.2.45  
6837 - dev: false  
6838 -  
6839 - registry.npmmirror.com/postcss/8.4.20:  
6840 - resolution: {integrity: sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss/-/postcss-8.4.20.tgz}  
6841 - name: postcss  
6842 - version: 8.4.20  
6843 - engines: {node: ^10 || ^12 || >=14}  
6844 - dependencies:  
6845 - nanoid: registry.npmmirror.com/nanoid/3.3.4  
6846 - picocolors: registry.npmmirror.com/picocolors/1.0.0  
6847 - source-map-js: registry.npmmirror.com/source-map-js/1.0.2  
6848 -  
6849 - registry.npmmirror.com/regenerator-runtime/0.13.11:  
6850 - resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz}  
6851 - name: regenerator-runtime  
6852 - version: 0.13.11  
6853 -  
6854 - registry.npmmirror.com/rollup-plugin-purge-icons/0.9.1:  
6855 - resolution: {integrity: sha512-hRDKBsPUz47UMdBufki2feTmBF2ClEJlYqL7N6vpVAHSLd7V2BJUaNKOF7YYbLMofVVF+9hm44YSkYO6k9hUgg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/rollup-plugin-purge-icons/-/rollup-plugin-purge-icons-0.9.1.tgz}  
6856 - name: rollup-plugin-purge-icons  
6857 - version: 0.9.1  
6858 - engines: {node: '>= 12'}  
6859 - dependencies:  
6860 - '@purge-icons/core': registry.npmmirror.com/@purge-icons/core/0.9.1  
6861 - '@purge-icons/generated': registry.npmmirror.com/@purge-icons/generated/0.9.0  
6862 - transitivePeerDependencies:  
6863 - - encoding  
6864 - - supports-color  
6865 - dev: true  
6866 -  
6867 - registry.npmmirror.com/semver/6.3.0:  
6868 - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz}  
6869 - name: semver  
6870 - version: 6.3.0  
6871 - hasBin: true  
6872 - dev: true  
6873 -  
6874 - registry.npmmirror.com/semver/7.3.7:  
6875 - resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz}  
6876 - name: semver  
6877 - version: 7.3.7  
6878 - engines: {node: '>=10'}  
6879 - hasBin: true  
6880 - dependencies:  
6881 - lru-cache: registry.npmmirror.com/lru-cache/6.0.0  
6882 - dev: true  
6883 -  
6884 - registry.npmmirror.com/semver/7.3.8:  
6885 - resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/semver/-/semver-7.3.8.tgz}  
6886 - name: semver  
6887 - version: 7.3.8  
6888 - engines: {node: '>=10'}  
6889 - hasBin: true  
6890 - dependencies:  
6891 - lru-cache: registry.npmmirror.com/lru-cache/6.0.0  
6892 - dev: true  
6893 -  
6894 - registry.npmmirror.com/source-map-js/1.0.2:  
6895 - 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}  
6896 - name: source-map-js  
6897 - version: 1.0.2  
6898 - engines: {node: '>=0.10.0'}  
6899 -  
6900 - registry.npmmirror.com/supports-color/3.2.3:  
6901 - resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-3.2.3.tgz}  
6902 - name: supports-color  
6903 - version: 3.2.3  
6904 - engines: {node: '>=0.8.0'}  
6905 - dependencies:  
6906 - has-flag: 1.0.0  
6907 - dev: true  
6908 -  
6909 - registry.npmmirror.com/svg-tags/1.0.0:  
6910 - resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/svg-tags/-/svg-tags-1.0.0.tgz}  
6911 - name: svg-tags  
6912 - version: 1.0.0  
6913 - dev: true  
6914 -  
6915 - registry.npmmirror.com/systemjs/6.13.0:  
6916 - resolution: {integrity: sha512-P3cgh2bpaPvAO2NE3uRp/n6hmk4xPX4DQf+UzTlCAycssKdqhp6hjw+ENWe+aUS7TogKRFtptMosTSFeC6R55g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/systemjs/-/systemjs-6.13.0.tgz}  
6917 - name: systemjs  
6918 - version: 6.13.0  
6919 - dev: true  
6920 -  
6921 - registry.npmmirror.com/to-fast-properties/2.0.0:  
6922 - 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}  
6923 - name: to-fast-properties  
6924 - version: 2.0.0  
6925 - engines: {node: '>=4'}  
6926 -  
6927 - registry.npmmirror.com/to-regex-range/2.1.1:  
6928 - resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz}  
6929 - name: to-regex-range  
6930 - version: 2.1.1  
6931 - engines: {node: '>=0.10.0'}  
6932 - dependencies:  
6933 - is-number: registry.npmmirror.com/is-number/3.0.0  
6934 - repeat-string: 1.6.1  
6935 - dev: true  
6936 -  
6937 - registry.npmmirror.com/to-regex-range/5.0.1:  
6938 - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz}  
6939 - name: to-regex-range  
6940 - version: 5.0.1  
6941 - engines: {node: '>=8.0'}  
6942 - dependencies:  
6943 - is-number: registry.npmmirror.com/is-number/7.0.0  
6944 - dev: true  
6945 -  
6946 - registry.npmmirror.com/tr46/0.0.3:  
6947 - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz}  
6948 - name: tr46  
6949 - version: 0.0.3  
6950 - dev: true  
6951 -  
6952 - registry.npmmirror.com/tslib/2.3.0:  
6953 - resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz}  
6954 - name: tslib  
6955 - version: 2.3.0  
6956 - dev: false  
6957 -  
6958 - registry.npmmirror.com/tslib/2.4.1:  
6959 - resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tslib/-/tslib-2.4.1.tgz}  
6960 - name: tslib  
6961 - version: 2.4.1  
6962 - dev: true  
6963 -  
6964 - registry.npmmirror.com/universalify/2.0.0:  
6965 - resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz}  
6966 - name: universalify  
6967 - version: 2.0.0  
6968 - engines: {node: '>= 10.0.0'}  
6969 - dev: true  
6970 -  
6971 - registry.npmmirror.com/update-browserslist-db/1.0.10_browserslist@4.21.4:  
6972 - resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz}  
6973 - id: registry.npmmirror.com/update-browserslist-db/1.0.10  
6974 - name: update-browserslist-db  
6975 - version: 1.0.10  
6976 - hasBin: true  
6977 - peerDependencies:  
6978 - browserslist: '>= 4.21.0'  
6979 - dependencies:  
6980 - browserslist: registry.npmmirror.com/browserslist/4.21.4  
6981 - escalade: registry.npmmirror.com/escalade/3.1.1  
6982 - picocolors: 1.0.0  
6983 - dev: true  
6984 -  
6985 - registry.npmmirror.com/vite-plugin-purge-icons/0.9.2_vite@4.0.4:  
6986 - resolution: {integrity: sha512-vxJEMyNyckqLr/4HPsW9P6BMLUvOVMvjjFz3jLl4Wke1KWE8ITJUxIUwodxaOmEp9L2lxVk5an3TYeycZCfqFw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite-plugin-purge-icons/-/vite-plugin-purge-icons-0.9.2.tgz}  
6987 - id: registry.npmmirror.com/vite-plugin-purge-icons/0.9.2  
6988 - name: vite-plugin-purge-icons  
6989 - version: 0.9.2  
6990 - engines: {node: '>= 12'}  
6991 - peerDependencies:  
6992 - vite: ^2.0.0 || ^3.0.0 || ^4.0.0  
6993 - dependencies:  
6994 - '@purge-icons/core': registry.npmmirror.com/@purge-icons/core/0.9.1  
6995 - '@purge-icons/generated': registry.npmmirror.com/@purge-icons/generated/0.9.0  
6996 - rollup-plugin-purge-icons: registry.npmmirror.com/rollup-plugin-purge-icons/0.9.1  
6997 - vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i  
6998 - transitivePeerDependencies:  
6999 - - encoding  
7000 - - supports-color  
7001 - dev: true  
7002 -  
7003 - registry.npmmirror.com/vite-plugin-windicss/1.8.10_vite@4.0.4:  
7004 - resolution: {integrity: sha512-scywsuzo46lcTBohspmF0WiwhWEte6p+OUVrX4yr7VMRvLHMHVfLtJReyD5pppjijG7YOwVsZn7XBWWZtF658Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vite-plugin-windicss/-/vite-plugin-windicss-1.8.10.tgz}  
7005 - id: registry.npmmirror.com/vite-plugin-windicss/1.8.10  
7006 - name: vite-plugin-windicss  
7007 - version: 1.8.10  
7008 - peerDependencies:  
7009 - vite: ^2.0.1 || ^3.0.0 || ^4.0.0  
7010 - dependencies:  
7011 - '@windicss/plugin-utils': registry.npmmirror.com/@windicss/plugin-utils/1.8.10  
7012 - debug: registry.npmmirror.com/debug/4.3.4  
7013 - kolorist: registry.npmmirror.com/kolorist/1.6.0  
7014 - vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i  
7015 - windicss: registry.npmmirror.com/windicss/3.5.6  
7016 - transitivePeerDependencies:  
7017 - - supports-color  
7018 - dev: true  
7019 -  
7020 - registry.npmmirror.com/vue-demi/0.13.11_vue@3.2.45:  
7021 - resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz}  
7022 - id: registry.npmmirror.com/vue-demi/0.13.11  
7023 - name: vue-demi  
7024 - version: 0.13.11  
7025 - engines: {node: '>=12'}  
7026 - hasBin: true  
7027 - requiresBuild: true  
7028 - peerDependencies:  
7029 - '@vue/composition-api': ^1.0.0-rc.1  
7030 - vue: ^3.0.0-0 || ^2.6.0  
7031 - peerDependenciesMeta:  
7032 - '@vue/composition-api':  
7033 - optional: true  
7034 - dependencies:  
7035 - vue: 3.2.45  
7036 - dev: false  
7037 -  
7038 - registry.npmmirror.com/vxe-table/4.3.7_vue@3.2.45+xe-utils@3.5.7:  
7039 - resolution: {integrity: sha512-v+d7eEQ5uqtVTQCts4xkW0S15LZcIuEukYHGXI53SdoUj2gLFggPYAxQr1y659CM/ESRWPz9LNVHpd97KkjGHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vxe-table/-/vxe-table-4.3.7.tgz}  
7040 - id: registry.npmmirror.com/vxe-table/4.3.7  
7041 - name: vxe-table  
7042 - version: 4.3.7  
7043 - peerDependencies:  
7044 - vue: ^3.2.28  
7045 - xe-utils: ^3.5.0  
7046 - dependencies:  
7047 - vue: 3.2.45  
7048 - xe-utils: 3.5.7  
7049 - dev: false  
7050 -  
7051 - registry.npmmirror.com/webidl-conversions/3.0.1:  
7052 - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz}  
7053 - name: webidl-conversions  
7054 - version: 3.0.1  
7055 - dev: true  
7056 -  
7057 - registry.npmmirror.com/whatwg-url/5.0.0:  
7058 - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz}  
7059 - name: whatwg-url  
7060 - version: 5.0.0  
7061 - dependencies:  
7062 - tr46: registry.npmmirror.com/tr46/0.0.3  
7063 - webidl-conversions: registry.npmmirror.com/webidl-conversions/3.0.1  
7064 - dev: true  
7065 -  
7066 - registry.npmmirror.com/windicss/3.5.6:  
7067 - resolution: {integrity: sha512-P1mzPEjgFMZLX0ZqfFht4fhV/FX8DTG7ERG1fBLiWvd34pTLVReS5CVsewKn9PApSgXnVfPWwvq+qUsRwpnwFA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/windicss/-/windicss-3.5.6.tgz}  
7068 - name: windicss  
7069 - version: 3.5.6  
7070 - engines: {node: '>= 12'}  
7071 - hasBin: true  
7072 - dev: true  
7073 -  
7074 - registry.npmmirror.com/yallist/4.0.0:  
7075 - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz}  
7076 - name: yallist  
7077 - version: 4.0.0  
7078 - dev: true  
7079 -  
7080 - registry.npmmirror.com/zrender/5.4.1:  
7081 - resolution: {integrity: sha512-M4Z05BHWtajY2241EmMPHglDQAJ1UyHQcYsxDNzD9XLSkPDqMq4bB28v9Pb4mvHnVQ0GxyTklZ/69xCFP6RXBA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/zrender/-/zrender-5.4.1.tgz}  
7082 - name: zrender  
7083 - version: 5.4.1 6504 + /zrender/5.4.1:
  6505 + resolution: {integrity: sha512-M4Z05BHWtajY2241EmMPHglDQAJ1UyHQcYsxDNzD9XLSkPDqMq4bB28v9Pb4mvHnVQ0GxyTklZ/69xCFP6RXBA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/zrender/-/zrender-5.4.1.tgz}
7084 dependencies: 6506 dependencies:
7085 - tslib: registry.npmmirror.com/tslib/2.3.0 6507 + tslib: 2.3.0
7086 dev: false 6508 dev: false
yudao-ui-admin-vue3/src/components/Crontab/src/Crontab.vue
@@ -353,7 +353,6 @@ const select = ref() @@ -353,7 +353,6 @@ const select = ref()
353 watch( 353 watch(
354 () => select.value, 354 () => select.value,
355 () => { 355 () => {
356 - console.info(select.value)  
357 if (select.value == 'custom') { 356 if (select.value == 'custom') {
358 open() 357 open()
359 } else { 358 } else {
yudao-ui-admin-vue3/src/components/XTable/src/style/dark.scss
@@ -78,4 +78,4 @@ $vxe-modal-border-color: #3b3b3b; @@ -78,4 +78,4 @@ $vxe-modal-border-color: #3b3b3b;
78 /*pulldown*/ 78 /*pulldown*/
79 $vxe-pulldown-panel-background-color: #262626 !default; 79 $vxe-pulldown-panel-background-color: #262626 !default;
80 80
81 -@import 'vxe-table/styles/index'; 81 +@import 'vxe-table/styles/index.scss';
yudao-ui-admin-vue3/src/components/XTable/src/style/index.scss
1 -@import 'vxe-table/styles/variable.scss';  
2 -@import 'vxe-table/styles/modules.scss'; 1 +// @import 'vxe-table/styles/variable.scss';
  2 +// @import 'vxe-table/styles/modules.scss';
3 // @import './theme/light.scss'; 3 // @import './theme/light.scss';
4 i { 4 i {
5 border-color: initial; 5 border-color: initial;
yudao-ui-admin-vue3/src/components/XTable/src/type.ts
@@ -7,15 +7,14 @@ export type XTableProps&lt;D = any&gt; = VxeGridProps&lt;D&gt; &amp; { @@ -7,15 +7,14 @@ export type XTableProps&lt;D = any&gt; = VxeGridProps&lt;D&gt; &amp; {
7 topActionSlots?: boolean // 是否开启表格内顶部操作栏插槽 7 topActionSlots?: boolean // 是否开启表格内顶部操作栏插槽
8 treeConfig?: VxeTablePropTypes.TreeConfig // 树形表单配置 8 treeConfig?: VxeTablePropTypes.TreeConfig // 树形表单配置
9 isList?: boolean // 是否不带分页的list 9 isList?: boolean // 是否不带分页的list
10 - getListApi?: Function  
11 - getAllListApi?: Function  
12 - deleteApi?: Function  
13 - exportListApi?: Function 10 + getListApi?: Function // 获取列表接口
  11 + getAllListApi?: Function // 获取全部数据接口 用于 vxe 导出
  12 + deleteApi?: Function // 删除接口
  13 + exportListApi?: Function // 导出接口
14 exportName?: string // 导出文件夹名称 14 exportName?: string // 导出文件夹名称
15 - params?: any  
16 - pagination?: boolean | VxeGridPropTypes.PagerConfig  
17 - toolBar?: boolean | VxeGridPropTypes.ToolbarConfig  
18 - afterFetch?: Function 15 + params?: any // 其他查询参数
  16 + pagination?: boolean | VxeGridPropTypes.PagerConfig // 分页配置参数
  17 + toolBar?: boolean | VxeGridPropTypes.ToolbarConfig // 右侧工具栏配置参数
19 } 18 }
20 export type XColumns = VxeGridPropTypes.Columns 19 export type XColumns = VxeGridPropTypes.Columns
21 20
yudao-ui-admin-vue3/src/hooks/web/useVxeCrudSchemas.ts
@@ -165,7 +165,7 @@ const filterSearchSchema = (crudSchema: VxeCrudSchema): VxeFormItemProps[] =&gt; { @@ -165,7 +165,7 @@ const filterSearchSchema = (crudSchema: VxeCrudSchema): VxeFormItemProps[] =&gt; {
165 // 添加搜索按钮 165 // 添加搜索按钮
166 const buttons: VxeFormItemProps = { 166 const buttons: VxeFormItemProps = {
167 span: 24, 167 span: 24,
168 - align: 'center', 168 + align: 'right',
169 collapseNode: searchSchema.length > spanLength, 169 collapseNode: searchSchema.length > spanLength,
170 itemRender: { 170 itemRender: {
171 name: '$buttons', 171 name: '$buttons',
yudao-ui-admin-vue3/src/main.ts
@@ -26,15 +26,17 @@ import &#39;@/styles/index.scss&#39; @@ -26,15 +26,17 @@ import &#39;@/styles/index.scss&#39;
26 import '@/plugins/animate.css' 26 import '@/plugins/animate.css'
27 27
28 // 路由 28 // 路由
29 -import { setupRouter } from './router' 29 +import router, { setupRouter } from '@/router'
30 30
31 // 权限 31 // 权限
32 -import { setupAuth } from './directives' 32 +import { setupAuth } from '@/directives'
33 33
34 import { createApp } from 'vue' 34 import { createApp } from 'vue'
35 35
36 import App from './App.vue' 36 import App from './App.vue'
37 37
  38 +import './permission'
  39 +
38 // 创建实例 40 // 创建实例
39 const setupAll = async () => { 41 const setupAll = async () => {
40 const app = createApp(App) 42 const app = createApp(App)
@@ -53,6 +55,8 @@ const setupAll = async () =&gt; { @@ -53,6 +55,8 @@ const setupAll = async () =&gt; {
53 55
54 setupAuth(app) 56 setupAuth(app)
55 57
  58 + await router.isReady()
  59 +
56 app.mount('#app') 60 app.mount('#app')
57 } 61 }
58 62
yudao-ui-admin-vue3/src/permission.ts 0 → 100644
  1 +import router from './router'
  2 +import type { RouteRecordRaw } from 'vue-router'
  3 +import { isRelogin } from '@/config/axios/service'
  4 +import { getAccessToken } from '@/utils/auth'
  5 +import { useTitle } from '@/hooks/web/useTitle'
  6 +import { useNProgress } from '@/hooks/web/useNProgress'
  7 +import { usePageLoading } from '@/hooks/web/usePageLoading'
  8 +import { useDictStoreWithOut } from '@/store/modules/dict'
  9 +import { useUserStoreWithOut } from '@/store/modules/user'
  10 +import { usePermissionStoreWithOut } from '@/store/modules/permission'
  11 +
  12 +const { start, done } = useNProgress()
  13 +
  14 +const { loadStart, loadDone } = usePageLoading()
  15 +// 路由不重定向白名单
  16 +const whiteList = [
  17 + '/login',
  18 + '/social-login',
  19 + '/auth-redirect',
  20 + '/bind',
  21 + '/register',
  22 + '/oauthLogin/gitee'
  23 +]
  24 +
  25 +// 路由加载前
  26 +router.beforeEach(async (to, from, next) => {
  27 + start()
  28 + loadStart()
  29 + if (getAccessToken()) {
  30 + if (to.path === '/login') {
  31 + next({ path: '/' })
  32 + } else {
  33 + // 获取所有字典
  34 + const dictStore = useDictStoreWithOut()
  35 + const userStore = useUserStoreWithOut()
  36 + const permissionStore = usePermissionStoreWithOut()
  37 + if (!dictStore.getIsSetDict) {
  38 + dictStore.setDictMap()
  39 + }
  40 + if (!userStore.getIsSetUser) {
  41 + isRelogin.show = true
  42 + await userStore.setUserInfoAction()
  43 + isRelogin.show = false
  44 + // 后端过滤菜单
  45 + await permissionStore.generateRoutes()
  46 + permissionStore.getAddRouters.forEach((route) => {
  47 + router.addRoute(route as unknown as RouteRecordRaw) // 动态添加可访问路由表
  48 + })
  49 + const redirectPath = from.query.redirect || to.path
  50 + const redirect = decodeURIComponent(redirectPath as string)
  51 + const nextData = to.path === redirect ? { ...to, replace: true } : { path: redirect }
  52 + next(nextData)
  53 + } else {
  54 + next()
  55 + }
  56 + }
  57 + } else {
  58 + if (whiteList.indexOf(to.path) !== -1) {
  59 + next()
  60 + } else {
  61 + next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页
  62 + }
  63 + }
  64 +})
  65 +
  66 +router.afterEach((to) => {
  67 + useTitle(to?.meta?.title as string)
  68 + done() // 结束Progress
  69 + loadDone()
  70 +})
yudao-ui-admin-vue3/src/plugins/vxeTable/index.scss deleted
1 -@import 'vxe-table/styles/variable.scss';  
2 -@import 'vxe-table/styles/modules.scss';  
3 -// @import './theme/light.scss';  
4 -i {  
5 - border-color: initial;  
6 -}  
yudao-ui-admin-vue3/src/plugins/vxeTable/renderer/index.tsx
@@ -4,3 +4,4 @@ import &#39;./dict&#39; @@ -4,3 +4,4 @@ import &#39;./dict&#39;
4 import './html' 4 import './html'
5 import './link' 5 import './link'
6 import './img' 6 import './img'
  7 +import './preview'
yudao-ui-admin-vue3/src/plugins/vxeTable/renderer/preview.tsx 0 → 100644
  1 +import { VXETable } from 'vxe-table'
  2 +import { ElImage, ElLink } from 'element-plus'
  3 +
  4 +// 图片渲染
  5 +VXETable.renderer.add('XPreview', {
  6 + // 默认显示模板
  7 + renderDefault(_renderOpts, params) {
  8 + const { row, column } = params
  9 + if (row.type.indexOf('image/') === 0) {
  10 + return (
  11 + <ElImage
  12 + style="width: 80px; height: 50px"
  13 + src={row[column.field]}
  14 + key={row[column.field]}
  15 + preview-src-list={[row[column.field]]}
  16 + fit="contain"
  17 + lazy
  18 + ></ElImage>
  19 + )
  20 + } else if (row.type.indexOf('video/') === 0) {
  21 + return (
  22 + <video>
  23 + <source src={row[column.field]}></source>
  24 + </video>
  25 + )
  26 + } else {
  27 + return (
  28 + <ElLink href={row[column.field]} target="_blank">
  29 + {row[column.field]}
  30 + </ElLink>
  31 + )
  32 + }
  33 + }
  34 +})
yudao-ui-admin-vue3/src/plugins/vxeTable/theme/dark.scss deleted
1 -// 修改样式变量  
2 -//@import 'vxe-table/styles/variable.scss';  
3 -  
4 -/*font*/  
5 -$vxe-font-color: #e5e7eb;  
6 -// $vxe-font-size: 14px !default;  
7 -// $vxe-font-size-medium: 16px !default;  
8 -// $vxe-font-size-small: 14px !default;  
9 -// $vxe-font-size-mini: 12px !default;  
10 -  
11 -/*color*/  
12 -$vxe-primary-color: #409eff !default;  
13 -$vxe-success-color: #67c23a !default;  
14 -$vxe-info-color: #909399 !default;  
15 -$vxe-warning-color: #e6a23c !default;  
16 -$vxe-danger-color: #f56c6c !default;  
17 -$vxe-disabled-color: #bfbfbf !default;  
18 -$vxe-primary-disabled-color: #c0c4cc !default;  
19 -  
20 -/*loading*/  
21 -$vxe-loading-color: $vxe-primary-color !default;  
22 -$vxe-loading-background-color: #1d1e1f !default;  
23 -$vxe-loading-z-index: 999 !default;  
24 -  
25 -/*icon*/  
26 -$vxe-icon-font-family: Verdana, Arial, Tahoma !default;  
27 -$vxe-icon-background-color: #e5e7eb !default;  
28 -  
29 -/*toolbar*/  
30 -$vxe-toolbar-background-color: #1d1e1f !default;  
31 -$vxe-toolbar-button-border: #dcdfe6 !default;  
32 -$vxe-toolbar-custom-active-background-color: #d9dadb !default;  
33 -$vxe-toolbar-panel-background-color: #e5e7eb !default;  
34 -  
35 -$vxe-table-font-color: #e5e7eb;  
36 -$vxe-table-header-background-color: #1d1e1f;  
37 -$vxe-table-body-background-color: #141414;  
38 -$vxe-table-row-striped-background-color: #1d1d1d;  
39 -$vxe-table-row-hover-background-color: #1d1e1f;  
40 -$vxe-table-row-hover-striped-background-color: #1e1e1e;  
41 -$vxe-table-footer-background-color: #1d1e1f;  
42 -$vxe-table-row-current-background-color: #302d2d;  
43 -$vxe-table-column-current-background-color: #302d2d;  
44 -$vxe-table-column-hover-background-color: #302d2d;  
45 -$vxe-table-row-hover-current-background-color: #302d2d;  
46 -$vxe-table-row-checkbox-checked-background-color: #3e3c37 !default;  
47 -$vxe-table-row-hover-checkbox-checked-background-color: #615a4a !default;  
48 -$vxe-table-menu-background-color: #1d1e1f;  
49 -$vxe-table-border-width: 1px !default;  
50 -$vxe-table-border-color: #4c4d4f !default;  
51 -$vxe-table-fixed-left-scrolling-box-shadow: 8px 0px 10px -5px rgba(0, 0, 0, 0.12) !default;  
52 -$vxe-table-fixed-right-scrolling-box-shadow: -8px 0px 10px -5px rgba(0, 0, 0, 0.12) !default;  
53 -  
54 -$vxe-form-background-color: #141414;  
55 -  
56 -/*pager*/  
57 -$vxe-pager-background-color: #1d1e1f !default;  
58 -$vxe-pager-perfect-background-color: #262727 !default;  
59 -$vxe-pager-perfect-button-background-color: #a7a3a3 !default;  
60 -  
61 -$vxe-input-background-color: #141414;  
62 -$vxe-input-border-color: #4c4d4f !default;  
63 -  
64 -$vxe-select-option-hover-background-color: #262626 !default;  
65 -$vxe-select-panel-background-color: #141414 !default;  
66 -$vxe-select-empty-color: #262626 !default;  
67 -$vxe-optgroup-title-color: #909399 !default;  
68 -  
69 -/*button*/  
70 -$vxe-button-default-background-color: #262626;  
71 -$vxe-button-dropdown-panel-background-color: #141414;  
72 -  
73 -/*modal*/  
74 -$vxe-modal-header-background-color: #141414;  
75 -$vxe-modal-body-background-color: #141414;  
76 -$vxe-modal-border-color: #3b3b3b;  
77 -  
78 -/*pulldown*/  
79 -$vxe-pulldown-panel-background-color: #262626 !default;  
80 -  
81 -@import 'vxe-table/styles/index';  
yudao-ui-admin-vue3/src/plugins/vxeTable/theme/light.scss deleted
1 -// 修改样式变量  
2 -// /*font*/  
3 -// $vxe-font-size: 12px !default;  
4 -// $vxe-font-size-medium: 16px !default;  
5 -// $vxe-font-size-small: 14px !default;  
6 -// $vxe-font-size-mini: 12px !default;  
7 -/*color*/  
8 -$vxe-primary-color: #409eff !default;  
9 -$vxe-success-color: #67c23a !default;  
10 -$vxe-info-color: #909399 !default;  
11 -$vxe-warning-color: #e6a23c !default;  
12 -$vxe-danger-color: #f56c6c !default;  
13 -$vxe-disabled-color: #bfbfbf !default;  
14 -$vxe-primary-disabled-color: #c0c4cc !default;  
15 -  
16 -@import 'vxe-table/styles/index.scss';  
yudao-ui-admin-vue3/src/router/index.ts
@@ -2,23 +2,6 @@ import type { App } from &#39;vue&#39; @@ -2,23 +2,6 @@ import type { App } from &#39;vue&#39;
2 import type { RouteRecordRaw } from 'vue-router' 2 import type { RouteRecordRaw } from 'vue-router'
3 import { createRouter, createWebHashHistory } 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'  
7 -import { useTitle } from '@/hooks/web/useTitle'  
8 -import { useNProgress } from '@/hooks/web/useNProgress'  
9 -import { CACHE_KEY, useCache } from '@/hooks/web/useCache'  
10 -import { usePageLoading } from '@/hooks/web/usePageLoading'  
11 -import { useDictStoreWithOut } from '@/store/modules/dict'  
12 -import { useUserStoreWithOut } from '@/store/modules/user'  
13 -import { usePermissionStoreWithOut } from '@/store/modules/permission'  
14 -import { getInfoApi } from '@/api/login'  
15 -import { listSimpleDictDataApi } from '@/api/system/dict/dict.data'  
16 -  
17 -const { wsCache } = useCache()  
18 -  
19 -const { start, done } = useNProgress()  
20 -  
21 -const { loadStart, loadDone } = usePageLoading()  
22 5
23 // 创建路由实例 6 // 创建路由实例
24 const router = createRouter({ 7 const router = createRouter({
@@ -28,66 +11,6 @@ const router = createRouter({ @@ -28,66 +11,6 @@ const router = createRouter({
28 scrollBehavior: () => ({ left: 0, top: 0 }) 11 scrollBehavior: () => ({ left: 0, top: 0 })
29 }) 12 })
30 13
31 -// 路由不重定向白名单  
32 -const whiteList = [  
33 - '/login',  
34 - '/social-login',  
35 - '/auth-redirect',  
36 - '/bind',  
37 - '/register',  
38 - '/oauthLogin/gitee'  
39 -]  
40 -  
41 -// 路由加载前  
42 -router.beforeEach(async (to, from, next) => {  
43 - start()  
44 - loadStart()  
45 - if (getAccessToken()) {  
46 - if (to.path === '/login') {  
47 - next({ path: '/' })  
48 - } else {  
49 - // 获取所有字典  
50 - const dictStore = useDictStoreWithOut()  
51 - const userStore = useUserStoreWithOut()  
52 - const permissionStore = usePermissionStoreWithOut()  
53 - const dictMap = wsCache.get(CACHE_KEY.DICT_CACHE)  
54 - if (!dictMap) {  
55 - const res = await listSimpleDictDataApi()  
56 - dictStore.setDictMap(res)  
57 - }  
58 - if (!userStore.getIsSetUser) {  
59 - isRelogin.show = true  
60 - const res = await getInfoApi()  
61 - await userStore.setUserInfoAction(res)  
62 - isRelogin.show = false  
63 - // 后端过滤菜单  
64 - await permissionStore.generateRoutes()  
65 - permissionStore.getAddRouters.forEach((route) => {  
66 - router.addRoute(route as unknown as RouteRecordRaw) // 动态添加可访问路由表  
67 - })  
68 - const redirectPath = from.query.redirect || to.path  
69 - const redirect = decodeURIComponent(redirectPath as string)  
70 - const nextData = to.path === redirect ? { ...to, replace: true } : { path: redirect }  
71 - next(nextData)  
72 - } else {  
73 - next()  
74 - }  
75 - }  
76 - } else {  
77 - if (whiteList.indexOf(to.path) !== -1) {  
78 - next()  
79 - } else {  
80 - next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页  
81 - }  
82 - }  
83 -})  
84 -  
85 -router.afterEach((to) => {  
86 - useTitle(to?.meta?.title as string)  
87 - done() // 结束Progress  
88 - loadDone()  
89 -})  
90 -  
91 export const resetRouter = (): void => { 14 export const resetRouter = (): void => {
92 const resetWhiteNameList = ['Redirect', 'Login', 'NoFind', 'Root'] 15 const resetWhiteNameList = ['Redirect', 'Login', 'NoFind', 'Root']
93 router.getRoutes().forEach((route) => { 16 router.getRoutes().forEach((route) => {
yudao-ui-admin-vue3/src/store/modules/dict.ts
@@ -3,6 +3,7 @@ import { store } from &#39;../index&#39; @@ -3,6 +3,7 @@ import { store } from &#39;../index&#39;
3 import { DictDataVO } from '@/api/system/dict/types' 3 import { DictDataVO } from '@/api/system/dict/types'
4 import { CACHE_KEY, 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 +import { listSimpleDictDataApi } from '@/api/system/dict/dict.data'
6 7
7 export interface DictValueType { 8 export interface DictValueType {
8 value: any 9 value: any
@@ -16,45 +17,54 @@ export interface DictTypeType { @@ -16,45 +17,54 @@ export interface DictTypeType {
16 } 17 }
17 export interface DictState { 18 export interface DictState {
18 dictMap: Map<string, any> 19 dictMap: Map<string, any>
  20 + isSetDict: boolean
19 } 21 }
20 22
21 export const useDictStore = defineStore('dict', { 23 export const useDictStore = defineStore('dict', {
22 state: (): DictState => ({ 24 state: (): DictState => ({
23 - dictMap: new Map<string, any>() 25 + dictMap: new Map<string, any>(),
  26 + isSetDict: false
24 }), 27 }),
25 getters: { 28 getters: {
26 getDictMap(): Recordable { 29 getDictMap(): Recordable {
27 const dictMap = wsCache.get(CACHE_KEY.DICT_CACHE) 30 const dictMap = wsCache.get(CACHE_KEY.DICT_CACHE)
28 - return dictMap ? dictMap : this.dictMap  
29 - },  
30 - getHasDictData(): boolean {  
31 - if (this.dictMap.size > 0) {  
32 - return true  
33 - } else {  
34 - return false 31 + if (dictMap) {
  32 + this.dictMap = dictMap
35 } 33 }
  34 + return this.dictMap
  35 + },
  36 + getIsSetDict(): boolean {
  37 + return this.isSetDict
36 } 38 }
37 }, 39 },
38 actions: { 40 actions: {
39 - setDictMap(dictMap: Recordable) {  
40 - // 设置数据  
41 - const dictDataMap = new Map<string, any>()  
42 - dictMap.forEach((dictData: DictDataVO) => {  
43 - // 获得 dictType 层级  
44 - const enumValueObj = dictDataMap[dictData.dictType]  
45 - if (!enumValueObj) {  
46 - dictDataMap[dictData.dictType] = []  
47 - }  
48 - // 处理 dictValue 层级  
49 - dictDataMap[dictData.dictType].push({  
50 - value: dictData.value,  
51 - label: dictData.label,  
52 - colorType: dictData.colorType,  
53 - cssClass: dictData.cssClass 41 + async setDictMap() {
  42 + const dictMap = wsCache.get(CACHE_KEY.DICT_CACHE)
  43 + if (dictMap) {
  44 + this.dictMap = dictMap
  45 + this.isSetDict = true
  46 + } else {
  47 + const res = await listSimpleDictDataApi()
  48 + // 设置数据
  49 + const dictDataMap = new Map<string, any>()
  50 + res.forEach((dictData: DictDataVO) => {
  51 + // 获得 dictType 层级
  52 + const enumValueObj = dictDataMap[dictData.dictType]
  53 + if (!enumValueObj) {
  54 + dictDataMap[dictData.dictType] = []
  55 + }
  56 + // 处理 dictValue 层级
  57 + dictDataMap[dictData.dictType].push({
  58 + value: dictData.value,
  59 + label: dictData.label,
  60 + colorType: dictData.colorType,
  61 + cssClass: dictData.cssClass
  62 + })
54 }) 63 })
55 - })  
56 - this.dictMap = dictDataMap  
57 - wsCache.set(CACHE_KEY.DICT_CACHE, dictDataMap, { exp: 60 }) // 60 秒 过期 64 + this.dictMap = dictDataMap
  65 + this.isSetDict = true
  66 + wsCache.set(CACHE_KEY.DICT_CACHE, dictDataMap, { exp: 60 }) // 60 秒 过期
  67 + }
58 } 68 }
59 } 69 }
60 }) 70 })
yudao-ui-admin-vue3/src/store/modules/user.ts
@@ -2,6 +2,7 @@ import { store } from &#39;../index&#39; @@ -2,6 +2,7 @@ import { store } from &#39;../index&#39;
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 { CACHE_KEY, useCache } from '@/hooks/web/useCache' 4 import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
  5 +import { getInfoApi } from '@/api/login'
5 6
6 const { wsCache } = useCache() 7 const { wsCache } = useCache()
7 8
@@ -43,11 +44,15 @@ export const useUserStore = defineStore(&#39;admin-user&#39;, { @@ -43,11 +44,15 @@ export const useUserStore = defineStore(&#39;admin-user&#39;, {
43 } 44 }
44 }, 45 },
45 actions: { 46 actions: {
46 - async setUserInfoAction(userInfo: UserInfoVO) { 47 + async setUserInfoAction() {
47 if (!getAccessToken()) { 48 if (!getAccessToken()) {
48 this.resetState() 49 this.resetState()
49 return null 50 return null
50 } 51 }
  52 + let userInfo = wsCache.get(CACHE_KEY.USER)
  53 + if (!userInfo) {
  54 + userInfo = await getInfoApi()
  55 + }
51 this.permissions = userInfo.permissions 56 this.permissions = userInfo.permissions
52 this.roles = userInfo.roles 57 this.roles = userInfo.roles
53 this.user = userInfo.user 58 this.user = userInfo.user
yudao-ui-admin-vue3/src/styles/variables.scss
@@ -2,3 +2,5 @@ @@ -2,3 +2,5 @@
2 $namespace: v; 2 $namespace: v;
3 // el命名空间 3 // el命名空间
4 $elNamespace: el; 4 $elNamespace: el;
  5 +// vxe命名空间
  6 +$vxeNamespace: vxe;
yudao-ui-admin-vue3/src/utils/auth.ts
@@ -36,45 +36,30 @@ export const formatToken = (token: string): string =&gt; { @@ -36,45 +36,30 @@ export const formatToken = (token: string): string =&gt; {
36 } 36 }
37 // ========== 账号相关 ========== 37 // ========== 账号相关 ==========
38 38
39 -const UsernameKey = 'USERNAME'  
40 -const PasswordKey = 'PASSWORD'  
41 -const RememberMeKey = 'REMEMBER_ME' 39 +const LoginFormKey = 'LOGINFORM'
42 40
43 -export const getUsername = () => {  
44 - return wsCache.get(UsernameKey) 41 +export type LoginFormType = {
  42 + tenantName: string
  43 + username: string
  44 + password: string
  45 + rememberMe: boolean
45 } 46 }
46 47
47 -export const setUsername = (username: string) => {  
48 - wsCache.set(UsernameKey, username, { exp: 30 * 24 * 60 * 60 }) 48 +export const getLoginForm = () => {
  49 + const loginForm: LoginFormType = wsCache.get(LoginFormKey)
  50 + if (loginForm) {
  51 + loginForm.password = decrypt(loginForm.password) as string
  52 + }
  53 + return loginForm
49 } 54 }
50 55
51 -export const removeUsername = () => {  
52 - wsCache.delete(UsernameKey) 56 +export const setLoginForm = (loginForm: LoginFormType) => {
  57 + loginForm.password = encrypt(loginForm.password) as string
  58 + wsCache.set(LoginFormKey, loginForm, { exp: 30 * 24 * 60 * 60 })
53 } 59 }
54 60
55 -export const getPassword = () => {  
56 - const password = wsCache.get(PasswordKey)  
57 - return password ? decrypt(password) : undefined  
58 -}  
59 -  
60 -export const setPassword = (password: string) => {  
61 - wsCache.set(PasswordKey, encrypt(password), { exp: 30 * 24 * 60 * 60 })  
62 -}  
63 -  
64 -export const removePassword = () => {  
65 - wsCache.delete(PasswordKey)  
66 -}  
67 -  
68 -export const getRememberMe = () => {  
69 - return wsCache.get(RememberMeKey) === true  
70 -}  
71 -  
72 -export const setRememberMe = (rememberMe: boolean) => {  
73 - wsCache.set(RememberMeKey, rememberMe, { exp: 30 * 24 * 60 * 60 })  
74 -}  
75 -  
76 -export const removeRememberMe = () => {  
77 - wsCache.delete(RememberMeKey) 61 +export const removeLoginForm = () => {
  62 + wsCache.delete(LoginFormKey)
78 } 63 }
79 64
80 // ========== 租户相关 ========== 65 // ========== 租户相关 ==========
yudao-ui-admin-vue3/src/utils/propTypes.ts
@@ -17,13 +17,12 @@ const propTypes = createTypes({ @@ -17,13 +17,12 @@ const propTypes = createTypes({
17 17
18 // 需要自定义扩展的类型 18 // 需要自定义扩展的类型
19 // see: https://dwightjack.github.io/vue-types/advanced/extending-vue-types.html#the-extend-method 19 // see: https://dwightjack.github.io/vue-types/advanced/extending-vue-types.html#the-extend-method
20 -propTypes.extend([  
21 - {  
22 - name: 'style',  
23 - getter: true,  
24 - type: [String, Object],  
25 - default: undefined  
26 - }  
27 -])  
28 - 20 +// propTypes.extend([
  21 +// {
  22 +// name: 'style',
  23 +// getter: true,
  24 +// type: [String, Object],
  25 +// default: undefined
  26 +// }
  27 +// ])
29 export { propTypes } 28 export { propTypes }
yudao-ui-admin-vue3/src/views/Login/components/LoginForm.vue
@@ -148,7 +148,6 @@ import { useIcon } from &#39;@/hooks/web/useIcon&#39; @@ -148,7 +148,6 @@ import { useIcon } from &#39;@/hooks/web/useIcon&#39;
148 import { useMessage } from '@/hooks/web/useMessage' 148 import { useMessage } from '@/hooks/web/useMessage'
149 import { required } from '@/utils/formRules' 149 import { required } from '@/utils/formRules'
150 import * as authUtil from '@/utils/auth' 150 import * as authUtil from '@/utils/auth'
151 -import { decrypt } from '@/utils/jsencrypt'  
152 import { Verify } from '@/components/Verifition' 151 import { Verify } from '@/components/Verifition'
153 import { usePermissionStore } from '@/store/modules/permission' 152 import { usePermissionStore } from '@/store/modules/permission'
154 import * as LoginApi from '@/api/login' 153 import * as LoginApi from '@/api/login'
@@ -180,10 +179,6 @@ const loginData = reactive({ @@ -180,10 +179,6 @@ const loginData = reactive({
180 isShowPassword: false, 179 isShowPassword: false,
181 captchaEnable: import.meta.env.VITE_APP_CAPTCHA_ENABLE, 180 captchaEnable: import.meta.env.VITE_APP_CAPTCHA_ENABLE,
182 tenantEnable: import.meta.env.VITE_APP_TENANT_ENABLE, 181 tenantEnable: import.meta.env.VITE_APP_TENANT_ENABLE,
183 - token: '',  
184 - loading: {  
185 - signIn: false  
186 - },  
187 loginForm: { 182 loginForm: {
188 tenantName: '芋道源码', 183 tenantName: '芋道源码',
189 username: 'admin', 184 username: 'admin',
@@ -194,22 +189,10 @@ const loginData = reactive({ @@ -194,22 +189,10 @@ const loginData = reactive({
194 }) 189 })
195 190
196 const socialList = [ 191 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 - } 192 + { icon: 'ant-design:github-filled', type: 0 },
  193 + { icon: 'ant-design:wechat-filled', type: 30 },
  194 + { icon: 'ant-design:alipay-circle-filled', type: 0 },
  195 + { icon: 'ant-design:dingtalk-circle-filled', type: 20 }
213 ] 196 ]
214 197
215 // 获取验证码 198 // 获取验证码
@@ -232,18 +215,15 @@ const getTenantId = async () =&gt; { @@ -232,18 +215,15 @@ const getTenantId = async () =&gt; {
232 } 215 }
233 // 记住我 216 // 记住我
234 const getCookie = () => { 217 const getCookie = () => {
235 - const username = authUtil.getUsername()  
236 - const password = authUtil.getPassword()  
237 - ? decrypt(authUtil.getPassword() as unknown as string)  
238 - : undefined  
239 - const rememberMe = authUtil.getRememberMe()  
240 - const tenantName = authUtil.getTenantName()  
241 - loginData.loginForm = {  
242 - ...loginData.loginForm,  
243 - username: username ? username : loginData.loginForm.username,  
244 - password: password ? password : loginData.loginForm.password,  
245 - rememberMe: rememberMe ? true : false,  
246 - tenantName: tenantName ? tenantName : loginData.loginForm.tenantName 218 + const loginForm = authUtil.getLoginForm()
  219 + if (loginForm) {
  220 + loginData.loginForm = {
  221 + ...loginData.loginForm,
  222 + username: loginForm.username ? loginForm.username : loginData.loginForm.username,
  223 + password: loginForm.password ? loginForm.password : loginData.loginForm.password,
  224 + rememberMe: loginForm.rememberMe ? true : false,
  225 + tenantName: loginForm.tenantName ? loginForm.tenantName : loginData.loginForm.tenantName
  226 + }
247 } 227 }
248 } 228 }
249 // 登录 229 // 登录
@@ -266,15 +246,9 @@ const handleLogin = async (params) =&gt; { @@ -266,15 +246,9 @@ const handleLogin = async (params) =&gt; {
266 background: 'rgba(0, 0, 0, 0.7)' 246 background: 'rgba(0, 0, 0, 0.7)'
267 }) 247 })
268 if (loginData.loginForm.rememberMe) { 248 if (loginData.loginForm.rememberMe) {
269 - authUtil.setUsername(loginData.loginForm.username)  
270 - authUtil.setPassword(loginData.loginForm.password)  
271 - authUtil.setRememberMe(loginData.loginForm.rememberMe)  
272 - authUtil.setTenantName(loginData.loginForm.tenantName) 249 + authUtil.setLoginForm(loginData.loginForm)
273 } else { 250 } else {
274 - authUtil.removeUsername()  
275 - authUtil.removePassword()  
276 - authUtil.removeRememberMe()  
277 - authUtil.removeTenantName() 251 + authUtil.removeLoginForm()
278 } 252 }
279 authUtil.setToken(res) 253 authUtil.setToken(res)
280 if (!redirect.value) { 254 if (!redirect.value) {
yudao-ui-admin-vue3/src/views/Profile/Index.vue
@@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
8 </template> 8 </template>
9 <ProfileUser /> 9 <ProfileUser />
10 </el-card> 10 </el-card>
11 - <el-card class="w-2/3 user" style="margin-left: 10px" shadow="hover"> 11 + <el-card class="w-2/3 user ml-3" shadow="hover">
12 <template #header> 12 <template #header>
13 <div class="card-header"> 13 <div class="card-header">
14 <span>{{ t('profile.info.title') }}</span> 14 <span>{{ t('profile.info.title') }}</span>
yudao-ui-admin-vue3/src/views/infra/apiErrorLog/index.vue
@@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
8 type="warning" 8 type="warning"
9 preIcon="ep:download" 9 preIcon="ep:download"
10 :title="t('action.export')" 10 :title="t('action.export')"
11 - @click="handleExport()" 11 + @click="exportList('错误数据.xls')"
12 /> 12 />
13 </template> 13 </template>
14 <template #duration_default="{ row }"> 14 <template #duration_default="{ row }">
@@ -81,10 +81,7 @@ const handleDetail = (row: ApiErrorLogApi.ApiErrorLogVO) =&gt; { @@ -81,10 +81,7 @@ const handleDetail = (row: ApiErrorLogApi.ApiErrorLogVO) =&gt; {
81 dialogTitle.value = t('action.detail') 81 dialogTitle.value = t('action.detail')
82 dialogVisible.value = true 82 dialogVisible.value = true
83 } 83 }
84 -// 导出  
85 -const handleExport = async () => {  
86 - await exportList('错误数据.xls')  
87 -} 84 +
88 // 异常处理操作 85 // 异常处理操作
89 const handleProcessClick = ( 86 const handleProcessClick = (
90 row: ApiErrorLogApi.ApiErrorLogVO, 87 row: ApiErrorLogApi.ApiErrorLogVO,
yudao-ui-admin-vue3/src/views/infra/codegen/EditTable.vue
@@ -8,9 +8,6 @@ @@ -8,9 +8,6 @@
8 <el-tab-pane label="字段信息" name="cloum"> 8 <el-tab-pane label="字段信息" name="cloum">
9 <CloumInfoForm ref="cloumInfoRef" :info="cloumCurrentRow" /> 9 <CloumInfoForm ref="cloumInfoRef" :info="cloumCurrentRow" />
10 </el-tab-pane> 10 </el-tab-pane>
11 - <el-tab-pane label="生成信息" name="genInfo">  
12 - <GenInfoForm ref="genInfoRef" :genInfo="tableCurrentRow" />  
13 - </el-tab-pane>  
14 </el-tabs> 11 </el-tabs>
15 <template #right> 12 <template #right>
16 <XButton 13 <XButton
@@ -30,7 +27,7 @@ import { ElTabs, ElTabPane } from &#39;element-plus&#39; @@ -30,7 +27,7 @@ import { ElTabs, ElTabPane } from &#39;element-plus&#39;
30 import { useI18n } from '@/hooks/web/useI18n' 27 import { useI18n } from '@/hooks/web/useI18n'
31 import { useMessage } from '@/hooks/web/useMessage' 28 import { useMessage } from '@/hooks/web/useMessage'
32 import { ContentDetailWrap } from '@/components/ContentDetailWrap' 29 import { ContentDetailWrap } from '@/components/ContentDetailWrap'
33 -import { BasicInfoForm, CloumInfoForm, GenInfoForm } from './components' 30 +import { BasicInfoForm, CloumInfoForm } from './components'
34 import { getCodegenTableApi, updateCodegenTableApi } from '@/api/infra/codegen' 31 import { getCodegenTableApi, updateCodegenTableApi } from '@/api/infra/codegen'
35 import { CodegenTableVO, CodegenColumnVO, CodegenUpdateReqVO } from '@/api/infra/codegen/types' 32 import { CodegenTableVO, CodegenColumnVO, CodegenUpdateReqVO } from '@/api/infra/codegen/types'
36 33
@@ -40,33 +37,29 @@ const { push } = useRouter() @@ -40,33 +37,29 @@ const { push } = useRouter()
40 const { query } = useRoute() 37 const { query } = useRoute()
41 const loading = ref(false) 38 const loading = ref(false)
42 const title = ref('代码生成') 39 const title = ref('代码生成')
43 -const activeName = ref('cloum') 40 +const activeName = ref('basicInfo')
44 const cloumInfoRef = ref(null) 41 const cloumInfoRef = ref(null)
45 const tableCurrentRow = ref<CodegenTableVO>() 42 const tableCurrentRow = ref<CodegenTableVO>()
46 const cloumCurrentRow = ref<CodegenColumnVO[]>([]) 43 const cloumCurrentRow = ref<CodegenColumnVO[]>([])
47 const basicInfoRef = ref<ComponentRef<typeof BasicInfoForm>>() 44 const basicInfoRef = ref<ComponentRef<typeof BasicInfoForm>>()
48 -const genInfoRef = ref<ComponentRef<typeof GenInfoForm>>()  
49 45
50 const getList = async () => { 46 const getList = async () => {
51 const id = query.id as unknown as number 47 const id = query.id as unknown as number
52 if (id) { 48 if (id) {
53 // 获取表详细信息 49 // 获取表详细信息
54 const res = await getCodegenTableApi(id) 50 const res = await getCodegenTableApi(id)
55 - tableCurrentRow.value = res.table  
56 title.value = '修改[ ' + res.table.tableName + ' ]生成配置' 51 title.value = '修改[ ' + res.table.tableName + ' ]生成配置'
  52 + tableCurrentRow.value = res.table
57 cloumCurrentRow.value = res.columns 53 cloumCurrentRow.value = res.columns
58 } 54 }
59 } 55 }
60 const submitForm = async () => { 56 const submitForm = async () => {
61 const basicInfo = unref(basicInfoRef) 57 const basicInfo = unref(basicInfoRef)
62 - const genInfo = unref(genInfoRef)  
63 const basicForm = await basicInfo?.elFormRef?.validate()?.catch(() => {}) 58 const basicForm = await basicInfo?.elFormRef?.validate()?.catch(() => {})
64 - const genForm = await genInfo?.elFormRef?.validate()?.catch(() => {})  
65 - if (basicForm && genForm) { 59 + if (basicForm) {
66 const basicInfoData = (await basicInfo?.getFormData()) as CodegenTableVO 60 const basicInfoData = (await basicInfo?.getFormData()) as CodegenTableVO
67 - const genInfoData = (await genInfo?.getFormData()) as CodegenTableVO  
68 const genTable: CodegenUpdateReqVO = { 61 const genTable: CodegenUpdateReqVO = {
69 - table: Object.assign({}, basicInfoData, genInfoData), 62 + table: basicInfoData,
70 columns: cloumCurrentRow.value 63 columns: cloumCurrentRow.value
71 } 64 }
72 await updateCodegenTableApi(genTable) 65 await updateCodegenTableApi(genTable)
yudao-ui-admin-vue3/src/views/infra/codegen/components/BasicInfoForm.vue
@@ -2,26 +2,60 @@ @@ -2,26 +2,60 @@
2 <Form :rules="rules" @register="register" /> 2 <Form :rules="rules" @register="register" />
3 </template> 3 </template>
4 <script setup lang="ts"> 4 <script setup lang="ts">
5 -import { PropType, reactive, watch } from 'vue' 5 +import { onMounted, PropType, reactive, ref, watch } from 'vue'
6 import { required } from '@/utils/formRules' 6 import { required } from '@/utils/formRules'
7 import { useForm } from '@/hooks/web/useForm' 7 import { useForm } from '@/hooks/web/useForm'
8 import { Form } from '@/components/Form' 8 import { Form } from '@/components/Form'
9 import { FormSchema } from '@/types/form' 9 import { FormSchema } from '@/types/form'
10 import { CodegenTableVO } from '@/api/infra/codegen/types' 10 import { CodegenTableVO } from '@/api/infra/codegen/types'
  11 +import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
  12 +import { listSimpleMenusApi } from '@/api/system/menu'
  13 +import { handleTree, defaultProps } from '@/utils/tree'
  14 +
11 const props = defineProps({ 15 const props = defineProps({
12 basicInfo: { 16 basicInfo: {
13 type: Object as PropType<Nullable<CodegenTableVO>>, 17 type: Object as PropType<Nullable<CodegenTableVO>>,
14 default: () => null 18 default: () => null
15 } 19 }
16 }) 20 })
  21 +
  22 +const templateTypeOptions = getIntDictOptions(DICT_TYPE.INFRA_CODEGEN_TEMPLATE_TYPE)
  23 +const sceneOptions = getIntDictOptions(DICT_TYPE.INFRA_CODEGEN_SCENE)
  24 +const menuOptions = ref<any>([]) // 树形结构
  25 +const getTree = async () => {
  26 + const res = await listSimpleMenusApi()
  27 + menuOptions.value = handleTree(res)
  28 +}
  29 +
17 const rules = reactive({ 30 const rules = reactive({
18 tableName: [required], 31 tableName: [required],
19 tableComment: [required], 32 tableComment: [required],
20 className: [required], 33 className: [required],
21 - author: [required] 34 + author: [required],
  35 + templateType: [required],
  36 + scene: [required],
  37 + moduleName: [required],
  38 + businessName: [required],
  39 + businessPackage: [required],
  40 + classComment: [required]
22 }) 41 })
23 const schema = reactive<FormSchema[]>([ 42 const schema = reactive<FormSchema[]>([
24 { 43 {
  44 + label: '上级菜单',
  45 + field: 'parentMenuId',
  46 + component: 'TreeSelect',
  47 + componentProps: {
  48 + data: menuOptions,
  49 + props: defaultProps,
  50 + checkStrictly: true,
  51 + nodeKey: 'id'
  52 + },
  53 + labelMessage: '分配到指定菜单下,例如 系统管理',
  54 + colProps: {
  55 + span: 24
  56 + }
  57 + },
  58 + {
25 label: '表名称', 59 label: '表名称',
26 field: 'tableName', 60 field: 'tableName',
27 component: 'Input', 61 component: 'Input',
@@ -46,6 +80,64 @@ const schema = reactive&lt;FormSchema[]&gt;([ @@ -46,6 +80,64 @@ const schema = reactive&lt;FormSchema[]&gt;([
46 } 80 }
47 }, 81 },
48 { 82 {
  83 + label: '类名称',
  84 + field: 'className',
  85 + component: 'Input',
  86 + labelMessage: '类名称(首字母大写),例如SysUser、SysMenu、SysDictData 等等',
  87 + colProps: {
  88 + span: 12
  89 + }
  90 + },
  91 + {
  92 + label: '生成模板',
  93 + field: 'templateType',
  94 + component: 'Select',
  95 + componentProps: {
  96 + options: templateTypeOptions
  97 + },
  98 + colProps: {
  99 + span: 12
  100 + }
  101 + },
  102 + {
  103 + label: '生成场景',
  104 + field: 'scene',
  105 + component: 'Select',
  106 + componentProps: {
  107 + options: sceneOptions
  108 + },
  109 + colProps: {
  110 + span: 12
  111 + }
  112 + },
  113 + {
  114 + label: '模块名',
  115 + field: 'moduleName',
  116 + component: 'Input',
  117 + labelMessage: '模块名,即一级目录,例如 system、infra、tool 等等',
  118 + colProps: {
  119 + span: 12
  120 + }
  121 + },
  122 + {
  123 + label: '业务名',
  124 + field: 'businessName',
  125 + component: 'Input',
  126 + labelMessage: '业务名,即二级目录,例如 user、permission、dict 等等',
  127 + colProps: {
  128 + span: 12
  129 + }
  130 + },
  131 + {
  132 + label: '类描述',
  133 + field: 'classComment',
  134 + component: 'Input',
  135 + labelMessage: '用作类描述,例如 用户',
  136 + colProps: {
  137 + span: 12
  138 + }
  139 + },
  140 + {
49 label: '作者', 141 label: '作者',
50 field: 'author', 142 field: 'author',
51 component: 'Input', 143 component: 'Input',
@@ -62,7 +154,7 @@ const schema = reactive&lt;FormSchema[]&gt;([ @@ -62,7 +154,7 @@ const schema = reactive&lt;FormSchema[]&gt;([
62 rows: 4 154 rows: 4
63 }, 155 },
64 colProps: { 156 colProps: {
65 - span: 12 157 + span: 24
66 } 158 }
67 } 159 }
68 ]) 160 ])
@@ -81,6 +173,10 @@ watch( @@ -81,6 +173,10 @@ watch(
81 immediate: true 173 immediate: true
82 } 174 }
83 ) 175 )
  176 +// ========== 初始化 ==========
  177 +onMounted(async () => {
  178 + await getTree()
  179 +})
84 180
85 defineExpose({ 181 defineExpose({
86 elFormRef, 182 elFormRef,
yudao-ui-admin-vue3/src/views/infra/codegen/components/CloumInfoForm.vue
1 <template> 1 <template>
2 <vxe-table 2 <vxe-table
3 ref="dragTable" 3 ref="dragTable"
  4 + border
4 :data="info" 5 :data="info"
5 max-height="600" 6 max-height="600"
6 stripe 7 stripe
7 class="xtable-scrollbar" 8 class="xtable-scrollbar"
8 :column-config="{ resizable: true }" 9 :column-config="{ resizable: true }"
9 > 10 >
10 - <vxe-column title="字段列名" field="columnName" fixed="left" width="80" />  
11 - <vxe-column title="字段描述" field="columnComment">  
12 - <template #default="{ row }">  
13 - <el-input v-model="row.columnComment" />  
14 - </template>  
15 - </vxe-column>  
16 - <vxe-column title="物理类型" field="dataType" width="10%" />  
17 - <vxe-column title="Java类型" width="10%" field="javaType">  
18 - <template #default="{ row }">  
19 - <el-select v-model="row.javaType">  
20 - <el-option label="Long" value="Long" />  
21 - <el-option label="String" value="String" />  
22 - <el-option label="Integer" value="Integer" />  
23 - <el-option label="Double" value="Double" />  
24 - <el-option label="BigDecimal" value="BigDecimal" />  
25 - <el-option label="LocalDateTime" value="LocalDateTime" />  
26 - <el-option label="Boolean" value="Boolean" />  
27 - </el-select>  
28 - </template>  
29 - </vxe-column>  
30 - <vxe-column title="java属性" width="10%" field="javaField">  
31 - <template #default="{ row }">  
32 - <el-input v-model="row.javaField" />  
33 - </template>  
34 - </vxe-column>  
35 - <vxe-column title="插入" width="4%" field="createOperation">  
36 - <template #default="{ row }">  
37 - <vxe-checkbox true-label="true" false-label="false" v-model="row.createOperation" />  
38 - </template>  
39 - </vxe-column>  
40 - <vxe-column title="编辑" width="4%" field="updateOperation">  
41 - <template #default="{ row }">  
42 - <vxe-checkbox true-label="true" false-label="false" v-model="row.updateOperation" />  
43 - </template>  
44 - </vxe-column>  
45 - <vxe-column title="列表" width="4%" field="listOperationResult">  
46 - <template #default="{ row }">  
47 - <vxe-checkbox true-label="true" false-label="false" v-model="row.listOperationResult" />  
48 - </template>  
49 - </vxe-column>  
50 - <vxe-column title="查询" width="4%" field="listOperation">  
51 - <template #default="{ row }">  
52 - <vxe-checkbox true-label="true" false-label="false" v-model="row.listOperation" />  
53 - </template>  
54 - </vxe-column>  
55 - <vxe-column title="查询方式" width="8%" field="listOperationCondition">  
56 - <template #default="{ row }">  
57 - <el-select v-model="row.listOperationCondition">  
58 - <el-option label="=" value="=" />  
59 - <el-option label="!=" value="!=" />  
60 - <el-option label=">" value=">" />  
61 - <el-option label=">=" value=">=" />  
62 - <el-option label="<" value="<>" />  
63 - <el-option label="<=" value="<=" />  
64 - <el-option label="LIKE" value="LIKE" />  
65 - <el-option label="BETWEEN" value="BETWEEN" />  
66 - </el-select>  
67 - </template>  
68 - </vxe-column>  
69 - <vxe-column title="允许空" width="4%" field="nullable">  
70 - <template #default="{ row }">  
71 - <vxe-checkbox true-label="true" false-label="false" v-model="row.nullable" />  
72 - </template>  
73 - </vxe-column> 11 + <vxe-column title="字段列名" field="columnName" fixed="left" width="10%" />
  12 + <vxe-colgroup title="基础属性">
  13 + <vxe-column title="字段描述" field="columnComment" width="10%">
  14 + <template #default="{ row }">
  15 + <vxe-input v-model="row.columnComment" placeholder="请输入字段描述" />
  16 + </template>
  17 + </vxe-column>
  18 + <vxe-column title="物理类型" field="dataType" width="10%" />
  19 + <vxe-column title="Java类型" width="10%" field="javaType">
  20 + <template #default="{ row }">
  21 + <vxe-select v-model="row.javaType" placeholder="请选择Java类型">
  22 + <vxe-option label="Long" value="Long" />
  23 + <vxe-option label="String" value="String" />
  24 + <vxe-option label="Integer" value="Integer" />
  25 + <vxe-option label="Double" value="Double" />
  26 + <vxe-option label="BigDecimal" value="BigDecimal" />
  27 + <vxe-option label="LocalDateTime" value="LocalDateTime" />
  28 + <vxe-option label="Boolean" value="Boolean" />
  29 + </vxe-select>
  30 + </template>
  31 + </vxe-column>
  32 + <vxe-column title="java属性" width="8%" field="javaField">
  33 + <template #default="{ row }">
  34 + <vxe-input v-model="row.javaField" placeholder="请输入java属性" />
  35 + </template>
  36 + </vxe-column>
  37 + </vxe-colgroup>
  38 + <vxe-colgroup title="增删改查">
  39 + <vxe-column title="插入" width="40px" field="createOperation">
  40 + <template #default="{ row }">
  41 + <vxe-checkbox true-label="true" false-label="false" v-model="row.createOperation" />
  42 + </template>
  43 + </vxe-column>
  44 + <vxe-column title="编辑" width="40px" field="updateOperation">
  45 + <template #default="{ row }">
  46 + <vxe-checkbox true-label="true" false-label="false" v-model="row.updateOperation" />
  47 + </template>
  48 + </vxe-column>
  49 + <vxe-column title="列表" width="40px" field="listOperationResult">
  50 + <template #default="{ row }">
  51 + <vxe-checkbox true-label="true" false-label="false" v-model="row.listOperationResult" />
  52 + </template>
  53 + </vxe-column>
  54 + <vxe-column title="查询" width="40px" field="listOperation">
  55 + <template #default="{ row }">
  56 + <vxe-checkbox true-label="true" false-label="false" v-model="row.listOperation" />
  57 + </template>
  58 + </vxe-column>
  59 + <vxe-column title="允许空" width="40px" field="nullable">
  60 + <template #default="{ row }">
  61 + <vxe-checkbox true-label="true" false-label="false" v-model="row.nullable" />
  62 + </template>
  63 + </vxe-column>
  64 + <vxe-column title="查询方式" width="60px" field="listOperationCondition">
  65 + <template #default="{ row }">
  66 + <vxe-select v-model="row.listOperationCondition" placeholder="请选择查询方式">
  67 + <vxe-option label="=" value="=" />
  68 + <vxe-option label="!=" value="!=" />
  69 + <vxe-option label=">" value=">" />
  70 + <vxe-option label=">=" value=">=" />
  71 + <vxe-option label="<" value="<>" />
  72 + <vxe-option label="<=" value="<=" />
  73 + <vxe-option label="LIKE" value="LIKE" />
  74 + <vxe-option label="BETWEEN" value="BETWEEN" />
  75 + </vxe-select>
  76 + </template>
  77 + </vxe-column>
  78 + </vxe-colgroup>
74 <vxe-column title="显示类型" width="10%" field="htmlType"> 79 <vxe-column title="显示类型" width="10%" field="htmlType">
75 <template #default="{ row }"> 80 <template #default="{ row }">
76 - <el-select v-model="row.htmlType">  
77 - <el-option label="文本框" value="input" />  
78 - <el-option label="文本域" value="textarea" />  
79 - <el-option label="下拉框" value="select" />  
80 - <el-option label="单选框" value="radio" />  
81 - <el-option label="复选框" value="checkbox" />  
82 - <el-option label="日期控件" value="datetime" />  
83 - <el-option label="图片上传" value="imageUpload" />  
84 - <el-option label="文件上传" value="fileUpload" />  
85 - <el-option label="富文本控件" value="editor" />  
86 - </el-select> 81 + <vxe-select v-model="row.htmlType" placeholder="请选择显示类型">
  82 + <vxe-option label="文本框" value="input" />
  83 + <vxe-option label="文本域" value="textarea" />
  84 + <vxe-option label="下拉框" value="select" />
  85 + <vxe-option label="单选框" value="radio" />
  86 + <vxe-option label="复选框" value="checkbox" />
  87 + <vxe-option label="日期控件" value="datetime" />
  88 + <vxe-option label="图片上传" value="imageUpload" />
  89 + <vxe-option label="文件上传" value="fileUpload" />
  90 + <vxe-option label="富文本控件" value="editor" />
  91 + </vxe-select>
87 </template> 92 </template>
88 </vxe-column> 93 </vxe-column>
89 <vxe-column title="字典类型" width="10%" field="dictType"> 94 <vxe-column title="字典类型" width="10%" field="dictType">
90 <template #default="{ row }"> 95 <template #default="{ row }">
91 - <el-select v-model="row.dictType" clearable filterable placeholder="请选择">  
92 - <el-option 96 + <vxe-select v-model="row.dictType" clearable filterable placeholder="请选择字典类型">
  97 + <vxe-option
93 v-for="dict in dictOptions" 98 v-for="dict in dictOptions"
94 :key="dict.id" 99 :key="dict.id"
95 :label="dict.name" 100 :label="dict.name"
96 :value="dict.type" 101 :value="dict.type"
97 /> 102 />
98 - </el-select> 103 + </vxe-select>
99 </template> 104 </template>
100 </vxe-column> 105 </vxe-column>
101 <vxe-column title="示例" field="example"> 106 <vxe-column title="示例" field="example">
102 <template #default="{ row }"> 107 <template #default="{ row }">
103 - <el-input v-model="row.example" /> 108 + <vxe-input v-model="row.example" placeholder="请输入示例" />
104 </template> 109 </template>
105 </vxe-column> 110 </vxe-column>
106 </vxe-table> 111 </vxe-table>
107 </template> 112 </template>
108 <script setup lang="ts"> 113 <script setup lang="ts">
109 import { onMounted, PropType, ref } from 'vue' 114 import { onMounted, PropType, ref } from 'vue'
110 -import { ElInput, ElSelect, ElOption } from 'element-plus'  
111 import { DictTypeVO } from '@/api/system/dict/types' 115 import { DictTypeVO } from '@/api/system/dict/types'
112 import { CodegenColumnVO } from '@/api/infra/codegen/types' 116 import { CodegenColumnVO } from '@/api/infra/codegen/types'
113 import { listSimpleDictTypeApi } from '@/api/system/dict/dict.type' 117 import { listSimpleDictTypeApi } from '@/api/system/dict/dict.type'
yudao-ui-admin-vue3/src/views/infra/codegen/components/GenInfoForm.vue deleted
1 -<template>  
2 - <Form :rules="rules" @register="register" />  
3 -</template>  
4 -<script setup lang="ts">  
5 -import { onMounted, PropType, reactive, ref, watch } from 'vue'  
6 -import { Form } from '@/components/Form'  
7 -import { useForm } from '@/hooks/web/useForm'  
8 -import { required } from '@/utils/formRules'  
9 -import { handleTree, defaultProps } from '@/utils/tree'  
10 -import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'  
11 -import { listSimpleMenusApi } from '@/api/system/menu'  
12 -import { CodegenTableVO } from '@/api/infra/codegen/types'  
13 -import { FormSchema } from '@/types/form'  
14 -const props = defineProps({  
15 - genInfo: {  
16 - type: Object as PropType<Nullable<CodegenTableVO>>,  
17 - default: () => null  
18 - }  
19 -})  
20 -const rules = reactive({  
21 - templateType: [required],  
22 - scene: [required],  
23 - moduleName: [required],  
24 - businessName: [required],  
25 - businessPackage: [required],  
26 - className: [required],  
27 - classComment: [required]  
28 -})  
29 -const templateTypeOptions = getIntDictOptions(DICT_TYPE.INFRA_CODEGEN_TEMPLATE_TYPE)  
30 -const sceneOptions = getIntDictOptions(DICT_TYPE.INFRA_CODEGEN_SCENE)  
31 -const menuOptions = ref<any>([]) // 树形结构  
32 -const getTree = async () => {  
33 - const res = await listSimpleMenusApi()  
34 - menuOptions.value = handleTree(res)  
35 -}  
36 -const schema = reactive<FormSchema[]>([  
37 - {  
38 - label: '生成模板',  
39 - field: 'templateType',  
40 - component: 'Select',  
41 - componentProps: {  
42 - options: templateTypeOptions  
43 - },  
44 - colProps: {  
45 - span: 12  
46 - }  
47 - },  
48 - {  
49 - label: '生成场景',  
50 - field: 'scene',  
51 - component: 'Select',  
52 - componentProps: {  
53 - options: sceneOptions  
54 - },  
55 - colProps: {  
56 - span: 12  
57 - }  
58 - },  
59 - {  
60 - label: '模块名',  
61 - field: 'moduleName',  
62 - component: 'Input',  
63 - labelMessage: '模块名,即一级目录,例如 system、infra、tool 等等',  
64 - colProps: {  
65 - span: 12  
66 - }  
67 - },  
68 - {  
69 - label: '业务名',  
70 - field: 'businessName',  
71 - component: 'Input',  
72 - labelMessage: '业务名,即二级目录,例如 user、permission、dict 等等',  
73 - colProps: {  
74 - span: 12  
75 - }  
76 - },  
77 - {  
78 - label: '类名称',  
79 - field: 'className',  
80 - component: 'Input',  
81 - labelMessage: '类名称(首字母大写),例如SysUser、SysMenu、SysDictData 等等',  
82 - colProps: {  
83 - span: 12  
84 - }  
85 - },  
86 - {  
87 - label: '类描述',  
88 - field: 'classComment',  
89 - component: 'Input',  
90 - labelMessage: '用作类描述,例如 用户',  
91 - colProps: {  
92 - span: 12  
93 - }  
94 - },  
95 - {  
96 - label: '上级菜单',  
97 - field: 'parentMenuId',  
98 - component: 'TreeSelect',  
99 - componentProps: {  
100 - data: menuOptions,  
101 - props: defaultProps,  
102 - checkStrictly: true,  
103 - nodeKey: 'id'  
104 - },  
105 - labelMessage: '分配到指定菜单下,例如 系统管理',  
106 - colProps: {  
107 - span: 12  
108 - }  
109 - }  
110 -])  
111 -const { register, methods, elFormRef } = useForm({  
112 - schema  
113 -})  
114 -  
115 -// ========== 初始化 ==========  
116 -onMounted(async () => {  
117 - await getTree()  
118 -})  
119 -watch(  
120 - () => props.genInfo,  
121 - (genInfo) => {  
122 - if (!genInfo) return  
123 - const { setValues } = methods  
124 - setValues(genInfo)  
125 - },  
126 - {  
127 - deep: true,  
128 - immediate: true  
129 - }  
130 -)  
131 -defineExpose({  
132 - elFormRef,  
133 - getFormData: methods.getFormData  
134 -})  
135 -</script>  
yudao-ui-admin-vue3/src/views/infra/codegen/components/Preview.vue
@@ -13,7 +13,7 @@ @@ -13,7 +13,7 @@
13 /> 13 />
14 </el-scrollbar> 14 </el-scrollbar>
15 </el-card> 15 </el-card>
16 - <el-card class="w-3/4" style="margin-left: 10px" :gutter="12" shadow="hover"> 16 + <el-card class="w-3/4 ml-3" :gutter="12" shadow="hover">
17 <el-tabs v-model="preview.activeName"> 17 <el-tabs v-model="preview.activeName">
18 <el-tab-pane 18 <el-tab-pane
19 v-for="item in previewCodegen" 19 v-for="item in previewCodegen"
yudao-ui-admin-vue3/src/views/infra/codegen/components/index.ts
1 import BasicInfoForm from './BasicInfoForm.vue' 1 import BasicInfoForm from './BasicInfoForm.vue'
2 import CloumInfoForm from './CloumInfoForm.vue' 2 import CloumInfoForm from './CloumInfoForm.vue'
3 -import GenInfoForm from './GenInfoForm.vue'  
4 import ImportTable from './ImportTable.vue' 3 import ImportTable from './ImportTable.vue'
5 import Preview from './Preview.vue' 4 import Preview from './Preview.vue'
6 -export { BasicInfoForm, CloumInfoForm, GenInfoForm, ImportTable, Preview } 5 +export { BasicInfoForm, CloumInfoForm, ImportTable, Preview }
yudao-ui-admin-vue3/src/views/infra/codegen/index.vue
@@ -32,7 +32,7 @@ @@ -32,7 +32,7 @@
32 preIcon="ep:delete" 32 preIcon="ep:delete"
33 :title="t('action.del')" 33 :title="t('action.del')"
34 v-hasPermi="['infra:codegen:delete']" 34 v-hasPermi="['infra:codegen:delete']"
35 - @click="handleDelete(row.id)" 35 + @click="deleteData(row.id)"
36 /> 36 />
37 <!-- 操作:同步 --> 37 <!-- 操作:同步 -->
38 <XTextButton 38 <XTextButton
@@ -52,7 +52,7 @@ @@ -52,7 +52,7 @@
52 </XTable> 52 </XTable>
53 </ContentWrap> 53 </ContentWrap>
54 <!-- 弹窗:导入表 --> 54 <!-- 弹窗:导入表 -->
55 - <ImportTable ref="importRef" @ok="handleQuery()" /> 55 + <ImportTable ref="importRef" @ok="reload()" />
56 <!-- 弹窗:预览代码 --> 56 <!-- 弹窗:预览代码 -->
57 <Preview ref="previewRef" /> 57 <Preview ref="previewRef" />
58 </template> 58 </template>
@@ -103,17 +103,10 @@ const handleSynchDb = (row: CodegenTableVO) =&gt; { @@ -103,17 +103,10 @@ const handleSynchDb = (row: CodegenTableVO) =&gt; {
103 message.success('同步成功') 103 message.success('同步成功')
104 }) 104 })
105 } 105 }
  106 +
106 // 生成代码操作 107 // 生成代码操作
107 const handleGenTable = async (row: CodegenTableVO) => { 108 const handleGenTable = async (row: CodegenTableVO) => {
108 const res = await CodegenApi.downloadCodegenApi(row.id) 109 const res = await CodegenApi.downloadCodegenApi(row.id)
109 download.zip(res, 'codegen-' + row.className + '.zip') 110 download.zip(res, 'codegen-' + row.className + '.zip')
110 } 111 }
111 -// 删除操作  
112 -const handleDelete = async (rowId: number) => {  
113 - await deleteData(rowId)  
114 -}  
115 -// 查询操作  
116 -const handleQuery = async () => {  
117 - await reload()  
118 -}  
119 </script> 112 </script>
yudao-ui-admin-vue3/src/views/infra/config/index.vue
@@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
17 preIcon="ep:download" 17 preIcon="ep:download"
18 :title="t('action.export')" 18 :title="t('action.export')"
19 v-hasPermi="['infra:config:export']" 19 v-hasPermi="['infra:config:export']"
20 - @click="handleExport()" 20 + @click="exportList('配置.xls')"
21 /> 21 />
22 </template> 22 </template>
23 <template #visible_default="{ row }"> 23 <template #visible_default="{ row }">
@@ -43,7 +43,7 @@ @@ -43,7 +43,7 @@
43 preIcon="ep:delete" 43 preIcon="ep:delete"
44 :title="t('action.del')" 44 :title="t('action.del')"
45 v-hasPermi="['infra:config:delete']" 45 v-hasPermi="['infra:config:delete']"
46 - @click="handleDelete(row.id)" 46 + @click="deleteData(row.id)"
47 /> 47 />
48 </template> 48 </template>
49 </XTable> 49 </XTable>
@@ -123,11 +123,6 @@ const handleCreate = () =&gt; { @@ -123,11 +123,6 @@ const handleCreate = () =&gt; {
123 setDialogTile('create') 123 setDialogTile('create')
124 } 124 }
125 125
126 -// 导出操作  
127 -const handleExport = async () => {  
128 - await exportList('配置.xls')  
129 -}  
130 -  
131 // 修改操作 126 // 修改操作
132 const handleUpdate = async (rowId: number) => { 127 const handleUpdate = async (rowId: number) => {
133 setDialogTile('update') 128 setDialogTile('update')
@@ -143,11 +138,6 @@ const handleDetail = async (rowId: number) =&gt; { @@ -143,11 +138,6 @@ const handleDetail = async (rowId: number) =&gt; {
143 detailData.value = res 138 detailData.value = res
144 } 139 }
145 140
146 -// 删除操作  
147 -const handleDelete = async (rowId: number) => {  
148 - await deleteData(rowId)  
149 -}  
150 -  
151 // 提交按钮 141 // 提交按钮
152 const submitForm = async () => { 142 const submitForm = async () => {
153 const elForm = unref(formRef)?.getElFormRef() 143 const elForm = unref(formRef)?.getElFormRef()
yudao-ui-admin-vue3/src/views/infra/dataSourceConfig/index.vue
@@ -31,7 +31,7 @@ @@ -31,7 +31,7 @@
31 preIcon="ep:delete" 31 preIcon="ep:delete"
32 :title="t('action.del')" 32 :title="t('action.del')"
33 v-hasPermi="['infra:data-source-config:delete']" 33 v-hasPermi="['infra:data-source-config:delete']"
34 - @click="handleDelete(row.id)" 34 + @click="deleteData(row.id)"
35 /> 35 />
36 </template> 36 </template>
37 </XTable> 37 </XTable>
@@ -121,11 +121,6 @@ const handleDetail = async (rowId: number) =&gt; { @@ -121,11 +121,6 @@ const handleDetail = async (rowId: number) =&gt; {
121 setDialogTile('detail') 121 setDialogTile('detail')
122 } 122 }
123 123
124 -// 删除操作  
125 -const handleDelete = async (rowId: number) => {  
126 - await deleteData(rowId)  
127 -}  
128 -  
129 // 提交按钮 124 // 提交按钮
130 const submitForm = async () => { 125 const submitForm = async () => {
131 const elForm = unref(formRef)?.getElFormRef() 126 const elForm = unref(formRef)?.getElFormRef()
yudao-ui-admin-vue3/src/views/infra/fileConfig/index.vue
@@ -41,7 +41,7 @@ @@ -41,7 +41,7 @@
41 preIcon="ep:delete" 41 preIcon="ep:delete"
42 :title="t('action.del')" 42 :title="t('action.del')"
43 v-hasPermi="['infra:file-config:delete']" 43 v-hasPermi="['infra:file-config:delete']"
44 - @click="handleDelete(row.id)" 44 + @click="deleteData(row.id)"
45 /> 45 />
46 </template> 46 </template>
47 </XTable> 47 </XTable>
@@ -283,11 +283,6 @@ const handleTest = async (rowId: number) =&gt; { @@ -283,11 +283,6 @@ const handleTest = async (rowId: number) =&gt; {
283 message.alert('测试通过,上传文件成功!访问地址:' + res) 283 message.alert('测试通过,上传文件成功!访问地址:' + res)
284 } 284 }
285 285
286 -// 删除操作  
287 -const handleDelete = async (rowId: number) => {  
288 - await deleteData(rowId)  
289 -}  
290 -  
291 // 提交按钮 286 // 提交按钮
292 const submitForm = async (formEl: FormInstance | undefined) => { 287 const submitForm = async (formEl: FormInstance | undefined) => {
293 if (!formEl) return 288 if (!formEl) return
yudao-ui-admin-vue3/src/views/infra/fileList/fileList.data.ts
@@ -23,7 +23,7 @@ const crudSchemas = reactive&lt;VxeCrudSchema&gt;({ @@ -23,7 +23,7 @@ const crudSchemas = reactive&lt;VxeCrudSchema&gt;({
23 field: 'url', 23 field: 'url',
24 table: { 24 table: {
25 cellRender: { 25 cellRender: {
26 - name: 'XImg' 26 + name: 'XPreview'
27 } 27 }
28 } 28 }
29 }, 29 },
yudao-ui-admin-vue3/src/views/infra/fileList/index.vue
@@ -21,7 +21,7 @@ @@ -21,7 +21,7 @@
21 preIcon="ep:delete" 21 preIcon="ep:delete"
22 :title="t('action.del')" 22 :title="t('action.del')"
23 v-hasPermi="['infra:file:delete']" 23 v-hasPermi="['infra:file:delete']"
24 - @click="handleDelete(row.id)" 24 + @click="deleteData(row.id)"
25 /> 25 />
26 </template> 26 </template>
27 </XTable> 27 </XTable>
@@ -162,11 +162,6 @@ const handleDetail = (row: FileApi.FileVO) =&gt; { @@ -162,11 +162,6 @@ const handleDetail = (row: FileApi.FileVO) =&gt; {
162 dialogVisible.value = true 162 dialogVisible.value = true
163 } 163 }
164 164
165 -// 删除操作  
166 -const handleDelete = async (rowId: number) => {  
167 - await deleteData(rowId)  
168 -}  
169 -  
170 // ========== 复制相关 ========== 165 // ========== 复制相关 ==========
171 const handleCopy = async (text: string) => { 166 const handleCopy = async (text: string) => {
172 const { copy, copied, isSupported } = useClipboard({ source: text }) 167 const { copy, copied, isSupported } = useClipboard({ source: text })
yudao-ui-admin-vue3/src/views/infra/job/JobLog.vue
@@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
8 preIcon="ep:download" 8 preIcon="ep:download"
9 :title="t('action.export')" 9 :title="t('action.export')"
10 v-hasPermi="['infra:job:export']" 10 v-hasPermi="['infra:job:export']"
11 - @click="handleExport()" 11 + @click="exportList('定时任务详情.xls')"
12 /> 12 />
13 </template> 13 </template>
14 <template #beginTime_default="{ row }"> 14 <template #beginTime_default="{ row }">
@@ -77,8 +77,4 @@ const handleDetail = async (row: JobLogApi.JobLogVO) =&gt; { @@ -77,8 +77,4 @@ const handleDetail = async (row: JobLogApi.JobLogVO) =&gt; {
77 dialogTitle.value = t('action.detail') 77 dialogTitle.value = t('action.detail')
78 dialogVisible.value = true 78 dialogVisible.value = true
79 } 79 }
80 -// 导出操作  
81 -const handleExport = async () => {  
82 - await exportList('定时任务详情.xls')  
83 -}  
84 </script> 80 </script>
yudao-ui-admin-vue3/src/views/infra/job/index.vue
@@ -17,14 +17,14 @@ @@ -17,14 +17,14 @@
17 preIcon="ep:download" 17 preIcon="ep:download"
18 :title="t('action.export')" 18 :title="t('action.export')"
19 v-hasPermi="['infra:job:export']" 19 v-hasPermi="['infra:job:export']"
20 - @click="handleExport()" 20 + @click="exportList('定时任务.xls')"
21 /> 21 />
22 <XButton 22 <XButton
23 type="info" 23 type="info"
24 preIcon="ep:zoom-in" 24 preIcon="ep:zoom-in"
25 title="执行日志" 25 title="执行日志"
26 v-hasPermi="['infra:job:query']" 26 v-hasPermi="['infra:job:query']"
27 - @click="handleJobLog" 27 + @click="handleJobLog()"
28 /> 28 />
29 </template> 29 </template>
30 <template #actionbtns_default="{ row }"> 30 <template #actionbtns_default="{ row }">
@@ -46,7 +46,7 @@ @@ -46,7 +46,7 @@
46 preIcon="ep:delete" 46 preIcon="ep:delete"
47 :title="t('action.del')" 47 :title="t('action.del')"
48 v-hasPermi="['infra:job:delete']" 48 v-hasPermi="['infra:job:delete']"
49 - @click="handleDelete(row.id)" 49 + @click="deleteData(row.id)"
50 /> 50 />
51 <el-dropdown class="p-0.5" v-hasPermi="['infra:job:trigger', 'infra:job:query']"> 51 <el-dropdown class="p-0.5" v-hasPermi="['infra:job:trigger', 'infra:job:query']">
52 <XTextButton :title="t('action.more')" postIcon="ep:arrow-down" /> 52 <XTextButton :title="t('action.more')" postIcon="ep:arrow-down" />
@@ -179,11 +179,6 @@ const handleCreate = () =&gt; { @@ -179,11 +179,6 @@ const handleCreate = () =&gt; {
179 setDialogTile('create') 179 setDialogTile('create')
180 } 180 }
181 181
182 -// 导出操作  
183 -const handleExport = async () => {  
184 - await exportList('定时任务.xls')  
185 -}  
186 -  
187 // 修改操作 182 // 修改操作
188 const handleUpdate = async (rowId: number) => { 183 const handleUpdate = async (rowId: number) => {
189 setDialogTile('update') 184 setDialogTile('update')
@@ -248,10 +243,6 @@ const parseTime = (time) =&gt; { @@ -248,10 +243,6 @@ const parseTime = (time) =&gt; {
248 return time_str 243 return time_str
249 } 244 }
250 245
251 -// 删除操作  
252 -const handleDelete = async (rowId: number) => {  
253 - await deleteData(rowId)  
254 -}  
255 const handleChangeStatus = async (row: JobApi.JobVO) => { 246 const handleChangeStatus = async (row: JobApi.JobVO) => {
256 const text = row.status === InfraJobStatusEnum.STOP ? '开启' : '关闭' 247 const text = row.status === InfraJobStatusEnum.STOP ? '开启' : '关闭'
257 const status = 248 const status =
@@ -275,7 +266,7 @@ const handleChangeStatus = async (row: JobApi.JobVO) =&gt; { @@ -275,7 +266,7 @@ const handleChangeStatus = async (row: JobApi.JobVO) =&gt; {
275 }) 266 })
276 } 267 }
277 // 执行日志 268 // 执行日志
278 -const handleJobLog = (rowId: number) => { 269 +const handleJobLog = (rowId?: number) => {
279 if (rowId) { 270 if (rowId) {
280 push('/job/job-log?id=' + rowId) 271 push('/job/job-log?id=' + rowId)
281 } else { 272 } else {
yudao-ui-admin-vue3/src/views/infra/webSocket/index.vue 0 → 100644
  1 +<template>
  2 + <div class="flex">
  3 + <el-card class="w-1/2" :gutter="12" shadow="always">
  4 + <template #header>
  5 + <div class="card-header">
  6 + <span>连接</span>
  7 + </div>
  8 + </template>
  9 + <div class="flex items-center">
  10 + <span class="text-lg font-medium mr-4"> 连接状态: </span>
  11 + <el-tag :color="getTagColor">{{ status }}</el-tag>
  12 + </div>
  13 + <hr class="my-4" />
  14 +
  15 + <div class="flex">
  16 + <el-input v-model="server" disabled>
  17 + <template #prepend> 服务地址 </template>
  18 + </el-input>
  19 + <el-button :type="getIsOpen ? 'danger' : 'primary'" @click="toggle">
  20 + {{ getIsOpen ? '关闭连接' : '开启连接' }}
  21 + </el-button>
  22 + </div>
  23 + <p class="text-lg font-medium mt-4">设置</p>
  24 + <hr class="my-4" />
  25 + <el-input
  26 + v-model="sendValue"
  27 + :autosize="{ minRows: 2, maxRows: 4 }"
  28 + type="textarea"
  29 + :disabled="!getIsOpen"
  30 + clearable
  31 + />
  32 + <el-button type="primary" block class="mt-4" :disabled="!getIsOpen" @click="handlerSend">
  33 + 发送
  34 + </el-button>
  35 + </el-card>
  36 + <el-card class="w-1/2" :gutter="12" shadow="always">
  37 + <template #header>
  38 + <div class="card-header">
  39 + <span>消息记录</span>
  40 + </div>
  41 + </template>
  42 + <div class="max-h-80 overflow-auto">
  43 + <ul>
  44 + <li v-for="item in getList" class="mt-2" :key="item.time">
  45 + <div class="flex items-center">
  46 + <span class="mr-2 text-primary font-medium">收到消息:</span>
  47 + <span>{{ dayjs(item.time).format('YYYY-MM-DD HH:mm:ss') }}</span>
  48 + </div>
  49 + <div>
  50 + {{ item.res }}
  51 + </div>
  52 + </li>
  53 + </ul>
  54 + </div>
  55 + </el-card>
  56 + </div>
  57 +</template>
  58 +<script setup lang="ts">
  59 +import { computed, reactive, ref, watchEffect } from 'vue'
  60 +import { ElCard, ElInput, ElTag } from 'element-plus'
  61 +import { useWebSocket } from '@vueuse/core'
  62 +import dayjs from 'dayjs'
  63 +import { useUserStore } from '@/store/modules/user'
  64 +
  65 +const userStore = useUserStore()
  66 +
  67 +const sendValue = ref('')
  68 +
  69 +const server = ref(
  70 + (import.meta.env.VITE_BASE_URL + '/websocket/message').replace('http', 'ws') +
  71 + '?userId=' +
  72 + userStore.getUser.id
  73 +)
  74 +
  75 +const state = reactive({
  76 + recordList: [] as { id: number; time: number; res: string }[]
  77 +})
  78 +
  79 +const { status, data, send, close, open } = useWebSocket(server.value, {
  80 + autoReconnect: false,
  81 + heartbeat: true
  82 +})
  83 +
  84 +watchEffect(() => {
  85 + if (data.value) {
  86 + try {
  87 + const res = JSON.parse(data.value)
  88 + state.recordList.push(res)
  89 + } catch (error) {
  90 + state.recordList.push({
  91 + res: data.value,
  92 + id: Math.ceil(Math.random() * 1000),
  93 + time: new Date().getTime()
  94 + })
  95 + }
  96 + }
  97 +})
  98 +
  99 +const getIsOpen = computed(() => status.value === 'OPEN')
  100 +const getTagColor = computed(() => (getIsOpen.value ? 'success' : 'red'))
  101 +
  102 +const getList = computed(() => {
  103 + return [...state.recordList].reverse()
  104 +})
  105 +
  106 +function handlerSend() {
  107 + send(sendValue.value)
  108 + sendValue.value = ''
  109 +}
  110 +
  111 +function toggle() {
  112 + if (getIsOpen.value) {
  113 + close()
  114 + } else {
  115 + open()
  116 + }
  117 +}
  118 +</script>
yudao-ui-admin-vue3/src/views/pay/app/index.vue
@@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
17 preIcon="ep:download" 17 preIcon="ep:download"
18 :title="t('action.export')" 18 :title="t('action.export')"
19 v-hasPermi="['pay:app:export']" 19 v-hasPermi="['pay:app:export']"
20 - @click="handleExport()" 20 + @click="exportList('应用信息.xls')"
21 /> 21 />
22 </template> 22 </template>
23 <template #actionbtns_default="{ row }"> 23 <template #actionbtns_default="{ row }">
@@ -40,7 +40,7 @@ @@ -40,7 +40,7 @@
40 preIcon="ep:delete" 40 preIcon="ep:delete"
41 :title="t('action.del')" 41 :title="t('action.del')"
42 v-hasPermi="['pay:app:delete']" 42 v-hasPermi="['pay:app:delete']"
43 - @click="handleDelete(row.id)" 43 + @click="deleteData(row.id)"
44 /> 44 />
45 </template> 45 </template>
46 </XTable> 46 </XTable>
@@ -115,11 +115,6 @@ const handleCreate = () =&gt; { @@ -115,11 +115,6 @@ const handleCreate = () =&gt; {
115 setDialogTile('create') 115 setDialogTile('create')
116 } 116 }
117 117
118 -// 导出操作  
119 -const handleExport = async () => {  
120 - await exportList('应用信息.xls')  
121 -}  
122 -  
123 // 修改操作 118 // 修改操作
124 const handleUpdate = async (rowId: number) => { 119 const handleUpdate = async (rowId: number) => {
125 setDialogTile('update') 120 setDialogTile('update')
@@ -135,11 +130,6 @@ const handleDetail = async (rowId: number) =&gt; { @@ -135,11 +130,6 @@ const handleDetail = async (rowId: number) =&gt; {
135 detailData.value = res 130 detailData.value = res
136 } 131 }
137 132
138 -// 删除操作  
139 -const handleDelete = async (rowId: number) => {  
140 - await deleteData(rowId)  
141 -}  
142 -  
143 // 提交按钮 133 // 提交按钮
144 const submitForm = async () => { 134 const submitForm = async () => {
145 const elForm = unref(formRef)?.getElFormRef() 135 const elForm = unref(formRef)?.getElFormRef()
yudao-ui-admin-vue3/src/views/pay/merchant/index.vue
@@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
17 preIcon="ep:download" 17 preIcon="ep:download"
18 :title="t('action.export')" 18 :title="t('action.export')"
19 v-hasPermi="['pay:merchant:export']" 19 v-hasPermi="['pay:merchant:export']"
20 - @click="handleExport()" 20 + @click="exportList('商户列表.xls')"
21 /> 21 />
22 </template> 22 </template>
23 <template #actionbtns_default="{ row }"> 23 <template #actionbtns_default="{ row }">
@@ -40,7 +40,7 @@ @@ -40,7 +40,7 @@
40 preIcon="ep:delete" 40 preIcon="ep:delete"
41 :title="t('action.del')" 41 :title="t('action.del')"
42 v-hasPermi="['pay:merchant:delete']" 42 v-hasPermi="['pay:merchant:delete']"
43 - @click="handleDelete(row.id)" 43 + @click="deleteData(row.id)"
44 /> 44 />
45 </template> 45 </template>
46 </XTable> 46 </XTable>
@@ -113,11 +113,6 @@ const handleCreate = () =&gt; { @@ -113,11 +113,6 @@ const handleCreate = () =&gt; {
113 setDialogTile('create') 113 setDialogTile('create')
114 } 114 }
115 115
116 -// 导出操作  
117 -const handleExport = async () => {  
118 - await exportList('商户列表.xls')  
119 -}  
120 -  
121 // 修改操作 116 // 修改操作
122 const handleUpdate = async (rowId: number) => { 117 const handleUpdate = async (rowId: number) => {
123 setDialogTile('update') 118 setDialogTile('update')
@@ -133,11 +128,6 @@ const handleDetail = async (rowId: number) =&gt; { @@ -133,11 +128,6 @@ const handleDetail = async (rowId: number) =&gt; {
133 detailData.value = res 128 detailData.value = res
134 } 129 }
135 130
136 -// 删除操作  
137 -const handleDelete = async (rowId: number) => {  
138 - await deleteData(rowId)  
139 -}  
140 -  
141 // 提交按钮 131 // 提交按钮
142 const submitForm = async () => { 132 const submitForm = async () => {
143 const elForm = unref(formRef)?.getElFormRef() 133 const elForm = unref(formRef)?.getElFormRef()
yudao-ui-admin-vue3/src/views/pay/order/index.vue
@@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
17 preIcon="ep:download" 17 preIcon="ep:download"
18 :title="t('action.export')" 18 :title="t('action.export')"
19 v-hasPermi="['pay:order:export']" 19 v-hasPermi="['pay:order:export']"
20 - @click="handleExport()" 20 + @click="exportList('订单数据.xls')"
21 /> 21 />
22 </template> 22 </template>
23 <template #actionbtns_default="{ row }"> 23 <template #actionbtns_default="{ row }">
@@ -72,10 +72,6 @@ const setDialogTile = (type: string) =&gt; { @@ -72,10 +72,6 @@ const setDialogTile = (type: string) =&gt; {
72 const handleCreate = () => { 72 const handleCreate = () => {
73 setDialogTile('create') 73 setDialogTile('create')
74 } 74 }
75 -// 导出操作  
76 -const handleExport = async () => {  
77 - await exportList('订单数据.xls')  
78 -}  
79 75
80 // 详情操作 76 // 详情操作
81 const handleDetail = async (rowId: number) => { 77 const handleDetail = async (rowId: number) => {
yudao-ui-admin-vue3/src/views/pay/refund/index.vue
@@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
9 preIcon="ep:download" 9 preIcon="ep:download"
10 :title="t('action.export')" 10 :title="t('action.export')"
11 v-hasPermi="['pay:refund:export']" 11 v-hasPermi="['pay:refund:export']"
12 - @click="handleExport()" 12 + @click="exportList('退款订单.xls')"
13 /> 13 />
14 </template> 14 </template>
15 <template #actionbtns_default="{ row }"> 15 <template #actionbtns_default="{ row }">
@@ -49,11 +49,6 @@ const [registerTable, { exportList }] = useXTable({ @@ -49,11 +49,6 @@ const [registerTable, { exportList }] = useXTable({
49 exportListApi: RefundApi.exportRefundApi 49 exportListApi: RefundApi.exportRefundApi
50 }) 50 })
51 51
52 -// 导出操作  
53 -const handleExport = async () => {  
54 - await exportList('退款订单.xls')  
55 -}  
56 -  
57 // ========== CRUD 相关 ========== 52 // ========== CRUD 相关 ==========
58 const dialogVisible = ref(false) // 是否显示弹出层 53 const dialogVisible = ref(false) // 是否显示弹出层
59 const detailData = ref() // 详情 Ref 54 const detailData = ref() // 详情 Ref
yudao-ui-admin-vue3/src/views/system/dept/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <XTable @register="registerTable" show-overflow> 4 + <XTable ref="xGrid" @register="registerTable" show-overflow>
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:新增 --> 6 <!-- 操作:新增 -->
7 <XButton 7 <XButton
@@ -11,8 +11,8 @@ @@ -11,8 +11,8 @@
11 v-hasPermi="['system:dept:create']" 11 v-hasPermi="['system:dept:create']"
12 @click="handleCreate()" 12 @click="handleCreate()"
13 /> 13 />
14 - <XButton title="展开所有" @click="xGrid?.setAllTreeExpand(true)" />  
15 - <XButton title="关闭所有" @click="xGrid?.clearTreeExpand()" /> 14 + <XButton title="展开所有" @click="xGrid?.Ref.setAllTreeExpand(true)" />
  15 + <XButton title="关闭所有" @click="xGrid?.Ref.clearTreeExpand()" />
16 </template> 16 </template>
17 <template #leaderUserId_default="{ row }"> 17 <template #leaderUserId_default="{ row }">
18 <span>{{ userNicknameFormat(row) }}</span> 18 <span>{{ userNicknameFormat(row) }}</span>
@@ -30,7 +30,7 @@ @@ -30,7 +30,7 @@
30 preIcon="ep:delete" 30 preIcon="ep:delete"
31 :title="t('action.del')" 31 :title="t('action.del')"
32 v-hasPermi="['system:dept:delete']" 32 v-hasPermi="['system:dept:delete']"
33 - @click="handleDelete(row.id)" 33 + @click="deleteData(row.id)"
34 /> 34 />
35 </template> 35 </template>
36 </XTable> 36 </XTable>
@@ -77,7 +77,6 @@ @@ -77,7 +77,6 @@
77 <script setup lang="ts" name="Dept"> 77 <script setup lang="ts" name="Dept">
78 import { nextTick, onMounted, ref, unref } from 'vue' 78 import { nextTick, onMounted, ref, unref } from 'vue'
79 import { ElSelect, ElTreeSelect, ElOption } from 'element-plus' 79 import { ElSelect, ElTreeSelect, ElOption } from 'element-plus'
80 -import { VxeGridInstance } from 'vxe-table'  
81 import { handleTree, defaultProps } from '@/utils/tree' 80 import { handleTree, defaultProps } from '@/utils/tree'
82 import { useI18n } from '@/hooks/web/useI18n' 81 import { useI18n } from '@/hooks/web/useI18n'
83 import { useMessage } from '@/hooks/web/useMessage' 82 import { useMessage } from '@/hooks/web/useMessage'
@@ -90,7 +89,7 @@ import { getListSimpleUsersApi, UserVO } from &#39;@/api/system/user&#39; @@ -90,7 +89,7 @@ import { getListSimpleUsersApi, UserVO } from &#39;@/api/system/user&#39;
90 const { t } = useI18n() // 国际化 89 const { t } = useI18n() // 国际化
91 const message = useMessage() // 消息弹窗 90 const message = useMessage() // 消息弹窗
92 // 列表相关的变量 91 // 列表相关的变量
93 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref 92 +const xGrid = ref<any>() // 列表 Grid Ref
94 const treeConfig = { 93 const treeConfig = {
95 transform: true, 94 transform: true,
96 rowField: 'id', 95 rowField: 'id',
@@ -168,17 +167,13 @@ const submitForm = async () =&gt; { @@ -168,17 +167,13 @@ const submitForm = async () =&gt; {
168 dialogVisible.value = false 167 dialogVisible.value = false
169 } finally { 168 } finally {
170 actionLoading.value = false 169 actionLoading.value = false
  170 + await getTree()
171 await reload() 171 await reload()
172 } 172 }
173 } 173 }
174 }) 174 })
175 } 175 }
176 176
177 -// 删除操作  
178 -const handleDelete = async (rowId: number) => {  
179 - await deleteData(rowId)  
180 -}  
181 -  
182 const userNicknameFormat = (row) => { 177 const userNicknameFormat = (row) => {
183 if (!row || !row.leaderUserId) { 178 if (!row || !row.leaderUserId) {
184 return '未设置' 179 return '未设置'
yudao-ui-admin-vue3/src/views/system/dict/index.vue
@@ -31,14 +31,14 @@ @@ -31,14 +31,14 @@
31 preIcon="ep:delete" 31 preIcon="ep:delete"
32 :title="t('action.del')" 32 :title="t('action.del')"
33 v-hasPermi="['system:dict:delete']" 33 v-hasPermi="['system:dict:delete']"
34 - @click="handleTypeDelete(row.id)" 34 + @click="typeDeleteData(row.id)"
35 /> 35 />
36 </template> 36 </template>
37 </XTable> 37 </XTable>
38 <!-- @星语:分页和列表重叠在一起了 --> 38 <!-- @星语:分页和列表重叠在一起了 -->
39 </el-card> 39 </el-card>
40 <!-- ====== 字典数据 ====== --> 40 <!-- ====== 字典数据 ====== -->
41 - <el-card class="w-1/2 dict" style="margin-left: 10px" :gutter="12" shadow="hover"> 41 + <el-card class="w-1/2 dict ml-3" :gutter="12" shadow="hover">
42 <template #header> 42 <template #header>
43 <div class="card-header"> 43 <div class="card-header">
44 <span>字典数据</span> 44 <span>字典数据</span>
@@ -74,7 +74,7 @@ @@ -74,7 +74,7 @@
74 v-hasPermi="['system:dict:delete']" 74 v-hasPermi="['system:dict:delete']"
75 preIcon="ep:delete" 75 preIcon="ep:delete"
76 :title="t('action.del')" 76 :title="t('action.del')"
77 - @click="handleDataDelete(row.id)" 77 + @click="dataDeleteData(row.id)"
78 /> 78 />
79 </template> 79 </template>
80 </XTable> 80 </XTable>
@@ -202,15 +202,6 @@ const setDialogTile = (type: string) =&gt; { @@ -202,15 +202,6 @@ const setDialogTile = (type: string) =&gt; {
202 dialogVisible.value = true 202 dialogVisible.value = true
203 } 203 }
204 204
205 -// 删除操作  
206 -const handleTypeDelete = async (rowId: number) => {  
207 - await typeDeleteData(rowId)  
208 -}  
209 -  
210 -const handleDataDelete = async (rowId: number) => {  
211 - await dataDeleteData(rowId)  
212 -}  
213 -  
214 // 提交按钮 205 // 提交按钮
215 const submitTypeForm = async () => { 206 const submitTypeForm = async () => {
216 const elForm = unref(typeFormRef)?.getElFormRef() 207 const elForm = unref(typeFormRef)?.getElFormRef()
yudao-ui-admin-vue3/src/views/system/errorCode/index.vue
@@ -32,7 +32,7 @@ @@ -32,7 +32,7 @@
32 preIcon="ep:delete" 32 preIcon="ep:delete"
33 :title="t('action.del')" 33 :title="t('action.del')"
34 v-hasPermi="['system:error-code:delete']" 34 v-hasPermi="['system:error-code:delete']"
35 - @click="handleDelete(row.id)" 35 + @click="deleteData(row.id)"
36 /> 36 />
37 </template> 37 </template>
38 </XTable> 38 </XTable>
@@ -121,11 +121,6 @@ const handleDetail = async (rowId: number) =&gt; { @@ -121,11 +121,6 @@ const handleDetail = async (rowId: number) =&gt; {
121 detailData.value = res 121 detailData.value = res
122 } 122 }
123 123
124 -// 删除操作  
125 -const handleDelete = async (rowId: number) => {  
126 - await deleteData(rowId)  
127 -}  
128 -  
129 // 提交新增/修改的表单 124 // 提交新增/修改的表单
130 const submitForm = async () => { 125 const submitForm = async () => {
131 const elForm = unref(formRef)?.getElFormRef() 126 const elForm = unref(formRef)?.getElFormRef()
yudao-ui-admin-vue3/src/views/system/loginlog/index.vue
@@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
8 type="warning" 8 type="warning"
9 preIcon="ep:download" 9 preIcon="ep:download"
10 :title="t('action.export')" 10 :title="t('action.export')"
11 - @click="handleExport()" 11 + @click="exportList('登录列表.xls')"
12 /> 12 />
13 </template> 13 </template>
14 <template #actionbtns_default="{ row }"> 14 <template #actionbtns_default="{ row }">
@@ -54,9 +54,4 @@ const handleDetail = async (row: LoginLogVO) =&gt; { @@ -54,9 +54,4 @@ const handleDetail = async (row: LoginLogVO) =&gt; {
54 detailData.value = row 54 detailData.value = row
55 dialogVisible.value = true 55 dialogVisible.value = true
56 } 56 }
57 -  
58 -// 导出操作  
59 -const handleExport = async () => {  
60 - await exportList('登录列表.xls')  
61 -}  
62 </script> 57 </script>
yudao-ui-admin-vue3/src/views/system/menu/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <XTable @register="registerTable" show-overflow> 4 + <XTable ref="xGrid" @register="registerTable" show-overflow>
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:新增 --> 6 <!-- 操作:新增 -->
7 <XButton 7 <XButton
@@ -11,8 +11,8 @@ @@ -11,8 +11,8 @@
11 v-hasPermi="['system:menu:create']" 11 v-hasPermi="['system:menu:create']"
12 @click="handleCreate()" 12 @click="handleCreate()"
13 /> 13 />
14 - <XButton title="展开所有" @click="xGrid?.setAllTreeExpand(true)" />  
15 - <XButton title="关闭所有" @click="xGrid?.clearTreeExpand()" /> 14 + <XButton title="展开所有" @click="xGrid?.Ref.setAllTreeExpand(true)" />
  15 + <XButton title="关闭所有" @click="xGrid?.Ref.clearTreeExpand()" />
16 </template> 16 </template>
17 <template #name_default="{ row }"> 17 <template #name_default="{ row }">
18 <Icon :icon="row.icon" /> 18 <Icon :icon="row.icon" />
@@ -31,7 +31,7 @@ @@ -31,7 +31,7 @@
31 preIcon="ep:delete" 31 preIcon="ep:delete"
32 :title="t('action.del')" 32 :title="t('action.del')"
33 v-hasPermi="['system:menu:delete']" 33 v-hasPermi="['system:menu:delete']"
34 - @click="handleDelete(row.id)" 34 + @click="deleteData(row.id)"
35 /> 35 />
36 </template> 36 </template>
37 </XTable> 37 </XTable>
@@ -194,7 +194,6 @@ import { @@ -194,7 +194,6 @@ import {
194 } from 'element-plus' 194 } from 'element-plus'
195 import { Tooltip } from '@/components/Tooltip' 195 import { Tooltip } from '@/components/Tooltip'
196 import { IconSelect } from '@/components/Icon' 196 import { IconSelect } from '@/components/Icon'
197 -import { VxeGridInstance } from 'vxe-table'  
198 // 业务相关的 import 197 // 业务相关的 import
199 import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' 198 import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
200 import { SystemMenuTypeEnum, CommonStatusEnum } from '@/utils/constants' 199 import { SystemMenuTypeEnum, CommonStatusEnum } from '@/utils/constants'
@@ -206,9 +205,10 @@ import { useXTable } from &#39;@/hooks/web/useXTable&#39; @@ -206,9 +205,10 @@ import { useXTable } from &#39;@/hooks/web/useXTable&#39;
206 const { t } = useI18n() // 国际化 205 const { t } = useI18n() // 国际化
207 const message = useMessage() // 消息弹窗 206 const message = useMessage() // 消息弹窗
208 const { wsCache } = useCache() 207 const { wsCache } = useCache()
  208 +
  209 +const xGrid = ref<any>(null)
  210 +
209 // 列表相关的变量 211 // 列表相关的变量
210 -// 列表相关的变量  
211 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
212 const treeConfig = { 212 const treeConfig = {
213 transform: true, 213 transform: true,
214 rowField: 'id', 214 rowField: 'id',
@@ -334,10 +334,4 @@ const submitForm = async () =&gt; { @@ -334,10 +334,4 @@ const submitForm = async () =&gt; {
334 const isExternal = (path: string) => { 334 const isExternal = (path: string) => {
335 return /^(https?:|mailto:|tel:)/.test(path) 335 return /^(https?:|mailto:|tel:)/.test(path)
336 } 336 }
337 -  
338 -// ========== 删除 ==========  
339 -// 删除操作  
340 -const handleDelete = async (rowId: number) => {  
341 - await deleteData(rowId)  
342 -}  
343 </script> 337 </script>
yudao-ui-admin-vue3/src/views/system/notice/index.vue
@@ -32,7 +32,7 @@ @@ -32,7 +32,7 @@
32 preIcon="ep:delete" 32 preIcon="ep:delete"
33 :title="t('action.del')" 33 :title="t('action.del')"
34 v-hasPermi="['system:notice:delete']" 34 v-hasPermi="['system:notice:delete']"
35 - @click="handleDelete(row.id)" 35 + @click="deleteData(row.id)"
36 /> 36 />
37 </template> 37 </template>
38 </XTable> 38 </XTable>
@@ -126,11 +126,6 @@ const handleDetail = async (rowId: number) =&gt; { @@ -126,11 +126,6 @@ const handleDetail = async (rowId: number) =&gt; {
126 detailData.value = res 126 detailData.value = res
127 } 127 }
128 128
129 -// 删除操作  
130 -const handleDelete = async (rowId: number) => {  
131 - await deleteData(rowId)  
132 -}  
133 -  
134 // 提交新增/修改的表单 129 // 提交新增/修改的表单
135 const submitForm = async () => { 130 const submitForm = async () => {
136 const elForm = unref(formRef)?.getElFormRef() 131 const elForm = unref(formRef)?.getElFormRef()
yudao-ui-admin-vue3/src/views/system/oauth2/client/index.vue
@@ -48,7 +48,7 @@ @@ -48,7 +48,7 @@
48 preIcon="ep:delete" 48 preIcon="ep:delete"
49 :title="t('action.del')" 49 :title="t('action.del')"
50 v-hasPermi="['system:oauth2-client:delete']" 50 v-hasPermi="['system:oauth2-client:delete']"
51 - @click="handleDelete(row.id)" 51 + @click="deleteData(row.id)"
52 /> 52 />
53 </template> 53 </template>
54 </XTable> 54 </XTable>
@@ -184,11 +184,6 @@ const handleDetail = async (rowId: number) =&gt; { @@ -184,11 +184,6 @@ const handleDetail = async (rowId: number) =&gt; {
184 detailData.value = res 184 detailData.value = res
185 } 185 }
186 186
187 -// 删除操作  
188 -const handleDelete = async (rowId: number) => {  
189 - await deleteData(rowId)  
190 -}  
191 -  
192 // 提交新增/修改的表单 187 // 提交新增/修改的表单
193 const submitForm = async () => { 188 const submitForm = async () => {
194 const elForm = unref(formRef)?.getElFormRef() 189 const elForm = unref(formRef)?.getElFormRef()
yudao-ui-admin-vue3/src/views/system/oauth2/token/index.vue
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 <template #actionbtns_default="{ row }"> 5 <template #actionbtns_default="{ row }">
6 <!-- 操作:详情 --> 6 <!-- 操作:详情 -->
7 <XTextButton preIcon="ep:view" :title="t('action.detail')" @click="handleDetail(row)" /> 7 <XTextButton preIcon="ep:view" :title="t('action.detail')" @click="handleDetail(row)" />
8 - <!-- 操作:删除 --> 8 + <!-- 操作:登出 -->
9 <XTextButton 9 <XTextButton
10 preIcon="ep:delete" 10 preIcon="ep:delete"
11 :title="t('action.logout')" 11 :title="t('action.logout')"
yudao-ui-admin-vue3/src/views/system/operatelog/index.vue
@@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
9 preIcon="ep:download" 9 preIcon="ep:download"
10 :title="t('action.export')" 10 :title="t('action.export')"
11 v-hasPermi="['system:operate-log:export']" 11 v-hasPermi="['system:operate-log:export']"
12 - @click="handleExport()" 12 + @click="exportList('操作日志.xls')"
13 /> 13 />
14 </template> 14 </template>
15 <template #duration="{ row }"> 15 <template #duration="{ row }">
@@ -68,9 +68,4 @@ const handleDetail = (row: OperateLogApi.OperateLogVO) =&gt; { @@ -68,9 +68,4 @@ const handleDetail = (row: OperateLogApi.OperateLogVO) =&gt; {
68 detailData.value = row 68 detailData.value = row
69 dialogVisible.value = true 69 dialogVisible.value = true
70 } 70 }
71 -  
72 -// 导出操作  
73 -const handleExport = async () => {  
74 - await exportList('操作日志.xls')  
75 -}  
76 </script> 71 </script>
yudao-ui-admin-vue3/src/views/system/post/index.vue
@@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
17 preIcon="ep:download" 17 preIcon="ep:download"
18 :title="t('action.export')" 18 :title="t('action.export')"
19 v-hasPermi="['system:post:export']" 19 v-hasPermi="['system:post:export']"
20 - @click="handleExport()" 20 + @click="exportList('岗位列表.xls')"
21 /> 21 />
22 </template> 22 </template>
23 <template #actionbtns_default="{ row }"> 23 <template #actionbtns_default="{ row }">
@@ -40,7 +40,7 @@ @@ -40,7 +40,7 @@
40 preIcon="ep:delete" 40 preIcon="ep:delete"
41 :title="t('action.del')" 41 :title="t('action.del')"
42 v-hasPermi="['system:post:delete']" 42 v-hasPermi="['system:post:delete']"
43 - @click="handleDelete(row.id)" 43 + @click="deleteData(row.id)"
44 /> 44 />
45 </template> 45 </template>
46 </XTable> 46 </XTable>
@@ -117,11 +117,6 @@ const handleCreate = () =&gt; { @@ -117,11 +117,6 @@ const handleCreate = () =&gt; {
117 modelLoading.value = false 117 modelLoading.value = false
118 } 118 }
119 119
120 -// 导出操作  
121 -const handleExport = async () => {  
122 - await exportList('岗位列表.xls')  
123 -}  
124 -  
125 // 修改操作 120 // 修改操作
126 const handleUpdate = async (rowId: number) => { 121 const handleUpdate = async (rowId: number) => {
127 setDialogTile('update') 122 setDialogTile('update')
@@ -139,11 +134,6 @@ const handleDetail = async (rowId: number) =&gt; { @@ -139,11 +134,6 @@ const handleDetail = async (rowId: number) =&gt; {
139 modelLoading.value = false 134 modelLoading.value = false
140 } 135 }
141 136
142 -// 删除操作  
143 -const handleDelete = async (rowId: number) => {  
144 - await deleteData(rowId)  
145 -}  
146 -  
147 // 提交新增/修改的表单 137 // 提交新增/修改的表单
148 const submitForm = async () => { 138 const submitForm = async () => {
149 const elForm = unref(formRef)?.getElFormRef() 139 const elForm = unref(formRef)?.getElFormRef()
yudao-ui-admin-vue3/src/views/system/role/index.vue
@@ -46,7 +46,7 @@ @@ -46,7 +46,7 @@
46 preIcon="ep:delete" 46 preIcon="ep:delete"
47 :title="t('action.del')" 47 :title="t('action.del')"
48 v-hasPermi="['system:role:delete']" 48 v-hasPermi="['system:role:delete']"
49 - @click="handleDelete(row.id)" 49 + @click="deleteData(row.id)"
50 /> 50 />
51 </template> 51 </template>
52 </XTable> 52 </XTable>
@@ -217,11 +217,6 @@ const handleDetail = async (rowId: number) =&gt; { @@ -217,11 +217,6 @@ const handleDetail = async (rowId: number) =&gt; {
217 detailData.value = res 217 detailData.value = res
218 } 218 }
219 219
220 -// 删除操作  
221 -const handleDelete = async (rowId: number) => {  
222 - await deleteData(rowId)  
223 -}  
224 -  
225 // 提交按钮 220 // 提交按钮
226 const submitForm = async () => { 221 const submitForm = async () => {
227 const elForm = unref(formRef)?.getElFormRef() 222 const elForm = unref(formRef)?.getElFormRef()
yudao-ui-admin-vue3/src/views/system/sensitiveWord/index.vue
@@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
17 preIcon="ep:download" 17 preIcon="ep:download"
18 :title="t('action.export')" 18 :title="t('action.export')"
19 v-hasPermi="['system:sensitive-word:export']" 19 v-hasPermi="['system:sensitive-word:export']"
20 - @click="handleExport()" 20 + @click="exportList('敏感词数据.xls')"
21 /> 21 />
22 </template> 22 </template>
23 <template #tags_default="{ row }"> 23 <template #tags_default="{ row }">
@@ -50,7 +50,7 @@ @@ -50,7 +50,7 @@
50 preIcon="ep:delete" 50 preIcon="ep:delete"
51 :title="t('action.del')" 51 :title="t('action.del')"
52 v-hasPermi="['system:sensitive-word:delete']" 52 v-hasPermi="['system:sensitive-word:delete']"
53 - @click="handleDelete(row.id)" 53 + @click="deleteData(row.id)"
54 /> 54 />
55 </template> 55 </template>
56 </XTable> 56 </XTable>
@@ -147,11 +147,6 @@ const handleCreate = () =&gt; { @@ -147,11 +147,6 @@ const handleCreate = () =&gt; {
147 setDialogTile('create') 147 setDialogTile('create')
148 } 148 }
149 149
150 -// 导出操作  
151 -const handleExport = async () => {  
152 - await exportList('敏感词数据.xls')  
153 -}  
154 -  
155 // 修改操作 150 // 修改操作
156 const handleUpdate = async (rowId: number) => { 151 const handleUpdate = async (rowId: number) => {
157 setDialogTile('update') 152 setDialogTile('update')
@@ -167,11 +162,6 @@ const handleDetail = async (rowId: number) =&gt; { @@ -167,11 +162,6 @@ const handleDetail = async (rowId: number) =&gt; {
167 detailData.value = res 162 detailData.value = res
168 } 163 }
169 164
170 -// 删除操作  
171 -const handleDelete = async (rowId: number) => {  
172 - await deleteData(rowId)  
173 -}  
174 -  
175 // 提交按钮 165 // 提交按钮
176 const submitForm = async () => { 166 const submitForm = async () => {
177 const elForm = unref(formRef)?.getElFormRef() 167 const elForm = unref(formRef)?.getElFormRef()
yudao-ui-admin-vue3/src/views/system/sms/smsChannel/index.vue
@@ -32,7 +32,7 @@ @@ -32,7 +32,7 @@
32 preIcon="ep:delete" 32 preIcon="ep:delete"
33 :title="t('action.del')" 33 :title="t('action.del')"
34 v-hasPermi="['system:sms-channel:delete']" 34 v-hasPermi="['system:sms-channel:delete']"
35 - @click="handleDelete(row.id)" 35 + @click="deleteData(row.id)"
36 /> 36 />
37 </template> 37 </template>
38 </XTable> 38 </XTable>
@@ -123,11 +123,6 @@ const handleDetail = async (rowId: number) =&gt; { @@ -123,11 +123,6 @@ const handleDetail = async (rowId: number) =&gt; {
123 detailData.value = res 123 detailData.value = res
124 } 124 }
125 125
126 -// 删除操作  
127 -const handleDelete = async (rowId: number) => {  
128 - await deleteData(rowId)  
129 -}  
130 -  
131 // 提交按钮 126 // 提交按钮
132 const submitForm = async () => { 127 const submitForm = async () => {
133 const elForm = unref(formRef)?.getElFormRef() 128 const elForm = unref(formRef)?.getElFormRef()
yudao-ui-admin-vue3/src/views/system/sms/smsLog/index.vue
@@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
8 type="warning" 8 type="warning"
9 preIcon="ep:download" 9 preIcon="ep:download"
10 :title="t('action.export')" 10 :title="t('action.export')"
11 - @click="handleExport()" 11 + @click="exportList('短信日志.xls')"
12 /> 12 />
13 </template> 13 </template>
14 <template #actionbtns_default="{ row }"> 14 <template #actionbtns_default="{ row }">
@@ -57,9 +57,4 @@ const handleDetail = (row: SmsLoglApi.SmsLogVO) =&gt; { @@ -57,9 +57,4 @@ const handleDetail = (row: SmsLoglApi.SmsLogVO) =&gt; {
57 detailData.value = row 57 detailData.value = row
58 dialogVisible.value = true 58 dialogVisible.value = true
59 } 59 }
60 -  
61 -// 导出操作  
62 -const handleExport = async () => {  
63 - await exportList('短信日志.xls')  
64 -}  
65 </script> 60 </script>
yudao-ui-admin-vue3/src/views/system/sms/smsTemplate/index.vue
@@ -38,7 +38,7 @@ @@ -38,7 +38,7 @@
38 preIcon="ep:delete" 38 preIcon="ep:delete"
39 :title="t('action.del')" 39 :title="t('action.del')"
40 v-hasPermi="['system:sms-template:delete']" 40 v-hasPermi="['system:sms-template:delete']"
41 - @click="handleDelete(row.id)" 41 + @click="deleteData(row.id)"
42 /> 42 />
43 </template> 43 </template>
44 </XTable> 44 </XTable>
@@ -166,11 +166,6 @@ const handleDetail = async (rowId: number) =&gt; { @@ -166,11 +166,6 @@ const handleDetail = async (rowId: number) =&gt; {
166 detailData.value = res 166 detailData.value = res
167 } 167 }
168 168
169 -// 删除操作  
170 -const handleDelete = async (rowId: number) => {  
171 - await deleteData(rowId)  
172 -}  
173 -  
174 // 提交按钮 169 // 提交按钮
175 const submitForm = async () => { 170 const submitForm = async () => {
176 const elForm = unref(formRef)?.getElFormRef() 171 const elForm = unref(formRef)?.getElFormRef()
yudao-ui-admin-vue3/src/views/system/tenant/index.vue
@@ -16,7 +16,7 @@ @@ -16,7 +16,7 @@
16 preIcon="ep:download" 16 preIcon="ep:download"
17 :title="t('action.export')" 17 :title="t('action.export')"
18 v-hasPermi="['system:tenant:export']" 18 v-hasPermi="['system:tenant:export']"
19 - @click="handleExport()" 19 + @click="exportList('租户列表.xls')"
20 /> 20 />
21 </template> 21 </template>
22 <template #accountCount_default="{ row }"> 22 <template #accountCount_default="{ row }">
@@ -46,7 +46,7 @@ @@ -46,7 +46,7 @@
46 preIcon="ep:delete" 46 preIcon="ep:delete"
47 :title="t('action.del')" 47 :title="t('action.del')"
48 v-hasPermi="['system:tenant:delete']" 48 v-hasPermi="['system:tenant:delete']"
49 - @click="handleDelete(row.id)" 49 + @click="deleteData(row.id)"
50 /> 50 />
51 </template> 51 </template>
52 </XTable> 52 </XTable>
@@ -149,16 +149,6 @@ const handleDetail = async (rowId: number) =&gt; { @@ -149,16 +149,6 @@ const handleDetail = async (rowId: number) =&gt; {
149 setDialogTile('detail') 149 setDialogTile('detail')
150 } 150 }
151 151
152 -// 删除操作  
153 -const handleDelete = async (rowId: number) => {  
154 - await deleteData(rowId)  
155 -}  
156 -  
157 -// 导出操作  
158 -const handleExport = async () => {  
159 - await exportList('租户列表.xls')  
160 -}  
161 -  
162 // 提交按钮 152 // 提交按钮
163 const submitForm = async () => { 153 const submitForm = async () => {
164 const elForm = unref(formRef)?.getElFormRef() 154 const elForm = unref(formRef)?.getElFormRef()
yudao-ui-admin-vue3/src/views/system/tenantPackage/index.vue
@@ -12,7 +12,7 @@ @@ -12,7 +12,7 @@
12 </template> 12 </template>
13 <template #actionbtns_default="{ row }"> 13 <template #actionbtns_default="{ row }">
14 <XTextButton preIcon="ep:edit" :title="t('action.edit')" @click="handleUpdate(row.id)" /> 14 <XTextButton preIcon="ep:edit" :title="t('action.edit')" @click="handleUpdate(row.id)" />
15 - <XTextButton preIcon="ep:delete" :title="t('action.del')" @click="handleDelete(row.id)" /> 15 + <XTextButton preIcon="ep:delete" :title="t('action.del')" @click="deleteData(row.id)" />
16 </template> 16 </template>
17 </XTable> 17 </XTable>
18 </ContentWrap> 18 </ContentWrap>
@@ -132,11 +132,6 @@ const handleUpdate = async (rowId: number) =&gt; { @@ -132,11 +132,6 @@ const handleUpdate = async (rowId: number) =&gt; {
132 unref(treeRef)?.setCheckedKeys(res.menuIds) 132 unref(treeRef)?.setCheckedKeys(res.menuIds)
133 } 133 }
134 134
135 -// 删除操作  
136 -const handleDelete = async (rowId: number) => {  
137 - await deleteData(rowId)  
138 -}  
139 -  
140 // 提交按钮 135 // 提交按钮
141 const submitForm = async () => { 136 const submitForm = async () => {
142 const elForm = unref(formRef)?.getElFormRef() 137 const elForm = unref(formRef)?.getElFormRef()
@@ -147,7 +142,10 @@ const submitForm = async () =&gt; { @@ -147,7 +142,10 @@ const submitForm = async () =&gt; {
147 // 提交请求 142 // 提交请求
148 try { 143 try {
149 const data = unref(formRef)?.formModel as TenantPackageApi.TenantPackageVO 144 const data = unref(formRef)?.formModel as TenantPackageApi.TenantPackageVO
150 - data.menuIds = treeRef.value!.getCheckedKeys(false) as number[] 145 + data.menuIds = [
  146 + ...(treeRef.value!.getCheckedKeys(false) as unknown as Array<number>),
  147 + ...(treeRef.value!.getHalfCheckedKeys() as unknown as Array<number>)
  148 + ]
151 if (actionType.value === 'create') { 149 if (actionType.value === 'create') {
152 await TenantPackageApi.createTenantPackageTypeApi(data) 150 await TenantPackageApi.createTenantPackageTypeApi(data)
153 message.success(t('common.createSuccess')) 151 message.success(t('common.createSuccess'))
yudao-ui-admin-vue3/src/views/system/user/index.vue
@@ -112,7 +112,7 @@ @@ -112,7 +112,7 @@
112 preIcon="ep:delete" 112 preIcon="ep:delete"
113 :title="t('action.del')" 113 :title="t('action.del')"
114 v-hasPermi="['system:user:delete']" 114 v-hasPermi="['system:user:delete']"
115 - @click="handleDelete(row.id)" 115 + @click="deleteData(row.id)"
116 /> 116 />
117 </el-dropdown-item> 117 </el-dropdown-item>
118 </el-dropdown-menu> 118 </el-dropdown-menu>
@@ -405,10 +405,7 @@ const handleDetail = async (rowId: number) =&gt; { @@ -405,10 +405,7 @@ const handleDetail = async (rowId: number) =&gt; {
405 detailData.value = res 405 detailData.value = res
406 await setDialogTile('detail') 406 await setDialogTile('detail')
407 } 407 }
408 -// 删除操作  
409 -const handleDelete = async (rowId: number) => {  
410 - await deleteData(rowId)  
411 -} 408 +
412 // 提交按钮 409 // 提交按钮
413 const submitForm = async () => { 410 const submitForm = async () => {
414 loading.value = true 411 loading.value = true
yudao-ui-admin/package.json
1 { 1 {
2 "name": "yudao-ui-admin", 2 "name": "yudao-ui-admin",
3 - "version": "1.6.5-snapshot", 3 + "version": "1.6.6-snapshot",
4 "description": "芋道管理系统", 4 "description": "芋道管理系统",
5 "author": "芋道", 5 "author": "芋道",
6 "license": "MIT", 6 "license": "MIT",
yudao-ui-admin/src/styles/index.scss
@@ -129,7 +129,7 @@ input, textarea{ @@ -129,7 +129,7 @@ input, textarea{
129 } 129 }
130 130
131 .el-scrollbar__view{ 131 .el-scrollbar__view{
132 - overflow-x: hidden; 132 +// overflow-x: hidden;
133 } 133 }
134 134
135 .el-rate{ 135 .el-rate{
yudao-ui-admin/src/views/infra/file/index.vue
1 <template> 1 <template>
2 <div class="app-container"> 2 <div class="app-container">
3 - <doc-alert title="上传下载" url="https://doc.iocoder.cn/file/" /> 3 + <doc-alert title="上传下载" url="https://doc.iocoder.cn/file/"/>
4 <!-- 搜索工作栏 --> 4 <!-- 搜索工作栏 -->
5 <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> 5 <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
6 <el-form-item label="文件路径" prop="path"> 6 <el-form-item label="文件路径" prop="path">
7 <el-input v-model="queryParams.path" placeholder="请输入文件路径" clearable @keyup.enter.native="handleQuery"/> 7 <el-input v-model="queryParams.path" placeholder="请输入文件路径" clearable @keyup.enter.native="handleQuery"/>
8 </el-form-item> 8 </el-form-item>
9 <el-form-item label="创建时间" prop="createTime"> 9 <el-form-item label="创建时间" prop="createTime">
10 - <el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"  
11 - range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" /> 10 + <el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss"
  11 + type="daterange"
  12 + range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"
  13 + :default-time="['00:00:00', '23:59:59']"/>
12 </el-form-item> 14 </el-form-item>
13 <el-form-item> 15 <el-form-item>
14 <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button> 16 <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
@@ -35,6 +37,9 @@ @@ -35,6 +37,9 @@
35 <template v-slot="scope"> 37 <template v-slot="scope">
36 <image-preview v-if="scope.row.type&&scope.row.type.indexOf('image/') === 0" :src="scope.row.url" 38 <image-preview v-if="scope.row.type&&scope.row.type.indexOf('image/') === 0" :src="scope.row.url"
37 :width="'100px'"></image-preview> 39 :width="'100px'"></image-preview>
  40 + <video v-else-if="scope.row.type&&scope.row.type.indexOf('video/') === 0" :width="'100px'">
  41 + <source :src="scope.row.url"/>
  42 + </video>
38 <i v-else>无法预览,点击 43 <i v-else>无法预览,点击
39 <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" target="_blank" 44 <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" target="_blank"
40 :href="getFileUrl + scope.row.configId + '/get/' + scope.row.path">下载 45 :href="getFileUrl + scope.row.configId + '/get/' + scope.row.path">下载
@@ -118,7 +123,7 @@ export default { @@ -118,7 +123,7 @@ export default {
118 title: "", // 弹出层标题 123 title: "", // 弹出层标题
119 isUploading: false, // 是否禁用上传 124 isUploading: false, // 是否禁用上传
120 url: process.env.VUE_APP_BASE_API + "/admin-api/infra/file/upload", // 请求地址 125 url: process.env.VUE_APP_BASE_API + "/admin-api/infra/file/upload", // 请求地址
121 - headers: { Authorization: "Bearer " + getAccessToken() }, // 设置上传的请求头部 126 + headers: {Authorization: "Bearer " + getAccessToken()}, // 设置上传的请求头部
122 data: {} // 上传的额外数据,用于文件名 127 data: {} // 上传的额外数据,用于文件名
123 }, 128 },
124 }; 129 };
@@ -189,19 +194,20 @@ export default { @@ -189,19 +194,20 @@ export default {
189 /** 删除按钮操作 */ 194 /** 删除按钮操作 */
190 handleDelete(row) { 195 handleDelete(row) {
191 const id = row.id; 196 const id = row.id;
192 - this.$modal.confirm('是否确认删除文件编号为"' + id + '"的数据项?').then(function() { 197 + this.$modal.confirm('是否确认删除文件编号为"' + id + '"的数据项?').then(function () {
193 return deleteFile(id); 198 return deleteFile(id);
194 }).then(() => { 199 }).then(() => {
195 this.getList(); 200 this.getList();
196 this.$modal.msgSuccess("删除成功"); 201 this.$modal.msgSuccess("删除成功");
197 - }).catch(() => {}); 202 + }).catch(() => {
  203 + });
198 }, 204 },
199 // 用户昵称展示 205 // 用户昵称展示
200 sizeFormat(row, column) { 206 sizeFormat(row, column) {
201 - const unitArr = ["Bytes","KB","MB","GB","TB","PB","EB","ZB","YB"]; 207 + const unitArr = ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
202 const srcSize = parseFloat(row.size); 208 const srcSize = parseFloat(row.size);
203 const index = Math.floor(Math.log(srcSize) / Math.log(1024)); 209 const index = Math.floor(Math.log(srcSize) / Math.log(1024));
204 - let size =srcSize/Math.pow(1024,index); 210 + let size = srcSize / Math.pow(1024, index);
205 size = size.toFixed(2);//保留的小数位数 211 size = size.toFixed(2);//保留的小数位数
206 return size + ' ' + unitArr[index]; 212 return size + ' ' + unitArr[index];
207 }, 213 },
yudao-ui-admin/src/views/infra/redis/index.vue
@@ -136,8 +136,8 @@ @@ -136,8 +136,8 @@
136 136
137 <script> 137 <script>
138 import {getCache, getKeyDefineList, getKeyList, getKeyValue, deleteKey, deleteKeys} from "@/api/infra/redis"; 138 import {getCache, getKeyDefineList, getKeyList, getKeyValue, deleteKey, deleteKeys} from "@/api/infra/redis";
139 -import echarts from "echarts";  
140 - 139 +import * as echarts from 'echarts'
  140 +require('echarts/theme/macarons') // echarts theme
141 export default { 141 export default {
142 name: "Server", 142 name: "Server",
143 data () { 143 data () {
yudao-ui-admin/src/views/infra/webSocket/index.vue 0 → 100644
  1 +<template>
  2 + <div class="app-container">
  3 + <el-form label-width="120px">
  4 + <el-row type="flex" :gutter="0">
  5 + <el-col :sm="12">
  6 + <el-form-item label="WebSocket地址" size="small">
  7 + <el-input v-model="url" type="text"/>
  8 + </el-form-item>
  9 + </el-col>
  10 + <el-col :offset="1">
  11 + <el-form-item label="" label-width="0px" size="small">
  12 + <el-button @click="connect" type="primary" :disabled="ws&&ws.readyState===1">
  13 + {{ ws && ws.readyState === 1 ? "已连接" : "连接" }}
  14 + </el-button>
  15 + <el-button @click="exit" type="danger">断开</el-button>
  16 + </el-form-item>
  17 + </el-col>
  18 + </el-row>
  19 + <el-form-item label="发送内容" size="small">
  20 + <el-input type="textarea" v-model="message" :rows="5"/>
  21 + </el-form-item>
  22 + <el-form-item label="" size="small">
  23 + <el-button type="success" @click="send">发送消息</el-button>
  24 + </el-form-item>
  25 + <el-form-item label="接收内容" size="small">
  26 + <el-input type="textarea" v-model="content" :rows="12" disabled/>
  27 + </el-form-item>
  28 + <el-form-item label="" size="small">
  29 + <el-button type="info" @click="content=''">清空消息</el-button>
  30 + </el-form-item>
  31 + </el-form>
  32 + </div>
  33 +</template>
  34 +
  35 +<script>
  36 +import store from "@/store";
  37 +import {getNowDateTime} from "@/utils/ruoyi";
  38 +
  39 +export default {
  40 + data() {
  41 + return {
  42 + url: process.env.VUE_APP_BASE_API + "/websocket/message",
  43 + message: "",
  44 + content: "",
  45 + ws: null,
  46 + };
  47 + },
  48 + created() {
  49 + this.url = this.url.replace("http", "ws")
  50 + },
  51 + methods: {
  52 + connect() {
  53 + if (!'WebSocket' in window) {
  54 + this.$modal.msgError("您的浏览器不支持WebSocket");
  55 + return;
  56 + }
  57 + const userId = store.getters.userId;
  58 + this.ws = new WebSocket(this.url + "?userId=" + userId);
  59 + const self = this;
  60 + this.ws.onopen = function (event) {
  61 + self.content = self.content + "\n**********************连接开始**********************\n";
  62 + };
  63 + this.ws.onmessage = function (event) {
  64 + self.content = self.content + "接收时间:" + getNowDateTime() + "\n" + event.data + "\n";
  65 + };
  66 + this.ws.onclose = function (event) {
  67 + self.content = self.content + "**********************连接关闭**********************\n";
  68 + };
  69 + this.ws.error = function (event) {
  70 + self.content = self.content + "**********************连接异常**********************\n";
  71 + };
  72 + },
  73 + exit() {
  74 + if (this.ws) {
  75 + this.ws.close();
  76 + this.ws = null;
  77 + }
  78 + },
  79 + send() {
  80 + if (!this.ws || this.ws.readyState !== 1) {
  81 + this.$modal.msgError("未连接到服务器");
  82 + return;
  83 + }
  84 + if (!this.message) {
  85 + this.$modal.msgError("请输入发送内容");
  86 + return;
  87 + }
  88 + this.ws.send(this.message);
  89 + }
  90 + },
  91 +};
  92 +</script>
yudao-ui-app/api/auth.js
@@ -10,6 +10,6 @@ export const smsLogin = data =&gt; http.post(&#39;/member/auth/sms-login&#39;, data) @@ -10,6 +10,6 @@ export const smsLogin = data =&gt; http.post(&#39;/member/auth/sms-login&#39;, data)
10 //微信小程序的一键登录 10 //微信小程序的一键登录
11 export const weixinMiniAppLogin = data => http.post('/member/auth/weixin-mini-app-login', data) 11 export const weixinMiniAppLogin = data => http.post('/member/auth/weixin-mini-app-login', data)
12 //刷新令牌 12 //刷新令牌
13 -export const refreshToken = data => http.post('/member/auth/refresh-token', data) 13 +export const refreshToken = data => http.post('/member/auth/refresh-token', {data})
14 //退出登录 14 //退出登录
15 export const logout = data => http.post('/member/auth/logout', data) 15 export const logout = data => http.post('/member/auth/logout', data)
yudao-ui-app/store/getters.js
1 const getters = { 1 const getters = {
2 accessToken: state => state.user.accessToken, 2 accessToken: state => state.user.accessToken,
  3 + refreshToken: state => state.user.refreshToken,
3 userInfo: state => state.user.userInfo, 4 userInfo: state => state.user.userInfo,
4 hasLogin: state => !!state.user.accessToken 5 hasLogin: state => !!state.user.accessToken
5 } 6 }
yudao-ui-app/utils/request/responseInterceptors.js
@@ -30,13 +30,16 @@ module.exports = vm =&gt; { @@ -30,13 +30,16 @@ module.exports = vm =&gt; {
30 if (!isRefreshToken) { 30 if (!isRefreshToken) {
31 isRefreshToken = true 31 isRefreshToken = true
32 // 1. 如果获取不到刷新令牌,则只能执行登出操作 32 // 1. 如果获取不到刷新令牌,则只能执行登出操作
33 - if (!vm.$store.getters.refreshToken()) { 33 + if (!vm.$store.getters.refreshToken) {
34 vm.$store.commit('CLEAR_LOGIN_INFO') 34 vm.$store.commit('CLEAR_LOGIN_INFO')
35 return Promise.reject(res) 35 return Promise.reject(res)
36 } 36 }
37 // 2. 进行刷新访问令牌 37 // 2. 进行刷新访问令牌
38 try { 38 try {
39 - const refreshTokenRes = await refreshToken() 39 + let param = {}
  40 + let refreshToken = uni.getStorageSync('REFRESH_TOKEN');
  41 + param.refreshToken = refreshToken;
  42 + const refreshTokenRes = await refreshToken(param)
40 // 2.1 刷新成功,则回放队列的请求 + 当前请求 43 // 2.1 刷新成功,则回放队列的请求 + 当前请求
41 vm.$store.commit('SET_TOKEN', refreshTokenRes.data) 44 vm.$store.commit('SET_TOKEN', refreshTokenRes.data)
42 requestList.forEach(cb => cb()) 45 requestList.forEach(cb => cb())