Commit b9246d15436dcca3617b01cc01e565372e886596

Authored by YunaiV
2 parents 39b2afd5 bbb27df5

Merge branch 'master' of https://gitee.com/zhijiantianya/ruoyi-vue-pro into feature/wechat-mp

# Conflicts:
#	yudao-server/src/main/resources/application.yaml
Showing 96 changed files with 2996 additions and 2474 deletions
README.md
@@ -188,17 +188,17 @@ ps:核心功能已经实现,正在对接微信小程序中... @@ -188,17 +188,17 @@ ps:核心功能已经实现,正在对接微信小程序中...
188 188
189 | 框架 | 说明 | 版本 | 学习指南 | 189 | 框架 | 说明 | 版本 | 学习指南 |
190 |---------------------------------------------------------------------------------------------|------------------|-------------|----------------------------------------------------------------| 190 |---------------------------------------------------------------------------------------------|------------------|-------------|----------------------------------------------------------------|
191 -| [Spring Boot](https://spring.io/projects/spring-boot) | 应用开发框架 | 2.7.6 | [文档](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.2 | [文档](http://www.iocoder.cn/Spring-Boot/MyBatis/?yudao) |  
195 -| [Dynamic Datasource](https://dynamic-datasource.com/) | 动态数据源 | 3.6.0 | [文档](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) |
  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.5 | [文档](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.7.2 | [文档](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 实现 | 3.0.3 | [文档](http://www.iocoder.cn/Spring-Boot/Swagger/?yudao) | 203 | [Knife4j](https://gitee.com/xiaoym/knife4j) | Swagger 增强 UI 实现 | 3.0.3 | [文档](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) |
@@ -222,8 +222,8 @@ ps:核心功能已经实现,正在对接微信小程序中... @@ -222,8 +222,8 @@ ps:核心功能已经实现,正在对接微信小程序中...
222 | 框架 | 说明 | 版本 | 222 | 框架 | 说明 | 版本 |
223 |----------------------------------------------------------------------|:------------:|:------:| 223 |----------------------------------------------------------------------|:------------:|:------:|
224 | [Vue](https://staging-cn.vuejs.org/) | Vue 框架 | 3.2.45 | 224 | [Vue](https://staging-cn.vuejs.org/) | Vue 框架 | 3.2.45 |
225 -| [Vite](https://cn.vitejs.dev//) | 开发与构建工具 | 4.0.3 |  
226 -| [Element Plus](https://element-plus.org/zh-CN/) | Element Plus | 2.2.27 | 225 +| [Vite](https://cn.vitejs.dev//) | 开发与构建工具 | 4.0.4 |
  226 +| [Element Plus](https://element-plus.org/zh-CN/) | Element Plus | 2.2.28 |
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 |
@@ -30,7 +30,7 @@ @@ -30,7 +30,7 @@
30 <url>https://github.com/YunaiV/ruoyi-vue-pro</url> 30 <url>https://github.com/YunaiV/ruoyi-vue-pro</url>
31 31
32 <properties> 32 <properties>
33 - <revision>1.6.5-snapshot</revision> 33 + <revision>1.6.6-snapshot</revision>
34 <!-- Maven 相关 --> 34 <!-- Maven 相关 -->
35 <java.version>1.8</java.version> 35 <java.version>1.8</java.version>
36 <maven.compiler.source>${java.version}</maven.compiler.source> 36 <maven.compiler.source>${java.version}</maven.compiler.source>
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,18 +14,18 @@ @@ -14,18 +14,18 @@
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.6</spring.boot.version> 19 + <spring.boot.version>2.7.7</spring.boot.version>
20 <!-- Web 相关 --> 20 <!-- Web 相关 -->
21 <knife4j.version>3.0.3</knife4j.version> 21 <knife4j.version>3.0.3</knife4j.version>
22 <swagger-annotations.version>1.6.8</swagger-annotations.version> 22 <swagger-annotations.version>1.6.8</swagger-annotations.version>
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.2</mybatis-plus.version>  
27 - <mybatis-plus-generator.version>3.5.2</mybatis-plus-generator.version>  
28 - <dynamic-datasource.version>3.6.0</dynamic-datasource.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>
29 <redisson.version>3.18.0</redisson.version> 29 <redisson.version>3.18.0</redisson.version>
30 <!-- 服务保障相关 --> 30 <!-- 服务保障相关 -->
31 <lock4j.version>2.2.3</lock4j.version> 31 <lock4j.version>2.2.3</lock4j.version>
@@ -37,14 +37,14 @@ @@ -37,14 +37,14 @@
37 <!-- Test 测试相关 --> 37 <!-- Test 测试相关 -->
38 <podam.version>7.2.11.RELEASE</podam.version> 38 <podam.version>7.2.11.RELEASE</podam.version>
39 <jedis-mock.version>1.0.5</jedis-mock.version> 39 <jedis-mock.version>1.0.5</jedis-mock.version>
40 - <mockito-inline.version>4.8.0</mockito-inline.version> 40 + <mockito-inline.version>4.11.0</mockito-inline.version>
41 <!-- Bpm 工作流相关 --> 41 <!-- Bpm 工作流相关 -->
42 - <flowable.version>6.7.2</flowable.version> 42 + <flowable.version>6.8.0</flowable.version>
43 <!-- 工具类相关 --> 43 <!-- 工具类相关 -->
44 <lombok.version>1.18.24</lombok.version> 44 <lombok.version>1.18.24</lombok.version>
45 <mapstruct.version>1.5.3.Final</mapstruct.version> 45 <mapstruct.version>1.5.3.Final</mapstruct.version>
46 - <hutool.version>5.8.10</hutool.version>  
47 - <easyexcel.verion>3.1.3</easyexcel.verion> 46 + <hutool.version>5.8.11</hutool.version>
  47 + <easyexcel.verion>3.1.4</easyexcel.verion>
48 <velocity.version>2.3</velocity.version> 48 <velocity.version>2.3</velocity.version>
49 <screw.version>1.0.5</screw.version> 49 <screw.version>1.0.5</screw.version>
50 <fastjson.version>1.2.83</fastjson.version> 50 <fastjson.version>1.2.83</fastjson.version>
@@ -55,7 +55,7 @@ @@ -55,7 +55,7 @@
55 <jsch.version>0.1.55</jsch.version> 55 <jsch.version>0.1.55</jsch.version>
56 <tika-core.version>2.6.0</tika-core.version> 56 <tika-core.version>2.6.0</tika-core.version>
57 <aj-captcha.version>1.3.0</aj-captcha.version> 57 <aj-captcha.version>1.3.0</aj-captcha.version>
58 - <netty-all.version>4.1.85.Final</netty-all.version> 58 + <netty-all.version>4.1.86.Final</netty-all.version>
59 <ip2region.version>2.6.6</ip2region.version> 59 <ip2region.version>2.6.6</ip2region.version>
60 <!-- 三方云服务相关 --> 60 <!-- 三方云服务相关 -->
61 <okio.version>3.0.0</okio.version> 61 <okio.version>3.0.0</okio.version>
@@ -63,7 +63,7 @@ @@ -63,7 +63,7 @@
63 <minio.version>8.4.6</minio.version> 63 <minio.version>8.4.6</minio.version>
64 <aliyun-java-sdk-core.version>4.6.3</aliyun-java-sdk-core.version> 64 <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> 65 <aliyun-java-sdk-dysmsapi.version>2.2.1</aliyun-java-sdk-dysmsapi.version>
66 - <tencentcloud-sdk-java.version>3.1.637</tencentcloud-sdk-java.version> 66 + <tencentcloud-sdk-java.version>3.1.660</tencentcloud-sdk-java.version>
67 <justauth.version>1.4.0</justauth.version> 67 <justauth.version>1.4.0</justauth.version>
68 <jimureport.version>1.5.6</jimureport.version> 68 <jimureport.version>1.5.6</jimureport.version>
69 <xercesImpl.version>2.12.2</xercesImpl.version> 69 <xercesImpl.version>2.12.2</xercesImpl.version>
@@ -602,6 +602,12 @@ @@ -602,6 +602,12 @@
602 <artifactId>xercesImpl</artifactId> 602 <artifactId>xercesImpl</artifactId>
603 <version>${xercesImpl.version}</version> 603 <version>${xercesImpl.version}</version>
604 </dependency> 604 </dependency>
  605 + <!-- SpringBoot Websocket -->
  606 + <dependency>
  607 + <groupId>org.springframework.boot</groupId>
  608 + <artifactId>spring-boot-starter-websocket</artifactId>
  609 + <version>${spring.boot.version}</version>
  610 + </dependency>
605 </dependencies> 611 </dependencies>
606 </dependencyManagement> 612 </dependencyManagement>
607 613
yudao-example/yudao-sso-demo-by-code/pom.xml
@@ -21,7 +21,7 @@ @@ -21,7 +21,7 @@
21 <maven.compiler.target>8</maven.compiler.target> 21 <maven.compiler.target>8</maven.compiler.target>
22 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 22 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
23 <!-- 统一依赖管理 --> 23 <!-- 统一依赖管理 -->
24 - <spring.boot.version>2.7.6</spring.boot.version> 24 + <spring.boot.version>2.7.7</spring.boot.version>
25 </properties> 25 </properties>
26 26
27 <dependencyManagement> 27 <dependencyManagement>
@@ -52,7 +52,7 @@ @@ -52,7 +52,7 @@
52 <dependency> 52 <dependency>
53 <groupId>cn.hutool</groupId> 53 <groupId>cn.hutool</groupId>
54 <artifactId>hutool-all</artifactId> 54 <artifactId>hutool-all</artifactId>
55 - <version>5.8.10</version> 55 + <version>5.8.11</version>
56 </dependency> 56 </dependency>
57 57
58 <dependency> 58 <dependency>
yudao-example/yudao-sso-demo-by-password/pom.xml
@@ -21,7 +21,7 @@ @@ -21,7 +21,7 @@
21 <maven.compiler.target>8</maven.compiler.target> 21 <maven.compiler.target>8</maven.compiler.target>
22 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 22 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
23 <!-- 统一依赖管理 --> 23 <!-- 统一依赖管理 -->
24 - <spring.boot.version>2.7.6</spring.boot.version> 24 + <spring.boot.version>2.7.7</spring.boot.version>
25 </properties> 25 </properties>
26 26
27 <dependencyManagement> 27 <dependencyManagement>
@@ -52,7 +52,7 @@ @@ -52,7 +52,7 @@
52 <dependency> 52 <dependency>
53 <groupId>cn.hutool</groupId> 53 <groupId>cn.hutool</groupId>
54 <artifactId>hutool-all</artifactId> 54 <artifactId>hutool-all</artifactId>
55 - <version>5.8.10</version> 55 + <version>5.8.11</version>
56 </dependency> 56 </dependency>
57 57
58 <dependency> 58 <dependency>
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-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.0.ALL</version> 55 + <version>4.35.9.ALL</version>
56 <exclusions> 56 <exclusions>
57 <exclusion> 57 <exclusion>
58 <groupId>org.bouncycastle</groupId> 58 <groupId>org.bouncycastle</groupId>
yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/s3/S3FileClient.java
@@ -9,10 +9,11 @@ import io.minio.*; @@ -9,10 +9,11 @@ import io.minio.*;
9 import java.io.ByteArrayInputStream; 9 import java.io.ByteArrayInputStream;
10 10
11 import static cn.iocoder.yudao.framework.file.core.client.s3.S3FileClientConfig.ENDPOINT_ALIYUN; 11 import static cn.iocoder.yudao.framework.file.core.client.s3.S3FileClientConfig.ENDPOINT_ALIYUN;
  12 +import static cn.iocoder.yudao.framework.file.core.client.s3.S3FileClientConfig.ENDPOINT_TENCENT;
12 13
13 /** 14 /**
14 * 基于 S3 协议的文件客户端,实现 MinIO、阿里云、腾讯云、七牛云、华为云等云服务 15 * 基于 S3 协议的文件客户端,实现 MinIO、阿里云、腾讯云、七牛云、华为云等云服务
15 - * 16 + * <p>
16 * S3 协议的客户端,采用亚马逊提供的 software.amazon.awssdk.s3 库 17 * S3 协议的客户端,采用亚马逊提供的 software.amazon.awssdk.s3 库
17 * 18 *
18 * @author 芋道源码 19 * @author 芋道源码
@@ -78,6 +79,11 @@ public class S3FileClient extends AbstractFileClient&lt;S3FileClientConfig&gt; { @@ -78,6 +79,11 @@ public class S3FileClient extends AbstractFileClient&lt;S3FileClientConfig&gt; {
78 .replaceAll("-internal", "")// 去除内网 Endpoint 的后缀 79 .replaceAll("-internal", "")// 去除内网 Endpoint 的后缀
79 .replaceAll("https://", ""); 80 .replaceAll("https://", "");
80 } 81 }
  82 + // 腾讯云必须有 region,否则会报错
  83 + if (config.getEndpoint().contains(ENDPOINT_TENCENT)) {
  84 + return StrUtil.subAfter(config.getEndpoint(), ".cos.", false)
  85 + .replaceAll("." + ENDPOINT_TENCENT, ""); // 去除 Endpoint
  86 + }
81 return null; 87 return null;
82 } 88 }
83 89
yudao-framework/yudao-spring-boot-starter-file/src/main/java/cn/iocoder/yudao/framework/file/core/client/s3/S3FileClientConfig.java
@@ -19,6 +19,7 @@ public class S3FileClientConfig implements FileClientConfig { @@ -19,6 +19,7 @@ public class S3FileClientConfig implements FileClientConfig {
19 19
20 public static final String ENDPOINT_QINIU = "qiniucs.com"; 20 public static final String ENDPOINT_QINIU = "qiniucs.com";
21 public static final String ENDPOINT_ALIYUN = "aliyuncs.com"; 21 public static final String ENDPOINT_ALIYUN = "aliyuncs.com";
  22 + public static final String ENDPOINT_TENCENT = "myqcloud.com";
22 23
23 /** 24 /**
24 * 节点地址 25 * 节点地址
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-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/dal/mysql/file/FileContentDAOImpl.java
1 package cn.iocoder.yudao.module.infra.dal.mysql.file; 1 package cn.iocoder.yudao.module.infra.dal.mysql.file;
2 2
  3 +import cn.hutool.core.collection.CollUtil;
3 import cn.iocoder.yudao.framework.file.core.client.db.DBFileContentFrameworkDAO; 4 import cn.iocoder.yudao.framework.file.core.client.db.DBFileContentFrameworkDAO;
4 import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileContentDO; 5 import cn.iocoder.yudao.module.infra.dal.dataobject.file.FileContentDO;
5 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 6 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
6 import org.springframework.stereotype.Repository; 7 import org.springframework.stereotype.Repository;
7 8
8 import javax.annotation.Resource; 9 import javax.annotation.Resource;
  10 +import java.util.List;
  11 +import java.util.Optional;
9 12
10 @Repository 13 @Repository
11 public class FileContentDAOImpl implements DBFileContentFrameworkDAO { 14 public class FileContentDAOImpl implements DBFileContentFrameworkDAO {
@@ -27,9 +30,11 @@ public class FileContentDAOImpl implements DBFileContentFrameworkDAO { @@ -27,9 +30,11 @@ public class FileContentDAOImpl implements DBFileContentFrameworkDAO {
27 30
28 @Override 31 @Override
29 public byte[] selectContent(Long configId, String path) { 32 public byte[] selectContent(Long configId, String path) {
30 - FileContentDO fileContentDO = fileContentMapper.selectOne(  
31 - buildQuery(configId, path).select(FileContentDO::getContent));  
32 - return fileContentDO != null ? fileContentDO.getContent() : null; 33 + List<FileContentDO> list = fileContentMapper.selectList(
  34 + buildQuery(configId, path).select(FileContentDO::getContent).orderByDesc(FileContentDO::getId));
  35 + return Optional.ofNullable(CollUtil.getFirst(list))
  36 + .map(FileContentDO::getContent)
  37 + .orElse(null);
33 } 38 }
34 39
35 private LambdaQueryWrapper<FileContentDO> buildQuery(Long configId, String path) { 40 private LambdaQueryWrapper<FileContentDO> buildQuery(Long configId, String path) {
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
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:新增 --> 6 <!-- 操作:新增 -->
7 <XButton 7 <XButton
@@ -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,10 +40,10 @@ @@ -40,10 +40,10 @@
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 - </vxe-grid> 46 + </XTable>
47 </ContentWrap> 47 </ContentWrap>
48 <!-- 弹窗 --> 48 <!-- 弹窗 -->
49 <XModal id="${classNameVar}Model" :loading="modelLoading" v-model="modelVisible" :title="modelTitle"> 49 <XModal id="${classNameVar}Model" :loading="modelLoading" v-model="modelVisible" :title="modelTitle">
@@ -79,8 +79,7 @@ @@ -79,8 +79,7 @@
79 import { ref, unref } from 'vue' 79 import { ref, unref } from 'vue'
80 import { useI18n } from '@/hooks/web/useI18n' 80 import { useI18n } from '@/hooks/web/useI18n'
81 import { useMessage } from '@/hooks/web/useMessage' 81 import { useMessage } from '@/hooks/web/useMessage'
82 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
83 -import { VxeGridInstance } from 'vxe-table' 82 +import { useXTable } from '@/hooks/web/useXTable'
84 import { FormExpose } from '@/components/Form' 83 import { FormExpose } from '@/components/Form'
85 // 业务相关的 import 84 // 业务相关的 import
86 import { rules, allSchemas } from './${classNameVar}.data' 85 import { rules, allSchemas } from './${classNameVar}.data'
@@ -90,8 +89,7 @@ const { t } = useI18n() // 国际化 @@ -90,8 +89,7 @@ const { t } = useI18n() // 国际化
90 const message = useMessage() // 消息弹窗 89 const message = useMessage() // 消息弹窗
91 90
92 // 列表相关的变量 91 // 列表相关的变量
93 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
94 -const { gridOptions, getList, deleteData, exportList } = useVxeGrid<${simpleClassName}Api.${simpleClassName}VO>({ 92 +const [registerTable, { reload, deleteData, exportList }] = useXTable({
95 allSchemas: allSchemas, 93 allSchemas: allSchemas,
96 getListApi: ${simpleClassName}Api.get${simpleClassName}PageApi, 94 getListApi: ${simpleClassName}Api.get${simpleClassName}PageApi,
97 deleteApi: ${simpleClassName}Api.delete${simpleClassName}Api, 95 deleteApi: ${simpleClassName}Api.delete${simpleClassName}Api,
@@ -121,11 +119,6 @@ const handleCreate = () =&gt; { @@ -121,11 +119,6 @@ const handleCreate = () =&gt; {
121 modelLoading.value = false 119 modelLoading.value = false
122 } 120 }
123 121
124 -// 导出操作  
125 -const handleExport = async () => {  
126 - await exportList(xGrid, '${table.classComment}.xls')  
127 -}  
128 -  
129 // 修改操作 122 // 修改操作
130 const handleUpdate = async (rowId: number) => { 123 const handleUpdate = async (rowId: number) => {
131 setDialogTile('update') 124 setDialogTile('update')
@@ -143,11 +136,6 @@ const handleDetail = async (rowId: number) =&gt; { @@ -143,11 +136,6 @@ const handleDetail = async (rowId: number) =&gt; {
143 modelLoading.value = false 136 modelLoading.value = false
144 } 137 }
145 138
146 -// 删除操作  
147 -const handleDelete = async (rowId: number) => {  
148 - await deleteData(xGrid, rowId)  
149 -}  
150 -  
151 // 提交按钮 139 // 提交按钮
152 const submitForm = async () => { 140 const submitForm = async () => {
153 const elForm = unref(formRef)?.getElFormRef() 141 const elForm = unref(formRef)?.getElFormRef()
@@ -169,7 +157,7 @@ const submitForm = async () =&gt; { @@ -169,7 +157,7 @@ const submitForm = async () =&gt; {
169 } finally { 157 } finally {
170 actionLoading.value = false 158 actionLoading.value = false
171 // 刷新列表 159 // 刷新列表
172 - await getList(xGrid) 160 + await reload()
173 } 161 }
174 } 162 }
175 }) 163 })
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
@@ -111,7 +111,7 @@ @@ -111,7 +111,7 @@
111 <plugin> 111 <plugin>
112 <groupId>org.springframework.boot</groupId> 112 <groupId>org.springframework.boot</groupId>
113 <artifactId>spring-boot-maven-plugin</artifactId> 113 <artifactId>spring-boot-maven-plugin</artifactId>
114 - <version>2.7.6</version> <!-- 如果 spring.boot.version 版本修改,则这里也要跟着修改 --> 114 + <version>2.7.7</version> <!-- 如果 spring.boot.version 版本修改,则这里也要跟着修改 -->
115 <configuration> 115 <configuration>
116 <fork>true</fork> 116 <fork>true</fork>
117 </configuration> 117 </configuration>
yudao-server/src/main/resources/application.yaml
@@ -93,6 +93,11 @@ yudao: @@ -93,6 +93,11 @@ yudao:
93 permit-all_urls: 93 permit-all_urls:
94 - /admin-ui/** # /resources/admin-ui 目录下的静态资源 94 - /admin-ui/** # /resources/admin-ui 目录下的静态资源
95 - /admin-api/mp/open/** # 微信公众号开放平台,微信回调接口,不需要登录 95 - /admin-api/mp/open/** # 微信公众号开放平台,微信回调接口,不需要登录
  96 + websocket:
  97 + enable: true # websocket的开关
  98 + path: /websocket/message # 路径
  99 + maxOnlineCount: 0 # 最大连接人数
  100 + sessionMap: true # 保存sessionMap
96 swagger: 101 swagger:
97 title: 管理后台 102 title: 管理后台
98 description: 提供管理员管理的所有功能 103 description: 提供管理员管理的所有功能
yudao-ui-admin-vue3/README.md
@@ -26,19 +26,19 @@ @@ -26,19 +26,19 @@
26 26
27 ### 前端依赖 27 ### 前端依赖
28 28
29 -| 框架 | 说明 | 版本 |  
30 -| --- | --- | --- | 29 +| 框架 | 说明 | 版本 |
  30 +| --- | --- |--------|
31 | [Vue](https://staging-cn.vuejs.org/) | vue 框架 | 3.2.45 | 31 | [Vue](https://staging-cn.vuejs.org/) | vue 框架 | 3.2.45 |
32 -| [Vite](https://cn.vitejs.dev//) | 开发与构建工具 | 4.0.3 |  
33 -| [Element Plus](https://element-plus.org/zh-CN/) | Element Plus | 2.2.27 |  
34 -| [TypeScript](https://www.typescriptlang.org/docs/) | JavaScript 的超集 | 4.9.4 | 32 +| [Vite](https://cn.vitejs.dev//) | 开发与构建工具 | 4.0.4 |
  33 +| [Element Plus](https://element-plus.org/zh-CN/) | Element Plus | 2.2.28 |
  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.8.2 |  
37 -| [vxe-table](https://vxetable.cn/) | vue 最强表单 | 4.3.7 |  
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 |  
40 -| [windicss](https://cn.windicss.org/) | 下一代工具优先的 CSS 框架 | 3.5.6 |  
41 -| [iconify](https://icon-sets.iconify.design/) | 在线图标库 | 3.0.0 | 36 +| [vueuse](https://vueuse.org/) | 常用工具集 | 9.10.0 |
  37 +| [vxe-table](https://vxetable.cn/) | vue 最强表单 | 4.3.7 |
  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 |
  40 +| [windicss](https://cn.windicss.org/) | 下一代工具优先的 CSS 框架 | 3.5.6 |
  41 +| [iconify](https://icon-sets.iconify.design/) | 在线图标库 | 3.0.1 |
42 | [wangeditor](https://www.wangeditor.com/) | 富文本编辑器 | 5.1.23 | 42 | [wangeditor](https://www.wangeditor.com/) | 富文本编辑器 | 5.1.23 |
43 43
44 ### 推荐 VScode 开发,插件如下 44 ### 推荐 VScode 开发,插件如下
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.1879", 3 + "version": "1.6.6-snapshot.1901",
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,
@@ -25,18 +25,18 @@ @@ -25,18 +25,18 @@
25 }, 25 },
26 "dependencies": { 26 "dependencies": {
27 "@iconify/iconify": "^3.0.1", 27 "@iconify/iconify": "^3.0.1",
28 - "@vueuse/core": "^9.9.0", 28 + "@vueuse/core": "^9.10.0",
29 "@wangeditor/editor": "^5.1.23", 29 "@wangeditor/editor": "^5.1.23",
30 "@wangeditor/editor-for-vue": "^5.1.10", 30 "@wangeditor/editor-for-vue": "^5.1.10",
31 "@zxcvbn-ts/core": "^2.1.0", 31 "@zxcvbn-ts/core": "^2.1.0",
32 "animate.css": "^4.1.1", 32 "animate.css": "^4.1.1",
33 - "axios": "^1.2.1", 33 + "axios": "^1.2.2",
34 "cropperjs": "^1.5.13", 34 "cropperjs": "^1.5.13",
35 "crypto-js": "^4.1.1", 35 "crypto-js": "^4.1.1",
36 "dayjs": "^1.11.7", 36 "dayjs": "^1.11.7",
37 "echarts": "^5.4.1", 37 "echarts": "^5.4.1",
38 "echarts-wordcloud": "^2.1.0", 38 "echarts-wordcloud": "^2.1.0",
39 - "element-plus": "2.2.27", 39 + "element-plus": "2.2.28",
40 "intro.js": "^6.0.0", 40 "intro.js": "^6.0.0",
41 "jsencrypt": "^3.3.1", 41 "jsencrypt": "^3.3.1",
42 "lodash-es": "^4.17.21", 42 "lodash-es": "^4.17.21",
@@ -55,27 +55,27 @@ @@ -55,27 +55,27 @@
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.1.157", 58 + "@commitlint/cli": "^17.4.0",
  59 + "@commitlint/config-conventional": "^17.4.0",
  60 + "@iconify/json": "^2.2.2",
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",
64 "@types/lodash-es": "^4.17.6", 64 "@types/lodash-es": "^4.17.6",
65 - "@types/node": "^18.11.17", 65 + "@types/node": "^18.11.18",
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.47.0",  
70 - "@typescript-eslint/parser": "^5.47.0", 69 + "@typescript-eslint/eslint-plugin": "^5.48.0",
  70 + "@typescript-eslint/parser": "^5.48.0",
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.30.0",  
77 - "eslint-config-prettier": "^8.5.0",  
78 - "eslint-define-config": "^1.12.0", 76 + "eslint": "^8.31.0",
  77 + "eslint-config-prettier": "^8.6.0",
  78 + "eslint-define-config": "^1.13.0",
79 "eslint-plugin-prettier": "^4.2.1", 79 "eslint-plugin-prettier": "^4.2.1",
80 "eslint-plugin-vue": "^9.8.0", 80 "eslint-plugin-vue": "^9.8.0",
81 "lint-staged": "^13.1.0", 81 "lint-staged": "^13.1.0",
@@ -84,9 +84,9 @@ @@ -84,9 +84,9 @@
84 "postcss-scss": "^4.0.6", 84 "postcss-scss": "^4.0.6",
85 "prettier": "^2.8.1", 85 "prettier": "^2.8.1",
86 "rimraf": "^3.0.2", 86 "rimraf": "^3.0.2",
87 - "rollup": "^3.8.1", 87 + "rollup": "^3.9.1",
88 "sass": "^1.57.1", 88 "sass": "^1.57.1",
89 - "stylelint": "^14.16.0", 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",
@@ -94,7 +94,7 @@ @@ -94,7 +94,7 @@
94 "stylelint-order": "^5.0.0", 94 "stylelint-order": "^5.0.0",
95 "terser": "^5.16.1", 95 "terser": "^5.16.1",
96 "typescript": "4.9.4", 96 "typescript": "4.9.4",
97 - "vite": "4.0.3", 97 + "vite": "4.0.4",
98 "vite-plugin-compression": "^0.5.1", 98 "vite-plugin-compression": "^0.5.1",
99 "vite-plugin-ejs": "^1.6.4", 99 "vite-plugin-ejs": "^1.6.4",
100 "vite-plugin-eslint": "^1.8.1", 100 "vite-plugin-eslint": "^1.8.1",
@@ -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.17", 107 + "vue-tsc": "^1.0.22",
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.0
  5 + '@commitlint/config-conventional': ^17.4.0
6 '@iconify/iconify': ^3.0.1 6 '@iconify/iconify': ^3.0.1
7 - '@iconify/json': ^2.1.156 7 + '@iconify/json': ^2.2.2
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
11 '@types/lodash-es': ^4.17.6 11 '@types/lodash-es': ^4.17.6
12 - '@types/node': ^18.11.17 12 + '@types/node': ^18.11.18
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.47.0  
17 - '@typescript-eslint/parser': ^5.47.0 16 + '@typescript-eslint/eslint-plugin': ^5.48.0
  17 + '@typescript-eslint/parser': ^5.48.0
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
21 - '@vueuse/core': ^9.8.2 21 + '@vueuse/core': ^9.10.0
22 '@wangeditor/editor': ^5.1.23 22 '@wangeditor/editor': ^5.1.23
23 '@wangeditor/editor-for-vue': ^5.1.10 23 '@wangeditor/editor-for-vue': ^5.1.10
24 '@zxcvbn-ts/core': ^2.1.0 24 '@zxcvbn-ts/core': ^2.1.0
25 animate.css: ^4.1.1 25 animate.css: ^4.1.1
26 autoprefixer: ^10.4.13 26 autoprefixer: ^10.4.13
27 - axios: ^1.2.1 27 + axios: ^1.2.2
28 consola: ^2.15.3 28 consola: ^2.15.3
29 cropperjs: ^1.5.13 29 cropperjs: ^1.5.13
30 crypto-js: ^4.1.1 30 crypto-js: ^4.1.1
31 dayjs: ^1.11.7 31 dayjs: ^1.11.7
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.27  
35 - eslint: ^8.30.0  
36 - eslint-config-prettier: ^8.5.0  
37 - eslint-define-config: ^1.12.0 34 + element-plus: 2.2.28
  35 + eslint: ^8.31.0
  36 + eslint-config-prettier: ^8.6.0
  37 + eslint-define-config: ^1.13.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.8.0
40 intro.js: ^6.0.0 40 intro.js: ^6.0.0
@@ -51,9 +51,9 @@ specifiers: @@ -51,9 +51,9 @@ specifiers:
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 53 rimraf: ^3.0.2
54 - rollup: ^3.8.1 54 + rollup: ^3.9.1
55 sass: ^1.57.1 55 sass: ^1.57.1
56 - stylelint: ^14.16.0 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
@@ -62,7 +62,7 @@ specifiers: @@ -62,7 +62,7 @@ specifiers:
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
65 - vite: 4.0.3 65 + vite: 4.0.4
66 vite-plugin-compression: ^0.5.1 66 vite-plugin-compression: ^0.5.1
67 vite-plugin-ejs: ^1.6.4 67 vite-plugin-ejs: ^1.6.4
68 vite-plugin-eslint: ^1.8.1 68 vite-plugin-eslint: ^1.8.1
@@ -75,7 +75,7 @@ specifiers: @@ -75,7 +75,7 @@ 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.16 78 + vue-tsc: ^1.0.22
79 vue-types: ^5.0.2 79 vue-types: ^5.0.2
80 vxe-table: ^4.3.7 80 vxe-table: ^4.3.7
81 web-storage-cache: ^1.1.1 81 web-storage-cache: ^1.1.1
@@ -84,24 +84,24 @@ specifiers: @@ -84,24 +84,24 @@ specifiers:
84 84
85 dependencies: 85 dependencies:
86 '@iconify/iconify': 3.0.1 86 '@iconify/iconify': 3.0.1
87 - '@vueuse/core': 9.8.2_vue@3.2.45 87 + '@vueuse/core': 9.10.0_vue@3.2.45
88 '@wangeditor/editor': 5.1.23 88 '@wangeditor/editor': 5.1.23
89 '@wangeditor/editor-for-vue': 5.1.12_3apfu3xbp6awzuex7ed3sbrv6y 89 '@wangeditor/editor-for-vue': 5.1.12_3apfu3xbp6awzuex7ed3sbrv6y
90 '@zxcvbn-ts/core': 2.1.0 90 '@zxcvbn-ts/core': 2.1.0
91 animate.css: 4.1.1 91 animate.css: 4.1.1
92 - axios: 1.2.1 92 + axios: 1.2.2
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.27_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
100 jsencrypt: 3.3.1 100 jsencrypt: 3.3.1
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.28_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,89 +109,413 @@ dependencies: @@ -109,89 +109,413 @@ 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.7_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.1.156 117 + '@commitlint/cli': 17.4.0_@types+node@18.11.18
  118 + '@commitlint/config-conventional': 17.4.0
  119 + '@iconify/json': 2.2.2
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
123 '@types/lodash-es': 4.17.6 123 '@types/lodash-es': 4.17.6
124 - '@types/node': 18.11.17 124 + '@types/node': 18.11.18
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.47.0_ncmi6noazr3nzas7jxykisekym  
129 - '@typescript-eslint/parser': 5.47.0_lzzuuodtsqwxnvqeq4g4likcqa  
130 - '@vitejs/plugin-legacy': registry.npmmirror.com/@vitejs/plugin-legacy/3.0.1_terser@5.16.1+vite@4.0.3  
131 - '@vitejs/plugin-vue': registry.npmmirror.com/@vitejs/plugin-vue/4.0.0_vite@4.0.3+vue@3.2.45  
132 - '@vitejs/plugin-vue-jsx': registry.npmmirror.com/@vitejs/plugin-vue-jsx/3.0.0_vite@4.0.3+vue@3.2.45 128 + '@typescript-eslint/eslint-plugin': 5.48.0_k73wpmdolxikpyqun3p36akaaq
  129 + '@typescript-eslint/parser': 5.48.0_iukboom6ndih5an6iafl45j2fe
  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.20 133 autoprefixer: 10.4.13_postcss@8.4.20
134 consola: 2.15.3 134 consola: 2.15.3
135 - eslint: 8.30.0  
136 - eslint-config-prettier: 8.5.0_eslint@8.30.0  
137 - eslint-define-config: 1.12.0  
138 - eslint-plugin-prettier: 4.2.1_kl4pe43v5b43npmso5hoplpbyi  
139 - eslint-plugin-vue: 9.8.0_eslint@8.30.0 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
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.20
142 postcss-html: 1.5.0 142 postcss-html: 1.5.0
143 postcss-scss: 4.0.6_postcss@8.4.20 143 postcss-scss: 4.0.6_postcss@8.4.20
144 prettier: 2.8.1 144 prettier: 2.8.1
145 rimraf: 3.0.2 145 rimraf: 3.0.2
146 - rollup: 3.8.1 146 + rollup: 3.9.1
147 sass: 1.57.1 147 sass: 1.57.1
148 - stylelint: 14.16.0  
149 - stylelint-config-html: 1.1.0_bto6pmslw3cibsiuq6smxboytq  
150 - stylelint-config-prettier: 9.0.4_stylelint@14.16.0  
151 - stylelint-config-recommended: 9.0.0_stylelint@14.16.0  
152 - stylelint-config-standard: 29.0.0_stylelint@14.16.0  
153 - stylelint-order: 5.0.0_stylelint@14.16.0 148 + stylelint: 14.16.1
  149 + stylelint-config-html: 1.1.0_kbto3rg3njmczth2rrsgfnlsqa
  150 + stylelint-config-prettier: 9.0.4_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
  153 + stylelint-order: 5.0.0_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.3_amyfslv6hdwxqbf7f4ldebbtce  
157 - vite-plugin-compression: 0.5.1_vite@4.0.3 156 + vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i
  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.30.0+vite@4.0.3  
160 - vite-plugin-progress: 0.0.6_vite@4.0.3  
161 - vite-plugin-purge-icons: registry.npmmirror.com/vite-plugin-purge-icons/0.9.2_vite@4.0.3  
162 - vite-plugin-style-import: 2.0.0_vite@4.0.3  
163 - vite-plugin-svg-icons: 2.0.1_vite@4.0.3  
164 - vite-plugin-vue-setup-extend: 0.4.0_vite@4.0.3  
165 - vite-plugin-windicss: registry.npmmirror.com/vite-plugin-windicss/1.8.10_vite@4.0.3  
166 - vue-tsc: 1.0.16_typescript@4.9.4 159 + vite-plugin-eslint: 1.8.1_eslint@8.31.0+vite@4.0.4
  160 + vite-plugin-progress: 0.0.6_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
  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
  165 + vite-plugin-windicss: 1.8.10_vite@4.0.4
  166 + vue-tsc: 1.0.22_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 +
  183 + /@babel/code-frame/7.18.6:
  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}
  185 + engines: {node: '>=6.9.0'}
  186 + dependencies:
  187 + '@babel/highlight': 7.18.6
  188 + dev: true
  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 +
  354 + /@babel/helper-string-parser/7.19.4:
  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}
  356 + engines: {node: '>=6.9.0'}
  357 +
  358 + /@babel/helper-validator-identifier/7.19.1:
  359 + resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==, 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}
  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
  377 +
  378 + /@babel/highlight/7.18.6:
  379 + resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@babel/highlight/-/highlight-7.18.6.tgz}
  380 + engines: {node: '>=6.9.0'}
  381 + dependencies:
  382 + '@babel/helper-validator-identifier': 7.19.1
  383 + chalk: 2.4.2
  384 + js-tokens: 4.0.0
  385 + dev: true
  386 +
171 /@babel/parser/7.20.3: 387 /@babel/parser/7.20.3:
172 resolution: {integrity: sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==} 388 resolution: {integrity: sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==}
173 engines: {node: '>=6.0.0'} 389 engines: {node: '>=6.0.0'}
174 hasBin: true 390 hasBin: true
175 dependencies: 391 dependencies:
176 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.5 392 + '@babel/types': 7.20.5
  393 +
  394 + /@babel/parser/7.20.5:
  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}
  396 + engines: {node: '>=6.0.0'}
  397 + hasBin: true
  398 + dependencies:
  399 + '@babel/types': 7.20.5
  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
177 434
178 /@babel/runtime/7.20.1: 435 /@babel/runtime/7.20.1:
179 resolution: {integrity: sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==} 436 resolution: {integrity: sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==}
180 engines: {node: '>=6.9.0'} 437 engines: {node: '>=6.9.0'}
181 dependencies: 438 dependencies:
182 - regenerator-runtime: registry.npmmirror.com/regenerator-runtime/0.13.11 439 + regenerator-runtime: 0.13.11
183 dev: false 440 dev: false
184 441
185 - /@commitlint/cli/17.3.0:  
186 - resolution: {integrity: sha512-/H0md7TsKflKzVPz226VfXzVafJFO1f9+r2KcFvmBu08V0T56lZU1s8WL7/xlxqLMqBTVaBf7Ixtc4bskdEEZg==} 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 +
  501 + /@babel/types/7.20.5:
  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}
  503 + engines: {node: '>=6.9.0'}
  504 + dependencies:
  505 + '@babel/helper-string-parser': 7.19.4
  506 + '@babel/helper-validator-identifier': 7.19.1
  507 + to-fast-properties: 2.0.0
  508 +
  509 + /@commitlint/cli/17.4.0_@types+node@18.11.18:
  510 + resolution: {integrity: sha512-SEY4sYe8yVlgxPP7X0wJb96DBAGBPsCsy6QbqJt/UECbIAjDeDV5xXBV4jnS7T/qMC10sk6Ub9kDhEX0VWvblw==}
187 engines: {node: '>=v14'} 511 engines: {node: '>=v14'}
188 hasBin: true 512 hasBin: true
189 dependencies: 513 dependencies:
190 - '@commitlint/format': 17.0.0  
191 - '@commitlint/lint': 17.3.0  
192 - '@commitlint/load': 17.3.0  
193 - '@commitlint/read': 17.2.0  
194 - '@commitlint/types': 17.0.0 514 + '@commitlint/format': 17.4.0
  515 + '@commitlint/lint': 17.4.0
  516 + '@commitlint/load': 17.4.0_@types+node@18.11.18
  517 + '@commitlint/read': 17.4.0
  518 + '@commitlint/types': 17.4.0
195 execa: 5.1.1 519 execa: 5.1.1
196 lodash.isfunction: 3.0.9 520 lodash.isfunction: 3.0.9
197 resolve-from: 5.0.0 521 resolve-from: 5.0.0
@@ -200,28 +524,29 @@ packages: @@ -200,28 +524,29 @@ packages:
200 transitivePeerDependencies: 524 transitivePeerDependencies:
201 - '@swc/core' 525 - '@swc/core'
202 - '@swc/wasm' 526 - '@swc/wasm'
  527 + - '@types/node'
203 dev: true 528 dev: true
204 529
205 - /@commitlint/config-conventional/17.3.0:  
206 - resolution: {integrity: sha512-hgI+fN5xF8nhS9uG/V06xyT0nlcyvHHMkq0kwRSr96vl5BFlRGaL2C0/YY4kQagfU087tmj01bJkG9Ek98Wllw==} 530 + /@commitlint/config-conventional/17.4.0:
  531 + resolution: {integrity: sha512-G4XBf45J4ZMspO4NwBFzY3g/1Kb+B42BcIxeikF8wucQxcyxcmhRdjeQpRpS1XEcBq5pdtEEQFipuB9IuiNFhw==}
207 engines: {node: '>=v14'} 532 engines: {node: '>=v14'}
208 dependencies: 533 dependencies:
209 conventional-changelog-conventionalcommits: 5.0.0 534 conventional-changelog-conventionalcommits: 5.0.0
210 dev: true 535 dev: true
211 536
212 - /@commitlint/config-validator/17.1.0:  
213 - resolution: {integrity: sha512-Q1rRRSU09ngrTgeTXHq6ePJs2KrI+axPTgkNYDWSJIuS1Op4w3J30vUfSXjwn5YEJHklK3fSqWNHmBhmTR7Vdg==} 537 + /@commitlint/config-validator/17.4.0:
  538 + resolution: {integrity: sha512-Sa/+8KNpDXz4zT4bVbz2fpFjvgkPO6u2V2fP4TKgt6FjmOw2z3eEX859vtfeaTav/ukBw0/0jr+5ZTZp9zCBhA==}
214 engines: {node: '>=v14'} 539 engines: {node: '>=v14'}
215 dependencies: 540 dependencies:
216 - '@commitlint/types': 17.0.0 541 + '@commitlint/types': 17.4.0
217 ajv: 8.11.2 542 ajv: 8.11.2
218 dev: true 543 dev: true
219 544
220 - /@commitlint/ensure/17.3.0:  
221 - resolution: {integrity: sha512-kWbrQHDoW5veIUQx30gXoLOCjWvwC6OOEofhPCLl5ytRPBDAQObMbxTha1Bt2aSyNE/IrJ0s0xkdZ1Gi3wJwQg==} 545 + /@commitlint/ensure/17.4.0:
  546 + resolution: {integrity: sha512-7oAxt25je0jeQ/E0O/M8L3ADb1Cvweu/5lc/kYF8g/kXatI0wxGE5La52onnAUAWeWlsuvBNar15WcrmDmr5Mw==}
222 engines: {node: '>=v14'} 547 engines: {node: '>=v14'}
223 dependencies: 548 dependencies:
224 - '@commitlint/types': 17.0.0 549 + '@commitlint/types': 17.4.0
225 lodash.camelcase: 4.3.0 550 lodash.camelcase: 4.3.0
226 lodash.kebabcase: 4.1.1 551 lodash.kebabcase: 4.1.1
227 lodash.snakecase: 4.1.1 552 lodash.snakecase: 4.1.1
@@ -229,122 +554,122 @@ packages: @@ -229,122 +554,122 @@ packages:
229 lodash.upperfirst: 4.3.1 554 lodash.upperfirst: 4.3.1
230 dev: true 555 dev: true
231 556
232 - /@commitlint/execute-rule/17.0.0:  
233 - resolution: {integrity: sha512-nVjL/w/zuqjCqSJm8UfpNaw66V9WzuJtQvEnCrK4jDw6qKTmZB+1JQ8m6BQVZbNBcwfYdDNKnhIhqI0Rk7lgpQ==} 557 + /@commitlint/execute-rule/17.4.0:
  558 + resolution: {integrity: sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==}
234 engines: {node: '>=v14'} 559 engines: {node: '>=v14'}
235 dev: true 560 dev: true
236 561
237 - /@commitlint/format/17.0.0:  
238 - resolution: {integrity: sha512-MZzJv7rBp/r6ZQJDEodoZvdRM0vXu1PfQvMTNWFb8jFraxnISMTnPBWMMjr2G/puoMashwaNM//fl7j8gGV5lA==} 562 + /@commitlint/format/17.4.0:
  563 + resolution: {integrity: sha512-Z2bWAU5+f1YZh9W76c84J8iLIWIvvm+mzqogTz0Nsc1x6EHW0Z2gI38g5HAjB0r0I3ZjR15IDEJKhsxyblcyhA==}
239 engines: {node: '>=v14'} 564 engines: {node: '>=v14'}
240 dependencies: 565 dependencies:
241 - '@commitlint/types': 17.0.0 566 + '@commitlint/types': 17.4.0
242 chalk: 4.1.2 567 chalk: 4.1.2
243 dev: true 568 dev: true
244 569
245 - /@commitlint/is-ignored/17.2.0:  
246 - resolution: {integrity: sha512-rgUPUQraHxoMLxiE8GK430HA7/R2vXyLcOT4fQooNrZq9ERutNrP6dw3gdKLkq22Nede3+gEHQYUzL4Wu75ndg==} 570 + /@commitlint/is-ignored/17.4.0:
  571 + resolution: {integrity: sha512-mkRuBlPUaBimvSvJyIHEHEW1/jP1SqEI7NOoaO9/eyJkMbsaiv5b1QgDYL4ZXlHdS64RMV7Y21MVVzuIceImDA==}
247 engines: {node: '>=v14'} 572 engines: {node: '>=v14'}
248 dependencies: 573 dependencies:
249 - '@commitlint/types': 17.0.0  
250 - semver: registry.npmmirror.com/semver/7.3.7 574 + '@commitlint/types': 17.4.0
  575 + semver: 7.3.8
251 dev: true 576 dev: true
252 577
253 - /@commitlint/lint/17.3.0:  
254 - resolution: {integrity: sha512-VilOTPg0i9A7CCWM49E9bl5jytfTvfTxf9iwbWAWNjxJ/A5mhPKbm3sHuAdwJ87tDk1k4j8vomYfH23iaY+1Rw==} 578 + /@commitlint/lint/17.4.0:
  579 + resolution: {integrity: sha512-HG2YT4TUbQKs9v8QvpQjJ6OK+fhflsDB8M+D5tLrY79hbQOWA9mDKdRkABsW/AAhpNI9+zeGUWF3jj245jSHKw==}
255 engines: {node: '>=v14'} 580 engines: {node: '>=v14'}
256 dependencies: 581 dependencies:
257 - '@commitlint/is-ignored': 17.2.0  
258 - '@commitlint/parse': 17.2.0  
259 - '@commitlint/rules': 17.3.0  
260 - '@commitlint/types': 17.0.0 582 + '@commitlint/is-ignored': 17.4.0
  583 + '@commitlint/parse': 17.4.0
  584 + '@commitlint/rules': 17.4.0
  585 + '@commitlint/types': 17.4.0
261 dev: true 586 dev: true
262 587
263 - /@commitlint/load/17.3.0:  
264 - resolution: {integrity: sha512-u/pV6rCAJrCUN+HylBHLzZ4qj1Ew3+eN9GBPhNi9otGxtOfA8b+8nJSxaNbcC23Ins/kcpjGf9zPSVW7628Umw==} 588 + /@commitlint/load/17.4.0_@types+node@18.11.18:
  589 + resolution: {integrity: sha512-wDKNvAJqukqZqKmhRlf3KNo/12QGo1AQcd80EbV01SxtGvyHOsJ/g+/IbrZpopZv8rvzmEVktcpfDYH6ITepFA==}
265 engines: {node: '>=v14'} 590 engines: {node: '>=v14'}
266 dependencies: 591 dependencies:
267 - '@commitlint/config-validator': 17.1.0  
268 - '@commitlint/execute-rule': 17.0.0  
269 - '@commitlint/resolve-extends': 17.3.0  
270 - '@commitlint/types': 17.0.0  
271 - '@types/node': 14.18.33 592 + '@commitlint/config-validator': 17.4.0
  593 + '@commitlint/execute-rule': 17.4.0
  594 + '@commitlint/resolve-extends': 17.4.0
  595 + '@commitlint/types': 17.4.0
272 chalk: 4.1.2 596 chalk: 4.1.2
273 - cosmiconfig: 7.1.0  
274 - cosmiconfig-typescript-loader: 4.2.0_wb7bklcl6jlvxijczjyxggip4a 597 + cosmiconfig: 8.0.0
  598 + cosmiconfig-typescript-loader: 4.2.0_bxtyj3et3xbsdyxhh3oblnfbj4
275 lodash.isplainobject: 4.0.6 599 lodash.isplainobject: 4.0.6
276 lodash.merge: 4.6.2 600 lodash.merge: 4.6.2
277 lodash.uniq: 4.5.0 601 lodash.uniq: 4.5.0
278 resolve-from: 5.0.0 602 resolve-from: 5.0.0
279 - ts-node: 10.9.1_rju6pyblifsagdmqm3y74zsi6q 603 + ts-node: 10.9.1_awa2wsr5thmg3i7jqycphctjfq
280 typescript: 4.9.4 604 typescript: 4.9.4
281 transitivePeerDependencies: 605 transitivePeerDependencies:
282 - '@swc/core' 606 - '@swc/core'
283 - '@swc/wasm' 607 - '@swc/wasm'
  608 + - '@types/node'
284 dev: true 609 dev: true
285 610
286 - /@commitlint/message/17.2.0:  
287 - resolution: {integrity: sha512-/4l2KFKxBOuoEn1YAuuNNlAU05Zt7sNsC9H0mPdPm3chOrT4rcX0pOqrQcLtdMrMkJz0gC7b3SF80q2+LtdL9Q==} 611 + /@commitlint/message/17.4.0:
  612 + resolution: {integrity: sha512-USGJDU9PPxcgQjKXCzvPUal65KAhxWq3hp+MrU1pNCN2itWM654CLIoY2LMIQ7rScTli9B5dTLH3vXhzbItmzA==}
288 engines: {node: '>=v14'} 613 engines: {node: '>=v14'}
289 dev: true 614 dev: true
290 615
291 - /@commitlint/parse/17.2.0:  
292 - resolution: {integrity: sha512-vLzLznK9Y21zQ6F9hf8D6kcIJRb2haAK5T/Vt1uW2CbHYOIfNsR/hJs0XnF/J9ctM20Tfsqv4zBitbYvVw7F6Q==} 616 + /@commitlint/parse/17.4.0:
  617 + resolution: {integrity: sha512-x8opKc5p+Hgs+CrMbq3VAnW2L2foPAX6arW8u9c8nTzksldGgFsENT+XVyPmpSMLlVBswZ1tndcz1xyKiY9TJA==}
293 engines: {node: '>=v14'} 618 engines: {node: '>=v14'}
294 dependencies: 619 dependencies:
295 - '@commitlint/types': 17.0.0 620 + '@commitlint/types': 17.4.0
296 conventional-changelog-angular: 5.0.13 621 conventional-changelog-angular: 5.0.13
297 conventional-commits-parser: 3.2.4 622 conventional-commits-parser: 3.2.4
298 dev: true 623 dev: true
299 624
300 - /@commitlint/read/17.2.0:  
301 - resolution: {integrity: sha512-bbblBhrHkjxra3ptJNm0abxu7yeAaxumQ8ZtD6GIVqzURCETCP7Dm0tlVvGRDyXBuqX6lIJxh3W7oyKqllDsHQ==} 625 + /@commitlint/read/17.4.0:
  626 + resolution: {integrity: sha512-pGDeZpbkyvhxK8ZoCDUacPPRpauKPWF3n2XpDBEnuGreqUF2clq2PVJpwMMaNN5cHW8iFKCbcoOjXhD01sln0A==}
302 engines: {node: '>=v14'} 627 engines: {node: '>=v14'}
303 dependencies: 628 dependencies:
304 - '@commitlint/top-level': 17.0.0  
305 - '@commitlint/types': 17.0.0  
306 - fs-extra: 10.1.0 629 + '@commitlint/top-level': 17.4.0
  630 + '@commitlint/types': 17.4.0
  631 + fs-extra: 11.1.0
307 git-raw-commits: 2.0.11 632 git-raw-commits: 2.0.11
308 minimist: 1.2.7 633 minimist: 1.2.7
309 dev: true 634 dev: true
310 635
311 - /@commitlint/resolve-extends/17.3.0:  
312 - resolution: {integrity: sha512-Lf3JufJlc5yVEtJWC8o4IAZaB8FQAUaVlhlAHRACd0TTFizV2Lk2VH70et23KgvbQNf7kQzHs/2B4QZalBv6Cg==} 636 + /@commitlint/resolve-extends/17.4.0:
  637 + resolution: {integrity: sha512-3JsmwkrCzoK8sO22AzLBvNEvC1Pmdn/65RKXzEtQMy6oYMl0Snrq97a5bQQEFETF0VsvbtUuKttLqqgn99OXRQ==}
313 engines: {node: '>=v14'} 638 engines: {node: '>=v14'}
314 dependencies: 639 dependencies:
315 - '@commitlint/config-validator': 17.1.0  
316 - '@commitlint/types': 17.0.0 640 + '@commitlint/config-validator': 17.4.0
  641 + '@commitlint/types': 17.4.0
317 import-fresh: 3.3.0 642 import-fresh: 3.3.0
318 lodash.mergewith: 4.6.2 643 lodash.mergewith: 4.6.2
319 resolve-from: 5.0.0 644 resolve-from: 5.0.0
320 resolve-global: 1.0.0 645 resolve-global: 1.0.0
321 dev: true 646 dev: true
322 647
323 - /@commitlint/rules/17.3.0:  
324 - resolution: {integrity: sha512-s2UhDjC5yP2utx3WWqsnZRzjgzAX8BMwr1nltC0u0p8T/nzpkx4TojEfhlsOUj1t7efxzZRjUAV0NxNwdJyk+g==} 648 + /@commitlint/rules/17.4.0:
  649 + resolution: {integrity: sha512-lz3i1jet2NNjTWpAMwjjQjMZCPWBIHK1Kkja9o09UmUtMjRdALTb8uMLe8gCyeq3DiiZ5lLYOhbsoPK56xGQKA==}
325 engines: {node: '>=v14'} 650 engines: {node: '>=v14'}
326 dependencies: 651 dependencies:
327 - '@commitlint/ensure': 17.3.0  
328 - '@commitlint/message': 17.2.0  
329 - '@commitlint/to-lines': 17.0.0  
330 - '@commitlint/types': 17.0.0 652 + '@commitlint/ensure': 17.4.0
  653 + '@commitlint/message': 17.4.0
  654 + '@commitlint/to-lines': 17.4.0
  655 + '@commitlint/types': 17.4.0
331 execa: 5.1.1 656 execa: 5.1.1
332 dev: true 657 dev: true
333 658
334 - /@commitlint/to-lines/17.0.0:  
335 - resolution: {integrity: sha512-nEi4YEz04Rf2upFbpnEorG8iymyH7o9jYIVFBG1QdzebbIFET3ir+8kQvCZuBE5pKCtViE4XBUsRZz139uFrRQ==} 659 + /@commitlint/to-lines/17.4.0:
  660 + resolution: {integrity: sha512-LcIy/6ZZolsfwDUWfN1mJ+co09soSuNASfKEU5sCmgFCvX5iHwRYLiIuoqXzOVDYOy7E7IcHilr/KS0e5T+0Hg==}
336 engines: {node: '>=v14'} 661 engines: {node: '>=v14'}
337 dev: true 662 dev: true
338 663
339 - /@commitlint/top-level/17.0.0:  
340 - resolution: {integrity: sha512-dZrEP1PBJvodNWYPOYiLWf6XZergdksKQaT6i1KSROLdjf5Ai0brLOv5/P+CPxBeoj3vBxK4Ax8H1Pg9t7sHIQ==} 664 + /@commitlint/top-level/17.4.0:
  665 + resolution: {integrity: sha512-/1loE/g+dTTQgHnjoCy0AexKAEFyHsR2zRB4NWrZ6lZSMIxAhBJnmCqwao7b4H8888PsfoTBCLBYIw8vGnej8g==}
341 engines: {node: '>=v14'} 666 engines: {node: '>=v14'}
342 dependencies: 667 dependencies:
343 find-up: 5.0.0 668 find-up: 5.0.0
344 dev: true 669 dev: true
345 670
346 - /@commitlint/types/17.0.0:  
347 - resolution: {integrity: sha512-hBAw6U+SkAT5h47zDMeOu3HSiD0SODw4Aq7rRNh1ceUmL7GyLKYhPbUvlRWqZ65XjBLPHZhFyQlRaPNz8qvUyQ==} 671 + /@commitlint/types/17.4.0:
  672 + resolution: {integrity: sha512-2NjAnq5IcxY9kXtUeO2Ac0aPpvkuOmwbH/BxIm36XXK5LtWFObWJWjXOA+kcaABMrthjWu6la+FUpyYFMHRvbA==}
348 engines: {node: '>=v14'} 673 engines: {node: '>=v14'}
349 dependencies: 674 dependencies:
350 chalk: 4.1.2 675 chalk: 4.1.2
@@ -354,7 +679,7 @@ packages: @@ -354,7 +679,7 @@ packages:
354 resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} 679 resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
355 engines: {node: '>=12'} 680 engines: {node: '>=12'}
356 dependencies: 681 dependencies:
357 - '@jridgewell/trace-mapping': registry.npmmirror.com/@jridgewell/trace-mapping/0.3.9 682 + '@jridgewell/trace-mapping': 0.3.9
358 dev: true 683 dev: true
359 684
360 /@csstools/selector-specificity/2.0.2_2xshye3abirqjlplmebvmaxyna: 685 /@csstools/selector-specificity/2.0.2_2xshye3abirqjlplmebvmaxyna:
@@ -364,7 +689,7 @@ packages: @@ -364,7 +689,7 @@ packages:
364 postcss: ^8.2 689 postcss: ^8.2
365 postcss-selector-parser: ^6.0.10 690 postcss-selector-parser: ^6.0.10
366 dependencies: 691 dependencies:
367 - postcss: registry.npmmirror.com/postcss/8.4.20 692 + postcss: 8.4.20
368 postcss-selector-parser: 6.0.11 693 postcss-selector-parser: 6.0.11
369 dev: true 694 dev: true
370 695
@@ -579,8 +904,8 @@ packages: @@ -579,8 +904,8 @@ packages:
579 dev: true 904 dev: true
580 optional: true 905 optional: true
581 906
582 - /@eslint/eslintrc/1.4.0:  
583 - resolution: {integrity: sha512-7yfvXy6MWLgWSFsLhz5yH3iQ52St8cdUY6FoGieKkRDVxuxmrNuUetIuu6cmjNWwniUHiWXjxCr5tTXDrbYS5A==} 907 + /@eslint/eslintrc/1.4.1:
  908 + resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==}
584 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 909 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
585 dependencies: 910 dependencies:
586 ajv: 6.12.6 911 ajv: 6.12.6
@@ -626,16 +951,24 @@ packages: @@ -626,16 +951,24 @@ packages:
626 resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} 951 resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
627 dev: true 952 dev: true
628 953
  954 + /@iconify/iconify/2.1.2:
  955 + 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}
  956 + dependencies:
  957 + cross-fetch: 3.1.5
  958 + transitivePeerDependencies:
  959 + - encoding
  960 + dev: true
  961 +
629 /@iconify/iconify/3.0.1: 962 /@iconify/iconify/3.0.1:
630 resolution: {integrity: sha512-OPqVBTh8YsfrYZRVFv3OkmFNLqacM0dy/Oiw1h2wO+RZW5LieNGHlG2f9pzaeVRFWbEB8LHTeo8mcwgUTUbibQ==} 963 resolution: {integrity: sha512-OPqVBTh8YsfrYZRVFv3OkmFNLqacM0dy/Oiw1h2wO+RZW5LieNGHlG2f9pzaeVRFWbEB8LHTeo8mcwgUTUbibQ==}
631 dependencies: 964 dependencies:
632 '@iconify/types': 2.0.0 965 '@iconify/types': 2.0.0
633 966
634 - /@iconify/json/2.1.156:  
635 - resolution: {integrity: sha512-QaLf/XSPRe6i35Z9WIRBxlWOLykDXNnEGYFf+9E+GWLmRqVQ2VNyTsEo6CNZqP5eGQRDPJyNhd+2vH+gbehGDg==} 967 + /@iconify/json/2.2.2:
  968 + resolution: {integrity: sha512-G9HVJz3uvQGNEirk9oI7xYnWb7ygEfTUZ+PVp81qgNp8bu5UOtXaxjTGw78NyNAC2OlryH5tSEp95Dqbt4LLQQ==}
636 dependencies: 969 dependencies:
637 '@iconify/types': 2.0.0 970 '@iconify/types': 2.0.0
638 - pathe: 0.3.9 971 + pathe: 1.0.0
639 dev: true 972 dev: true
640 973
641 /@iconify/types/2.0.0: 974 /@iconify/types/2.0.0:
@@ -653,8 +986,8 @@ packages: @@ -653,8 +986,8 @@ packages:
653 vue-i18n: 986 vue-i18n:
654 optional: true 987 optional: true
655 dependencies: 988 dependencies:
656 - '@intlify/message-compiler': 9.3.0-beta.11  
657 - '@intlify/shared': 9.3.0-beta.11 989 + '@intlify/message-compiler': 9.3.0-beta.12
  990 + '@intlify/shared': 9.3.0-beta.12
658 jsonc-eslint-parser: 1.4.1 991 jsonc-eslint-parser: 1.4.1
659 source-map: 0.6.1 992 source-map: 0.6.1
660 vue-i18n: 9.2.2_vue@3.2.45 993 vue-i18n: 9.2.2_vue@3.2.45
@@ -683,8 +1016,8 @@ packages: @@ -683,8 +1016,8 @@ packages:
683 '@intlify/shared': 9.2.2 1016 '@intlify/shared': 9.2.2
684 source-map: 0.6.1 1017 source-map: 0.6.1
685 1018
686 - /@intlify/message-compiler/9.3.0-beta.11:  
687 - resolution: {integrity: sha512-gGGfBGzM7JBXp1Q9gbDAy5jELz9ho3ILqnpxp2yp64+gkqohrqc2YXIvCdwZoc6AtKIh/Zmv4sWVqxkvMsBWtQ==} 1019 + /@intlify/message-compiler/9.3.0-beta.12:
  1020 + resolution: {integrity: sha512-A8/s7pb3v8nf6HG77qFPJntxgQKI9GXxGnkn7aO+b03/X/GkF/4WceDSAIk3i+yLeIgszeBn9GZ23tSg4sTEHA==}
688 engines: {node: '>= 14'} 1021 engines: {node: '>= 14'}
689 dependencies: 1022 dependencies:
690 '@intlify/shared': 9.3.0-beta.11 1023 '@intlify/shared': 9.3.0-beta.11
@@ -700,6 +1033,11 @@ packages: @@ -700,6 +1033,11 @@ packages:
700 engines: {node: '>= 14'} 1033 engines: {node: '>= 14'}
701 dev: true 1034 dev: true
702 1035
  1036 + /@intlify/shared/9.3.0-beta.12:
  1037 + resolution: {integrity: sha512-WsmaS54sA8xuwezPKpa/OMoaX1v2VF2fCgAmYS6prDr2ir0CkUFWPm9A8ilmxzv4nkS61/v8+vf4lGGkn5uBdA==}
  1038 + engines: {node: '>= 14'}
  1039 + dev: true
  1040 +
703 /@intlify/unplugin-vue-i18n/0.8.1_vue-i18n@9.2.2: 1041 /@intlify/unplugin-vue-i18n/0.8.1_vue-i18n@9.2.2:
704 resolution: {integrity: sha512-BhigujPmP6JL1FSxmpogCaL+REozncHCVkJuUnefz4GWBu3X+pRe5O7PeJn8/g+Iml2ieQJz4ISPMmEbuGQjqQ==} 1042 resolution: {integrity: sha512-BhigujPmP6JL1FSxmpogCaL+REozncHCVkJuUnefz4GWBu3X+pRe5O7PeJn8/g+Iml2ieQJz4ISPMmEbuGQjqQ==}
705 engines: {node: '>= 14.16'} 1043 engines: {node: '>= 14.16'}
@@ -716,7 +1054,7 @@ packages: @@ -716,7 +1054,7 @@ packages:
716 optional: true 1054 optional: true
717 dependencies: 1055 dependencies:
718 '@intlify/bundle-utils': 3.4.0_vue-i18n@9.2.2 1056 '@intlify/bundle-utils': 3.4.0_vue-i18n@9.2.2
719 - '@intlify/shared': 9.3.0-beta.11 1057 + '@intlify/shared': 9.3.0-beta.12
720 '@rollup/pluginutils': 4.2.1 1058 '@rollup/pluginutils': 4.2.1
721 '@vue/compiler-sfc': 3.2.45 1059 '@vue/compiler-sfc': 3.2.45
722 debug: 4.3.4 1060 debug: 4.3.4
@@ -739,13 +1077,31 @@ packages: @@ -739,13 +1077,31 @@ packages:
739 '@intlify/core-base': 9.2.2 1077 '@intlify/core-base': 9.2.2
740 '@intlify/shared': 9.2.2 1078 '@intlify/shared': 9.2.2
741 1079
  1080 + /@jridgewell/gen-mapping/0.1.1:
  1081 + 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}
  1082 + engines: {node: '>=6.0.0'}
  1083 + dependencies:
  1084 + '@jridgewell/set-array': 1.1.2
  1085 + '@jridgewell/sourcemap-codec': 1.4.14
  1086 + dev: true
  1087 +
742 /@jridgewell/gen-mapping/0.3.2: 1088 /@jridgewell/gen-mapping/0.3.2:
743 resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} 1089 resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==}
744 engines: {node: '>=6.0.0'} 1090 engines: {node: '>=6.0.0'}
745 dependencies: 1091 dependencies:
746 - '@jridgewell/set-array': registry.npmmirror.com/@jridgewell/set-array/1.1.2  
747 - '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14  
748 - '@jridgewell/trace-mapping': registry.npmmirror.com/@jridgewell/trace-mapping/0.3.17 1092 + '@jridgewell/set-array': 1.1.2
  1093 + '@jridgewell/sourcemap-codec': 1.4.14
  1094 + '@jridgewell/trace-mapping': 0.3.17
  1095 + dev: true
  1096 +
  1097 + /@jridgewell/resolve-uri/3.1.0:
  1098 + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
  1099 + engines: {node: '>=6.0.0'}
  1100 + dev: true
  1101 +
  1102 + /@jridgewell/set-array/1.1.2:
  1103 + 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}
  1104 + engines: {node: '>=6.0.0'}
749 dev: true 1105 dev: true
750 1106
751 /@jridgewell/source-map/0.3.2: 1107 /@jridgewell/source-map/0.3.2:
@@ -755,11 +1111,22 @@ packages: @@ -755,11 +1111,22 @@ packages:
755 '@jridgewell/trace-mapping': 0.3.17 1111 '@jridgewell/trace-mapping': 0.3.17
756 dev: true 1112 dev: true
757 1113
  1114 + /@jridgewell/sourcemap-codec/1.4.14:
  1115 + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
  1116 + dev: true
  1117 +
758 /@jridgewell/trace-mapping/0.3.17: 1118 /@jridgewell/trace-mapping/0.3.17:
759 resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} 1119 resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==}
760 dependencies: 1120 dependencies:
761 - '@jridgewell/resolve-uri': registry.npmmirror.com/@jridgewell/resolve-uri/3.1.0  
762 - '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14 1121 + '@jridgewell/resolve-uri': 3.1.0
  1122 + '@jridgewell/sourcemap-codec': 1.4.14
  1123 + dev: true
  1124 +
  1125 + /@jridgewell/trace-mapping/0.3.9:
  1126 + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
  1127 + dependencies:
  1128 + '@jridgewell/resolve-uri': 3.1.0
  1129 + '@jridgewell/sourcemap-codec': 1.4.14
763 dev: true 1130 dev: true
764 1131
765 /@nodelib/fs.scandir/2.1.5: 1132 /@nodelib/fs.scandir/2.1.5:
@@ -783,6 +1150,19 @@ packages: @@ -783,6 +1150,19 @@ packages:
783 fastq: 1.13.0 1150 fastq: 1.13.0
784 dev: true 1151 dev: true
785 1152
  1153 + /@purge-icons/core/0.9.1:
  1154 + 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}
  1155 + dependencies:
  1156 + '@iconify/iconify': 2.1.2
  1157 + axios: 0.26.1_debug@4.3.4
  1158 + debug: 4.3.4
  1159 + fast-glob: 3.2.12
  1160 + fs-extra: 10.1.0
  1161 + transitivePeerDependencies:
  1162 + - encoding
  1163 + - supports-color
  1164 + dev: true
  1165 +
786 /@purge-icons/generated/0.9.0: 1166 /@purge-icons/generated/0.9.0:
787 resolution: {integrity: sha512-s2t+1oVtGDV6KtqfCXtUOhxfeYvOdDF90IVm+nMs/6bUP0HeGZLslguuL/AibpwtfL4FA/oCsIu/RhwapgAdJw==} 1167 resolution: {integrity: sha512-s2t+1oVtGDV6KtqfCXtUOhxfeYvOdDF90IVm+nMs/6bUP0HeGZLslguuL/AibpwtfL4FA/oCsIu/RhwapgAdJw==}
788 dependencies: 1168 dependencies:
@@ -865,12 +1245,8 @@ packages: @@ -865,12 +1245,8 @@ packages:
865 resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} 1245 resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==}
866 dev: true 1246 dev: true
867 1247
868 - /@types/node/14.18.33:  
869 - resolution: {integrity: sha512-qelS/Ra6sacc4loe/3MSjXNL1dNQ/GjxNHVzuChwMfmk7HuycRLVQN2qNY3XahK+fZc5E2szqQSKUyAF0E+2bg==}  
870 - dev: true  
871 -  
872 - /@types/node/18.11.17:  
873 - resolution: {integrity: sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng==} 1248 + /@types/node/18.11.18:
  1249 + resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==}
874 dev: true 1250 dev: true
875 1251
876 /@types/normalize-package-data/2.4.1: 1252 /@types/normalize-package-data/2.4.1:
@@ -888,7 +1264,7 @@ packages: @@ -888,7 +1264,7 @@ packages:
888 /@types/qrcode/1.5.0: 1264 /@types/qrcode/1.5.0:
889 resolution: {integrity: sha512-x5ilHXRxUPIMfjtM+1vf/GPTRWZ81nqscursm5gMznJeK9M0YnZ1c3bEvRLQ0zSSgedLx1J6MGL231ObQGGhaA==} 1265 resolution: {integrity: sha512-x5ilHXRxUPIMfjtM+1vf/GPTRWZ81nqscursm5gMznJeK9M0YnZ1c3bEvRLQ0zSSgedLx1J6MGL231ObQGGhaA==}
890 dependencies: 1266 dependencies:
891 - '@types/node': 18.11.17 1267 + '@types/node': 18.11.18
892 dev: true 1268 dev: true
893 1269
894 /@types/qs/6.9.7: 1270 /@types/qs/6.9.7:
@@ -902,15 +1278,15 @@ packages: @@ -902,15 +1278,15 @@ packages:
902 /@types/svgo/2.6.4: 1278 /@types/svgo/2.6.4:
903 resolution: {integrity: sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==} 1279 resolution: {integrity: sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==}
904 dependencies: 1280 dependencies:
905 - '@types/node': 18.11.17 1281 + '@types/node': 18.11.18
906 dev: true 1282 dev: true
907 1283
908 /@types/web-bluetooth/0.0.16: 1284 /@types/web-bluetooth/0.0.16:
909 resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} 1285 resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==}
910 dev: false 1286 dev: false
911 1287
912 - /@typescript-eslint/eslint-plugin/5.47.0_ncmi6noazr3nzas7jxykisekym:  
913 - resolution: {integrity: sha512-AHZtlXAMGkDmyLuLZsRpH3p4G/1iARIwc/T0vIem2YB+xW6pZaXYXzCBnZSF/5fdM97R9QqZWZ+h3iW10XgevQ==} 1288 + /@typescript-eslint/eslint-plugin/5.48.0_k73wpmdolxikpyqun3p36akaaq:
  1289 + resolution: {integrity: sha512-SVLafp0NXpoJY7ut6VFVUU9I+YeFsDzeQwtK0WZ+xbRN3mtxJ08je+6Oi2N89qDn087COdO0u3blKZNv9VetRQ==}
914 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1290 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
915 peerDependencies: 1291 peerDependencies:
916 '@typescript-eslint/parser': ^5.0.0 1292 '@typescript-eslint/parser': ^5.0.0
@@ -920,12 +1296,12 @@ packages: @@ -920,12 +1296,12 @@ packages:
920 typescript: 1296 typescript:
921 optional: true 1297 optional: true
922 dependencies: 1298 dependencies:
923 - '@typescript-eslint/parser': 5.47.0_lzzuuodtsqwxnvqeq4g4likcqa  
924 - '@typescript-eslint/scope-manager': 5.47.0  
925 - '@typescript-eslint/type-utils': 5.47.0_lzzuuodtsqwxnvqeq4g4likcqa  
926 - '@typescript-eslint/utils': 5.47.0_lzzuuodtsqwxnvqeq4g4likcqa 1299 + '@typescript-eslint/parser': 5.48.0_iukboom6ndih5an6iafl45j2fe
  1300 + '@typescript-eslint/scope-manager': 5.48.0
  1301 + '@typescript-eslint/type-utils': 5.48.0_iukboom6ndih5an6iafl45j2fe
  1302 + '@typescript-eslint/utils': 5.48.0_iukboom6ndih5an6iafl45j2fe
927 debug: 4.3.4 1303 debug: 4.3.4
928 - eslint: 8.30.0 1304 + eslint: 8.31.0
929 ignore: 5.2.1 1305 ignore: 5.2.1
930 natural-compare-lite: 1.4.0 1306 natural-compare-lite: 1.4.0
931 regexpp: 3.2.0 1307 regexpp: 3.2.0
@@ -936,8 +1312,8 @@ packages: @@ -936,8 +1312,8 @@ packages:
936 - supports-color 1312 - supports-color
937 dev: true 1313 dev: true
938 1314
939 - /@typescript-eslint/parser/5.47.0_lzzuuodtsqwxnvqeq4g4likcqa:  
940 - resolution: {integrity: sha512-udPU4ckK+R1JWCGdQC4Qa27NtBg7w020ffHqGyAK8pAgOVuNw7YaKXGChk+udh+iiGIJf6/E/0xhVXyPAbsczw==} 1315 + /@typescript-eslint/parser/5.48.0_iukboom6ndih5an6iafl45j2fe:
  1316 + resolution: {integrity: sha512-1mxNA8qfgxX8kBvRDIHEzrRGrKHQfQlbW6iHyfHYS0Q4X1af+S6mkLNtgCOsGVl8+/LUPrqdHMssAemkrQ01qg==}
941 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1317 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
942 peerDependencies: 1318 peerDependencies:
943 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 1319 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
@@ -946,26 +1322,26 @@ packages: @@ -946,26 +1322,26 @@ packages:
946 typescript: 1322 typescript:
947 optional: true 1323 optional: true
948 dependencies: 1324 dependencies:
949 - '@typescript-eslint/scope-manager': 5.47.0  
950 - '@typescript-eslint/types': 5.47.0  
951 - '@typescript-eslint/typescript-estree': 5.47.0_typescript@4.9.4 1325 + '@typescript-eslint/scope-manager': 5.48.0
  1326 + '@typescript-eslint/types': 5.48.0
  1327 + '@typescript-eslint/typescript-estree': 5.48.0_typescript@4.9.4
952 debug: 4.3.4 1328 debug: 4.3.4
953 - eslint: 8.30.0 1329 + eslint: 8.31.0
954 typescript: 4.9.4 1330 typescript: 4.9.4
955 transitivePeerDependencies: 1331 transitivePeerDependencies:
956 - supports-color 1332 - supports-color
957 dev: true 1333 dev: true
958 1334
959 - /@typescript-eslint/scope-manager/5.47.0:  
960 - resolution: {integrity: sha512-dvJab4bFf7JVvjPuh3sfBUWsiD73aiftKBpWSfi3sUkysDQ4W8x+ZcFpNp7Kgv0weldhpmMOZBjx1wKN8uWvAw==} 1335 + /@typescript-eslint/scope-manager/5.48.0:
  1336 + resolution: {integrity: sha512-0AA4LviDtVtZqlyUQnZMVHydDATpD9SAX/RC5qh6cBd3xmyWvmXYF+WT1oOmxkeMnWDlUVTwdODeucUnjz3gow==}
961 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1337 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
962 dependencies: 1338 dependencies:
963 - '@typescript-eslint/types': 5.47.0  
964 - '@typescript-eslint/visitor-keys': 5.47.0 1339 + '@typescript-eslint/types': 5.48.0
  1340 + '@typescript-eslint/visitor-keys': 5.48.0
965 dev: true 1341 dev: true
966 1342
967 - /@typescript-eslint/type-utils/5.47.0_lzzuuodtsqwxnvqeq4g4likcqa:  
968 - resolution: {integrity: sha512-1J+DFFrYoDUXQE1b7QjrNGARZE6uVhBqIvdaXTe5IN+NmEyD68qXR1qX1g2u4voA+nCaelQyG8w30SAOihhEYg==} 1343 + /@typescript-eslint/type-utils/5.48.0_iukboom6ndih5an6iafl45j2fe:
  1344 + resolution: {integrity: sha512-vbtPO5sJyFjtHkGlGK4Sthmta0Bbls4Onv0bEqOGm7hP9h8UpRsHJwsrCiWtCUndTRNQO/qe6Ijz9rnT/DB+7g==}
969 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1345 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
970 peerDependencies: 1346 peerDependencies:
971 eslint: '*' 1347 eslint: '*'
@@ -974,23 +1350,23 @@ packages: @@ -974,23 +1350,23 @@ packages:
974 typescript: 1350 typescript:
975 optional: true 1351 optional: true
976 dependencies: 1352 dependencies:
977 - '@typescript-eslint/typescript-estree': 5.47.0_typescript@4.9.4  
978 - '@typescript-eslint/utils': 5.47.0_lzzuuodtsqwxnvqeq4g4likcqa 1353 + '@typescript-eslint/typescript-estree': 5.48.0_typescript@4.9.4
  1354 + '@typescript-eslint/utils': 5.48.0_iukboom6ndih5an6iafl45j2fe
979 debug: 4.3.4 1355 debug: 4.3.4
980 - eslint: 8.30.0 1356 + eslint: 8.31.0
981 tsutils: 3.21.0_typescript@4.9.4 1357 tsutils: 3.21.0_typescript@4.9.4
982 typescript: 4.9.4 1358 typescript: 4.9.4
983 transitivePeerDependencies: 1359 transitivePeerDependencies:
984 - supports-color 1360 - supports-color
985 dev: true 1361 dev: true
986 1362
987 - /@typescript-eslint/types/5.47.0:  
988 - resolution: {integrity: sha512-eslFG0Qy8wpGzDdYKu58CEr3WLkjwC5Usa6XbuV89ce/yN5RITLe1O8e+WFEuxnfftHiJImkkOBADj58ahRxSg==} 1363 + /@typescript-eslint/types/5.48.0:
  1364 + resolution: {integrity: sha512-UTe67B0Ypius0fnEE518NB2N8gGutIlTojeTg4nt0GQvikReVkurqxd2LvYa9q9M5MQ6rtpNyWTBxdscw40Xhw==}
989 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1365 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
990 dev: true 1366 dev: true
991 1367
992 - /@typescript-eslint/typescript-estree/5.47.0_typescript@4.9.4:  
993 - resolution: {integrity: sha512-LxfKCG4bsRGq60Sqqu+34QT5qT2TEAHvSCCJ321uBWywgE2dS0LKcu5u+3sMGo+Vy9UmLOhdTw5JHzePV/1y4Q==} 1368 + /@typescript-eslint/typescript-estree/5.48.0_typescript@4.9.4:
  1369 + resolution: {integrity: sha512-7pjd94vvIjI1zTz6aq/5wwE/YrfIyEPLtGJmRfyNR9NYIW+rOvzzUv3Cmq2hRKpvt6e9vpvPUQ7puzX7VSmsEw==}
994 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1370 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
995 peerDependencies: 1371 peerDependencies:
996 typescript: '*' 1372 typescript: '*'
@@ -998,8 +1374,8 @@ packages: @@ -998,8 +1374,8 @@ packages:
998 typescript: 1374 typescript:
999 optional: true 1375 optional: true
1000 dependencies: 1376 dependencies:
1001 - '@typescript-eslint/types': 5.47.0  
1002 - '@typescript-eslint/visitor-keys': 5.47.0 1377 + '@typescript-eslint/types': 5.48.0
  1378 + '@typescript-eslint/visitor-keys': 5.48.0
1003 debug: 4.3.4 1379 debug: 4.3.4
1004 globby: 11.1.0 1380 globby: 11.1.0
1005 is-glob: 4.0.3 1381 is-glob: 4.0.3
@@ -1010,31 +1386,31 @@ packages: @@ -1010,31 +1386,31 @@ packages:
1010 - supports-color 1386 - supports-color
1011 dev: true 1387 dev: true
1012 1388
1013 - /@typescript-eslint/utils/5.47.0_lzzuuodtsqwxnvqeq4g4likcqa:  
1014 - resolution: {integrity: sha512-U9xcc0N7xINrCdGVPwABjbAKqx4GK67xuMV87toI+HUqgXj26m6RBp9UshEXcTrgCkdGYFzgKLt8kxu49RilDw==} 1389 + /@typescript-eslint/utils/5.48.0_iukboom6ndih5an6iafl45j2fe:
  1390 + resolution: {integrity: sha512-x2jrMcPaMfsHRRIkL+x96++xdzvrdBCnYRd5QiW5Wgo1OB4kDYPbC1XjWP/TNqlfK93K/lUL92erq5zPLgFScQ==}
1015 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1391 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1016 peerDependencies: 1392 peerDependencies:
1017 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 1393 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
1018 dependencies: 1394 dependencies:
1019 '@types/json-schema': 7.0.11 1395 '@types/json-schema': 7.0.11
1020 '@types/semver': 7.3.13 1396 '@types/semver': 7.3.13
1021 - '@typescript-eslint/scope-manager': 5.47.0  
1022 - '@typescript-eslint/types': 5.47.0  
1023 - '@typescript-eslint/typescript-estree': 5.47.0_typescript@4.9.4  
1024 - eslint: 8.30.0 1397 + '@typescript-eslint/scope-manager': 5.48.0
  1398 + '@typescript-eslint/types': 5.48.0
  1399 + '@typescript-eslint/typescript-estree': 5.48.0_typescript@4.9.4
  1400 + eslint: 8.31.0
1025 eslint-scope: 5.1.1 1401 eslint-scope: 5.1.1
1026 - eslint-utils: 3.0.0_eslint@8.30.0 1402 + eslint-utils: 3.0.0_eslint@8.31.0
1027 semver: 7.3.8 1403 semver: 7.3.8
1028 transitivePeerDependencies: 1404 transitivePeerDependencies:
1029 - supports-color 1405 - supports-color
1030 - typescript 1406 - typescript
1031 dev: true 1407 dev: true
1032 1408
1033 - /@typescript-eslint/visitor-keys/5.47.0:  
1034 - resolution: {integrity: sha512-ByPi5iMa6QqDXe/GmT/hR6MZtVPi0SqMQPDx15FczCBXJo/7M8T88xReOALAfpBLm+zxpPfmhuEvPb577JRAEg==} 1409 + /@typescript-eslint/visitor-keys/5.48.0:
  1410 + resolution: {integrity: sha512-5motVPz5EgxQ0bHjut3chzBkJ3Z3sheYVcSwS5BpHZpLqSptSmELNtGixmgj65+rIfhvtQTz5i9OP2vtzdDH7Q==}
1035 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1411 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1036 dependencies: 1412 dependencies:
1037 - '@typescript-eslint/types': 5.47.0 1413 + '@typescript-eslint/types': 5.48.0
1038 eslint-visitor-keys: 3.3.0 1414 eslint-visitor-keys: 3.3.0
1039 dev: true 1415 dev: true
1040 1416
@@ -1054,7 +1430,7 @@ packages: @@ -1054,7 +1430,7 @@ packages:
1054 lodash.throttle: 4.1.1 1430 lodash.throttle: 4.1.1
1055 mime-match: 1.0.2 1431 mime-match: 1.0.2
1056 namespace-emitter: 2.0.1 1432 namespace-emitter: 2.0.1
1057 - nanoid: registry.npmmirror.com/nanoid/3.3.4 1433 + nanoid: 3.3.4
1058 preact: 10.11.3 1434 preact: 10.11.3
1059 dev: false 1435 dev: false
1060 1436
@@ -1076,34 +1452,76 @@ packages: @@ -1076,34 +1452,76 @@ packages:
1076 '@uppy/companion-client': 2.2.2 1452 '@uppy/companion-client': 2.2.2
1077 '@uppy/core': 2.3.4 1453 '@uppy/core': 2.3.4
1078 '@uppy/utils': 4.1.3 1454 '@uppy/utils': 4.1.3
1079 - nanoid: registry.npmmirror.com/nanoid/3.3.4 1455 + nanoid: 3.3.4
1080 dev: false 1456 dev: false
1081 1457
1082 - /@volar/language-core/1.0.16:  
1083 - resolution: {integrity: sha512-IGnOxWTs4DZ81TDcmxBAkCBxs97hUblwcjpBsTx/pOGGaSSDQRJPn0wL8NYTybEObU0i7lhEpKZ+0vJfdIy1Kg==} 1458 + /@vitejs/plugin-legacy/3.0.1_terser@5.16.1+vite@4.0.4:
  1459 + 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}
  1460 + engines: {node: ^14.18.0 || >=16.0.0}
  1461 + peerDependencies:
  1462 + terser: ^5.4.0
  1463 + vite: ^4.0.0
1084 dependencies: 1464 dependencies:
1085 - '@volar/source-map': 1.0.16  
1086 - '@vue/reactivity': 3.2.45 1465 + '@babel/standalone': 7.20.6
  1466 + core-js: 3.26.1
  1467 + magic-string: 0.27.0
  1468 + regenerator-runtime: 0.13.11
  1469 + systemjs: 6.13.0
  1470 + terser: 5.16.1
  1471 + vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i
  1472 + dev: true
  1473 +
  1474 + /@vitejs/plugin-vue-jsx/3.0.0_vite@4.0.4+vue@3.2.45:
  1475 + 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}
  1476 + engines: {node: ^14.18.0 || >=16.0.0}
  1477 + peerDependencies:
  1478 + vite: ^4.0.0
  1479 + vue: ^3.0.0
  1480 + dependencies:
  1481 + '@babel/core': 7.20.5
  1482 + '@babel/plugin-transform-typescript': 7.20.2_@babel+core@7.20.5
  1483 + '@vue/babel-plugin-jsx': 1.1.1_@babel+core@7.20.5
  1484 + vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i
  1485 + vue: 3.2.45
  1486 + transitivePeerDependencies:
  1487 + - supports-color
  1488 + dev: true
  1489 +
  1490 + /@vitejs/plugin-vue/4.0.0_vite@4.0.4+vue@3.2.45:
  1491 + 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}
  1492 + engines: {node: ^14.18.0 || >=16.0.0}
  1493 + peerDependencies:
  1494 + vite: ^4.0.0
  1495 + vue: ^3.2.25
  1496 + dependencies:
  1497 + vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i
  1498 + vue: 3.2.45
  1499 + dev: true
  1500 +
  1501 + /@volar/language-core/1.0.22:
  1502 + resolution: {integrity: sha512-hiJeCOqxNdtG/04FRGLGI9H9DVz2l6cTqPDBzwqplHXAWfMxjzUaGUrn9sfTG7YMFNZUgK4EYxJnRfhqdtbSFQ==}
  1503 + dependencies:
  1504 + '@volar/source-map': 1.0.22
1087 muggle-string: 0.1.0 1505 muggle-string: 0.1.0
1088 dev: true 1506 dev: true
1089 1507
1090 - /@volar/source-map/1.0.16:  
1091 - resolution: {integrity: sha512-PKjzmQcg8QOGC/1V9tmGh2jcy6bKLhkW5bGidElSr83iDbCzLvldt2/La/QlDxaRCHYLT0MeyuGJBZIChB1dYQ==} 1508 + /@volar/source-map/1.0.22:
  1509 + resolution: {integrity: sha512-cv4gypHSP4MWVR82ed/+1IpI6794qAl0Q0+KJ+VGMVF8rVugsiF9QbyMCgjel9wNRsssQsazzsf6txOR9vHQiw==}
1092 dependencies: 1510 dependencies:
1093 muggle-string: 0.1.0 1511 muggle-string: 0.1.0
1094 dev: true 1512 dev: true
1095 1513
1096 - /@volar/typescript/1.0.16:  
1097 - resolution: {integrity: sha512-Yov+n4oO3iYnuMt9QJAFpJabfTRCzc7KvjlAwBaSuZy+Gc/f9611MgtqAh5/SIGmltFN8dXn1Ijno8ro8I4lyw==} 1514 + /@volar/typescript/1.0.22:
  1515 + resolution: {integrity: sha512-VPyEicealSD4gqlE5/UQ1j3ietsO6Hfat40KtUEh/K+XEZ7h02b1KgFV64YEuBkBOaZ5hgvRW/WXKtQgXCl7Iw==}
1098 dependencies: 1516 dependencies:
1099 - '@volar/language-core': 1.0.16 1517 + '@volar/language-core': 1.0.22
1100 dev: true 1518 dev: true
1101 1519
1102 - /@volar/vue-language-core/1.0.16:  
1103 - resolution: {integrity: sha512-sQ/aW1Vuiyy4OQuh2lthyYicruM3qh9VSk/aDh8/bFvM8GoohHZqVpMN3LYldEJ9eT/rN6u4xmYP54vc/EjX4Q==} 1520 + /@volar/vue-language-core/1.0.22:
  1521 + resolution: {integrity: sha512-Ki0G/ZdBj2/GLw+/VVH3n9XR/JL6krMIth02EekFn6JV4PGN3mNxbvoh6lOPSDZLR6biOU5nJPnnjpKy8nuXhw==}
1104 dependencies: 1522 dependencies:
1105 - '@volar/language-core': 1.0.16  
1106 - '@volar/source-map': 1.0.16 1523 + '@volar/language-core': 1.0.22
  1524 + '@volar/source-map': 1.0.22
1107 '@vue/compiler-dom': 3.2.45 1525 '@vue/compiler-dom': 3.2.45
1108 '@vue/compiler-sfc': 3.2.45 1526 '@vue/compiler-sfc': 3.2.45
1109 '@vue/reactivity': 3.2.45 1527 '@vue/reactivity': 3.2.45
@@ -1112,19 +1530,40 @@ packages: @@ -1112,19 +1530,40 @@ packages:
1112 vue-template-compiler: 2.7.14 1530 vue-template-compiler: 2.7.14
1113 dev: true 1531 dev: true
1114 1532
1115 - /@volar/vue-typescript/1.0.16:  
1116 - resolution: {integrity: sha512-M018Ulg/o2FVktAdlr5b/z4K69bYzekxNUA1o39y5Ur6CObc/o+5eDCCS7gIYijWnx9iNKkSQpWWWblJFv7kHQ==} 1533 + /@volar/vue-typescript/1.0.22:
  1534 + resolution: {integrity: sha512-2T1o5z86PAev31OMtVOv/qp4P3ZVl9ln/2KTmykQE8Fh4A5F+868MW4nf5J7XQ6RNyx7RH9LhzgjvbqJpAfiYw==}
  1535 + dependencies:
  1536 + '@volar/typescript': 1.0.22
  1537 + '@volar/vue-language-core': 1.0.22
  1538 + dev: true
  1539 +
  1540 + /@vue/babel-helper-vue-transform-on/1.0.2:
  1541 + 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}
  1542 + dev: true
  1543 +
  1544 + /@vue/babel-plugin-jsx/1.1.1_@babel+core@7.20.5:
  1545 + 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}
1117 dependencies: 1546 dependencies:
1118 - '@volar/typescript': 1.0.16  
1119 - '@volar/vue-language-core': 1.0.16 1547 + '@babel/helper-module-imports': 7.18.6
  1548 + '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.5
  1549 + '@babel/template': 7.18.10
  1550 + '@babel/traverse': 7.20.1
  1551 + '@babel/types': 7.20.2
  1552 + '@vue/babel-helper-vue-transform-on': 1.0.2
  1553 + camelcase: 6.3.0
  1554 + html-tags: 3.2.0
  1555 + svg-tags: 1.0.0
  1556 + transitivePeerDependencies:
  1557 + - '@babel/core'
  1558 + - supports-color
1120 dev: true 1559 dev: true
1121 1560
1122 /@vue/compiler-core/3.2.45: 1561 /@vue/compiler-core/3.2.45:
1123 resolution: {integrity: sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==} 1562 resolution: {integrity: sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==}
1124 dependencies: 1563 dependencies:
1125 - '@babel/parser': registry.npmmirror.com/@babel/parser/7.20.5  
1126 - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45  
1127 - estree-walker: registry.npmmirror.com/estree-walker/2.0.2 1564 + '@babel/parser': 7.20.5
  1565 + '@vue/shared': 3.2.45
  1566 + estree-walker: 2.0.2
1128 source-map: 0.6.1 1567 source-map: 0.6.1
1129 1568
1130 /@vue/compiler-dom/3.2.45: 1569 /@vue/compiler-dom/3.2.45:
@@ -1143,39 +1582,38 @@ packages: @@ -1143,39 +1582,38 @@ packages:
1143 '@vue/reactivity-transform': 3.2.45 1582 '@vue/reactivity-transform': 3.2.45
1144 '@vue/shared': 3.2.45 1583 '@vue/shared': 3.2.45
1145 estree-walker: 2.0.2 1584 estree-walker: 2.0.2
1146 - magic-string: registry.npmmirror.com/magic-string/0.25.9  
1147 - postcss: registry.npmmirror.com/postcss/8.4.20 1585 + magic-string: 0.25.9
  1586 + postcss: 8.4.20
1148 source-map: 0.6.1 1587 source-map: 0.6.1
1149 1588
1150 /@vue/compiler-ssr/3.2.45: 1589 /@vue/compiler-ssr/3.2.45:
1151 resolution: {integrity: sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==} 1590 resolution: {integrity: sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==}
1152 dependencies: 1591 dependencies:
1153 - '@vue/compiler-dom': registry.npmmirror.com/@vue/compiler-dom/3.2.45  
1154 - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45 1592 + '@vue/compiler-dom': 3.2.45
  1593 + '@vue/shared': 3.2.45
1155 1594
1156 /@vue/devtools-api/6.4.5: 1595 /@vue/devtools-api/6.4.5:
1157 - resolution: {integrity: sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ==} 1596 + 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}
1158 1597
1159 /@vue/reactivity-transform/3.2.45: 1598 /@vue/reactivity-transform/3.2.45:
1160 resolution: {integrity: sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==} 1599 resolution: {integrity: sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==}
1161 dependencies: 1600 dependencies:
1162 - '@babel/parser': registry.npmmirror.com/@babel/parser/7.20.5  
1163 - '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core/3.2.45  
1164 - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45  
1165 - estree-walker: registry.npmmirror.com/estree-walker/2.0.2  
1166 - magic-string: registry.npmmirror.com/magic-string/0.25.9  
1167 -  
1168 - /@vue/reactivity/3.2.45:  
1169 - resolution: {integrity: sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==} 1601 + '@babel/parser': 7.20.5
  1602 + '@vue/compiler-core': 3.2.45
  1603 + '@vue/shared': 3.2.45
  1604 + estree-walker: 2.0.2
  1605 + magic-string: 0.25.9
  1606 +
  1607 + /@vue/reactivity/3.2.45:
  1608 + resolution: {integrity: sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==}
1170 dependencies: 1609 dependencies:
1171 '@vue/shared': 3.2.45 1610 '@vue/shared': 3.2.45
1172 - dev: true  
1173 1611
1174 /@vue/runtime-core/3.2.45: 1612 /@vue/runtime-core/3.2.45:
1175 resolution: {integrity: sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==} 1613 resolution: {integrity: sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==}
1176 dependencies: 1614 dependencies:
1177 - '@vue/reactivity': registry.npmmirror.com/@vue/reactivity/3.2.45  
1178 - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45 1615 + '@vue/reactivity': 3.2.45
  1616 + '@vue/shared': 3.2.45
1179 1617
1180 /@vue/runtime-dom/3.2.45: 1618 /@vue/runtime-dom/3.2.45:
1181 resolution: {integrity: sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==} 1619 resolution: {integrity: sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==}
@@ -1196,24 +1634,24 @@ packages: @@ -1196,24 +1634,24 @@ packages:
1196 /@vue/shared/3.2.45: 1634 /@vue/shared/3.2.45:
1197 resolution: {integrity: sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==} 1635 resolution: {integrity: sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==}
1198 1636
1199 - /@vueuse/core/9.8.2_vue@3.2.45:  
1200 - resolution: {integrity: sha512-aWiCmcYIpPt7xjuqYiceODEMHchDYthrJ4AqI+FXPZrR23PZOqdiktbUVyQl2kGlR3H4i9UJ/uimQrwhz9UouQ==} 1637 + /@vueuse/core/9.10.0_vue@3.2.45:
  1638 + resolution: {integrity: sha512-CxMewME07qeuzuT/AOIQGv0EhhDoojniqU6pC3F8m5VC76L47UT18DcX88kWlP3I7d3qMJ4u/PD8iSRsy3bmNA==}
1201 dependencies: 1639 dependencies:
1202 '@types/web-bluetooth': 0.0.16 1640 '@types/web-bluetooth': 0.0.16
1203 - '@vueuse/metadata': 9.8.2  
1204 - '@vueuse/shared': 9.8.2_vue@3.2.45 1641 + '@vueuse/metadata': 9.10.0
  1642 + '@vueuse/shared': 9.10.0_vue@3.2.45
1205 vue-demi: 0.13.11_vue@3.2.45 1643 vue-demi: 0.13.11_vue@3.2.45
1206 transitivePeerDependencies: 1644 transitivePeerDependencies:
1207 - '@vue/composition-api' 1645 - '@vue/composition-api'
1208 - vue 1646 - vue
1209 dev: false 1647 dev: false
1210 1648
1211 - /@vueuse/metadata/9.8.2:  
1212 - resolution: {integrity: sha512-N4E/BKS+9VsUeD4WLVRU1J2kCOLh+iikBcMtipFcTyL204132vDYHs27zLAVabJYGnhC0dIVGdhg9pbOZiY2TQ==} 1649 + /@vueuse/metadata/9.10.0:
  1650 + resolution: {integrity: sha512-G5VZhgTCapzU9rv0Iq2HBrVOSGzOKb+OE668NxhXNcTjUjwYxULkEhAw70FtRLMZc+hxcFAzDZlKYA0xcwNMuw==}
1213 dev: false 1651 dev: false
1214 1652
1215 - /@vueuse/shared/9.8.2_vue@3.2.45:  
1216 - resolution: {integrity: sha512-ACjrPQzowd5dnabNJt9EoGVobco9/ENiA5qP53vjiuxndlJYuc/UegwhXC7KdQbPX4F45a50+45K3g1wNqOzmA==} 1653 + /@vueuse/shared/9.10.0_vue@3.2.45:
  1654 + resolution: {integrity: sha512-vakHJ2ZRklAzqmcVBL38RS7BxdBA4+5poG9NsSyqJxrt9kz0zX3P5CXMy0Hm6LFbZXUgvKdqAS3pUH1zX/5qTQ==}
1217 dependencies: 1655 dependencies:
1218 vue-demi: 0.13.11_vue@3.2.45 1656 vue-demi: 0.13.11_vue@3.2.45
1219 transitivePeerDependencies: 1657 transitivePeerDependencies:
@@ -1407,6 +1845,30 @@ packages: @@ -1407,6 +1845,30 @@ packages:
1407 snabbdom: 3.5.1 1845 snabbdom: 3.5.1
1408 dev: false 1846 dev: false
1409 1847
  1848 + /@windicss/config/1.8.10:
  1849 + resolution: {integrity: sha512-O9SsC110b1Ik3YYa4Ck/0TWuCo7YFfA9KDrwD5sAeqscT5COIGK1HszdCT3oh0MJFej2wNrvpfyW9h6yQaW6PA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/@windicss/config/-/config-1.8.10.tgz}
  1850 + dependencies:
  1851 + debug: 4.3.4
  1852 + jiti: 1.16.0
  1853 + windicss: 3.5.6
  1854 + transitivePeerDependencies:
  1855 + - supports-color
  1856 + dev: true
  1857 +
  1858 + /@windicss/plugin-utils/1.8.10:
  1859 + 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}
  1860 + dependencies:
  1861 + '@antfu/utils': 0.7.2
  1862 + '@windicss/config': 1.8.10
  1863 + debug: 4.3.4
  1864 + fast-glob: 3.2.12
  1865 + magic-string: 0.27.0
  1866 + micromatch: 4.0.5
  1867 + windicss: 3.5.6
  1868 + transitivePeerDependencies:
  1869 + - supports-color
  1870 + dev: true
  1871 +
1410 /@zxcvbn-ts/core/2.1.0: 1872 /@zxcvbn-ts/core/2.1.0:
1411 resolution: {integrity: sha512-doxol9xrO7LgyVJhguXe7vO0xthnIYmsOKoDwrLg0Ho2kkpQaVtM+AOQw+BkEiKIqNg1V48eUf4/cTzMElXdiA==} 1873 resolution: {integrity: sha512-doxol9xrO7LgyVJhguXe7vO0xthnIYmsOKoDwrLg0Ho2kkpQaVtM+AOQw+BkEiKIqNg1V48eUf4/cTzMElXdiA==}
1412 dev: false 1874 dev: false
@@ -1503,12 +1965,23 @@ packages: @@ -1503,12 +1965,23 @@ packages:
1503 engines: {node: '>=12'} 1965 engines: {node: '>=12'}
1504 dev: true 1966 dev: true
1505 1967
  1968 + /ansi-styles/2.2.1:
  1969 + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==}
  1970 + engines: {node: '>=0.10.0'}
  1971 + dev: true
  1972 +
  1973 + /ansi-styles/3.2.1:
  1974 + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
  1975 + engines: {node: '>=4'}
  1976 + dependencies:
  1977 + color-convert: 1.9.3
  1978 + dev: true
  1979 +
1506 /ansi-styles/4.3.0: 1980 /ansi-styles/4.3.0:
1507 resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 1981 resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
1508 engines: {node: '>=8'} 1982 engines: {node: '>=8'}
1509 dependencies: 1983 dependencies:
1510 color-convert: 2.0.1 1984 color-convert: 2.0.1
1511 - dev: true  
1512 1985
1513 /ansi-styles/6.2.1: 1986 /ansi-styles/6.2.1:
1514 resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 1987 resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
@@ -1605,12 +2078,20 @@ packages: @@ -1605,12 +2078,20 @@ packages:
1605 fraction.js: 4.2.0 2078 fraction.js: 4.2.0
1606 normalize-range: 0.1.2 2079 normalize-range: 0.1.2
1607 picocolors: 1.0.0 2080 picocolors: 1.0.0
1608 - postcss: registry.npmmirror.com/postcss/8.4.20 2081 + postcss: 8.4.20
1609 postcss-value-parser: 4.2.0 2082 postcss-value-parser: 4.2.0
1610 dev: true 2083 dev: true
1611 2084
1612 - /axios/1.2.1:  
1613 - resolution: {integrity: sha512-I88cFiGu9ryt/tfVEi4kX2SITsvDddTajXTOFmt2uK1ZVA8LytjtdeyefdQWEf5PU8w+4SSJDoYnggflB5tW4A==} 2085 + /axios/0.26.1_debug@4.3.4:
  2086 + resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==}
  2087 + dependencies:
  2088 + follow-redirects: 1.15.2
  2089 + transitivePeerDependencies:
  2090 + - debug
  2091 + dev: true
  2092 +
  2093 + /axios/1.2.2:
  2094 + resolution: {integrity: sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==}
1614 dependencies: 2095 dependencies:
1615 follow-redirects: 1.15.2 2096 follow-redirects: 1.15.2
1616 form-data: 4.0.0 2097 form-data: 4.0.0
@@ -1670,11 +2151,29 @@ packages: @@ -1670,11 +2151,29 @@ packages:
1670 balanced-match: 1.0.2 2151 balanced-match: 1.0.2
1671 dev: true 2152 dev: true
1672 2153
  2154 + /braces/2.3.2:
  2155 + resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/braces/-/braces-2.3.2.tgz}
  2156 + engines: {node: '>=0.10.0'}
  2157 + dependencies:
  2158 + arr-flatten: 1.1.0
  2159 + array-unique: 0.3.2
  2160 + extend-shallow: 2.0.1
  2161 + fill-range: 4.0.0
  2162 + isobject: 3.0.1
  2163 + repeat-element: 1.1.4
  2164 + snapdragon: 0.8.2
  2165 + snapdragon-node: 2.1.1
  2166 + split-string: 3.1.0
  2167 + to-regex: 3.0.2
  2168 + transitivePeerDependencies:
  2169 + - supports-color
  2170 + dev: true
  2171 +
1673 /braces/3.0.2: 2172 /braces/3.0.2:
1674 resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 2173 resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
1675 engines: {node: '>=8'} 2174 engines: {node: '>=8'}
1676 dependencies: 2175 dependencies:
1677 - fill-range: registry.npmmirror.com/fill-range/7.0.1 2176 + fill-range: 7.0.1
1678 dev: true 2177 dev: true
1679 2178
1680 /browserslist/4.21.4: 2179 /browserslist/4.21.4:
@@ -1710,7 +2209,7 @@ packages: @@ -1710,7 +2209,7 @@ packages:
1710 /call-bind/1.0.2: 2209 /call-bind/1.0.2:
1711 resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} 2210 resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
1712 dependencies: 2211 dependencies:
1713 - function-bind: registry.npmmirror.com/function-bind/1.1.1 2212 + function-bind: 1.1.1
1714 get-intrinsic: 1.1.3 2213 get-intrinsic: 1.1.3
1715 dev: false 2214 dev: false
1716 2215
@@ -1723,18 +2222,27 @@ packages: @@ -1723,18 +2222,27 @@ packages:
1723 resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} 2222 resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==}
1724 dependencies: 2223 dependencies:
1725 pascal-case: 3.1.2 2224 pascal-case: 3.1.2
1726 - tslib: registry.npmmirror.com/tslib/2.4.1 2225 + tslib: 2.4.1
1727 dev: true 2226 dev: true
1728 2227
1729 /camelcase-keys/6.2.2: 2228 /camelcase-keys/6.2.2:
1730 resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} 2229 resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==}
1731 engines: {node: '>=8'} 2230 engines: {node: '>=8'}
1732 dependencies: 2231 dependencies:
1733 - camelcase: registry.npmmirror.com/camelcase/5.3.1 2232 + camelcase: 5.3.1
1734 map-obj: 4.3.0 2233 map-obj: 4.3.0
1735 quick-lru: 4.0.1 2234 quick-lru: 4.0.1
1736 dev: true 2235 dev: true
1737 2236
  2237 + /camelcase/5.3.1:
  2238 + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
  2239 + engines: {node: '>=6'}
  2240 +
  2241 + /camelcase/6.3.0:
  2242 + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/camelcase/-/camelcase-6.3.0.tgz}
  2243 + engines: {node: '>=10'}
  2244 + dev: true
  2245 +
1738 /caniuse-lite/1.0.30001431: 2246 /caniuse-lite/1.0.30001431:
1739 resolution: {integrity: sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==} 2247 resolution: {integrity: sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==}
1740 dev: true 2248 dev: true
@@ -1743,7 +2251,7 @@ packages: @@ -1743,7 +2251,7 @@ packages:
1743 resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} 2251 resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==}
1744 dependencies: 2252 dependencies:
1745 no-case: 3.0.4 2253 no-case: 3.0.4
1746 - tslib: registry.npmmirror.com/tslib/2.4.1 2254 + tslib: 2.4.1
1747 upper-case-first: 2.0.2 2255 upper-case-first: 2.0.2
1748 dev: true 2256 dev: true
1749 2257
@@ -1751,20 +2259,20 @@ packages: @@ -1751,20 +2259,20 @@ packages:
1751 resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} 2259 resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==}
1752 engines: {node: '>=0.10.0'} 2260 engines: {node: '>=0.10.0'}
1753 dependencies: 2261 dependencies:
1754 - ansi-styles: registry.npmmirror.com/ansi-styles/2.2.1 2262 + ansi-styles: 2.2.1
1755 escape-string-regexp: 1.0.5 2263 escape-string-regexp: 1.0.5
1756 has-ansi: 2.0.0 2264 has-ansi: 2.0.0
1757 strip-ansi: 3.0.1 2265 strip-ansi: 3.0.1
1758 - supports-color: registry.npmmirror.com/supports-color/2.0.0 2266 + supports-color: 2.0.0
1759 dev: true 2267 dev: true
1760 2268
1761 /chalk/2.4.2: 2269 /chalk/2.4.2:
1762 resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 2270 resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
1763 engines: {node: '>=4'} 2271 engines: {node: '>=4'}
1764 dependencies: 2272 dependencies:
1765 - ansi-styles: registry.npmmirror.com/ansi-styles/3.2.1 2273 + ansi-styles: 3.2.1
1766 escape-string-regexp: 1.0.5 2274 escape-string-regexp: 1.0.5
1767 - supports-color: registry.npmmirror.com/supports-color/5.5.0 2275 + supports-color: 5.5.0
1768 dev: true 2276 dev: true
1769 2277
1770 /chalk/4.1.2: 2278 /chalk/4.1.2:
@@ -1875,13 +2383,25 @@ packages: @@ -1875,13 +2383,25 @@ packages:
1875 object-visit: 1.0.1 2383 object-visit: 1.0.1
1876 dev: true 2384 dev: true
1877 2385
  2386 + /color-convert/1.9.3:
  2387 + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
  2388 + dependencies:
  2389 + color-name: 1.1.3
  2390 + dev: true
  2391 +
1878 /color-convert/2.0.1: 2392 /color-convert/2.0.1:
1879 resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 2393 resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
1880 engines: {node: '>=7.0.0'} 2394 engines: {node: '>=7.0.0'}
1881 dependencies: 2395 dependencies:
1882 - color-name: registry.npmmirror.com/color-name/1.1.4 2396 + color-name: 1.1.4
  2397 +
  2398 + /color-name/1.1.3:
  2399 + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
1883 dev: true 2400 dev: true
1884 2401
  2402 + /color-name/1.1.4:
  2403 + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
  2404 +
1885 /colord/2.9.3: 2405 /colord/2.9.3:
1886 resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} 2406 resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==}
1887 dev: true 2407 dev: true
@@ -1942,7 +2462,7 @@ packages: @@ -1942,7 +2462,7 @@ packages:
1942 resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} 2462 resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==}
1943 dependencies: 2463 dependencies:
1944 no-case: 3.0.4 2464 no-case: 3.0.4
1945 - tslib: registry.npmmirror.com/tslib/2.4.1 2465 + tslib: 2.4.1
1946 upper-case: 2.0.2 2466 upper-case: 2.0.2
1947 dev: true 2467 dev: true
1948 2468
@@ -1976,11 +2496,20 @@ packages: @@ -1976,11 +2496,20 @@ packages:
1976 through2: 4.0.2 2496 through2: 4.0.2
1977 dev: true 2497 dev: true
1978 2498
  2499 + /convert-source-map/1.9.0:
  2500 + 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}
  2501 + dev: true
  2502 +
1979 /copy-descriptor/0.1.1: 2503 /copy-descriptor/0.1.1:
1980 resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} 2504 resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==}
1981 engines: {node: '>=0.10.0'} 2505 engines: {node: '>=0.10.0'}
1982 dev: true 2506 dev: true
1983 2507
  2508 + /core-js/3.26.1:
  2509 + 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}
  2510 + requiresBuild: true
  2511 + dev: true
  2512 +
1984 /cors/2.8.5: 2513 /cors/2.8.5:
1985 resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} 2514 resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
1986 engines: {node: '>= 0.10'} 2515 engines: {node: '>= 0.10'}
@@ -1989,7 +2518,7 @@ packages: @@ -1989,7 +2518,7 @@ packages:
1989 vary: 1.1.2 2518 vary: 1.1.2
1990 dev: true 2519 dev: true
1991 2520
1992 - /cosmiconfig-typescript-loader/4.2.0_wb7bklcl6jlvxijczjyxggip4a: 2521 + /cosmiconfig-typescript-loader/4.2.0_bxtyj3et3xbsdyxhh3oblnfbj4:
1993 resolution: {integrity: sha512-NkANeMnaHrlaSSlpKGyvn2R4rqUDeE/9E5YHx+b4nwo0R8dZyAqcih8/gxpCZvqWP9Vf6xuLpMSzSgdVEIM78g==} 2522 resolution: {integrity: sha512-NkANeMnaHrlaSSlpKGyvn2R4rqUDeE/9E5YHx+b4nwo0R8dZyAqcih8/gxpCZvqWP9Vf6xuLpMSzSgdVEIM78g==}
1994 engines: {node: '>=12', npm: '>=6'} 2523 engines: {node: '>=12', npm: '>=6'}
1995 peerDependencies: 2524 peerDependencies:
@@ -1998,9 +2527,9 @@ packages: @@ -1998,9 +2527,9 @@ packages:
1998 ts-node: '>=10' 2527 ts-node: '>=10'
1999 typescript: '>=3' 2528 typescript: '>=3'
2000 dependencies: 2529 dependencies:
2001 - '@types/node': 14.18.33  
2002 - cosmiconfig: 7.1.0  
2003 - ts-node: 10.9.1_rju6pyblifsagdmqm3y74zsi6q 2530 + '@types/node': 18.11.18
  2531 + cosmiconfig: 8.0.0
  2532 + ts-node: 10.9.1_awa2wsr5thmg3i7jqycphctjfq
2004 typescript: 4.9.4 2533 typescript: 4.9.4
2005 dev: true 2534 dev: true
2006 2535
@@ -2015,6 +2544,16 @@ packages: @@ -2015,6 +2544,16 @@ packages:
2015 yaml: 1.10.2 2544 yaml: 1.10.2
2016 dev: true 2545 dev: true
2017 2546
  2547 + /cosmiconfig/8.0.0:
  2548 + resolution: {integrity: sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ==}
  2549 + engines: {node: '>=14'}
  2550 + dependencies:
  2551 + import-fresh: 3.3.0
  2552 + js-yaml: 4.1.0
  2553 + parse-json: 5.2.0
  2554 + path-type: 4.0.0
  2555 + dev: true
  2556 +
2018 /create-require/1.1.1: 2557 /create-require/1.1.1:
2019 resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} 2558 resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
2020 dev: true 2559 dev: true
@@ -2023,6 +2562,14 @@ packages: @@ -2023,6 +2562,14 @@ packages:
2023 resolution: {integrity: sha512-by7jKAo73y5/Do0K6sxdTKHgndY0NMjG2bEdgeJxycbcmHuCiMXqw8sxy5C5Y5WTOTcDGmbT7Sr5CgKOXR06OA==} 2562 resolution: {integrity: sha512-by7jKAo73y5/Do0K6sxdTKHgndY0NMjG2bEdgeJxycbcmHuCiMXqw8sxy5C5Y5WTOTcDGmbT7Sr5CgKOXR06OA==}
2024 dev: false 2563 dev: false
2025 2564
  2565 + /cross-fetch/3.1.5:
  2566 + 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}
  2567 + dependencies:
  2568 + node-fetch: 2.6.7
  2569 + transitivePeerDependencies:
  2570 + - encoding
  2571 + dev: true
  2572 +
2026 /cross-spawn/7.0.3: 2573 /cross-spawn/7.0.3:
2027 resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 2574 resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
2028 engines: {node: '>= 8'} 2575 engines: {node: '>= 8'}
@@ -2278,7 +2825,7 @@ packages: @@ -2278,7 +2825,7 @@ packages:
2278 resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} 2825 resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
2279 dependencies: 2826 dependencies:
2280 no-case: 3.0.4 2827 no-case: 3.0.4
2281 - tslib: registry.npmmirror.com/tslib/2.4.1 2828 + tslib: 2.4.1
2282 dev: true 2829 dev: true
2283 2830
2284 /dot-prop/5.3.0: 2831 /dot-prop/5.3.0:
@@ -2297,7 +2844,14 @@ packages: @@ -2297,7 +2844,14 @@ packages:
2297 peerDependencies: 2844 peerDependencies:
2298 echarts: ^5.0.1 2845 echarts: ^5.0.1
2299 dependencies: 2846 dependencies:
2300 - echarts: registry.npmmirror.com/echarts/5.4.1 2847 + echarts: 5.4.1
  2848 + dev: false
  2849 +
  2850 + /echarts/5.4.1:
  2851 + resolution: {integrity: sha512-9ltS3M2JB0w2EhcYjCdmtrJ+6haZcW6acBolMGIuf01Hql1yrIV01L1aRj7jsaaIULJslEP9Z3vKlEmnJaWJVQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/echarts/-/echarts-5.4.1.tgz}
  2852 + dependencies:
  2853 + tslib: 2.3.0
  2854 + zrender: 5.4.1
2301 dev: false 2855 dev: false
2302 2856
2303 /ejs/3.1.8: 2857 /ejs/3.1.8:
@@ -2312,8 +2866,8 @@ packages: @@ -2312,8 +2866,8 @@ packages:
2312 resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==} 2866 resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==}
2313 dev: true 2867 dev: true
2314 2868
2315 - /element-plus/2.2.27_vue@3.2.45:  
2316 - resolution: {integrity: sha512-P04HDOZBYDdvlYuleuCZRULzAc5xJVOBfLDK9xWxVo0vyo8ntdaXS5sTU+/76vrNzuO3FhLn9kvrsbiJEVa1jg==} 2869 + /element-plus/2.2.28_vue@3.2.45:
  2870 + resolution: {integrity: sha512-BsxF7iEaBydmRfw1Tt++EO9jRBjbtJr7ZRIrnEwz4J3Cwa1IzHCNCcx3ZwcYTlJq9CYFxv94JnbNr1EbkTou3A==}
2317 peerDependencies: 2871 peerDependencies:
2318 vue: ^3.2.0 2872 vue: ^3.2.0
2319 dependencies: 2873 dependencies:
@@ -2323,7 +2877,7 @@ packages: @@ -2323,7 +2877,7 @@ packages:
2323 '@popperjs/core': /@sxzz/popperjs-es/2.11.7 2877 '@popperjs/core': /@sxzz/popperjs-es/2.11.7
2324 '@types/lodash': 4.14.189 2878 '@types/lodash': 4.14.189
2325 '@types/lodash-es': 4.17.6 2879 '@types/lodash-es': 4.17.6
2326 - '@vueuse/core': 9.8.2_vue@3.2.45 2880 + '@vueuse/core': 9.10.0_vue@3.2.45
2327 async-validator: 4.2.5 2881 async-validator: 4.2.5
2328 dayjs: 1.11.7 2882 dayjs: 1.11.7
2329 escape-html: 1.0.3 2883 escape-html: 1.0.3
@@ -2450,21 +3004,21 @@ packages: @@ -2450,21 +3004,21 @@ packages:
2450 engines: {node: '>=10'} 3004 engines: {node: '>=10'}
2451 dev: true 3005 dev: true
2452 3006
2453 - /eslint-config-prettier/8.5.0_eslint@8.30.0:  
2454 - resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==} 3007 + /eslint-config-prettier/8.6.0_eslint@8.31.0:
  3008 + resolution: {integrity: sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==}
2455 hasBin: true 3009 hasBin: true
2456 peerDependencies: 3010 peerDependencies:
2457 eslint: '>=7.0.0' 3011 eslint: '>=7.0.0'
2458 dependencies: 3012 dependencies:
2459 - eslint: 8.30.0 3013 + eslint: 8.31.0
2460 dev: true 3014 dev: true
2461 3015
2462 - /eslint-define-config/1.12.0:  
2463 - resolution: {integrity: sha512-Kt9TcMbgsY9VRt7jIuw76KE/2RuD31eWB4Ubv6btXgU8NTSsbT6gZ8qzeiU+rAih/8sOl8Kt89spAZBMElu6qQ==} 3016 + /eslint-define-config/1.13.0:
  3017 + resolution: {integrity: sha512-d0BfmPGBcMusfiz6QY/piAhWaEyJriJtvk9SHfuJzI7am9k4ce07SfmPkpcR0ckXNyu4FBons10akOO2Tx+X+Q==}
2464 engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: '>=6.14.13', pnpm: '>= 7.0.0'} 3018 engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: '>=6.14.13', pnpm: '>= 7.0.0'}
2465 dev: true 3019 dev: true
2466 3020
2467 - /eslint-plugin-prettier/4.2.1_kl4pe43v5b43npmso5hoplpbyi: 3021 + /eslint-plugin-prettier/4.2.1_32m5uc2milwdw3tnkcq5del26y:
2468 resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} 3022 resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==}
2469 engines: {node: '>=12.0.0'} 3023 engines: {node: '>=12.0.0'}
2470 peerDependencies: 3024 peerDependencies:
@@ -2475,25 +3029,25 @@ packages: @@ -2475,25 +3029,25 @@ packages:
2475 eslint-config-prettier: 3029 eslint-config-prettier:
2476 optional: true 3030 optional: true
2477 dependencies: 3031 dependencies:
2478 - eslint: 8.30.0  
2479 - eslint-config-prettier: 8.5.0_eslint@8.30.0 3032 + eslint: 8.31.0
  3033 + eslint-config-prettier: 8.6.0_eslint@8.31.0
2480 prettier: 2.8.1 3034 prettier: 2.8.1
2481 prettier-linter-helpers: 1.0.0 3035 prettier-linter-helpers: 1.0.0
2482 dev: true 3036 dev: true
2483 3037
2484 - /eslint-plugin-vue/9.8.0_eslint@8.30.0: 3038 + /eslint-plugin-vue/9.8.0_eslint@8.31.0:
2485 resolution: {integrity: sha512-E/AXwcTzunyzM83C2QqDHxepMzvI2y6x+mmeYHbVDQlKFqmKYvRrhaVixEeeG27uI44p9oKDFiyCRw4XxgtfHA==} 3039 resolution: {integrity: sha512-E/AXwcTzunyzM83C2QqDHxepMzvI2y6x+mmeYHbVDQlKFqmKYvRrhaVixEeeG27uI44p9oKDFiyCRw4XxgtfHA==}
2486 engines: {node: ^14.17.0 || >=16.0.0} 3040 engines: {node: ^14.17.0 || >=16.0.0}
2487 peerDependencies: 3041 peerDependencies:
2488 eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 3042 eslint: ^6.2.0 || ^7.0.0 || ^8.0.0
2489 dependencies: 3043 dependencies:
2490 - eslint: 8.30.0  
2491 - eslint-utils: 3.0.0_eslint@8.30.0 3044 + eslint: 8.31.0
  3045 + eslint-utils: 3.0.0_eslint@8.31.0
2492 natural-compare: 1.4.0 3046 natural-compare: 1.4.0
2493 nth-check: 2.1.1 3047 nth-check: 2.1.1
2494 postcss-selector-parser: 6.0.10 3048 postcss-selector-parser: 6.0.10
2495 semver: 7.3.8 3049 semver: 7.3.8
2496 - vue-eslint-parser: 9.1.0_eslint@8.30.0 3050 + vue-eslint-parser: 9.1.0_eslint@8.31.0
2497 xml-name-validator: 4.0.0 3051 xml-name-validator: 4.0.0
2498 transitivePeerDependencies: 3052 transitivePeerDependencies:
2499 - supports-color 3053 - supports-color
@@ -2522,13 +3076,13 @@ packages: @@ -2522,13 +3076,13 @@ packages:
2522 eslint-visitor-keys: 1.3.0 3076 eslint-visitor-keys: 1.3.0
2523 dev: true 3077 dev: true
2524 3078
2525 - /eslint-utils/3.0.0_eslint@8.30.0: 3079 + /eslint-utils/3.0.0_eslint@8.31.0:
2526 resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} 3080 resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
2527 engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} 3081 engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
2528 peerDependencies: 3082 peerDependencies:
2529 eslint: '>=5' 3083 eslint: '>=5'
2530 dependencies: 3084 dependencies:
2531 - eslint: 8.30.0 3085 + eslint: 8.31.0
2532 eslint-visitor-keys: 2.1.0 3086 eslint-visitor-keys: 2.1.0
2533 dev: true 3087 dev: true
2534 3088
@@ -2547,12 +3101,12 @@ packages: @@ -2547,12 +3101,12 @@ packages:
2547 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 3101 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
2548 dev: true 3102 dev: true
2549 3103
2550 - /eslint/8.30.0:  
2551 - resolution: {integrity: sha512-MGADB39QqYuzEGov+F/qb18r4i7DohCDOfatHaxI2iGlPuC65bwG2gxgO+7DkyL38dRFaRH7RaRAgU6JKL9rMQ==} 3104 + /eslint/8.31.0:
  3105 + resolution: {integrity: sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==}
2552 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 3106 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
2553 hasBin: true 3107 hasBin: true
2554 dependencies: 3108 dependencies:
2555 - '@eslint/eslintrc': 1.4.0 3109 + '@eslint/eslintrc': 1.4.1
2556 '@humanwhocodes/config-array': 0.11.8 3110 '@humanwhocodes/config-array': 0.11.8
2557 '@humanwhocodes/module-importer': 1.0.1 3111 '@humanwhocodes/module-importer': 1.0.1
2558 '@nodelib/fs.walk': 1.2.8 3112 '@nodelib/fs.walk': 1.2.8
@@ -2563,7 +3117,7 @@ packages: @@ -2563,7 +3117,7 @@ packages:
2563 doctrine: 3.0.0 3117 doctrine: 3.0.0
2564 escape-string-regexp: 4.0.0 3118 escape-string-regexp: 4.0.0
2565 eslint-scope: 7.1.1 3119 eslint-scope: 7.1.1
2566 - eslint-utils: 3.0.0_eslint@8.30.0 3120 + eslint-utils: 3.0.0_eslint@8.31.0
2567 eslint-visitor-keys: 3.3.0 3121 eslint-visitor-keys: 3.3.0
2568 espree: 9.4.1 3122 espree: 9.4.1
2569 esquery: 1.4.0 3123 esquery: 1.4.0
@@ -2787,7 +3341,24 @@ packages: @@ -2787,7 +3341,24 @@ packages:
2787 /filelist/1.0.4: 3341 /filelist/1.0.4:
2788 resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} 3342 resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
2789 dependencies: 3343 dependencies:
2790 - minimatch: 5.1.0 3344 + minimatch: 5.1.2
  3345 + dev: true
  3346 +
  3347 + /fill-range/4.0.0:
  3348 + 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}
  3349 + engines: {node: '>=0.10.0'}
  3350 + dependencies:
  3351 + extend-shallow: 2.0.1
  3352 + is-number: 3.0.0
  3353 + repeat-string: 1.6.1
  3354 + to-regex-range: 2.1.1
  3355 + dev: true
  3356 +
  3357 + /fill-range/7.0.1:
  3358 + 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}
  3359 + engines: {node: '>=8'}
  3360 + dependencies:
  3361 + to-regex-range: 5.0.1
2791 dev: true 3362 dev: true
2792 3363
2793 /find-up/4.1.0: 3364 /find-up/4.1.0:
@@ -2825,7 +3396,6 @@ packages: @@ -2825,7 +3396,6 @@ packages:
2825 peerDependenciesMeta: 3396 peerDependenciesMeta:
2826 debug: 3397 debug:
2827 optional: true 3398 optional: true
2828 - dev: false  
2829 3399
2830 /for-in/1.0.2: 3400 /for-in/1.0.2:
2831 resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} 3401 resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==}
@@ -2861,6 +3431,15 @@ packages: @@ -2861,6 +3431,15 @@ packages:
2861 universalify: 2.0.0 3431 universalify: 2.0.0
2862 dev: true 3432 dev: true
2863 3433
  3434 + /fs-extra/11.1.0:
  3435 + resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==}
  3436 + engines: {node: '>=14.14'}
  3437 + dependencies:
  3438 + graceful-fs: 4.2.10
  3439 + jsonfile: 6.1.0
  3440 + universalify: 2.0.0
  3441 + dev: true
  3442 +
2864 /fs.realpath/1.0.0: 3443 /fs.realpath/1.0.0:
2865 resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 3444 resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
2866 dev: true 3445 dev: true
@@ -2875,6 +3454,10 @@ packages: @@ -2875,6 +3454,10 @@ packages:
2875 3454
2876 /function-bind/1.1.1: 3455 /function-bind/1.1.1:
2877 resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 3456 resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
  3457 +
  3458 + /gensync/1.0.0-beta.2:
  3459 + 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}
  3460 + engines: {node: '>=6.9.0'}
2878 dev: true 3461 dev: true
2879 3462
2880 /get-caller-file/2.0.5: 3463 /get-caller-file/2.0.5:
@@ -2884,8 +3467,8 @@ packages: @@ -2884,8 +3467,8 @@ packages:
2884 /get-intrinsic/1.1.3: 3467 /get-intrinsic/1.1.3:
2885 resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==} 3468 resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==}
2886 dependencies: 3469 dependencies:
2887 - function-bind: registry.npmmirror.com/function-bind/1.1.1  
2888 - has: registry.npmmirror.com/has/1.0.3 3470 + function-bind: 1.1.1
  3471 + has: 1.0.3
2889 has-symbols: 1.0.3 3472 has-symbols: 1.0.3
2890 dev: false 3473 dev: false
2891 3474
@@ -3007,6 +3590,16 @@ packages: @@ -3007,6 +3590,16 @@ packages:
3007 ansi-regex: 2.1.1 3590 ansi-regex: 2.1.1
3008 dev: true 3591 dev: true
3009 3592
  3593 + /has-flag/1.0.0:
  3594 + resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==}
  3595 + engines: {node: '>=0.10.0'}
  3596 + dev: true
  3597 +
  3598 + /has-flag/3.0.0:
  3599 + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
  3600 + engines: {node: '>=4'}
  3601 + dev: true
  3602 +
3010 /has-flag/4.0.0: 3603 /has-flag/4.0.0:
3011 resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 3604 resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
3012 engines: {node: '>=8'} 3605 engines: {node: '>=8'}
@@ -3044,7 +3637,7 @@ packages: @@ -3044,7 +3637,7 @@ packages:
3044 resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} 3637 resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==}
3045 engines: {node: '>=0.10.0'} 3638 engines: {node: '>=0.10.0'}
3046 dependencies: 3639 dependencies:
3047 - is-number: registry.npmmirror.com/is-number/3.0.0 3640 + is-number: 3.0.0
3048 kind-of: 4.0.0 3641 kind-of: 4.0.0
3049 dev: true 3642 dev: true
3050 3643
@@ -3053,7 +3646,6 @@ packages: @@ -3053,7 +3646,6 @@ packages:
3053 engines: {node: '>= 0.4.0'} 3646 engines: {node: '>= 0.4.0'}
3054 dependencies: 3647 dependencies:
3055 function-bind: 1.1.1 3648 function-bind: 1.1.1
3056 - dev: true  
3057 3649
3058 /he/1.2.0: 3650 /he/1.2.0:
3059 resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} 3651 resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
@@ -3064,7 +3656,7 @@ packages: @@ -3064,7 +3656,7 @@ packages:
3064 resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} 3656 resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==}
3065 dependencies: 3657 dependencies:
3066 capital-case: 1.0.4 3658 capital-case: 1.0.4
3067 - tslib: registry.npmmirror.com/tslib/2.4.1 3659 + tslib: 2.4.1
3068 dev: true 3660 dev: true
3069 3661
3070 /hosted-git-info/2.8.9: 3662 /hosted-git-info/2.8.9:
@@ -3075,7 +3667,7 @@ packages: @@ -3075,7 +3667,7 @@ packages:
3075 resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} 3667 resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==}
3076 engines: {node: '>=10'} 3668 engines: {node: '>=10'}
3077 dependencies: 3669 dependencies:
3078 - lru-cache: registry.npmmirror.com/lru-cache/6.0.0 3670 + lru-cache: 6.0.0
3079 dev: true 3671 dev: true
3080 3672
3081 /html-tags/3.2.0: 3673 /html-tags/3.2.0:
@@ -3288,6 +3880,18 @@ packages: @@ -3288,6 +3880,18 @@ packages:
3288 resolution: {integrity: sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==} 3880 resolution: {integrity: sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==}
3289 dev: false 3881 dev: false
3290 3882
  3883 + /is-number/3.0.0:
  3884 + 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}
  3885 + engines: {node: '>=0.10.0'}
  3886 + dependencies:
  3887 + kind-of: 3.2.2
  3888 + dev: true
  3889 +
  3890 + /is-number/7.0.0:
  3891 + 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}
  3892 + engines: {node: '>=0.12.0'}
  3893 + dev: true
  3894 +
3291 /is-obj/2.0.0: 3895 /is-obj/2.0.0:
3292 resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} 3896 resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
3293 engines: {node: '>=8'} 3897 engines: {node: '>=8'}
@@ -3371,6 +3975,11 @@ packages: @@ -3371,6 +3975,11 @@ packages:
3371 minimatch: 3.1.2 3975 minimatch: 3.1.2
3372 dev: true 3976 dev: true
3373 3977
  3978 + /jiti/1.16.0:
  3979 + 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}
  3980 + hasBin: true
  3981 + dev: true
  3982 +
3374 /js-base64/2.6.4: 3983 /js-base64/2.6.4:
3375 resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==} 3984 resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==}
3376 dev: true 3985 dev: true
@@ -3379,6 +3988,10 @@ packages: @@ -3379,6 +3988,10 @@ packages:
3379 resolution: {integrity: sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==} 3988 resolution: {integrity: sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==}
3380 dev: true 3989 dev: true
3381 3990
  3991 + /js-tokens/4.0.0:
  3992 + 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}
  3993 + dev: true
  3994 +
3382 /js-tokens/8.0.0: 3995 /js-tokens/8.0.0:
3383 resolution: {integrity: sha512-PC7MzqInq9OqKyTXfIvQNcjMkODJYC8A17kAaQgeW79yfhqTWSOfjHYQ2mDDcwJ96Iibtwkfh0C7R/OvqPlgVA==} 3996 resolution: {integrity: sha512-PC7MzqInq9OqKyTXfIvQNcjMkODJYC8A17kAaQgeW79yfhqTWSOfjHYQ2mDDcwJ96Iibtwkfh0C7R/OvqPlgVA==}
3384 dev: true 3997 dev: true
@@ -3394,6 +4007,12 @@ packages: @@ -3394,6 +4007,12 @@ packages:
3394 resolution: {integrity: sha512-dVvV54GdFuJgmEKn+oBiaifDMen4p6o6j/lJh0OVMcouME8sST0bJ7bldIgKBQk4za0zyGn0/pm4vOznR25mLw==} 4007 resolution: {integrity: sha512-dVvV54GdFuJgmEKn+oBiaifDMen4p6o6j/lJh0OVMcouME8sST0bJ7bldIgKBQk4za0zyGn0/pm4vOznR25mLw==}
3395 dev: false 4008 dev: false
3396 4009
  4010 + /jsesc/2.5.2:
  4011 + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/jsesc/-/jsesc-2.5.2.tgz}
  4012 + engines: {node: '>=4'}
  4013 + hasBin: true
  4014 + dev: true
  4015 +
3397 /json-parse-even-better-errors/2.3.1: 4016 /json-parse-even-better-errors/2.3.1:
3398 resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 4017 resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
3399 dev: true 4018 dev: true
@@ -3437,7 +4056,7 @@ packages: @@ -3437,7 +4056,7 @@ packages:
3437 /jsonfile/6.1.0: 4056 /jsonfile/6.1.0:
3438 resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} 4057 resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
3439 dependencies: 4058 dependencies:
3440 - universalify: registry.npmmirror.com/universalify/2.0.0 4059 + universalify: 2.0.0
3441 optionalDependencies: 4060 optionalDependencies:
3442 graceful-fs: 4.2.10 4061 graceful-fs: 4.2.10
3443 dev: true 4062 dev: true
@@ -3475,6 +4094,10 @@ packages: @@ -3475,6 +4094,10 @@ packages:
3475 resolution: {integrity: sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==} 4094 resolution: {integrity: sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==}
3476 dev: true 4095 dev: true
3477 4096
  4097 + /kolorist/1.6.0:
  4098 + resolution: {integrity: sha512-dLkz37Ab97HWMx9KTes3Tbi3D1ln9fCAy2zr2YVExJasDRPGRaKcoE4fycWNtnCAJfjFqe0cnY+f8KT2JePEXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/kolorist/-/kolorist-1.6.0.tgz}
  4099 + dev: true
  4100 +
3478 /levn/0.4.1: 4101 /levn/0.4.1:
3479 resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 4102 resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
3480 engines: {node: '>= 0.8.0'} 4103 engines: {node: '>= 0.8.0'}
@@ -3655,7 +4278,7 @@ packages: @@ -3655,7 +4278,7 @@ packages:
3655 /lower-case/2.0.2: 4278 /lower-case/2.0.2:
3656 resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} 4279 resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
3657 dependencies: 4280 dependencies:
3658 - tslib: registry.npmmirror.com/tslib/2.4.1 4281 + tslib: 2.4.1
3659 dev: true 4282 dev: true
3660 4283
3661 /lru-cache/6.0.0: 4284 /lru-cache/6.0.0:
@@ -3669,6 +4292,12 @@ packages: @@ -3669,6 +4292,12 @@ packages:
3669 resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} 4292 resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
3670 dependencies: 4293 dependencies:
3671 sourcemap-codec: 1.4.8 4294 sourcemap-codec: 1.4.8
  4295 +
  4296 + /magic-string/0.27.0:
  4297 + 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}
  4298 + engines: {node: '>=12'}
  4299 + dependencies:
  4300 + '@jridgewell/sourcemap-codec': 1.4.14
3672 dev: true 4301 dev: true
3673 4302
3674 /make-error/1.3.6: 4303 /make-error/1.3.6:
@@ -3766,7 +4395,7 @@ packages: @@ -3766,7 +4395,7 @@ packages:
3766 dependencies: 4395 dependencies:
3767 arr-diff: 4.0.0 4396 arr-diff: 4.0.0
3768 array-unique: 0.3.2 4397 array-unique: 0.3.2
3769 - braces: registry.npmmirror.com/braces/2.3.2 4398 + braces: 2.3.2
3770 define-property: 1.0.0 4399 define-property: 1.0.0
3771 extend-shallow: 2.0.1 4400 extend-shallow: 2.0.1
3772 extglob: 2.0.4 4401 extglob: 2.0.4
@@ -3828,13 +4457,6 @@ packages: @@ -3828,13 +4457,6 @@ packages:
3828 brace-expansion: 1.1.11 4457 brace-expansion: 1.1.11
3829 dev: true 4458 dev: true
3830 4459
3831 - /minimatch/5.1.0:  
3832 - resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==}  
3833 - engines: {node: '>=10'}  
3834 - dependencies:  
3835 - brace-expansion: 2.0.1  
3836 - dev: true  
3837 -  
3838 /minimatch/5.1.2: 4460 /minimatch/5.1.2:
3839 resolution: {integrity: sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==} 4461 resolution: {integrity: sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==}
3840 engines: {node: '>=10'} 4462 engines: {node: '>=10'}
@@ -3884,7 +4506,7 @@ packages: @@ -3884,7 +4506,7 @@ packages:
3884 dev: false 4506 dev: false
3885 4507
3886 /nanoid/3.3.4: 4508 /nanoid/3.3.4:
3887 - resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} 4509 + resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/nanoid/-/nanoid-3.3.4.tgz}
3888 engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 4510 engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
3889 hasBin: true 4511 hasBin: true
3890 4512
@@ -3923,7 +4545,19 @@ packages: @@ -3923,7 +4545,19 @@ packages:
3923 resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} 4545 resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
3924 dependencies: 4546 dependencies:
3925 lower-case: 2.0.2 4547 lower-case: 2.0.2
3926 - tslib: registry.npmmirror.com/tslib/2.4.1 4548 + tslib: 2.4.1
  4549 + dev: true
  4550 +
  4551 + /node-fetch/2.6.7:
  4552 + 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}
  4553 + engines: {node: 4.x || >=6.0.0}
  4554 + peerDependencies:
  4555 + encoding: ^0.1.0
  4556 + peerDependenciesMeta:
  4557 + encoding:
  4558 + optional: true
  4559 + dependencies:
  4560 + whatwg-url: 5.0.0
3927 dev: true 4561 dev: true
3928 4562
3929 /node-releases/2.0.6: 4563 /node-releases/2.0.6:
@@ -3944,8 +4578,8 @@ packages: @@ -3944,8 +4578,8 @@ packages:
3944 engines: {node: '>=10'} 4578 engines: {node: '>=10'}
3945 dependencies: 4579 dependencies:
3946 hosted-git-info: 4.1.0 4580 hosted-git-info: 4.1.0
3947 - is-core-module: registry.npmmirror.com/is-core-module/2.11.0  
3948 - semver: registry.npmmirror.com/semver/7.3.8 4581 + is-core-module: 2.11.0
  4582 + semver: 7.3.8
3949 validate-npm-package-license: 3.0.4 4583 validate-npm-package-license: 3.0.4
3950 dev: true 4584 dev: true
3951 4585
@@ -4091,7 +4725,7 @@ packages: @@ -4091,7 +4725,7 @@ packages:
4091 resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} 4725 resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==}
4092 dependencies: 4726 dependencies:
4093 dot-case: 3.0.4 4727 dot-case: 3.0.4
4094 - tslib: registry.npmmirror.com/tslib/2.4.1 4728 + tslib: 2.4.1
4095 dev: true 4729 dev: true
4096 4730
4097 /parent-module/1.0.1: 4731 /parent-module/1.0.1:
@@ -4105,7 +4739,7 @@ packages: @@ -4105,7 +4739,7 @@ packages:
4105 resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 4739 resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
4106 engines: {node: '>=8'} 4740 engines: {node: '>=8'}
4107 dependencies: 4741 dependencies:
4108 - '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.18.6 4742 + '@babel/code-frame': 7.18.6
4109 error-ex: 1.3.2 4743 error-ex: 1.3.2
4110 json-parse-even-better-errors: 2.3.1 4744 json-parse-even-better-errors: 2.3.1
4111 lines-and-columns: 1.2.4 4745 lines-and-columns: 1.2.4
@@ -4115,7 +4749,7 @@ packages: @@ -4115,7 +4749,7 @@ packages:
4115 resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} 4749 resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==}
4116 dependencies: 4750 dependencies:
4117 no-case: 3.0.4 4751 no-case: 3.0.4
4118 - tslib: registry.npmmirror.com/tslib/2.4.1 4752 + tslib: 2.4.1
4119 dev: true 4753 dev: true
4120 4754
4121 /pascalcase/0.1.1: 4755 /pascalcase/0.1.1:
@@ -4127,7 +4761,7 @@ packages: @@ -4127,7 +4761,7 @@ packages:
4127 resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} 4761 resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==}
4128 dependencies: 4762 dependencies:
4129 dot-case: 3.0.4 4763 dot-case: 3.0.4
4130 - tslib: registry.npmmirror.com/tslib/2.4.1 4764 + tslib: 2.4.1
4131 dev: true 4765 dev: true
4132 4766
4133 /path-exists/4.0.0: 4767 /path-exists/4.0.0:
@@ -4162,17 +4796,12 @@ packages: @@ -4162,17 +4796,12 @@ packages:
4162 resolution: {integrity: sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==} 4796 resolution: {integrity: sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==}
4163 dev: true 4797 dev: true
4164 4798
4165 - /pathe/0.3.9:  
4166 - resolution: {integrity: sha512-6Y6s0vT112P3jD8dGfuS6r+lpa0qqNrLyHPOwvXMnyNTQaYiwgau2DP3aNDsR13xqtGj7rrPo+jFUATpU6/s+g==}  
4167 - dev: true  
4168 -  
4169 /pathe/1.0.0: 4799 /pathe/1.0.0:
4170 resolution: {integrity: sha512-nPdMG0Pd09HuSsr7QOKUXO2Jr9eqaDiZvDwdyIhNG5SHYujkQHYKDfGQkulBxvbDHz8oHLsTgKN86LSwYzSHAg==} 4800 resolution: {integrity: sha512-nPdMG0Pd09HuSsr7QOKUXO2Jr9eqaDiZvDwdyIhNG5SHYujkQHYKDfGQkulBxvbDHz8oHLsTgKN86LSwYzSHAg==}
4171 dev: true 4801 dev: true
4172 4802
4173 /picocolors/1.0.0: 4803 /picocolors/1.0.0:
4174 resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 4804 resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
4175 - dev: true  
4176 4805
4177 /picomatch/2.3.1: 4806 /picomatch/2.3.1:
4178 resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 4807 resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
@@ -4185,6 +4814,24 @@ packages: @@ -4185,6 +4814,24 @@ packages:
4185 hasBin: true 4814 hasBin: true
4186 dev: true 4815 dev: true
4187 4816
  4817 + /pinia/2.0.28_prq2uz4lho2pwp6irk4cfkrxwu:
  4818 + resolution: {integrity: sha512-YClq9DkqCblq9rlyUual7ezMu/iICWdBtfJrDt4oWU9Zxpijyz7xB2xTwx57DaBQ96UGvvTMORzALr+iO5PVMw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/pinia/-/pinia-2.0.28.tgz}
  4819 + peerDependencies:
  4820 + '@vue/composition-api': ^1.4.0
  4821 + typescript: '>=4.4.4'
  4822 + vue: ^2.6.14 || ^3.2.0
  4823 + peerDependenciesMeta:
  4824 + '@vue/composition-api':
  4825 + optional: true
  4826 + typescript:
  4827 + optional: true
  4828 + dependencies:
  4829 + '@vue/devtools-api': 6.4.5
  4830 + typescript: 4.9.4
  4831 + vue: 3.2.45
  4832 + vue-demi: 0.13.11_vue@3.2.45
  4833 + dev: false
  4834 +
4188 /pngjs/5.0.0: 4835 /pngjs/5.0.0:
4189 resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} 4836 resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==}
4190 engines: {node: '>=10.13.0'} 4837 engines: {node: '>=10.13.0'}
@@ -4201,7 +4848,7 @@ packages: @@ -4201,7 +4848,7 @@ packages:
4201 dependencies: 4848 dependencies:
4202 htmlparser2: 8.0.1 4849 htmlparser2: 8.0.1
4203 js-tokens: 8.0.0 4850 js-tokens: 8.0.0
4204 - postcss: registry.npmmirror.com/postcss/8.4.20 4851 + postcss: 8.4.20
4205 postcss-safe-parser: 6.0.0_postcss@8.4.20 4852 postcss-safe-parser: 6.0.0_postcss@8.4.20
4206 dev: true 4853 dev: true
4207 4854
@@ -4214,7 +4861,7 @@ packages: @@ -4214,7 +4861,7 @@ packages:
4214 peerDependencies: 4861 peerDependencies:
4215 postcss: '>4 <9' 4862 postcss: '>4 <9'
4216 dependencies: 4863 dependencies:
4217 - postcss: registry.npmmirror.com/postcss/5.2.18 4864 + postcss: 5.2.18
4218 dev: true 4865 dev: true
4219 4866
4220 /postcss-resolve-nested-selector/0.1.1: 4867 /postcss-resolve-nested-selector/0.1.1:
@@ -4227,7 +4874,7 @@ packages: @@ -4227,7 +4874,7 @@ packages:
4227 peerDependencies: 4874 peerDependencies:
4228 postcss: ^8.3.3 4875 postcss: ^8.3.3
4229 dependencies: 4876 dependencies:
4230 - postcss: registry.npmmirror.com/postcss/8.4.20 4877 + postcss: 8.4.20
4231 dev: true 4878 dev: true
4232 4879
4233 /postcss-scss/4.0.6_postcss@8.4.20: 4880 /postcss-scss/4.0.6_postcss@8.4.20:
@@ -4236,7 +4883,7 @@ packages: @@ -4236,7 +4883,7 @@ packages:
4236 peerDependencies: 4883 peerDependencies:
4237 postcss: ^8.4.19 4884 postcss: ^8.4.19
4238 dependencies: 4885 dependencies:
4239 - postcss: registry.npmmirror.com/postcss/8.4.20 4886 + postcss: 8.4.20
4240 dev: true 4887 dev: true
4241 4888
4242 /postcss-selector-parser/6.0.10: 4889 /postcss-selector-parser/6.0.10:
@@ -4260,21 +4907,30 @@ packages: @@ -4260,21 +4907,30 @@ packages:
4260 peerDependencies: 4907 peerDependencies:
4261 postcss: ^8.3.9 4908 postcss: ^8.3.9
4262 dependencies: 4909 dependencies:
4263 - postcss: registry.npmmirror.com/postcss/8.4.20 4910 + postcss: 8.4.20
4264 dev: true 4911 dev: true
4265 4912
4266 /postcss-value-parser/4.2.0: 4913 /postcss-value-parser/4.2.0:
4267 resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 4914 resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
4268 dev: true 4915 dev: true
4269 4916
  4917 + /postcss/5.2.18:
  4918 + resolution: {integrity: sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==}
  4919 + engines: {node: '>=0.12'}
  4920 + dependencies:
  4921 + chalk: 1.1.3
  4922 + js-base64: 2.6.4
  4923 + source-map: 0.5.7
  4924 + supports-color: 3.2.3
  4925 + dev: true
  4926 +
4270 /postcss/8.4.20: 4927 /postcss/8.4.20:
4271 - resolution: {integrity: sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==} 4928 + resolution: {integrity: sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/postcss/-/postcss-8.4.20.tgz}
4272 engines: {node: ^10 || ^12 || >=14} 4929 engines: {node: ^10 || ^12 || >=14}
4273 dependencies: 4930 dependencies:
4274 nanoid: 3.3.4 4931 nanoid: 3.3.4
4275 picocolors: 1.0.0 4932 picocolors: 1.0.0
4276 source-map-js: 1.0.2 4933 source-map-js: 1.0.2
4277 - dev: true  
4278 4934
4279 /posthtml-parser/0.2.1: 4935 /posthtml-parser/0.2.1:
4280 resolution: {integrity: sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==} 4936 resolution: {integrity: sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==}
@@ -4451,6 +5107,9 @@ packages: @@ -4451,6 +5107,9 @@ packages:
4451 strip-indent: 3.0.0 5107 strip-indent: 3.0.0
4452 dev: true 5108 dev: true
4453 5109
  5110 + /regenerator-runtime/0.13.11:
  5111 + 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}
  5112 +
4454 /regex-not/1.0.2: 5113 /regex-not/1.0.2:
4455 resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} 5114 resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==}
4456 engines: {node: '>=0.10.0'} 5115 engines: {node: '>=0.10.0'}
@@ -4547,6 +5206,17 @@ packages: @@ -4547,6 +5206,17 @@ packages:
4547 glob: 7.2.3 5206 glob: 7.2.3
4548 dev: true 5207 dev: true
4549 5208
  5209 + /rollup-plugin-purge-icons/0.9.1:
  5210 + 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}
  5211 + engines: {node: '>= 12'}
  5212 + dependencies:
  5213 + '@purge-icons/core': 0.9.1
  5214 + '@purge-icons/generated': 0.9.0
  5215 + transitivePeerDependencies:
  5216 + - encoding
  5217 + - supports-color
  5218 + dev: true
  5219 +
4550 /rollup/2.79.1: 5220 /rollup/2.79.1:
4551 resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} 5221 resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==}
4552 engines: {node: '>=10.0.0'} 5222 engines: {node: '>=10.0.0'}
@@ -4555,8 +5225,8 @@ packages: @@ -4555,8 +5225,8 @@ packages:
4555 fsevents: 2.3.2 5225 fsevents: 2.3.2
4556 dev: true 5226 dev: true
4557 5227
4558 - /rollup/3.8.1:  
4559 - resolution: {integrity: sha512-4yh9eMW7byOroYcN8DlF9P/2jCpu6txVIHjEqquQVSx7DI0RgyCCN3tjrcy4ra6yVtV336aLBB3v2AarYAxePQ==} 5228 + /rollup/3.9.1:
  5229 + resolution: {integrity: sha512-GswCYHXftN8ZKGVgQhTFUJB/NBXxrRGgO2NCy6E8s1rwEJ4Q9/VttNqcYfEvx4dTo4j58YqdC3OVztPzlKSX8w==}
4560 engines: {node: '>=14.18.0', npm: '>=8.0.0'} 5230 engines: {node: '>=14.18.0', npm: '>=8.0.0'}
4561 hasBin: true 5231 hasBin: true
4562 optionalDependencies: 5232 optionalDependencies:
@@ -4572,7 +5242,7 @@ packages: @@ -4572,7 +5242,7 @@ packages:
4572 /rxjs/7.5.7: 5242 /rxjs/7.5.7:
4573 resolution: {integrity: sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==} 5243 resolution: {integrity: sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==}
4574 dependencies: 5244 dependencies:
4575 - tslib: registry.npmmirror.com/tslib/2.4.1 5245 + tslib: 2.4.1
4576 dev: true 5246 dev: true
4577 5247
4578 /safe-buffer/5.2.1: 5248 /safe-buffer/5.2.1:
@@ -4623,7 +5293,7 @@ packages: @@ -4623,7 +5293,7 @@ packages:
4623 resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} 5293 resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==}
4624 dependencies: 5294 dependencies:
4625 no-case: 3.0.4 5295 no-case: 3.0.4
4626 - tslib: registry.npmmirror.com/tslib/2.4.1 5296 + tslib: 2.4.1
4627 upper-case-first: 2.0.2 5297 upper-case-first: 2.0.2
4628 dev: true 5298 dev: true
4629 5299
@@ -4691,7 +5361,7 @@ packages: @@ -4691,7 +5361,7 @@ packages:
4691 resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} 5361 resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==}
4692 engines: {node: '>=8'} 5362 engines: {node: '>=8'}
4693 dependencies: 5363 dependencies:
4694 - ansi-styles: registry.npmmirror.com/ansi-styles/4.3.0 5364 + ansi-styles: 4.3.0
4695 astral-regex: 2.0.0 5365 astral-regex: 2.0.0
4696 is-fullwidth-code-point: 3.0.0 5366 is-fullwidth-code-point: 3.0.0
4697 dev: true 5367 dev: true
@@ -4700,7 +5370,7 @@ packages: @@ -4700,7 +5370,7 @@ packages:
4700 resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} 5370 resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==}
4701 engines: {node: '>=10'} 5371 engines: {node: '>=10'}
4702 dependencies: 5372 dependencies:
4703 - ansi-styles: registry.npmmirror.com/ansi-styles/4.3.0 5373 + ansi-styles: 4.3.0
4704 astral-regex: 2.0.0 5374 astral-regex: 2.0.0
4705 is-fullwidth-code-point: 3.0.0 5375 is-fullwidth-code-point: 3.0.0
4706 dev: true 5376 dev: true
@@ -4722,7 +5392,7 @@ packages: @@ -4722,7 +5392,7 @@ packages:
4722 resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} 5392 resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
4723 dependencies: 5393 dependencies:
4724 dot-case: 3.0.4 5394 dot-case: 3.0.4
4725 - tslib: registry.npmmirror.com/tslib/2.4.1 5395 + tslib: 2.4.1
4726 dev: true 5396 dev: true
4727 5397
4728 /snapdragon-node/2.1.1: 5398 /snapdragon-node/2.1.1:
@@ -4758,9 +5428,8 @@ packages: @@ -4758,9 +5428,8 @@ packages:
4758 dev: true 5428 dev: true
4759 5429
4760 /source-map-js/1.0.2: 5430 /source-map-js/1.0.2:
4761 - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 5431 + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/source-map-js/-/source-map-js-1.0.2.tgz}
4762 engines: {node: '>=0.10.0'} 5432 engines: {node: '>=0.10.0'}
4763 - dev: true  
4764 5433
4765 /source-map-resolve/0.5.3: 5434 /source-map-resolve/0.5.3:
4766 resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} 5435 resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==}
@@ -4929,7 +5598,7 @@ packages: @@ -4929,7 +5598,7 @@ packages:
4929 resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==} 5598 resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==}
4930 dev: true 5599 dev: true
4931 5600
4932 - /stylelint-config-html/1.1.0_bto6pmslw3cibsiuq6smxboytq: 5601 + /stylelint-config-html/1.1.0_kbto3rg3njmczth2rrsgfnlsqa:
4933 resolution: {integrity: sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==} 5602 resolution: {integrity: sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==}
4934 engines: {node: ^12 || >=14} 5603 engines: {node: ^12 || >=14}
4935 peerDependencies: 5604 peerDependencies:
@@ -4937,48 +5606,48 @@ packages: @@ -4937,48 +5606,48 @@ packages:
4937 stylelint: '>=14.0.0' 5606 stylelint: '>=14.0.0'
4938 dependencies: 5607 dependencies:
4939 postcss-html: 1.5.0 5608 postcss-html: 1.5.0
4940 - stylelint: 14.16.0 5609 + stylelint: 14.16.1
4941 dev: true 5610 dev: true
4942 5611
4943 - /stylelint-config-prettier/9.0.4_stylelint@14.16.0: 5612 + /stylelint-config-prettier/9.0.4_stylelint@14.16.1:
4944 resolution: {integrity: sha512-38nIGTGpFOiK5LjJ8Ma1yUgpKENxoKSOhbDNSemY7Ep0VsJoXIW9Iq/2hSt699oB9tReynfWicTAoIHiq8Rvbg==} 5613 resolution: {integrity: sha512-38nIGTGpFOiK5LjJ8Ma1yUgpKENxoKSOhbDNSemY7Ep0VsJoXIW9Iq/2hSt699oB9tReynfWicTAoIHiq8Rvbg==}
4945 engines: {node: '>= 12'} 5614 engines: {node: '>= 12'}
4946 hasBin: true 5615 hasBin: true
4947 peerDependencies: 5616 peerDependencies:
4948 stylelint: '>=11.0.0' 5617 stylelint: '>=11.0.0'
4949 dependencies: 5618 dependencies:
4950 - stylelint: 14.16.0 5619 + stylelint: 14.16.1
4951 dev: true 5620 dev: true
4952 5621
4953 - /stylelint-config-recommended/9.0.0_stylelint@14.16.0: 5622 + /stylelint-config-recommended/9.0.0_stylelint@14.16.1:
4954 resolution: {integrity: sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ==} 5623 resolution: {integrity: sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ==}
4955 peerDependencies: 5624 peerDependencies:
4956 stylelint: ^14.10.0 5625 stylelint: ^14.10.0
4957 dependencies: 5626 dependencies:
4958 - stylelint: 14.16.0 5627 + stylelint: 14.16.1
4959 dev: true 5628 dev: true
4960 5629
4961 - /stylelint-config-standard/29.0.0_stylelint@14.16.0: 5630 + /stylelint-config-standard/29.0.0_stylelint@14.16.1:
4962 resolution: {integrity: sha512-uy8tZLbfq6ZrXy4JKu3W+7lYLgRQBxYTUUB88vPgQ+ZzAxdrvcaSUW9hOMNLYBnwH+9Kkj19M2DHdZ4gKwI7tg==} 5631 resolution: {integrity: sha512-uy8tZLbfq6ZrXy4JKu3W+7lYLgRQBxYTUUB88vPgQ+ZzAxdrvcaSUW9hOMNLYBnwH+9Kkj19M2DHdZ4gKwI7tg==}
4963 peerDependencies: 5632 peerDependencies:
4964 stylelint: ^14.14.0 5633 stylelint: ^14.14.0
4965 dependencies: 5634 dependencies:
4966 - stylelint: 14.16.0  
4967 - stylelint-config-recommended: 9.0.0_stylelint@14.16.0 5635 + stylelint: 14.16.1
  5636 + stylelint-config-recommended: 9.0.0_stylelint@14.16.1
4968 dev: true 5637 dev: true
4969 5638
4970 - /stylelint-order/5.0.0_stylelint@14.16.0: 5639 + /stylelint-order/5.0.0_stylelint@14.16.1:
4971 resolution: {integrity: sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw==} 5640 resolution: {integrity: sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw==}
4972 peerDependencies: 5641 peerDependencies:
4973 stylelint: ^14.0.0 5642 stylelint: ^14.0.0
4974 dependencies: 5643 dependencies:
4975 - postcss: registry.npmmirror.com/postcss/8.4.20 5644 + postcss: 8.4.20
4976 postcss-sorting: 7.0.1_postcss@8.4.20 5645 postcss-sorting: 7.0.1_postcss@8.4.20
4977 - stylelint: 14.16.0 5646 + stylelint: 14.16.1
4978 dev: true 5647 dev: true
4979 5648
4980 - /stylelint/14.16.0:  
4981 - resolution: {integrity: sha512-X6uTi9DcxjzLV8ZUAjit1vsRtSwcls0nl07c9rqOPzvpA8IvTX/xWEkBRowS0ffevRrqkHa/ThDEu86u73FQDg==} 5649 + /stylelint/14.16.1:
  5650 + resolution: {integrity: sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A==}
4982 engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 5651 engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
4983 hasBin: true 5652 hasBin: true
4984 dependencies: 5653 dependencies:
@@ -5005,7 +5674,7 @@ packages: @@ -5005,7 +5674,7 @@ packages:
5005 micromatch: 4.0.5 5674 micromatch: 4.0.5
5006 normalize-path: 3.0.0 5675 normalize-path: 3.0.0
5007 picocolors: 1.0.0 5676 picocolors: 1.0.0
5008 - postcss: registry.npmmirror.com/postcss/8.4.20 5677 + postcss: 8.4.20
5009 postcss-media-query-parser: 0.2.3 5678 postcss-media-query-parser: 0.2.3
5010 postcss-resolve-nested-selector: 0.1.1 5679 postcss-resolve-nested-selector: 0.1.1
5011 postcss-safe-parser: 6.0.0_postcss@8.4.20 5680 postcss-safe-parser: 6.0.0_postcss@8.4.20
@@ -5024,6 +5693,25 @@ packages: @@ -5024,6 +5693,25 @@ packages:
5024 - supports-color 5693 - supports-color
5025 dev: true 5694 dev: true
5026 5695
  5696 + /supports-color/2.0.0:
  5697 + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==}
  5698 + engines: {node: '>=0.8.0'}
  5699 + dev: true
  5700 +
  5701 + /supports-color/3.2.3:
  5702 + resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==}
  5703 + engines: {node: '>=0.8.0'}
  5704 + dependencies:
  5705 + has-flag: 1.0.0
  5706 + dev: true
  5707 +
  5708 + /supports-color/5.5.0:
  5709 + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
  5710 + engines: {node: '>=4'}
  5711 + dependencies:
  5712 + has-flag: 3.0.0
  5713 + dev: true
  5714 +
5027 /supports-color/7.2.0: 5715 /supports-color/7.2.0:
5028 resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 5716 resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
5029 engines: {node: '>=8'} 5717 engines: {node: '>=8'}
@@ -5054,7 +5742,7 @@ packages: @@ -5054,7 +5742,7 @@ packages:
5054 loader-utils: 1.4.2 5742 loader-utils: 1.4.2
5055 merge-options: 1.0.1 5743 merge-options: 1.0.1
5056 micromatch: 3.1.0 5744 micromatch: 3.1.0
5057 - postcss: registry.npmmirror.com/postcss/5.2.18 5745 + postcss: 5.2.18
5058 postcss-prefix-selector: 1.16.0_postcss@5.2.18 5746 postcss-prefix-selector: 1.16.0_postcss@5.2.18
5059 posthtml-rename-id: 1.0.12 5747 posthtml-rename-id: 1.0.12
5060 posthtml-svg-mode: 1.0.3 5748 posthtml-svg-mode: 1.0.3
@@ -5078,10 +5766,14 @@ packages: @@ -5078,10 +5766,14 @@ packages:
5078 css-select: 4.3.0 5766 css-select: 4.3.0
5079 css-tree: 1.1.3 5767 css-tree: 1.1.3
5080 csso: 4.2.0 5768 csso: 4.2.0
5081 - picocolors: registry.npmmirror.com/picocolors/1.0.0 5769 + picocolors: 1.0.0
5082 stable: 0.1.8 5770 stable: 0.1.8
5083 dev: true 5771 dev: true
5084 5772
  5773 + /systemjs/6.13.0:
  5774 + 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}
  5775 + dev: true
  5776 +
5085 /table/6.8.1: 5777 /table/6.8.1:
5086 resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} 5778 resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==}
5087 engines: {node: '>=10.0.0'} 5779 engines: {node: '>=10.0.0'}
@@ -5127,6 +5819,10 @@ packages: @@ -5127,6 +5819,10 @@ packages:
5127 resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} 5819 resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==}
5128 dev: false 5820 dev: false
5129 5821
  5822 + /to-fast-properties/2.0.0:
  5823 + 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}
  5824 + engines: {node: '>=4'}
  5825 +
5130 /to-object-path/0.3.0: 5826 /to-object-path/0.3.0:
5131 resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} 5827 resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==}
5132 engines: {node: '>=0.10.0'} 5828 engines: {node: '>=0.10.0'}
@@ -5134,6 +5830,21 @@ packages: @@ -5134,6 +5830,21 @@ packages:
5134 kind-of: 3.2.2 5830 kind-of: 3.2.2
5135 dev: true 5831 dev: true
5136 5832
  5833 + /to-regex-range/2.1.1:
  5834 + 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}
  5835 + engines: {node: '>=0.10.0'}
  5836 + dependencies:
  5837 + is-number: 3.0.0
  5838 + repeat-string: 1.6.1
  5839 + dev: true
  5840 +
  5841 + /to-regex-range/5.0.1:
  5842 + 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}
  5843 + engines: {node: '>=8.0'}
  5844 + dependencies:
  5845 + is-number: 7.0.0
  5846 + dev: true
  5847 +
5137 /to-regex/3.0.2: 5848 /to-regex/3.0.2:
5138 resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} 5849 resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==}
5139 engines: {node: '>=0.10.0'} 5850 engines: {node: '>=0.10.0'}
@@ -5144,6 +5855,10 @@ packages: @@ -5144,6 +5855,10 @@ packages:
5144 safe-regex: 1.1.0 5855 safe-regex: 1.1.0
5145 dev: true 5856 dev: true
5146 5857
  5858 + /tr46/0.0.3:
  5859 + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/tr46/-/tr46-0.0.3.tgz}
  5860 + dev: true
  5861 +
5147 /traverse/0.6.7: 5862 /traverse/0.6.7:
5148 resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==} 5863 resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==}
5149 dev: true 5864 dev: true
@@ -5153,7 +5868,7 @@ packages: @@ -5153,7 +5868,7 @@ packages:
5153 engines: {node: '>=8'} 5868 engines: {node: '>=8'}
5154 dev: true 5869 dev: true
5155 5870
5156 - /ts-node/10.9.1_rju6pyblifsagdmqm3y74zsi6q: 5871 + /ts-node/10.9.1_awa2wsr5thmg3i7jqycphctjfq:
5157 resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} 5872 resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
5158 hasBin: true 5873 hasBin: true
5159 peerDependencies: 5874 peerDependencies:
@@ -5172,7 +5887,7 @@ packages: @@ -5172,7 +5887,7 @@ packages:
5172 '@tsconfig/node12': 1.0.11 5887 '@tsconfig/node12': 1.0.11
5173 '@tsconfig/node14': 1.0.3 5888 '@tsconfig/node14': 1.0.3
5174 '@tsconfig/node16': 1.0.3 5889 '@tsconfig/node16': 1.0.3
5175 - '@types/node': 14.18.33 5890 + '@types/node': 18.11.18
5176 acorn: 8.8.1 5891 acorn: 8.8.1
5177 acorn-walk: 8.2.0 5892 acorn-walk: 8.2.0
5178 arg: 4.1.3 5893 arg: 4.1.3
@@ -5188,6 +5903,10 @@ packages: @@ -5188,6 +5903,10 @@ packages:
5188 resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 5903 resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
5189 dev: true 5904 dev: true
5190 5905
  5906 + /tslib/2.3.0:
  5907 + resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/tslib/-/tslib-2.3.0.tgz}
  5908 + dev: false
  5909 +
5191 /tslib/2.4.1: 5910 /tslib/2.4.1:
5192 resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} 5911 resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==}
5193 dev: true 5912 dev: true
@@ -5287,19 +6006,19 @@ packages: @@ -5287,19 +6006,19 @@ packages:
5287 dependencies: 6006 dependencies:
5288 browserslist: 4.21.4 6007 browserslist: 4.21.4
5289 escalade: 3.1.1 6008 escalade: 3.1.1
5290 - picocolors: registry.npmmirror.com/picocolors/1.0.0 6009 + picocolors: 1.0.0
5291 dev: true 6010 dev: true
5292 6011
5293 /upper-case-first/2.0.2: 6012 /upper-case-first/2.0.2:
5294 resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} 6013 resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==}
5295 dependencies: 6014 dependencies:
5296 - tslib: registry.npmmirror.com/tslib/2.4.1 6015 + tslib: 2.4.1
5297 dev: true 6016 dev: true
5298 6017
5299 /upper-case/2.0.2: 6018 /upper-case/2.0.2:
5300 resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} 6019 resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==}
5301 dependencies: 6020 dependencies:
5302 - tslib: registry.npmmirror.com/tslib/2.4.1 6021 + tslib: 2.4.1
5303 dev: true 6022 dev: true
5304 6023
5305 /uri-js/4.4.1: 6024 /uri-js/4.4.1:
@@ -5349,7 +6068,7 @@ packages: @@ -5349,7 +6068,7 @@ packages:
5349 engines: {node: '>= 0.8'} 6068 engines: {node: '>= 0.8'}
5350 dev: true 6069 dev: true
5351 6070
5352 - /vite-plugin-compression/0.5.1_vite@4.0.3: 6071 + /vite-plugin-compression/0.5.1_vite@4.0.4:
5353 resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==} 6072 resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==}
5354 peerDependencies: 6073 peerDependencies:
5355 vite: '>=2.0.0' 6074 vite: '>=2.0.0'
@@ -5357,7 +6076,7 @@ packages: @@ -5357,7 +6076,7 @@ packages:
5357 chalk: 4.1.2 6076 chalk: 4.1.2
5358 debug: 4.3.4 6077 debug: 4.3.4
5359 fs-extra: 10.1.0 6078 fs-extra: 10.1.0
5360 - vite: 4.0.3_amyfslv6hdwxqbf7f4ldebbtce 6079 + vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i
5361 transitivePeerDependencies: 6080 transitivePeerDependencies:
5362 - supports-color 6081 - supports-color
5363 dev: true 6082 dev: true
@@ -5368,7 +6087,7 @@ packages: @@ -5368,7 +6087,7 @@ packages:
5368 ejs: 3.1.8 6087 ejs: 3.1.8
5369 dev: true 6088 dev: true
5370 6089
5371 - /vite-plugin-eslint/1.8.1_eslint@8.30.0+vite@4.0.3: 6090 + /vite-plugin-eslint/1.8.1_eslint@8.31.0+vite@4.0.4:
5372 resolution: {integrity: sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==} 6091 resolution: {integrity: sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==}
5373 peerDependencies: 6092 peerDependencies:
5374 eslint: '>=7' 6093 eslint: '>=7'
@@ -5376,12 +6095,12 @@ packages: @@ -5376,12 +6095,12 @@ packages:
5376 dependencies: 6095 dependencies:
5377 '@rollup/pluginutils': 4.2.1 6096 '@rollup/pluginutils': 4.2.1
5378 '@types/eslint': 8.4.10 6097 '@types/eslint': 8.4.10
5379 - eslint: 8.30.0 6098 + eslint: 8.31.0
5380 rollup: 2.79.1 6099 rollup: 2.79.1
5381 - vite: 4.0.3_amyfslv6hdwxqbf7f4ldebbtce 6100 + vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i
5382 dev: true 6101 dev: true
5383 6102
5384 - /vite-plugin-progress/0.0.6_vite@4.0.3: 6103 + /vite-plugin-progress/0.0.6_vite@4.0.4:
5385 resolution: {integrity: sha512-pIK2TVEY4XFGrz10CQDdEufBBCDaV0geRHfXV3abGTBr+OF9O0Zmd3ZDrHJXDv4Rl3qAQP4BTCuPYQ3XqstmqA==} 6104 resolution: {integrity: sha512-pIK2TVEY4XFGrz10CQDdEufBBCDaV0geRHfXV3abGTBr+OF9O0Zmd3ZDrHJXDv4Rl3qAQP4BTCuPYQ3XqstmqA==}
5386 engines: {node: '>=14', pnpm: '>=7.0.0'} 6105 engines: {node: '>=14', pnpm: '>=7.0.0'}
5387 peerDependencies: 6106 peerDependencies:
@@ -5390,10 +6109,25 @@ packages: @@ -5390,10 +6109,25 @@ packages:
5390 picocolors: 1.0.0 6109 picocolors: 1.0.0
5391 progress: 2.0.3 6110 progress: 2.0.3
5392 rd: 2.0.1 6111 rd: 2.0.1
5393 - vite: 4.0.3_amyfslv6hdwxqbf7f4ldebbtce 6112 + vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i
  6113 + dev: true
  6114 +
  6115 + /vite-plugin-purge-icons/0.9.2_vite@4.0.4:
  6116 + 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}
  6117 + engines: {node: '>= 12'}
  6118 + peerDependencies:
  6119 + vite: ^2.0.0 || ^3.0.0 || ^4.0.0
  6120 + dependencies:
  6121 + '@purge-icons/core': 0.9.1
  6122 + '@purge-icons/generated': 0.9.0
  6123 + rollup-plugin-purge-icons: 0.9.1
  6124 + vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i
  6125 + transitivePeerDependencies:
  6126 + - encoding
  6127 + - supports-color
5394 dev: true 6128 dev: true
5395 6129
5396 - /vite-plugin-style-import/2.0.0_vite@4.0.3: 6130 + /vite-plugin-style-import/2.0.0_vite@4.0.4:
5397 resolution: {integrity: sha512-qtoHQae5dSUQPo/rYz/8p190VU5y19rtBaeV7ryLa/AYAU/e9CG89NrN/3+k7MR8mJy/GPIu91iJ3zk9foUOSA==} 6131 resolution: {integrity: sha512-qtoHQae5dSUQPo/rYz/8p190VU5y19rtBaeV7ryLa/AYAU/e9CG89NrN/3+k7MR8mJy/GPIu91iJ3zk9foUOSA==}
5398 peerDependencies: 6132 peerDependencies:
5399 vite: '>=2.0.0' 6133 vite: '>=2.0.0'
@@ -5405,10 +6139,10 @@ packages: @@ -5405,10 +6139,10 @@ packages:
5405 fs-extra: 10.1.0 6139 fs-extra: 10.1.0
5406 magic-string: 0.25.9 6140 magic-string: 0.25.9
5407 pathe: 0.2.0 6141 pathe: 0.2.0
5408 - vite: 4.0.3_amyfslv6hdwxqbf7f4ldebbtce 6142 + vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i
5409 dev: true 6143 dev: true
5410 6144
5411 - /vite-plugin-svg-icons/2.0.1_vite@4.0.3: 6145 + /vite-plugin-svg-icons/2.0.1_vite@4.0.4:
5412 resolution: {integrity: sha512-6ktD+DhV6Rz3VtedYvBKKVA2eXF+sAQVaKkKLDSqGUfnhqXl3bj5PPkVTl3VexfTuZy66PmINi8Q6eFnVfRUmA==} 6146 resolution: {integrity: sha512-6ktD+DhV6Rz3VtedYvBKKVA2eXF+sAQVaKkKLDSqGUfnhqXl3bj5PPkVTl3VexfTuZy66PmINi8Q6eFnVfRUmA==}
5413 peerDependencies: 6147 peerDependencies:
5414 vite: '>=2.0.0' 6148 vite: '>=2.0.0'
@@ -5421,27 +6155,41 @@ packages: @@ -5421,27 +6155,41 @@ packages:
5421 pathe: 0.2.0 6155 pathe: 0.2.0
5422 svg-baker: 1.7.0 6156 svg-baker: 1.7.0
5423 svgo: 2.8.0 6157 svgo: 2.8.0
5424 - vite: 4.0.3_amyfslv6hdwxqbf7f4ldebbtce 6158 + vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i
5425 transitivePeerDependencies: 6159 transitivePeerDependencies:
5426 - supports-color 6160 - supports-color
5427 dev: true 6161 dev: true
5428 6162
5429 - /vite-plugin-vue-setup-extend/0.4.0_vite@4.0.3: 6163 + /vite-plugin-vue-setup-extend/0.4.0_vite@4.0.4:
5430 resolution: {integrity: sha512-WMbjPCui75fboFoUTHhdbXzu4Y/bJMv5N9QT9a7do3wNMNHHqrk+Tn2jrSJU0LS5fGl/EG+FEDBYVUeWIkDqXQ==} 6164 resolution: {integrity: sha512-WMbjPCui75fboFoUTHhdbXzu4Y/bJMv5N9QT9a7do3wNMNHHqrk+Tn2jrSJU0LS5fGl/EG+FEDBYVUeWIkDqXQ==}
5431 peerDependencies: 6165 peerDependencies:
5432 vite: '>=2.0.0' 6166 vite: '>=2.0.0'
5433 dependencies: 6167 dependencies:
5434 '@vue/compiler-sfc': 3.2.45 6168 '@vue/compiler-sfc': 3.2.45
5435 magic-string: 0.25.9 6169 magic-string: 0.25.9
5436 - vite: 4.0.3_amyfslv6hdwxqbf7f4ldebbtce 6170 + vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i
5437 dev: true 6171 dev: true
5438 6172
5439 - /vite/4.0.3_amyfslv6hdwxqbf7f4ldebbtce:  
5440 - resolution: {integrity: sha512-HvuNv1RdE7deIfQb8mPk51UKjqptO/4RXZ5yXSAvurd5xOckwS/gg8h9Tky3uSbnjYTgUm0hVCet1cyhKd73ZA==}  
5441 - engines: {node: ^14.18.0 || >=16.0.0}  
5442 - hasBin: true 6173 + /vite-plugin-windicss/1.8.10_vite@4.0.4:
  6174 + 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}
5443 peerDependencies: 6175 peerDependencies:
5444 - '@types/node': '>= 14' 6176 + vite: ^2.0.1 || ^3.0.0 || ^4.0.0
  6177 + dependencies:
  6178 + '@windicss/plugin-utils': 1.8.10
  6179 + debug: 4.3.4
  6180 + kolorist: 1.6.0
  6181 + vite: 4.0.4_zxbrnrc4iyldik6mikh3pswz4i
  6182 + windicss: 3.5.6
  6183 + transitivePeerDependencies:
  6184 + - supports-color
  6185 + dev: true
  6186 +
  6187 + /vite/4.0.4_zxbrnrc4iyldik6mikh3pswz4i:
  6188 + resolution: {integrity: sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==}
  6189 + engines: {node: ^14.18.0 || >=16.0.0}
  6190 + hasBin: true
  6191 + peerDependencies:
  6192 + '@types/node': '>= 14'
5445 less: '*' 6193 less: '*'
5446 sass: '*' 6194 sass: '*'
5447 stylus: '*' 6195 stylus: '*'
@@ -5461,11 +6209,11 @@ packages: @@ -5461,11 +6209,11 @@ packages:
5461 terser: 6209 terser:
5462 optional: true 6210 optional: true
5463 dependencies: 6211 dependencies:
5464 - '@types/node': 18.11.17 6212 + '@types/node': 18.11.18
5465 esbuild: 0.16.5 6213 esbuild: 0.16.5
5466 postcss: 8.4.20 6214 postcss: 8.4.20
5467 resolve: 1.22.1 6215 resolve: 1.22.1
5468 - rollup: 3.8.1 6216 + rollup: 3.9.1
5469 sass: 1.57.1 6217 sass: 1.57.1
5470 terser: 5.16.1 6218 terser: 5.16.1
5471 optionalDependencies: 6219 optionalDependencies:
@@ -5487,14 +6235,14 @@ packages: @@ -5487,14 +6235,14 @@ packages:
5487 vue: 3.2.45 6235 vue: 3.2.45
5488 dev: false 6236 dev: false
5489 6237
5490 - /vue-eslint-parser/9.1.0_eslint@8.30.0: 6238 + /vue-eslint-parser/9.1.0_eslint@8.31.0:
5491 resolution: {integrity: sha512-NGn/iQy8/Wb7RrRa4aRkokyCZfOUWk19OP5HP6JEozQFX5AoS/t+Z0ZN7FY4LlmWc4FNI922V7cvX28zctN8dQ==} 6239 resolution: {integrity: sha512-NGn/iQy8/Wb7RrRa4aRkokyCZfOUWk19OP5HP6JEozQFX5AoS/t+Z0ZN7FY4LlmWc4FNI922V7cvX28zctN8dQ==}
5492 engines: {node: ^14.17.0 || >=16.0.0} 6240 engines: {node: ^14.17.0 || >=16.0.0}
5493 peerDependencies: 6241 peerDependencies:
5494 eslint: '>=6.0.0' 6242 eslint: '>=6.0.0'
5495 dependencies: 6243 dependencies:
5496 debug: 4.3.4 6244 debug: 4.3.4
5497 - eslint: 8.30.0 6245 + eslint: 8.31.0
5498 eslint-scope: 7.1.1 6246 eslint-scope: 7.1.1
5499 eslint-visitor-keys: 3.3.0 6247 eslint-visitor-keys: 3.3.0
5500 espree: 9.4.1 6248 espree: 9.4.1
@@ -5533,14 +6281,14 @@ packages: @@ -5533,14 +6281,14 @@ packages:
5533 he: 1.2.0 6281 he: 1.2.0
5534 dev: true 6282 dev: true
5535 6283
5536 - /vue-tsc/1.0.16_typescript@4.9.4:  
5537 - resolution: {integrity: sha512-yZaiJBbcKR1rSLhiF9KryAFH7R63po+N/invr2EAHGXxMzZksE5j1zyQKvrYiqK47ZHLAlCR+re/PHqWp/UzTg==} 6284 + /vue-tsc/1.0.22_typescript@4.9.4:
  6285 + resolution: {integrity: sha512-xSxwgWR3czhv7sLKHWu6lzj9Xq6AtsCURVL45AY4TLGFszv2L2YlMgygXvqslyCM5bz9cyoIKSaZnzHqHTHjzA==}
5538 hasBin: true 6286 hasBin: true
5539 peerDependencies: 6287 peerDependencies:
5540 typescript: '*' 6288 typescript: '*'
5541 dependencies: 6289 dependencies:
5542 - '@volar/vue-language-core': 1.0.16  
5543 - '@volar/vue-typescript': 1.0.16 6290 + '@volar/vue-language-core': 1.0.22
  6291 + '@volar/vue-typescript': 1.0.22
5544 typescript: 4.9.4 6292 typescript: 4.9.4
5545 dev: true 6293 dev: true
5546 6294
@@ -5566,10 +6314,24 @@ packages: @@ -5566,10 +6314,24 @@ packages:
5566 '@vue/server-renderer': 3.2.45_vue@3.2.45 6314 '@vue/server-renderer': 3.2.45_vue@3.2.45
5567 '@vue/shared': 3.2.45 6315 '@vue/shared': 3.2.45
5568 6316
  6317 + /vxe-table/4.3.7_vue@3.2.45+xe-utils@3.5.7:
  6318 + resolution: {integrity: sha512-v+d7eEQ5uqtVTQCts4xkW0S15LZcIuEukYHGXI53SdoUj2gLFggPYAxQr1y659CM/ESRWPz9LNVHpd97KkjGHw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/vxe-table/-/vxe-table-4.3.7.tgz}
  6319 + peerDependencies:
  6320 + vue: ^3.2.28
  6321 + xe-utils: ^3.5.0
  6322 + dependencies:
  6323 + vue: 3.2.45
  6324 + xe-utils: 3.5.7
  6325 + dev: false
  6326 +
5569 /web-storage-cache/1.1.1: 6327 /web-storage-cache/1.1.1:
5570 resolution: {integrity: sha512-D0MieGooOs8RpsrK+vnejXnvh4OOv/+lTFB35JRkJJQt+uOjPE08XpaE0QBLMTRu47B1KGT/Nq3Gbag3Orinzw==} 6328 resolution: {integrity: sha512-D0MieGooOs8RpsrK+vnejXnvh4OOv/+lTFB35JRkJJQt+uOjPE08XpaE0QBLMTRu47B1KGT/Nq3Gbag3Orinzw==}
5571 dev: false 6329 dev: false
5572 6330
  6331 + /webidl-conversions/3.0.1:
  6332 + 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}
  6333 + dev: true
  6334 +
5573 /webpack-sources/3.2.3: 6335 /webpack-sources/3.2.3:
5574 resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} 6336 resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
5575 engines: {node: '>=10.13.0'} 6337 engines: {node: '>=10.13.0'}
@@ -5579,6 +6341,13 @@ packages: @@ -5579,6 +6341,13 @@ packages:
5579 resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} 6341 resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==}
5580 dev: true 6342 dev: true
5581 6343
  6344 + /whatwg-url/5.0.0:
  6345 + 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}
  6346 + dependencies:
  6347 + tr46: 0.0.3
  6348 + webidl-conversions: 3.0.1
  6349 + dev: true
  6350 +
5582 /which-module/2.0.0: 6351 /which-module/2.0.0:
5583 resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} 6352 resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==}
5584 dev: false 6353 dev: false
@@ -5617,7 +6386,7 @@ packages: @@ -5617,7 +6386,7 @@ packages:
5617 resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} 6386 resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
5618 engines: {node: '>=8'} 6387 engines: {node: '>=8'}
5619 dependencies: 6388 dependencies:
5620 - ansi-styles: registry.npmmirror.com/ansi-styles/4.3.0 6389 + ansi-styles: 4.3.0
5621 string-width: 4.2.3 6390 string-width: 4.2.3
5622 strip-ansi: 6.0.1 6391 strip-ansi: 6.0.1
5623 6392
@@ -5686,7 +6455,7 @@ packages: @@ -5686,7 +6455,7 @@ packages:
5686 resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} 6455 resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
5687 engines: {node: '>=6'} 6456 engines: {node: '>=6'}
5688 dependencies: 6457 dependencies:
5689 - camelcase: registry.npmmirror.com/camelcase/5.3.1 6458 + camelcase: 5.3.1
5690 decamelize: 1.2.0 6459 decamelize: 1.2.0
5691 dev: false 6460 dev: false
5692 6461
@@ -5740,1398 +6509,8 @@ packages: @@ -5740,1398 +6509,8 @@ packages:
5740 engines: {node: '>=10'} 6509 engines: {node: '>=10'}
5741 dev: true 6510 dev: true
5742 6511
5743 - registry.npmmirror.com/@ampproject/remapping/2.2.0:  
5744 - resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.0.tgz}  
5745 - name: '@ampproject/remapping'  
5746 - version: 2.2.0  
5747 - engines: {node: '>=6.0.0'}  
5748 - dependencies:  
5749 - '@jridgewell/gen-mapping': registry.npmmirror.com/@jridgewell/gen-mapping/0.1.1  
5750 - '@jridgewell/trace-mapping': registry.npmmirror.com/@jridgewell/trace-mapping/0.3.17  
5751 - dev: true  
5752 -  
5753 - registry.npmmirror.com/@antfu/utils/0.7.2:  
5754 - 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}  
5755 - name: '@antfu/utils'  
5756 - version: 0.7.2  
5757 - dev: true  
5758 -  
5759 - registry.npmmirror.com/@babel/code-frame/7.18.6:  
5760 - 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}  
5761 - name: '@babel/code-frame'  
5762 - version: 7.18.6  
5763 - engines: {node: '>=6.9.0'}  
5764 - dependencies:  
5765 - '@babel/highlight': registry.npmmirror.com/@babel/highlight/7.18.6  
5766 - dev: true  
5767 -  
5768 - registry.npmmirror.com/@babel/compat-data/7.20.1:  
5769 - 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}  
5770 - name: '@babel/compat-data'  
5771 - version: 7.20.1  
5772 - engines: {node: '>=6.9.0'}  
5773 - dev: true  
5774 -  
5775 - registry.npmmirror.com/@babel/core/7.20.5:  
5776 - resolution: {integrity: sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/core/-/core-7.20.5.tgz}  
5777 - name: '@babel/core'  
5778 - version: 7.20.5  
5779 - engines: {node: '>=6.9.0'}  
5780 - dependencies:  
5781 - '@ampproject/remapping': registry.npmmirror.com/@ampproject/remapping/2.2.0  
5782 - '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.18.6  
5783 - '@babel/generator': registry.npmmirror.com/@babel/generator/7.20.5  
5784 - '@babel/helper-compilation-targets': registry.npmmirror.com/@babel/helper-compilation-targets/7.20.0_@babel+core@7.20.5  
5785 - '@babel/helper-module-transforms': registry.npmmirror.com/@babel/helper-module-transforms/7.20.2  
5786 - '@babel/helpers': registry.npmmirror.com/@babel/helpers/7.20.6  
5787 - '@babel/parser': registry.npmmirror.com/@babel/parser/7.20.5  
5788 - '@babel/template': registry.npmmirror.com/@babel/template/7.18.10  
5789 - '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.20.5  
5790 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.5  
5791 - convert-source-map: registry.npmmirror.com/convert-source-map/1.9.0  
5792 - debug: 4.3.4  
5793 - gensync: registry.npmmirror.com/gensync/1.0.0-beta.2  
5794 - json5: registry.npmmirror.com/json5/2.2.1  
5795 - semver: registry.npmmirror.com/semver/6.3.0  
5796 - transitivePeerDependencies:  
5797 - - supports-color  
5798 - dev: true  
5799 -  
5800 - registry.npmmirror.com/@babel/generator/7.20.5:  
5801 - resolution: {integrity: sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/generator/-/generator-7.20.5.tgz}  
5802 - name: '@babel/generator'  
5803 - version: 7.20.5  
5804 - engines: {node: '>=6.9.0'}  
5805 - dependencies:  
5806 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.5  
5807 - '@jridgewell/gen-mapping': registry.npmmirror.com/@jridgewell/gen-mapping/0.3.2  
5808 - jsesc: registry.npmmirror.com/jsesc/2.5.2  
5809 - dev: true  
5810 -  
5811 - registry.npmmirror.com/@babel/helper-annotate-as-pure/7.18.6:  
5812 - 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}  
5813 - name: '@babel/helper-annotate-as-pure'  
5814 - version: 7.18.6  
5815 - engines: {node: '>=6.9.0'}  
5816 - dependencies:  
5817 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.5  
5818 - dev: true  
5819 -  
5820 - registry.npmmirror.com/@babel/helper-compilation-targets/7.20.0_@babel+core@7.20.5:  
5821 - 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}  
5822 - id: registry.npmmirror.com/@babel/helper-compilation-targets/7.20.0  
5823 - name: '@babel/helper-compilation-targets'  
5824 - version: 7.20.0  
5825 - engines: {node: '>=6.9.0'}  
5826 - peerDependencies:  
5827 - '@babel/core': ^7.0.0  
5828 - dependencies:  
5829 - '@babel/compat-data': registry.npmmirror.com/@babel/compat-data/7.20.1  
5830 - '@babel/core': registry.npmmirror.com/@babel/core/7.20.5  
5831 - '@babel/helper-validator-option': registry.npmmirror.com/@babel/helper-validator-option/7.18.6  
5832 - browserslist: registry.npmmirror.com/browserslist/4.21.4  
5833 - semver: registry.npmmirror.com/semver/6.3.0  
5834 - dev: true  
5835 -  
5836 - registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.20.2_@babel+core@7.20.5:  
5837 - 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}  
5838 - id: registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.20.2  
5839 - name: '@babel/helper-create-class-features-plugin'  
5840 - version: 7.20.2  
5841 - engines: {node: '>=6.9.0'}  
5842 - peerDependencies:  
5843 - '@babel/core': ^7.0.0  
5844 - dependencies:  
5845 - '@babel/core': registry.npmmirror.com/@babel/core/7.20.5  
5846 - '@babel/helper-annotate-as-pure': registry.npmmirror.com/@babel/helper-annotate-as-pure/7.18.6  
5847 - '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.18.9  
5848 - '@babel/helper-function-name': registry.npmmirror.com/@babel/helper-function-name/7.19.0  
5849 - '@babel/helper-member-expression-to-functions': registry.npmmirror.com/@babel/helper-member-expression-to-functions/7.18.9  
5850 - '@babel/helper-optimise-call-expression': registry.npmmirror.com/@babel/helper-optimise-call-expression/7.18.6  
5851 - '@babel/helper-replace-supers': registry.npmmirror.com/@babel/helper-replace-supers/7.19.1  
5852 - '@babel/helper-split-export-declaration': registry.npmmirror.com/@babel/helper-split-export-declaration/7.18.6  
5853 - transitivePeerDependencies:  
5854 - - supports-color  
5855 - dev: true  
5856 -  
5857 - registry.npmmirror.com/@babel/helper-environment-visitor/7.18.9:  
5858 - 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}  
5859 - name: '@babel/helper-environment-visitor'  
5860 - version: 7.18.9  
5861 - engines: {node: '>=6.9.0'}  
5862 - dev: true  
5863 -  
5864 - registry.npmmirror.com/@babel/helper-function-name/7.19.0:  
5865 - 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}  
5866 - name: '@babel/helper-function-name'  
5867 - version: 7.19.0  
5868 - engines: {node: '>=6.9.0'}  
5869 - dependencies:  
5870 - '@babel/template': registry.npmmirror.com/@babel/template/7.18.10  
5871 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.5  
5872 - dev: true  
5873 -  
5874 - registry.npmmirror.com/@babel/helper-hoist-variables/7.18.6:  
5875 - 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}  
5876 - name: '@babel/helper-hoist-variables'  
5877 - version: 7.18.6  
5878 - engines: {node: '>=6.9.0'}  
5879 - dependencies:  
5880 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.5  
5881 - dev: true  
5882 -  
5883 - registry.npmmirror.com/@babel/helper-member-expression-to-functions/7.18.9:  
5884 - 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}  
5885 - name: '@babel/helper-member-expression-to-functions'  
5886 - version: 7.18.9  
5887 - engines: {node: '>=6.9.0'}  
5888 - dependencies:  
5889 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.5  
5890 - dev: true  
5891 -  
5892 - registry.npmmirror.com/@babel/helper-module-imports/7.18.6:  
5893 - 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}  
5894 - name: '@babel/helper-module-imports'  
5895 - version: 7.18.6  
5896 - engines: {node: '>=6.9.0'}  
5897 - dependencies:  
5898 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.5  
5899 - dev: true  
5900 -  
5901 - registry.npmmirror.com/@babel/helper-module-transforms/7.20.2:  
5902 - 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}  
5903 - name: '@babel/helper-module-transforms'  
5904 - version: 7.20.2  
5905 - engines: {node: '>=6.9.0'}  
5906 - dependencies:  
5907 - '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.18.9  
5908 - '@babel/helper-module-imports': registry.npmmirror.com/@babel/helper-module-imports/7.18.6  
5909 - '@babel/helper-simple-access': registry.npmmirror.com/@babel/helper-simple-access/7.20.2  
5910 - '@babel/helper-split-export-declaration': registry.npmmirror.com/@babel/helper-split-export-declaration/7.18.6  
5911 - '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier/7.19.1  
5912 - '@babel/template': registry.npmmirror.com/@babel/template/7.18.10  
5913 - '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.20.5  
5914 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.5  
5915 - transitivePeerDependencies:  
5916 - - supports-color  
5917 - dev: true  
5918 -  
5919 - registry.npmmirror.com/@babel/helper-optimise-call-expression/7.18.6:  
5920 - 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}  
5921 - name: '@babel/helper-optimise-call-expression'  
5922 - version: 7.18.6  
5923 - engines: {node: '>=6.9.0'}  
5924 - dependencies:  
5925 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.5  
5926 - dev: true  
5927 -  
5928 - registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2:  
5929 - 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}  
5930 - name: '@babel/helper-plugin-utils'  
5931 - version: 7.20.2  
5932 - engines: {node: '>=6.9.0'}  
5933 - dev: true  
5934 -  
5935 - registry.npmmirror.com/@babel/helper-replace-supers/7.19.1:  
5936 - 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}  
5937 - name: '@babel/helper-replace-supers'  
5938 - version: 7.19.1  
5939 - engines: {node: '>=6.9.0'}  
5940 - dependencies:  
5941 - '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.18.9  
5942 - '@babel/helper-member-expression-to-functions': registry.npmmirror.com/@babel/helper-member-expression-to-functions/7.18.9  
5943 - '@babel/helper-optimise-call-expression': registry.npmmirror.com/@babel/helper-optimise-call-expression/7.18.6  
5944 - '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.20.5  
5945 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.5  
5946 - transitivePeerDependencies:  
5947 - - supports-color  
5948 - dev: true  
5949 -  
5950 - registry.npmmirror.com/@babel/helper-simple-access/7.20.2:  
5951 - 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}  
5952 - name: '@babel/helper-simple-access'  
5953 - version: 7.20.2  
5954 - engines: {node: '>=6.9.0'}  
5955 - dependencies:  
5956 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.5  
5957 - dev: true  
5958 -  
5959 - registry.npmmirror.com/@babel/helper-split-export-declaration/7.18.6:  
5960 - 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}  
5961 - name: '@babel/helper-split-export-declaration'  
5962 - version: 7.18.6  
5963 - engines: {node: '>=6.9.0'}  
5964 - dependencies:  
5965 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.5  
5966 - dev: true  
5967 -  
5968 - registry.npmmirror.com/@babel/helper-string-parser/7.19.4:  
5969 - 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}  
5970 - name: '@babel/helper-string-parser'  
5971 - version: 7.19.4  
5972 - engines: {node: '>=6.9.0'}  
5973 -  
5974 - registry.npmmirror.com/@babel/helper-validator-identifier/7.19.1:  
5975 - 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}  
5976 - name: '@babel/helper-validator-identifier'  
5977 - version: 7.19.1  
5978 - engines: {node: '>=6.9.0'}  
5979 -  
5980 - registry.npmmirror.com/@babel/helper-validator-option/7.18.6:  
5981 - 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}  
5982 - name: '@babel/helper-validator-option'  
5983 - version: 7.18.6  
5984 - engines: {node: '>=6.9.0'}  
5985 - dev: true  
5986 -  
5987 - registry.npmmirror.com/@babel/helpers/7.20.6:  
5988 - resolution: {integrity: sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/helpers/-/helpers-7.20.6.tgz}  
5989 - name: '@babel/helpers'  
5990 - version: 7.20.6  
5991 - engines: {node: '>=6.9.0'}  
5992 - dependencies:  
5993 - '@babel/template': registry.npmmirror.com/@babel/template/7.18.10  
5994 - '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.20.5  
5995 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.5  
5996 - transitivePeerDependencies:  
5997 - - supports-color  
5998 - dev: true  
5999 -  
6000 - registry.npmmirror.com/@babel/highlight/7.18.6:  
6001 - resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/highlight/-/highlight-7.18.6.tgz}  
6002 - name: '@babel/highlight'  
6003 - version: 7.18.6  
6004 - engines: {node: '>=6.9.0'}  
6005 - dependencies:  
6006 - '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier/7.19.1  
6007 - chalk: 2.4.2  
6008 - js-tokens: registry.npmmirror.com/js-tokens/4.0.0  
6009 - dev: true  
6010 -  
6011 - registry.npmmirror.com/@babel/parser/7.20.5:  
6012 - 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}  
6013 - name: '@babel/parser'  
6014 - version: 7.20.5  
6015 - engines: {node: '>=6.0.0'}  
6016 - hasBin: true  
6017 - dependencies:  
6018 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.5  
6019 -  
6020 - registry.npmmirror.com/@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.5:  
6021 - 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}  
6022 - id: registry.npmmirror.com/@babel/plugin-syntax-jsx/7.18.6  
6023 - name: '@babel/plugin-syntax-jsx'  
6024 - version: 7.18.6  
6025 - engines: {node: '>=6.9.0'}  
6026 - peerDependencies:  
6027 - '@babel/core': ^7.0.0-0  
6028 - dependencies:  
6029 - '@babel/core': registry.npmmirror.com/@babel/core/7.20.5  
6030 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2  
6031 - dev: true  
6032 -  
6033 - registry.npmmirror.com/@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.20.5:  
6034 - 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}  
6035 - id: registry.npmmirror.com/@babel/plugin-syntax-typescript/7.20.0  
6036 - name: '@babel/plugin-syntax-typescript'  
6037 - version: 7.20.0  
6038 - engines: {node: '>=6.9.0'}  
6039 - peerDependencies:  
6040 - '@babel/core': ^7.0.0-0  
6041 - dependencies:  
6042 - '@babel/core': registry.npmmirror.com/@babel/core/7.20.5  
6043 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2  
6044 - dev: true  
6045 -  
6046 - registry.npmmirror.com/@babel/plugin-transform-typescript/7.20.2_@babel+core@7.20.5:  
6047 - 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}  
6048 - id: registry.npmmirror.com/@babel/plugin-transform-typescript/7.20.2  
6049 - name: '@babel/plugin-transform-typescript'  
6050 - version: 7.20.2  
6051 - engines: {node: '>=6.9.0'}  
6052 - peerDependencies:  
6053 - '@babel/core': ^7.0.0-0  
6054 - dependencies:  
6055 - '@babel/core': registry.npmmirror.com/@babel/core/7.20.5  
6056 - '@babel/helper-create-class-features-plugin': registry.npmmirror.com/@babel/helper-create-class-features-plugin/7.20.2_@babel+core@7.20.5  
6057 - '@babel/helper-plugin-utils': registry.npmmirror.com/@babel/helper-plugin-utils/7.20.2  
6058 - '@babel/plugin-syntax-typescript': registry.npmmirror.com/@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.20.5  
6059 - transitivePeerDependencies:  
6060 - - supports-color  
6061 - dev: true  
6062 -  
6063 - registry.npmmirror.com/@babel/standalone/7.20.6:  
6064 - resolution: {integrity: sha512-u5at/CbBLETf7kx2LOY4XdhseD79Y099WZKAOMXeT8qvd9OSR515my2UNBBLY4qIht/Qi9KySeQHQwQwxJN4Sw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/standalone/-/standalone-7.20.6.tgz}  
6065 - name: '@babel/standalone'  
6066 - version: 7.20.6  
6067 - engines: {node: '>=6.9.0'}  
6068 - dev: true  
6069 -  
6070 - registry.npmmirror.com/@babel/template/7.18.10:  
6071 - resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/template/-/template-7.18.10.tgz}  
6072 - name: '@babel/template'  
6073 - version: 7.18.10  
6074 - engines: {node: '>=6.9.0'}  
6075 - dependencies:  
6076 - '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.18.6  
6077 - '@babel/parser': registry.npmmirror.com/@babel/parser/7.20.5  
6078 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.5  
6079 - dev: true  
6080 -  
6081 - registry.npmmirror.com/@babel/traverse/7.20.1:  
6082 - resolution: {integrity: sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/traverse/-/traverse-7.20.1.tgz}  
6083 - name: '@babel/traverse'  
6084 - version: 7.20.1  
6085 - engines: {node: '>=6.9.0'}  
6086 - dependencies:  
6087 - '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.18.6  
6088 - '@babel/generator': registry.npmmirror.com/@babel/generator/7.20.5  
6089 - '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.18.9  
6090 - '@babel/helper-function-name': registry.npmmirror.com/@babel/helper-function-name/7.19.0  
6091 - '@babel/helper-hoist-variables': registry.npmmirror.com/@babel/helper-hoist-variables/7.18.6  
6092 - '@babel/helper-split-export-declaration': registry.npmmirror.com/@babel/helper-split-export-declaration/7.18.6  
6093 - '@babel/parser': registry.npmmirror.com/@babel/parser/7.20.5  
6094 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.5  
6095 - debug: 4.3.4  
6096 - globals: 11.12.0  
6097 - transitivePeerDependencies:  
6098 - - supports-color  
6099 - dev: true  
6100 -  
6101 - registry.npmmirror.com/@babel/traverse/7.20.5:  
6102 - resolution: {integrity: sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@babel/traverse/-/traverse-7.20.5.tgz}  
6103 - name: '@babel/traverse'  
6104 - version: 7.20.5  
6105 - engines: {node: '>=6.9.0'}  
6106 - dependencies:  
6107 - '@babel/code-frame': registry.npmmirror.com/@babel/code-frame/7.18.6  
6108 - '@babel/generator': registry.npmmirror.com/@babel/generator/7.20.5  
6109 - '@babel/helper-environment-visitor': registry.npmmirror.com/@babel/helper-environment-visitor/7.18.9  
6110 - '@babel/helper-function-name': registry.npmmirror.com/@babel/helper-function-name/7.19.0  
6111 - '@babel/helper-hoist-variables': registry.npmmirror.com/@babel/helper-hoist-variables/7.18.6  
6112 - '@babel/helper-split-export-declaration': registry.npmmirror.com/@babel/helper-split-export-declaration/7.18.6  
6113 - '@babel/parser': registry.npmmirror.com/@babel/parser/7.20.5  
6114 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.5  
6115 - debug: 4.3.4  
6116 - globals: 11.12.0  
6117 - transitivePeerDependencies:  
6118 - - supports-color  
6119 - dev: true  
6120 -  
6121 - registry.npmmirror.com/@babel/types/7.20.2:  
6122 - 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}  
6123 - name: '@babel/types'  
6124 - version: 7.20.2  
6125 - engines: {node: '>=6.9.0'}  
6126 - dependencies:  
6127 - '@babel/helper-string-parser': registry.npmmirror.com/@babel/helper-string-parser/7.19.4  
6128 - '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier/7.19.1  
6129 - to-fast-properties: registry.npmmirror.com/to-fast-properties/2.0.0  
6130 - dev: true  
6131 -  
6132 - registry.npmmirror.com/@babel/types/7.20.5:  
6133 - 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}  
6134 - name: '@babel/types'  
6135 - version: 7.20.5  
6136 - engines: {node: '>=6.9.0'}  
6137 - dependencies:  
6138 - '@babel/helper-string-parser': registry.npmmirror.com/@babel/helper-string-parser/7.19.4  
6139 - '@babel/helper-validator-identifier': registry.npmmirror.com/@babel/helper-validator-identifier/7.19.1  
6140 - to-fast-properties: registry.npmmirror.com/to-fast-properties/2.0.0  
6141 -  
6142 - registry.npmmirror.com/@iconify/iconify/2.1.2:  
6143 - 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}  
6144 - name: '@iconify/iconify'  
6145 - version: 2.1.2  
6146 - dependencies:  
6147 - cross-fetch: registry.npmmirror.com/cross-fetch/3.1.5  
6148 - transitivePeerDependencies:  
6149 - - encoding  
6150 - dev: true  
6151 -  
6152 - registry.npmmirror.com/@iconify/iconify/3.0.1:  
6153 - resolution: {integrity: sha512-OPqVBTh8YsfrYZRVFv3OkmFNLqacM0dy/Oiw1h2wO+RZW5LieNGHlG2f9pzaeVRFWbEB8LHTeo8mcwgUTUbibQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@iconify/iconify/-/iconify-3.0.1.tgz}  
6154 - name: '@iconify/iconify'  
6155 - version: 3.0.1  
6156 - dependencies:  
6157 - '@iconify/types': 2.0.0  
6158 - dev: true  
6159 -  
6160 - registry.npmmirror.com/@jridgewell/gen-mapping/0.1.1:  
6161 - 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}  
6162 - name: '@jridgewell/gen-mapping'  
6163 - version: 0.1.1  
6164 - engines: {node: '>=6.0.0'}  
6165 - dependencies:  
6166 - '@jridgewell/set-array': registry.npmmirror.com/@jridgewell/set-array/1.1.2  
6167 - '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14  
6168 - dev: true  
6169 -  
6170 - registry.npmmirror.com/@jridgewell/gen-mapping/0.3.2:  
6171 - 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}  
6172 - name: '@jridgewell/gen-mapping'  
6173 - version: 0.3.2  
6174 - engines: {node: '>=6.0.0'}  
6175 - dependencies:  
6176 - '@jridgewell/set-array': registry.npmmirror.com/@jridgewell/set-array/1.1.2  
6177 - '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14  
6178 - '@jridgewell/trace-mapping': registry.npmmirror.com/@jridgewell/trace-mapping/0.3.17  
6179 - dev: true  
6180 -  
6181 - registry.npmmirror.com/@jridgewell/resolve-uri/3.1.0:  
6182 - 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}  
6183 - name: '@jridgewell/resolve-uri'  
6184 - version: 3.1.0  
6185 - engines: {node: '>=6.0.0'}  
6186 - dev: true  
6187 -  
6188 - registry.npmmirror.com/@jridgewell/set-array/1.1.2:  
6189 - 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}  
6190 - name: '@jridgewell/set-array'  
6191 - version: 1.1.2  
6192 - engines: {node: '>=6.0.0'}  
6193 - dev: true  
6194 -  
6195 - registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14:  
6196 - 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}  
6197 - name: '@jridgewell/sourcemap-codec'  
6198 - version: 1.4.14  
6199 - dev: true  
6200 -  
6201 - registry.npmmirror.com/@jridgewell/trace-mapping/0.3.17:  
6202 - 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}  
6203 - name: '@jridgewell/trace-mapping'  
6204 - version: 0.3.17  
6205 - dependencies:  
6206 - '@jridgewell/resolve-uri': registry.npmmirror.com/@jridgewell/resolve-uri/3.1.0  
6207 - '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14  
6208 - dev: true  
6209 -  
6210 - registry.npmmirror.com/@jridgewell/trace-mapping/0.3.9:  
6211 - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz}  
6212 - name: '@jridgewell/trace-mapping'  
6213 - version: 0.3.9  
6214 - dependencies:  
6215 - '@jridgewell/resolve-uri': registry.npmmirror.com/@jridgewell/resolve-uri/3.1.0  
6216 - '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14  
6217 - dev: true  
6218 -  
6219 - registry.npmmirror.com/@nodelib/fs.stat/2.0.5:  
6220 - 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}  
6221 - name: '@nodelib/fs.stat'  
6222 - version: 2.0.5  
6223 - engines: {node: '>= 8'}  
6224 - dev: true  
6225 -  
6226 - registry.npmmirror.com/@purge-icons/core/0.9.1:  
6227 - 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}  
6228 - name: '@purge-icons/core'  
6229 - version: 0.9.1  
6230 - dependencies:  
6231 - '@iconify/iconify': registry.npmmirror.com/@iconify/iconify/2.1.2  
6232 - axios: registry.npmmirror.com/axios/0.26.1_debug@4.3.4  
6233 - debug: 4.3.4  
6234 - fast-glob: registry.npmmirror.com/fast-glob/3.2.12  
6235 - fs-extra: registry.npmmirror.com/fs-extra/10.1.0  
6236 - transitivePeerDependencies:  
6237 - - encoding  
6238 - - supports-color  
6239 - dev: true  
6240 -  
6241 - registry.npmmirror.com/@purge-icons/generated/0.9.0:  
6242 - 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}  
6243 - name: '@purge-icons/generated'  
6244 - version: 0.9.0  
6245 - dependencies:  
6246 - '@iconify/iconify': registry.npmmirror.com/@iconify/iconify/3.0.1  
6247 - dev: true  
6248 -  
6249 - registry.npmmirror.com/@vitejs/plugin-legacy/3.0.1_terser@5.16.1+vite@4.0.3:  
6250 - 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}  
6251 - id: registry.npmmirror.com/@vitejs/plugin-legacy/3.0.1  
6252 - name: '@vitejs/plugin-legacy'  
6253 - version: 3.0.1  
6254 - engines: {node: ^14.18.0 || >=16.0.0}  
6255 - peerDependencies:  
6256 - terser: ^5.4.0  
6257 - vite: ^4.0.0  
6258 - dependencies:  
6259 - '@babel/standalone': registry.npmmirror.com/@babel/standalone/7.20.6  
6260 - core-js: registry.npmmirror.com/core-js/3.26.1  
6261 - magic-string: registry.npmmirror.com/magic-string/0.27.0  
6262 - regenerator-runtime: registry.npmmirror.com/regenerator-runtime/0.13.11  
6263 - systemjs: registry.npmmirror.com/systemjs/6.13.0  
6264 - terser: 5.16.1  
6265 - vite: 4.0.3_amyfslv6hdwxqbf7f4ldebbtce  
6266 - dev: true  
6267 -  
6268 - registry.npmmirror.com/@vitejs/plugin-vue-jsx/3.0.0_vite@4.0.3+vue@3.2.45:  
6269 - 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}  
6270 - id: registry.npmmirror.com/@vitejs/plugin-vue-jsx/3.0.0  
6271 - name: '@vitejs/plugin-vue-jsx'  
6272 - version: 3.0.0  
6273 - engines: {node: ^14.18.0 || >=16.0.0}  
6274 - peerDependencies:  
6275 - vite: ^4.0.0  
6276 - vue: ^3.0.0  
6277 - dependencies:  
6278 - '@babel/core': registry.npmmirror.com/@babel/core/7.20.5  
6279 - '@babel/plugin-transform-typescript': registry.npmmirror.com/@babel/plugin-transform-typescript/7.20.2_@babel+core@7.20.5  
6280 - '@vue/babel-plugin-jsx': registry.npmmirror.com/@vue/babel-plugin-jsx/1.1.1_@babel+core@7.20.5  
6281 - vite: 4.0.3_amyfslv6hdwxqbf7f4ldebbtce  
6282 - vue: 3.2.45  
6283 - transitivePeerDependencies:  
6284 - - supports-color  
6285 - dev: true  
6286 -  
6287 - registry.npmmirror.com/@vitejs/plugin-vue/4.0.0_vite@4.0.3+vue@3.2.45:  
6288 - 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}  
6289 - id: registry.npmmirror.com/@vitejs/plugin-vue/4.0.0  
6290 - name: '@vitejs/plugin-vue'  
6291 - version: 4.0.0  
6292 - engines: {node: ^14.18.0 || >=16.0.0}  
6293 - peerDependencies:  
6294 - vite: ^4.0.0  
6295 - vue: ^3.2.25  
6296 - dependencies:  
6297 - vite: 4.0.3_amyfslv6hdwxqbf7f4ldebbtce  
6298 - vue: 3.2.45  
6299 - dev: true  
6300 -  
6301 - registry.npmmirror.com/@vue/babel-helper-vue-transform-on/1.0.2:  
6302 - 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}  
6303 - name: '@vue/babel-helper-vue-transform-on'  
6304 - version: 1.0.2  
6305 - dev: true  
6306 -  
6307 - registry.npmmirror.com/@vue/babel-plugin-jsx/1.1.1_@babel+core@7.20.5:  
6308 - 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}  
6309 - id: registry.npmmirror.com/@vue/babel-plugin-jsx/1.1.1  
6310 - name: '@vue/babel-plugin-jsx'  
6311 - version: 1.1.1  
6312 - dependencies:  
6313 - '@babel/helper-module-imports': registry.npmmirror.com/@babel/helper-module-imports/7.18.6  
6314 - '@babel/plugin-syntax-jsx': registry.npmmirror.com/@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.5  
6315 - '@babel/template': registry.npmmirror.com/@babel/template/7.18.10  
6316 - '@babel/traverse': registry.npmmirror.com/@babel/traverse/7.20.1  
6317 - '@babel/types': registry.npmmirror.com/@babel/types/7.20.2  
6318 - '@vue/babel-helper-vue-transform-on': registry.npmmirror.com/@vue/babel-helper-vue-transform-on/1.0.2  
6319 - camelcase: registry.npmmirror.com/camelcase/6.3.0  
6320 - html-tags: registry.npmmirror.com/html-tags/3.2.0  
6321 - svg-tags: registry.npmmirror.com/svg-tags/1.0.0  
6322 - transitivePeerDependencies:  
6323 - - '@babel/core'  
6324 - - supports-color  
6325 - dev: true  
6326 -  
6327 - registry.npmmirror.com/@vue/compiler-core/3.2.45:  
6328 - resolution: {integrity: sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.45.tgz}  
6329 - name: '@vue/compiler-core'  
6330 - version: 3.2.45  
6331 - dependencies:  
6332 - '@babel/parser': registry.npmmirror.com/@babel/parser/7.20.5  
6333 - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45  
6334 - estree-walker: registry.npmmirror.com/estree-walker/2.0.2  
6335 - source-map: 0.6.1  
6336 -  
6337 - registry.npmmirror.com/@vue/compiler-dom/3.2.45:  
6338 - resolution: {integrity: sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz}  
6339 - name: '@vue/compiler-dom'  
6340 - version: 3.2.45  
6341 - dependencies:  
6342 - '@vue/compiler-core': registry.npmmirror.com/@vue/compiler-core/3.2.45  
6343 - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45  
6344 -  
6345 - registry.npmmirror.com/@vue/devtools-api/6.4.5:  
6346 - 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}  
6347 - name: '@vue/devtools-api'  
6348 - version: 6.4.5  
6349 - dev: false  
6350 -  
6351 - registry.npmmirror.com/@vue/reactivity/3.2.45:  
6352 - resolution: {integrity: sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.45.tgz}  
6353 - name: '@vue/reactivity'  
6354 - version: 3.2.45  
6355 - dependencies:  
6356 - '@vue/shared': registry.npmmirror.com/@vue/shared/3.2.45  
6357 -  
6358 - registry.npmmirror.com/@vue/shared/3.2.45:  
6359 - resolution: {integrity: sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz}  
6360 - name: '@vue/shared'  
6361 - version: 3.2.45  
6362 -  
6363 - registry.npmmirror.com/@windicss/config/1.8.10:  
6364 - resolution: {integrity: sha512-O9SsC110b1Ik3YYa4Ck/0TWuCo7YFfA9KDrwD5sAeqscT5COIGK1HszdCT3oh0MJFej2wNrvpfyW9h6yQaW6PA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@windicss/config/-/config-1.8.10.tgz}  
6365 - name: '@windicss/config'  
6366 - version: 1.8.10  
6367 - dependencies:  
6368 - debug: 4.3.4  
6369 - jiti: registry.npmmirror.com/jiti/1.16.0  
6370 - windicss: registry.npmmirror.com/windicss/3.5.6  
6371 - transitivePeerDependencies:  
6372 - - supports-color  
6373 - dev: true  
6374 -  
6375 - registry.npmmirror.com/@windicss/plugin-utils/1.8.10:  
6376 - 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}  
6377 - name: '@windicss/plugin-utils'  
6378 - version: 1.8.10  
6379 - dependencies:  
6380 - '@antfu/utils': registry.npmmirror.com/@antfu/utils/0.7.2  
6381 - '@windicss/config': registry.npmmirror.com/@windicss/config/1.8.10  
6382 - debug: 4.3.4  
6383 - fast-glob: registry.npmmirror.com/fast-glob/3.2.12  
6384 - magic-string: registry.npmmirror.com/magic-string/0.27.0  
6385 - micromatch: registry.npmmirror.com/micromatch/4.0.5  
6386 - windicss: registry.npmmirror.com/windicss/3.5.6  
6387 - transitivePeerDependencies:  
6388 - - supports-color  
6389 - dev: true  
6390 -  
6391 - registry.npmmirror.com/ansi-styles/2.2.1:  
6392 - resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-2.2.1.tgz}  
6393 - name: ansi-styles  
6394 - version: 2.2.1  
6395 - engines: {node: '>=0.10.0'}  
6396 - dev: true  
6397 -  
6398 - registry.npmmirror.com/ansi-styles/3.2.1:  
6399 - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz}  
6400 - name: ansi-styles  
6401 - version: 3.2.1  
6402 - engines: {node: '>=4'}  
6403 - dependencies:  
6404 - color-convert: registry.npmmirror.com/color-convert/1.9.3  
6405 - dev: true  
6406 -  
6407 - registry.npmmirror.com/ansi-styles/4.3.0:  
6408 - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz}  
6409 - name: ansi-styles  
6410 - version: 4.3.0  
6411 - engines: {node: '>=8'}  
6412 - dependencies:  
6413 - color-convert: registry.npmmirror.com/color-convert/2.0.1  
6414 -  
6415 - registry.npmmirror.com/axios/0.26.1_debug@4.3.4:  
6416 - resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/axios/-/axios-0.26.1.tgz}  
6417 - id: registry.npmmirror.com/axios/0.26.1  
6418 - name: axios  
6419 - version: 0.26.1  
6420 - dependencies:  
6421 - follow-redirects: registry.npmmirror.com/follow-redirects/1.15.2_debug@4.3.4  
6422 - transitivePeerDependencies:  
6423 - - debug  
6424 - dev: true  
6425 -  
6426 - registry.npmmirror.com/braces/2.3.2:  
6427 - resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz}  
6428 - name: braces  
6429 - version: 2.3.2  
6430 - engines: {node: '>=0.10.0'}  
6431 - dependencies:  
6432 - arr-flatten: 1.1.0  
6433 - array-unique: 0.3.2  
6434 - extend-shallow: 2.0.1  
6435 - fill-range: registry.npmmirror.com/fill-range/4.0.0  
6436 - isobject: 3.0.1  
6437 - repeat-element: 1.1.4  
6438 - snapdragon: 0.8.2  
6439 - snapdragon-node: 2.1.1  
6440 - split-string: 3.1.0  
6441 - to-regex: 3.0.2  
6442 - transitivePeerDependencies:  
6443 - - supports-color  
6444 - dev: true  
6445 -  
6446 - registry.npmmirror.com/braces/3.0.2:  
6447 - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz}  
6448 - name: braces  
6449 - version: 3.0.2  
6450 - engines: {node: '>=8'}  
6451 - dependencies:  
6452 - fill-range: registry.npmmirror.com/fill-range/7.0.1  
6453 - dev: true  
6454 -  
6455 - registry.npmmirror.com/browserslist/4.21.4:  
6456 - resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/browserslist/-/browserslist-4.21.4.tgz}  
6457 - name: browserslist  
6458 - version: 4.21.4  
6459 - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}  
6460 - hasBin: true  
6461 - dependencies:  
6462 - caniuse-lite: registry.npmmirror.com/caniuse-lite/1.0.30001431  
6463 - electron-to-chromium: registry.npmmirror.com/electron-to-chromium/1.4.284  
6464 - node-releases: registry.npmmirror.com/node-releases/2.0.6  
6465 - update-browserslist-db: registry.npmmirror.com/update-browserslist-db/1.0.10_browserslist@4.21.4  
6466 - dev: true  
6467 -  
6468 - registry.npmmirror.com/camelcase/5.3.1:  
6469 - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz}  
6470 - name: camelcase  
6471 - version: 5.3.1  
6472 - engines: {node: '>=6'}  
6473 -  
6474 - registry.npmmirror.com/camelcase/6.3.0:  
6475 - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz}  
6476 - name: camelcase  
6477 - version: 6.3.0  
6478 - engines: {node: '>=10'}  
6479 - dev: true  
6480 -  
6481 - registry.npmmirror.com/caniuse-lite/1.0.30001431:  
6482 - 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}  
6483 - name: caniuse-lite  
6484 - version: 1.0.30001431  
6485 - dev: true  
6486 -  
6487 - registry.npmmirror.com/color-convert/1.9.3:  
6488 - 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}  
6489 - name: color-convert  
6490 - version: 1.9.3  
6491 - dependencies:  
6492 - color-name: registry.npmmirror.com/color-name/1.1.3  
6493 - dev: true  
6494 -  
6495 - registry.npmmirror.com/color-convert/2.0.1:  
6496 - 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}  
6497 - name: color-convert  
6498 - version: 2.0.1  
6499 - engines: {node: '>=7.0.0'}  
6500 - dependencies:  
6501 - color-name: registry.npmmirror.com/color-name/1.1.4  
6502 -  
6503 - registry.npmmirror.com/color-name/1.1.3:  
6504 - 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}  
6505 - name: color-name  
6506 - version: 1.1.3  
6507 - dev: true  
6508 -  
6509 - registry.npmmirror.com/color-name/1.1.4:  
6510 - 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}  
6511 - name: color-name  
6512 - version: 1.1.4  
6513 -  
6514 - registry.npmmirror.com/convert-source-map/1.9.0:  
6515 - 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}  
6516 - name: convert-source-map  
6517 - version: 1.9.0  
6518 - dev: true  
6519 -  
6520 - registry.npmmirror.com/core-js/3.26.1:  
6521 - 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}  
6522 - name: core-js  
6523 - version: 3.26.1  
6524 - requiresBuild: true  
6525 - dev: true  
6526 -  
6527 - registry.npmmirror.com/cross-fetch/3.1.5:  
6528 - resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/cross-fetch/-/cross-fetch-3.1.5.tgz}  
6529 - name: cross-fetch  
6530 - version: 3.1.5  
6531 - dependencies:  
6532 - node-fetch: registry.npmmirror.com/node-fetch/2.6.7  
6533 - transitivePeerDependencies:  
6534 - - encoding  
6535 - dev: true  
6536 -  
6537 - registry.npmmirror.com/debug/4.3.4:  
6538 - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz}  
6539 - name: debug  
6540 - version: 4.3.4  
6541 - engines: {node: '>=6.0'}  
6542 - peerDependencies:  
6543 - supports-color: '*'  
6544 - peerDependenciesMeta:  
6545 - supports-color:  
6546 - optional: true  
6547 - dependencies:  
6548 - ms: registry.npmmirror.com/ms/2.1.2  
6549 - dev: true  
6550 -  
6551 - registry.npmmirror.com/echarts/5.4.1:  
6552 - resolution: {integrity: sha512-9ltS3M2JB0w2EhcYjCdmtrJ+6haZcW6acBolMGIuf01Hql1yrIV01L1aRj7jsaaIULJslEP9Z3vKlEmnJaWJVQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/echarts/-/echarts-5.4.1.tgz}  
6553 - name: echarts  
6554 - version: 5.4.1  
6555 - dependencies:  
6556 - tslib: registry.npmmirror.com/tslib/2.3.0  
6557 - zrender: registry.npmmirror.com/zrender/5.4.1  
6558 - dev: false  
6559 -  
6560 - registry.npmmirror.com/electron-to-chromium/1.4.284:  
6561 - 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}  
6562 - name: electron-to-chromium  
6563 - version: 1.4.284  
6564 - dev: true  
6565 -  
6566 - registry.npmmirror.com/escalade/3.1.1:  
6567 - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz}  
6568 - name: escalade  
6569 - version: 3.1.1  
6570 - engines: {node: '>=6'}  
6571 - dev: true  
6572 -  
6573 - registry.npmmirror.com/estree-walker/2.0.2:  
6574 - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz}  
6575 - name: estree-walker  
6576 - version: 2.0.2  
6577 -  
6578 - registry.npmmirror.com/fast-glob/3.2.12:  
6579 - 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}  
6580 - name: fast-glob  
6581 - version: 3.2.12  
6582 - engines: {node: '>=8.6.0'}  
6583 - dependencies:  
6584 - '@nodelib/fs.stat': registry.npmmirror.com/@nodelib/fs.stat/2.0.5  
6585 - '@nodelib/fs.walk': 1.2.8  
6586 - glob-parent: 5.1.2  
6587 - merge2: registry.npmmirror.com/merge2/1.4.1  
6588 - micromatch: registry.npmmirror.com/micromatch/4.0.5  
6589 - dev: true  
6590 -  
6591 - registry.npmmirror.com/fill-range/4.0.0:  
6592 - 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}  
6593 - name: fill-range  
6594 - version: 4.0.0  
6595 - engines: {node: '>=0.10.0'}  
6596 - dependencies:  
6597 - extend-shallow: 2.0.1  
6598 - is-number: registry.npmmirror.com/is-number/3.0.0  
6599 - repeat-string: 1.6.1  
6600 - to-regex-range: registry.npmmirror.com/to-regex-range/2.1.1  
6601 - dev: true  
6602 -  
6603 - registry.npmmirror.com/fill-range/7.0.1:  
6604 - 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}  
6605 - name: fill-range  
6606 - version: 7.0.1  
6607 - engines: {node: '>=8'}  
6608 - dependencies:  
6609 - to-regex-range: registry.npmmirror.com/to-regex-range/5.0.1  
6610 - dev: true  
6611 -  
6612 - registry.npmmirror.com/follow-redirects/1.15.2_debug@4.3.4:  
6613 - resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz}  
6614 - id: registry.npmmirror.com/follow-redirects/1.15.2  
6615 - name: follow-redirects  
6616 - version: 1.15.2  
6617 - engines: {node: '>=4.0'}  
6618 - peerDependencies:  
6619 - debug: '*'  
6620 - peerDependenciesMeta:  
6621 - debug:  
6622 - optional: true  
6623 - dependencies:  
6624 - debug: 4.3.4  
6625 - dev: true  
6626 -  
6627 - registry.npmmirror.com/fs-extra/10.1.0:  
6628 - 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}  
6629 - name: fs-extra  
6630 - version: 10.1.0  
6631 - engines: {node: '>=12'}  
6632 - dependencies:  
6633 - graceful-fs: registry.npmmirror.com/graceful-fs/4.2.10  
6634 - jsonfile: registry.npmmirror.com/jsonfile/6.1.0  
6635 - universalify: registry.npmmirror.com/universalify/2.0.0  
6636 - dev: true  
6637 -  
6638 - registry.npmmirror.com/function-bind/1.1.1:  
6639 - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz}  
6640 - name: function-bind  
6641 - version: 1.1.1  
6642 -  
6643 - registry.npmmirror.com/gensync/1.0.0-beta.2:  
6644 - 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}  
6645 - name: gensync  
6646 - version: 1.0.0-beta.2  
6647 - engines: {node: '>=6.9.0'}  
6648 - dev: true  
6649 -  
6650 - registry.npmmirror.com/graceful-fs/4.2.10:  
6651 - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz}  
6652 - name: graceful-fs  
6653 - version: 4.2.10  
6654 - dev: true  
6655 -  
6656 - registry.npmmirror.com/has-flag/1.0.0:  
6657 - resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-flag/-/has-flag-1.0.0.tgz}  
6658 - name: has-flag  
6659 - version: 1.0.0  
6660 - engines: {node: '>=0.10.0'}  
6661 - dev: true  
6662 -  
6663 - registry.npmmirror.com/has-flag/3.0.0:  
6664 - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz}  
6665 - name: has-flag  
6666 - version: 3.0.0  
6667 - engines: {node: '>=4'}  
6668 - dev: true  
6669 -  
6670 - registry.npmmirror.com/has/1.0.3:  
6671 - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/has/-/has-1.0.3.tgz}  
6672 - name: has  
6673 - version: 1.0.3  
6674 - engines: {node: '>= 0.4.0'}  
6675 - dependencies:  
6676 - function-bind: registry.npmmirror.com/function-bind/1.1.1  
6677 -  
6678 - registry.npmmirror.com/html-tags/3.2.0:  
6679 - 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}  
6680 - name: html-tags  
6681 - version: 3.2.0  
6682 - engines: {node: '>=8'}  
6683 - dev: true  
6684 -  
6685 - registry.npmmirror.com/is-core-module/2.11.0:  
6686 - resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-core-module/-/is-core-module-2.11.0.tgz}  
6687 - name: is-core-module  
6688 - version: 2.11.0  
6689 - dependencies:  
6690 - has: registry.npmmirror.com/has/1.0.3  
6691 - dev: true  
6692 -  
6693 - registry.npmmirror.com/is-number/3.0.0:  
6694 - 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}  
6695 - name: is-number  
6696 - version: 3.0.0  
6697 - engines: {node: '>=0.10.0'}  
6698 - dependencies:  
6699 - kind-of: 3.2.2  
6700 - dev: true  
6701 -  
6702 - registry.npmmirror.com/is-number/7.0.0:  
6703 - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz}  
6704 - name: is-number  
6705 - version: 7.0.0  
6706 - engines: {node: '>=0.12.0'}  
6707 - dev: true  
6708 -  
6709 - registry.npmmirror.com/jiti/1.16.0:  
6710 - resolution: {integrity: sha512-L3BJStEf5NAqNuzrpfbN71dp43mYIcBUlCRea/vdyv5dW/AYa1d4bpelko4SHdY3I6eN9Wzyasxirj1/vv5kmg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jiti/-/jiti-1.16.0.tgz}  
6711 - name: jiti  
6712 - version: 1.16.0  
6713 - hasBin: true  
6714 - dev: true  
6715 -  
6716 - registry.npmmirror.com/js-tokens/4.0.0:  
6717 - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz}  
6718 - name: js-tokens  
6719 - version: 4.0.0  
6720 - dev: true  
6721 -  
6722 - registry.npmmirror.com/jsesc/2.5.2:  
6723 - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz}  
6724 - name: jsesc  
6725 - version: 2.5.2  
6726 - engines: {node: '>=4'}  
6727 - hasBin: true  
6728 - dev: true  
6729 -  
6730 - registry.npmmirror.com/json5/2.2.1:  
6731 - resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/json5/-/json5-2.2.1.tgz}  
6732 - name: json5  
6733 - version: 2.2.1  
6734 - engines: {node: '>=6'}  
6735 - hasBin: true  
6736 - dev: true  
6737 -  
6738 - registry.npmmirror.com/jsonfile/6.1.0:  
6739 - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz}  
6740 - name: jsonfile  
6741 - version: 6.1.0  
6742 - dependencies:  
6743 - universalify: registry.npmmirror.com/universalify/2.0.0  
6744 - optionalDependencies:  
6745 - graceful-fs: 4.2.10  
6746 - dev: true  
6747 -  
6748 - registry.npmmirror.com/kolorist/1.6.0:  
6749 - resolution: {integrity: sha512-dLkz37Ab97HWMx9KTes3Tbi3D1ln9fCAy2zr2YVExJasDRPGRaKcoE4fycWNtnCAJfjFqe0cnY+f8KT2JePEXQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/kolorist/-/kolorist-1.6.0.tgz}  
6750 - name: kolorist  
6751 - version: 1.6.0  
6752 - dev: true  
6753 -  
6754 - registry.npmmirror.com/lru-cache/6.0.0:  
6755 - 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}  
6756 - name: lru-cache  
6757 - version: 6.0.0  
6758 - engines: {node: '>=10'}  
6759 - dependencies:  
6760 - yallist: registry.npmmirror.com/yallist/4.0.0  
6761 - dev: true  
6762 -  
6763 - registry.npmmirror.com/magic-string/0.25.9:  
6764 - 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}  
6765 - name: magic-string  
6766 - version: 0.25.9  
6767 - dependencies:  
6768 - sourcemap-codec: 1.4.8  
6769 -  
6770 - registry.npmmirror.com/magic-string/0.27.0:  
6771 - 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}  
6772 - name: magic-string  
6773 - version: 0.27.0  
6774 - engines: {node: '>=12'}  
6775 - dependencies:  
6776 - '@jridgewell/sourcemap-codec': registry.npmmirror.com/@jridgewell/sourcemap-codec/1.4.14  
6777 - dev: true  
6778 -  
6779 - registry.npmmirror.com/merge2/1.4.1:  
6780 - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz}  
6781 - name: merge2  
6782 - version: 1.4.1  
6783 - engines: {node: '>= 8'}  
6784 - dev: true  
6785 -  
6786 - registry.npmmirror.com/micromatch/4.0.5:  
6787 - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz}  
6788 - name: micromatch  
6789 - version: 4.0.5  
6790 - engines: {node: '>=8.6'}  
6791 - dependencies:  
6792 - braces: registry.npmmirror.com/braces/3.0.2  
6793 - picomatch: registry.npmmirror.com/picomatch/2.3.1  
6794 - dev: true  
6795 -  
6796 - registry.npmmirror.com/ms/2.1.2:  
6797 - 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}  
6798 - name: ms  
6799 - version: 2.1.2  
6800 - dev: true  
6801 -  
6802 - registry.npmmirror.com/nanoid/3.3.4:  
6803 - resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz}  
6804 - name: nanoid  
6805 - version: 3.3.4  
6806 - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}  
6807 - hasBin: true  
6808 -  
6809 - registry.npmmirror.com/node-fetch/2.6.7:  
6810 - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-fetch/-/node-fetch-2.6.7.tgz}  
6811 - name: node-fetch  
6812 - version: 2.6.7  
6813 - engines: {node: 4.x || >=6.0.0}  
6814 - peerDependencies:  
6815 - encoding: ^0.1.0  
6816 - peerDependenciesMeta:  
6817 - encoding:  
6818 - optional: true  
6819 - dependencies:  
6820 - whatwg-url: registry.npmmirror.com/whatwg-url/5.0.0  
6821 - dev: true  
6822 -  
6823 - registry.npmmirror.com/node-releases/2.0.6:  
6824 - 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}  
6825 - name: node-releases  
6826 - version: 2.0.6  
6827 - dev: true  
6828 -  
6829 - registry.npmmirror.com/picocolors/1.0.0:  
6830 - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz}  
6831 - name: picocolors  
6832 - version: 1.0.0  
6833 -  
6834 - registry.npmmirror.com/picomatch/2.3.1:  
6835 - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz}  
6836 - name: picomatch  
6837 - version: 2.3.1  
6838 - engines: {node: '>=8.6'}  
6839 - dev: true  
6840 -  
6841 - registry.npmmirror.com/pinia/2.0.28_prq2uz4lho2pwp6irk4cfkrxwu:  
6842 - resolution: {integrity: sha512-YClq9DkqCblq9rlyUual7ezMu/iICWdBtfJrDt4oWU9Zxpijyz7xB2xTwx57DaBQ96UGvvTMORzALr+iO5PVMw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pinia/-/pinia-2.0.28.tgz}  
6843 - id: registry.npmmirror.com/pinia/2.0.28  
6844 - name: pinia  
6845 - version: 2.0.28  
6846 - peerDependencies:  
6847 - '@vue/composition-api': ^1.4.0  
6848 - typescript: '>=4.4.4'  
6849 - vue: ^2.6.14 || ^3.2.0  
6850 - peerDependenciesMeta:  
6851 - '@vue/composition-api':  
6852 - optional: true  
6853 - typescript:  
6854 - optional: true  
6855 - dependencies:  
6856 - '@vue/devtools-api': registry.npmmirror.com/@vue/devtools-api/6.4.5  
6857 - typescript: 4.9.4  
6858 - vue: 3.2.45  
6859 - vue-demi: registry.npmmirror.com/vue-demi/0.13.11_vue@3.2.45  
6860 - dev: false  
6861 -  
6862 - registry.npmmirror.com/postcss/5.2.18:  
6863 - resolution: {integrity: sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss/-/postcss-5.2.18.tgz}  
6864 - name: postcss  
6865 - version: 5.2.18  
6866 - engines: {node: '>=0.12'}  
6867 - dependencies:  
6868 - chalk: 1.1.3  
6869 - js-base64: 2.6.4  
6870 - source-map: 0.5.7  
6871 - supports-color: registry.npmmirror.com/supports-color/3.2.3  
6872 - dev: true  
6873 -  
6874 - registry.npmmirror.com/postcss/8.4.20:  
6875 - resolution: {integrity: sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/postcss/-/postcss-8.4.20.tgz}  
6876 - name: postcss  
6877 - version: 8.4.20  
6878 - engines: {node: ^10 || ^12 || >=14}  
6879 - dependencies:  
6880 - nanoid: registry.npmmirror.com/nanoid/3.3.4  
6881 - picocolors: registry.npmmirror.com/picocolors/1.0.0  
6882 - source-map-js: registry.npmmirror.com/source-map-js/1.0.2  
6883 -  
6884 - registry.npmmirror.com/regenerator-runtime/0.13.11:  
6885 - 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}  
6886 - name: regenerator-runtime  
6887 - version: 0.13.11  
6888 -  
6889 - registry.npmmirror.com/rollup-plugin-purge-icons/0.9.1:  
6890 - 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}  
6891 - name: rollup-plugin-purge-icons  
6892 - version: 0.9.1  
6893 - engines: {node: '>= 12'}  
6894 - dependencies:  
6895 - '@purge-icons/core': registry.npmmirror.com/@purge-icons/core/0.9.1  
6896 - '@purge-icons/generated': registry.npmmirror.com/@purge-icons/generated/0.9.0  
6897 - transitivePeerDependencies:  
6898 - - encoding  
6899 - - supports-color  
6900 - dev: true  
6901 -  
6902 - registry.npmmirror.com/semver/6.3.0:  
6903 - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz}  
6904 - name: semver  
6905 - version: 6.3.0  
6906 - hasBin: true  
6907 - dev: true  
6908 -  
6909 - registry.npmmirror.com/semver/7.3.7:  
6910 - 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}  
6911 - name: semver  
6912 - version: 7.3.7  
6913 - engines: {node: '>=10'}  
6914 - hasBin: true  
6915 - dependencies:  
6916 - lru-cache: registry.npmmirror.com/lru-cache/6.0.0  
6917 - dev: true  
6918 -  
6919 - registry.npmmirror.com/semver/7.3.8:  
6920 - resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/semver/-/semver-7.3.8.tgz}  
6921 - name: semver  
6922 - version: 7.3.8  
6923 - engines: {node: '>=10'}  
6924 - hasBin: true  
6925 - dependencies:  
6926 - lru-cache: registry.npmmirror.com/lru-cache/6.0.0  
6927 - dev: true  
6928 -  
6929 - registry.npmmirror.com/source-map-js/1.0.2:  
6930 - 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}  
6931 - name: source-map-js  
6932 - version: 1.0.2  
6933 - engines: {node: '>=0.10.0'}  
6934 -  
6935 - registry.npmmirror.com/supports-color/2.0.0:  
6936 - resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-2.0.0.tgz}  
6937 - name: supports-color  
6938 - version: 2.0.0  
6939 - engines: {node: '>=0.8.0'}  
6940 - dev: true  
6941 -  
6942 - registry.npmmirror.com/supports-color/3.2.3:  
6943 - 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}  
6944 - name: supports-color  
6945 - version: 3.2.3  
6946 - engines: {node: '>=0.8.0'}  
6947 - dependencies:  
6948 - has-flag: registry.npmmirror.com/has-flag/1.0.0  
6949 - dev: true  
6950 -  
6951 - registry.npmmirror.com/supports-color/5.5.0:  
6952 - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz}  
6953 - name: supports-color  
6954 - version: 5.5.0  
6955 - engines: {node: '>=4'}  
6956 - dependencies:  
6957 - has-flag: registry.npmmirror.com/has-flag/3.0.0  
6958 - dev: true  
6959 -  
6960 - registry.npmmirror.com/svg-tags/1.0.0:  
6961 - 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}  
6962 - name: svg-tags  
6963 - version: 1.0.0  
6964 - dev: true  
6965 -  
6966 - registry.npmmirror.com/systemjs/6.13.0:  
6967 - 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}  
6968 - name: systemjs  
6969 - version: 6.13.0  
6970 - dev: true  
6971 -  
6972 - registry.npmmirror.com/to-fast-properties/2.0.0:  
6973 - 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}  
6974 - name: to-fast-properties  
6975 - version: 2.0.0  
6976 - engines: {node: '>=4'}  
6977 -  
6978 - registry.npmmirror.com/to-regex-range/2.1.1:  
6979 - 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}  
6980 - name: to-regex-range  
6981 - version: 2.1.1  
6982 - engines: {node: '>=0.10.0'}  
6983 - dependencies:  
6984 - is-number: registry.npmmirror.com/is-number/3.0.0  
6985 - repeat-string: 1.6.1  
6986 - dev: true  
6987 -  
6988 - registry.npmmirror.com/to-regex-range/5.0.1:  
6989 - 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}  
6990 - name: to-regex-range  
6991 - version: 5.0.1  
6992 - engines: {node: '>=8.0'}  
6993 - dependencies:  
6994 - is-number: registry.npmmirror.com/is-number/7.0.0  
6995 - dev: true  
6996 -  
6997 - registry.npmmirror.com/tr46/0.0.3:  
6998 - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz}  
6999 - name: tr46  
7000 - version: 0.0.3  
7001 - dev: true  
7002 -  
7003 - registry.npmmirror.com/tslib/2.3.0:  
7004 - resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz}  
7005 - name: tslib  
7006 - version: 2.3.0  
7007 - dev: false  
7008 -  
7009 - registry.npmmirror.com/tslib/2.4.1:  
7010 - resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tslib/-/tslib-2.4.1.tgz}  
7011 - name: tslib  
7012 - version: 2.4.1  
7013 - dev: true  
7014 -  
7015 - registry.npmmirror.com/universalify/2.0.0:  
7016 - resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz}  
7017 - name: universalify  
7018 - version: 2.0.0  
7019 - engines: {node: '>= 10.0.0'}  
7020 - dev: true  
7021 -  
7022 - registry.npmmirror.com/update-browserslist-db/1.0.10_browserslist@4.21.4:  
7023 - 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}  
7024 - id: registry.npmmirror.com/update-browserslist-db/1.0.10  
7025 - name: update-browserslist-db  
7026 - version: 1.0.10  
7027 - hasBin: true  
7028 - peerDependencies:  
7029 - browserslist: '>= 4.21.0'  
7030 - dependencies:  
7031 - browserslist: registry.npmmirror.com/browserslist/4.21.4  
7032 - escalade: registry.npmmirror.com/escalade/3.1.1  
7033 - picocolors: 1.0.0  
7034 - dev: true  
7035 -  
7036 - registry.npmmirror.com/vite-plugin-purge-icons/0.9.2_vite@4.0.3:  
7037 - 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}  
7038 - id: registry.npmmirror.com/vite-plugin-purge-icons/0.9.2  
7039 - name: vite-plugin-purge-icons  
7040 - version: 0.9.2  
7041 - engines: {node: '>= 12'}  
7042 - peerDependencies:  
7043 - vite: ^2.0.0 || ^3.0.0 || ^4.0.0  
7044 - dependencies:  
7045 - '@purge-icons/core': registry.npmmirror.com/@purge-icons/core/0.9.1  
7046 - '@purge-icons/generated': registry.npmmirror.com/@purge-icons/generated/0.9.0  
7047 - rollup-plugin-purge-icons: registry.npmmirror.com/rollup-plugin-purge-icons/0.9.1  
7048 - vite: 4.0.3_amyfslv6hdwxqbf7f4ldebbtce  
7049 - transitivePeerDependencies:  
7050 - - encoding  
7051 - - supports-color  
7052 - dev: true  
7053 -  
7054 - registry.npmmirror.com/vite-plugin-windicss/1.8.10_vite@4.0.3:  
7055 - 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}  
7056 - id: registry.npmmirror.com/vite-plugin-windicss/1.8.10  
7057 - name: vite-plugin-windicss  
7058 - version: 1.8.10  
7059 - peerDependencies:  
7060 - vite: ^2.0.1 || ^3.0.0 || ^4.0.0  
7061 - dependencies:  
7062 - '@windicss/plugin-utils': registry.npmmirror.com/@windicss/plugin-utils/1.8.10  
7063 - debug: registry.npmmirror.com/debug/4.3.4  
7064 - kolorist: registry.npmmirror.com/kolorist/1.6.0  
7065 - vite: 4.0.3_amyfslv6hdwxqbf7f4ldebbtce  
7066 - windicss: registry.npmmirror.com/windicss/3.5.6  
7067 - transitivePeerDependencies:  
7068 - - supports-color  
7069 - dev: true  
7070 -  
7071 - registry.npmmirror.com/vue-demi/0.13.11_vue@3.2.45:  
7072 - resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz}  
7073 - id: registry.npmmirror.com/vue-demi/0.13.11  
7074 - name: vue-demi  
7075 - version: 0.13.11  
7076 - engines: {node: '>=12'}  
7077 - hasBin: true  
7078 - requiresBuild: true  
7079 - peerDependencies:  
7080 - '@vue/composition-api': ^1.0.0-rc.1  
7081 - vue: ^3.0.0-0 || ^2.6.0  
7082 - peerDependenciesMeta:  
7083 - '@vue/composition-api':  
7084 - optional: true  
7085 - dependencies:  
7086 - vue: 3.2.45  
7087 - dev: false  
7088 -  
7089 - registry.npmmirror.com/vxe-table/4.3.7_vue@3.2.45+xe-utils@3.5.7:  
7090 - 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}  
7091 - id: registry.npmmirror.com/vxe-table/4.3.7  
7092 - name: vxe-table  
7093 - version: 4.3.7  
7094 - peerDependencies:  
7095 - vue: ^3.2.28  
7096 - xe-utils: ^3.5.0  
7097 - dependencies:  
7098 - vue: 3.2.45  
7099 - xe-utils: 3.5.7  
7100 - dev: false  
7101 -  
7102 - registry.npmmirror.com/webidl-conversions/3.0.1:  
7103 - 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}  
7104 - name: webidl-conversions  
7105 - version: 3.0.1  
7106 - dev: true  
7107 -  
7108 - registry.npmmirror.com/whatwg-url/5.0.0:  
7109 - 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}  
7110 - name: whatwg-url  
7111 - version: 5.0.0  
7112 - dependencies:  
7113 - tr46: registry.npmmirror.com/tr46/0.0.3  
7114 - webidl-conversions: registry.npmmirror.com/webidl-conversions/3.0.1  
7115 - dev: true  
7116 -  
7117 - registry.npmmirror.com/windicss/3.5.6:  
7118 - resolution: {integrity: sha512-P1mzPEjgFMZLX0ZqfFht4fhV/FX8DTG7ERG1fBLiWvd34pTLVReS5CVsewKn9PApSgXnVfPWwvq+qUsRwpnwFA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/windicss/-/windicss-3.5.6.tgz}  
7119 - name: windicss  
7120 - version: 3.5.6  
7121 - engines: {node: '>= 12'}  
7122 - hasBin: true  
7123 - dev: true  
7124 -  
7125 - registry.npmmirror.com/yallist/4.0.0:  
7126 - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz}  
7127 - name: yallist  
7128 - version: 4.0.0  
7129 - dev: true  
7130 -  
7131 - registry.npmmirror.com/zrender/5.4.1:  
7132 - resolution: {integrity: sha512-M4Z05BHWtajY2241EmMPHglDQAJ1UyHQcYsxDNzD9XLSkPDqMq4bB28v9Pb4mvHnVQ0GxyTklZ/69xCFP6RXBA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/zrender/-/zrender-5.4.1.tgz}  
7133 - name: zrender  
7134 - version: 5.4.1 6512 + /zrender/5.4.1:
  6513 + resolution: {integrity: sha512-M4Z05BHWtajY2241EmMPHglDQAJ1UyHQcYsxDNzD9XLSkPDqMq4bB28v9Pb4mvHnVQ0GxyTklZ/69xCFP6RXBA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npm.taobao.org/zrender/-/zrender-5.4.1.tgz}
7135 dependencies: 6514 dependencies:
7136 - tslib: registry.npmmirror.com/tslib/2.3.0 6515 + tslib: 2.3.0
7137 dev: false 6516 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/index.ts 0 → 100644
  1 +import XTable from './src/XTable.vue'
  2 +
  3 +export { XTable }
yudao-ui-admin-vue3/src/components/XTable/src/XTable.vue 0 → 100644
  1 +<template>
  2 + <VxeGrid v-bind="getProps" ref="xGrid" :class="`${prefixCls}`" class="xtable-scrollbar">
  3 + <template #[item]="data" v-for="item in Object.keys($slots)" :key="item">
  4 + <slot :name="item" v-bind="data || {}"></slot>
  5 + </template>
  6 + </VxeGrid>
  7 +</template>
  8 +<script lang="ts" setup name="XTable">
  9 +import { computed, PropType, ref, unref, useAttrs, watch } from 'vue'
  10 +import { SizeType, VxeGridInstance } from 'vxe-table'
  11 +import { useAppStore } from '@/store/modules/app'
  12 +import { useDesign } from '@/hooks/web/useDesign'
  13 +import { XTableProps } from './type'
  14 +import { isBoolean, isFunction } from '@/utils/is'
  15 +import { useMessage } from '@/hooks/web/useMessage'
  16 +import download from '@/utils/download'
  17 +import { useI18n } from '@/hooks/web/useI18n'
  18 +
  19 +const { t } = useI18n()
  20 +const message = useMessage() // 消息弹窗
  21 +
  22 +const appStore = useAppStore()
  23 +
  24 +const { getPrefixCls } = useDesign()
  25 +const prefixCls = getPrefixCls('x-vxe-table')
  26 +
  27 +const attrs = useAttrs()
  28 +const emit = defineEmits(['register'])
  29 +
  30 +watch(
  31 + () => appStore.getIsDark,
  32 + () => {
  33 + if (appStore.getIsDark == true) {
  34 + import('./style/dark.scss')
  35 + }
  36 + if (appStore.getIsDark == false) {
  37 + import('./style/light.scss')
  38 + }
  39 + },
  40 + { immediate: true }
  41 +)
  42 +
  43 +const currentSize = computed(() => {
  44 + let resSize: SizeType = 'small'
  45 + const appsize = appStore.getCurrentSize
  46 + switch (appsize) {
  47 + case 'large':
  48 + resSize = 'medium'
  49 + break
  50 + case 'default':
  51 + resSize = 'small'
  52 + break
  53 + case 'small':
  54 + resSize = 'mini'
  55 + break
  56 + }
  57 + return resSize
  58 +})
  59 +
  60 +const props = defineProps({
  61 + options: {
  62 + type: Object as PropType<XTableProps>,
  63 + default: () => {}
  64 + }
  65 +})
  66 +const innerProps = ref<Partial<XTableProps>>()
  67 +
  68 +const getProps = computed(() => {
  69 + const options = innerProps.value || props.options
  70 + options.size = currentSize as any
  71 + options.height = 700
  72 + getOptionInitConfig(options)
  73 + getColumnsConfig(options)
  74 + getProxyConfig(options)
  75 + getPageConfig(options)
  76 + getToolBarConfig(options)
  77 + // console.log(options);
  78 + return {
  79 + ...options,
  80 + ...attrs
  81 + }
  82 +})
  83 +
  84 +const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref
  85 +
  86 +let proxyForm = false
  87 +
  88 +const getOptionInitConfig = (options: XTableProps) => {
  89 + options.size = currentSize as any
  90 + options.rowConfig = {
  91 + isCurrent: true, // 当鼠标点击行时,是否要高亮当前行
  92 + isHover: true // 当鼠标移到行时,是否要高亮当前行
  93 + }
  94 +}
  95 +
  96 +// columns
  97 +const getColumnsConfig = (options: XTableProps) => {
  98 + const { allSchemas } = options
  99 + if (!allSchemas) return
  100 + if (allSchemas.printSchema) {
  101 + options.printConfig = {
  102 + columns: allSchemas.printSchema
  103 + }
  104 + }
  105 + if (allSchemas.formSchema) {
  106 + proxyForm = true
  107 + options.formConfig = {
  108 + enabled: true,
  109 + titleWidth: 100,
  110 + titleAlign: 'right',
  111 + items: allSchemas.searchSchema
  112 + }
  113 + }
  114 + if (allSchemas.tableSchema) {
  115 + options.columns = allSchemas.tableSchema
  116 + }
  117 +}
  118 +
  119 +// 动态请求
  120 +const getProxyConfig = (options: XTableProps) => {
  121 + const { getListApi, proxyConfig, data, isList } = options
  122 + if (proxyConfig || data) return
  123 + if (getListApi && isFunction(getListApi) && !isList) {
  124 + if (!isList) {
  125 + options.proxyConfig = {
  126 + seq: true, // 启用动态序号代理(分页之后索引自动计算为当前页的起始序号)
  127 + form: proxyForm, // 启用表单代理,当点击表单提交按钮时会自动触发 reload 行为
  128 + props: { result: 'list', total: 'total' },
  129 + ajax: {
  130 + query: async ({ page, form }) => {
  131 + let queryParams: any = Object.assign({}, JSON.parse(JSON.stringify(form)))
  132 + if (options.params) {
  133 + queryParams = Object.assign(queryParams, options.params)
  134 + }
  135 + if (!options?.treeConfig) {
  136 + queryParams.pageSize = page.pageSize
  137 + queryParams.pageNo = page.currentPage
  138 + }
  139 + return new Promise(async (resolve) => {
  140 + resolve(await getListApi(queryParams))
  141 + })
  142 + },
  143 + delete: ({ body }) => {
  144 + return new Promise(async (resolve) => {
  145 + if (options.deleteApi) {
  146 + resolve(await options.deleteApi(JSON.stringify(body)))
  147 + } else {
  148 + Promise.reject('未设置deleteApi')
  149 + }
  150 + })
  151 + },
  152 + queryAll: ({ form }) => {
  153 + const queryParams = Object.assign({}, JSON.parse(JSON.stringify(form)))
  154 + return new Promise(async (resolve) => {
  155 + if (options.getAllListApi) {
  156 + resolve(await options.getAllListApi(queryParams))
  157 + } else {
  158 + resolve(await getListApi(queryParams))
  159 + }
  160 + })
  161 + }
  162 + }
  163 + }
  164 + } else {
  165 + options.proxyConfig = {
  166 + seq: true, // 启用动态序号代理(分页之后索引自动计算为当前页的起始序号)
  167 + form: true, // 启用表单代理,当点击表单提交按钮时会自动触发 reload 行为
  168 + props: { result: 'data' },
  169 + ajax: {
  170 + query: ({ form }) => {
  171 + let queryParams: any = Object.assign({}, JSON.parse(JSON.stringify(form)))
  172 + if (options?.params) {
  173 + queryParams = Object.assign(queryParams, options.params)
  174 + }
  175 + return new Promise(async (resolve) => {
  176 + resolve(await getListApi(queryParams))
  177 + })
  178 + }
  179 + }
  180 + }
  181 + }
  182 + }
  183 + if (options.exportListApi) {
  184 + options.exportConfig = {
  185 + filename: options?.exportName,
  186 + // 默认选中类型
  187 + type: 'csv',
  188 + // 自定义数据量列表
  189 + modes: options?.getAllListApi ? ['current', 'all'] : ['current'],
  190 + columns: options?.allSchemas?.printSchema
  191 + }
  192 + }
  193 +}
  194 +
  195 +// 分页
  196 +const getPageConfig = (options: XTableProps) => {
  197 + const { pagination, pagerConfig, treeConfig } = options
  198 + if (treeConfig) {
  199 + options.treeConfig = options.treeConfig
  200 + return
  201 + }
  202 + if (pagerConfig) return
  203 + if (pagination) {
  204 + if (isBoolean(pagination)) {
  205 + options.pagerConfig = {
  206 + border: false, // 带边框
  207 + background: true, // 带背景颜色
  208 + perfect: false, // 配套的样式
  209 + pageSize: 10, // 每页大小
  210 + pagerCount: 7, // 显示页码按钮的数量
  211 + autoHidden: false, // 当只有一页时自动隐藏
  212 + pageSizes: [5, 10, 20, 30, 50, 100], // 每页大小选项列表
  213 + layouts: [
  214 + 'PrevJump',
  215 + 'PrevPage',
  216 + 'JumpNumber',
  217 + 'NextPage',
  218 + 'NextJump',
  219 + 'Sizes',
  220 + 'FullJump',
  221 + 'Total'
  222 + ]
  223 + }
  224 + return
  225 + }
  226 + options.pagerConfig = pagination
  227 + } else {
  228 + if (pagination != false) {
  229 + options.pagerConfig = {
  230 + border: false, // 带边框
  231 + background: true, // 带背景颜色
  232 + perfect: false, // 配套的样式
  233 + pageSize: 10, // 每页大小
  234 + pagerCount: 7, // 显示页码按钮的数量
  235 + autoHidden: false, // 当只有一页时自动隐藏
  236 + pageSizes: [5, 10, 20, 30, 50, 100], // 每页大小选项列表
  237 + layouts: [
  238 + 'PrevJump',
  239 + 'PrevPage',
  240 + 'JumpNumber',
  241 + 'NextPage',
  242 + 'NextJump',
  243 + 'Sizes',
  244 + 'FullJump',
  245 + 'Total'
  246 + ]
  247 + }
  248 + }
  249 + }
  250 +}
  251 +
  252 +// tool bar
  253 +const getToolBarConfig = (options: XTableProps) => {
  254 + const { toolBar, toolbarConfig, topActionSlots } = options
  255 + if (toolbarConfig) return
  256 + if (toolBar) {
  257 + if (!isBoolean(toolBar)) {
  258 + options.toolbarConfig = toolBar
  259 + return
  260 + }
  261 + } else if (!topActionSlots) {
  262 + options.toolbarConfig = {
  263 + slots: { buttons: 'toolbar_buttons' }
  264 + }
  265 + }
  266 +}
  267 +
  268 +// 刷新列表
  269 +const reload = () => {
  270 + const g = unref(xGrid)
  271 + if (!g) {
  272 + return
  273 + }
  274 + g.commitProxy('query')
  275 +}
  276 +
  277 +// 删除
  278 +const deleteData = async (ids: string | number) => {
  279 + const g = unref(xGrid)
  280 + if (!g) {
  281 + return
  282 + }
  283 + const options = innerProps.value || props.options
  284 + if (!options.deleteApi) {
  285 + console.error('未传入delListApi')
  286 + return
  287 + }
  288 + return new Promise(async () => {
  289 + message.delConfirm().then(async () => {
  290 + await (options?.deleteApi && options?.deleteApi(ids))
  291 + message.success(t('common.delSuccess'))
  292 + // 刷新列表
  293 + reload()
  294 + })
  295 + })
  296 +}
  297 +
  298 +// 导出
  299 +const exportList = async (fileName?: string) => {
  300 + const g = unref(xGrid)
  301 + if (!g) {
  302 + return
  303 + }
  304 + const options = innerProps.value || props.options
  305 + if (!options?.exportListApi) {
  306 + console.error('未传入exportListApi')
  307 + return
  308 + }
  309 + const queryParams = Object.assign({}, JSON.parse(JSON.stringify(g.getProxyInfo()?.form)))
  310 + message.exportConfirm().then(async () => {
  311 + const res = await (options?.exportListApi && options?.exportListApi(queryParams))
  312 + download.excel(res as unknown as Blob, fileName ? fileName : 'excel.xls')
  313 + })
  314 +}
  315 +
  316 +// 获取查询参数
  317 +const getSearchData = () => {
  318 + const g = unref(xGrid)
  319 + if (!g) {
  320 + return
  321 + }
  322 + const queryParams = Object.assign({}, JSON.parse(JSON.stringify(g.getProxyInfo()?.form)))
  323 + return queryParams
  324 +}
  325 +
  326 +const setProps = (prop: Partial<XTableProps>) => {
  327 + innerProps.value = { ...unref(innerProps), ...prop }
  328 +}
  329 +
  330 +defineExpose({ reload, Ref: xGrid, getSearchData, deleteData, exportList })
  331 +emit('register', { reload, getSearchData, setProps, deleteData, exportList })
  332 +</script>
  333 +<style lang="scss">
  334 +@import './style/index.scss';
  335 +</style>
yudao-ui-admin-vue3/src/components/XTable/src/style/dark.scss 0 → 100644
  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/components/XTable/src/style/index.scss 0 → 100644
  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/components/XTable/src/style/light.scss 0 → 100644
  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';
yudao-ui-admin-vue3/src/components/XTable/src/type.ts 0 → 100644
  1 +import { CrudSchema } from '@/hooks/web/useCrudSchemas'
  2 +import type { VxeGridProps, VxeGridPropTypes, VxeTablePropTypes } from 'vxe-table'
  3 +
  4 +export type XTableProps<D = any> = VxeGridProps<D> & {
  5 + allSchemas?: CrudSchema
  6 + height?: number // 高度 默认730
  7 + topActionSlots?: boolean // 是否开启表格内顶部操作栏插槽
  8 + treeConfig?: VxeTablePropTypes.TreeConfig // 树形表单配置
  9 + isList?: boolean // 是否不带分页的list
  10 + getListApi?: Function // 获取列表接口
  11 + getAllListApi?: Function // 获取全部数据接口 用于 vxe 导出
  12 + deleteApi?: Function // 删除接口
  13 + exportListApi?: Function // 导出接口
  14 + exportName?: string // 导出文件夹名称
  15 + params?: any // 其他查询参数
  16 + pagination?: boolean | VxeGridPropTypes.PagerConfig // 分页配置参数
  17 + toolBar?: boolean | VxeGridPropTypes.ToolbarConfig // 右侧工具栏配置参数
  18 +}
  19 +export type XColumns = VxeGridPropTypes.Columns
  20 +
  21 +export type VxeTableColumn = {
  22 + field: string
  23 + title?: string
  24 + children?: VxeTableColumn[]
  25 +} & Recordable
yudao-ui-admin-vue3/src/components/index.ts
@@ -4,6 +4,7 @@ import { Form } from &#39;@/components/Form&#39; @@ -4,6 +4,7 @@ import { Form } from &#39;@/components/Form&#39;
4 import { Table } from '@/components/Table' 4 import { Table } from '@/components/Table'
5 import { Search } from '@/components/Search' 5 import { Search } from '@/components/Search'
6 import { XModal } from '@/components/XModal' 6 import { XModal } from '@/components/XModal'
  7 +import { XTable } from '@/components/XTable'
7 import { XButton, XTextButton } from '@/components/XButton' 8 import { XButton, XTextButton } from '@/components/XButton'
8 import { DictTag } from '@/components/DictTag' 9 import { DictTag } from '@/components/DictTag'
9 import { ContentWrap } from '@/components/ContentWrap' 10 import { ContentWrap } from '@/components/ContentWrap'
@@ -15,6 +16,7 @@ export const setupGlobCom = (app: App&lt;Element&gt;): void =&gt; { @@ -15,6 +16,7 @@ export const setupGlobCom = (app: App&lt;Element&gt;): void =&gt; {
15 app.component('Table', Table) 16 app.component('Table', Table)
16 app.component('Search', Search) 17 app.component('Search', Search)
17 app.component('XModal', XModal) 18 app.component('XModal', XModal)
  19 + app.component('XTable', XTable)
18 app.component('XButton', XButton) 20 app.component('XButton', XButton)
19 app.component('XTextButton', XTextButton) 21 app.component('XTextButton', XTextButton)
20 app.component('DictTag', DictTag) 22 app.component('DictTag', DictTag)
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/hooks/web/useXTable.ts 0 → 100644
  1 +import { ref, unref } from 'vue'
  2 +import { XTableProps } from '@/components/XTable/src/type'
  3 +
  4 +export interface tableMethod {
  5 + reload: () => void
  6 + setProps: (props: XTableProps) => void
  7 + deleteData: (ids: string | number) => void
  8 + exportList: (fileName?: string) => void
  9 +}
  10 +
  11 +export const useXTable = (props: XTableProps): [Function, tableMethod] => {
  12 + const tableRef = ref<Nullable<tableMethod>>(null)
  13 +
  14 + const register = (instance) => {
  15 + tableRef.value = instance
  16 + props && instance.setProps(props)
  17 + }
  18 + const getInstance = (): tableMethod => {
  19 + const table = unref(tableRef)
  20 + if (!table) {
  21 + console.error('表格实例不存在')
  22 + }
  23 + return table as tableMethod
  24 + }
  25 + const methods: tableMethod = {
  26 + reload: () => getInstance().reload(),
  27 + setProps: (props) => getInstance().setProps(props),
  28 + deleteData: (ids: string | number) => getInstance().deleteData(ids),
  29 + exportList: (fileName?: string) => getInstance().exportList(fileName)
  30 + }
  31 + return [register, methods]
  32 +}
yudao-ui-admin-vue3/src/main.ts
@@ -26,10 +26,10 @@ import &#39;@/styles/index.scss&#39; @@ -26,10 +26,10 @@ 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
@@ -53,6 +53,8 @@ const setupAll = async () =&gt; { @@ -53,6 +53,8 @@ const setupAll = async () =&gt; {
53 53
54 setupAuth(app) 54 setupAuth(app)
55 55
  56 + await router.isReady()
  57 +
56 app.mount('#app') 58 app.mount('#app')
57 } 59 }
58 60
yudao-ui-admin-vue3/src/plugins/vxeTable/index.ts
1 -import { App, unref, watch } from 'vue' 1 +import { App, unref } from 'vue'
2 import XEUtils from 'xe-utils' 2 import XEUtils from 'xe-utils'
3 -import './index.scss'  
4 import './renderer' 3 import './renderer'
5 import { i18n } from '@/plugins/vueI18n' 4 import { i18n } from '@/plugins/vueI18n'
6 -import { useAppStore } from '@/store/modules/app'  
7 import zhCN from 'vxe-table/lib/locale/lang/zh-CN' 5 import zhCN from 'vxe-table/lib/locale/lang/zh-CN'
8 import enUS from 'vxe-table/lib/locale/lang/en-US' 6 import enUS from 'vxe-table/lib/locale/lang/en-US'
9 import { 7 import {
@@ -46,21 +44,6 @@ import { @@ -46,21 +44,6 @@ import {
46 Table 44 Table
47 } from 'vxe-table' 45 } from 'vxe-table'
48 46
49 -const appStore = useAppStore()  
50 -watch(  
51 - () => appStore.getIsDark,  
52 - () => {  
53 - if (appStore.getIsDark) {  
54 - import('./theme/dark.scss')  
55 - } else {  
56 - import('./theme/light.scss')  
57 - }  
58 - },  
59 - {  
60 - deep: true,  
61 - immediate: true  
62 - }  
63 -)  
64 // 全局默认参数 47 // 全局默认参数
65 VXETable.setup({ 48 VXETable.setup({
66 size: 'medium', // 全局尺寸 49 size: 'medium', // 全局尺寸
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/router/index.ts
@@ -6,15 +6,11 @@ import { isRelogin } from &#39;@/config/axios/service&#39; @@ -6,15 +6,11 @@ import { isRelogin } from &#39;@/config/axios/service&#39;
6 import { getAccessToken } from '@/utils/auth' 6 import { getAccessToken } from '@/utils/auth'
7 import { useTitle } from '@/hooks/web/useTitle' 7 import { useTitle } from '@/hooks/web/useTitle'
8 import { useNProgress } from '@/hooks/web/useNProgress' 8 import { useNProgress } from '@/hooks/web/useNProgress'
9 -import { CACHE_KEY, useCache } from '@/hooks/web/useCache'  
10 import { usePageLoading } from '@/hooks/web/usePageLoading' 9 import { usePageLoading } from '@/hooks/web/usePageLoading'
11 import { useDictStoreWithOut } from '@/store/modules/dict' 10 import { useDictStoreWithOut } from '@/store/modules/dict'
12 import { useUserStoreWithOut } from '@/store/modules/user' 11 import { useUserStoreWithOut } from '@/store/modules/user'
13 import { usePermissionStoreWithOut } from '@/store/modules/permission' 12 import { usePermissionStoreWithOut } from '@/store/modules/permission'
14 import { getInfoApi } from '@/api/login' 13 import { getInfoApi } from '@/api/login'
15 -import { listSimpleDictDataApi } from '@/api/system/dict/dict.data'  
16 -  
17 -const { wsCache } = useCache()  
18 14
19 const { start, done } = useNProgress() 15 const { start, done } = useNProgress()
20 16
@@ -50,10 +46,8 @@ router.beforeEach(async (to, from, next) =&gt; { @@ -50,10 +46,8 @@ router.beforeEach(async (to, from, next) =&gt; {
50 const dictStore = useDictStoreWithOut() 46 const dictStore = useDictStoreWithOut()
51 const userStore = useUserStoreWithOut() 47 const userStore = useUserStoreWithOut()
52 const permissionStore = usePermissionStoreWithOut() 48 const permissionStore = usePermissionStoreWithOut()
53 - const dictMap = wsCache.get(CACHE_KEY.DICT_CACHE)  
54 - if (!dictMap) {  
55 - const res = await listSimpleDictDataApi()  
56 - dictStore.setDictMap(res) 49 + if (!dictStore.getIsSetDict) {
  50 + dictStore.setDictMap()
57 } 51 }
58 if (!userStore.getIsSetUser) { 52 if (!userStore.getIsSetUser) {
59 isRelogin.show = true 53 isRelogin.show = true
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/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/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/infra/apiAccessLog/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #duration_default="{ row }"> 5 <template #duration_default="{ row }">
6 <span>{{ row.duration + 'ms' }}</span> 6 <span>{{ row.duration + 'ms' }}</span>
7 </template> 7 </template>
@@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
17 @click="handleDetail(row)" 17 @click="handleDetail(row)"
18 /> 18 />
19 </template> 19 </template>
20 - </vxe-grid> 20 + </XTable>
21 </ContentWrap> 21 </ContentWrap>
22 <XModal v-model="dialogVisible" :title="dialogTitle"> 22 <XModal v-model="dialogVisible" :title="dialogTitle">
23 <!-- 对话框(详情) --> 23 <!-- 对话框(详情) -->
@@ -38,15 +38,14 @@ @@ -38,15 +38,14 @@
38 <script setup lang="ts" name="ApiAccessLog"> 38 <script setup lang="ts" name="ApiAccessLog">
39 import { ref } from 'vue' 39 import { ref } from 'vue'
40 import { useI18n } from '@/hooks/web/useI18n' 40 import { useI18n } from '@/hooks/web/useI18n'
41 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
42 -import { VxeGridInstance } from 'vxe-table' 41 +import { useXTable } from '@/hooks/web/useXTable'
43 import { allSchemas } from './apiAccessLog.data' 42 import { allSchemas } from './apiAccessLog.data'
44 import * as ApiAccessLogApi from '@/api/infra/apiAccessLog' 43 import * as ApiAccessLogApi from '@/api/infra/apiAccessLog'
  44 +
45 const { t } = useI18n() // 国际化 45 const { t } = useI18n() // 国际化
46 46
47 // 列表相关的变量 47 // 列表相关的变量
48 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
49 -const { gridOptions } = useVxeGrid<ApiAccessLogApi.ApiAccessLogVO>({ 48 +const [registerTable] = useXTable({
50 allSchemas: allSchemas, 49 allSchemas: allSchemas,
51 topActionSlots: false, 50 topActionSlots: false,
52 getListApi: ApiAccessLogApi.getApiAccessLogPageApi 51 getListApi: ApiAccessLogApi.getApiAccessLogPageApi
yudao-ui-admin-vue3/src/views/infra/apiErrorLog/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <!-- 操作:导出 --> 5 <!-- 操作:导出 -->
6 <template #toolbar_buttons> 6 <template #toolbar_buttons>
7 <XButton 7 <XButton
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 }">
@@ -40,7 +40,7 @@ @@ -40,7 +40,7 @@
40 @click="handleProcessClick(row, InfraApiErrorLogProcessStatusEnum.IGNORE, '已忽略')" 40 @click="handleProcessClick(row, InfraApiErrorLogProcessStatusEnum.IGNORE, '已忽略')"
41 /> 41 />
42 </template> 42 </template>
43 - </vxe-grid> 43 + </XTable>
44 </ContentWrap> 44 </ContentWrap>
45 <XModal v-model="dialogVisible" :title="dialogTitle"> 45 <XModal v-model="dialogVisible" :title="dialogTitle">
46 <!-- 对话框(详情) --> 46 <!-- 对话框(详情) -->
@@ -54,18 +54,17 @@ @@ -54,18 +54,17 @@
54 <script setup lang="ts" name="ApiErrorLog"> 54 <script setup lang="ts" name="ApiErrorLog">
55 import { ref } from 'vue' 55 import { ref } from 'vue'
56 import { useI18n } from '@/hooks/web/useI18n' 56 import { useI18n } from '@/hooks/web/useI18n'
57 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
58 -import { VxeGridInstance } from 'vxe-table' 57 +import { useXTable } from '@/hooks/web/useXTable'
59 import { allSchemas } from './apiErrorLog.data' 58 import { allSchemas } from './apiErrorLog.data'
60 import * as ApiErrorLogApi from '@/api/infra/apiErrorLog' 59 import * as ApiErrorLogApi from '@/api/infra/apiErrorLog'
61 import { InfraApiErrorLogProcessStatusEnum } from '@/utils/constants' 60 import { InfraApiErrorLogProcessStatusEnum } from '@/utils/constants'
62 import { useMessage } from '@/hooks/web/useMessage' 61 import { useMessage } from '@/hooks/web/useMessage'
63 -const message = useMessage() 62 +
64 const { t } = useI18n() // 国际化 63 const { t } = useI18n() // 国际化
  64 +const message = useMessage()
65 65
66 // ========== 列表相关 ========== 66 // ========== 列表相关 ==========
67 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
68 -const { gridOptions, getList, exportList } = useVxeGrid<ApiErrorLogApi.ApiErrorLogVO>({ 67 +const [registerTable, { reload, exportList }] = useXTable({
69 allSchemas: allSchemas, 68 allSchemas: allSchemas,
70 getListApi: ApiErrorLogApi.getApiErrorLogPageApi, 69 getListApi: ApiErrorLogApi.getApiErrorLogPageApi,
71 exportListApi: ApiErrorLogApi.exportApiErrorLogApi 70 exportListApi: ApiErrorLogApi.exportApiErrorLogApi
@@ -82,10 +81,7 @@ const handleDetail = (row: ApiErrorLogApi.ApiErrorLogVO) =&gt; { @@ -82,10 +81,7 @@ const handleDetail = (row: ApiErrorLogApi.ApiErrorLogVO) =&gt; {
82 dialogTitle.value = t('action.detail') 81 dialogTitle.value = t('action.detail')
83 dialogVisible.value = true 82 dialogVisible.value = true
84 } 83 }
85 -// 导出  
86 -const handleExport = async () => {  
87 - await exportList(xGrid, '错误数据.xls')  
88 -} 84 +
89 // 异常处理操作 85 // 异常处理操作
90 const handleProcessClick = ( 86 const handleProcessClick = (
91 row: ApiErrorLogApi.ApiErrorLogVO, 87 row: ApiErrorLogApi.ApiErrorLogVO,
@@ -100,7 +96,7 @@ const handleProcessClick = ( @@ -100,7 +96,7 @@ const handleProcessClick = (
100 }) 96 })
101 .finally(async () => { 97 .finally(async () => {
102 // 刷新列表 98 // 刷新列表
103 - await getList(xGrid) 99 + await reload()
104 }) 100 })
105 .catch(() => {}) 101 .catch(() => {})
106 } 102 }
yudao-ui-admin-vue3/src/views/infra/codegen/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:导入 --> 6 <!-- 操作:导入 -->
7 <XButton 7 <XButton
@@ -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
@@ -49,20 +49,19 @@ @@ -49,20 +49,19 @@
49 @click="handleGenTable(row)" 49 @click="handleGenTable(row)"
50 /> 50 />
51 </template> 51 </template>
52 - </vxe-grid> 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>
59 <script setup lang="ts" name="Codegen"> 59 <script setup lang="ts" name="Codegen">
60 import { ref } from 'vue' 60 import { ref } from 'vue'
61 import { useRouter } from 'vue-router' 61 import { useRouter } from 'vue-router'
62 -import { VxeGridInstance } from 'vxe-table'  
63 import { useI18n } from '@/hooks/web/useI18n' 62 import { useI18n } from '@/hooks/web/useI18n'
64 import { useMessage } from '@/hooks/web/useMessage' 63 import { useMessage } from '@/hooks/web/useMessage'
65 -import { useVxeGrid } from '@/hooks/web/useVxeGrid' 64 +import { useXTable } from '@/hooks/web/useXTable'
66 import download from '@/utils/download' 65 import download from '@/utils/download'
67 import * as CodegenApi from '@/api/infra/codegen' 66 import * as CodegenApi from '@/api/infra/codegen'
68 import { CodegenTableVO } from '@/api/infra/codegen/types' 67 import { CodegenTableVO } from '@/api/infra/codegen/types'
@@ -73,8 +72,7 @@ const { t } = useI18n() // 国际化 @@ -73,8 +72,7 @@ const { t } = useI18n() // 国际化
73 const message = useMessage() // 消息弹窗 72 const message = useMessage() // 消息弹窗
74 const { push } = useRouter() // 路由跳转 73 const { push } = useRouter() // 路由跳转
75 // 列表相关的变量 74 // 列表相关的变量
76 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
77 -const { gridOptions, getList, deleteData } = useVxeGrid<CodegenTableVO>({ 75 +const [registerTable, { reload, deleteData }] = useXTable({
78 allSchemas: allSchemas, 76 allSchemas: allSchemas,
79 getListApi: CodegenApi.getCodegenTablePageApi, 77 getListApi: CodegenApi.getCodegenTablePageApi,
80 deleteApi: CodegenApi.deleteCodegenTableApi 78 deleteApi: CodegenApi.deleteCodegenTableApi
@@ -105,17 +103,10 @@ const handleSynchDb = (row: CodegenTableVO) =&gt; { @@ -105,17 +103,10 @@ const handleSynchDb = (row: CodegenTableVO) =&gt; {
105 message.success('同步成功') 103 message.success('同步成功')
106 }) 104 })
107 } 105 }
  106 +
108 // 生成代码操作 107 // 生成代码操作
109 const handleGenTable = async (row: CodegenTableVO) => { 108 const handleGenTable = async (row: CodegenTableVO) => {
110 const res = await CodegenApi.downloadCodegenApi(row.id) 109 const res = await CodegenApi.downloadCodegenApi(row.id)
111 download.zip(res, 'codegen-' + row.className + '.zip') 110 download.zip(res, 'codegen-' + row.className + '.zip')
112 } 111 }
113 -// 删除操作  
114 -const handleDelete = async (rowId: number) => {  
115 - await deleteData(xGrid, rowId)  
116 -}  
117 -// 查询操作  
118 -const handleQuery = async () => {  
119 - await getList(xGrid)  
120 -}  
121 </script> 112 </script>
yudao-ui-admin-vue3/src/views/infra/config/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:新增 --> 6 <!-- 操作:新增 -->
7 <XButton 7 <XButton
@@ -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,10 +43,10 @@ @@ -43,10 +43,10 @@
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 - </vxe-grid> 49 + </XTable>
50 </ContentWrap> 50 </ContentWrap>
51 51
52 <XModal v-model="dialogVisible" :title="dialogTitle"> 52 <XModal v-model="dialogVisible" :title="dialogTitle">
@@ -87,8 +87,7 @@ @@ -87,8 +87,7 @@
87 import { ref, unref } from 'vue' 87 import { ref, unref } from 'vue'
88 import { useI18n } from '@/hooks/web/useI18n' 88 import { useI18n } from '@/hooks/web/useI18n'
89 import { useMessage } from '@/hooks/web/useMessage' 89 import { useMessage } from '@/hooks/web/useMessage'
90 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
91 -import { VxeGridInstance } from 'vxe-table' 90 +import { useXTable } from '@/hooks/web/useXTable'
92 import { FormExpose } from '@/components/Form' 91 import { FormExpose } from '@/components/Form'
93 // 业务相关的 import 92 // 业务相关的 import
94 import * as ConfigApi from '@/api/infra/config' 93 import * as ConfigApi from '@/api/infra/config'
@@ -97,8 +96,7 @@ import { rules, allSchemas } from &#39;./config.data&#39; @@ -97,8 +96,7 @@ import { rules, allSchemas } from &#39;./config.data&#39;
97 const { t } = useI18n() // 国际化 96 const { t } = useI18n() // 国际化
98 const message = useMessage() // 消息弹窗 97 const message = useMessage() // 消息弹窗
99 // 列表相关的变量 98 // 列表相关的变量
100 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
101 -const { gridOptions, getList, deleteData, exportList } = useVxeGrid<ConfigApi.ConfigVO>({ 99 +const [registerTable, { reload, deleteData, exportList }] = useXTable({
102 allSchemas: allSchemas, 100 allSchemas: allSchemas,
103 getListApi: ConfigApi.getConfigPageApi, 101 getListApi: ConfigApi.getConfigPageApi,
104 deleteApi: ConfigApi.deleteConfigApi, 102 deleteApi: ConfigApi.deleteConfigApi,
@@ -125,11 +123,6 @@ const handleCreate = () =&gt; { @@ -125,11 +123,6 @@ const handleCreate = () =&gt; {
125 setDialogTile('create') 123 setDialogTile('create')
126 } 124 }
127 125
128 -// 导出操作  
129 -const handleExport = async () => {  
130 - await exportList(xGrid, '配置.xls')  
131 -}  
132 -  
133 // 修改操作 126 // 修改操作
134 const handleUpdate = async (rowId: number) => { 127 const handleUpdate = async (rowId: number) => {
135 setDialogTile('update') 128 setDialogTile('update')
@@ -145,11 +138,6 @@ const handleDetail = async (rowId: number) =&gt; { @@ -145,11 +138,6 @@ const handleDetail = async (rowId: number) =&gt; {
145 detailData.value = res 138 detailData.value = res
146 } 139 }
147 140
148 -// 删除操作  
149 -const handleDelete = async (rowId: number) => {  
150 - await deleteData(xGrid, rowId)  
151 -}  
152 -  
153 // 提交按钮 141 // 提交按钮
154 const submitForm = async () => { 142 const submitForm = async () => {
155 const elForm = unref(formRef)?.getElFormRef() 143 const elForm = unref(formRef)?.getElFormRef()
@@ -171,7 +159,7 @@ const submitForm = async () =&gt; { @@ -171,7 +159,7 @@ const submitForm = async () =&gt; {
171 } finally { 159 } finally {
172 actionLoading.value = false 160 actionLoading.value = false
173 // 刷新列表 161 // 刷新列表
174 - await getList(xGrid) 162 + await reload()
175 } 163 }
176 } 164 }
177 }) 165 })
yudao-ui-admin-vue3/src/views/infra/dataSourceConfig/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <XButton 6 <XButton
7 type="primary" 7 type="primary"
@@ -31,10 +31,10 @@ @@ -31,10 +31,10 @@
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 - </vxe-grid> 37 + </XTable>
38 </ContentWrap> 38 </ContentWrap>
39 <XModal v-model="dialogVisible" :title="dialogTitle"> 39 <XModal v-model="dialogVisible" :title="dialogTitle">
40 <!-- 对话框(添加 / 修改) --> 40 <!-- 对话框(添加 / 修改) -->
@@ -69,9 +69,8 @@ @@ -69,9 +69,8 @@
69 // 全局相关的 import 69 // 全局相关的 import
70 import { ref, unref } from 'vue' 70 import { ref, unref } from 'vue'
71 import { useI18n } from '@/hooks/web/useI18n' 71 import { useI18n } from '@/hooks/web/useI18n'
  72 +import { useXTable } from '@/hooks/web/useXTable'
72 import { useMessage } from '@/hooks/web/useMessage' 73 import { useMessage } from '@/hooks/web/useMessage'
73 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
74 -import { VxeGridInstance } from 'vxe-table'  
75 import { FormExpose } from '@/components/Form' 74 import { FormExpose } from '@/components/Form'
76 // 业务相关的 import 75 // 业务相关的 import
77 import * as DataSourceConfiggApi from '@/api/infra/dataSourceConfig' 76 import * as DataSourceConfiggApi from '@/api/infra/dataSourceConfig'
@@ -80,8 +79,7 @@ import { rules, allSchemas } from &#39;./dataSourceConfig.data&#39; @@ -80,8 +79,7 @@ import { rules, allSchemas } from &#39;./dataSourceConfig.data&#39;
80 const { t } = useI18n() // 国际化 79 const { t } = useI18n() // 国际化
81 const message = useMessage() // 消息弹窗 80 const message = useMessage() // 消息弹窗
82 // 列表相关的变量 81 // 列表相关的变量
83 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
84 -const { gridOptions, getList, deleteData } = useVxeGrid<DataSourceConfiggApi.DataSourceConfigVO>({ 82 +const [registerTable, { reload, deleteData }] = useXTable({
85 allSchemas: allSchemas, 83 allSchemas: allSchemas,
86 isList: true, 84 isList: true,
87 getListApi: DataSourceConfiggApi.getDataSourceConfigListApi, 85 getListApi: DataSourceConfiggApi.getDataSourceConfigListApi,
@@ -123,11 +121,6 @@ const handleDetail = async (rowId: number) =&gt; { @@ -123,11 +121,6 @@ const handleDetail = async (rowId: number) =&gt; {
123 setDialogTile('detail') 121 setDialogTile('detail')
124 } 122 }
125 123
126 -// 删除操作  
127 -const handleDelete = async (rowId: number) => {  
128 - await deleteData(xGrid, rowId)  
129 -}  
130 -  
131 // 提交按钮 124 // 提交按钮
132 const submitForm = async () => { 125 const submitForm = async () => {
133 const elForm = unref(formRef)?.getElFormRef() 126 const elForm = unref(formRef)?.getElFormRef()
@@ -149,7 +142,7 @@ const submitForm = async () =&gt; { @@ -149,7 +142,7 @@ const submitForm = async () =&gt; {
149 } finally { 142 } finally {
150 loading.value = false 143 loading.value = false
151 // 刷新列表 144 // 刷新列表
152 - await getList(xGrid) 145 + await reload()
153 } 146 }
154 } 147 }
155 }) 148 })
yudao-ui-admin-vue3/src/views/infra/fileConfig/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:新增 --> 6 <!-- 操作:新增 -->
7 <XButton 7 <XButton
@@ -41,10 +41,10 @@ @@ -41,10 +41,10 @@
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 - </vxe-grid> 47 + </XTable>
48 </ContentWrap> 48 </ContentWrap>
49 <XModal v-model="dialogVisible" :title="dialogTitle"> 49 <XModal v-model="dialogVisible" :title="dialogTitle">
50 <!-- 对话框(添加 / 修改) --> 50 <!-- 对话框(添加 / 修改) -->
@@ -173,8 +173,7 @@ import { @@ -173,8 +173,7 @@ import {
173 } from 'element-plus' 173 } from 'element-plus'
174 import { useI18n } from '@/hooks/web/useI18n' 174 import { useI18n } from '@/hooks/web/useI18n'
175 import { useMessage } from '@/hooks/web/useMessage' 175 import { useMessage } from '@/hooks/web/useMessage'
176 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
177 -import { VxeGridInstance } from 'vxe-table' 176 +import { useXTable } from '@/hooks/web/useXTable'
178 // 业务相关的 import 177 // 业务相关的 import
179 import * as FileConfigApi from '@/api/infra/fileConfig' 178 import * as FileConfigApi from '@/api/infra/fileConfig'
180 import { rules, allSchemas } from './fileConfig.data' 179 import { rules, allSchemas } from './fileConfig.data'
@@ -183,8 +182,7 @@ import { getIntDictOptions, DICT_TYPE } from &#39;@/utils/dict&#39; @@ -183,8 +182,7 @@ import { getIntDictOptions, DICT_TYPE } from &#39;@/utils/dict&#39;
183 const { t } = useI18n() // 国际化 182 const { t } = useI18n() // 国际化
184 const message = useMessage() // 消息弹窗 183 const message = useMessage() // 消息弹窗
185 // 列表相关的变量 184 // 列表相关的变量
186 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
187 -const { gridOptions, getList, deleteData } = useVxeGrid<FileConfigApi.FileConfigVO>({ 185 +const [registerTable, { reload, deleteData }] = useXTable({
188 allSchemas: allSchemas, 186 allSchemas: allSchemas,
189 getListApi: FileConfigApi.getFileConfigPageApi, 187 getListApi: FileConfigApi.getFileConfigPageApi,
190 deleteApi: FileConfigApi.deleteFileConfigApi 188 deleteApi: FileConfigApi.deleteFileConfigApi
@@ -276,7 +274,7 @@ const handleMaster = (row: FileConfigApi.FileConfigVO) =&gt; { @@ -276,7 +274,7 @@ const handleMaster = (row: FileConfigApi.FileConfigVO) =&gt; {
276 .confirm('是否确认修改配置【 ' + row.name + ' 】为主配置?', t('common.reminder')) 274 .confirm('是否确认修改配置【 ' + row.name + ' 】为主配置?', t('common.reminder'))
277 .then(async () => { 275 .then(async () => {
278 await FileConfigApi.updateFileConfigMasterApi(row.id) 276 await FileConfigApi.updateFileConfigMasterApi(row.id)
279 - await getList(xGrid) 277 + await reload()
280 }) 278 })
281 } 279 }
282 280
@@ -285,11 +283,6 @@ const handleTest = async (rowId: number) =&gt; { @@ -285,11 +283,6 @@ const handleTest = async (rowId: number) =&gt; {
285 message.alert('测试通过,上传文件成功!访问地址:' + res) 283 message.alert('测试通过,上传文件成功!访问地址:' + res)
286 } 284 }
287 285
288 -// 删除操作  
289 -const handleDelete = async (rowId: number) => {  
290 - await deleteData(xGrid, rowId)  
291 -}  
292 -  
293 // 提交按钮 286 // 提交按钮
294 const submitForm = async (formEl: FormInstance | undefined) => { 287 const submitForm = async (formEl: FormInstance | undefined) => {
295 if (!formEl) return 288 if (!formEl) return
@@ -308,7 +301,7 @@ const submitForm = async (formEl: FormInstance | undefined) =&gt; { @@ -308,7 +301,7 @@ const submitForm = async (formEl: FormInstance | undefined) =&gt; {
308 dialogVisible.value = false 301 dialogVisible.value = false
309 } finally { 302 } finally {
310 actionLoading.value = false 303 actionLoading.value = false
311 - await getList(xGrid) 304 + await reload()
312 } 305 }
313 } 306 }
314 }) 307 })
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
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <XButton 6 <XButton
7 type="primary" 7 type="primary"
@@ -21,10 +21,10 @@ @@ -21,10 +21,10 @@
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 - </vxe-grid> 27 + </XTable>
28 </ContentWrap> 28 </ContentWrap>
29 <XModal v-model="dialogVisible" :title="dialogTitle"> 29 <XModal v-model="dialogVisible" :title="dialogTitle">
30 <!-- 对话框(详情) --> 30 <!-- 对话框(详情) -->
@@ -85,8 +85,7 @@ @@ -85,8 +85,7 @@
85 import { ref, unref } from 'vue' 85 import { ref, unref } from 'vue'
86 import { useI18n } from '@/hooks/web/useI18n' 86 import { useI18n } from '@/hooks/web/useI18n'
87 import { useMessage } from '@/hooks/web/useMessage' 87 import { useMessage } from '@/hooks/web/useMessage'
88 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
89 -import { VxeGridInstance } from 'vxe-table' 88 +import { useXTable } from '@/hooks/web/useXTable'
90 import { ElUpload, ElImage, UploadInstance, UploadRawFile } from 'element-plus' 89 import { ElUpload, ElImage, UploadInstance, UploadRawFile } from 'element-plus'
91 // 业务相关的 import 90 // 业务相关的 import
92 import { allSchemas } from './fileList.data' 91 import { allSchemas } from './fileList.data'
@@ -98,8 +97,7 @@ const { t } = useI18n() // 国际化 @@ -98,8 +97,7 @@ const { t } = useI18n() // 国际化
98 const message = useMessage() // 消息弹窗 97 const message = useMessage() // 消息弹窗
99 98
100 // 列表相关的变量 99 // 列表相关的变量
101 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
102 -const { gridOptions, getList, deleteData } = useVxeGrid<FileApi.FileVO>({ 100 +const [registerTable, { reload, deleteData }] = useXTable({
103 allSchemas: allSchemas, 101 allSchemas: allSchemas,
104 getListApi: FileApi.getFilePageApi, 102 getListApi: FileApi.getFilePageApi,
105 deleteApi: FileApi.deleteFileApi 103 deleteApi: FileApi.deleteFileApi
@@ -145,7 +143,7 @@ const handleFileSuccess = async (response: any): Promise&lt;void&gt; =&gt; { @@ -145,7 +143,7 @@ const handleFileSuccess = async (response: any): Promise&lt;void&gt; =&gt; {
145 message.success('上传成功') 143 message.success('上传成功')
146 uploadDialogVisible.value = false 144 uploadDialogVisible.value = false
147 uploadDisabled.value = false 145 uploadDisabled.value = false
148 - await getList(xGrid) 146 + await reload()
149 } 147 }
150 // 文件数超出提示 148 // 文件数超出提示
151 const handleExceed = (): void => { 149 const handleExceed = (): void => {
@@ -164,11 +162,6 @@ const handleDetail = (row: FileApi.FileVO) =&gt; { @@ -164,11 +162,6 @@ const handleDetail = (row: FileApi.FileVO) =&gt; {
164 dialogVisible.value = true 162 dialogVisible.value = true
165 } 163 }
166 164
167 -// 删除操作  
168 -const handleDelete = async (rowId: number) => {  
169 - await deleteData(xGrid, rowId)  
170 -}  
171 -  
172 // ========== 复制相关 ========== 165 // ========== 复制相关 ==========
173 const handleCopy = async (text: string) => { 166 const handleCopy = async (text: string) => {
174 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
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <XButton 6 <XButton
7 type="warning" 7 type="warning"
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 }">
@@ -29,7 +29,7 @@ @@ -29,7 +29,7 @@
29 @click="handleDetail(row)" 29 @click="handleDetail(row)"
30 /> 30 />
31 </template> 31 </template>
32 - </vxe-grid> 32 + </XTable>
33 </ContentWrap> 33 </ContentWrap>
34 <XModal v-model="dialogVisible" :title="dialogTitle"> 34 <XModal v-model="dialogVisible" :title="dialogTitle">
35 <!-- 对话框(详情) --> 35 <!-- 对话框(详情) -->
@@ -51,15 +51,13 @@ @@ -51,15 +51,13 @@
51 import { ref } from 'vue' 51 import { ref } from 'vue'
52 import dayjs from 'dayjs' 52 import dayjs from 'dayjs'
53 import { useI18n } from '@/hooks/web/useI18n' 53 import { useI18n } from '@/hooks/web/useI18n'
54 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
55 -import { VxeGridInstance } from 'vxe-table' 54 +import { useXTable } from '@/hooks/web/useXTable'
56 import * as JobLogApi from '@/api/infra/jobLog' 55 import * as JobLogApi from '@/api/infra/jobLog'
57 import { allSchemas } from './jobLog.data' 56 import { allSchemas } from './jobLog.data'
58 57
59 const { t } = useI18n() // 国际化 58 const { t } = useI18n() // 国际化
60 // 列表相关的变量 59 // 列表相关的变量
61 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
62 -const { gridOptions, exportList } = useVxeGrid<JobLogApi.JobLogVO>({ 60 +const [registerTable, { exportList }] = useXTable({
63 allSchemas: allSchemas, 61 allSchemas: allSchemas,
64 getListApi: JobLogApi.getJobLogPageApi, 62 getListApi: JobLogApi.getJobLogPageApi,
65 exportListApi: JobLogApi.exportJobLogApi 63 exportListApi: JobLogApi.exportJobLogApi
@@ -79,8 +77,4 @@ const handleDetail = async (row: JobLogApi.JobLogVO) =&gt; { @@ -79,8 +77,4 @@ const handleDetail = async (row: JobLogApi.JobLogVO) =&gt; {
79 dialogTitle.value = t('action.detail') 77 dialogTitle.value = t('action.detail')
80 dialogVisible.value = true 78 dialogVisible.value = true
81 } 79 }
82 -// 导出操作  
83 -const handleExport = async () => {  
84 - await exportList(xGrid, '定时任务详情.xls')  
85 -}  
86 </script> 80 </script>
yudao-ui-admin-vue3/src/views/infra/job/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:新增 --> 6 <!-- 操作:新增 -->
7 <XButton 7 <XButton
@@ -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" />
@@ -83,7 +83,7 @@ @@ -83,7 +83,7 @@
83 </template> 83 </template>
84 </el-dropdown> 84 </el-dropdown>
85 </template> 85 </template>
86 - </vxe-grid> 86 + </XTable>
87 </ContentWrap> 87 </ContentWrap>
88 <XModal v-model="dialogVisible" :title="dialogTitle"> 88 <XModal v-model="dialogVisible" :title="dialogTitle">
89 <!-- 对话框(添加 / 修改) --> 89 <!-- 对话框(添加 / 修改) -->
@@ -134,8 +134,7 @@ import { useRouter } from &#39;vue-router&#39; @@ -134,8 +134,7 @@ import { useRouter } from &#39;vue-router&#39;
134 import { ElDropdown, ElDropdownMenu, ElDropdownItem } from 'element-plus' 134 import { ElDropdown, ElDropdownMenu, ElDropdownItem } from 'element-plus'
135 import { useI18n } from '@/hooks/web/useI18n' 135 import { useI18n } from '@/hooks/web/useI18n'
136 import { useMessage } from '@/hooks/web/useMessage' 136 import { useMessage } from '@/hooks/web/useMessage'
137 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
138 -import { VxeGridInstance } from 'vxe-table' 137 +import { useXTable } from '@/hooks/web/useXTable'
139 import { FormExpose } from '@/components/Form' 138 import { FormExpose } from '@/components/Form'
140 import { Crontab } from '@/components/Crontab' 139 import { Crontab } from '@/components/Crontab'
141 import * as JobApi from '@/api/infra/job' 140 import * as JobApi from '@/api/infra/job'
@@ -147,8 +146,7 @@ const message = useMessage() // 消息弹窗 @@ -147,8 +146,7 @@ const message = useMessage() // 消息弹窗
147 const { push } = useRouter() 146 const { push } = useRouter()
148 147
149 // 列表相关的变量 148 // 列表相关的变量
150 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
151 -const { gridOptions, getList, deleteData, exportList } = useVxeGrid<JobApi.JobVO>({ 149 +const [registerTable, { reload, deleteData, exportList }] = useXTable({
152 allSchemas: allSchemas, 150 allSchemas: allSchemas,
153 getListApi: JobApi.getJobPageApi, 151 getListApi: JobApi.getJobPageApi,
154 deleteApi: JobApi.deleteJobApi, 152 deleteApi: JobApi.deleteJobApi,
@@ -181,11 +179,6 @@ const handleCreate = () =&gt; { @@ -181,11 +179,6 @@ const handleCreate = () =&gt; {
181 setDialogTile('create') 179 setDialogTile('create')
182 } 180 }
183 181
184 -// 导出操作  
185 -const handleExport = async () => {  
186 - await exportList(xGrid, '定时任务.xls')  
187 -}  
188 -  
189 // 修改操作 182 // 修改操作
190 const handleUpdate = async (rowId: number) => { 183 const handleUpdate = async (rowId: number) => {
191 setDialogTile('update') 184 setDialogTile('update')
@@ -250,10 +243,6 @@ const parseTime = (time) =&gt; { @@ -250,10 +243,6 @@ const parseTime = (time) =&gt; {
250 return time_str 243 return time_str
251 } 244 }
252 245
253 -// 删除操作  
254 -const handleDelete = async (rowId: number) => {  
255 - await deleteData(xGrid, rowId)  
256 -}  
257 const handleChangeStatus = async (row: JobApi.JobVO) => { 246 const handleChangeStatus = async (row: JobApi.JobVO) => {
258 const text = row.status === InfraJobStatusEnum.STOP ? '开启' : '关闭' 247 const text = row.status === InfraJobStatusEnum.STOP ? '开启' : '关闭'
259 const status = 248 const status =
@@ -267,7 +256,7 @@ const handleChangeStatus = async (row: JobApi.JobVO) =&gt; { @@ -267,7 +256,7 @@ const handleChangeStatus = async (row: JobApi.JobVO) =&gt; {
267 : InfraJobStatusEnum.STOP 256 : InfraJobStatusEnum.STOP
268 await JobApi.updateJobStatusApi(row.id, status) 257 await JobApi.updateJobStatusApi(row.id, status)
269 message.success(text + '成功') 258 message.success(text + '成功')
270 - await getList(xGrid) 259 + await reload()
271 }) 260 })
272 .catch(() => { 261 .catch(() => {
273 row.status = 262 row.status =
@@ -277,7 +266,7 @@ const handleChangeStatus = async (row: JobApi.JobVO) =&gt; { @@ -277,7 +266,7 @@ const handleChangeStatus = async (row: JobApi.JobVO) =&gt; {
277 }) 266 })
278 } 267 }
279 // 执行日志 268 // 执行日志
280 -const handleJobLog = (rowId: number) => { 269 +const handleJobLog = (rowId?: number) => {
281 if (rowId) { 270 if (rowId) {
282 push('/job/job-log?id=' + rowId) 271 push('/job/job-log?id=' + rowId)
283 } else { 272 } else {
@@ -289,7 +278,7 @@ const handleRun = (row: JobApi.JobVO) =&gt; { @@ -289,7 +278,7 @@ const handleRun = (row: JobApi.JobVO) =&gt; {
289 message.confirm('确认要立即执行一次' + row.name + '?', t('common.reminder')).then(async () => { 278 message.confirm('确认要立即执行一次' + row.name + '?', t('common.reminder')).then(async () => {
290 await JobApi.runJobApi(row.id) 279 await JobApi.runJobApi(row.id)
291 message.success('执行成功') 280 message.success('执行成功')
292 - await getList(xGrid) 281 + await reload()
293 }) 282 })
294 } 283 }
295 // 提交按钮 284 // 提交按钮
@@ -312,7 +301,7 @@ const submitForm = async () =&gt; { @@ -312,7 +301,7 @@ const submitForm = async () =&gt; {
312 dialogVisible.value = false 301 dialogVisible.value = false
313 } finally { 302 } finally {
314 actionLoading.value = false 303 actionLoading.value = false
315 - await getList(xGrid) 304 + await reload()
316 } 305 }
317 } 306 }
318 }) 307 })
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
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:新增 --> 6 <!-- 操作:新增 -->
7 <XButton 7 <XButton
@@ -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,10 +40,10 @@ @@ -40,10 +40,10 @@
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 - </vxe-grid> 46 + </XTable>
47 </ContentWrap> 47 </ContentWrap>
48 48
49 <XModal v-model="dialogVisible" :title="dialogTitle"> 49 <XModal v-model="dialogVisible" :title="dialogTitle">
@@ -79,8 +79,7 @@ @@ -79,8 +79,7 @@
79 import { ref, unref } from 'vue' 79 import { ref, unref } from 'vue'
80 import { useI18n } from '@/hooks/web/useI18n' 80 import { useI18n } from '@/hooks/web/useI18n'
81 import { useMessage } from '@/hooks/web/useMessage' 81 import { useMessage } from '@/hooks/web/useMessage'
82 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
83 -import { VxeGridInstance } from 'vxe-table' 82 +import { useXTable } from '@/hooks/web/useXTable'
84 import { FormExpose } from '@/components/Form' 83 import { FormExpose } from '@/components/Form'
85 import { rules, allSchemas } from './app.data' 84 import { rules, allSchemas } from './app.data'
86 import * as AppApi from '@/api/pay/app' 85 import * as AppApi from '@/api/pay/app'
@@ -89,8 +88,7 @@ const { t } = useI18n() // 国际化 @@ -89,8 +88,7 @@ const { t } = useI18n() // 国际化
89 const message = useMessage() // 消息弹窗 88 const message = useMessage() // 消息弹窗
90 89
91 // 列表相关的变量 90 // 列表相关的变量
92 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
93 -const { gridOptions, getList, deleteData, exportList } = useVxeGrid<AppApi.AppVO>({ 91 +const [registerTable, { reload, deleteData, exportList }] = useXTable({
94 allSchemas: allSchemas, 92 allSchemas: allSchemas,
95 getListApi: AppApi.getAppPageApi, 93 getListApi: AppApi.getAppPageApi,
96 deleteApi: AppApi.deleteAppApi, 94 deleteApi: AppApi.deleteAppApi,
@@ -117,11 +115,6 @@ const handleCreate = () =&gt; { @@ -117,11 +115,6 @@ const handleCreate = () =&gt; {
117 setDialogTile('create') 115 setDialogTile('create')
118 } 116 }
119 117
120 -// 导出操作  
121 -const handleExport = async () => {  
122 - await exportList(xGrid, '应用信息.xls')  
123 -}  
124 -  
125 // 修改操作 118 // 修改操作
126 const handleUpdate = async (rowId: number) => { 119 const handleUpdate = async (rowId: number) => {
127 setDialogTile('update') 120 setDialogTile('update')
@@ -137,11 +130,6 @@ const handleDetail = async (rowId: number) =&gt; { @@ -137,11 +130,6 @@ const handleDetail = async (rowId: number) =&gt; {
137 detailData.value = res 130 detailData.value = res
138 } 131 }
139 132
140 -// 删除操作  
141 -const handleDelete = async (rowId: number) => {  
142 - await deleteData(xGrid, rowId)  
143 -}  
144 -  
145 // 提交按钮 133 // 提交按钮
146 const submitForm = async () => { 134 const submitForm = async () => {
147 const elForm = unref(formRef)?.getElFormRef() 135 const elForm = unref(formRef)?.getElFormRef()
@@ -163,7 +151,7 @@ const submitForm = async () =&gt; { @@ -163,7 +151,7 @@ const submitForm = async () =&gt; {
163 } finally { 151 } finally {
164 actionLoading.value = false 152 actionLoading.value = false
165 // 刷新列表 153 // 刷新列表
166 - await getList(xGrid) 154 + await reload()
167 } 155 }
168 } 156 }
169 }) 157 })
yudao-ui-admin-vue3/src/views/pay/merchant/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:新增 --> 6 <!-- 操作:新增 -->
7 <XButton 7 <XButton
@@ -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,10 +40,10 @@ @@ -40,10 +40,10 @@
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 - </vxe-grid> 46 + </XTable>
47 </ContentWrap> 47 </ContentWrap>
48 <XModal v-model="dialogVisible" :title="dialogTitle"> 48 <XModal v-model="dialogVisible" :title="dialogTitle">
49 <!-- 对话框(添加 / 修改) --> 49 <!-- 对话框(添加 / 修改) -->
@@ -78,8 +78,7 @@ @@ -78,8 +78,7 @@
78 import { ref, unref } from 'vue' 78 import { ref, unref } from 'vue'
79 import { useI18n } from '@/hooks/web/useI18n' 79 import { useI18n } from '@/hooks/web/useI18n'
80 import { useMessage } from '@/hooks/web/useMessage' 80 import { useMessage } from '@/hooks/web/useMessage'
81 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
82 -import { VxeGridInstance } from 'vxe-table' 81 +import { useXTable } from '@/hooks/web/useXTable'
83 import { FormExpose } from '@/components/Form' 82 import { FormExpose } from '@/components/Form'
84 import { rules, allSchemas } from './merchant.data' 83 import { rules, allSchemas } from './merchant.data'
85 import * as MerchantApi from '@/api/pay/merchant' 84 import * as MerchantApi from '@/api/pay/merchant'
@@ -87,8 +86,7 @@ import * as MerchantApi from &#39;@/api/pay/merchant&#39; @@ -87,8 +86,7 @@ import * as MerchantApi from &#39;@/api/pay/merchant&#39;
87 const { t } = useI18n() // 国际化 86 const { t } = useI18n() // 国际化
88 const message = useMessage() // 消息弹窗 87 const message = useMessage() // 消息弹窗
89 // 列表相关的变量 88 // 列表相关的变量
90 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
91 -const { gridOptions, getList, deleteData, exportList } = useVxeGrid<MerchantApi.MerchantVO>({ 89 +const [registerTable, { reload, deleteData, exportList }] = useXTable({
92 allSchemas: allSchemas, 90 allSchemas: allSchemas,
93 getListApi: MerchantApi.getMerchantPageApi, 91 getListApi: MerchantApi.getMerchantPageApi,
94 deleteApi: MerchantApi.deleteMerchantApi, 92 deleteApi: MerchantApi.deleteMerchantApi,
@@ -115,11 +113,6 @@ const handleCreate = () =&gt; { @@ -115,11 +113,6 @@ const handleCreate = () =&gt; {
115 setDialogTile('create') 113 setDialogTile('create')
116 } 114 }
117 115
118 -// 导出操作  
119 -const handleExport = async () => {  
120 - await exportList(xGrid, '商户列表.xls')  
121 -}  
122 -  
123 // 修改操作 116 // 修改操作
124 const handleUpdate = async (rowId: number) => { 117 const handleUpdate = async (rowId: number) => {
125 setDialogTile('update') 118 setDialogTile('update')
@@ -135,11 +128,6 @@ const handleDetail = async (rowId: number) =&gt; { @@ -135,11 +128,6 @@ const handleDetail = async (rowId: number) =&gt; {
135 detailData.value = res 128 detailData.value = res
136 } 129 }
137 130
138 -// 删除操作  
139 -const handleDelete = async (rowId: number) => {  
140 - await deleteData(xGrid, rowId)  
141 -}  
142 -  
143 // 提交按钮 131 // 提交按钮
144 const submitForm = async () => { 132 const submitForm = async () => {
145 const elForm = unref(formRef)?.getElFormRef() 133 const elForm = unref(formRef)?.getElFormRef()
@@ -161,7 +149,7 @@ const submitForm = async () =&gt; { @@ -161,7 +149,7 @@ const submitForm = async () =&gt; {
161 } finally { 149 } finally {
162 actionLoading.value = false 150 actionLoading.value = false
163 // 刷新列表 151 // 刷新列表
164 - await getList(xGrid) 152 + await reload()
165 } 153 }
166 } 154 }
167 }) 155 })
yudao-ui-admin-vue3/src/views/pay/order/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:新增 --> 6 <!-- 操作:新增 -->
7 <XButton 7 <XButton
@@ -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 }">
@@ -29,7 +29,7 @@ @@ -29,7 +29,7 @@
29 @click="handleDetail(row.id)" 29 @click="handleDetail(row.id)"
30 /> 30 />
31 </template> 31 </template>
32 - </vxe-grid> 32 + </XTable>
33 </ContentWrap> 33 </ContentWrap>
34 <XModal v-model="dialogVisible" :title="dialogTitle"> 34 <XModal v-model="dialogVisible" :title="dialogTitle">
35 <!-- 对话框(详情) --> 35 <!-- 对话框(详情) -->
@@ -44,15 +44,13 @@ @@ -44,15 +44,13 @@
44 <script setup lang="ts" name="Order"> 44 <script setup lang="ts" name="Order">
45 import { ref } from 'vue' 45 import { ref } from 'vue'
46 import { useI18n } from '@/hooks/web/useI18n' 46 import { useI18n } from '@/hooks/web/useI18n'
47 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
48 -import { VxeGridInstance } from 'vxe-table' 47 +import { useXTable } from '@/hooks/web/useXTable'
49 import { allSchemas } from './order.data' 48 import { allSchemas } from './order.data'
50 import * as OrderApi from '@/api/pay/order' 49 import * as OrderApi from '@/api/pay/order'
51 50
52 const { t } = useI18n() // 国际化 51 const { t } = useI18n() // 国际化
53 // 列表相关的变量 52 // 列表相关的变量
54 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
55 -const { gridOptions, exportList } = useVxeGrid<OrderApi.OrderVO>({ 53 +const [registerTable, { exportList }] = useXTable({
56 allSchemas: allSchemas, 54 allSchemas: allSchemas,
57 getListApi: OrderApi.getOrderPageApi, 55 getListApi: OrderApi.getOrderPageApi,
58 exportListApi: OrderApi.exportOrderApi 56 exportListApi: OrderApi.exportOrderApi
@@ -74,10 +72,6 @@ const setDialogTile = (type: string) =&gt; { @@ -74,10 +72,6 @@ const setDialogTile = (type: string) =&gt; {
74 const handleCreate = () => { 72 const handleCreate = () => {
75 setDialogTile('create') 73 setDialogTile('create')
76 } 74 }
77 -// 导出操作  
78 -const handleExport = async () => {  
79 - await exportList(xGrid, '订单数据.xls')  
80 -}  
81 75
82 // 详情操作 76 // 详情操作
83 const handleDetail = async (rowId: number) => { 77 const handleDetail = async (rowId: number) => {
yudao-ui-admin-vue3/src/views/pay/refund/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:导出 --> 6 <!-- 操作:导出 -->
7 <XButton 7 <XButton
@@ -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 }">
@@ -21,7 +21,7 @@ @@ -21,7 +21,7 @@
21 @click="handleDetail(row.id)" 21 @click="handleDetail(row.id)"
22 /> 22 />
23 </template> 23 </template>
24 - </vxe-grid> 24 + </XTable>
25 </ContentWrap> 25 </ContentWrap>
26 26
27 <XModal v-model="dialogVisible" :title="t('action.detail')"> 27 <XModal v-model="dialogVisible" :title="t('action.detail')">
@@ -36,26 +36,19 @@ @@ -36,26 +36,19 @@
36 <script setup lang="ts" name="Refund"> 36 <script setup lang="ts" name="Refund">
37 import { ref } from 'vue' 37 import { ref } from 'vue'
38 import { useI18n } from '@/hooks/web/useI18n' 38 import { useI18n } from '@/hooks/web/useI18n'
39 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
40 -import { VxeGridInstance } from 'vxe-table' 39 +import { useXTable } from '@/hooks/web/useXTable'
41 import { allSchemas } from './refund.data' 40 import { allSchemas } from './refund.data'
42 import * as RefundApi from '@/api/pay/refund' 41 import * as RefundApi from '@/api/pay/refund'
43 42
44 const { t } = useI18n() // 国际化 43 const { t } = useI18n() // 国际化
45 44
46 // 列表相关的变量 45 // 列表相关的变量
47 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
48 -const { gridOptions, exportList } = useVxeGrid<RefundApi.RefundVO>({ 46 +const [registerTable, { exportList }] = useXTable({
49 allSchemas: allSchemas, 47 allSchemas: allSchemas,
50 getListApi: RefundApi.getRefundPageApi, 48 getListApi: RefundApi.getRefundPageApi,
51 exportListApi: RefundApi.exportRefundApi 49 exportListApi: RefundApi.exportRefundApi
52 }) 50 })
53 51
54 -// 导出操作  
55 -const handleExport = async () => {  
56 - await exportList(xGrid, '退款订单.xls')  
57 -}  
58 -  
59 // ========== CRUD 相关 ========== 52 // ========== CRUD 相关 ==========
60 const dialogVisible = ref(false) // 是否显示弹出层 53 const dialogVisible = ref(false) // 是否显示弹出层
61 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 - <vxe-grid ref="xGrid" v-bind="gridOptions" show-overflow class="xtable-scrollbar"> 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,10 +30,10 @@ @@ -30,10 +30,10 @@
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 - </vxe-grid> 36 + </XTable>
37 </ContentWrap> 37 </ContentWrap>
38 <!-- 添加或修改菜单对话框 --> 38 <!-- 添加或修改菜单对话框 -->
39 <XModal id="deptModel" v-model="dialogVisible" :title="dialogTitle"> 39 <XModal id="deptModel" v-model="dialogVisible" :title="dialogTitle">
@@ -77,11 +77,10 @@ @@ -77,11 +77,10 @@
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'
84 -import { useVxeGrid } from '@/hooks/web/useVxeGrid' 83 +import { useXTable } from '@/hooks/web/useXTable'
85 import { FormExpose } from '@/components/Form' 84 import { FormExpose } from '@/components/Form'
86 import { allSchemas, rules } from './dept.data' 85 import { allSchemas, rules } from './dept.data'
87 import * as DeptApi from '@/api/system/dept' 86 import * as DeptApi from '@/api/system/dept'
@@ -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',
@@ -119,7 +118,7 @@ const getTree = async () =&gt; { @@ -119,7 +118,7 @@ const getTree = async () =&gt; {
119 dept.children = handleTree(res) 118 dept.children = handleTree(res)
120 deptOptions.value.push(dept) 119 deptOptions.value.push(dept)
121 } 120 }
122 -const { gridOptions, getList, deleteData } = useVxeGrid<DeptApi.DeptVO>({ 121 +const [registerTable, { reload, deleteData }] = useXTable({
123 allSchemas: allSchemas, 122 allSchemas: allSchemas,
124 treeConfig: treeConfig, 123 treeConfig: treeConfig,
125 getListApi: DeptApi.getDeptPageApi, 124 getListApi: DeptApi.getDeptPageApi,
@@ -168,17 +167,12 @@ const submitForm = async () =&gt; { @@ -168,17 +167,12 @@ const submitForm = async () =&gt; {
168 dialogVisible.value = false 167 dialogVisible.value = false
169 } finally { 168 } finally {
170 actionLoading.value = false 169 actionLoading.value = false
171 - await getList(xGrid) 170 + await reload()
172 } 171 }
173 } 172 }
174 }) 173 })
175 } 174 }
176 175
177 -// 删除操作  
178 -const handleDelete = async (rowId: number) => {  
179 - await deleteData(xGrid, rowId)  
180 -}  
181 -  
182 const userNicknameFormat = (row) => { 176 const userNicknameFormat = (row) => {
183 if (!row || !row.leaderUserId) { 177 if (!row || !row.leaderUserId) {
184 return '未设置' 178 return '未设置'
yudao-ui-admin-vue3/src/views/system/dict/index.vue
@@ -7,12 +7,7 @@ @@ -7,12 +7,7 @@
7 <span>字典分类</span> 7 <span>字典分类</span>
8 </div> 8 </div>
9 </template> 9 </template>
10 - <vxe-grid  
11 - ref="xTypeGrid"  
12 - v-bind="typeGridOptions"  
13 - @cell-click="cellClickEvent"  
14 - class="xtable-scrollbar"  
15 - > 10 + <XTable @register="registerType" @cell-click="cellClickEvent">
16 <!-- 操作:新增类型 --> 11 <!-- 操作:新增类型 -->
17 <template #toolbar_buttons> 12 <template #toolbar_buttons>
18 <XButton 13 <XButton
@@ -36,10 +31,10 @@ @@ -36,10 +31,10 @@
36 preIcon="ep:delete" 31 preIcon="ep:delete"
37 :title="t('action.del')" 32 :title="t('action.del')"
38 v-hasPermi="['system:dict:delete']" 33 v-hasPermi="['system:dict:delete']"
39 - @click="handleTypeDelete(row.id)" 34 + @click="typeDeleteData(row.id)"
40 /> 35 />
41 </template> 36 </template>
42 - </vxe-grid> 37 + </XTable>
43 <!-- @星语:分页和列表重叠在一起了 --> 38 <!-- @星语:分页和列表重叠在一起了 -->
44 </el-card> 39 </el-card>
45 <!-- ====== 字典数据 ====== --> 40 <!-- ====== 字典数据 ====== -->
@@ -55,7 +50,7 @@ @@ -55,7 +50,7 @@
55 </div> 50 </div>
56 <div v-if="tableTypeSelect"> 51 <div v-if="tableTypeSelect">
57 <!-- 列表 --> 52 <!-- 列表 -->
58 - <vxe-grid ref="xDataGrid" v-bind="dataGridOptions" class="xtable-scrollbar"> 53 + <XTable @register="registerData">
59 <!-- 操作:新增数据 --> 54 <!-- 操作:新增数据 -->
60 <template #toolbar_buttons> 55 <template #toolbar_buttons>
61 <XButton 56 <XButton
@@ -79,10 +74,10 @@ @@ -79,10 +74,10 @@
79 v-hasPermi="['system:dict:delete']" 74 v-hasPermi="['system:dict:delete']"
80 preIcon="ep:delete" 75 preIcon="ep:delete"
81 :title="t('action.del')" 76 :title="t('action.del')"
82 - @click="handleDataDelete(row.id)" 77 + @click="dataDeleteData(row.id)"
83 /> 78 />
84 </template> 79 </template>
85 - </vxe-grid> 80 + </XTable>
86 </div> 81 </div>
87 </el-card> 82 </el-card>
88 <XModal id="dictModel" v-model="dialogVisible" :title="dialogTitle"> 83 <XModal id="dictModel" v-model="dialogVisible" :title="dialogTitle">
@@ -130,8 +125,8 @@ @@ -130,8 +125,8 @@
130 import { ref, unref, reactive } from 'vue' 125 import { ref, unref, reactive } from 'vue'
131 import { useI18n } from '@/hooks/web/useI18n' 126 import { useI18n } from '@/hooks/web/useI18n'
132 import { useMessage } from '@/hooks/web/useMessage' 127 import { useMessage } from '@/hooks/web/useMessage'
133 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
134 -import { VxeGridInstance, VxeTableEvents } from 'vxe-table' 128 +import { useXTable } from '@/hooks/web/useXTable'
  129 +import { VxeTableEvents } from 'vxe-table'
135 import { FormExpose } from '@/components/Form' 130 import { FormExpose } from '@/components/Form'
136 import { ElInput, ElTag, ElCard } from 'element-plus' 131 import { ElInput, ElTag, ElCard } from 'element-plus'
137 import * as DictTypeSchemas from './dict.type' 132 import * as DictTypeSchemas from './dict.type'
@@ -143,28 +138,18 @@ import { DictDataVO, DictTypeVO } from &#39;@/api/system/dict/types&#39; @@ -143,28 +138,18 @@ import { DictDataVO, DictTypeVO } from &#39;@/api/system/dict/types&#39;
143 const { t } = useI18n() // 国际化 138 const { t } = useI18n() // 国际化
144 const message = useMessage() // 消息弹窗 139 const message = useMessage() // 消息弹窗
145 140
146 -const xTypeGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
147 -const {  
148 - gridOptions: typeGridOptions,  
149 - getList: typeGetList,  
150 - deleteData: typeDeleteData  
151 -} = useVxeGrid<DictTypeVO>({ 141 +const [registerType, { reload: typeGetList, deleteData: typeDeleteData }] = useXTable({
152 allSchemas: DictTypeSchemas.allSchemas, 142 allSchemas: DictTypeSchemas.allSchemas,
153 getListApi: DictTypeApi.getDictTypePageApi, 143 getListApi: DictTypeApi.getDictTypePageApi,
154 deleteApi: DictTypeApi.deleteDictTypeApi 144 deleteApi: DictTypeApi.deleteDictTypeApi
155 }) 145 })
156 146
157 -const xDataGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
158 const queryParams = reactive({ 147 const queryParams = reactive({
159 dictType: null 148 dictType: null
160 }) 149 })
161 -const {  
162 - gridOptions: dataGridOptions,  
163 - getList: dataGetList,  
164 - deleteData: dataDeleteData  
165 -} = useVxeGrid<DictDataVO>({ 150 +const [registerData, { reload: dataGetList, deleteData: dataDeleteData }] = useXTable({
166 allSchemas: DictDataSchemas.allSchemas, 151 allSchemas: DictDataSchemas.allSchemas,
167 - queryParams: queryParams, 152 + params: queryParams,
168 getListApi: DictDataApi.getDictDataPageApi, 153 getListApi: DictDataApi.getDictDataPageApi,
169 deleteApi: DictDataApi.deleteDictDataApi 154 deleteApi: DictDataApi.deleteDictDataApi
170 }) 155 })
@@ -199,7 +184,7 @@ const tableTypeSelect = ref(false) @@ -199,7 +184,7 @@ const tableTypeSelect = ref(false)
199 const cellClickEvent: VxeTableEvents.CellClick = async ({ row }) => { 184 const cellClickEvent: VxeTableEvents.CellClick = async ({ row }) => {
200 tableTypeSelect.value = true 185 tableTypeSelect.value = true
201 queryParams.dictType = row['type'] 186 queryParams.dictType = row['type']
202 - await dataGetList(xDataGrid) 187 + await dataGetList()
203 parentType.value = row['type'] 188 parentType.value = row['type']
204 } 189 }
205 // 弹出框 190 // 弹出框
@@ -217,15 +202,6 @@ const setDialogTile = (type: string) =&gt; { @@ -217,15 +202,6 @@ const setDialogTile = (type: string) =&gt; {
217 dialogVisible.value = true 202 dialogVisible.value = true
218 } 203 }
219 204
220 -// 删除操作  
221 -const handleTypeDelete = async (rowId: number) => {  
222 - await typeDeleteData(xTypeGrid, rowId)  
223 -}  
224 -  
225 -const handleDataDelete = async (rowId: number) => {  
226 - await dataDeleteData(xDataGrid, rowId)  
227 -}  
228 -  
229 // 提交按钮 205 // 提交按钮
230 const submitTypeForm = async () => { 206 const submitTypeForm = async () => {
231 const elForm = unref(typeFormRef)?.getElFormRef() 207 const elForm = unref(typeFormRef)?.getElFormRef()
@@ -247,7 +223,7 @@ const submitTypeForm = async () =&gt; { @@ -247,7 +223,7 @@ const submitTypeForm = async () =&gt; {
247 dialogVisible.value = false 223 dialogVisible.value = false
248 } finally { 224 } finally {
249 actionLoading.value = false 225 actionLoading.value = false
250 - typeGetList(xTypeGrid) 226 + typeGetList()
251 } 227 }
252 } 228 }
253 }) 229 })
@@ -272,7 +248,7 @@ const submitDataForm = async () =&gt; { @@ -272,7 +248,7 @@ const submitDataForm = async () =&gt; {
272 dialogVisible.value = false 248 dialogVisible.value = false
273 } finally { 249 } finally {
274 actionLoading.value = false 250 actionLoading.value = false
275 - dataGetList(xDataGrid) 251 + dataGetList()
276 } 252 }
277 } 253 }
278 }) 254 })
yudao-ui-admin-vue3/src/views/system/errorCode/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <!-- 操作:新增 --> 5 <!-- 操作:新增 -->
6 <template #toolbar_buttons> 6 <template #toolbar_buttons>
7 <XButton 7 <XButton
@@ -32,10 +32,10 @@ @@ -32,10 +32,10 @@
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 - </vxe-grid> 38 + </XTable>
39 </ContentWrap> 39 </ContentWrap>
40 <!-- 弹窗 --> 40 <!-- 弹窗 -->
41 <XModal id="errorCodeModel" v-model="dialogVisible" :title="dialogTitle"> 41 <XModal id="errorCodeModel" v-model="dialogVisible" :title="dialogTitle">
@@ -71,8 +71,7 @@ @@ -71,8 +71,7 @@
71 import { ref, unref } from 'vue' 71 import { ref, unref } from 'vue'
72 import { useI18n } from '@/hooks/web/useI18n' 72 import { useI18n } from '@/hooks/web/useI18n'
73 import { useMessage } from '@/hooks/web/useMessage' 73 import { useMessage } from '@/hooks/web/useMessage'
74 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
75 -import { VxeGridInstance } from 'vxe-table' 74 +import { useXTable } from '@/hooks/web/useXTable'
76 import { FormExpose } from '@/components/Form' 75 import { FormExpose } from '@/components/Form'
77 // 业务相关的 import 76 // 业务相关的 import
78 import { rules, allSchemas } from './errorCode.data' 77 import { rules, allSchemas } from './errorCode.data'
@@ -81,8 +80,7 @@ import * as ErrorCodeApi from &#39;@/api/system/errorCode&#39; @@ -81,8 +80,7 @@ import * as ErrorCodeApi from &#39;@/api/system/errorCode&#39;
81 const { t } = useI18n() // 国际化 80 const { t } = useI18n() // 国际化
82 const message = useMessage() // 消息弹窗 81 const message = useMessage() // 消息弹窗
83 // 列表相关的变量 82 // 列表相关的变量
84 -const xGrid = ref<VxeGridInstance>() // grid Ref  
85 -const { gridOptions, getList, deleteData } = useVxeGrid<ErrorCodeApi.ErrorCodeVO>({ 83 +const [registerTable, { reload, deleteData }] = useXTable({
86 allSchemas: allSchemas, 84 allSchemas: allSchemas,
87 getListApi: ErrorCodeApi.getErrorCodePageApi, 85 getListApi: ErrorCodeApi.getErrorCodePageApi,
88 deleteApi: ErrorCodeApi.deleteErrorCodeApi 86 deleteApi: ErrorCodeApi.deleteErrorCodeApi
@@ -123,11 +121,6 @@ const handleDetail = async (rowId: number) =&gt; { @@ -123,11 +121,6 @@ const handleDetail = async (rowId: number) =&gt; {
123 detailData.value = res 121 detailData.value = res
124 } 122 }
125 123
126 -// 删除操作  
127 -const handleDelete = async (rowId: number) => {  
128 - await deleteData(xGrid, rowId)  
129 -}  
130 -  
131 // 提交新增/修改的表单 124 // 提交新增/修改的表单
132 const submitForm = async () => { 125 const submitForm = async () => {
133 const elForm = unref(formRef)?.getElFormRef() 126 const elForm = unref(formRef)?.getElFormRef()
@@ -149,7 +142,7 @@ const submitForm = async () =&gt; { @@ -149,7 +142,7 @@ const submitForm = async () =&gt; {
149 } finally { 142 } finally {
150 actionLoading.value = false 143 actionLoading.value = false
151 // 刷新列表 144 // 刷新列表
152 - await getList(xGrid) 145 + await reload()
153 } 146 }
154 } 147 }
155 }) 148 })
yudao-ui-admin-vue3/src/views/system/loginlog/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <!-- 操作:导出 --> 5 <!-- 操作:导出 -->
6 <template #toolbar_buttons> 6 <template #toolbar_buttons>
7 <XButton 7 <XButton
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 }">
15 <!-- 操作:详情 --> 15 <!-- 操作:详情 -->
16 <XTextButton preIcon="ep:view" :title="t('action.detail')" @click="handleDetail(row)" /> 16 <XTextButton preIcon="ep:view" :title="t('action.detail')" @click="handleDetail(row)" />
17 </template> 17 </template>
18 - </vxe-grid> 18 + </XTable>
19 </ContentWrap> 19 </ContentWrap>
20 <!-- 弹窗 --> 20 <!-- 弹窗 -->
21 <XModal id="postModel" v-model="dialogVisible" :title="dialogTitle"> 21 <XModal id="postModel" v-model="dialogVisible" :title="dialogTitle">
@@ -31,16 +31,14 @@ @@ -31,16 +31,14 @@
31 // 全局相关的 import 31 // 全局相关的 import
32 import { ref } from 'vue' 32 import { ref } from 'vue'
33 import { useI18n } from '@/hooks/web/useI18n' 33 import { useI18n } from '@/hooks/web/useI18n'
34 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
35 -import { VxeGridInstance } from 'vxe-table' 34 +import { useXTable } from '@/hooks/web/useXTable'
36 // 业务相关的 import 35 // 业务相关的 import
37 import { allSchemas } from './loginLog.data' 36 import { allSchemas } from './loginLog.data'
38 import { getLoginLogPageApi, exportLoginLogApi, LoginLogVO } from '@/api/system/loginLog' 37 import { getLoginLogPageApi, exportLoginLogApi, LoginLogVO } from '@/api/system/loginLog'
39 38
40 const { t } = useI18n() // 国际化 39 const { t } = useI18n() // 国际化
41 // 列表相关的变量 40 // 列表相关的变量
42 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
43 -const { gridOptions, exportList } = useVxeGrid<LoginLogVO>({ 41 +const [registerTable, { exportList }] = useXTable({
44 allSchemas: allSchemas, 42 allSchemas: allSchemas,
45 getListApi: getLoginLogPageApi, 43 getListApi: getLoginLogPageApi,
46 exportListApi: exportLoginLogApi 44 exportListApi: exportLoginLogApi
@@ -56,9 +54,4 @@ const handleDetail = async (row: LoginLogVO) =&gt; { @@ -56,9 +54,4 @@ const handleDetail = async (row: LoginLogVO) =&gt; {
56 detailData.value = row 54 detailData.value = row
57 dialogVisible.value = true 55 dialogVisible.value = true
58 } 56 }
59 -  
60 -// 导出操作  
61 -const handleExport = async () => {  
62 - await exportList(xGrid, '登录列表.xls')  
63 -}  
64 </script> 57 </script>
yudao-ui-admin-vue3/src/views/system/menu/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" show-overflow class="xtable-scrollbar"> 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,10 +31,10 @@ @@ -31,10 +31,10 @@
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 - </vxe-grid> 37 + </XTable>
38 </ContentWrap> 38 </ContentWrap>
39 <!-- 添加或修改菜单对话框 --> 39 <!-- 添加或修改菜单对话框 -->
40 <XModal id="menuModel" v-model="dialogVisible" :title="dialogTitle"> 40 <XModal id="menuModel" v-model="dialogVisible" :title="dialogTitle">
@@ -194,28 +194,28 @@ import { @@ -194,28 +194,28 @@ 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'
201 import { handleTree, defaultProps } from '@/utils/tree' 200 import { handleTree, defaultProps } from '@/utils/tree'
202 import * as MenuApi from '@/api/system/menu' 201 import * as MenuApi from '@/api/system/menu'
203 import { allSchemas, rules } from './menu.data' 202 import { allSchemas, rules } from './menu.data'
204 -import { useVxeGrid } from '@/hooks/web/useVxeGrid' 203 +import { useXTable } from '@/hooks/web/useXTable'
205 204
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',
215 parentField: 'parentId', 215 parentField: 'parentId',
216 expandAll: false 216 expandAll: false
217 } 217 }
218 -const { gridOptions, getList, deleteData } = useVxeGrid<MenuApi.MenuVO>({ 218 +const [registerTable, { reload, deleteData }] = useXTable({
219 allSchemas: allSchemas, 219 allSchemas: allSchemas,
220 treeConfig: treeConfig, 220 treeConfig: treeConfig,
221 getListApi: MenuApi.getMenuListApi, 221 getListApi: MenuApi.getMenuListApi,
@@ -326,7 +326,7 @@ const submitForm = async () =&gt; { @@ -326,7 +326,7 @@ const submitForm = async () =&gt; {
326 actionLoading.value = false 326 actionLoading.value = false
327 wsCache.delete(CACHE_KEY.ROLE_ROUTERS) 327 wsCache.delete(CACHE_KEY.ROLE_ROUTERS)
328 // 操作成功,重新加载列表 328 // 操作成功,重新加载列表
329 - await getList(xGrid) 329 + await reload()
330 } 330 }
331 } 331 }
332 332
@@ -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(xGrid, rowId)  
342 -}  
343 </script> 337 </script>
yudao-ui-admin-vue3/src/views/system/notice/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <!-- 操作:新增 --> 5 <!-- 操作:新增 -->
6 <template #toolbar_buttons> 6 <template #toolbar_buttons>
7 <XButton 7 <XButton
@@ -32,10 +32,10 @@ @@ -32,10 +32,10 @@
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 - </vxe-grid> 38 + </XTable>
39 </ContentWrap> 39 </ContentWrap>
40 <!-- 弹窗 --> 40 <!-- 弹窗 -->
41 <XModal id="noticeModel" v-model="dialogVisible" :title="dialogTitle"> 41 <XModal id="noticeModel" v-model="dialogVisible" :title="dialogTitle">
@@ -75,8 +75,7 @@ @@ -75,8 +75,7 @@
75 import { ref, unref } from 'vue' 75 import { ref, unref } from 'vue'
76 import { useI18n } from '@/hooks/web/useI18n' 76 import { useI18n } from '@/hooks/web/useI18n'
77 import { useMessage } from '@/hooks/web/useMessage' 77 import { useMessage } from '@/hooks/web/useMessage'
78 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
79 -import { VxeGridInstance } from 'vxe-table' 78 +import { useXTable } from '@/hooks/web/useXTable'
80 import { FormExpose } from '@/components/Form' 79 import { FormExpose } from '@/components/Form'
81 // 业务相关的 import 80 // 业务相关的 import
82 import * as NoticeApi from '@/api/system/notice' 81 import * as NoticeApi from '@/api/system/notice'
@@ -86,8 +85,7 @@ import { Editor } from &#39;@/components/Editor&#39; @@ -86,8 +85,7 @@ import { Editor } from &#39;@/components/Editor&#39;
86 const { t } = useI18n() // 国际化 85 const { t } = useI18n() // 国际化
87 const message = useMessage() // 消息弹窗 86 const message = useMessage() // 消息弹窗
88 // 列表相关的变量 87 // 列表相关的变量
89 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
90 -const { gridOptions, getList, deleteData } = useVxeGrid<NoticeApi.NoticeVO>({ 88 +const [registerTable, { reload, deleteData }] = useXTable({
91 allSchemas: allSchemas, 89 allSchemas: allSchemas,
92 getListApi: NoticeApi.getNoticePageApi, 90 getListApi: NoticeApi.getNoticePageApi,
93 deleteApi: NoticeApi.deleteNoticeApi 91 deleteApi: NoticeApi.deleteNoticeApi
@@ -128,11 +126,6 @@ const handleDetail = async (rowId: number) =&gt; { @@ -128,11 +126,6 @@ const handleDetail = async (rowId: number) =&gt; {
128 detailData.value = res 126 detailData.value = res
129 } 127 }
130 128
131 -// 删除操作  
132 -const handleDelete = async (rowId: number) => {  
133 - await deleteData(xGrid, rowId)  
134 -}  
135 -  
136 // 提交新增/修改的表单 129 // 提交新增/修改的表单
137 const submitForm = async () => { 130 const submitForm = async () => {
138 const elForm = unref(formRef)?.getElFormRef() 131 const elForm = unref(formRef)?.getElFormRef()
@@ -153,7 +146,7 @@ const submitForm = async () =&gt; { @@ -153,7 +146,7 @@ const submitForm = async () =&gt; {
153 dialogVisible.value = false 146 dialogVisible.value = false
154 } finally { 147 } finally {
155 actionLoading.value = false 148 actionLoading.value = false
156 - await getList(xGrid) 149 + await reload()
157 } 150 }
158 } 151 }
159 }) 152 })
yudao-ui-admin-vue3/src/views/system/oauth2/client/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:新增 --> 6 <!-- 操作:新增 -->
7 <XButton 7 <XButton
@@ -48,10 +48,10 @@ @@ -48,10 +48,10 @@
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 - </vxe-grid> 54 + </XTable>
55 </ContentWrap> 55 </ContentWrap>
56 <!-- 弹窗 --> 56 <!-- 弹窗 -->
57 <XModal id="postModel" v-model="dialogVisible" :title="dialogTitle"> 57 <XModal id="postModel" v-model="dialogVisible" :title="dialogTitle">
@@ -135,8 +135,7 @@ import { ref, unref } from &#39;vue&#39; @@ -135,8 +135,7 @@ import { ref, unref } from &#39;vue&#39;
135 import { ElTag } from 'element-plus' 135 import { ElTag } from 'element-plus'
136 import { useI18n } from '@/hooks/web/useI18n' 136 import { useI18n } from '@/hooks/web/useI18n'
137 import { useMessage } from '@/hooks/web/useMessage' 137 import { useMessage } from '@/hooks/web/useMessage'
138 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
139 -import { VxeGridInstance } from 'vxe-table' 138 +import { useXTable } from '@/hooks/web/useXTable'
140 import { FormExpose } from '@/components/Form' 139 import { FormExpose } from '@/components/Form'
141 // 业务相关的 import 140 // 业务相关的 import
142 import * as ClientApi from '@/api/system/oauth2/client' 141 import * as ClientApi from '@/api/system/oauth2/client'
@@ -146,8 +145,7 @@ const { t } = useI18n() // 国际化 @@ -146,8 +145,7 @@ const { t } = useI18n() // 国际化
146 const message = useMessage() // 消息弹窗 145 const message = useMessage() // 消息弹窗
147 146
148 // 列表相关的变量 147 // 列表相关的变量
149 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
150 -const { gridOptions, getList, deleteData } = useVxeGrid<ClientApi.OAuth2ClientVO>({ 148 +const [registerTable, { reload, deleteData }] = useXTable({
151 allSchemas: allSchemas, 149 allSchemas: allSchemas,
152 getListApi: ClientApi.getOAuth2ClientPageApi, 150 getListApi: ClientApi.getOAuth2ClientPageApi,
153 deleteApi: ClientApi.deleteOAuth2ClientApi 151 deleteApi: ClientApi.deleteOAuth2ClientApi
@@ -186,11 +184,6 @@ const handleDetail = async (rowId: number) =&gt; { @@ -186,11 +184,6 @@ const handleDetail = async (rowId: number) =&gt; {
186 detailData.value = res 184 detailData.value = res
187 } 185 }
188 186
189 -// 删除操作  
190 -const handleDelete = async (rowId: number) => {  
191 - await deleteData(xGrid, rowId)  
192 -}  
193 -  
194 // 提交新增/修改的表单 187 // 提交新增/修改的表单
195 const submitForm = async () => { 188 const submitForm = async () => {
196 const elForm = unref(formRef)?.getElFormRef() 189 const elForm = unref(formRef)?.getElFormRef()
@@ -212,7 +205,7 @@ const submitForm = async () =&gt; { @@ -212,7 +205,7 @@ const submitForm = async () =&gt; {
212 } finally { 205 } finally {
213 actionLoading.value = false 206 actionLoading.value = false
214 // 刷新列表 207 // 刷新列表
215 - await getList(xGrid) 208 + await reload()
216 } 209 }
217 } 210 }
218 }) 211 })
yudao-ui-admin-vue3/src/views/system/oauth2/token/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
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')"
@@ -13,7 +13,7 @@ @@ -13,7 +13,7 @@
13 @click="handleForceLogout(row.id)" 13 @click="handleForceLogout(row.id)"
14 /> 14 />
15 </template> 15 </template>
16 - </vxe-grid> 16 + </XTable>
17 </ContentWrap> 17 </ContentWrap>
18 <XModal v-model="dialogVisible" :title="dialogTitle"> 18 <XModal v-model="dialogVisible" :title="dialogTitle">
19 <!-- 对话框(详情) --> 19 <!-- 对话框(详情) -->
@@ -28,8 +28,7 @@ @@ -28,8 +28,7 @@
28 import { ref } from 'vue' 28 import { ref } from 'vue'
29 import { useI18n } from '@/hooks/web/useI18n' 29 import { useI18n } from '@/hooks/web/useI18n'
30 import { useMessage } from '@/hooks/web/useMessage' 30 import { useMessage } from '@/hooks/web/useMessage'
31 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
32 -import { VxeGridInstance } from 'vxe-table' 31 +import { useXTable } from '@/hooks/web/useXTable'
33 32
34 import { allSchemas } from './token.data' 33 import { allSchemas } from './token.data'
35 import * as TokenApi from '@/api/system/oauth2/token' 34 import * as TokenApi from '@/api/system/oauth2/token'
@@ -37,8 +36,7 @@ import * as TokenApi from &#39;@/api/system/oauth2/token&#39; @@ -37,8 +36,7 @@ import * as TokenApi from &#39;@/api/system/oauth2/token&#39;
37 const { t } = useI18n() // 国际化 36 const { t } = useI18n() // 国际化
38 const message = useMessage() // 消息弹窗 37 const message = useMessage() // 消息弹窗
39 // 列表相关的变量 38 // 列表相关的变量
40 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
41 -const { gridOptions, getList } = useVxeGrid<TokenApi.OAuth2TokenVO>({ 39 +const [registerTable, { reload }] = useXTable({
42 allSchemas: allSchemas, 40 allSchemas: allSchemas,
43 topActionSlots: false, 41 topActionSlots: false,
44 getListApi: TokenApi.getAccessTokenPageApi 42 getListApi: TokenApi.getAccessTokenPageApi
@@ -65,7 +63,7 @@ const handleForceLogout = (rowId: number) =&gt; { @@ -65,7 +63,7 @@ const handleForceLogout = (rowId: number) =&gt; {
65 }) 63 })
66 .finally(async () => { 64 .finally(async () => {
67 // 刷新列表 65 // 刷新列表
68 - await getList(xGrid) 66 + await reload()
69 }) 67 })
70 } 68 }
71 </script> 69 </script>
yudao-ui-admin-vue3/src/views/system/operatelog/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:新增 --> 6 <!-- 操作:新增 -->
7 <XButton 7 <XButton
@@ -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 }">
@@ -22,7 +22,7 @@ @@ -22,7 +22,7 @@
22 <!-- 操作:详情 --> 22 <!-- 操作:详情 -->
23 <XTextButton preIcon="ep:view" :title="t('action.detail')" @click="handleDetail(row)" /> 23 <XTextButton preIcon="ep:view" :title="t('action.detail')" @click="handleDetail(row)" />
24 </template> 24 </template>
25 - </vxe-grid> 25 + </XTable>
26 </ContentWrap> 26 </ContentWrap>
27 <!-- 弹窗 --> 27 <!-- 弹窗 -->
28 <XModal id="postModel" v-model="dialogVisible" :title="t('action.detail')"> 28 <XModal id="postModel" v-model="dialogVisible" :title="t('action.detail')">
@@ -45,16 +45,14 @@ @@ -45,16 +45,14 @@
45 // 全局相关的 import 45 // 全局相关的 import
46 import { ref } from 'vue' 46 import { ref } from 'vue'
47 import { useI18n } from '@/hooks/web/useI18n' 47 import { useI18n } from '@/hooks/web/useI18n'
48 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
49 -import { VxeGridInstance } from 'vxe-table' 48 +import { useXTable } from '@/hooks/web/useXTable'
50 // 业务相关的 import 49 // 业务相关的 import
51 import * as OperateLogApi from '@/api/system/operatelog' 50 import * as OperateLogApi from '@/api/system/operatelog'
52 import { allSchemas } from './operatelog.data' 51 import { allSchemas } from './operatelog.data'
53 52
54 const { t } = useI18n() // 国际化 53 const { t } = useI18n() // 国际化
55 // 列表相关的变量 54 // 列表相关的变量
56 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
57 -const { gridOptions, exportList } = useVxeGrid<OperateLogApi.OperateLogVO>({ 55 +const [registerTable, { exportList }] = useXTable({
58 allSchemas: allSchemas, 56 allSchemas: allSchemas,
59 getListApi: OperateLogApi.getOperateLogPageApi, 57 getListApi: OperateLogApi.getOperateLogPageApi,
60 exportListApi: OperateLogApi.exportOperateLogApi 58 exportListApi: OperateLogApi.exportOperateLogApi
@@ -70,9 +68,4 @@ const handleDetail = (row: OperateLogApi.OperateLogVO) =&gt; { @@ -70,9 +68,4 @@ const handleDetail = (row: OperateLogApi.OperateLogVO) =&gt; {
70 detailData.value = row 68 detailData.value = row
71 dialogVisible.value = true 69 dialogVisible.value = true
72 } 70 }
73 -  
74 -// 导出操作  
75 -const handleExport = async () => {  
76 - await exportList(xGrid, '操作日志.xls')  
77 -}  
78 </script> 71 </script>
yudao-ui-admin-vue3/src/views/system/post/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:新增 --> 6 <!-- 操作:新增 -->
7 <XButton 7 <XButton
@@ -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,10 +40,10 @@ @@ -40,10 +40,10 @@
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 - </vxe-grid> 46 + </XTable>
47 </ContentWrap> 47 </ContentWrap>
48 <!-- 弹窗 --> 48 <!-- 弹窗 -->
49 <XModal id="postModel" :loading="modelLoading" v-model="modelVisible" :title="modelTitle"> 49 <XModal id="postModel" :loading="modelLoading" v-model="modelVisible" :title="modelTitle">
@@ -79,8 +79,7 @@ @@ -79,8 +79,7 @@
79 import { ref, unref } from 'vue' 79 import { ref, unref } from 'vue'
80 import { useI18n } from '@/hooks/web/useI18n' 80 import { useI18n } from '@/hooks/web/useI18n'
81 import { useMessage } from '@/hooks/web/useMessage' 81 import { useMessage } from '@/hooks/web/useMessage'
82 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
83 -import { VxeGridInstance } from 'vxe-table' 82 +import { useXTable } from '@/hooks/web/useXTable'
84 import { FormExpose } from '@/components/Form' 83 import { FormExpose } from '@/components/Form'
85 // 业务相关的 import 84 // 业务相关的 import
86 import * as PostApi from '@/api/system/post' 85 import * as PostApi from '@/api/system/post'
@@ -89,8 +88,7 @@ import { rules, allSchemas } from &#39;./post.data&#39; @@ -89,8 +88,7 @@ import { rules, allSchemas } from &#39;./post.data&#39;
89 const { t } = useI18n() // 国际化 88 const { t } = useI18n() // 国际化
90 const message = useMessage() // 消息弹窗 89 const message = useMessage() // 消息弹窗
91 // 列表相关的变量 90 // 列表相关的变量
92 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
93 -const { gridOptions, getList, deleteData, exportList } = useVxeGrid<PostApi.PostVO>({ 91 +const [registerTable, { reload, deleteData, exportList }] = useXTable({
94 allSchemas: allSchemas, 92 allSchemas: allSchemas,
95 getListApi: PostApi.getPostPageApi, 93 getListApi: PostApi.getPostPageApi,
96 deleteApi: PostApi.deletePostApi, 94 deleteApi: PostApi.deletePostApi,
@@ -119,11 +117,6 @@ const handleCreate = () =&gt; { @@ -119,11 +117,6 @@ const handleCreate = () =&gt; {
119 modelLoading.value = false 117 modelLoading.value = false
120 } 118 }
121 119
122 -// 导出操作  
123 -const handleExport = async () => {  
124 - await exportList(xGrid, '岗位列表.xls')  
125 -}  
126 -  
127 // 修改操作 120 // 修改操作
128 const handleUpdate = async (rowId: number) => { 121 const handleUpdate = async (rowId: number) => {
129 setDialogTile('update') 122 setDialogTile('update')
@@ -141,11 +134,6 @@ const handleDetail = async (rowId: number) =&gt; { @@ -141,11 +134,6 @@ const handleDetail = async (rowId: number) =&gt; {
141 modelLoading.value = false 134 modelLoading.value = false
142 } 135 }
143 136
144 -// 删除操作  
145 -const handleDelete = async (rowId: number) => {  
146 - await deleteData(xGrid, rowId)  
147 -}  
148 -  
149 // 提交新增/修改的表单 137 // 提交新增/修改的表单
150 const submitForm = async () => { 138 const submitForm = async () => {
151 const elForm = unref(formRef)?.getElFormRef() 139 const elForm = unref(formRef)?.getElFormRef()
@@ -167,7 +155,7 @@ const submitForm = async () =&gt; { @@ -167,7 +155,7 @@ const submitForm = async () =&gt; {
167 } finally { 155 } finally {
168 actionLoading.value = false 156 actionLoading.value = false
169 // 刷新列表 157 // 刷新列表
170 - await getList(xGrid) 158 + await reload()
171 } 159 }
172 } 160 }
173 }) 161 })
yudao-ui-admin-vue3/src/views/system/role/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <!-- 操作:新增 --> 5 <!-- 操作:新增 -->
6 <template #toolbar_buttons> 6 <template #toolbar_buttons>
7 <XButton 7 <XButton
@@ -46,10 +46,10 @@ @@ -46,10 +46,10 @@
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 - </vxe-grid> 52 + </XTable>
53 </ContentWrap> 53 </ContentWrap>
54 54
55 <XModal v-model="dialogVisible" :title="dialogTitle"> 55 <XModal v-model="dialogVisible" :title="dialogTitle">
@@ -159,11 +159,10 @@ import { @@ -159,11 +159,10 @@ import {
159 ElSwitch, 159 ElSwitch,
160 ElTag 160 ElTag
161 } from 'element-plus' 161 } from 'element-plus'
162 -import { VxeGridInstance } from 'vxe-table'  
163 import { FormExpose } from '@/components/Form' 162 import { FormExpose } from '@/components/Form'
164 import { useI18n } from '@/hooks/web/useI18n' 163 import { useI18n } from '@/hooks/web/useI18n'
165 import { useMessage } from '@/hooks/web/useMessage' 164 import { useMessage } from '@/hooks/web/useMessage'
166 -import { useVxeGrid } from '@/hooks/web/useVxeGrid' 165 +import { useXTable } from '@/hooks/web/useXTable'
167 import { handleTree, defaultProps } from '@/utils/tree' 166 import { handleTree, defaultProps } from '@/utils/tree'
168 import { SystemDataScopeEnum } from '@/utils/constants' 167 import { SystemDataScopeEnum } from '@/utils/constants'
169 import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' 168 import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
@@ -176,8 +175,7 @@ import * as PermissionApi from &#39;@/api/system/permission&#39; @@ -176,8 +175,7 @@ import * as PermissionApi from &#39;@/api/system/permission&#39;
176 const { t } = useI18n() // 国际化 175 const { t } = useI18n() // 国际化
177 const message = useMessage() // 消息弹窗 176 const message = useMessage() // 消息弹窗
178 // 列表相关的变量 177 // 列表相关的变量
179 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
180 -const { gridOptions, getList, deleteData } = useVxeGrid<RoleApi.RoleVO>({ 178 +const [registerTable, { reload, deleteData }] = useXTable({
181 allSchemas: allSchemas, 179 allSchemas: allSchemas,
182 getListApi: RoleApi.getRolePageApi, 180 getListApi: RoleApi.getRolePageApi,
183 deleteApi: RoleApi.deleteRoleApi 181 deleteApi: RoleApi.deleteRoleApi
@@ -219,11 +217,6 @@ const handleDetail = async (rowId: number) =&gt; { @@ -219,11 +217,6 @@ const handleDetail = async (rowId: number) =&gt; {
219 detailData.value = res 217 detailData.value = res
220 } 218 }
221 219
222 -// 删除操作  
223 -const handleDelete = async (rowId: number) => {  
224 - await deleteData(xGrid, rowId)  
225 -}  
226 -  
227 // 提交按钮 220 // 提交按钮
228 const submitForm = async () => { 221 const submitForm = async () => {
229 const elForm = unref(formRef)?.getElFormRef() 222 const elForm = unref(formRef)?.getElFormRef()
@@ -245,7 +238,7 @@ const submitForm = async () =&gt; { @@ -245,7 +238,7 @@ const submitForm = async () =&gt; {
245 } finally { 238 } finally {
246 actionLoading.value = false 239 actionLoading.value = false
247 // 刷新列表 240 // 刷新列表
248 - await getList(xGrid) 241 + await reload()
249 } 242 }
250 } 243 }
251 }) 244 })
yudao-ui-admin-vue3/src/views/system/sensitiveWord/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:新增 --> 6 <!-- 操作:新增 -->
7 <XButton 7 <XButton
@@ -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,10 +50,10 @@ @@ -50,10 +50,10 @@
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 - </vxe-grid> 56 + </XTable>
57 </ContentWrap> 57 </ContentWrap>
58 58
59 <XModal v-model="dialogVisible" :title="dialogTitle"> 59 <XModal v-model="dialogVisible" :title="dialogTitle">
@@ -106,8 +106,7 @@ @@ -106,8 +106,7 @@
106 import { onMounted, ref, unref } from 'vue' 106 import { onMounted, ref, unref } from 'vue'
107 import { useI18n } from '@/hooks/web/useI18n' 107 import { useI18n } from '@/hooks/web/useI18n'
108 import { useMessage } from '@/hooks/web/useMessage' 108 import { useMessage } from '@/hooks/web/useMessage'
109 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
110 -import { VxeGridInstance } from 'vxe-table' 109 +import { useXTable } from '@/hooks/web/useXTable'
111 import { FormExpose } from '@/components/Form' 110 import { FormExpose } from '@/components/Form'
112 import { ElTag, ElSelect, ElOption } from 'element-plus' 111 import { ElTag, ElSelect, ElOption } from 'element-plus'
113 import * as SensitiveWordApi from '@/api/system/sensitiveWord' 112 import * as SensitiveWordApi from '@/api/system/sensitiveWord'
@@ -116,14 +115,12 @@ import { rules, allSchemas } from &#39;./sensitiveWord.data&#39; @@ -116,14 +115,12 @@ import { rules, allSchemas } from &#39;./sensitiveWord.data&#39;
116 const { t } = useI18n() // 国际化 115 const { t } = useI18n() // 国际化
117 const message = useMessage() // 消息弹窗 116 const message = useMessage() // 消息弹窗
118 // 列表相关的变量 117 // 列表相关的变量
119 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
120 -const { gridOptions, getList, deleteData, exportList } =  
121 - useVxeGrid<SensitiveWordApi.SensitiveWordVO>({  
122 - allSchemas: allSchemas,  
123 - getListApi: SensitiveWordApi.getSensitiveWordPageApi,  
124 - deleteApi: SensitiveWordApi.deleteSensitiveWordApi,  
125 - exportListApi: SensitiveWordApi.exportSensitiveWordApi  
126 - }) 118 +const [registerTable, { reload, deleteData, exportList }] = useXTable({
  119 + allSchemas: allSchemas,
  120 + getListApi: SensitiveWordApi.getSensitiveWordPageApi,
  121 + deleteApi: SensitiveWordApi.deleteSensitiveWordApi,
  122 + exportListApi: SensitiveWordApi.exportSensitiveWordApi
  123 +})
127 const actionLoading = ref(false) // 遮罩层 124 const actionLoading = ref(false) // 遮罩层
128 const actionType = ref('') // 操作按钮的类型 125 const actionType = ref('') // 操作按钮的类型
129 const dialogVisible = ref(false) // 是否显示弹出层 126 const dialogVisible = ref(false) // 是否显示弹出层
@@ -150,11 +147,6 @@ const handleCreate = () =&gt; { @@ -150,11 +147,6 @@ const handleCreate = () =&gt; {
150 setDialogTile('create') 147 setDialogTile('create')
151 } 148 }
152 149
153 -// 导出操作  
154 -const handleExport = async () => {  
155 - await exportList(xGrid, '敏感词数据.xls')  
156 -}  
157 -  
158 // 修改操作 150 // 修改操作
159 const handleUpdate = async (rowId: number) => { 151 const handleUpdate = async (rowId: number) => {
160 setDialogTile('update') 152 setDialogTile('update')
@@ -170,11 +162,6 @@ const handleDetail = async (rowId: number) =&gt; { @@ -170,11 +162,6 @@ const handleDetail = async (rowId: number) =&gt; {
170 detailData.value = res 162 detailData.value = res
171 } 163 }
172 164
173 -// 删除操作  
174 -const handleDelete = async (rowId: number) => {  
175 - await deleteData(xGrid, rowId)  
176 -}  
177 -  
178 // 提交按钮 165 // 提交按钮
179 const submitForm = async () => { 166 const submitForm = async () => {
180 const elForm = unref(formRef)?.getElFormRef() 167 const elForm = unref(formRef)?.getElFormRef()
@@ -196,7 +183,7 @@ const submitForm = async () =&gt; { @@ -196,7 +183,7 @@ const submitForm = async () =&gt; {
196 } finally { 183 } finally {
197 actionLoading.value = false 184 actionLoading.value = false
198 // 刷新列表 185 // 刷新列表
199 - await getList(xGrid) 186 + await reload()
200 } 187 }
201 } 188 }
202 }) 189 })
yudao-ui-admin-vue3/src/views/system/sms/smsChannel/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <!-- 操作:新增 --> 5 <!-- 操作:新增 -->
6 <template #toolbar_buttons> 6 <template #toolbar_buttons>
7 <XButton 7 <XButton
@@ -32,10 +32,10 @@ @@ -32,10 +32,10 @@
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 - </vxe-grid> 38 + </XTable>
39 </ContentWrap> 39 </ContentWrap>
40 40
41 <XModal id="smsChannel" v-model="dialogVisible" :title="dialogTitle"> 41 <XModal id="smsChannel" v-model="dialogVisible" :title="dialogTitle">
@@ -72,8 +72,7 @@ @@ -72,8 +72,7 @@
72 import { ref, unref } from 'vue' 72 import { ref, unref } from 'vue'
73 import { useI18n } from '@/hooks/web/useI18n' 73 import { useI18n } from '@/hooks/web/useI18n'
74 import { useMessage } from '@/hooks/web/useMessage' 74 import { useMessage } from '@/hooks/web/useMessage'
75 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
76 -import { VxeGridInstance } from 'vxe-table' 75 +import { useXTable } from '@/hooks/web/useXTable'
77 import { FormExpose } from '@/components/Form' 76 import { FormExpose } from '@/components/Form'
78 // 业务相关的 import 77 // 业务相关的 import
79 import * as SmsChannelApi from '@/api/system/sms/smsChannel' 78 import * as SmsChannelApi from '@/api/system/sms/smsChannel'
@@ -83,8 +82,7 @@ const { t } = useI18n() // 国际化 @@ -83,8 +82,7 @@ const { t } = useI18n() // 国际化
83 const message = useMessage() // 消息弹窗 82 const message = useMessage() // 消息弹窗
84 83
85 // 列表相关的变量 84 // 列表相关的变量
86 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
87 -const { gridOptions, getList, deleteData } = useVxeGrid<SmsChannelApi.SmsChannelVO>({ 85 +const [registerTable, { reload, deleteData }] = useXTable({
88 allSchemas: allSchemas, 86 allSchemas: allSchemas,
89 getListApi: SmsChannelApi.getSmsChannelPageApi, 87 getListApi: SmsChannelApi.getSmsChannelPageApi,
90 deleteApi: SmsChannelApi.deleteSmsChannelApi 88 deleteApi: SmsChannelApi.deleteSmsChannelApi
@@ -125,11 +123,6 @@ const handleDetail = async (rowId: number) =&gt; { @@ -125,11 +123,6 @@ const handleDetail = async (rowId: number) =&gt; {
125 detailData.value = res 123 detailData.value = res
126 } 124 }
127 125
128 -// 删除操作  
129 -const handleDelete = async (rowId: number) => {  
130 - await deleteData(xGrid, rowId)  
131 -}  
132 -  
133 // 提交按钮 126 // 提交按钮
134 const submitForm = async () => { 127 const submitForm = async () => {
135 const elForm = unref(formRef)?.getElFormRef() 128 const elForm = unref(formRef)?.getElFormRef()
@@ -151,7 +144,7 @@ const submitForm = async () =&gt; { @@ -151,7 +144,7 @@ const submitForm = async () =&gt; {
151 } finally { 144 } finally {
152 actionLoading.value = false 145 actionLoading.value = false
153 // 刷新列表 146 // 刷新列表
154 - await getList(xGrid) 147 + await reload()
155 } 148 }
156 } 149 }
157 }) 150 })
yudao-ui-admin-vue3/src/views/system/sms/smsLog/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <!-- 操作:导出 --> 5 <!-- 操作:导出 -->
6 <template #toolbar_buttons> 6 <template #toolbar_buttons>
7 <XButton 7 <XButton
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 }">
15 <XTextButton preIcon="ep:view" :title="t('action.detail')" @click="handleDetail(row)" /> 15 <XTextButton preIcon="ep:view" :title="t('action.detail')" @click="handleDetail(row)" />
16 </template> 16 </template>
17 - </vxe-grid> 17 + </XTable>
18 </ContentWrap> 18 </ContentWrap>
19 19
20 <XModal id="smsLog" v-model="dialogVisible" :title="dialogTitle"> 20 <XModal id="smsLog" v-model="dialogVisible" :title="dialogTitle">
@@ -34,15 +34,13 @@ @@ -34,15 +34,13 @@
34 // 全局相关的 import 34 // 全局相关的 import
35 import { ref } from 'vue' 35 import { ref } from 'vue'
36 import { useI18n } from '@/hooks/web/useI18n' 36 import { useI18n } from '@/hooks/web/useI18n'
37 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
38 -import { VxeGridInstance } from 'vxe-table' 37 +import { useXTable } from '@/hooks/web/useXTable'
39 import { allSchemas } from './sms.log.data' 38 import { allSchemas } from './sms.log.data'
40 import * as SmsLoglApi from '@/api/system/sms/smsLog' 39 import * as SmsLoglApi from '@/api/system/sms/smsLog'
41 const { t } = useI18n() // 国际化 40 const { t } = useI18n() // 国际化
42 41
43 // 列表相关的变量 42 // 列表相关的变量
44 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
45 -const { gridOptions, exportList } = useVxeGrid<SmsLoglApi.SmsLogVO>({ 43 +const [registerTable, { exportList }] = useXTable({
46 allSchemas: allSchemas, 44 allSchemas: allSchemas,
47 getListApi: SmsLoglApi.getSmsLogPageApi, 45 getListApi: SmsLoglApi.getSmsLogPageApi,
48 exportListApi: SmsLoglApi.exportSmsLogApi 46 exportListApi: SmsLoglApi.exportSmsLogApi
@@ -59,9 +57,4 @@ const handleDetail = (row: SmsLoglApi.SmsLogVO) =&gt; { @@ -59,9 +57,4 @@ const handleDetail = (row: SmsLoglApi.SmsLogVO) =&gt; {
59 detailData.value = row 57 detailData.value = row
60 dialogVisible.value = true 58 dialogVisible.value = true
61 } 59 }
62 -  
63 -// 导出操作  
64 -const handleExport = async () => {  
65 - await exportList(xGrid, '短信日志.xls')  
66 -}  
67 </script> 60 </script>
yudao-ui-admin-vue3/src/views/system/sms/smsTemplate/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <!-- 操作:新增 --> 5 <!-- 操作:新增 -->
6 <template #toolbar_buttons> 6 <template #toolbar_buttons>
7 <XButton 7 <XButton
@@ -38,10 +38,10 @@ @@ -38,10 +38,10 @@
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 - </vxe-grid> 44 + </XTable>
45 </ContentWrap> 45 </ContentWrap>
46 <XModal id="smsTemplate" v-model="dialogVisible" :title="dialogTitle"> 46 <XModal id="smsTemplate" v-model="dialogVisible" :title="dialogTitle">
47 <!-- 对话框(添加 / 修改) --> 47 <!-- 对话框(添加 / 修改) -->
@@ -113,8 +113,7 @@ @@ -113,8 +113,7 @@
113 import { ref, unref } from 'vue' 113 import { ref, unref } from 'vue'
114 import { useI18n } from '@/hooks/web/useI18n' 114 import { useI18n } from '@/hooks/web/useI18n'
115 import { useMessage } from '@/hooks/web/useMessage' 115 import { useMessage } from '@/hooks/web/useMessage'
116 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
117 -import { VxeGridInstance } from 'vxe-table' 116 +import { useXTable } from '@/hooks/web/useXTable'
118 import { FormExpose } from '@/components/Form' 117 import { FormExpose } from '@/components/Form'
119 import { ElForm, ElFormItem, ElInput } from 'element-plus' 118 import { ElForm, ElFormItem, ElInput } from 'element-plus'
120 // 业务相关的 import 119 // 业务相关的 import
@@ -125,8 +124,7 @@ const { t } = useI18n() // 国际化 @@ -125,8 +124,7 @@ const { t } = useI18n() // 国际化
125 const message = useMessage() // 消息弹窗 124 const message = useMessage() // 消息弹窗
126 125
127 // 列表相关的变量 126 // 列表相关的变量
128 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
129 -const { gridOptions, getList, deleteData } = useVxeGrid<SmsTemplateApi.SmsTemplateVO>({ 127 +const [registerTable, { reload, deleteData }] = useXTable({
130 allSchemas: allSchemas, 128 allSchemas: allSchemas,
131 getListApi: SmsTemplateApi.getSmsTemplatePageApi, 129 getListApi: SmsTemplateApi.getSmsTemplatePageApi,
132 deleteApi: SmsTemplateApi.deleteSmsTemplateApi 130 deleteApi: SmsTemplateApi.deleteSmsTemplateApi
@@ -168,11 +166,6 @@ const handleDetail = async (rowId: number) =&gt; { @@ -168,11 +166,6 @@ const handleDetail = async (rowId: number) =&gt; {
168 detailData.value = res 166 detailData.value = res
169 } 167 }
170 168
171 -// 删除操作  
172 -const handleDelete = async (rowId: number) => {  
173 - await deleteData(xGrid, rowId)  
174 -}  
175 -  
176 // 提交按钮 169 // 提交按钮
177 const submitForm = async () => { 170 const submitForm = async () => {
178 const elForm = unref(formRef)?.getElFormRef() 171 const elForm = unref(formRef)?.getElFormRef()
@@ -194,7 +187,7 @@ const submitForm = async () =&gt; { @@ -194,7 +187,7 @@ const submitForm = async () =&gt; {
194 } finally { 187 } finally {
195 actionLoading.value = false 188 actionLoading.value = false
196 // 刷新列表 189 // 刷新列表
197 - await getList(xGrid) 190 + await reload()
198 } 191 }
199 } 192 }
200 }) 193 })
yudao-ui-admin-vue3/src/views/system/tenant/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <!-- 操作:新增 --> 6 <!-- 操作:新增 -->
7 <XButton 7 <XButton
@@ -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,10 +46,10 @@ @@ -46,10 +46,10 @@
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 - </vxe-grid> 52 + </XTable>
53 </ContentWrap> 53 </ContentWrap>
54 <XModal v-model="dialogVisible" :title="dialogTitle"> 54 <XModal v-model="dialogVisible" :title="dialogTitle">
55 <!-- 对话框(添加 / 修改) --> 55 <!-- 对话框(添加 / 修改) -->
@@ -89,8 +89,7 @@ @@ -89,8 +89,7 @@
89 import { ref, unref } from 'vue' 89 import { ref, unref } from 'vue'
90 import { useI18n } from '@/hooks/web/useI18n' 90 import { useI18n } from '@/hooks/web/useI18n'
91 import { useMessage } from '@/hooks/web/useMessage' 91 import { useMessage } from '@/hooks/web/useMessage'
92 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
93 -import { VxeGridInstance } from 'vxe-table' 92 +import { useXTable } from '@/hooks/web/useXTable'
94 import { ElTag } from 'element-plus' 93 import { ElTag } from 'element-plus'
95 import { FormExpose } from '@/components/Form' 94 import { FormExpose } from '@/components/Form'
96 import * as TenantApi from '@/api/system/tenant' 95 import * as TenantApi from '@/api/system/tenant'
@@ -99,8 +98,7 @@ import { rules, allSchemas, tenantPackageOption } from &#39;./tenant.data&#39; @@ -99,8 +98,7 @@ import { rules, allSchemas, tenantPackageOption } from &#39;./tenant.data&#39;
99 const { t } = useI18n() // 国际化 98 const { t } = useI18n() // 国际化
100 const message = useMessage() // 消息弹窗 99 const message = useMessage() // 消息弹窗
101 // 列表相关的变量 100 // 列表相关的变量
102 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
103 -const { gridOptions, getList, deleteData, exportList } = useVxeGrid<TenantApi.TenantVO>({ 101 +const [registerTable, { reload, deleteData, exportList }] = useXTable({
104 allSchemas: allSchemas, 102 allSchemas: allSchemas,
105 getListApi: TenantApi.getTenantPageApi, 103 getListApi: TenantApi.getTenantPageApi,
106 deleteApi: TenantApi.deleteTenantApi, 104 deleteApi: TenantApi.deleteTenantApi,
@@ -151,16 +149,6 @@ const handleDetail = async (rowId: number) =&gt; { @@ -151,16 +149,6 @@ const handleDetail = async (rowId: number) =&gt; {
151 setDialogTile('detail') 149 setDialogTile('detail')
152 } 150 }
153 151
154 -// 删除操作  
155 -const handleDelete = async (rowId: number) => {  
156 - await deleteData(xGrid, rowId)  
157 -}  
158 -  
159 -// 导出操作  
160 -const handleExport = async () => {  
161 - await exportList(xGrid, '租户列表.xls')  
162 -}  
163 -  
164 // 提交按钮 152 // 提交按钮
165 const submitForm = async () => { 153 const submitForm = async () => {
166 const elForm = unref(formRef)?.getElFormRef() 154 const elForm = unref(formRef)?.getElFormRef()
@@ -183,7 +171,7 @@ const submitForm = async () =&gt; { @@ -183,7 +171,7 @@ const submitForm = async () =&gt; {
183 } finally { 171 } finally {
184 actionLoading.value = false 172 actionLoading.value = false
185 // 刷新列表 173 // 刷新列表
186 - await getList(xGrid) 174 + await reload()
187 } 175 }
188 } 176 }
189 }) 177 })
yudao-ui-admin-vue3/src/views/system/tenantPackage/index.vue
1 <template> 1 <template>
2 <ContentWrap> 2 <ContentWrap>
3 <!-- 列表 --> 3 <!-- 列表 -->
4 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 4 + <XTable @register="registerTable">
5 <template #toolbar_buttons> 5 <template #toolbar_buttons>
6 <XButton 6 <XButton
7 type="primary" 7 type="primary"
@@ -12,9 +12,9 @@ @@ -12,9 +12,9 @@
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 - </vxe-grid> 17 + </XTable>
18 </ContentWrap> 18 </ContentWrap>
19 <XModal v-model="dialogVisible" :title="dialogTitle"> 19 <XModal v-model="dialogVisible" :title="dialogTitle">
20 <!-- 对话框(添加 / 修改) --> 20 <!-- 对话框(添加 / 修改) -->
@@ -69,8 +69,7 @@ import { onMounted, ref, unref } from &#39;vue&#39; @@ -69,8 +69,7 @@ import { onMounted, ref, unref } from &#39;vue&#39;
69 import { handleTree, defaultProps } from '@/utils/tree' 69 import { handleTree, defaultProps } from '@/utils/tree'
70 import { useI18n } from '@/hooks/web/useI18n' 70 import { useI18n } from '@/hooks/web/useI18n'
71 import { useMessage } from '@/hooks/web/useMessage' 71 import { useMessage } from '@/hooks/web/useMessage'
72 -import { useVxeGrid } from '@/hooks/web/useVxeGrid'  
73 -import { VxeGridInstance } from 'vxe-table' 72 +import { useXTable } from '@/hooks/web/useXTable'
74 import { FormExpose } from '@/components/Form' 73 import { FormExpose } from '@/components/Form'
75 import { ElCard, ElSwitch, ElTree } from 'element-plus' 74 import { ElCard, ElSwitch, ElTree } from 'element-plus'
76 // 业务相关的 import 75 // 业务相关的 import
@@ -86,7 +85,6 @@ const menuExpand = ref(false) @@ -86,7 +85,6 @@ const menuExpand = ref(false)
86 const menuNodeAll = ref(false) 85 const menuNodeAll = ref(false)
87 const treeRef = ref<InstanceType<typeof ElTree>>() 86 const treeRef = ref<InstanceType<typeof ElTree>>()
88 const treeNodeAll = ref(false) 87 const treeNodeAll = ref(false)
89 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
90 const formRef = ref<FormExpose>() // 表单 Ref 88 const formRef = ref<FormExpose>() // 表单 Ref
91 const loading = ref(false) // 遮罩层 89 const loading = ref(false) // 遮罩层
92 const actionType = ref('') // 操作按钮的类型 90 const actionType = ref('') // 操作按钮的类型
@@ -102,7 +100,7 @@ const getTree = async () =&gt; { @@ -102,7 +100,7 @@ const getTree = async () =&gt; {
102 menuOptions.value = handleTree(res) 100 menuOptions.value = handleTree(res)
103 } 101 }
104 102
105 -const { gridOptions, getList, deleteData } = useVxeGrid<TenantPackageApi.TenantPackageVO>({ 103 +const [registerTable, { reload, deleteData }] = useXTable({
106 allSchemas: allSchemas, 104 allSchemas: allSchemas,
107 getListApi: TenantPackageApi.getTenantPackageTypePageApi, 105 getListApi: TenantPackageApi.getTenantPackageTypePageApi,
108 deleteApi: TenantPackageApi.deleteTenantPackageTypeApi 106 deleteApi: TenantPackageApi.deleteTenantPackageTypeApi
@@ -134,11 +132,6 @@ const handleUpdate = async (rowId: number) =&gt; { @@ -134,11 +132,6 @@ const handleUpdate = async (rowId: number) =&gt; {
134 unref(treeRef)?.setCheckedKeys(res.menuIds) 132 unref(treeRef)?.setCheckedKeys(res.menuIds)
135 } 133 }
136 134
137 -// 删除操作  
138 -const handleDelete = async (rowId: number) => {  
139 - await deleteData(xGrid, rowId)  
140 -}  
141 -  
142 // 提交按钮 135 // 提交按钮
143 const submitForm = async () => { 136 const submitForm = async () => {
144 const elForm = unref(formRef)?.getElFormRef() 137 const elForm = unref(formRef)?.getElFormRef()
@@ -149,7 +142,10 @@ const submitForm = async () =&gt; { @@ -149,7 +142,10 @@ const submitForm = async () =&gt; {
149 // 提交请求 142 // 提交请求
150 try { 143 try {
151 const data = unref(formRef)?.formModel as TenantPackageApi.TenantPackageVO 144 const data = unref(formRef)?.formModel as TenantPackageApi.TenantPackageVO
152 - 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 + ]
153 if (actionType.value === 'create') { 149 if (actionType.value === 'create') {
154 await TenantPackageApi.createTenantPackageTypeApi(data) 150 await TenantPackageApi.createTenantPackageTypeApi(data)
155 message.success(t('common.createSuccess')) 151 message.success(t('common.createSuccess'))
@@ -162,7 +158,7 @@ const submitForm = async () =&gt; { @@ -162,7 +158,7 @@ const submitForm = async () =&gt; {
162 } finally { 158 } finally {
163 loading.value = false 159 loading.value = false
164 // 刷新列表 160 // 刷新列表
165 - await getList(xGrid) 161 + await reload()
166 } 162 }
167 } 163 }
168 }) 164 })
yudao-ui-admin-vue3/src/views/system/user/index.vue
@@ -27,7 +27,7 @@ @@ -27,7 +27,7 @@
27 </div> 27 </div>
28 </template> 28 </template>
29 <!-- 列表 --> 29 <!-- 列表 -->
30 - <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> 30 + <XTable @register="registerTable">
31 <template #toolbar_buttons> 31 <template #toolbar_buttons>
32 <!-- 操作:新增 --> 32 <!-- 操作:新增 -->
33 <XButton 33 <XButton
@@ -112,14 +112,14 @@ @@ -112,14 +112,14 @@
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>
119 </template> 119 </template>
120 </el-dropdown> 120 </el-dropdown>
121 </template> 121 </template>
122 - </vxe-grid> 122 + </XTable>
123 </el-card> 123 </el-card>
124 </div> 124 </div>
125 <XModal v-model="dialogVisible" :title="dialogTitle"> 125 <XModal v-model="dialogVisible" :title="dialogTitle">
@@ -283,14 +283,13 @@ import { @@ -283,14 +283,13 @@ import {
283 UploadRawFile 283 UploadRawFile
284 } from 'element-plus' 284 } from 'element-plus'
285 import { useRouter } from 'vue-router' 285 import { useRouter } from 'vue-router'
286 -import { VxeGridInstance } from 'vxe-table'  
287 import { handleTree, defaultProps } from '@/utils/tree' 286 import { handleTree, defaultProps } from '@/utils/tree'
288 import download from '@/utils/download' 287 import download from '@/utils/download'
289 import { CommonStatusEnum } from '@/utils/constants' 288 import { CommonStatusEnum } from '@/utils/constants'
290 import { getAccessToken, getTenantId } from '@/utils/auth' 289 import { getAccessToken, getTenantId } from '@/utils/auth'
291 import { useI18n } from '@/hooks/web/useI18n' 290 import { useI18n } from '@/hooks/web/useI18n'
292 import { useMessage } from '@/hooks/web/useMessage' 291 import { useMessage } from '@/hooks/web/useMessage'
293 -import { useVxeGrid } from '@/hooks/web/useVxeGrid' 292 +import { useXTable } from '@/hooks/web/useXTable'
294 import { FormExpose } from '@/components/Form' 293 import { FormExpose } from '@/components/Form'
295 import { rules, allSchemas } from './user.data' 294 import { rules, allSchemas } from './user.data'
296 import * as UserApi from '@/api/system/user' 295 import * as UserApi from '@/api/system/user'
@@ -312,10 +311,9 @@ const queryParams = reactive({ @@ -312,10 +311,9 @@ const queryParams = reactive({
312 // ========== 列表相关 ========== 311 // ========== 列表相关 ==========
313 const tableTitle = ref('用户列表') 312 const tableTitle = ref('用户列表')
314 // 列表相关的变量 313 // 列表相关的变量
315 -const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref  
316 -const { gridOptions, getList, deleteData, exportList } = useVxeGrid<UserApi.UserVO>({ 314 +const [registerTable, { reload, deleteData, exportList }] = useXTable({
317 allSchemas: allSchemas, 315 allSchemas: allSchemas,
318 - queryParams: queryParams, 316 + params: queryParams,
319 getListApi: UserApi.getUserPageApi, 317 getListApi: UserApi.getUserPageApi,
320 deleteApi: UserApi.deleteUserApi, 318 deleteApi: UserApi.deleteUserApi,
321 exportListApi: UserApi.exportUserApi 319 exportListApi: UserApi.exportUserApi
@@ -334,7 +332,7 @@ const filterNode = (value: string, data: Tree) =&gt; { @@ -334,7 +332,7 @@ const filterNode = (value: string, data: Tree) =&gt; {
334 } 332 }
335 const handleDeptNodeClick = async (row: { [key: string]: any }) => { 333 const handleDeptNodeClick = async (row: { [key: string]: any }) => {
336 queryParams.deptId = row.id 334 queryParams.deptId = row.id
337 - await getList(xGrid) 335 + await reload()
338 } 336 }
339 const { push } = useRouter() 337 const { push } = useRouter()
340 const handleDeptEdit = () => { 338 const handleDeptEdit = () => {
@@ -407,10 +405,7 @@ const handleDetail = async (rowId: number) =&gt; { @@ -407,10 +405,7 @@ const handleDetail = async (rowId: number) =&gt; {
407 detailData.value = res 405 detailData.value = res
408 await setDialogTile('detail') 406 await setDialogTile('detail')
409 } 407 }
410 -// 删除操作  
411 -const handleDelete = async (rowId: number) => {  
412 - await deleteData(xGrid, rowId)  
413 -} 408 +
414 // 提交按钮 409 // 提交按钮
415 const submitForm = async () => { 410 const submitForm = async () => {
416 loading.value = true 411 loading.value = true
@@ -428,7 +423,7 @@ const submitForm = async () =&gt; { @@ -428,7 +423,7 @@ const submitForm = async () =&gt; {
428 } finally { 423 } finally {
429 // unref(formRef)?.setSchema(allSchemas.formSchema) 424 // unref(formRef)?.setSchema(allSchemas.formSchema)
430 // 刷新列表 425 // 刷新列表
431 - await getList(xGrid) 426 + await reload()
432 loading.value = false 427 loading.value = false
433 } 428 }
434 } 429 }
@@ -443,7 +438,7 @@ const handleStatusChange = async (row: UserApi.UserVO) =&gt; { @@ -443,7 +438,7 @@ const handleStatusChange = async (row: UserApi.UserVO) =&gt; {
443 await UserApi.updateUserStatusApi(row.id, row.status) 438 await UserApi.updateUserStatusApi(row.id, row.status)
444 message.success(text + '成功') 439 message.success(text + '成功')
445 // 刷新列表 440 // 刷新列表
446 - await getList(xGrid) 441 + await reload()
447 }) 442 })
448 .catch(() => { 443 .catch(() => {
449 row.status = 444 row.status =
@@ -544,7 +539,7 @@ const handleFileSuccess = async (response: any): Promise&lt;void&gt; =&gt; { @@ -544,7 +539,7 @@ const handleFileSuccess = async (response: any): Promise&lt;void&gt; =&gt; {
544 text += '< ' + username + ': ' + data.failureUsernames[username] + ' >' 539 text += '< ' + username + ': ' + data.failureUsernames[username] + ' >'
545 } 540 }
546 message.alert(text) 541 message.alert(text)
547 - await getList(xGrid) 542 + await reload()
548 } 543 }
549 // 文件数超出提示 544 // 文件数超出提示
550 const handleExceed = (): void => { 545 const handleExceed = (): void => {
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/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/utils/request/responseInterceptors.js
@@ -30,7 +30,7 @@ module.exports = vm =&gt; { @@ -30,7 +30,7 @@ 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 }