diff --git a/rc_autoplc_backend/.idea/.gitignore b/rc_autoplc_backend/.idea/.gitignore
deleted file mode 100644
index 13566b8..0000000
--- a/rc_autoplc_backend/.idea/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
-# Editor-based HTTP Client requests
-/httpRequests/
-# Datasource local storage ignored files
-/dataSources/
-/dataSources.local.xml
diff --git a/rc_autoplc_backend/.idea/compiler.xml b/rc_autoplc_backend/.idea/compiler.xml
deleted file mode 100644
index c858a1e..0000000
--- a/rc_autoplc_backend/.idea/compiler.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/rc_autoplc_backend/.idea/encodings.xml b/rc_autoplc_backend/.idea/encodings.xml
deleted file mode 100644
index e768916..0000000
--- a/rc_autoplc_backend/.idea/encodings.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/rc_autoplc_backend/.idea/jarRepositories.xml b/rc_autoplc_backend/.idea/jarRepositories.xml
deleted file mode 100644
index 082f15f..0000000
--- a/rc_autoplc_backend/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/rc_autoplc_backend/.idea/uiDesigner.xml b/rc_autoplc_backend/.idea/uiDesigner.xml
deleted file mode 100644
index 2b63946..0000000
--- a/rc_autoplc_backend/.idea/uiDesigner.xml
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
-
-
- -
-
-
- -
-
-
-
-
-
\ No newline at end of file
diff --git a/rc_autoplc_backend/.idea/workspace.xml b/rc_autoplc_backend/.idea/workspace.xml
new file mode 100644
index 0000000..42d1131
--- /dev/null
+++ b/rc_autoplc_backend/.idea/workspace.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1767767108230
+
+
+ 1767767108230
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/rc_autoplc_backend/LICENSE b/rc_autoplc_backend/LICENSE
index e5cbdd7..0ad25db 100644
--- a/rc_autoplc_backend/LICENSE
+++ b/rc_autoplc_backend/LICENSE
@@ -85,16 +85,16 @@ distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a userBusy through
+parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
- An interactive userBusy interface displays "Appropriate Legal Notices"
+ An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
-tells the userBusy that there is no warranty for the work (except to the
+tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
-the interface presents a list of userBusy commands or options, such as a
+the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
@@ -215,7 +215,7 @@ terms of section 4, provided that you also meet all of these conditions:
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
- d) If the work has interactive userBusy interfaces, each must display
+ d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
@@ -287,9 +287,9 @@ tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular userBusy, "normally used" refers to a
+product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
-of the particular userBusy or of the way in which the particular userBusy
+of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
diff --git a/rc_autoplc_backend/README.md b/rc_autoplc_backend/README.md
index 252cc97..69c3344 100644
--- a/rc_autoplc_backend/README.md
+++ b/rc_autoplc_backend/README.md
@@ -35,8 +35,3 @@
4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
-
-#### 增加日志生成:
-1. 2026-4-3:用户登录日志信息
-2. 2026-4-3:SOP用户操作日志信息
-3. 2026-4-3:基础数据(功能岛、SOP序列)用户操作(增-删-改)日志
\ No newline at end of file
diff --git a/rc_autoplc_backend/mvnw.cmd b/rc_autoplc_backend/mvnw.cmd
index 1acdbea..92450f9 100644
--- a/rc_autoplc_backend/mvnw.cmd
+++ b/rc_autoplc_backend/mvnw.cmd
@@ -23,7 +23,7 @@
@REM
@REM Optional ENV vars
@REM MVNW_REPOURL - repo url base for downloading maven distribution
-@REM MVNW_USERNAME/MVNW_PASSWORD - userBusy and password for downloading maven
+@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output
@REM ----------------------------------------------------------------------------
diff --git a/rc_autoplc_backend/pom.xml b/rc_autoplc_backend/pom.xml
index ff6d1b4..8b57d86 100644
--- a/rc_autoplc_backend/pom.xml
+++ b/rc_autoplc_backend/pom.xml
@@ -5,7 +5,7 @@
org.springframework.boot
spring-boot-starter-parent
- 3.2.12
+ 3.4.12
@@ -30,7 +30,6 @@
4.4.0
4.5.0
6.0.0
- 1.18.30
@@ -76,34 +75,6 @@
${jakarta.servlet-api.version}
provided
-
-
- com.fasterxml.jackson.datatype
- jackson-datatype-jsr310
- 2.15.4
-
-
- org.apache.commons
- commons-lang3
- 3.14.0
-
-
- jakarta.validation
- jakarta.validation-api
- 3.0.2
-
-
-
- com.github.s7connector
- s7connector
- 2.1
-
-
-
- org.apache.commons
- commons-pool2
- 2.12.0
-
@@ -113,7 +84,6 @@
org.apache.maven.plugins
maven-compiler-plugin
- 3.11.0
${java.version}
${java.version}
@@ -122,7 +92,6 @@
org.projectlombok
lombok
- ${lombok.version}
diff --git a/rc_autoplc_backend/rczn-admin/pom.xml b/rc_autoplc_backend/rczn-admin/pom.xml
index cef4882..9df1e64 100644
--- a/rc_autoplc_backend/rczn-admin/pom.xml
+++ b/rc_autoplc_backend/rczn-admin/pom.xml
@@ -67,12 +67,6 @@
runtime
-
-
-
-
-
-
org.projectlombok
@@ -85,7 +79,10 @@
com.auth0
java-jwt
-
+
+ com.github.xiaoymin
+ knife4j-openapi3-jakarta-spring-boot-starter
+
com.github.pagehelper
pagehelper-spring-boot-starter
@@ -95,12 +92,6 @@
jackson-datatype-jsr310
-
-
-
-
-
-
org.springframework.boot
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/RcznAdminApplication.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/RcznAdminApplication.java
index 088abe0..dfc48d0 100644
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/RcznAdminApplication.java
+++ b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/RcznAdminApplication.java
@@ -3,11 +3,9 @@ package com.rczn;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
-import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@ComponentScan(value = "com.rczn.*")
-@EnableScheduling
public class RcznAdminApplication {
public static void main(String[] args) {
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/config/CorsConfig.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/config/CorsConfig.java
index 89628bc..7050a0b 100644
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/config/CorsConfig.java
+++ b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/config/CorsConfig.java
@@ -1,10 +1,6 @@
package com.rczn.config;
-import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import org.springframework.web.cors.CorsConfiguration;
-import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
-import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@@ -21,25 +17,4 @@ public class CorsConfig implements WebMvcConfigurer {
.allowCredentials(true) // 允许携带Cookie
.maxAge(3600); // 预检请求缓存1小时
}
-
- @Bean
- public CorsFilter corsFilter() {
- CorsConfiguration config = new CorsConfiguration();
- // 1. 允许前端源(不要用*,和withCredentials=true配合需指定具体源,或用allowedOriginPatterns)
- config.addAllowedOriginPattern("*");
- // 2. 允许携带凭证(和前端withCredentials=true对应)
- config.setAllowCredentials(true);
- // 3. 允许所有请求方法(包含OPTIONS)
- config.addAllowedMethod("*");
- // 4. 允许所有请求头(包含Authorization)
- config.addAllowedHeader("*");
- // 5. 预检请求缓存时间(减少OPTIONS请求次数)
- config.setMaxAge(3600L);
-
- // 配置生效路径
- UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
- source.registerCorsConfiguration("/**", config);
-
- return new CorsFilter(source);
- }
}
\ No newline at end of file
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/config/Knife4jConfig.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/config/Knife4jConfig.java
deleted file mode 100644
index 052ebcc..0000000
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/config/Knife4jConfig.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.rczn.config;
-
-import io.swagger.v3.oas.models.Components;
-import io.swagger.v3.oas.models.OpenAPI;
-import io.swagger.v3.oas.models.info.Info;
-import io.swagger.v3.oas.models.security.SecurityRequirement;
-import io.swagger.v3.oas.models.security.SecurityScheme;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration
-public class Knife4jConfig {
-
- @Bean
- public OpenAPI customOpenAPI() {
- // 1. 声明JWT认证规则
- String securitySchemeName = "Authorization";
- return new OpenAPI()
- // 2. 文档基础信息(可选)
- .info(new Info()
- .title("XX自动化编程系统API")
- .version("1.0.0")
- .description("集成JWT认证的Knife4j接口文档"))
- // 3. 配置全局认证规则(所有接口默认需要Token)
- .addSecurityItem(new SecurityRequirement().addList(securitySchemeName))
- // 4. 定义Token的传递方式(请求头+Bearer格式)
- .components(new Components()
- .addSecuritySchemes(securitySchemeName,
- new SecurityScheme()
- .name(securitySchemeName)
- .type(SecurityScheme.Type.HTTP) // HTTP认证
- .scheme("bearer") // Bearer格式
- .bearerFormat("JWT") // Token类型为JWT
- .in(SecurityScheme.In.HEADER) // 放在请求头
- )
- );
- }
-}
\ No newline at end of file
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/config/WebConfig.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/config/WebConfig.java
deleted file mode 100644
index 076da1a..0000000
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/config/WebConfig.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.rczn.config;
-
-import com.rczn.interceptors.LoginInterceptor;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
-import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
-// 必须启用@Configuration,让Spring扫描到
-@Configuration
-public class WebConfig implements WebMvcConfigurer {
-
- // 必须注入拦截器(取消注释)
- @Autowired
- LoginInterceptor loginInterceptor;
-
- // 注册拦截器
- @Override
- public void addInterceptors(InterceptorRegistry registry) {
- registry.addInterceptor(loginInterceptor)
- // 拦截所有请求
- .addPathPatterns("/**")
- // 放行Swagger/Knife4j所有相关路径(关键补充/doc.html)
- .excludePathPatterns(
- // Knife4j自定义UI路径(核心!)
- "/doc.html",
- // Swagger UI页面相关
- "/swagger-ui/**",
- "/webjars/**",
- // SpringDoc接口文档数据相关
- "/v3/api-docs/**",
- "/v3/api-docs.yaml",
- // 旧版Swagger兼容
- "/swagger-resources/**",
- "/swagger-ui.html"
- )
- // 放行登录/注册接口
- .excludePathPatterns("/user/login", "/user/register");
- }
-
- // 静态资源映射(适配Knife4j+SpringDoc)
- @Override
- public void addResourceHandlers(ResourceHandlerRegistry registry) {
- // Knife4j静态资源(核心补充)
- registry.addResourceHandler("/doc.html")
- .addResourceLocations("classpath:/META-INF/resources/");
- // Swagger UI静态资源
- registry.addResourceHandler("/swagger-ui/**")
- .addResourceLocations("classpath:/META-INF/resources/webjars/springdoc-openapi-ui/");
- // Webjars通用资源
- registry.addResourceHandler("/webjars/**")
- .addResourceLocations("classpath:/META-INF/resources/webjars/");
- }
-}
\ No newline at end of file
diff --git a/rc_autoplc_backend/rczn-autoplc/src/main/java/com/rczn/rcznautoplc/controller/ManageLogController.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/controller/ManageLogController.java
similarity index 91%
rename from rc_autoplc_backend/rczn-autoplc/src/main/java/com/rczn/rcznautoplc/controller/ManageLogController.java
rename to rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/controller/ManageLogController.java
index 06238d6..80fbccf 100644
--- a/rc_autoplc_backend/rczn-autoplc/src/main/java/com/rczn/rcznautoplc/controller/ManageLogController.java
+++ b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/controller/ManageLogController.java
@@ -1,16 +1,15 @@
-package com.rczn.rcznautoplc.controller;
+package com.rczn.controller;
import com.rczn.domain.PageBean;
import com.rczn.domain.Result;
-import com.rczn.rcznautoplc.domain.ManageLog;
-import com.rczn.rcznautoplc.service.ManageLogService;
+import com.rczn.system.domain.ManageLog;
+import com.rczn.system.service.ManageLogService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
@@ -44,12 +43,8 @@ public class ManageLogController {
@RequestParam(required = false) String logName,
@RequestParam(required = false) String logType,
@RequestParam(required = false) Long createId,
- @RequestParam(required = false)
- @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- LocalDateTime logWritetimeStart,
- @RequestParam(required = false)
- @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- LocalDateTime logWritetimeEnd) {
+ @RequestParam(required = false) LocalDateTime logWritetimeStart,
+ @RequestParam(required = false) LocalDateTime logWritetimeEnd) {
// 构建查询条件(空字段自动忽略)
ManageLog query = new ManageLog();
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/controller/RoleController.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/controller/RoleController.java
index 21873ca..014c66d 100644
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/controller/RoleController.java
+++ b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/controller/RoleController.java
@@ -9,7 +9,6 @@ import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.annotations.tags.Tag;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@@ -22,8 +21,12 @@ import java.util.List;
@Tag(name = "角色管理", description = "角色增删改查接口(支持分页+多条件查询+编码唯一性校验)")
public class RoleController {
- @Autowired
- RoleService roleService;
+ private final RoleService roleService;
+
+ // 构造器注入
+ public RoleController(RoleService roleService) {
+ this.roleService = roleService;
+ }
/**
* 1. 分页查询角色(多条件模糊查询)
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/controller/RolePermissionController.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/controller/RolePermissionController.java
deleted file mode 100644
index 3930764..0000000
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/controller/RolePermissionController.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package com.rczn.controller;
-
-import com.rczn.domain.Result;
-import com.rczn.system.domain.RolePermission;
-import com.rczn.system.domain.query.RolePermissionQuery;
-import com.rczn.system.service.RolePermissionService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.enums.ParameterIn;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-@RestController
-@RequestMapping("/rolePermission")
-@Tag(name = "角色权限管理", description = "角色权限关联接口")
-public class RolePermissionController {
-
- @Autowired
- RolePermissionService rolePermissionService;
-
- @GetMapping("/listByRoleId/{roleId}")
- @Operation(summary = "根据角色ID查询权限ID列表")
- public Result getListByRoleId(
- @Parameter(name = "roleId", required = true) @PathVariable Integer roleId) {
- List list = rolePermissionService.selectListByRoleId(roleId);
- return Result.success(list);
- }
-
- @PostMapping("/add")
- @Operation(summary = "给角色添加权限")
- public Result add(@RequestBody RolePermissionQuery rolePermission) {
- if (rolePermission.getRoleId() == null || rolePermission.getPermissionId() == null) {
- return Result.error("角色ID和权限ID不能为空");
- }
- try {
- RolePermission rolePermissionEntity = new RolePermission();
- rolePermissionEntity.setRoleId(rolePermission.getRoleId());
- rolePermissionEntity.setPermissionId(rolePermission.getPermissionId());
- rolePermissionService.insert(rolePermissionEntity);
- return Result.success("添加成功");
- } catch (Exception e) {
- return Result.error(e.getMessage());
- }
- }
-
- @DeleteMapping("/del")
- @Operation(summary = "删除角色权限关联")
- public Result delete(
- @RequestParam Integer roleId,
- @RequestParam(required = false) Integer permissionId) {
- boolean success = rolePermissionService.delete(roleId, permissionId);
- return success ? Result.success("删除成功") : Result.error("删除失败");
- }
-
- @DeleteMapping("/clearByRoleId/{roleId}")
- @Operation(summary = "清空某个角色的所有权限")
- public Result clearByRoleId(
- @Parameter(name = "roleId", required = true) @PathVariable Integer roleId) {
- rolePermissionService.deleteByRoleId(roleId);
- return Result.success("清空成功");
- }
-}
\ No newline at end of file
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/controller/SysDicDataController.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/controller/SysDicDataController.java
deleted file mode 100644
index da28134..0000000
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/controller/SysDicDataController.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package com.rczn.controller;
-
-import com.github.pagehelper.PageInfo;
-import com.rczn.domain.Result;
-import com.rczn.system.domain.SysDicData;
-import com.rczn.system.service.SysDicDataService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.Parameters;
-import io.swagger.v3.oas.annotations.enums.ParameterIn;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.*;
-import java.util.List;
-
-@RestController
-@RequestMapping("/sysDicData")
-@Tag(name = "字典数据管理", description = "字典数据增删改查+分页查询+按类型查询接口")
-public class SysDicDataController {
-
- @Autowired
- private SysDicDataService sysDicDataService;
-
- @GetMapping(value = "/listPage", produces = MediaType.APPLICATION_JSON_VALUE)
- @Operation(summary = "分页查询字典数据", description = "支持字典类型ID、标签、值查询")
- @Parameters({
- @Parameter(name = "pageNum", description = "页码(必填)", required = true, example = "1", in = ParameterIn.QUERY),
- @Parameter(name = "pageSize", description = "每页条数(必填)", required = true, example = "10", in = ParameterIn.QUERY),
- @Parameter(name = "dicId", description = "字典类型ID(可选)", required = false, example = "1", in = ParameterIn.QUERY),
- @Parameter(name = "dicLabel", description = "数据标签(可选,模糊查询)", required = false, example = "运行", in = ParameterIn.QUERY),
- @Parameter(name = "dicValue", description = "数据值(可选,模糊查询)", required = false, example = "1", in = ParameterIn.QUERY)
- })
- public Result getDicDataPage(
- @RequestParam Integer pageNum,
- @RequestParam Integer pageSize,
- @RequestParam(required = false) Integer dicId,
- @RequestParam(required = false) String dicLabel,
- @RequestParam(required = false) String dicValue) {
- PageInfo pageBean = sysDicDataService.selectPage(pageNum, pageSize, dicId, dicLabel, dicValue);
- return Result.success(pageBean);
- }
-
- @GetMapping(value = "/list", produces = MediaType.APPLICATION_JSON_VALUE)
- @Operation(summary = "查询字典数据", description = "支持字典类型ID、标签、值查询")
- @Parameters({
- @Parameter(name = "dicId", description = "字典类型ID(可选)", required = false, example = "1", in = ParameterIn.QUERY),
- @Parameter(name = "dicLabel", description = "数据标签(可选,模糊查询)", required = false, example = "运行", in = ParameterIn.QUERY),
- @Parameter(name = "dicValue", description = "数据值(可选,模糊查询)", required = false, example = "1", in = ParameterIn.QUERY)
- })
- public Result getList(
- @RequestParam(required = false) Integer dicId,
- @RequestParam(required = false) String dicLabel,
- @RequestParam(required = false) String dicValue) {
- List list = sysDicDataService.selectList( dicId, dicLabel, dicValue);
- return Result.success(list);
- }
-
- @GetMapping(value = "/getById/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
- @Operation(summary = "查询单个字典数据", description = "根据字典数据ID查询详情")
- public Result getDicDataById(@PathVariable Long id) {
- SysDicData sysDicData = sysDicDataService.selectById(id);
- return sysDicData != null ? Result.success(sysDicData) : Result.error("字典数据不存在");
- }
-
- @GetMapping(value = "/listByDicId/{dicId}", produces = MediaType.APPLICATION_JSON_VALUE)
- @Operation(summary = "按字典类型ID查询数据列表", description = "查询指定字典类型下的所有有效数据")
- public Result getDicDataByDicId(@PathVariable Integer dicId) {
- try {
- List list = sysDicDataService.selectByDicId(dicId);
- return Result.success(list);
- } catch (IllegalArgumentException e) {
- return Result.error(e.getMessage());
- }
- }
-
- @PostMapping(value = "/add", produces = MediaType.APPLICATION_JSON_VALUE)
- @Operation(summary = "新增字典数据", description = "字典类型ID、数据标签为必填项")
- public Result addDicData(@RequestBody SysDicData sysDicData) {
- try {
- Long dicDataId = sysDicDataService.insert(sysDicData);
- return Result.success(dicDataId);
- } catch (IllegalArgumentException e) {
- return Result.error(e.getMessage());
- }
- }
-
- @PutMapping(value = "/update", produces = MediaType.APPLICATION_JSON_VALUE)
- @Operation(summary = "修改字典数据", description = "需传入字典数据ID,其他字段可选(非空则更新)")
- public Result updateDicData(@RequestBody SysDicData sysDicData) {
- try {
- Boolean success = sysDicDataService.update(sysDicData);
- return success ? Result.success(true) : Result.error("修改失败(字典数据不存在或已删除)");
- } catch (IllegalArgumentException e) {
- return Result.error(e.getMessage());
- }
- }
-
- @DeleteMapping(value = "/del/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
- @Operation(summary = "删除字典数据", description = "逻辑删除(设置delSign=1,不物理删除数据)")
- public Result deleteDicData(@PathVariable Long id) {
- try {
- Boolean success = sysDicDataService.deleteById(id);
- return success ? Result.success(true) : Result.error("删除失败(字典数据不存在或已删除)");
- } catch (IllegalArgumentException e) {
- return Result.error(e.getMessage());
- }
- }
-}
\ No newline at end of file
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/controller/SysDicTypeController.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/controller/SysDicTypeController.java
deleted file mode 100644
index 36a814b..0000000
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/controller/SysDicTypeController.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package com.rczn.controller;
-
-import com.github.pagehelper.PageInfo;
-import com.rczn.domain.Result;
-import com.rczn.system.domain.SysDicType;
-import com.rczn.system.service.SysDicTypeService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.Parameters;
-import io.swagger.v3.oas.annotations.enums.ParameterIn;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-@RestController
-@RequestMapping("/sysDicType")
-@Tag(name = "字典类型管理", description = "字典类型增删改查+分页查询接口")
-public class SysDicTypeController {
-
- @Autowired
- private SysDicTypeService sysDicTypeService;
-
- @GetMapping(value = "/listPage", produces = MediaType.APPLICATION_JSON_VALUE)
- @Operation(summary = "分页查询字典类型", description = "支持字典名称、编码模糊查询")
- @Parameters({
- @Parameter(name = "pageNum", description = "页码(必填)", required = true, example = "1", in = ParameterIn.QUERY),
- @Parameter(name = "pageSize", description = "每页条数(必填)", required = true, example = "10", in = ParameterIn.QUERY),
- @Parameter(name = "dicName", description = "字典名称(可选,模糊查询)", required = false, example = "设备状态", in = ParameterIn.QUERY),
- @Parameter(name = "dicCode", description = "字典编码(可选,模糊查询)", required = false, example = "DEV_STATUS", in = ParameterIn.QUERY)
- })
- public Result getDicTypePage(
- @RequestParam Integer pageNum,
- @RequestParam Integer pageSize,
- @RequestParam(required = false) String dicName,
- @RequestParam(required = false) String dicCode) {
- PageInfo pageBean = sysDicTypeService.selectPage(pageNum, pageSize, dicName, dicCode);
- return Result.success(pageBean);
- }
-
- @GetMapping(value = "/list", produces = MediaType.APPLICATION_JSON_VALUE)
- @Operation(summary = "查询字典类型列表", description = "支持字典名称、编码模糊查询")
- @Parameters({
- @Parameter(name = "dicName", description = "字典名称(可选,模糊查询)", required = false, example = "设备状态", in = ParameterIn.QUERY),
- @Parameter(name = "dicCode", description = "字典编码(可选,模糊查询)", required = false, example = "DEV_STATUS", in = ParameterIn.QUERY)
- })
- public Result getList(
- @RequestParam(required = false) String dicName,
- @RequestParam(required = false) String dicCode) {
- List list = sysDicTypeService.selectList( dicName, dicCode);
- return Result.success(list);
- }
-
- @GetMapping(value = "/getById/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
- @Operation(summary = "查询单个字典类型", description = "根据字典类型ID查询详情")
- public Result getDicTypeById(@PathVariable Long id) {
- SysDicType sysDicType = sysDicTypeService.selectById(id);
- return sysDicType != null ? Result.success(sysDicType) : Result.error("字典类型不存在");
- }
-
- @PostMapping(value = "/add", produces = MediaType.APPLICATION_JSON_VALUE)
- @Operation(summary = "新增字典类型", description = "字典名称为必填项")
- public Result addDicType(@RequestBody SysDicType sysDicType) {
- try {
- Long dicTypeId = sysDicTypeService.insert(sysDicType);
- return Result.success(dicTypeId);
- } catch (IllegalArgumentException e) {
- return Result.error(e.getMessage());
- }
- }
-
- @PutMapping(value = "/update", produces = MediaType.APPLICATION_JSON_VALUE)
- @Operation(summary = "修改字典类型", description = "需传入字典类型ID,其他字段可选(非空则更新)")
- public Result updateDicType(@RequestBody SysDicType sysDicType) {
- try {
- Boolean success = sysDicTypeService.update(sysDicType);
- return success ? Result.success(true) : Result.error("修改失败(字典类型不存在或已删除)");
- } catch (IllegalArgumentException e) {
- return Result.error(e.getMessage());
- }
- }
-
- @DeleteMapping(value = "/del/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
- @Operation(summary = "删除字典类型", description = "逻辑删除(设置delSign=1,不物理删除数据)")
- public Result deleteDicType(@PathVariable Long id) {
- try {
- Boolean success = sysDicTypeService.deleteById(id);
- return success ? Result.success(true) : Result.error("删除失败(字典类型不存在或已删除)");
- } catch (IllegalArgumentException e) {
- return Result.error(e.getMessage());
- }
- }
-}
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/controller/SysPermissionController.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/controller/SysPermissionController.java
deleted file mode 100644
index 4f7f2bb..0000000
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/controller/SysPermissionController.java
+++ /dev/null
@@ -1,128 +0,0 @@
-package com.rczn.controller;
-
-import com.rczn.domain.PageBean;
-import com.rczn.domain.Result;
-import com.rczn.system.domain.Permission;
-import com.rczn.system.domain.Role;
-import com.rczn.system.service.SysPermissionService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.Parameters;
-import io.swagger.v3.oas.annotations.enums.ParameterIn;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * 权限管理 API(MyBatis 树形结构实现)
- */
-@RestController
-@RequestMapping("/permission")
-@Tag(name = "权限管理", description = "权限增删改查接口(树形结构)")
-public class SysPermissionController {
-
- @Autowired
- private SysPermissionService sysPermissionService;
-
- /**
- * 1. 分页查询权限(多条件模糊查询)
- */
- @GetMapping("/listPage")
- @Operation(summary = "分页查询权限", description = "支持角色名、角色编码模糊查询,页码从1开始")
- @Parameters({
- @Parameter(name = "pageNum", description = "页码(必填,从1开始)", required = true, example = "1", in = ParameterIn.QUERY),
- @Parameter(name = "pageSize", description = "每页条数(必填)", required = true, example = "10", in = ParameterIn.QUERY),
- @Parameter(name = "parentId", description = "父级ID(可选)", required = false, example = "0", in = ParameterIn.QUERY),
- @Parameter(name = "permissionName", description = "权限名称(模糊查询,可选)", required = false, example = "用户添加", in = ParameterIn.QUERY)
- })
- public Result> getRolePage(
- @RequestParam Integer pageNum,
- @RequestParam Integer pageSize,
- @RequestParam(required = false) Integer parentId,
- @RequestParam(required = false) String permissionName) {
-
- PageBean pageBean = sysPermissionService.selectRolePage(pageNum, pageSize, parentId,permissionName);
- return Result.success(pageBean);
- }
-
- /**
- * 1. 查询权限树形结构列表
- */
- @GetMapping("/list")
- @Operation(summary = "查询权限树形列表", description = "返回权限树形结构(parentId为0或null为顶级)")
- public Result> getPermissionList() {
- List treeList = sysPermissionService.getPermissionList();
- return Result.success(treeList);
- }
-
- /**
- * 1. 查询权限树形结构列表
- */
-// @GetMapping("/listByParentId/{parentId}")
-// @Operation(summary = "查询权限树形列表", description = "返回权限树形结构(parentId为0或null为顶级)")
-// public Result> getPermissionListByParentId(@PathVariable Integer parentId) {
-// List treeList = sysPermissionService.getPermissionListByParentId(parentId);
-// return Result.success(treeList);
-// }
-
- /**
- * 2. 根据ID查询单个权限
- */
- @GetMapping("/getById/{id}")
- @Operation(summary = "查询单个权限", description = "根据权限ID查询详情")
- public Result getPermissionById(
- @Parameter(name = "id", description = "权限ID", required = true, example = "1", in = ParameterIn.PATH)
- @PathVariable Integer id) {
-
- Permission permission = sysPermissionService.getPermissionById(id);
- if (permission == null) {
- return Result.error("权限ID:" + id + " 不存在");
- }
- return Result.success(permission);
- }
-
- /**
- * 3. 新增权限
- */
- @PostMapping("/add")
- @Operation(summary = "新增权限", description = "提交权限信息创建新权限")
- public Result addPermission(
- @Parameter(name = "permission", description = "权限信息", required = true)
- @RequestBody Permission permission) {
-
- boolean success = sysPermissionService.addPermission(permission);
- return success ? Result.success("新增权限成功") : Result.error("新增失败");
- }
-
- /**
- * 4. 修改权限
- */
- @PutMapping("/update")
- @Operation(summary = "修改权限", description = "传入权限ID和需要修改的字段")
- public Result updatePermission(
- @Parameter(name = "permission", description = "权限信息(必须包含ID)", required = true)
- @RequestBody Permission permission) {
-
- try {
- boolean success = sysPermissionService.updatePermission(permission);
- return success ? Result.success("修改权限成功") : Result.error("修改失败(权限不存在)");
- } catch (Exception e) {
- return Result.error(e.getMessage());
- }
- }
-
- /**
- * 5. 根据ID删除权限(逻辑删除)
- */
- @DeleteMapping("/del/{id}")
- @Operation(summary = "删除权限", description = "根据权限ID逻辑删除")
- public Result deletePermission(
- @Parameter(name = "id", description = "权限ID", required = true, example = "1", in = ParameterIn.PATH)
- @PathVariable Integer id) {
-
- boolean success = sysPermissionService.deletePermission(id);
- return success ? Result.success("删除权限成功") : Result.error("删除失败(权限不存在)");
- }
-}
\ No newline at end of file
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/controller/UserController.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/controller/UserController.java
index 126a663..b2a6972 100644
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/controller/UserController.java
+++ b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/controller/UserController.java
@@ -1,33 +1,18 @@
package com.rczn.controller;
-import com.fasterxml.jackson.databind.annotation.JsonAppend;
import com.rczn.domain.PageBean;
import com.rczn.domain.Result;
-import com.rczn.rcznautoplc.domain.ManageLog;
-import com.rczn.rcznautoplc.domain.RecordInfo;
-import com.rczn.rcznautoplc.service.ManageLogService;
-import com.rczn.rcznautoplc.service.RecordInfoService;
-import com.rczn.system.domain.Permission;
import com.rczn.system.domain.User;
import com.rczn.system.service.UserService;
-import com.rczn.utils.JwtUtil;
-import com.rczn.utils.Md5Util;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.validation.constraints.Pattern;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
/**
* 用户管理 CRUD API(MyBatis+PageHelper 实现)
@@ -132,108 +117,4 @@ public class UserController {
Boolean success = userService.deleteById(id);
return success ? Result.success("删除用户成功") : Result.error("删除失败(用户不存在)");
}
-
-
- @PostMapping("/register")
- @Operation(summary = "注册", description = "用户名必须是2-16位的字母、数字、下划线或减号")
- public Result register(@Pattern(regexp = "^[a-zA-Z0-9_-]{2,16}$", message = "用户名必须是2-16位的字母、数字、下划线或减号")
- @Parameter(
- name = "username",
- description = "用户名"
- )
- @RequestParam
- String username,
- @Parameter(
- name = "password",
- description = "密码..."
- )
- @RequestParam
- String password) {
- //查询数据库是否有该用户
- User user = userService.findeUserByUsername(username);
- //注册
- if (user == null) {
- //如果用户不存在,则注册
- int result = userService.register(username, password);
- return Result.success("用户注册成功");
- } else {
- //用户存在,返回错误信息
- return Result.error("该用户名已存在!");
- }
- }
-
- @GetMapping("/getUserByUsername")
- public Result getUserByUsername(String username) {
- User user = userService.findeUserByUsername(username);
- if (user == null) {
- return Result.error("该用户不存在!");
- } else {
- return Result.success(user);
- }
- }
-
- @Autowired
- ManageLogService manageLogService;
-
- @PostMapping("/login")
- @Operation(summary = "用户登录接口",description = "根据用户名和密码登录,返回JWT Token")
- public Result login(
- @Parameter(
- name = "username",
- description = "登录用户名(2-16位的字母、数字、下划线或减号)",
- required = true, // 标记为必填参数
- example = "string"
- )
- @RequestParam
- String username,
- @Parameter(
- name = "password",
- description = "登录密码",
- required = true
- )
- @RequestParam
- String password) {
-
- //TODO 登录逻辑
- //查询数据库是否有该用户
- User user = userService.findeUserByUsername(username);
- //登录
- if (user == null) {
- //如果用户不存在,返回错误信息
- return Result.error("该用户不存在!");
- } else {
- //校验密码:
- String encryptPassword = user.getPassword();
- if (encryptPassword.equals(password)) {
- //登录成功,增加登录日志:
- LocalDateTime loginTime = LocalDateTime.now();
- ManageLog info = new ManageLog();
- info.setCreateId(user.getId());
- info.setLogName("登录日志");
- info.setLogType("登录日志");//1:登录日志、2:SOP操作日志、3:基础数据操作日志
- StringBuilder stringBuilder = new StringBuilder();
- stringBuilder.append("用户名:").append(user.getUserName()).append(",登录操作时间:").append(loginTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
- info.setLogContent(stringBuilder.toString());
- info.setCreateTime(loginTime);
- manageLogService.insert(info);
-
-// if (Md5Util.checkPassword(password, encryptPassword)) {
- //生产token
- Map claims = new HashMap<>();
- claims.put("id", user.getId());
- claims.put("username", user.getUserName());
- //获取权限列表:
- List permissions = userService.findUserPermissions(user.getId());
- List permissionList = permissions.stream().map(Permission::getPermissionCode).collect(Collectors.toList());
- claims.put("permissions", permissionList);
- String jwtToken = JwtUtil.genToken(claims);
- //密码正确,返回成功信息
- return Result.success(jwtToken);
- } else {
- //密码错误,返回错误信息
- return Result.error("密码错误!");
- }
- }
- }
-
}
\ No newline at end of file
diff --git a/rc_autoplc_backend/rczn-autoplc/src/main/java/com/rczn/rcznautoplc/domain/ManageLog.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/domain/ManageLog.java
similarity index 97%
rename from rc_autoplc_backend/rczn-autoplc/src/main/java/com/rczn/rcznautoplc/domain/ManageLog.java
rename to rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/domain/ManageLog.java
index 4b5462e..8cceedc 100644
--- a/rc_autoplc_backend/rczn-autoplc/src/main/java/com/rczn/rcznautoplc/domain/ManageLog.java
+++ b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/domain/ManageLog.java
@@ -1,8 +1,8 @@
-package com.rczn.rcznautoplc.domain;
-
+package com.rczn.system.domain;
import com.rczn.domain.BaseBean;
+
import java.time.LocalDateTime;
public class ManageLog extends BaseBean {
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/domain/Permission.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/domain/Permission.java
index dfc2554..0ca598f 100644
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/domain/Permission.java
+++ b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/domain/Permission.java
@@ -1,31 +1,16 @@
package com.rczn.system.domain;
import com.rczn.domain.BaseBean;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
-import java.util.List;
-
-public class Permission extends BaseBean{
-
- private Integer parentId;
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+public class Permission extends BaseBean {
private String permissionName;
- private String permissionCode;
- // 树形结构子节点 ✅
- private List children;
-
- // getter & setter
- public Integer getParentId() { return parentId; }
- public void setParentId(Integer parentId) { this.parentId = parentId; }
- public String getPermissionName() { return permissionName; }
- public void setPermissionName(String permissionName) { this.permissionName = permissionName; }
- public String getPermissionCode() { return permissionCode; }
- public void setPermissionCode(String permissionCode) { this.permissionCode = permissionCode; }
-
- // children
- public List getChildren() {
- return children;
- }
- public void setChildren(List children) {
- this.children = children;
- }
-}
+ private String permissionCode;}
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/domain/SysDicData.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/domain/SysDicData.java
deleted file mode 100644
index a64751c..0000000
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/domain/SysDicData.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.rczn.system.domain;
-
-import com.rczn.domain.BaseBean;
-import java.time.LocalDateTime;
-
-/**
- * 字典数据实体类
- * 对应表:sys_dic_data
- */
-public class SysDicData extends BaseBean {
-
- // 字典类型id(外键)
- private Integer dicId;
-
- // 数据标签
- private String dicLabel;
-
- // 数据字典值
- private String dicValue;
-
- public SysDicData() {
- }
-
- public SysDicData(Long id, Long createId, LocalDateTime createTime, Long updateId, LocalDateTime updateTime, boolean delSign, String remark) {
- super(id, createId, createTime, updateId, updateTime, delSign, remark);
- }
-
- // getter/setter
- public Integer getDicId() {
- return dicId;
- }
-
- public void setDicId(Integer dicId) {
- this.dicId = dicId;
- }
-
- public String getDicLabel() {
- return dicLabel;
- }
-
- public void setDicLabel(String dicLabel) {
- this.dicLabel = dicLabel;
- }
-
- public String getDicValue() {
- return dicValue;
- }
-
- public void setDicValue(String dicValue) {
- this.dicValue = dicValue;
- }
-}
\ No newline at end of file
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/domain/SysDicType.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/domain/SysDicType.java
deleted file mode 100644
index 827bdce..0000000
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/domain/SysDicType.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.rczn.system.domain;
-
-import com.rczn.domain.BaseBean;
-import java.time.LocalDateTime;
-
-/**
- * 字典类型实体类
- * 对应表:sys_dic_type
- */
-public class SysDicType extends BaseBean {
-
- // 字典名称(必填)
- private String dicName;
-
- // 字典编码
- private String dicCode;
-
- public SysDicType() {
- }
-
- public SysDicType(Long id, Long createId, LocalDateTime createTime, Long updateId, LocalDateTime updateTime, boolean delSign, String remark) {
- super(id, createId, createTime, updateId, updateTime, delSign, remark);
- }
-
- // getter/setter
- public String getDicName() {
- return dicName;
- }
-
- public void setDicName(String dicName) {
- this.dicName = dicName;
- }
-
- public String getDicCode() {
- return dicCode;
- }
-
- public void setDicCode(String dicCode) {
- this.dicCode = dicCode;
- }
-}
\ No newline at end of file
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/domain/query/RolePermissionQuery.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/domain/query/RolePermissionQuery.java
deleted file mode 100644
index f17fa3a..0000000
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/domain/query/RolePermissionQuery.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.rczn.system.domain.query;
-
-public class RolePermissionQuery {
-
- //角色id
- private Integer roleId;
-
- //权限id
- private Integer permissionId;
-
- public RolePermissionQuery(Integer roleId, Integer permissionId) {
- this.roleId = roleId;
- this.permissionId = permissionId;
- }
-
- public RolePermissionQuery() {
- }
-
- public Integer getRoleId() {
- return roleId;
- }
-
- public void setRoleId(Integer roleId) {
- this.roleId = roleId;
- }
-
- public Integer getPermissionId() {
- return permissionId;
- }
-
- public void setPermissionId(Integer permissionId) {
- this.permissionId = permissionId;
- }
-}
diff --git a/rc_autoplc_backend/rczn-autoplc/src/main/java/com/rczn/rcznautoplc/mapper/ManageLogMapper.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/mapper/ManageLogMapper.java
similarity index 90%
rename from rc_autoplc_backend/rczn-autoplc/src/main/java/com/rczn/rcznautoplc/mapper/ManageLogMapper.java
rename to rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/mapper/ManageLogMapper.java
index 1300631..399f858 100644
--- a/rc_autoplc_backend/rczn-autoplc/src/main/java/com/rczn/rcznautoplc/mapper/ManageLogMapper.java
+++ b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/mapper/ManageLogMapper.java
@@ -1,8 +1,7 @@
-package com.rczn.rcznautoplc.mapper;
+package com.rczn.system.mapper;
-import com.rczn.rcznautoplc.domain.ManageLog;
+import com.rczn.system.domain.ManageLog;
import org.apache.ibatis.annotations.Mapper;
-
import java.util.List;
@Mapper // 标记为 MyBatis Mapper 接口,确保被 Spring 扫描
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/mapper/RolePermissionMapper.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/mapper/RolePermissionMapper.java
deleted file mode 100644
index 93f27f9..0000000
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/mapper/RolePermissionMapper.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.rczn.system.mapper;
-
-import com.rczn.system.domain.RolePermission;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-import java.util.List;
-
-@Mapper
-public interface RolePermissionMapper {
-
- List selectListByRoleId(@Param("roleId") Integer roleId);
-
- int insert(RolePermission rolePermission);
-
- int delete(@Param("roleId") Integer roleId, @Param("permissionId") Integer permissionId);
-
- int deleteByRoleId(@Param("roleId") Integer roleId);
-}
\ No newline at end of file
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/mapper/SysDicDataMapper.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/mapper/SysDicDataMapper.java
deleted file mode 100644
index 52cea18..0000000
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/mapper/SysDicDataMapper.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.rczn.system.mapper;
-
-import com.rczn.system.domain.SysDicData;
-import org.apache.ibatis.annotations.Mapper;
-import java.util.List;
-
-@Mapper
-public interface SysDicDataMapper {
-
- /**
- * 新增字典数据
- */
- int insert(SysDicData sysDicData);
-
- /**
- * 修改字典数据
- */
- int update(SysDicData sysDicData);
-
- /**
- * 逻辑删除字典数据
- */
- int deleteById(Long id);
-
- /**
- * 根据ID查询字典数据
- */
- SysDicData selectById(Long id);
-
- /**
- * 分页查询字典数据(参数可选)
- */
- List selectPage(SysDicData sysDicData);
-
- /**
- * 根据字典类型ID查询字典数据列表
- */
- List selectByDicId(Integer dicId);
-}
\ No newline at end of file
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/mapper/SysDicTypeMapper.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/mapper/SysDicTypeMapper.java
deleted file mode 100644
index ec25b7a..0000000
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/mapper/SysDicTypeMapper.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.rczn.system.mapper;
-
-import com.rczn.system.domain.SysDicType;
-import org.apache.ibatis.annotations.Mapper;
-import java.util.List;
-
-@Mapper
-public interface SysDicTypeMapper {
-
- /**
- * 新增字典类型
- */
- int insert(SysDicType sysDicType);
-
- /**
- * 修改字典类型
- */
- int update(SysDicType sysDicType);
-
- /**
- * 逻辑删除字典类型
- */
- int deleteById(Long id);
-
- /**
- * 根据ID查询字典类型
- */
- SysDicType selectById(Long id);
-
- /**
- * 分页查询字典类型(参数可选)
- */
- List selectPage(SysDicType sysDicType);
-}
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/mapper/SysPermissionMapper.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/mapper/SysPermissionMapper.java
deleted file mode 100644
index 4b67f65..0000000
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/mapper/SysPermissionMapper.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.rczn.system.mapper;
-
-
-import com.rczn.system.domain.Permission;
-import com.rczn.system.domain.Role;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-@Mapper
-public interface SysPermissionMapper {
-
- /**
- * 分页查询角色(支持角色名/角色编码模糊查询)
- */
- List selectPermissionPage(
- @Param("parentId") Integer parentId,
- @Param("permissionName") String permissionName);
-
- /**
- * 查询总条数(支持模糊查询条件)
- */
- Long selectTotal(
- @Param("parentId") Integer parentId,
- @Param("permissionName") String permissionName);
-
- /**
- * 查询所有权限(未删除)
- */
- List selectPermissionList();
-
- /**
- * 根据ID查询
- */
- Permission selectPermissionById(Integer id);
-
- /**
- * 新增
- */
- int insertPermission(Permission permission);
-
- /**
- * 修改
- */
- int updatePermission(Permission permission);
-
- /**
- * 逻辑删除
- */
- int deletePermissionById(Integer id);
-}
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/mapper/UserMapper.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/mapper/UserMapper.java
index bd19442..1287781 100644
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/mapper/UserMapper.java
+++ b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/mapper/UserMapper.java
@@ -1,11 +1,8 @@
package com.rczn.system.mapper;
-import com.rczn.system.domain.Permission;
import com.rczn.system.domain.User;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Select;
-
import java.util.List;
@Mapper
@@ -34,10 +31,4 @@ public interface UserMapper {
@Param("sex") Integer sex,
@Param("delSign") Boolean delSign
);
-
- @Select("SELECT * FROM sys_user WHERE user_name = #{userName}")
- User selectByUsername(String userName);
-
- //根据用户id,查询出对应的权限列表
- List findUserPermissions(Long userId);
}
\ No newline at end of file
diff --git a/rc_autoplc_backend/rczn-autoplc/src/main/java/com/rczn/rcznautoplc/service/ManageLogService.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/ManageLogService.java
similarity index 85%
rename from rc_autoplc_backend/rczn-autoplc/src/main/java/com/rczn/rcznautoplc/service/ManageLogService.java
rename to rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/ManageLogService.java
index 7302508..5dd7325 100644
--- a/rc_autoplc_backend/rczn-autoplc/src/main/java/com/rczn/rcznautoplc/service/ManageLogService.java
+++ b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/ManageLogService.java
@@ -1,7 +1,7 @@
-package com.rczn.rcznautoplc.service;
+package com.rczn.system.service;
import com.rczn.domain.PageBean;
-import com.rczn.rcznautoplc.domain.ManageLog;
+import com.rczn.system.domain.ManageLog;
public interface ManageLogService {
// 新增日志
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/RolePermissionService.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/RolePermissionService.java
deleted file mode 100644
index 6c175d6..0000000
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/RolePermissionService.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.rczn.system.service;
-
-import com.rczn.system.domain.RolePermission;
-import java.util.List;
-
-public interface RolePermissionService {
-
- List selectListByRoleId(Integer roleId);
-
- void insert(RolePermission rolePermission);
-
- boolean delete(Integer roleId, Integer permissionId);
-
- void deleteByRoleId(Integer roleId);
-}
\ No newline at end of file
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/SysDicDataService.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/SysDicDataService.java
deleted file mode 100644
index a590771..0000000
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/SysDicDataService.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.rczn.system.service;
-
-import com.github.pagehelper.PageInfo;
-import com.rczn.system.domain.SysDicData;
-
-import java.util.List;
-
-public interface SysDicDataService {
-
- /**
- * 分页查询字典数据
- */
- PageInfo selectPage(Integer pageNum, Integer pageSize, Integer dicId, String dicLabel, String dicValue);
-
- /**
- * 查询字典数据列表
- */
- List selectList(Integer dicId, String dicLabel, String dicValue);
-
- /**
- * 根据ID查询字典数据
- */
- SysDicData selectById(Long id);
-
- /**
- * 根据字典类型ID查询字典数据列表
- */
- List selectByDicId(Integer dicId);
-
- /**
- * 新增字典数据
- */
- Long insert(SysDicData sysDicData);
-
- /**
- * 修改字典数据
- */
- Boolean update(SysDicData sysDicData);
-
- /**
- * 逻辑删除字典数据
- */
- Boolean deleteById(Long id);
-}
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/SysDicTypeService.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/SysDicTypeService.java
deleted file mode 100644
index c04b731..0000000
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/SysDicTypeService.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.rczn.system.service;
-
-
-import com.github.pagehelper.PageInfo;
-import com.rczn.system.domain.SysDicType;
-
-import java.util.List;
-
-public interface SysDicTypeService {
-
- /**
- * 分页查询字典类型
- */
- PageInfo selectPage(Integer pageNum, Integer pageSize, String dicName, String dicCode);
-
- /**
- * 查询字典类型列表
- */
- List selectList( String dicName, String dicCode);
-
- /**
- * 根据ID查询字典类型
- */
- SysDicType selectById(Long id);
-
- /**
- * 新增字典类型
- */
- Long insert(SysDicType sysDicType);
-
- /**
- * 修改字典类型
- */
- Boolean update(SysDicType sysDicType);
-
- /**
- * 逻辑删除字典类型
- */
- Boolean deleteById(Long id);
-}
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/SysPermissionService.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/SysPermissionService.java
deleted file mode 100644
index 8e5ee0a..0000000
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/SysPermissionService.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.rczn.system.service;
-
-import com.rczn.domain.PageBean;
-import com.rczn.system.domain.Permission;
-import com.rczn.system.domain.Role;
-
-import java.util.List;
-
-public interface SysPermissionService {
- List getPermissionList();
- //根据父ID查询权限列表:
- List getPermissionListByParentId(Integer parentId);
- Permission getPermissionById(Integer id);
- boolean addPermission(Permission permission);
- boolean updatePermission(Permission permission);
- boolean deletePermission(Integer id);
-
- /**
- * 1. 分页查询角色(多条件模糊查询)
- * @param pageNum
- * @param pageSize
- * @param permissionName
- * @return
- */
- PageBean selectRolePage(Integer pageNum, Integer pageSize,Integer parentId, String permissionName);
-}
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/UserRoleService.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/UserRoleService.java
index f3897ad..72a1875 100644
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/UserRoleService.java
+++ b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/UserRoleService.java
@@ -11,13 +11,6 @@ public interface UserRoleService {
Boolean deleteByRoleId(Integer roleId);
UserRole selectById(Long id);
List selectByUserId(Integer userId);
-
-/**
- * Selects user roles by the given role ID
- *
- * @param roleId The ID of the role to search for
- * @return List of UserRole objects associated with the given role ID
- */
List selectByRoleId(Integer roleId);
PageBean selectPage(Integer pageNum, Integer pageSize, Integer userId, Integer roleId);
}
\ No newline at end of file
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/UserService.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/UserService.java
index 8a73a04..4493171 100644
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/UserService.java
+++ b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/UserService.java
@@ -1,7 +1,6 @@
package com.rczn.system.service;
import com.rczn.domain.PageBean;
-import com.rczn.system.domain.Permission;
import com.rczn.system.domain.User;
import java.util.List;
@@ -54,25 +53,4 @@ public interface UserService {
* @return 是否删除成功(true/false)
*/
Boolean deleteById(Long id);
-
- /**
- * 6. 根据用户名查询用户
- * @param username 用户名
- * @return 用户实体
- */
- User findeUserByUsername(String username);
-
- /**
- * 7. 注册用户
- * @param username 用户名
- * @param password 密码
- */
- int register(String username, String password);
-
- /**
- * 根据用户id查询出关联的用户权限对象列表,
- * 表直接的关系是:
- * 用户表(user)--用户权限表(user_role)--权限表(role)-- 权限资源表(role_resource)--资源表(resource)
- */
- List findUserPermissions(Long userId);
}
\ No newline at end of file
diff --git a/rc_autoplc_backend/rczn-autoplc/src/main/java/com/rczn/rcznautoplc/service/impl/ManageLogServiceImpl.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/impl/ManageLogServiceImpl.java
similarity index 93%
rename from rc_autoplc_backend/rczn-autoplc/src/main/java/com/rczn/rcznautoplc/service/impl/ManageLogServiceImpl.java
rename to rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/impl/ManageLogServiceImpl.java
index da73bba..c723e76 100644
--- a/rc_autoplc_backend/rczn-autoplc/src/main/java/com/rczn/rcznautoplc/service/impl/ManageLogServiceImpl.java
+++ b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/impl/ManageLogServiceImpl.java
@@ -1,11 +1,12 @@
-package com.rczn.rcznautoplc.service.impl;
+package com.rczn.system.service.impl;
import com.github.pagehelper.Page;
-import com.github.pagehelper.PageHelper;
import com.rczn.domain.PageBean;
-import com.rczn.rcznautoplc.domain.ManageLog;
-import com.rczn.rcznautoplc.mapper.ManageLogMapper;
-import com.rczn.rcznautoplc.service.ManageLogService;
+import com.rczn.system.domain.ManageLog;
+import com.github.pagehelper.PageHelper;
+import com.rczn.system.domain.Position;
+import com.rczn.system.mapper.ManageLogMapper;
+import com.rczn.system.service.ManageLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/impl/RolePermissionServiceImpl.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/impl/RolePermissionServiceImpl.java
deleted file mode 100644
index 5a1fb45..0000000
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/impl/RolePermissionServiceImpl.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.rczn.system.service.impl;
-
-import com.rczn.system.domain.RolePermission;
-import com.rczn.system.mapper.RolePermissionMapper;
-import com.rczn.system.service.RolePermissionService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.time.LocalDateTime;
-import java.util.List;
-
-@Service
-public class RolePermissionServiceImpl implements RolePermissionService {
-
- @Autowired
- RolePermissionMapper rolePermissionMapper;
-
- @Override
- public List selectListByRoleId(Integer roleId) {
- return rolePermissionMapper.selectListByRoleId(roleId);
- }
-
- @Override
- @Transactional
- public void insert(RolePermission rolePermission) {
- rolePermission.setCreateTime(LocalDateTime.now());
- rolePermissionMapper.insert(rolePermission);
- }
-
- @Override
- @Transactional
- public boolean delete(Integer roleId, Integer permissionId) {
- return rolePermissionMapper.delete(roleId, permissionId) > 0;
- }
-
- @Override
- @Transactional
- public void deleteByRoleId(Integer roleId) {
- rolePermissionMapper.deleteByRoleId(roleId);
- }
-}
\ No newline at end of file
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/impl/SysDicDataServiceImpl.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/impl/SysDicDataServiceImpl.java
deleted file mode 100644
index ff69849..0000000
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/impl/SysDicDataServiceImpl.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package com.rczn.system.service.impl;
-
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-import com.rczn.system.domain.SysDicData;
-import com.rczn.system.mapper.SysDicDataMapper;
-import com.rczn.system.service.SysDicDataService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import java.util.List;
-
-@Service
-public class SysDicDataServiceImpl implements SysDicDataService {
-
- @Autowired
- private SysDicDataMapper sysDicDataMapper;
-
- @Override
- public PageInfo selectPage(Integer pageNum, Integer pageSize, Integer dicId, String dicLabel, String dicValue) {
- PageHelper.startPage(pageNum, pageSize);
- SysDicData query = new SysDicData();
- query.setDicId(dicId);
- query.setDicLabel(dicLabel);
- query.setDicValue(dicValue);
- return new PageInfo<>(sysDicDataMapper.selectPage(query));
- }
-
- /**
- * 查询字典数据列表
- *
- * @param dicId
- * @param dicLabel
- * @param dicValue
- */
- @Override
- public List selectList(Integer dicId, String dicLabel, String dicValue) {
- SysDicData query = new SysDicData();
- query.setDicId(dicId);
- query.setDicLabel(dicLabel);
- query.setDicValue(dicValue);
- return sysDicDataMapper.selectPage(query);
- }
-
- @Override
- public SysDicData selectById(Long id) {
- return sysDicDataMapper.selectById(id);
- }
-
- @Override
- public List selectByDicId(Integer dicId) {
- if (dicId == null) {
- throw new IllegalArgumentException("字典类型ID不能为空");
- }
- return sysDicDataMapper.selectByDicId(dicId);
- }
-
- @Override
- public Long insert(SysDicData sysDicData) {
- // 校验必填项
- if (sysDicData.getDicId() == null) {
- throw new IllegalArgumentException("字典类型ID不能为空");
- }
- if (sysDicData.getDicLabel() == null || sysDicData.getDicLabel().trim().isEmpty()) {
- throw new IllegalArgumentException("数据标签不能为空");
- }
- int count = sysDicDataMapper.insert(sysDicData);
- return count > 0 ? sysDicData.getId() : null;
- }
-
- @Override
- public Boolean update(SysDicData sysDicData) {
- if (sysDicData.getId() == null) {
- throw new IllegalArgumentException("字典数据ID不能为空");
- }
- // 校验是否存在
- SysDicData exist = sysDicDataMapper.selectById(sysDicData.getId());
- if (exist == null) {
- return false;
- }
- int count = sysDicDataMapper.update(sysDicData);
- return count > 0;
- }
-
- @Override
- public Boolean deleteById(Long id) {
- if (id == null) {
- throw new IllegalArgumentException("字典数据ID不能为空");
- }
- // 校验是否存在
- SysDicData exist = sysDicDataMapper.selectById(id);
- if (exist == null) {
- return false;
- }
- int count = sysDicDataMapper.deleteById(id);
- return count > 0;
- }
-}
\ No newline at end of file
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/impl/SysDicTypeServiceImpl.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/impl/SysDicTypeServiceImpl.java
deleted file mode 100644
index f9b6625..0000000
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/impl/SysDicTypeServiceImpl.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package com.rczn.system.service.impl;
-
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-import com.rczn.system.domain.SysDicType;
-import com.rczn.system.mapper.SysDicTypeMapper;
-import com.rczn.system.service.SysDicTypeService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-@Service
-public class SysDicTypeServiceImpl implements SysDicTypeService {
-
- @Autowired
- private SysDicTypeMapper sysDicTypeMapper;
-
- @Override
- public PageInfo selectPage(Integer pageNum, Integer pageSize, String dicName, String dicCode) {
- PageHelper.startPage(pageNum, pageSize);
- SysDicType query = new SysDicType();
- query.setDicName(dicName);
- query.setDicCode(dicCode);
- return new PageInfo<>(sysDicTypeMapper.selectPage(query));
- }
-
- /**
- * 查询字典类型列表
- *
- * @param dicName
- * @param dicCode
- */
- @Override
- public List selectList(String dicName, String dicCode) {
- SysDicType query = new SysDicType();
- query.setDicName(dicName);
- query.setDicCode(dicCode);
- return sysDicTypeMapper.selectPage(query);
- }
-
- @Override
- public SysDicType selectById(Long id) {
- return sysDicTypeMapper.selectById(id);
- }
-
- @Override
- public Long insert(SysDicType sysDicType) {
- // 校验必填项
- if (sysDicType.getDicName() == null || sysDicType.getDicName().trim().isEmpty()) {
- throw new IllegalArgumentException("字典名称不能为空");
- }
- int count = sysDicTypeMapper.insert(sysDicType);
- return count > 0 ? sysDicType.getId() : null;
- }
-
- @Override
- public Boolean update(SysDicType sysDicType) {
- if (sysDicType.getId() == null) {
- throw new IllegalArgumentException("字典类型ID不能为空");
- }
- // 校验是否存在
- SysDicType exist = sysDicTypeMapper.selectById(sysDicType.getId());
- if (exist == null) {
- return false;
- }
- int count = sysDicTypeMapper.update(sysDicType);
- return count > 0;
- }
-
- @Override
- public Boolean deleteById(Long id) {
- if (id == null) {
- throw new IllegalArgumentException("字典类型ID不能为空");
- }
- // 校验是否存在
- SysDicType exist = sysDicTypeMapper.selectById(id);
- if (exist == null) {
- return false;
- }
- int count = sysDicTypeMapper.deleteById(id);
- return count > 0;
- }
-}
\ No newline at end of file
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/impl/SysPermissionServiceImpl.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/impl/SysPermissionServiceImpl.java
deleted file mode 100644
index 22fa1a3..0000000
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/impl/SysPermissionServiceImpl.java
+++ /dev/null
@@ -1,140 +0,0 @@
-package com.rczn.system.service.impl;
-
-import com.github.pagehelper.PageHelper;
-import com.rczn.domain.PageBean;
-import com.rczn.system.domain.Permission;
-import com.rczn.system.domain.Role;
-import com.rczn.system.mapper.SysPermissionMapper;
-import com.rczn.system.service.SysPermissionService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
-@Service
-public class SysPermissionServiceImpl implements SysPermissionService {
-
- @Autowired
- private SysPermissionMapper sysPermissionMapper;
-
- @Override
- public Permission getPermissionById(Integer id) {
- return sysPermissionMapper.selectPermissionById(id);
- }
-
- @Override
- public boolean addPermission(Permission permission) {
- return sysPermissionMapper.insertPermission(permission) > 0;
- }
-
- @Override
- public boolean updatePermission(Permission permission) {
- return sysPermissionMapper.updatePermission(permission) > 0;
- }
-
- @Override
- public boolean deletePermission(Integer id) {
- return sysPermissionMapper.deletePermissionById(id) > 0;
- }
-
- /**
- * 1. 分页查询角色(多条件模糊查询)
- *
- * @param pageNum
- * @param pageSize
- * @param permissionName
- * @return
- */
- @Override
- public PageBean selectRolePage(Integer pageNum, Integer pageSize,Integer parentId, String permissionName) {
- // 1. PageHelper 设置分页参数
- PageHelper.startPage(pageNum, pageSize);
- //加一层过滤:
- if(parentId == 0){
- parentId = null;
- }
- // 2. 执行查询
- List permissionList = sysPermissionMapper.selectPermissionPage(parentId,permissionName);
- // 3. 查询总条数
- Long total = sysPermissionMapper.selectTotal(parentId,permissionName);
- // 4. 封装分页结果
- return new PageBean() {{
- setTotal(total);
- setItems(permissionList);
- }};
- }
-
- @Override
- public List getPermissionList() {
- // 1. 查询所有平级权限
- List allPermissions = sysPermissionMapper.selectPermissionList();
-
- // 2. 找到顶层节点(parentId = null 或 0)
- List topNodes = new ArrayList<>();
- for (Permission p : allPermissions) {
- if (p.getParentId() == null || p.getParentId() == 0) {
- topNodes.add(p);
- }
- }
-
- // 3. 循环给每个顶层节点设置子节点(递归)
- for (Permission node : topNodes) {
- node.setChildren(findChildren(node, allPermissions));
- }
-
- return topNodes;
- }
-
- /***
- * 根据父ID查询权限列表
- * @param parentId
- * @return
- */
- @Override
- public List getPermissionListByParentId(Integer parentId) {
- // 1. 查询所有平级权限
- List allPermissions = sysPermissionMapper.selectPermissionList();
-
- // 2. 找到顶层节点(parentId = null 或 0)
- List topNodes = new ArrayList<>();
- for (Permission p : allPermissions) {
- if(parentId == null || parentId == 0){
- if (p.getParentId() == null || p.getParentId() == 0) {
- topNodes.add(p);
- }
- }else {
- if (p.getParentId() == parentId) {
- topNodes.add(p);
- }
- }
-
- }
-
- // 3. 循环给每个顶层节点设置子节点(递归)
- for (Permission node : topNodes) {
- node.setChildren(findChildren(node, allPermissions));
- }
-
- return topNodes;
- }
-
- /**
- * 递归查找子节点(最稳妥、最清晰、不会漏)
- */
- private List findChildren(Permission parent, List allList) {
- List children = new ArrayList<>();
-
- for (Permission p : allList) {
- // 子节点的 parentId == 父节点 id
- if (parent.getId().equals(p.getParentId()==null?0:p.getParentId().longValue())) {
- children.add(p);
- // 递归给子节点设置孙子节点
- p.setChildren(findChildren(p, allList));
- }
- }
-
- return children;
- }
-}
\ No newline at end of file
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/impl/UserRoleServiceImpl.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/impl/UserRoleServiceImpl.java
index a56a513..2be0cf1 100644
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/impl/UserRoleServiceImpl.java
+++ b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/impl/UserRoleServiceImpl.java
@@ -3,7 +3,6 @@ package com.rczn.system.service.impl;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.rczn.domain.PageBean;
-import com.rczn.system.domain.Permission;
import com.rczn.system.domain.Position;
import com.rczn.system.domain.UserRole;
import com.rczn.system.mapper.UserRoleMapper;
diff --git a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/impl/UserServiceImpl.java b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/impl/UserServiceImpl.java
index 701d98a..40d89e7 100644
--- a/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/impl/UserServiceImpl.java
+++ b/rc_autoplc_backend/rczn-admin/src/main/java/com/rczn/system/service/impl/UserServiceImpl.java
@@ -3,7 +3,6 @@ package com.rczn.system.service.impl;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.rczn.domain.PageBean;
-import com.rczn.system.domain.Permission;
import com.rczn.system.domain.User;
import com.rczn.system.mapper.UserMapper;
import com.rczn.system.service.UserService;
@@ -91,41 +90,4 @@ public class UserServiceImpl implements UserService {
int rows = userMapper.deleteById(id,null);
return rows > 0;
}
-
- /**
- * 6. 根据用户名查询用户
- *
- * @param username 用户名
- * @return 用户实体
- */
- @Override
- public User findeUserByUsername(String username) {
- return userMapper.selectByUsername(username);
- }
-
- /**
- * 7. 注册用户
- *
- * @param username 用户名
- * @param password 密码
- */
- @Override
- public int register(String username, String password) {
- User user = new User();
- user.setUserName(username);
- user.setPassword(password);
- return userMapper.insert(user);
- }
-
- /**
- * 根据用户id查询出关联的用户权限对象列表,
- * 表直接的关系是:
- * 用户表(user)--用户权限表(user_role)--权限表(role)-- 权限资源表(role_resource)--资源表(resource)
- *
- * @param userId
- */
- @Override
- public List findUserPermissions(Long userId) {
- return userMapper.findUserPermissions(userId);
- }
}
\ No newline at end of file
diff --git a/rc_autoplc_backend/rczn-admin/src/main/resources/application.yml b/rc_autoplc_backend/rczn-admin/src/main/resources/application.yml
index 720422e..74a95d1 100644
--- a/rc_autoplc_backend/rczn-admin/src/main/resources/application.yml
+++ b/rc_autoplc_backend/rczn-admin/src/main/resources/application.yml
@@ -14,7 +14,7 @@ spring:
# 数据源配置(MySQL 8.x)
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://47.116.126.33:3306/rc_autoplc_program?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&allowMultiQueries=true
+ url: jdbc:mysql://47.116.126.33:3306/rc_autoplc_program?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: nianke
password: Jy@.niankeCrm2025
# 解决跨域(可选,配合之前的CorsConfig)
@@ -42,12 +42,11 @@ spring:
mybatis:
configuration:
map-underscore-to-camel-case: true # 下划线转驼峰
- log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 关键:SQL 打印到控制台
- log-prefix: "[MyBatis] " # 可选:日志前缀,便于区分 SQL 日志
- default-statement-timeout: 30 # 可选:SQL 执行超时时间(秒)
mapper-locations: classpath:mapper/**/*.xml # 补充:指定Mapper.xml文件路径(必加)
type-aliases-package: com.rczn.**.domain # 补充:实体类别名包(可选)
-
+ log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 关键:SQL 打印到控制台
+ log-prefix: "[MyBatis] " # 可选:日志前缀,便于区分 SQL 日志
+ default-statement-timeout: 30 # 可选:SQL 执行超时时间(秒)
# HikariCP 连接池配置(关键)
hikari:
@@ -67,22 +66,22 @@ pagehelper:
support-methods-arguments: true # 支持通过 Mapper 接口参数传递分页参数
params: count=countSql # 分页参数名映射
-#
-## SpringDoc OpenAPI 3 核心配置(适配Spring Boot 3.x)
-#springdoc:
-# packages-to-scan: com.rczn # 扫描的基础包(Controller所在包)
-# api-docs:
-# enabled: true # 启用/v3/api-docs接口
-# path: /v3/api-docs # OpenAPI JSON数据路径(默认)
-# swagger-ui:
-# path: /swagger-ui.html # 自定义Swagger UI访问路径(兼容Spring Boot 2.x习惯)
-# tags-sorter: alpha # 标签字母排序
-# operations-sorter: alpha # 接口字母排序
-# disable-swagger-default-url: true # 禁用默认PetStore示例
-# default-flat-param-object: false # 禁用扁平参数对象
-# paths-to-exclude: /error, /actuator/** # 排除错误接口/监控接口(可选)
-#
-## OpenAPI文档基础信息(中文正常显示)
+
+# SpringDoc OpenAPI 3 核心配置(适配Spring Boot 3.x)
+springdoc:
+ packages-to-scan: com.rczn # 扫描的基础包(Controller所在包)
+ api-docs:
+ enabled: true # 启用/v3/api-docs接口
+ path: /v3/api-docs # OpenAPI JSON数据路径(默认)
+ swagger-ui:
+ path: /swagger-ui.html # 自定义Swagger UI访问路径(兼容Spring Boot 2.x习惯)
+ tags-sorter: alpha # 标签字母排序
+ operations-sorter: alpha # 接口字母排序
+ disable-swagger-default-url: true # 禁用默认PetStore示例
+ default-flat-param-object: false # 禁用扁平参数对象
+ paths-to-exclude: /error, /actuator/** # 排除错误接口/监控接口(可选)
+
+# OpenAPI文档基础信息(中文正常显示)
openapi:
info:
title: XX自动化编程系统API文档
@@ -97,40 +96,6 @@ openapi:
- url: http://47.116.126.33:9090 # 测试环境地址
description: 测试环境
-
-# SpringDoc + Knife4j 核心配置
-springdoc:
- packages-to-scan: com.rczn # 扫描Controller所在包
- api-docs:
- enabled: true
- path: /v3/api-docs
- swagger-ui:
- tags-sorter: alpha
- operations-sorter: alpha
- paths-to-exclude: /error, /actuator/**
-
-# Knife4j增强配置(可选,开启中文UI)
-knife4j:
- enable: true
- setting:
- language: zh_cn # 中文界面
- enable-swagger-models: true # 显示模型
- enable-document-manage: false # 关闭文档管理(开发环境)
-
-# OpenAPI文档信息
-#openapi:
-# info:
-# title: XX自动化编程系统API文档
-# description: SpringBoot 3.x + Knife4j + OpenAPI 3 接口文档
-# version: 1.0.0
-# contact:
-# name: 研发组
-# email: xxx@xxx.com
-# servers:
-# - url: http://localhost:9090
-# description: 本地开发环境
-# - url: http://47.116.126.33:9090
-# description: 测试环境
# Spring Boot 日志核心配置
logging:
# 1. 全局日志级别(可细化到包/类)
diff --git a/rc_autoplc_backend/rczn-autoplc/src/main/resources/com/rczn/rcznautoplc/mapper/ManageLogMapper.xml b/rc_autoplc_backend/rczn-admin/src/main/resources/mapper/ManageLogMapper.xml
similarity index 96%
rename from rc_autoplc_backend/rczn-autoplc/src/main/resources/com/rczn/rcznautoplc/mapper/ManageLogMapper.xml
rename to rc_autoplc_backend/rczn-admin/src/main/resources/mapper/ManageLogMapper.xml
index fbfd66a..915b2e5 100644
--- a/rc_autoplc_backend/rczn-autoplc/src/main/resources/com/rczn/rcznautoplc/mapper/ManageLogMapper.xml
+++ b/rc_autoplc_backend/rczn-admin/src/main/resources/mapper/ManageLogMapper.xml
@@ -1,6 +1,6 @@
-
+
@@ -13,7 +13,7 @@
-
+
@@ -107,7 +107,7 @@
-
\ No newline at end of file
diff --git a/rc_autoplc_backend/rczn-admin/src/test/java/com/rczn/RcznAdminApplicationTests.java b/rc_autoplc_backend/rczn-admin/src/test/java/com/rczn/RcznAdminApplicationTests.java
deleted file mode 100644
index aadd54c..0000000
--- a/rc_autoplc_backend/rczn-admin/src/test/java/com/rczn/RcznAdminApplicationTests.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.rczn;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.test.context.SpringBootTest;
-
-@SpringBootTest
-class RcznAdminApplicationTests {
-
-// @Test
- void contextLoads() {
- }
-
-}
diff --git a/rc_autoplc_backend/rczn-autoplc/pom.xml b/rc_autoplc_backend/rczn-autoplc/pom.xml
index 8eb981a..0d84e78 100644
--- a/rc_autoplc_backend/rczn-autoplc/pom.xml
+++ b/rc_autoplc_backend/rczn-autoplc/pom.xml
@@ -38,7 +38,6 @@
org.projectlombok
lombok
- ${lombok.version}
true
@@ -47,7 +46,12 @@
5.3.3
compile
-
+
+ io.swagger.core.v3
+ swagger-annotations-jakarta
+ 2.2.21
+ compile
+
org.mybatis
mybatis
@@ -65,18 +69,14 @@
7.11.0
test
-
- io.swagger.core.v3
- swagger-models-jakarta
- 2.2.19
- compile
-
-
- org.junit.jupiter
- junit-jupiter-api
-
+
+ org.springdoc
+ springdoc-openapi-starter-common
+ 2.3.0
+ compile
+
-
+
- island_id, dev_name, dev_model,plc_addr, ip_addr, port, protocol_type, company, status,run_model, dev_desc
+ island_id, dev_name, dev_model, ip_addr, port, protocol_type, company, status, dev_desc
@@ -25,13 +25,11 @@
-
-
@@ -43,13 +41,11 @@
island_id,
dev_name,
dev_model,
- plc_addr,
ip_addr,
port,
protocol_type,
company,
status,
- run_model,
`dev_desc`,
create_id,
@@ -65,13 +61,11 @@
#{islandId},
#{devName},
#{devModel},
- #{plcAddr},
#{ipAddr},
#{port},
#{protocolType},
#{company},
#{status},
- #{runModel},
#{devDesc},
#{createId},
@@ -84,6 +78,7 @@
)
+
UPDATE tb_dev_info
@@ -99,13 +94,11 @@
island_id = #{islandId},
dev_name = #{devName},
dev_model = #{devModel},
- plc_addr = #{plcAddr},
ip_addr = #{ipAddr},
port = #{port},
protocol_type = #{protocolType},
company = #{company},
status = #{status},
- #{runModel},
`dev_desc` = #{devDesc},
@@ -120,7 +113,6 @@
AND dev_model LIKE CONCAT('%', #{devModel}, '%')
-
- and plc_addr = #{plcAddr}
-
AND ip_addr = #{ipAddr}
@@ -173,9 +162,6 @@
AND status = #{status}
-
- and run_model = #{runModel}
-
AND protocol_type = #{protocolType}
@@ -197,18 +183,12 @@
AND dev_model LIKE CONCAT('%', #{devModel}, '%')
-
- and plc_addr = #{plcAddr}
-
AND ip_addr = #{ipAddr}
AND status = #{status}
-
- AND run_model = #{runModel}
-
AND protocol_type = #{protocolType}
@@ -223,44 +203,4 @@
WHERE del_sign = 0
ORDER BY id ASC
-
-
-
- SELECT
- ,
-
- FROM tb_dev_info
- WHERE del_sign = 0
-
-
- AND dev_name LIKE CONCAT('%', #{devName}, '%')
-
-
-
- AND island_id = #{islandId}
-
-
-
- AND dev_model LIKE CONCAT('%', #{devModel}, '%')
-
-
- and plc_addr = #{plcAddr}
-
-
-
- AND ip_addr = #{ipAddr}
-
-
-
- AND status = #{status}
-
-
- and run_model = #{runModel}
-
-
-
- AND protocol_type = #{protocolType}
-
- ORDER BY update_time DESC
-
\ No newline at end of file
diff --git a/rc_autoplc_backend/rczn-autoplc/src/main/resources/com/rczn/rcznautoplc/mapper/DevParamMapper.xml b/rc_autoplc_backend/rczn-autoplc/src/main/resources/com/rczn/rcznautoplc/mapper/DevParamMapper.xml
index b0b33a3..8a5c76d 100644
--- a/rc_autoplc_backend/rczn-autoplc/src/main/resources/com/rczn/rcznautoplc/mapper/DevParamMapper.xml
+++ b/rc_autoplc_backend/rczn-autoplc/src/main/resources/com/rczn/rcznautoplc/mapper/DevParamMapper.xml
@@ -8,56 +8,45 @@
- dev_ids, param_name, plc_addr, dic_data_id, param_value, param_type, param_unit, form_type, param_desc
+ dev_id, param_name, param_value,param_type,param_unit,form_type, param_desc
-
+
INSERT INTO tb_dev_param (
-
- dev_ids,
- plc_addr,
- dic_data_id,
- param_name,
- param_value,
- param_type,
- param_unit,
- form_type,
- param_desc,
- create_id,
- update_id,
- create_time,
- update_time,
- del_sign
-
- )
- VALUES (
-
- #{devIds},
- #{plcAddr},
- #{dicDataId},
- #{paramName},
- #{paramValue},
- #{paramType},
- #{paramUnit},
- #{formType},
- #{paramDesc},
- #{createId},
- #{updateId},
- NOW(),
- NOW(),
- 0
-
+
+ dev_id,
+ param_name,
+ param_value,
+ param_type,
+ param_unit,
+ form_type,
+ param_desc,
+ create_id,
+ update_id,
+ create_time, update_time, del_sign
+
+ ) VALUES (
+
+ #{devId},
+ #{paramName},
+ #{paramValue},
+ #{paramType},
+ #{paramUnit},
+ #{formType},
+ #{paramDesc},
+ #{createId},
+ #{updateId},
+ NOW(), NOW(), 0
+
)
-
+
UPDATE tb_dev_param
- dev_ids = #{devIds},
- plc_addr = #{plcAddr},
- dic_data_id = #{dicDataId},
+ dev_id = #{devId},
param_name = #{paramName},
param_value = #{paramValue},
param_type = #{paramType},
@@ -65,21 +54,19 @@
form_type = #{formType},
param_desc = #{paramDesc},
update_id = #{updateId},
- remark = #{remark},
update_time = NOW()
WHERE id = #{id} AND del_sign = 0
-
+
UPDATE tb_dev_param
SET del_sign = 1, update_time = NOW()
WHERE id = #{id} AND del_sign = 0
- AND 1=2
-
+
SELECT
,
@@ -88,39 +75,16 @@
WHERE id = #{id} AND del_sign = 0
-
+
SELECT
,
FROM tb_dev_param
WHERE del_sign = 0
-
- AND dev_ids LIKE CONCAT('%;', #{devId}, ';%')
-
-
- AND dic_data_id in (SELECT id FROM sys_dic_data WHERE dic_value LIKE CONCAT('%', #{paramTypeData}, '%'))
+ AND dev_id = #{devId}
AND param_name LIKE CONCAT('%', #{paramName}, '%')
AND param_value LIKE CONCAT('%', #{paramValue}, '%')
ORDER BY create_time DESC
-
-
-
- UPDATE tb_dev_param
- SET dev_ids = CASE
- WHEN dev_ids IS NULL OR dev_ids = '' THEN CONCAT(#{devId}, ';')
- ELSE CONCAT(dev_ids, #{devId}, ';')
- END
- WHERE id = #{paramId}
- AND 1=2
-
-
-
-
- UPDATE tb_dev_param
- SET dev_ids = REPLACE(dev_ids, CONCAT(#{devId}, ';'), '')
- WHERE id = #{paramId}
- AND 1=2
-
\ No newline at end of file
diff --git a/rc_autoplc_backend/rczn-autoplc/src/main/resources/com/rczn/rcznautoplc/mapper/GoodsFlowStatusMapper.xml b/rc_autoplc_backend/rczn-autoplc/src/main/resources/com/rczn/rcznautoplc/mapper/GoodsFlowStatusMapper.xml
index 04873f4..707f6ef 100644
--- a/rc_autoplc_backend/rczn-autoplc/src/main/resources/com/rczn/rcznautoplc/mapper/GoodsFlowStatusMapper.xml
+++ b/rc_autoplc_backend/rczn-autoplc/src/main/resources/com/rczn/rcznautoplc/mapper/GoodsFlowStatusMapper.xml
@@ -6,7 +6,7 @@
- goods_id, flow_id, island_id,dev_id, flow_sort, status
+ goods_id, flow_id, island_id, flow_sort, status
@@ -14,7 +14,7 @@
,
create_id, create_time, update_id, update_time, del_sign
) VALUES (
- #{goodsId}, #{flowId}, #{islandId},#{devId}, #{flowSort}, #{status},
+ #{goodsId}, #{flowId}, #{islandId}, #{flowSort}, #{status},
#{createId}, NOW(), #{updateId}, NOW(), 0
)
@@ -26,7 +26,6 @@
flow_id = #{flowId},
island_id = #{islandId},
flow_sort = #{flowSort},
- dev_id = #{devId},
status = #{status},
update_id = #{updateId},
update_time = NOW()
@@ -57,7 +56,6 @@
AND goods_id = #{goodsId}
AND flow_id = #{flowId}
AND island_id = #{islandId}
- AND dev_id = #{devId}
AND status = #{status}
ORDER BY flow_sort ASC
diff --git a/rc_autoplc_backend/rczn-autoplc/src/main/resources/com/rczn/rcznautoplc/mapper/GoodsInfoMapper.xml b/rc_autoplc_backend/rczn-autoplc/src/main/resources/com/rczn/rcznautoplc/mapper/GoodsInfoMapper.xml
index 4286eee..18eca1b 100644
--- a/rc_autoplc_backend/rczn-autoplc/src/main/resources/com/rczn/rcznautoplc/mapper/GoodsInfoMapper.xml
+++ b/rc_autoplc_backend/rczn-autoplc/src/main/resources/com/rczn/rcznautoplc/mapper/GoodsInfoMapper.xml
@@ -6,7 +6,7 @@
- goods_name, goods_type, income_time, good_from, good_batch,point_num ,goal_detect,bar_code,flow_id,goods_status, `desc`
+ goods_name, goods_type, income_time, good_from, good_batch, `desc`
@@ -14,7 +14,7 @@
,
create_id, create_time, update_id, update_time, del_sign
) VALUES (
- #{goodsName}, #{goodsType}, #{incomeTime}, #{goodFrom}, #{goodBatch},#{pointNum},#{goalDetect}, #{barCode}, #{flowId}, #{goodsStatus}, #{desc},
+ #{goodsName}, #{goodsType}, #{incomeTime}, #{goodFrom}, #{goodBatch}, #{desc},
#{createId}, NOW(), #{updateId}, NOW(), 0
)
@@ -27,11 +27,6 @@
income_time = #{incomeTime},
good_from = #{goodFrom},
good_batch = #{goodBatch},
- point_num = #{pointNum},
- goal_detect = #{goalDetect},
- bar_code = #{barCode},
- flow_id = #{flowId},
- goods_status = #{goodsStatus},
`desc` = #{desc},
update_id = #{updateId},
update_time = NOW()
@@ -53,20 +48,6 @@
WHERE id = #{id} AND del_sign = 0
-
-
- SELECT
- ,
-
- FROM tb_goods_info
- WHERE del_sign = 0
- AND id IN
-
- #{id}
-
- ORDER BY income_time DESC
-
-
SELECT
,
@@ -77,21 +58,6 @@
AND goods_type LIKE CONCAT('%', #{goodsType}, '%')
AND good_from LIKE CONCAT('%', #{goodFrom}, '%')
AND good_batch = #{goodBatch}
- AND point_num = #{pointNum}
- AND goal_detect = #{goalDetect}
- AND bar_code LIKE CONCAT('%', #{barCode}, '%')
- AND flow_id LIKE CONCAT('%', #{flowId}, '%')
- AND income_time = #{incomeTime}
- AND income_time >= #{startTime}
- AND income_time <= #{endTime}
- AND goods_status LIKE CONCAT('%', #{goodsStatus}, '%')
- ORDER BY income_time,point_num DESC
-
-
- SELECT
- ,
-
- FROM tb_goods_info
- WHERE bar_code = #{barCode} AND del_sign = 0
+ ORDER BY income_time DESC
\ No newline at end of file
diff --git a/rc_autoplc_backend/rczn-autoplc/src/main/resources/com/rczn/rcznautoplc/mapper/IslandInfoMapper.xml b/rc_autoplc_backend/rczn-autoplc/src/main/resources/com/rczn/rcznautoplc/mapper/IslandInfoMapper.xml
index c2059a3..851d869 100644
--- a/rc_autoplc_backend/rczn-autoplc/src/main/resources/com/rczn/rcznautoplc/mapper/IslandInfoMapper.xml
+++ b/rc_autoplc_backend/rczn-autoplc/src/main/resources/com/rczn/rcznautoplc/mapper/IslandInfoMapper.xml
@@ -6,7 +6,7 @@
- island_name, island_code, plc_addr, island_logo, `desc`
+ island_name, island_code, island_logo, `desc`
@@ -14,7 +14,7 @@
,
create_id, create_time, update_id, update_time, del_sign
) VALUES (
- #{islandName}, #{islandCode},#{plcAddr}, #{islandLogo}, #{desc},
+ #{islandName}, #{islandCode}, #{islandLogo}, #{desc},
#{createId}, NOW(), #{updateId}, NOW(), 0
)
@@ -24,7 +24,6 @@
island_name = #{islandName},
island_code = #{islandCode},
- plc_addr = #{plcAddr},
island_logo = #{islandLogo},
`desc` = #{desc},
update_id = #{updateId},
@@ -47,20 +46,6 @@
WHERE id = #{id} AND del_sign = 0
-
-
- SELECT
- ,
-
- FROM tb_island_info
- WHERE del_sign = 0
- AND island_name LIKE CONCAT('%', #{islandName}, '%')
- AND island_code LIKE CONCAT('%', #{islandCode}, '%')
- AND plc_addr = #{plcAddr}
- ORDER BY create_time DESC
-
-
-
SELECT
,
@@ -69,7 +54,6 @@
WHERE del_sign = 0
AND island_name LIKE CONCAT('%', #{islandName}, '%')
AND island_code LIKE CONCAT('%', #{islandCode}, '%')
- AND plc_addr = #{plcAddr}
ORDER BY create_time DESC
\ No newline at end of file
diff --git a/rc_autoplc_backend/rczn-autoplc/src/main/resources/com/rczn/rcznautoplc/mapper/StepInfoMapper.xml b/rc_autoplc_backend/rczn-autoplc/src/main/resources/com/rczn/rcznautoplc/mapper/StepInfoMapper.xml
index 6869197..5cf6fd9 100644
--- a/rc_autoplc_backend/rczn-autoplc/src/main/resources/com/rczn/rcznautoplc/mapper/StepInfoMapper.xml
+++ b/rc_autoplc_backend/rczn-autoplc/src/main/resources/com/rczn/rcznautoplc/mapper/StepInfoMapper.xml
@@ -6,7 +6,7 @@
- island_id,dev_id,step_order ,step_name, step_desc,flow_id,param_name,param_type,param_unit,param_value,form_type
+ island_id,dev_id, step_name, step_desc,flow_id,param_name,param_type,param_unit,param_value,form_type
@@ -21,7 +21,6 @@
island_id,
dev_id,
- step_order,
step_name,
step_desc,
flow_id,
@@ -44,7 +43,6 @@
#{islandId},
#{devId},
- #{stepOrder},
#{stepName},
#{stepDesc},
#{flowId},
@@ -59,178 +57,11 @@
)
-
-
- INSERT INTO tb_step_info (
-
- create_id,
- create_time,
- update_id,
- update_time,
- remark,
- del_sign,
- island_id,
- dev_id,
- step_order,
- step_name,
- step_desc,
- flow_id,
- param_name,
- param_type,
- param_unit,
- param_value,
- form_type
-
- ) VALUES
-
- (
-
- #{item.createId,jdbcType=BIGINT},
- NOW(),
- #{item.updateId,jdbcType=BIGINT},
- NOW(),
- #{item.remark},
- null,
- 0,
- #{item.islandId,jdbcType=INTEGER},
- null,
- #{item.devId,jdbcType=INTEGER},
- null,
- #{item.stepOrder,jdbcType=INTEGER},
- null,
- #{item.stepName},
- null,
- #{item.stepDesc},
- null,
- #{item.flowId,jdbcType=INTEGER},
- null,
- #{item.paramName},
- null,
- #{item.paramType},
- null,
- #{item.paramUnit},
- null,
- #{item.paramValue},
- null,
- #{item.formType},
- null,
-
- )
-
-
-
-
-
- UPDATE tb_step_info
-
- update_id = #{item.updateId,jdbcType=BIGINT},
- remark = #{item.remark},
-
- island_id = #{item.islandId,jdbcType=INTEGER},
- dev_id = #{item.devId,jdbcType=INTEGER},
- step_order = #{item.stepOrder,jdbcType=INTEGER},
- step_name = #{item.stepName},
- step_desc = #{item.stepDesc},
- flow_id = #{item.flowId,jdbcType=INTEGER},
- param_name = #{item.paramName},
- param_type = #{item.paramType},
- param_unit = #{item.paramUnit},
- param_value = #{item.paramValue},
- form_type = #{item.formType},
-
- update_time = NOW()
-
- WHERE id = #{item.id,jdbcType=BIGINT}
- AND del_sign = 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
UPDATE tb_step_info
island_id = #{islandId},
dev_id = #{devId},
- step_order = #{stepOrder},
step_name = #{stepName},
step_desc = #{stepDesc},
update_id = #{updateId},
@@ -252,19 +83,6 @@
WHERE id = #{id} AND del_sign = 0
-
-
- UPDATE tb_step_info
- SET del_sign = 1, update_time = NOW()
- WHERE id in
-
- #{id}
-
- AND del_sign = 0
-
-
-
-
SELECT
,
@@ -273,39 +91,6 @@
WHERE id = #{id} AND del_sign = 0
-
-
- SELECT
- ,
-
- FROM tb_step_info
- WHERE del_sign = 0
-
-
- AND island_id = #{islandId}
-
-
- AND dev_id = #{devId}
-
-
- AND flow_id = #{flowId}
-
-
- AND step_name LIKE CONCAT('%', #{stepName}, '%')
-
-
- AND param_name LIKE CONCAT('%', #{paramName}, '%')
-
-
- AND form_type = #{formType}
-
-
- AND step_order = #{stepOrder}
-
-
- ORDER BY step_order ASC, create_time DESC
-
-
SELECT
,
diff --git a/rc_autoplc_backend/rczn-autoplc/src/test/java/com/rczn/rcznautoplc/RcznAutoplcApplicationTests.java b/rc_autoplc_backend/rczn-autoplc/src/test/java/com/rczn/rcznautoplc/RcznAutoplcApplicationTests.java
deleted file mode 100644
index d230135..0000000
--- a/rc_autoplc_backend/rczn-autoplc/src/test/java/com/rczn/rcznautoplc/RcznAutoplcApplicationTests.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.rczn.rcznautoplc;
-
-import org.testng.annotations.Test;
-import org.springframework.boot.test.context.SpringBootTest;
-
-@SpringBootTest
-class RcznAutoplcApplicationTests {
-
-// @Test
- void contextLoads() {
- }
-
-}
diff --git a/rc_autoplc_backend/rczn-common/pom.xml b/rc_autoplc_backend/rczn-common/pom.xml
index 2fa8c62..24d1e26 100644
--- a/rc_autoplc_backend/rczn-common/pom.xml
+++ b/rc_autoplc_backend/rczn-common/pom.xml
@@ -14,47 +14,6 @@
rczn-common(公共模块:实体类、工具类、统一响应)
jar
-
-
-
-
- false
-
-
- true
-
- ias-snapshots
- Infinite Automation Snapshot Repository
- https://maven.mangoautomation.net/repository/ias-snapshot/
-
-
-
- true
-
-
- false
-
- ias-releases
- Infinite Automation Release Repository
- https://maven.mangoautomation.net/repository/ias-release/
-
-
-
- spring-milestones
- Spring Milestones
- https://repo.spring.io/milestone
-
- false
-
-
-
- spring-releases
- Spring Releases
- https://repo.spring.io/release
-
-
-
-
@@ -85,6 +44,11 @@
commons-lang3
+
+ com.auth0
+ java-jwt
+ ${jwt.version}
+
org.springframework
@@ -92,41 +56,13 @@
provided
-
- com.github.xiaoymin
- knife4j-openapi3-jakarta-spring-boot-starter
-
-
-
-
-
-
-
jakarta.servlet
jakarta.servlet-api
provided
-
-
- com.github.s7connector
- s7connector
- 2.1
-
-
-
- com.infiniteautomation
- modbus4j
- 3.0.3
-
-
-
- org.apache.commons
- commons-pool2
- 2.12.0
-
org.springframework
@@ -134,9 +70,8 @@
provided
- com.auth0
- java-jwt
- ${jwt.version}
+ org.springframework
+ spring-webmvc
org.testng
@@ -154,12 +89,6 @@
junit-jupiter-api
test
-
-
-
- org.springframework.boot
- spring-boot-starter-websocket
-
diff --git a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/ModbusCmdConst.java b/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/ModbusCmdConst.java
deleted file mode 100644
index f27034e..0000000
--- a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/ModbusCmdConst.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.rczn;
-
-/**
- * modbus 指令常量enum
- */
-public class ModbusCmdConst {
- //下面是指令值:
- //就绪
- public static final int plc_ready = 10;
- //运行
- public static final int plc_run = 11;
- //暂停
- public static final int plc_pause = 12;
- //停止
- public static final int plc_stop = 10;
- //故障复位
- public static final int plc_reset_error = 20;
- //修改模式
- public static final int plc_set_model = 0;
- //参数读取:
- public static final int plc_read_param = 18;
- //
-}
diff --git a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/config/AsyncThreadPoolConfig.java b/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/config/AsyncThreadPoolConfig.java
deleted file mode 100644
index 870604d..0000000
--- a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/config/AsyncThreadPoolConfig.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.rczn.config;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.scheduling.annotation.EnableAsync;
-import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
-
-import java.util.concurrent.Executor;
-import java.util.concurrent.ThreadPoolExecutor;
-
-/**
- * 异步线程池配置(用于PLC数据读取的异步执行)
- */
-@Configuration
-@EnableAsync //开启异步任务
-public class AsyncThreadPoolConfig {
-
- /**
- * 定义PLC专用线程池
- */
- @Bean(name = "plcAsyncExecutor")
- public Executor plcAsyncExecutor(){
- ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
- // 核心线程数(根据业务调整)
- executor.setCorePoolSize(5);
- // 最大线程数
- executor.setMaxPoolSize(10);
- // 队列容量
- executor.setQueueCapacity(20);
- // 线程名前缀(便于日志排查)
- executor.setThreadNamePrefix("PLC-Async-");
- // 线程空闲超时时间
- executor.setKeepAliveSeconds(60);
- // 拒绝策略:队列满时由调用线程处理(避免任务丢失)
- executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
- // 初始化线程池
- executor.initialize();
- return executor;
- }
-}
diff --git a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/config/WebSocketConfig.java b/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/config/WebSocketConfig.java
deleted file mode 100644
index abeba08..0000000
--- a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/config/WebSocketConfig.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.rczn.config;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.socket.server.standard.ServerEndpointExporter;
-
-@Configuration
-public class WebSocketConfig {
-
- @Bean
- public ServerEndpointExporter serverEndpointExporter(){
- return new ServerEndpointExporter();
- }
-}
diff --git a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/domain/BaseBean.java b/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/domain/BaseBean.java
index e61368e..426d769 100644
--- a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/domain/BaseBean.java
+++ b/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/domain/BaseBean.java
@@ -1,7 +1,5 @@
package com.rczn.domain;
-import org.springframework.format.annotation.DateTimeFormat;
-
import java.time.LocalDateTime;
public class BaseBean {
@@ -17,7 +15,6 @@ public class BaseBean {
private String remark;
private LocalDateTime startTime;
-
private LocalDateTime endTime;
// 无参构造器、全参构造器(同步修改 delSign 类型)
diff --git a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/exception/GlobalException.java b/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/exception/GlobalException.java
deleted file mode 100644
index 15f9a19..0000000
--- a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/exception/GlobalException.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.rczn.exception;
-
-import com.rczn.domain.Result;
-import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.ExceptionHandler;
-import org.springframework.web.bind.annotation.RestControllerAdvice;
-
-@RestControllerAdvice
-public class GlobalException {
-
- @ExceptionHandler(Exception.class)
- public Result handleException(Exception e){
- e.printStackTrace();
- return Result.error(StringUtils.hasLength(e.getMessage())? e.getMessage() : "系统异常");
- }
-}
diff --git a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/interceptors/LoginInterceptor.java b/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/interceptors/LoginInterceptor.java
index dfb74f7..ba90298 100644
--- a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/interceptors/LoginInterceptor.java
+++ b/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/interceptors/LoginInterceptor.java
@@ -9,29 +9,13 @@ import org.springframework.web.servlet.HandlerInterceptor;
import java.util.Map;
-@Component
+//@Component
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
- // 1. 放行OPTIONS预检请求,直接返回200 OK,不做任何校验
- if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
- response.setStatus(HttpServletResponse.SC_OK);
- // 手动添加跨域响应头(兜底)
- response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
- response.setHeader("Access-Control-Allow-Credentials", "true");
- response.setHeader("Access-Control-Allow-Methods", "GET,POST,PATCH,PUT,DELETE,OPTIONS");
- response.setHeader("Access-Control-Allow-Headers", "*");
- response.setHeader("Access-Control-Max-Age", "3600");
- return true; // 直接放行,不执行后续拦截逻辑
- }
-
try {
String token = request.getHeader("Authorization");
- String[] tokens = token.split(" ");
- if(tokens.length>1){
- token = tokens[1];
- }
Map claims = JwtUtil.parseToken(token);
//保存用户数据到ThreadLocalUtil
ThreadLocalUtil.set(claims);
diff --git a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/modbus/Modbus4jUtils.java b/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/modbus/Modbus4jUtils.java
deleted file mode 100644
index 8af87df..0000000
--- a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/modbus/Modbus4jUtils.java
+++ /dev/null
@@ -1,380 +0,0 @@
-package com.rczn.modbus;
-
-import com.serotonin.modbus4j.BatchRead;
-import com.serotonin.modbus4j.BatchResults;
-import com.serotonin.modbus4j.ModbusFactory;
-import com.serotonin.modbus4j.ModbusMaster;
-import com.serotonin.modbus4j.code.DataType;
-import com.serotonin.modbus4j.exception.ErrorResponseException;
-import com.serotonin.modbus4j.exception.ModbusInitException;
-import com.serotonin.modbus4j.exception.ModbusTransportException;
-import com.serotonin.modbus4j.ip.IpParameters;
-import com.serotonin.modbus4j.locator.BaseLocator;
-import com.serotonin.modbus4j.msg.ReadInputRegistersResponse;
-
-import java.util.Map;
-
-/**
- * modbus通讯工具类,采用modbus4j实现
- *
- * @author lxq
- * @dependencies modbus4j-3.0.3.jar
- * @website https://github.com/infiniteautomation/modbus4j
- */
-public class Modbus4jUtils {
- /**
- * 工厂。
- */
- static ModbusFactory modbusFactory;
- static {
- if (modbusFactory == null) {
- modbusFactory = new ModbusFactory();
- }
- }
-
- /**
- * 获取master
- *
- * @return
- * @throws ModbusInitException
- */
- public static ModbusMaster getMaster() throws ModbusInitException {
- IpParameters params = new IpParameters();
- params.setHost("localhost");
- params.setPort(502);
-
- //
- // modbusFactory.createRtuMaster(params); //RTU 协议
- // modbusFactory.createUdpMaster(params);//UDP 协议
- // modbusFactory.createAsciiMaster(params);//ASCII 协议
-
- // 采用 Modbus RTU over TCP/IP,第二个参数为 true,即 modbusFactory.createTcpMaster(params, true)
- ModbusMaster master = modbusFactory.createTcpMaster(params, false);// TCP 协议
- master.setTimeout(3000);
- master.setRetries(1);
- master.init();
-
- return master;
- }
-
- /**
- * 获取master
- *
- * @return
- * @throws ModbusInitException
- */
- public static ModbusMaster getMaster(String ipAddr,Integer port) throws ModbusInitException {
- IpParameters params = new IpParameters();
-// params.setHost("localhost");
- params.setHost(ipAddr);
-// params.setPort(502);
- params.setPort(port);
- //
- // modbusFactory.createRtuMaster(params); //RTU 协议
- // modbusFactory.createUdpMaster(params);//UDP 协议
- // modbusFactory.createAsciiMaster(params);//ASCII 协议
-
- // 采用 Modbus RTU over TCP/IP,第二个参数为 true,即 modbusFactory.createTcpMaster(params, true)
- ModbusMaster master = modbusFactory.createTcpMaster(params, false);// TCP 协议
- master.setTimeout(3000);
- master.setRetries(1);
- master.init();
-
- return master;
- }
-
- /**
- * 获取和测试Master对象
- * @param ip
- * @param port
- * @return
- * @throws ModbusInitException
- */
- public static ModbusMaster getAndTestMaster(String ip, Integer port)
- throws ModbusInitException {
-
- ModbusMaster master = getMaster(ip, port);
-
- try {
- // 随便读一个确定存在的寄存器
- BaseLocator locator =
- BaseLocator.holdingRegister(1, 0, DataType.TWO_BYTE_INT_SIGNED);
-
- Number value = master.getValue(locator);// ⭐ 真正触发 TCP 连接
- System.out.println("value:"+value);
- } catch (Exception e) {
- master.destroy();
- throw new RuntimeException("PLC 连接失败:" + ip + ":" + port, e);
- }
-
- return master;
- }
-
- /**
- * 读取[01 Coil Status 0x]类型 开关数据
- *
- * @param slaveId
- * slaveId
- * @param offset
- * 位置
- * @return 读取值
- * @throws ModbusTransportException
- * 异常
- * @throws ErrorResponseException
- * 异常
- * @throws ModbusInitException
- * 异常
- */
- public static Boolean readCoilStatus(ModbusMaster modbusMaster,int slaveId, int offset)
- throws ModbusTransportException, ErrorResponseException, ModbusInitException {
- // 01 Coil Status
- BaseLocator loc = BaseLocator.coilStatus(slaveId, offset);
- Boolean value = modbusMaster.getValue(loc);
- return value;
- }
-
- /**
- * 读取[02 Input Status 1x]类型 开关数据
- *
- * @param slaveId
- * @param offset
- * @return
- * @throws ModbusTransportException
- * @throws ErrorResponseException
- * @throws ModbusInitException
- */
- public static Boolean readInputStatus(ModbusMaster modbusMaster,int slaveId, int offset)
- throws ModbusTransportException, ErrorResponseException, ModbusInitException {
- // 02 Input Status
- BaseLocator loc = BaseLocator.inputStatus(slaveId, offset);
- Boolean value = modbusMaster.getValue(loc);
- return value;
- }
-
- /**
- * 读取[03 Holding Register类型 2x]模拟量数据
- *
- * @param slaveId
- * slave Id
- * @param offset
- * 位置
- * @param dataType
- * 数据类型,来自com.serotonin.modbus4j.code.DataType
- * @return
- * @throws ModbusTransportException
- * 异常
- * @throws ErrorResponseException
- * 异常
- * @throws ModbusInitException
- * 异常
- */
- public static Number readHoldingRegister(ModbusMaster modbusMaster,int slaveId, int offset, int dataType)
- throws ModbusTransportException, ErrorResponseException, ModbusInitException {
- // 03 Holding Register类型数据读取
- BaseLocator loc = BaseLocator.holdingRegister(slaveId, offset, dataType);
- Number value = modbusMaster.getValue(loc);
- return value;
- }
-
- /**
- * 读取[04 Input Registers 3x]类型 模拟量数据
- *
- * @param modbusMaster
- * modbusMaster modbus连接对象
- * @param slaveId
- * slaveId 设备号
- * @param offset
- * 位置
- * @param dataType
- * 数据类型,来自com.serotonin.modbus4j.code.DataType
- * @return 返回结果
- * @throws ModbusTransportException
- * 异常
- * @throws ErrorResponseException
- * 异常
- * @throws ModbusInitException
- * 异常
- */
- public static Number readInputRegisters(ModbusMaster modbusMaster,int slaveId, int offset, int dataType)
- throws ModbusTransportException, ErrorResponseException, ModbusInitException {
- // 04 Input Registers类型数据读取
- BaseLocator loc = BaseLocator.inputRegister(slaveId, offset, dataType);
- Number value = modbusMaster.getValue(loc);
- return value;
- }
-
- /**
- * 批量读取使用方法
- *
- * @throws ModbusTransportException
- * @throws ErrorResponseException
- * @throws ModbusInitException
- */
- public static BatchResults batchRead(ModbusMaster modbusMaster,int slaveId, int offset, int dataType) throws ModbusTransportException, ErrorResponseException, ModbusInitException {
-
- BatchRead batch = new BatchRead();
-
- batch.addLocator(0, BaseLocator.holdingRegister(1, 1, DataType.FOUR_BYTE_FLOAT));
- batch.addLocator(1, BaseLocator.inputStatus(1, 0));
-
- batch.setContiguousRequests(false);
- BatchResults results = modbusMaster.send(batch);
- System.out.println(results.getValue(0));
- System.out.println(results.getValue(1));
- return results;
- }
-
- /**
- * 连续读取多个 Holding Register
- */
- public static Number[] readHoldingRegisters(
- ModbusMaster master,
- int slaveId,
- int startOffset,
- int count,
- int dataType)
- throws ModbusTransportException, ErrorResponseException {
-
- Number[] values = new Number[count];
-
- for (int i = 0; i < count; i++) {
- BaseLocator locator =
- BaseLocator.holdingRegister(slaveId, startOffset + i, dataType);
-
- values[i] = master.getValue(locator);
- }
-
- return values;
- }
-
- /**
- * 连续读取多个 Input Register
- */
- public static Number[] readInputRegistersBatch(
- ModbusMaster master,
- int slaveId,
- int startOffset,
- int count,
- int dataType)
- throws ModbusTransportException, ErrorResponseException {
-
- Number[] values = new Number[count];
-
- for (int i = 0; i < count; i++) {
- BaseLocator locator =
- BaseLocator.inputRegister(slaveId, startOffset + i, dataType);
-
- values[i] = master.getValue(locator);
- }
-
- return values;
- }
-
- /**
- * 批量读取多个 Holding Register(高性能)
- */
- public static BatchResults batchReadHoldingRegisters(
- ModbusMaster master,
- int slaveId,
- int[] offsets,
- int dataType)
- throws ModbusTransportException, ErrorResponseException {
-
- BatchRead batch = new BatchRead<>();
-
- for (int i = 0; i < offsets.length; i++) {
- batch.addLocator(i,
- BaseLocator.holdingRegister(slaveId, offsets[i], dataType));
- }
-
- batch.setContiguousRequests(true); // 连续优化
- return master.send(batch);
- }
-
- /**
- * 混合批量读取
- */
- public static BatchResults batchReadMixed(
- ModbusMaster master,
- int slaveId)
- throws ModbusTransportException, ErrorResponseException {
-
- BatchRead batch = new BatchRead<>();
-
- batch.addLocator(0,
- BaseLocator.holdingRegister(slaveId, 0, DataType.FOUR_BYTE_FLOAT));
-
- batch.addLocator(1,
- BaseLocator.holdingRegister(slaveId, 2, DataType.TWO_BYTE_INT_SIGNED));
-
- batch.addLocator(2,
- BaseLocator.coilStatus(slaveId, 0));
-
- batch.setContiguousRequests(false);
-
- return master.send(batch);
- }
-
-
- public static void close(ModbusMaster master) {
- if (master != null) {
- master.destroy();
- }
- }
-
- public static void main(String[] args) {
- try {
- ModbusMaster master = getMaster("192.178.111.123", 501);
-
- } catch (ModbusInitException e) {
- throw new RuntimeException(e);
- }
- }
- /**
- * 测试
- *
- * @param args
- */
- public static void main1(String[] args) {
- try {
- ModbusMaster modbusMaster = getMaster();
- // 01测试
-// Boolean v011 = readCoilStatus(modbusMaster,1, 0);
-// Boolean v012 = readCoilStatus(modbusMaster,1, 1);
-// Boolean v013 = readCoilStatus(modbusMaster,1, 6);
-// System.out.println("v011:" + v011);
-// System.out.println("v012:" + v012);
-// System.out.println("v013:" + v013);
-// // 02测试
-// Boolean v021 = readInputStatus(modbusMaster,1, 0);
-// Boolean v022 = readInputStatus(modbusMaster,1, 1);
-// Boolean v023 = readInputStatus(modbusMaster,1, 2);
-// System.out.println("v021:" + v021);
-// System.out.println("v022:" + v022);
-// System.out.println("v023:" + v023);
-//
-// // 03测试
-// Number v031 = readHoldingRegister(modbusMaster,1, 1, DataType.FOUR_BYTE_FLOAT);// 注意,float
-// Number v032 = readHoldingRegister(modbusMaster,1, 3, DataType.FOUR_BYTE_FLOAT);// 同上
-// System.out.println("v031:" + v031);
-// System.out.println("v032:" + v032);
-
- // 04测试
-// Number v041 = readInputRegisters(modbusMaster,1, 0, DataType.FOUR_BYTE_FLOAT);//
- Number v041 = readInputRegisters(modbusMaster,1, 0, DataType.FOUR_BYTE_INT_UNSIGNED);//
- Number v042 = readInputRegisters(modbusMaster,1, 2, DataType.FOUR_BYTE_FLOAT);//
- System.out.println("v041:" + v041);
- System.out.println("v042:" + v042);
-
- Number vff = readHoldingRegister(modbusMaster,1,0,DataType.TWO_BYTE_INT_SIGNED);
- System.out.println("vff:" + vff);
- Number vff2 = readHoldingRegister(modbusMaster,1,2,DataType.TWO_BYTE_INT_SIGNED);
- System.out.println("vff2:" + vff2);
- // 批量读取
-// batchRead();
-
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-}
diff --git a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/modbus/Modbus4jWriteUtils.java b/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/modbus/Modbus4jWriteUtils.java
deleted file mode 100644
index ff16e21..0000000
--- a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/modbus/Modbus4jWriteUtils.java
+++ /dev/null
@@ -1,247 +0,0 @@
-package com.rczn.modbus;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.serotonin.modbus4j.ModbusFactory;
-import com.serotonin.modbus4j.ModbusMaster;
-import com.serotonin.modbus4j.code.DataType;
-import com.serotonin.modbus4j.exception.ErrorResponseException;
-import com.serotonin.modbus4j.exception.ModbusInitException;
-import com.serotonin.modbus4j.exception.ModbusTransportException;
-import com.serotonin.modbus4j.ip.IpParameters;
-import com.serotonin.modbus4j.locator.BaseLocator;
-import com.serotonin.modbus4j.msg.ModbusResponse;
-import com.serotonin.modbus4j.msg.WriteCoilRequest;
-import com.serotonin.modbus4j.msg.WriteCoilResponse;
-import com.serotonin.modbus4j.msg.WriteCoilsRequest;
-import com.serotonin.modbus4j.msg.WriteCoilsResponse;
-import com.serotonin.modbus4j.msg.WriteRegisterRequest;
-import com.serotonin.modbus4j.msg.WriteRegisterResponse;
-import com.serotonin.modbus4j.msg.WriteRegistersRequest;
-
-/**
- * modbus4j写入数据
- *
- * @author xq
- *
- */
-public class Modbus4jWriteUtils {
- static Log log = LogFactory.getLog(Modbus4jWriteUtils.class);
- /**
- * 工厂。
- */
- static ModbusFactory modbusFactory;
- static {
- if (modbusFactory == null) {
- modbusFactory = new ModbusFactory();
- }
- }
-
- /**
- * 获取tcpMaster
- *
- * @return
- * @throws ModbusInitException
- */
- public static ModbusMaster getMaster() throws ModbusInitException {
- IpParameters params = new IpParameters();
- params.setHost("localhost");
- params.setPort(502);
-
- ModbusMaster tcpMaster = modbusFactory.createTcpMaster(params, false);
- tcpMaster.init();
-
- return tcpMaster;
- }
- /**
- * 获取master
- *
- * @return
- * @throws ModbusInitException
- */
- public static ModbusMaster getMaster(String ipAddr,Integer port) throws ModbusInitException {
- IpParameters params = new IpParameters();
-// params.setHost("localhost");
- params.setHost(ipAddr);
-// params.setPort(502);
- params.setPort(port);
- //
- // modbusFactory.createRtuMaster(params); //RTU 协议
- // modbusFactory.createUdpMaster(params);//UDP 协议
- // modbusFactory.createAsciiMaster(params);//ASCII 协议
-
- // 采用 Modbus RTU over TCP/IP,第二个参数为 true,即 modbusFactory.createTcpMaster(params, true)
- ModbusMaster master = modbusFactory.createTcpMaster(params, false);// TCP 协议
- master.init();
-
- return master;
- }
-
- /**
- * 写 [01 Coil Status(0x)]写一个 function ID = 5
- *
- * @param slaveId
- * slave的ID
- * @param writeOffset
- * 位置
- * @param writeValue
- * 值
- * @return 是否写入成功
- * @throws ModbusTransportException
- * @throws ModbusInitException
- */
- public static boolean writeCoil(ModbusMaster tcpMaster,int slaveId, int writeOffset, boolean writeValue)
- throws ModbusTransportException, ModbusInitException {
- // 获取master
-// ModbusMaster tcpMaster = getMaster();
- // 创建请求
- WriteCoilRequest request = new WriteCoilRequest(slaveId, writeOffset, writeValue);
- // 发送请求并获取响应对象
- WriteCoilResponse response = (WriteCoilResponse) tcpMaster.send(request);
- if (response.isException()) {
- return false;
- } else {
- return true;
- }
- }
-
- /**
- * 写[01 Coil Status(0x)] 写多个 function ID = 15
- *
- * @param slaveId
- * slaveId
- * @param startOffset
- * 开始位置
- * @param bdata
- * 写入的数据
- * @return 是否写入成功
- * @throws ModbusTransportException
- * @throws ModbusInitException
- */
- public static boolean writeCoils(ModbusMaster tcpMaster,int slaveId, int startOffset, boolean[] bdata)
- throws ModbusTransportException, ModbusInitException {
- // 获取master
-// ModbusMaster tcpMaster = getMaster();
- // 创建请求
- WriteCoilsRequest request = new WriteCoilsRequest(slaveId, startOffset, bdata);
- // 发送请求并获取响应对象
- WriteCoilsResponse response = (WriteCoilsResponse) tcpMaster.send(request);
- if (response.isException()) {
- return false;
- } else {
- return true;
- }
-
- }
-
- /***
- * 写[03 Holding Register(4x)] 写一个 function ID = 6
- *
- * @param slaveId
- * @param writeOffset
- * @param writeValue
- * @return
- * @throws ModbusTransportException
- * @throws ModbusInitException
- */
- public static boolean writeRegister(ModbusMaster tcpMaster,int slaveId, int writeOffset, short writeValue)
- throws ModbusTransportException, ModbusInitException {
- // 获取master
-// ModbusMaster tcpMaster = getMaster();
- // 创建请求对象
- WriteRegisterRequest request = new WriteRegisterRequest(slaveId, writeOffset, writeValue);
- WriteRegisterResponse response = (WriteRegisterResponse) tcpMaster.send(request);
- if (response.isException()) {
- log.error(response.getExceptionMessage());
- return false;
- } else {
- return true;
- }
-
- }
-
- /**
- *
- * 写入[03 Holding Register(4x)]写多个 function ID=16
- *
- * @param slaveId
- * modbus的slaveID
- * @param startOffset
- * 起始位置偏移量值
- * @param sdata
- * 写入的数据
- * @return 返回是否写入成功
- * @throws ModbusTransportException
- * @throws ModbusInitException
- */
- public static boolean writeRegisters(ModbusMaster tcpMaster,int slaveId, int startOffset, short[] sdata)
- throws ModbusTransportException, ModbusInitException {
- // 获取master
-// ModbusMaster tcpMaster = getMaster();
- // 创建请求对象
- WriteRegistersRequest request = new WriteRegistersRequest(slaveId, startOffset, sdata);
- // 发送请求并获取响应对象
- ModbusResponse response = tcpMaster.send(request);
- if (response.isException()) {
- log.error(response.getExceptionMessage());
- return false;
- } else {
- return true;
- }
- }
-
- /**
- * 写入数字类型的模拟量(如:写入Float类型的模拟量、Double类型模拟量、整数类型Short、Integer、Long)
- *
- * @param slaveId
- * @param offset
- * @param value
- * 写入值,Number的子类,例如写入Float浮点类型,Double双精度类型,以及整型short,int,long
- * @param dataType
- * ,com.serotonin.modbus4j.code.DataType
- * @throws ModbusTransportException
- * @throws ErrorResponseException
- * @throws ModbusInitException
- */
- public static void writeHoldingRegister(ModbusMaster tcpMaster,int slaveId, int offset, Number value, int dataType)
- throws ModbusTransportException, ErrorResponseException, ModbusInitException {
- // 获取master
-// ModbusMaster tcpMaster = getMaster();
- // 类型
- BaseLocator locator = BaseLocator.holdingRegister(slaveId, offset, dataType);
- tcpMaster.setValue(locator, value);
- }
-
- public static void main1(String[] args) {
- try {
- ModbusMaster modbusMaster = getMaster();
- //@formatter:off
- // 测试01
-// boolean t01 = writeCoil(1, 0, true);
-// System.out.println("T01:" + t01);
-
- // 测试02
-// boolean t02 = writeCoils(1, 0, new boolean[] { true, false, true });
-// System.out.println("T02:" + t02);
-
- // 测试03
-// short v = -3;
-// boolean t03 = writeRegister(1, 0, v);
-// System.out.println("T03:" + t03);
- // 测试04
-// boolean t04 = writeRegisters(1, 0, new short[] { -3, 3, 9 });
-// System.out.println("t04:" + t04);
-
- writeRegister(modbusMaster,1,2,(short) 3);
- //写模拟量
- writeHoldingRegister(modbusMaster,1,0, 999, DataType.TWO_BYTE_INT_SIGNED);
-
- //@formatter:on
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- }
-
-}
diff --git a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/plc/PLCData.java b/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/plc/PLCData.java
deleted file mode 100644
index a5056e0..0000000
--- a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/plc/PLCData.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.rczn.plc;
-
-
-import com.github.s7connector.api.annotation.S7Variable;
-import com.github.s7connector.impl.utils.S7Type;
-import lombok.Data;
-
-@Data
-public class PLCData {
-
- /**
- * type是这个点位在PLC中设置的类型,源码会解析其长度;
- * byteOffset对应PLC偏移量中的整数部分;
- * bitOffset指偏移量的小数部分,bitOffset指第几个bit.
- * byteOffset和bitOffset 也可理解为返回的byte[]中第byteOffset到bitOffset
- */
- @S7Variable(type= S7Type.BOOL,byteOffset = 0,bitOffset = 0)
- public Boolean data10;//bool型的值不要用private
-
- @S7Variable(type=S7Type.BOOL,byteOffset = 0,bitOffset = 1)
- public Boolean data11;
-
- @S7Variable(type=S7Type.BOOL,byteOffset = 0,bitOffset = 2)
- public Boolean data12;
-
- @S7Variable(type=S7Type.BOOL,byteOffset = 0,bitOffset = 3)
- public Boolean data13;
-
- @S7Variable(type=S7Type.BOOL,byteOffset = 0,bitOffset = 4)
- public Boolean data14;
-
- @S7Variable(type=S7Type.BOOL,byteOffset = 0,bitOffset = 5)
- public Boolean data15;
-
- @S7Variable(type=S7Type.BOOL,byteOffset = 0,bitOffset = 6)
- public Boolean data16;
-
- @S7Variable(type=S7Type.BOOL,byteOffset = 0,bitOffset = 7)
- public Boolean data17;
-
- @S7Variable(type=S7Type.BYTE,byteOffset = 1,bitOffset = 0)
- public Byte dataB1;
-
- @S7Variable(type=S7Type.STRING,byteOffset = 2,bitOffset = 0)
- public String dataS1;
-
- @S7Variable(type=S7Type.STRING,byteOffset = 258,bitOffset = 40)
- public String dataS2;
-
- @S7Variable(type=S7Type.STRING,byteOffset = 514,bitOffset = 40)
- public String dataS3;
-
- @S7Variable(type=S7Type.STRING,byteOffset = 770)
- public String dataS4;
-
-}
diff --git a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/plc/S7PlcClient.java b/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/plc/S7PlcClient.java
deleted file mode 100644
index f583fad..0000000
--- a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/plc/S7PlcClient.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package com.rczn.plc;
-
-import com.github.s7connector.api.DaveArea;
-import com.github.s7connector.api.S7Connector;
-import com.github.s7connector.api.factory.S7ConnectorFactory;
-import com.github.s7connector.impl.serializer.converter.StringConverter;
-
-import java.util.Scanner;
-
-
-/**
- * @author 木春
- * @className S7PlcClient.java
- * @Form no
- * @Description ToDo
- * @createTime 2022 年 11 月 18 日 21 21:40:49
- **/
-public class S7PlcClient {
- public static void main(String[] args) throws InterruptedException {
-
- //初始化 创建一个链接对象
- S7Connector connector =
- S7ConnectorFactory
- .buildTCPConnector()
- .withHost("192.168.0.105") //
- .withRack(0) //架机号 可选
- .withSlot(1) //插槽号 可选
- .build();
-
-// 写数据线程
- new Thread(new Runnable() {
- @Override
- public void run() {
- java_write_plc(connector);//写数据
- }
- }).start();
-
-// 读数据线程
- new Thread(new Runnable() {
- @Override
- public void run() {
- java_read_plc(connector);//调用读取数据方法
- }
- }).start();
-
- }
-
- //读取数据
- public static void java_read_plc(S7Connector connector) {
- /* 读取数据方法*/
- byte[] PlcData = null;
- String str = null;
- String str1 = null;
- StringConverter converter = null;
- String extract1 = null;
- //循环读取
- while (true) {
- PlcData = connector.read(
- DaveArea.DB, //选择区块
- 1, // 区块编号
- 255, //长度
- 260); //偏移地址
-
- converter = new StringConverter();//字符串转换
-
- //将读取到的数据转换成字符串类型 读取到的数据转换后
- extract1 = converter.extract(String.class, PlcData, 0, 0);
- //比对两次数据是否一样 不一样就打印
- if (!(extract1.equals(str1))) {
- System.out.println(" ");
- System.out.println("接收plc的数据为 = " + extract1);
- str1 = extract1;
- //plc发送 qu 就结束退出程序
- if (extract1.equals("qu")) {
- break;
- }
- }
- }
- }
-
- //发送数据
- public static void java_write_plc(S7Connector connector) {
- while (true) {
- /*发送数据*/
- String data = null;
-// byte[] bytes = null;
- String input = null;
- Scanner sc = new Scanner(System.in);
- System.out.print("请输入要发送的数据: ");
- input = sc.nextLine();
-
- String data_Baotou = " ";//数据包头 两个空格
- String data_tail = " ";//包尾 六个空格
- data = data_Baotou + input + data_tail;//发送的数据
- byte[] bytes = new byte[input.length()];
- bytes = data.getBytes();//转字节
- System.out.println("发送的字节长度 = " + bytes.length);//发送的字节长度
- connector.write(DaveArea.DB, 1, 4, bytes);//写入到 DB1 偏移量为4的变量
- System.out.println("发送的数据为 = " + data);
- }
- }
-}
\ No newline at end of file
diff --git a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/plc/S7PlcCommun.java b/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/plc/S7PlcCommun.java
deleted file mode 100644
index 35460dd..0000000
--- a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/plc/S7PlcCommun.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package com.rczn.plc;
-
-import com.github.s7connector.api.DaveArea;
-import com.github.s7connector.api.S7Connector;
-import com.github.s7connector.api.S7Serializer;
-import com.github.s7connector.api.factory.S7ConnectorFactory;
-import com.github.s7connector.api.factory.S7SerializerFactory;
-
-import java.io.IOException;
-
-public class S7PlcCommun {
-
-
- /**
- * 初始化PLC连接
- */
- public S7Connector initConnect(){
- //PLC地址
- String ipAddress = "192.168.1.2";
- //默认端口
- Integer port = 102;
- S7Connector s7Connector = S7ConnectorFactory
- .buildTCPConnector()
- .withHost(ipAddress)
- .withPort(port)
- .withTimeout(10000) //连接超时时间
- .withRack(0)
- .withSlot(1)
- .build();
- S7Serializer s7Serializer2L = S7SerializerFactory.buildSerializer(s7Connector);
- return s7Connector;
-
- }
-
- /**
- * 读取PLC中的数据
- *
- **/
- public void readPlcData() {
-
- S7Connector s7Connector = initConnect();
- //第一个参数:DaveArea.DB 表示读取PLC的地址区域为DB
- //第二个参数:DB地址,若plc中是DB1000,则填1000
- //第三个参数:数据长度, <=plc中两个偏移量的间隔,当前偏移量为1000,下一个地址偏移量为1100,则长度可填 0-1000;
- //第四个参数:偏移量
- byte[] barcodeByte = s7Connector.read(DaveArea.DB, 1000, 2, 0);
- //由于当前PLC地址中保存的数据类型是字符串类型,所以直接将byte[] 转成string即可;
- String barcode =byteToHex(barcodeByte);
- System.out.println(barcode);
- try {
- s7Connector.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- /**
- * byte数组转hex
- * @param bytes
- * @return
- */
- public static String byteToHex(byte[] bytes){
- String strHex = "";
- StringBuilder sb = new StringBuilder("");
- for (int n = 0; n < bytes.length; n++) {
- strHex = Integer.toHexString(bytes[n] & 0xFF);
- sb.append((strHex.length() == 1) ? "0" + strHex : strHex); // 每个字节由两个字符表示,位数不够,高位补0
- }
- return sb.toString().trim();
- }
-
- /**
- * 向PLC中写数据
- *
- **/
- public void writePlcData() {
-
- S7Connector s7Connector = initConnect();
- //第一个参数:DaveArea.DB 表示读取PLC的地址区域为DB
- //第二个参数:DB地址,若plc中是DB1000,则填1000
- //第三个参数:偏移量
- //第四个参数:写入的数据 二进制数组byte[],由于plc中地址的数据类型是word,所以写入的数据必须是4位的16进制数据
- s7Connector.write(DaveArea.DB,1000, 4,hexStringToBytes("0001"));
-
- try {
- s7Connector.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- /**
- * 将16进制字符串转成二进制数组
- * @param hexString
- * @return
- */
- public static byte[] hexStringToBytes(String hexString) {
- if (hexString == null || hexString.equals("")) {
- return null;
- }
- hexString = hexString.toUpperCase();
- int length = hexString.length() / 2;
- char[] hexChars = hexString.toCharArray();
- byte[] d = new byte[length];
- for (int i = 0; i < length; i++) {
- int pos = i * 2;
- d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
- }
- return d;
- }
-
- /**
- * 将单个16进制字符转换为对应的字节值(核心补充方法)
- * @param c 16进制字符(0-9、A-F)
- * @return 对应的字节值(0-15)
- */
- private static byte charToByte(char c) {
- // 0-9 对应 48-57
- if (c >= '0' && c <= '9') {
- return (byte) (c - '0');
- }
- // A-F 对应 65-70
- else if (c >= 'A' && c <= 'F') {
- return (byte) (c - 'A' + 10);
- }
- // 非法字符抛出异常(避免静默错误)
- else {
- throw new IllegalArgumentException("非法的16进制字符:" + c);
- }
- }
-}
diff --git a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/plc_common/S7ConnectorPLC.java b/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/plc_common/S7ConnectorPLC.java
deleted file mode 100644
index bf51222..0000000
--- a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/plc_common/S7ConnectorPLC.java
+++ /dev/null
@@ -1,220 +0,0 @@
-package com.rczn.plc_common;
-
-import com.github.s7connector.api.DaveArea;
-import com.github.s7connector.api.S7Connector;
-import com.github.s7connector.api.factory.S7ConnectorFactory;
-import com.github.s7connector.impl.serializer.converter.BitConverter;
-import com.github.s7connector.impl.serializer.converter.IntegerConverter;
-import com.github.s7connector.impl.serializer.converter.RealConverter;
-import com.github.s7connector.impl.serializer.converter.StringConverter;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.nio.charset.StandardCharsets;
-
-public class S7ConnectorPLC {
- public S7Connector initConnect(String ipAddress,int port,int rack,int slot) {
- //默认端口
-// 创建与PLC的链接
- S7Connector connector = S7ConnectorFactory.buildTCPConnector()
- .withHost(ipAddress)
- .withPort(port)
- .withRack(0) // 架机号 可选,建议选择,可能会报错
- .withSlot(2) // 插槽号 可选,建议选择,可能会报错
- .build();
- return connector;
- }
-
- public static void main1(String[] args) {
- S7ConnectorPLC s7ConnectorPLC = new S7ConnectorPLC();
- S7Connector connector = s7ConnectorPLC.initConnect("192.168.110.123", 102, 0, 2);
-// s7ConnectorPLC.Java_To_write(connector);
- s7ConnectorPLC.Cyclic_readT(connector);
- }
-
- //Int类型的封装类 用来转义
- private static IntegerConverter intCon = new IntegerConverter();
- //String...
- private static StringConverter strCon = new StringConverter();
- //Boolean...
- private static BitConverter boolCon = new BitConverter();
- //real实数浮点...
- private static RealConverter realCon = new RealConverter();
-
- //获取到的数据存储
- public boolean in_bool = false;//bool
- public Integer in_int = null;//int
- public String in_String = "";//string
- public double in_real = 0.0;//real
-
- public void Cyclic_read(S7Connector connector) {
-
- byte[] PlcData = null;
- //读取bool型
- PlcData = connector.read(DaveArea.DB, // 选择数据区块
- 5, // 区块编号
- 1, // 数据值长度 boolean长度1
- 0); // 开始位置偏移量
- Boolean extract_bool = boolCon.extract(Boolean.class, PlcData, 0, 0);//接收转换的数值
- in_bool = extract_bool;//赋值给全局变量
-
-// 读取整型
- PlcData = connector.read(DaveArea.DB, // 选择数据区块
- 5, // 区块编号
- 2, // 数据值长度 int长度2
- 2); // 开始位置 偏移量
- Integer extract_int = intCon.extract(Integer.class, PlcData, 0, 0);
- in_int = extract_int;
-
-// 读取字符串型
- PlcData = connector.read(DaveArea.DB, // 选择数据区块
- 5, // 区块编号
- 16, // 数据值长度 String最小3 随值长度增加
- 4); // 开始位置偏移量
- String extract_string = strCon.extract(String.class, PlcData, 0, 0);
- in_String = extract_string;
-
-// 读取小数型
- PlcData = connector.read(DaveArea.DB, // 选择数据区块
- 5, // 区块编号
- 4, // 数据值长度 double长度4
- 260); //偏移量
- Double num1 = realCon.extract(Double.class, PlcData, 0, 0);
- /* BigDecimal bd1 = new BigDecimal(num1);
- System.out.println("转换real浮点= " + bd1.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString());*/
- in_real = num1;
-
- try {
- connector.close();//关闭链接
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- }
- public void Cyclic_readT(S7Connector connector) {
-
- byte[] PlcData = null;
- //读取bool型
- PlcData = connector.read(DaveArea.DB, // 选择数据区块
- 5, // 区块编号
- 1, // 数据值长度 boolean长度1
- 0); // 开始位置偏移量
- Boolean extract_bool = boolCon.extract(Boolean.class, PlcData, 0, 0);//接收转换的数值
- in_bool = extract_bool;//赋值给全局变量
-
-// 读取整型
- PlcData = connector.read(DaveArea.DB, // 选择数据区块
- 5, // 区块编号
- 2, // 数据值长度 int长度2
- 2); // 开始位置 偏移量
- Integer extract_int = intCon.extract(Integer.class, PlcData, 0, 0);
- in_int = extract_int;
-
-// 读取字符串型
- PlcData = connector.read(DaveArea.DB, // 选择数据区块
- 5, // 区块编号
- 16, // 数据值长度 String最小3 随值长度增加
- 4); // 开始位置偏移量
- String extract_string = strCon.extract(String.class, PlcData, 0, 0);
- in_String = extract_string;
-
-// 读取小数型
- PlcData = connector.read(DaveArea.DB, // 选择数据区块
- 5, // 区块编号
- 4, // 数据值长度 double长度4
- 260); //偏移量
- Double num1 = realCon.extract(Double.class, PlcData, 0, 0);
- /* BigDecimal bd1 = new BigDecimal(num1);
- System.out.println("转换real浮点= " + bd1.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString());*/
- in_real = num1;
-
- try {
- connector.close();//关闭链接
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- }
- public void Java_To_write(S7Connector connector) {
- byte[] bytes = null;
-
- boolean out_boolen = true;
-// bytes = S7Type.BOOL;
-// connector.write(DaveArea.DB, 5, 264, bytes);
-
-// 向plc中写int整型数据
-// 向PLC中写短整型(2字节,对应PLC INT类型)数据
- //第一个参数:DaveArea.DB 表示读取PLC的地址区域为DB
- //第二个参数:DB块地址,若plc中是DB1000,则填1000
- //第三个参数:偏移量
- //第四个参数:写入的数据 二进制数组byte[]
- short out_int = 15;
- bytes = ByteBuffer.allocate(2).putShort(out_int).array();
- connector.write(DaveArea.DB, 5, 266, bytes);
-
-// 向PLC中写整型(4字节,对应PLC DINT类型)数据
- int data=15;
- bytes = ByteBuffer.allocate(4).putInt(data).array();
- connector.write(DaveArea.DB,5, 528,bytes);
-
-
-// 写入字符串
- //第一个参数:DaveArea.DB 表示读取PLC的地址区域为DB
- //第二个参数:DB块地址,若plc中是DB1000,则填1000
- //第三个参数:偏移量
- //第四个参数:写入的数据 二进制数组byte[] ,总长度为10的话,有效数据只能是10-8,第一位代表总长,第二位,代表有效数据字节
- String out_string = "helloPlc";
- int writeStrLength = 10;//地址块大小
- byte[] writeBytes = new byte[writeStrLength];
- writeBytes[0] = (byte) writeStrLength;//写入本字符串块总宽度
- out_string = out_string.trim();//清除掉两边的空串
- int availableEffectCharLength = 0;//有效字符数控制
- if (out_string.length() > writeStrLength - 2) {//>writeStrLength-2 截断到最大有效数据位
- availableEffectCharLength = writeStrLength - 2;
-
- } else {//<=writeStrLength-2
- availableEffectCharLength = out_string.length();
- }
- writeBytes[1] = (byte) availableEffectCharLength;//写入有效字节数
- byte[] strBytes = out_string.getBytes(StandardCharsets.US_ASCII);
- for (int i = 0; i < availableEffectCharLength; i++) {
- writeBytes[i + 2] = strBytes[i];
- }
- connector.write(DaveArea.DB, 5, 268, writeBytes);
-
-
- /**
- * 写入PLC中的浮点型数据
- * java float : plc Real 4 字节
- * java double : plc LReal 8 字节
- **/
- //第一个参数:DaveArea.DB 表示读取PLC的地址区域为DB
- //第二个参数:DB块地址,若plc中是DB1000,则填1000
- //第三个参数:偏移量
- //第四个参数:写入的数据 二进制数组byte[]
- float out_real= 5.54F;
- bytes = ByteBuffer.allocate(4).putFloat(out_real).array();
- connector.write(DaveArea.DB,5, 524,bytes);
-
- /**
- * 写入PLC中的浮点型LREAL(java中是double)数据
- * java float : plc Real 4 字节
- * java double : plc LReal 8 字节
- **/
- //第一个参数:DaveArea.DB 表示读取PLC的地址区域为DB
- //第二个参数:DB块地址,若plc中是DB1000,则填1000
- //第三个参数:偏移量
- //第四个参数:写入的数据 二进制数组byte[]
- float out_Lreal= 15.56F;
- bytes = ByteBuffer.allocate(8).putDouble(out_Lreal).array();
- connector.write(DaveArea.DB,5, 532,bytes);
-
-
- try {
- connector.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
-}
diff --git a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/task/TestCrc.java b/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/task/TestCrc.java
deleted file mode 100644
index 70aa3c0..0000000
--- a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/task/TestCrc.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.rczn.task;
-
-import java.time.LocalDateTime;
-
-public class TestCrc {
- public static void main(String[] args) throws CloneNotSupportedException {
- LocalDateTime localDateTime = LocalDateTime.now();
- Video v1 = new Video("123", localDateTime);
- Video v2 = (Video) v1.clone();
-
- System.out.println(v1);
- System.out.println(v2);
- System.out.println("===================================");
-
- localDateTime.minusDays(10);
- v1.setName("vvvvvv");
-
- System.out.println(v1);
- System.out.println(v2);
- System.out.println("===============12312312312====================");
- }
-}
diff --git a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/task/TestTask.java b/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/task/TestTask.java
deleted file mode 100644
index 6c93bc0..0000000
--- a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/task/TestTask.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.rczn.task;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
-
-@Component
-public class TestTask {
- Log log = LogFactory.getLog(TestTask.class);
-
- @Scheduled(cron = "0 0/30 * * * ?")
- public void test() {
- System.out.println("This is a test task.");
- log.info("This is a test task.");
- }
-}
diff --git a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/task/Video.java b/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/task/Video.java
deleted file mode 100644
index 2914449..0000000
--- a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/task/Video.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.rczn.task;
-
-import java.time.LocalDateTime;
-
-public class Video implements Cloneable{
- private String name;
- private LocalDateTime createTime;
-
- public Video() {
-
- }
-
- public Video(String name, LocalDateTime createTime) {
- this.name = name;
- this.createTime = createTime;
- }
-
- @Override
- protected Object clone() throws CloneNotSupportedException {
- return super.clone();
- }
-
- @Override
- public String toString() {
- return "Video{" +
- "name='" + name + '\'' +
- ", createTime=" + createTime +
- '}';
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public LocalDateTime getCreateTime() {
- return createTime;
- }
-
- public void setCreateTime(LocalDateTime createTime) {
- this.createTime = createTime;
- }
-}
diff --git a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/utils/BeanFactoryUtils.java b/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/utils/BeanFactoryUtils.java
deleted file mode 100644
index b9cb240..0000000
--- a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/utils/BeanFactoryUtils.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.rczn.utils;
-
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
-import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
-import org.springframework.stereotype.Component;
-
-@Component
-public class BeanFactoryUtils implements BeanFactoryPostProcessor {
-
- private static ConfigurableListableBeanFactory beanFactory;
-
- @Override
- public void postProcessBeanFactory(ConfigurableListableBeanFactory factory) throws BeansException {
- BeanFactoryUtils.beanFactory = factory;
- }
-
- // 获取Bean
- public static T getBean(Class clazz) {
- return beanFactory.getBean(clazz);
- }
-}
diff --git a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/utils/JwtUtil.java b/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/utils/JwtUtil.java
index 082a819..4b4f3f1 100644
--- a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/utils/JwtUtil.java
+++ b/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/utils/JwtUtil.java
@@ -27,11 +27,4 @@ public class JwtUtil {
.asMap();
}
- public static void main(String[] args) {
- String token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjbGFpbXMiOnsicGVybWlzc2lvbnMiOlsiMTExMSIsIjIyMiIsIjU1NSJdLCJpZCI6MywidXNlcm5hbWUiOiJzdHJpbmcifSwiZXhwIjoxNzc2NzE2NzAyfQ.ynjs9Ys0CxoZjRstjz3mjr3c6NYMFiV3MmTGQYpJmKQ";//genToken(null);
- System.out.println(token);
- Map claims = parseToken(token);
- System.out.println(claims);
- }
-
}
diff --git a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/websocket/WebSocketServer.java b/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/websocket/WebSocketServer.java
deleted file mode 100644
index 8fde0d5..0000000
--- a/rc_autoplc_backend/rczn-common/src/main/java/com/rczn/websocket/WebSocketServer.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.rczn.websocket;
-
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import jakarta.websocket.*;
-import jakarta.websocket.server.PathParam;
-import jakarta.websocket.server.ServerEndpoint;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.springframework.stereotype.Component;
-
-import java.io.IOException;
-import java.util.concurrent.CopyOnWriteArraySet;
-
-@Component
-@ServerEndpoint("/websocket/{userId}")
-public class WebSocketServer {
- Log log = LogFactory.getLog(WebSocketServer.class);
-
- //springboot自带json转换器
- private static ObjectMapper OBJECT_MAPPER = new ObjectMapper();
-
- //存放每个连接对象
- private static CopyOnWriteArraySet webSockets = new CopyOnWriteArraySet<>();
- private Session session;
- private Long userId;
-
- /**
- * 连接建立成功调用的方法
- * @param session
- * @param userId
- */
- @OnOpen
- public void onOpen(Session session, @PathParam("userId") Long userId) {
- this.session = session;
- this.userId = userId;
- webSockets.add(this);
- log.info("有新连接加入!当前在线人数为" + webSockets.size());
- }
-
- /**
- * 连接关闭调用的方法
- */
- @OnClose
- public void onClose(){
- webSockets.remove(this);
- log.info("有连接关闭!当前在线人数为" + webSockets.size());
- }
-
- /**
- * 收到客户端消息后调用的方法
- * @OnMessage
- * @param message 客户端发送过来的消息
- * @param session
- */
- @OnMessage
- public void onMessage(String message,Session session){
- log.info("收到来自客户端的消息:" + message);
- }
-
- @OnError
- public void onError(Session session, Throwable error) {
- log.error("发生错误:"+error.getStackTrace());
- }
-
- /**
- * 发送消息
- * @param message
- * @throws IOException
- */
- public void sendMessage(String message) throws IOException {
- this.session.getBasicRemote().sendText(message);
- }
-
-}
diff --git a/rc_autoplc_backend/rczn-common/src/main/resources/application-common.yml b/rc_autoplc_backend/rczn-common/src/main/resources/application-common.yml
index 71923ab..ed8bc87 100644
--- a/rc_autoplc_backend/rczn-common/src/main/resources/application-common.yml
+++ b/rc_autoplc_backend/rczn-common/src/main/resources/application-common.yml
@@ -1,12 +1 @@
##spring.application.name=rczn-common
-#spring:
-# ai:
-# openai:
-# api-key: "sk-b2b55f0bc7e140668e0326c0cc7a86df" #sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-# base-url: "https://api.deepseek.com"
-# chat:
-# options:
-# model: "deepseek-chat"
-# # 关键:给语音模型也配置上,就不报错了
-# speech:
-# api-key: "sk-b2b55f0bc7e140668e0326c0cc7a86df"
\ No newline at end of file
diff --git a/rc_autoplc_backend/rczn-common/src/test/java/com/rczn/rczncommon/RcznCommonApplicationTests.java b/rc_autoplc_backend/rczn-common/src/test/java/com/rczn/rczncommon/RcznCommonApplicationTests.java
deleted file mode 100644
index 66dc009..0000000
--- a/rc_autoplc_backend/rczn-common/src/test/java/com/rczn/rczncommon/RcznCommonApplicationTests.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.rczn.rczncommon;
-
-//import org.junit.jupiter.api.Test;
-import org.springframework.boot.test.context.SpringBootTest;
-
-@SpringBootTest
-class RcznCommonApplicationTests {
-
-// @Test
- void contextLoads() {
- }
-
-}
diff --git a/rc_autoplc_front/.env b/rc_autoplc_front/.env
new file mode 100644
index 0000000..4d37822
--- /dev/null
+++ b/rc_autoplc_front/.env
@@ -0,0 +1 @@
+VITE_API_URL=http://223.71.122.54:9090
diff --git a/rc_autoplc_front/index.html b/rc_autoplc_front/index.html
index 9e5fc8f..c065e52 100644
--- a/rc_autoplc_front/index.html
+++ b/rc_autoplc_front/index.html
@@ -2,9 +2,9 @@
-
+
- Vite App
+ 中核404内照射上位机中控系统
diff --git a/rc_autoplc_front/package-lock.json b/rc_autoplc_front/package-lock.json
index ee5814e..cffdfad 100644
--- a/rc_autoplc_front/package-lock.json
+++ b/rc_autoplc_front/package-lock.json
@@ -8,11 +8,15 @@
"name": "rc_autoplc_front",
"version": "0.0.0",
"dependencies": {
+ "@amap/amap-jsapi-loader": "^1.0.1",
"axios": "^1.13.2",
+ "echarts": "^6.0.0",
"element-plus": "^2.12.0",
+ "html2canvas": "^1.4.1",
"pinia": "^3.0.4",
"pinia-plugin-persistedstate": "^4.7.1",
"vue": "^3.5.25",
+ "vue-echarts": "^8.0.1",
"vue-router": "^4.6.3"
},
"devDependencies": {
@@ -21,6 +25,7 @@
"@vitejs/plugin-vue": "^6.0.2",
"@vue/tsconfig": "^0.8.1",
"npm-run-all2": "^8.0.4",
+ "sass-embedded": "^1.97.3",
"typescript": "~5.9.0",
"vite": "^7.2.4",
"vite-plugin-vue-devtools": "^8.0.5",
@@ -30,10 +35,14 @@
"node": "^20.19.0 || >=22.12.0"
}
},
+ "node_modules/@amap/amap-jsapi-loader": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@amap/amap-jsapi-loader/-/amap-jsapi-loader-1.0.1.tgz",
+ "integrity": "sha512-nPyLKt7Ow/ThHLkSvn2etQlUzqxmTVgK7bIgwdBRTg2HK5668oN7xVxkaiRe3YZEzGzfV2XgH5Jmu2T73ljejw==",
+ "license": "MIT"
+ },
"node_modules/@babel/code-frame": {
"version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
- "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -47,8 +56,6 @@
},
"node_modules/@babel/compat-data": {
"version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz",
- "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -57,8 +64,6 @@
},
"node_modules/@babel/core": {
"version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz",
- "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
"dev": true,
"license": "MIT",
"peer": true,
@@ -89,8 +94,6 @@
},
"node_modules/@babel/generator": {
"version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz",
- "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -106,8 +109,6 @@
},
"node_modules/@babel/helper-annotate-as-pure": {
"version": "7.27.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz",
- "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -119,8 +120,6 @@
},
"node_modules/@babel/helper-compilation-targets": {
"version": "7.27.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
- "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -136,8 +135,6 @@
},
"node_modules/@babel/helper-create-class-features-plugin": {
"version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz",
- "integrity": "sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -158,8 +155,6 @@
},
"node_modules/@babel/helper-globals": {
"version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
- "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -168,8 +163,6 @@
},
"node_modules/@babel/helper-member-expression-to-functions": {
"version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz",
- "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -182,8 +175,6 @@
},
"node_modules/@babel/helper-module-imports": {
"version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
- "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -196,8 +187,6 @@
},
"node_modules/@babel/helper-module-transforms": {
"version": "7.28.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz",
- "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -214,8 +203,6 @@
},
"node_modules/@babel/helper-optimise-call-expression": {
"version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz",
- "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -227,8 +214,6 @@
},
"node_modules/@babel/helper-plugin-utils": {
"version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz",
- "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -237,8 +222,6 @@
},
"node_modules/@babel/helper-replace-supers": {
"version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz",
- "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -255,8 +238,6 @@
},
"node_modules/@babel/helper-skip-transparent-expression-wrappers": {
"version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz",
- "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -269,8 +250,6 @@
},
"node_modules/@babel/helper-string-parser": {
"version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
- "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
@@ -278,8 +257,6 @@
},
"node_modules/@babel/helper-validator-identifier": {
"version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
- "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
@@ -287,8 +264,6 @@
},
"node_modules/@babel/helper-validator-option": {
"version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
- "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -297,8 +272,6 @@
},
"node_modules/@babel/helpers": {
"version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz",
- "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -311,8 +284,6 @@
},
"node_modules/@babel/parser": {
"version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz",
- "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==",
"license": "MIT",
"dependencies": {
"@babel/types": "^7.28.5"
@@ -326,8 +297,6 @@
},
"node_modules/@babel/plugin-proposal-decorators": {
"version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.28.0.tgz",
- "integrity": "sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -344,8 +313,6 @@
},
"node_modules/@babel/plugin-syntax-decorators": {
"version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz",
- "integrity": "sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -360,8 +327,6 @@
},
"node_modules/@babel/plugin-syntax-import-attributes": {
"version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz",
- "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -376,8 +341,6 @@
},
"node_modules/@babel/plugin-syntax-import-meta": {
"version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
- "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -389,8 +352,6 @@
},
"node_modules/@babel/plugin-syntax-jsx": {
"version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz",
- "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -405,8 +366,6 @@
},
"node_modules/@babel/plugin-syntax-typescript": {
"version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz",
- "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -421,8 +380,6 @@
},
"node_modules/@babel/plugin-transform-typescript": {
"version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.5.tgz",
- "integrity": "sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -441,8 +398,6 @@
},
"node_modules/@babel/template": {
"version": "7.27.2",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
- "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -456,8 +411,6 @@
},
"node_modules/@babel/traverse": {
"version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz",
- "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -475,8 +428,6 @@
},
"node_modules/@babel/types": {
"version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz",
- "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==",
"license": "MIT",
"dependencies": {
"@babel/helper-string-parser": "^7.27.1",
@@ -486,10 +437,15 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@bufbuild/protobuf": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.11.0.tgz",
+ "integrity": "sha512-sBXGT13cpmPR5BMgHE6UEEfEaShh5Ror6rfN3yEK5si7QVrtZg8LEPQb0VVhiLRUslD2yLnXtnRzG035J/mZXQ==",
+ "dev": true,
+ "license": "(Apache-2.0 AND BSD-3-Clause)"
+ },
"node_modules/@ctrl/tinycolor": {
"version": "3.6.1",
- "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz",
- "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==",
"license": "MIT",
"engines": {
"node": ">=10"
@@ -497,442 +453,13 @@
},
"node_modules/@element-plus/icons-vue": {
"version": "2.3.2",
- "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz",
- "integrity": "sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==",
"license": "MIT",
"peerDependencies": {
"vue": "^3.2.0"
}
},
- "node_modules/@esbuild/aix-ppc64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz",
- "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "aix"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz",
- "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz",
- "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz",
- "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz",
- "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz",
- "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz",
- "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz",
- "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz",
- "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz",
- "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ia32": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz",
- "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-loong64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz",
- "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-mips64el": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz",
- "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
- "cpu": [
- "mips64el"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ppc64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz",
- "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-riscv64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz",
- "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-s390x": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz",
- "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz",
- "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz",
- "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz",
- "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz",
- "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz",
- "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openharmony-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz",
- "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openharmony"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/sunos-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz",
- "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "sunos"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz",
- "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-ia32": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz",
- "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
"node_modules/@esbuild/win32-x64": {
"version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz",
- "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==",
"cpu": [
"x64"
],
@@ -948,8 +475,6 @@
},
"node_modules/@floating-ui/core": {
"version": "1.7.3",
- "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz",
- "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==",
"license": "MIT",
"dependencies": {
"@floating-ui/utils": "^0.2.10"
@@ -957,8 +482,6 @@
},
"node_modules/@floating-ui/dom": {
"version": "1.7.4",
- "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz",
- "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==",
"license": "MIT",
"dependencies": {
"@floating-ui/core": "^1.7.3",
@@ -967,14 +490,10 @@
},
"node_modules/@floating-ui/utils": {
"version": "0.2.10",
- "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz",
- "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==",
"license": "MIT"
},
"node_modules/@jridgewell/gen-mapping": {
"version": "0.3.13",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
- "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -984,8 +503,6 @@
},
"node_modules/@jridgewell/remapping": {
"version": "2.3.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
- "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -995,8 +512,6 @@
},
"node_modules/@jridgewell/resolve-uri": {
"version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
- "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1005,14 +520,10 @@
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.5.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
- "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
"license": "MIT"
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.31",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
- "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1020,49 +531,47 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
- "node_modules/@polka/url": {
- "version": "1.0.0-next.29",
- "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz",
- "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==",
+ "node_modules/@parcel/watcher": {
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz",
+ "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==",
"dev": true,
- "license": "MIT"
- },
- "node_modules/@popperjs/core": {
- "name": "@sxzz/popperjs-es",
- "version": "2.11.7",
- "resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
- "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==",
+ "hasInstallScript": true,
"license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "detect-libc": "^2.0.3",
+ "is-glob": "^4.0.3",
+ "node-addon-api": "^7.0.0",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
+ },
"funding": {
"type": "opencollective",
- "url": "https://opencollective.com/popperjs"
+ "url": "https://opencollective.com/parcel"
+ },
+ "optionalDependencies": {
+ "@parcel/watcher-android-arm64": "2.5.6",
+ "@parcel/watcher-darwin-arm64": "2.5.6",
+ "@parcel/watcher-darwin-x64": "2.5.6",
+ "@parcel/watcher-freebsd-x64": "2.5.6",
+ "@parcel/watcher-linux-arm-glibc": "2.5.6",
+ "@parcel/watcher-linux-arm-musl": "2.5.6",
+ "@parcel/watcher-linux-arm64-glibc": "2.5.6",
+ "@parcel/watcher-linux-arm64-musl": "2.5.6",
+ "@parcel/watcher-linux-x64-glibc": "2.5.6",
+ "@parcel/watcher-linux-x64-musl": "2.5.6",
+ "@parcel/watcher-win32-arm64": "2.5.6",
+ "@parcel/watcher-win32-ia32": "2.5.6",
+ "@parcel/watcher-win32-x64": "2.5.6"
}
},
- "node_modules/@rolldown/pluginutils": {
- "version": "1.0.0-beta.50",
- "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.50.tgz",
- "integrity": "sha512-5e76wQiQVeL1ICOZVUg4LSOVYg9jyhGCin+icYozhsUzM+fHE7kddi1bdiE0jwVqTfkjba3jUFbEkoC9WkdvyA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.3.tgz",
- "integrity": "sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-android-arm64": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.3.tgz",
- "integrity": "sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==",
+ "node_modules/@parcel/watcher-android-arm64": {
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz",
+ "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==",
"cpu": [
"arm64"
],
@@ -1071,12 +580,19 @@
"optional": true,
"os": [
"android"
- ]
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
},
- "node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.3.tgz",
- "integrity": "sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==",
+ "node_modules/@parcel/watcher-darwin-arm64": {
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz",
+ "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==",
"cpu": [
"arm64"
],
@@ -1085,12 +601,19 @@
"optional": true,
"os": [
"darwin"
- ]
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
},
- "node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.3.tgz",
- "integrity": "sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==",
+ "node_modules/@parcel/watcher-darwin-x64": {
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz",
+ "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==",
"cpu": [
"x64"
],
@@ -1099,26 +622,19 @@
"optional": true,
"os": [
"darwin"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.3.tgz",
- "integrity": "sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==",
- "cpu": [
- "arm64"
],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
},
- "node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.3.tgz",
- "integrity": "sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==",
+ "node_modules/@parcel/watcher-freebsd-x64": {
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz",
+ "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==",
"cpu": [
"x64"
],
@@ -1127,12 +643,19 @@
"optional": true,
"os": [
"freebsd"
- ]
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
},
- "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.3.tgz",
- "integrity": "sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==",
+ "node_modules/@parcel/watcher-linux-arm-glibc": {
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz",
+ "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==",
"cpu": [
"arm"
],
@@ -1141,12 +664,19 @@
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
},
- "node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.3.tgz",
- "integrity": "sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==",
+ "node_modules/@parcel/watcher-linux-arm-musl": {
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz",
+ "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==",
"cpu": [
"arm"
],
@@ -1155,12 +685,19 @@
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
},
- "node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.3.tgz",
- "integrity": "sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==",
+ "node_modules/@parcel/watcher-linux-arm64-glibc": {
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz",
+ "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==",
"cpu": [
"arm64"
],
@@ -1169,12 +706,19 @@
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
},
- "node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.3.tgz",
- "integrity": "sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==",
+ "node_modules/@parcel/watcher-linux-arm64-musl": {
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz",
+ "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==",
"cpu": [
"arm64"
],
@@ -1183,82 +727,19 @@
"optional": true,
"os": [
"linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-loong64-gnu": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.3.tgz",
- "integrity": "sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==",
- "cpu": [
- "loong64"
],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
},
- "node_modules/@rollup/rollup-linux-ppc64-gnu": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.3.tgz",
- "integrity": "sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.3.tgz",
- "integrity": "sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.3.tgz",
- "integrity": "sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.3.tgz",
- "integrity": "sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz",
- "integrity": "sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==",
+ "node_modules/@parcel/watcher-linux-x64-glibc": {
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz",
+ "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==",
"cpu": [
"x64"
],
@@ -1267,12 +748,19 @@
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
},
- "node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.3.tgz",
- "integrity": "sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==",
+ "node_modules/@parcel/watcher-linux-x64-musl": {
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz",
+ "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==",
"cpu": [
"x64"
],
@@ -1281,26 +769,19 @@
"optional": true,
"os": [
"linux"
- ]
- },
- "node_modules/@rollup/rollup-openharmony-arm64": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.3.tgz",
- "integrity": "sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==",
- "cpu": [
- "arm64"
],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openharmony"
- ]
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
},
- "node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.3.tgz",
- "integrity": "sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==",
+ "node_modules/@parcel/watcher-win32-arm64": {
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz",
+ "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==",
"cpu": [
"arm64"
],
@@ -1309,12 +790,19 @@
"optional": true,
"os": [
"win32"
- ]
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
},
- "node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.3.tgz",
- "integrity": "sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==",
+ "node_modules/@parcel/watcher-win32-ia32": {
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz",
+ "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==",
"cpu": [
"ia32"
],
@@ -1323,12 +811,57 @@
"optional": true,
"os": [
"win32"
- ]
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-win32-x64": {
+ "version": "2.5.6",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz",
+ "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@polka/url": {
+ "version": "1.0.0-next.29",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@popperjs/core": {
+ "name": "@sxzz/popperjs-es",
+ "version": "2.11.7",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/popperjs"
+ }
+ },
+ "node_modules/@rolldown/pluginutils": {
+ "version": "1.0.0-beta.50",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@rollup/rollup-win32-x64-gnu": {
"version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.3.tgz",
- "integrity": "sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==",
"cpu": [
"x64"
],
@@ -1341,8 +874,6 @@
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
"version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.3.tgz",
- "integrity": "sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==",
"cpu": [
"x64"
],
@@ -1355,28 +886,20 @@
},
"node_modules/@tsconfig/node24": {
"version": "24.0.3",
- "resolved": "https://registry.npmjs.org/@tsconfig/node24/-/node24-24.0.3.tgz",
- "integrity": "sha512-vcERKtKQKHgzt/vfS3Gjasd8SUI2a0WZXpgJURdJsMySpS5+ctgbPfuLj2z/W+w4lAfTWxoN4upKfu2WzIRYnw==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/estree": {
"version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
- "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/lodash": {
"version": "4.17.21",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==",
"license": "MIT"
},
"node_modules/@types/lodash-es": {
"version": "4.17.12",
- "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz",
- "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
"license": "MIT",
"peer": true,
"dependencies": {
@@ -1385,8 +908,6 @@
},
"node_modules/@types/node": {
"version": "24.10.2",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.2.tgz",
- "integrity": "sha512-WOhQTZ4G8xZ1tjJTvKOpyEVSGgOTvJAfDK3FNFgELyaTpzhdgHVHeqW8V+UJvzF5BT+/B54T/1S2K6gd9c7bbA==",
"dev": true,
"license": "MIT",
"peer": true,
@@ -1396,14 +917,10 @@
},
"node_modules/@types/web-bluetooth": {
"version": "0.0.16",
- "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",
- "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==",
"license": "MIT"
},
"node_modules/@vitejs/plugin-vue": {
"version": "6.0.2",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.2.tgz",
- "integrity": "sha512-iHmwV3QcVGGvSC1BG5bZ4z6iwa1SOpAPWmnjOErd4Ske+lZua5K9TtAVdx0gMBClJ28DViCbSmZitjWZsWO3LA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1419,8 +936,6 @@
},
"node_modules/@volar/language-core": {
"version": "2.4.26",
- "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.26.tgz",
- "integrity": "sha512-hH0SMitMxnB43OZpyF1IFPS9bgb2I3bpCh76m2WEK7BE0A0EzpYsRp0CCH2xNKshr7kacU5TQBLYn4zj7CG60A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1429,15 +944,11 @@
},
"node_modules/@volar/source-map": {
"version": "2.4.26",
- "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.26.tgz",
- "integrity": "sha512-JJw0Tt/kSFsIRmgTQF4JSt81AUSI1aEye5Zl65EeZ8H35JHnTvFGmpDOBn5iOxd48fyGE+ZvZBp5FcgAy/1Qhw==",
"dev": true,
"license": "MIT"
},
"node_modules/@volar/typescript": {
"version": "2.4.26",
- "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.26.tgz",
- "integrity": "sha512-N87ecLD48Sp6zV9zID/5yuS1+5foj0DfuYGdQ6KHj/IbKvyKv1zNX6VCmnKYwtmHadEO6mFc2EKISiu3RDPAvA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1448,15 +959,11 @@
},
"node_modules/@vue/babel-helper-vue-transform-on": {
"version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.5.0.tgz",
- "integrity": "sha512-0dAYkerNhhHutHZ34JtTl2czVQHUNWv6xEbkdF5W+Yrv5pCWsqjeORdOgbtW2I9gWlt+wBmVn+ttqN9ZxR5tzA==",
"dev": true,
"license": "MIT"
},
"node_modules/@vue/babel-plugin-jsx": {
"version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.5.0.tgz",
- "integrity": "sha512-mneBhw1oOqCd2247O0Yw/mRwC9jIGACAJUlawkmMBiNmL4dGA2eMzuNZVNqOUfYTa6vqmND4CtOPzmEEEqLKFw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1481,8 +988,6 @@
},
"node_modules/@vue/babel-plugin-resolve-type": {
"version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.5.0.tgz",
- "integrity": "sha512-Wm/60o+53JwJODm4Knz47dxJnLDJ9FnKnGZJbUUf8nQRAtt6P+undLUAVU3Ha33LxOJe6IPoifRQ6F/0RrU31w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1501,8 +1006,6 @@
},
"node_modules/@vue/compiler-core": {
"version": "3.5.25",
- "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.25.tgz",
- "integrity": "sha512-vay5/oQJdsNHmliWoZfHPoVZZRmnSWhug0BYT34njkYTPqClh3DNWLkZNJBVSjsNMrg0CCrBfoKkjZQPM/QVUw==",
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.28.5",
@@ -1514,8 +1017,6 @@
},
"node_modules/@vue/compiler-dom": {
"version": "3.5.25",
- "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.25.tgz",
- "integrity": "sha512-4We0OAcMZsKgYoGlMjzYvaoErltdFI2/25wqanuTu+S4gismOTRTBPi4IASOjxWdzIwrYSjnqONfKvuqkXzE2Q==",
"license": "MIT",
"dependencies": {
"@vue/compiler-core": "3.5.25",
@@ -1524,8 +1025,6 @@
},
"node_modules/@vue/compiler-sfc": {
"version": "3.5.25",
- "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.25.tgz",
- "integrity": "sha512-PUgKp2rn8fFsI++lF2sO7gwO2d9Yj57Utr5yEsDf3GNaQcowCLKL7sf+LvVFvtJDXUp/03+dC6f2+LCv5aK1ag==",
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.28.5",
@@ -1541,8 +1040,6 @@
},
"node_modules/@vue/compiler-ssr": {
"version": "3.5.25",
- "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.25.tgz",
- "integrity": "sha512-ritPSKLBcParnsKYi+GNtbdbrIE1mtuFEJ4U1sWeuOMlIziK5GtOL85t5RhsNy4uWIXPgk+OUdpnXiTdzn8o3A==",
"license": "MIT",
"dependencies": {
"@vue/compiler-dom": "3.5.25",
@@ -1551,8 +1048,6 @@
},
"node_modules/@vue/devtools-api": {
"version": "7.7.9",
- "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.9.tgz",
- "integrity": "sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==",
"license": "MIT",
"dependencies": {
"@vue/devtools-kit": "^7.7.9"
@@ -1560,8 +1055,6 @@
},
"node_modules/@vue/devtools-core": {
"version": "8.0.5",
- "resolved": "https://registry.npmjs.org/@vue/devtools-core/-/devtools-core-8.0.5.tgz",
- "integrity": "sha512-dpCw8nl0GDBuiL9SaY0mtDxoGIEmU38w+TQiYEPOLhW03VDC0lfNMYXS/qhl4I0YlysGp04NLY4UNn6xgD0VIQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1578,8 +1071,6 @@
},
"node_modules/@vue/devtools-core/node_modules/@vue/devtools-kit": {
"version": "8.0.5",
- "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-8.0.5.tgz",
- "integrity": "sha512-q2VV6x1U3KJMTQPUlRMyWEKVbcHuxhqJdSr6Jtjz5uAThAIrfJ6WVZdGZm5cuO63ZnSUz0RCsVwiUUb0mDV0Yg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1594,8 +1085,6 @@
},
"node_modules/@vue/devtools-core/node_modules/@vue/devtools-shared": {
"version": "8.0.5",
- "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-8.0.5.tgz",
- "integrity": "sha512-bRLn6/spxpmgLk+iwOrR29KrYnJjG9DGpHGkDFG82UM21ZpJ39ztUT9OXX3g+usW7/b2z+h46I9ZiYyB07XMXg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1604,8 +1093,6 @@
},
"node_modules/@vue/devtools-core/node_modules/nanoid": {
"version": "5.1.6",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.6.tgz",
- "integrity": "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==",
"dev": true,
"funding": [
{
@@ -1623,15 +1110,11 @@
},
"node_modules/@vue/devtools-core/node_modules/perfect-debounce": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.0.0.tgz",
- "integrity": "sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==",
"dev": true,
"license": "MIT"
},
"node_modules/@vue/devtools-kit": {
"version": "7.7.9",
- "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.9.tgz",
- "integrity": "sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==",
"license": "MIT",
"dependencies": {
"@vue/devtools-shared": "^7.7.9",
@@ -1645,8 +1128,6 @@
},
"node_modules/@vue/devtools-shared": {
"version": "7.7.9",
- "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.9.tgz",
- "integrity": "sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==",
"license": "MIT",
"dependencies": {
"rfdc": "^1.4.1"
@@ -1654,8 +1135,6 @@
},
"node_modules/@vue/language-core": {
"version": "3.1.8",
- "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.1.8.tgz",
- "integrity": "sha512-PfwAW7BLopqaJbneChNL6cUOTL3GL+0l8paYP5shhgY5toBNidWnMXWM+qDwL7MC9+zDtzCF2enT8r6VPu64iw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1678,8 +1157,6 @@
},
"node_modules/@vue/reactivity": {
"version": "3.5.25",
- "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.25.tgz",
- "integrity": "sha512-5xfAypCQepv4Jog1U4zn8cZIcbKKFka3AgWHEFQeK65OW+Ys4XybP6z2kKgws4YB43KGpqp5D/K3go2UPPunLA==",
"license": "MIT",
"dependencies": {
"@vue/shared": "3.5.25"
@@ -1687,8 +1164,6 @@
},
"node_modules/@vue/runtime-core": {
"version": "3.5.25",
- "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.25.tgz",
- "integrity": "sha512-Z751v203YWwYzy460bzsYQISDfPjHTl+6Zzwo/a3CsAf+0ccEjQ8c+0CdX1WsumRTHeywvyUFtW6KvNukT/smA==",
"license": "MIT",
"dependencies": {
"@vue/reactivity": "3.5.25",
@@ -1697,8 +1172,6 @@
},
"node_modules/@vue/runtime-dom": {
"version": "3.5.25",
- "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.25.tgz",
- "integrity": "sha512-a4WrkYFbb19i9pjkz38zJBg8wa/rboNERq3+hRRb0dHiJh13c+6kAbgqCPfMaJ2gg4weWD3APZswASOfmKwamA==",
"license": "MIT",
"dependencies": {
"@vue/reactivity": "3.5.25",
@@ -1709,8 +1182,6 @@
},
"node_modules/@vue/server-renderer": {
"version": "3.5.25",
- "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.25.tgz",
- "integrity": "sha512-UJaXR54vMG61i8XNIzTSf2Q7MOqZHpp8+x3XLGtE3+fL+nQd+k7O5+X3D/uWrnQXOdMw5VPih+Uremcw+u1woQ==",
"license": "MIT",
"dependencies": {
"@vue/compiler-ssr": "3.5.25",
@@ -1722,14 +1193,10 @@
},
"node_modules/@vue/shared": {
"version": "3.5.25",
- "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.25.tgz",
- "integrity": "sha512-AbOPdQQnAnzs58H2FrrDxYj/TJfmeS2jdfEEhgiKINy+bnOANmVizIEgq1r+C5zsbs6l1CCQxtcj71rwNQ4jWg==",
"license": "MIT"
},
"node_modules/@vue/tsconfig": {
"version": "0.8.1",
- "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.8.1.tgz",
- "integrity": "sha512-aK7feIWPXFSUhsCP9PFqPyFOcz4ENkb8hZ2pneL6m2UjCkccvaOhC/5KCKluuBufvp2KzkbdA2W2pk20vLzu3g==",
"dev": true,
"license": "MIT",
"peerDependencies": {
@@ -1747,8 +1214,6 @@
},
"node_modules/@vueuse/core": {
"version": "9.13.0",
- "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-9.13.0.tgz",
- "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==",
"license": "MIT",
"dependencies": {
"@types/web-bluetooth": "^0.0.16",
@@ -1762,8 +1227,6 @@
},
"node_modules/@vueuse/core/node_modules/vue-demi": {
"version": "0.14.10",
- "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz",
- "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
"hasInstallScript": true,
"license": "MIT",
"bin": {
@@ -1788,8 +1251,6 @@
},
"node_modules/@vueuse/metadata": {
"version": "9.13.0",
- "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.13.0.tgz",
- "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/antfu"
@@ -1797,8 +1258,6 @@
},
"node_modules/@vueuse/shared": {
"version": "9.13.0",
- "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-9.13.0.tgz",
- "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==",
"license": "MIT",
"dependencies": {
"vue-demi": "*"
@@ -1809,8 +1268,6 @@
},
"node_modules/@vueuse/shared/node_modules/vue-demi": {
"version": "0.14.10",
- "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz",
- "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
"hasInstallScript": true,
"license": "MIT",
"bin": {
@@ -1835,15 +1292,11 @@
},
"node_modules/alien-signals": {
"version": "3.1.1",
- "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-3.1.1.tgz",
- "integrity": "sha512-ogkIWbVrLwKtHY6oOAXaYkAxP+cTH7V5FZ5+Tm4NZFd8VDZ6uNMDrfzqctTZ42eTMCSR3ne3otpcxmqSnFfPYA==",
"dev": true,
"license": "MIT"
},
"node_modules/ansi-styles": {
"version": "6.2.3",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
- "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1855,8 +1308,6 @@
},
"node_modules/ansis": {
"version": "4.2.0",
- "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.2.0.tgz",
- "integrity": "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==",
"dev": true,
"license": "ISC",
"engines": {
@@ -1865,20 +1316,14 @@
},
"node_modules/async-validator": {
"version": "4.2.5",
- "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz",
- "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==",
"license": "MIT"
},
"node_modules/asynckit": {
"version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
"license": "MIT"
},
"node_modules/axios": {
"version": "1.13.2",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz",
- "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==",
"license": "MIT",
"dependencies": {
"follow-redirects": "^1.15.6",
@@ -1886,10 +1331,17 @@
"proxy-from-env": "^1.1.0"
}
},
+ "node_modules/base64-arraybuffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
+ "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
"node_modules/baseline-browser-mapping": {
"version": "2.9.5",
- "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.5.tgz",
- "integrity": "sha512-D5vIoztZOq1XM54LUdttJVc96ggEsIfju2JBvht06pSzpckp3C7HReun67Bghzrtdsq9XdMGbSSB3v3GhMNmAA==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@@ -1898,8 +1350,6 @@
},
"node_modules/birpc": {
"version": "2.9.0",
- "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz",
- "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/antfu"
@@ -1907,8 +1357,6 @@
},
"node_modules/browserslist": {
"version": "4.28.1",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
- "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
"dev": true,
"funding": [
{
@@ -1942,8 +1390,6 @@
},
"node_modules/bundle-name": {
"version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz",
- "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1958,8 +1404,6 @@
},
"node_modules/call-bind-apply-helpers": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
- "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
@@ -1971,8 +1415,6 @@
},
"node_modules/caniuse-lite": {
"version": "1.0.30001760",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz",
- "integrity": "sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==",
"dev": true,
"funding": [
{
@@ -1990,10 +1432,32 @@
],
"license": "CC-BY-4.0"
},
+ "node_modules/chokidar": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
+ "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "readdirp": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 14.16.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/colorjs.io": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz",
+ "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/combined-stream": {
"version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"license": "MIT",
"dependencies": {
"delayed-stream": "~1.0.0"
@@ -2004,15 +1468,11 @@
},
"node_modules/convert-source-map": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
- "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
"dev": true,
"license": "MIT"
},
"node_modules/copy-anything": {
"version": "4.0.5",
- "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-4.0.5.tgz",
- "integrity": "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==",
"license": "MIT",
"dependencies": {
"is-what": "^5.2.0"
@@ -2026,8 +1486,6 @@
},
"node_modules/cross-spawn": {
"version": "7.0.6",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
- "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2041,15 +1499,11 @@
},
"node_modules/cross-spawn/node_modules/isexe": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
"dev": true,
"license": "ISC"
},
"node_modules/cross-spawn/node_modules/which": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -2062,22 +1516,25 @@
"node": ">= 8"
}
},
+ "node_modules/css-line-break": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz",
+ "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==",
+ "license": "MIT",
+ "dependencies": {
+ "utrie": "^1.0.2"
+ }
+ },
"node_modules/csstype": {
"version": "3.2.3",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
- "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
"license": "MIT"
},
"node_modules/dayjs": {
"version": "1.11.19",
- "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz",
- "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==",
"license": "MIT"
},
"node_modules/debug": {
"version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2094,8 +1551,6 @@
},
"node_modules/default-browser": {
"version": "5.4.0",
- "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.4.0.tgz",
- "integrity": "sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2111,8 +1566,6 @@
},
"node_modules/default-browser-id": {
"version": "5.0.1",
- "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz",
- "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2124,8 +1577,6 @@
},
"node_modules/define-lazy-prop": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
- "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2137,23 +1588,28 @@
},
"node_modules/defu": {
"version": "6.1.4",
- "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz",
- "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==",
"license": "MIT"
},
"node_modules/delayed-stream": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
"license": "MIT",
"engines": {
"node": ">=0.4.0"
}
},
+ "node_modules/detect-libc": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
+ "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/dunder-proto": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
- "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.1",
@@ -2164,17 +1620,29 @@
"node": ">= 0.4"
}
},
+ "node_modules/echarts": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/echarts/-/echarts-6.0.0.tgz",
+ "integrity": "sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "2.3.0",
+ "zrender": "6.0.0"
+ }
+ },
+ "node_modules/echarts/node_modules/tslib": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
+ "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
+ "license": "0BSD"
+ },
"node_modules/electron-to-chromium": {
"version": "1.5.267",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz",
- "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==",
"dev": true,
"license": "ISC"
},
"node_modules/element-plus": {
"version": "2.12.0",
- "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.12.0.tgz",
- "integrity": "sha512-M9YLSn2np9OnqrSKWsiXvGe3qnF8pd94+TScsHj1aTMCD+nSEvucXermf807qNt6hOP040le0e5Aft7E9ZfHmA==",
"license": "MIT",
"dependencies": {
"@ctrl/tinycolor": "^3.4.1",
@@ -2198,8 +1666,6 @@
},
"node_modules/entities": {
"version": "4.5.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"license": "BSD-2-Clause",
"engines": {
"node": ">=0.12"
@@ -2210,8 +1676,6 @@
},
"node_modules/error-stack-parser-es": {
"version": "1.0.5",
- "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz",
- "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==",
"dev": true,
"license": "MIT",
"funding": {
@@ -2220,8 +1684,6 @@
},
"node_modules/es-define-property": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
- "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -2229,8 +1691,6 @@
},
"node_modules/es-errors": {
"version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -2238,8 +1698,6 @@
},
"node_modules/es-object-atoms": {
"version": "1.1.1",
- "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
- "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0"
@@ -2250,8 +1708,6 @@
},
"node_modules/es-set-tostringtag": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
- "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
@@ -2265,8 +1721,6 @@
},
"node_modules/esbuild": {
"version": "0.25.12",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
- "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
@@ -2307,8 +1761,6 @@
},
"node_modules/escalade": {
"version": "3.2.0",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
- "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2317,14 +1769,10 @@
},
"node_modules/estree-walker": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
"license": "MIT"
},
"node_modules/fdir": {
"version": "6.5.0",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
- "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2341,8 +1789,6 @@
},
"node_modules/follow-redirects": {
"version": "1.15.11",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
- "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
"funding": [
{
"type": "individual",
@@ -2361,8 +1807,6 @@
},
"node_modules/form-data": {
"version": "4.0.5",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
- "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
"license": "MIT",
"dependencies": {
"asynckit": "^0.4.0",
@@ -2375,25 +1819,8 @@
"node": ">= 6"
}
},
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
"node_modules/function-bind": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -2401,8 +1828,6 @@
},
"node_modules/gensync": {
"version": "1.0.0-beta.2",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
- "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2411,8 +1836,6 @@
},
"node_modules/get-intrinsic": {
"version": "1.3.0",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
- "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.2",
@@ -2435,8 +1858,6 @@
},
"node_modules/get-proto": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
- "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
"license": "MIT",
"dependencies": {
"dunder-proto": "^1.0.1",
@@ -2448,8 +1869,6 @@
},
"node_modules/gopd": {
"version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
- "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -2458,10 +1877,18 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/has-symbols": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
- "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -2472,8 +1899,6 @@
},
"node_modules/has-tostringtag": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
- "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
"license": "MIT",
"dependencies": {
"has-symbols": "^1.0.3"
@@ -2487,8 +1912,6 @@
},
"node_modules/hasown": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"license": "MIT",
"dependencies": {
"function-bind": "^1.1.2"
@@ -2499,14 +1922,30 @@
},
"node_modules/hookable": {
"version": "5.5.3",
- "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz",
- "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==",
+ "license": "MIT"
+ },
+ "node_modules/html2canvas": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz",
+ "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==",
+ "license": "MIT",
+ "dependencies": {
+ "css-line-break": "^2.1.0",
+ "text-segmentation": "^1.0.3"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/immutable": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz",
+ "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==",
+ "dev": true,
"license": "MIT"
},
"node_modules/is-docker": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
- "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
"dev": true,
"license": "MIT",
"bin": {
@@ -2519,10 +1958,33 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/is-inside-container": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
- "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2540,8 +2002,6 @@
},
"node_modules/is-what": {
"version": "5.5.0",
- "resolved": "https://registry.npmjs.org/is-what/-/is-what-5.5.0.tgz",
- "integrity": "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==",
"license": "MIT",
"engines": {
"node": ">=18"
@@ -2552,8 +2012,6 @@
},
"node_modules/is-wsl": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz",
- "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2568,8 +2026,6 @@
},
"node_modules/isexe": {
"version": "3.1.1",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
- "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
"dev": true,
"license": "ISC",
"engines": {
@@ -2578,15 +2034,11 @@
},
"node_modules/js-tokens": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"dev": true,
"license": "MIT"
},
"node_modules/jsesc": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
- "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
"dev": true,
"license": "MIT",
"bin": {
@@ -2598,8 +2050,6 @@
},
"node_modules/json-parse-even-better-errors": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz",
- "integrity": "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2608,8 +2058,6 @@
},
"node_modules/json5": {
"version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"dev": true,
"license": "MIT",
"bin": {
@@ -2621,29 +2069,21 @@
},
"node_modules/kolorist": {
"version": "1.8.0",
- "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz",
- "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==",
"dev": true,
"license": "MIT"
},
"node_modules/lodash": {
"version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"license": "MIT",
"peer": true
},
"node_modules/lodash-es": {
"version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
- "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
"license": "MIT",
"peer": true
},
"node_modules/lodash-unified": {
"version": "1.0.3",
- "resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.3.tgz",
- "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==",
"license": "MIT",
"peerDependencies": {
"@types/lodash-es": "*",
@@ -2653,8 +2093,6 @@
},
"node_modules/lru-cache": {
"version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -2663,8 +2101,6 @@
},
"node_modules/magic-string": {
"version": "0.30.21",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
- "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
"license": "MIT",
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.5.5"
@@ -2672,8 +2108,6 @@
},
"node_modules/math-intrinsics": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
- "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -2681,14 +2115,10 @@
},
"node_modules/memoize-one": {
"version": "6.0.0",
- "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
- "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==",
"license": "MIT"
},
"node_modules/memorystream": {
"version": "0.3.1",
- "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
- "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==",
"dev": true,
"engines": {
"node": ">= 0.10.0"
@@ -2696,8 +2126,6 @@
},
"node_modules/mime-db": {
"version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
@@ -2705,8 +2133,6 @@
},
"node_modules/mime-types": {
"version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"license": "MIT",
"dependencies": {
"mime-db": "1.52.0"
@@ -2717,14 +2143,10 @@
},
"node_modules/mitt": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
- "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
"license": "MIT"
},
"node_modules/mrmime": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz",
- "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2733,22 +2155,16 @@
},
"node_modules/ms": {
"version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true,
"license": "MIT"
},
"node_modules/muggle-string": {
"version": "0.4.1",
- "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz",
- "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==",
"dev": true,
"license": "MIT"
},
"node_modules/nanoid": {
"version": "3.3.11",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
- "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
"funding": [
{
"type": "github",
@@ -2763,23 +2179,25 @@
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
+ "node_modules/node-addon-api": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
+ "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true
+ },
"node_modules/node-releases": {
"version": "2.0.27",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
- "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
"dev": true,
"license": "MIT"
},
"node_modules/normalize-wheel-es": {
"version": "1.2.0",
- "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
- "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==",
"license": "BSD-3-Clause"
},
"node_modules/npm-normalize-package-bin": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz",
- "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==",
"dev": true,
"license": "ISC",
"engines": {
@@ -2788,8 +2206,6 @@
},
"node_modules/npm-run-all2": {
"version": "8.0.4",
- "resolved": "https://registry.npmjs.org/npm-run-all2/-/npm-run-all2-8.0.4.tgz",
- "integrity": "sha512-wdbB5My48XKp2ZfJUlhnLVihzeuA1hgBnqB2J9ahV77wLS+/YAJAlN8I+X3DIFIPZ3m5L7nplmlbhNiFDmXRDA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2815,15 +2231,11 @@
},
"node_modules/ohash": {
"version": "2.0.11",
- "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz",
- "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==",
"dev": true,
"license": "MIT"
},
"node_modules/open": {
"version": "10.2.0",
- "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz",
- "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2841,15 +2253,11 @@
},
"node_modules/path-browserify": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
- "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
"dev": true,
"license": "MIT"
},
"node_modules/path-key": {
"version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2858,27 +2266,19 @@
},
"node_modules/pathe": {
"version": "2.0.3",
- "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
- "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
"dev": true,
"license": "MIT"
},
"node_modules/perfect-debounce": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
- "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==",
"license": "MIT"
},
"node_modules/picocolors": {
"version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
"license": "ISC"
},
"node_modules/picomatch": {
"version": "4.0.3",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
- "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2890,8 +2290,6 @@
},
"node_modules/pidtree": {
"version": "0.6.0",
- "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz",
- "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==",
"dev": true,
"license": "MIT",
"bin": {
@@ -2903,8 +2301,6 @@
},
"node_modules/pinia": {
"version": "3.0.4",
- "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.4.tgz",
- "integrity": "sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==",
"license": "MIT",
"peer": true,
"dependencies": {
@@ -2925,8 +2321,6 @@
},
"node_modules/pinia-plugin-persistedstate": {
"version": "4.7.1",
- "resolved": "https://registry.npmjs.org/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-4.7.1.tgz",
- "integrity": "sha512-WHOqh2esDlR3eAaknPbqXrkkj0D24h8shrDPqysgCFR6ghqP/fpFfJmMPJp0gETHsvrh9YNNg6dQfo2OEtDnIQ==",
"license": "MIT",
"dependencies": {
"defu": "^6.1.4"
@@ -2950,8 +2344,6 @@
},
"node_modules/postcss": {
"version": "8.5.6",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
- "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
"funding": [
{
"type": "opencollective",
@@ -2978,14 +2370,10 @@
},
"node_modules/proxy-from-env": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
- "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
"license": "MIT"
},
"node_modules/read-package-json-fast": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-4.0.0.tgz",
- "integrity": "sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -2996,16 +2384,27 @@
"node": "^18.17.0 || >=20.5.0"
}
},
+ "node_modules/readdirp": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
+ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">= 14.18.0"
+ },
+ "funding": {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
"node_modules/rfdc": {
"version": "1.4.1",
- "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
- "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
"license": "MIT"
},
"node_modules/rollup": {
"version": "4.53.3",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.3.tgz",
- "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3046,8 +2445,6 @@
},
"node_modules/run-applescript": {
"version": "7.1.0",
- "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz",
- "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3057,10 +2454,389 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/rxjs": {
+ "version": "7.8.2",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
+ "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.1.0"
+ }
+ },
+ "node_modules/sass": {
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.97.3.tgz",
+ "integrity": "sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "chokidar": "^4.0.0",
+ "immutable": "^5.0.2",
+ "source-map-js": ">=0.6.2 <2.0.0"
+ },
+ "bin": {
+ "sass": "sass.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "optionalDependencies": {
+ "@parcel/watcher": "^2.4.1"
+ }
+ },
+ "node_modules/sass-embedded": {
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.97.3.tgz",
+ "integrity": "sha512-eKzFy13Nk+IRHhlAwP3sfuv+PzOrvzUkwJK2hdoCKYcWGSdmwFpeGpWmyewdw8EgBnsKaSBtgf/0b2K635ecSA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@bufbuild/protobuf": "^2.5.0",
+ "colorjs.io": "^0.5.0",
+ "immutable": "^5.0.2",
+ "rxjs": "^7.4.0",
+ "supports-color": "^8.1.1",
+ "sync-child-process": "^1.0.2",
+ "varint": "^6.0.0"
+ },
+ "bin": {
+ "sass": "dist/bin/sass.js"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ },
+ "optionalDependencies": {
+ "sass-embedded-all-unknown": "1.97.3",
+ "sass-embedded-android-arm": "1.97.3",
+ "sass-embedded-android-arm64": "1.97.3",
+ "sass-embedded-android-riscv64": "1.97.3",
+ "sass-embedded-android-x64": "1.97.3",
+ "sass-embedded-darwin-arm64": "1.97.3",
+ "sass-embedded-darwin-x64": "1.97.3",
+ "sass-embedded-linux-arm": "1.97.3",
+ "sass-embedded-linux-arm64": "1.97.3",
+ "sass-embedded-linux-musl-arm": "1.97.3",
+ "sass-embedded-linux-musl-arm64": "1.97.3",
+ "sass-embedded-linux-musl-riscv64": "1.97.3",
+ "sass-embedded-linux-musl-x64": "1.97.3",
+ "sass-embedded-linux-riscv64": "1.97.3",
+ "sass-embedded-linux-x64": "1.97.3",
+ "sass-embedded-unknown-all": "1.97.3",
+ "sass-embedded-win32-arm64": "1.97.3",
+ "sass-embedded-win32-x64": "1.97.3"
+ }
+ },
+ "node_modules/sass-embedded-all-unknown": {
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-all-unknown/-/sass-embedded-all-unknown-1.97.3.tgz",
+ "integrity": "sha512-t6N46NlPuXiY3rlmG6/+1nwebOBOaLFOOVqNQOC2cJhghOD4hh2kHNQQTorCsbY9S1Kir2la1/XLBwOJfui0xg==",
+ "cpu": [
+ "!arm",
+ "!arm64",
+ "!riscv64",
+ "!x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "sass": "1.97.3"
+ }
+ },
+ "node_modules/sass-embedded-android-arm": {
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.97.3.tgz",
+ "integrity": "sha512-cRTtf/KV/q0nzGZoUzVkeIVVFv3L/tS1w4WnlHapphsjTXF/duTxI8JOU1c/9GhRPiMdfeXH7vYNcMmtjwX7jg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-android-arm64": {
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.97.3.tgz",
+ "integrity": "sha512-aiZ6iqiHsUsaDx0EFbbmmA0QgxicSxVVN3lnJJ0f1RStY0DthUkquGT5RJ4TPdaZ6ebeJWkboV4bra+CP766eA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-android-riscv64": {
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.97.3.tgz",
+ "integrity": "sha512-zVEDgl9JJodofGHobaM/q6pNETG69uuBIGQHRo789jloESxxZe82lI3AWJQuPmYCOG5ElfRthqgv89h3gTeLYA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-android-x64": {
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.97.3.tgz",
+ "integrity": "sha512-3ke0le7ZKepyXn/dKKspYkpBC0zUk/BMciyP5ajQUDy4qJwobd8zXdAq6kOkdiMB+d9UFJOmEkvgFJHl3lqwcw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-darwin-arm64": {
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.97.3.tgz",
+ "integrity": "sha512-fuqMTqO4gbOmA/kC5b9y9xxNYw6zDEyfOtMgabS7Mz93wimSk2M1quQaTJnL98Mkcsl2j+7shNHxIS/qpcIDDA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-darwin-x64": {
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.97.3.tgz",
+ "integrity": "sha512-b/2RBs/2bZpP8lMkyZ0Px0vkVkT8uBd0YXpOwK7iOwYkAT8SsO4+WdVwErsqC65vI5e1e5p1bb20tuwsoQBMVA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-linux-arm": {
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.97.3.tgz",
+ "integrity": "sha512-2lPQ7HQQg4CKsH18FTsj2hbw5GJa6sBQgDsls+cV7buXlHjqF8iTKhAQViT6nrpLK/e8nFCoaRgSqEC8xMnXuA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-linux-arm64": {
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.97.3.tgz",
+ "integrity": "sha512-IP1+2otCT3DuV46ooxPaOKV1oL5rLjteRzf8ldZtfIEcwhSgSsHgA71CbjYgLEwMY9h4jeal8Jfv3QnedPvSjg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-linux-musl-arm": {
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.97.3.tgz",
+ "integrity": "sha512-cBTMU68X2opBpoYsSZnI321gnoaiMBEtc+60CKCclN6PCL3W3uXm8g4TLoil1hDD6mqU9YYNlVG6sJ+ZNef6Lg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-linux-musl-arm64": {
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.97.3.tgz",
+ "integrity": "sha512-Lij0SdZCsr+mNRSyDZ7XtJpXEITrYsaGbOTz5e6uFLJ9bmzUbV7M8BXz2/cA7bhfpRPT7/lwRKPdV4+aR9Ozcw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-linux-musl-riscv64": {
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.97.3.tgz",
+ "integrity": "sha512-sBeLFIzMGshR4WmHAD4oIM7WJVkSoCIEwutzptFtGlSlwfNiijULp+J5hA2KteGvI6Gji35apR5aWj66wEn/iA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-linux-musl-x64": {
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.97.3.tgz",
+ "integrity": "sha512-/oWJ+OVrDg7ADDQxRLC/4g1+Nsz1g4mkYS2t6XmyMJKFTFK50FVI2t5sOdFH+zmMp+nXHKM036W94y9m4jjEcw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-linux-riscv64": {
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.97.3.tgz",
+ "integrity": "sha512-l3IfySApLVYdNx0Kjm7Zehte1CDPZVcldma3dZt+TfzvlAEerM6YDgsk5XEj3L8eHBCgHgF4A0MJspHEo2WNfA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-linux-x64": {
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.97.3.tgz",
+ "integrity": "sha512-Kwqwc/jSSlcpRjULAOVbndqEy2GBzo6OBmmuBVINWUaJLJ8Kczz3vIsDUWLfWz/kTEw9FHBSiL0WCtYLVAXSLg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-unknown-all": {
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.97.3.tgz",
+ "integrity": "sha512-/GHajyYJmvb0IABUQHbVHf1nuHPtIDo/ClMZ81IDr59wT5CNcMe7/dMNujXwWugtQVGI5UGmqXWZQCeoGnct8Q==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "!android",
+ "!darwin",
+ "!linux",
+ "!win32"
+ ],
+ "dependencies": {
+ "sass": "1.97.3"
+ }
+ },
+ "node_modules/sass-embedded-win32-arm64": {
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.97.3.tgz",
+ "integrity": "sha512-RDGtRS1GVvQfMGAmVXNxYiUOvPzn9oO1zYB/XUM9fudDRnieYTcUytpNTQZLs6Y1KfJxgt5Y+giRceC92fT8Uw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/sass-embedded-win32-x64": {
+ "version": "1.97.3",
+ "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.97.3.tgz",
+ "integrity": "sha512-SFRa2lED9UEwV6vIGeBXeBOLKF+rowF3WmNfb/BzhxmdAsKofCXrJ8ePW7OcDVrvNEbTOGwhsReIsF5sH8fVaw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
"node_modules/semver": {
"version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
"license": "ISC",
"bin": {
@@ -3069,8 +2845,6 @@
},
"node_modules/shebang-command": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3082,8 +2856,6 @@
},
"node_modules/shebang-regex": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3092,8 +2864,6 @@
},
"node_modules/shell-quote": {
"version": "1.8.3",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz",
- "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3105,8 +2875,6 @@
},
"node_modules/sirv": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz",
- "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3120,8 +2888,6 @@
},
"node_modules/source-map-js": {
"version": "1.2.1",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
@@ -3129,8 +2895,6 @@
},
"node_modules/speakingurl": {
"version": "14.0.1",
- "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz",
- "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==",
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
@@ -3138,8 +2902,6 @@
},
"node_modules/superjson": {
"version": "2.2.6",
- "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.6.tgz",
- "integrity": "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==",
"license": "MIT",
"dependencies": {
"copy-anything": "^4"
@@ -3148,10 +2910,56 @@
"node": ">=16"
}
},
+ "node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/sync-child-process": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/sync-child-process/-/sync-child-process-1.0.2.tgz",
+ "integrity": "sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "sync-message-port": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/sync-message-port": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.1.3.tgz",
+ "integrity": "sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/text-segmentation": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz",
+ "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==",
+ "license": "MIT",
+ "dependencies": {
+ "utrie": "^1.0.2"
+ }
+ },
"node_modules/tinyglobby": {
"version": "0.2.15",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
- "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3167,18 +2975,21 @@
},
"node_modules/totalist": {
"version": "3.0.1",
- "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz",
- "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "license": "0BSD"
+ },
"node_modules/typescript": {
"version": "5.9.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
- "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
"devOptional": true,
"license": "Apache-2.0",
"peer": true,
@@ -3192,15 +3003,11 @@
},
"node_modules/undici-types": {
"version": "7.16.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
- "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
"dev": true,
"license": "MIT"
},
"node_modules/unplugin-utils": {
"version": "0.3.1",
- "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.3.1.tgz",
- "integrity": "sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3216,8 +3023,6 @@
},
"node_modules/update-browserslist-db": {
"version": "1.2.2",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.2.tgz",
- "integrity": "sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==",
"dev": true,
"funding": [
{
@@ -3245,10 +3050,24 @@
"browserslist": ">= 4.21.0"
}
},
+ "node_modules/utrie": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz",
+ "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==",
+ "license": "MIT",
+ "dependencies": {
+ "base64-arraybuffer": "^1.0.2"
+ }
+ },
+ "node_modules/varint": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz",
+ "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/vite": {
"version": "7.2.7",
- "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.7.tgz",
- "integrity": "sha512-ITcnkFeR3+fI8P1wMgItjGrR10170d8auB4EpMLPqmx6uxElH3a/hHGQabSHKdqd4FXWO1nFIp9rRn7JQ34ACQ==",
"dev": true,
"license": "MIT",
"peer": true,
@@ -3323,8 +3142,6 @@
},
"node_modules/vite-dev-rpc": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/vite-dev-rpc/-/vite-dev-rpc-1.1.0.tgz",
- "integrity": "sha512-pKXZlgoXGoE8sEKiKJSng4hI1sQ4wi5YT24FCrwrLt6opmkjlqPPVmiPWWJn8M8byMxRGzp1CrFuqQs4M/Z39A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3340,8 +3157,6 @@
},
"node_modules/vite-hot-client": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/vite-hot-client/-/vite-hot-client-2.1.0.tgz",
- "integrity": "sha512-7SpgZmU7R+dDnSmvXE1mfDtnHLHQSisdySVR7lO8ceAXvM0otZeuQQ6C8LrS5d/aYyP/QZ0hI0L+dIPrm4YlFQ==",
"dev": true,
"license": "MIT",
"funding": {
@@ -3353,8 +3168,6 @@
},
"node_modules/vite-plugin-inspect": {
"version": "11.3.3",
- "resolved": "https://registry.npmjs.org/vite-plugin-inspect/-/vite-plugin-inspect-11.3.3.tgz",
- "integrity": "sha512-u2eV5La99oHoYPHE6UvbwgEqKKOQGz86wMg40CCosP6q8BkB6e5xPneZfYagK4ojPJSj5anHCrnvC20DpwVdRA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3385,15 +3198,11 @@
},
"node_modules/vite-plugin-inspect/node_modules/perfect-debounce": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.0.0.tgz",
- "integrity": "sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==",
"dev": true,
"license": "MIT"
},
"node_modules/vite-plugin-vue-devtools": {
"version": "8.0.5",
- "resolved": "https://registry.npmjs.org/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-8.0.5.tgz",
- "integrity": "sha512-p619BlKFOqQXJ6uDWS1vUPQzuJOD6xJTfftj57JXBGoBD/yeQCowR7pnWcr/FEX4/HVkFbreI6w2uuGBmQOh6A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3413,8 +3222,6 @@
},
"node_modules/vite-plugin-vue-devtools/node_modules/@vue/devtools-kit": {
"version": "8.0.5",
- "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-8.0.5.tgz",
- "integrity": "sha512-q2VV6x1U3KJMTQPUlRMyWEKVbcHuxhqJdSr6Jtjz5uAThAIrfJ6WVZdGZm5cuO63ZnSUz0RCsVwiUUb0mDV0Yg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3429,8 +3236,6 @@
},
"node_modules/vite-plugin-vue-devtools/node_modules/@vue/devtools-shared": {
"version": "8.0.5",
- "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-8.0.5.tgz",
- "integrity": "sha512-bRLn6/spxpmgLk+iwOrR29KrYnJjG9DGpHGkDFG82UM21ZpJ39ztUT9OXX3g+usW7/b2z+h46I9ZiYyB07XMXg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3439,15 +3244,11 @@
},
"node_modules/vite-plugin-vue-devtools/node_modules/perfect-debounce": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.0.0.tgz",
- "integrity": "sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==",
"dev": true,
"license": "MIT"
},
"node_modules/vite-plugin-vue-inspector": {
"version": "5.3.2",
- "resolved": "https://registry.npmjs.org/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.3.2.tgz",
- "integrity": "sha512-YvEKooQcSiBTAs0DoYLfefNja9bLgkFM7NI2b07bE2SruuvX0MEa9cMaxjKVMkeCp5Nz9FRIdcN1rOdFVBeL6Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3467,15 +3268,11 @@
},
"node_modules/vscode-uri": {
"version": "3.1.0",
- "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz",
- "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==",
"dev": true,
"license": "MIT"
},
"node_modules/vue": {
"version": "3.5.25",
- "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.25.tgz",
- "integrity": "sha512-YLVdgv2K13WJ6n+kD5owehKtEXwdwXuj2TTyJMsO7pSeKw2bfRNZGjhB7YzrpbMYj5b5QsUebHpOqR3R3ziy/g==",
"license": "MIT",
"peer": true,
"dependencies": {
@@ -3494,10 +3291,18 @@
}
}
},
+ "node_modules/vue-echarts": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/vue-echarts/-/vue-echarts-8.0.1.tgz",
+ "integrity": "sha512-23rJTFLu1OUEGRWjJGmdGt8fP+8+ja1gVgzMYPIPaHWpXegcO1viIAaeu2H4QHESlVeHzUAHIxKXGrwjsyXAaA==",
+ "license": "MIT",
+ "peerDependencies": {
+ "echarts": "^6.0.0",
+ "vue": "^3.3.0"
+ }
+ },
"node_modules/vue-router": {
"version": "4.6.3",
- "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.3.tgz",
- "integrity": "sha512-ARBedLm9YlbvQomnmq91Os7ck6efydTSpRP3nuOKCvgJOHNrhRoJDSKtee8kcL1Vf7nz6U+PMBL+hTvR3bTVQg==",
"license": "MIT",
"dependencies": {
"@vue/devtools-api": "^6.6.4"
@@ -3511,14 +3316,10 @@
},
"node_modules/vue-router/node_modules/@vue/devtools-api": {
"version": "6.6.4",
- "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
- "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==",
"license": "MIT"
},
"node_modules/vue-tsc": {
"version": "3.1.8",
- "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.1.8.tgz",
- "integrity": "sha512-deKgwx6exIHeZwF601P1ktZKNF0bepaSN4jBU3AsbldPx9gylUc1JDxYppl82yxgkAgaz0Y0LCLOi+cXe9HMYA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3534,8 +3335,6 @@
},
"node_modules/which": {
"version": "5.0.0",
- "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz",
- "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -3550,8 +3349,6 @@
},
"node_modules/wsl-utils": {
"version": "0.1.0",
- "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz",
- "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3566,10 +3363,23 @@
},
"node_modules/yallist": {
"version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
"dev": true,
"license": "ISC"
+ },
+ "node_modules/zrender": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/zrender/-/zrender-6.0.0.tgz",
+ "integrity": "sha512-41dFXEEXuJpNecuUQq6JlbybmnHaqqpGlbH1yxnA5V9MMP4SbohSVZsJIwz+zdjQXSSlR1Vc34EgH1zxyTDvhg==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "tslib": "2.3.0"
+ }
+ },
+ "node_modules/zrender/node_modules/tslib": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
+ "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
+ "license": "0BSD"
}
}
}
diff --git a/rc_autoplc_front/package.json b/rc_autoplc_front/package.json
index 843cb50..675e971 100644
--- a/rc_autoplc_front/package.json
+++ b/rc_autoplc_front/package.json
@@ -14,11 +14,15 @@
"type-check": "vue-tsc --build"
},
"dependencies": {
+ "@amap/amap-jsapi-loader": "^1.0.1",
"axios": "^1.13.2",
+ "echarts": "^6.0.0",
"element-plus": "^2.12.0",
+ "html2canvas": "^1.4.1",
"pinia": "^3.0.4",
"pinia-plugin-persistedstate": "^4.7.1",
"vue": "^3.5.25",
+ "vue-echarts": "^8.0.1",
"vue-router": "^4.6.3"
},
"devDependencies": {
@@ -27,6 +31,7 @@
"@vitejs/plugin-vue": "^6.0.2",
"@vue/tsconfig": "^0.8.1",
"npm-run-all2": "^8.0.4",
+ "sass-embedded": "^1.97.3",
"typescript": "~5.9.0",
"vite": "^7.2.4",
"vite-plugin-vue-devtools": "^8.0.5",
diff --git a/rc_autoplc_front/public/Laboratory.ico b/rc_autoplc_front/public/Laboratory.ico
new file mode 100644
index 0000000..aa65e98
Binary files /dev/null and b/rc_autoplc_front/public/Laboratory.ico differ
diff --git a/rc_autoplc_front/src/api/system/dicdata.ts b/rc_autoplc_front/src/api/system/dicdata.ts
new file mode 100644
index 0000000..4b77d55
--- /dev/null
+++ b/rc_autoplc_front/src/api/system/dicdata.ts
@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+export function dicdataadd(data: any) {
+ return request({
+ url: '/sysDicData/add',
+ method: 'post',
+ data,
+ })
+}
+
+export function dicdatadel(id: string | number) {
+ return request({
+ url: `/sysDicData/del/${id}`,
+ method: 'delete',
+ })
+}
+
+export function dicdataupd(data: any) {
+ return request({
+ url: '/sysDicData/update',
+ method: 'put',
+ data,
+ })
+}
+
+export function dicdatalist(data: any) {
+ return request({
+ url: '/sysDicData/listPage',
+ method: 'get',
+ params: data,
+ })
+}
+
+export function dicdatabyid(id: string | number) {
+ return request({
+ url: `/sysDicData/getById/${id}`,
+ method: 'get',
+ })
+}
+
+export function dicdataall() {
+ return request({
+ url: `/sysDicData/list`,
+ method: 'get',
+ })
+}
+
+export function dicdatabydicid(dicId : string | number) {
+ return request({
+ url: `/sysDicData/listByDicId/${dicId}`,
+ method: 'get',
+ })
+}
\ No newline at end of file
diff --git a/rc_autoplc_front/src/api/system/dictype.ts b/rc_autoplc_front/src/api/system/dictype.ts
new file mode 100644
index 0000000..e65d77a
--- /dev/null
+++ b/rc_autoplc_front/src/api/system/dictype.ts
@@ -0,0 +1,46 @@
+import request from '@/utils/request'
+
+export function dictypeadd(data: any) {
+ return request({
+ url: '/sysDicType/add',
+ method: 'post',
+ data,
+ })
+}
+
+export function dictypedel(id: string | number) {
+ return request({
+ url: `/sysDicType/del/${id}`,
+ method: 'delete',
+ })
+}
+
+export function dictypeupd(data: any) {
+ return request({
+ url: '/sysDicType/update',
+ method: 'put',
+ data,
+ })
+}
+
+export function dictypelist(data: any) {
+ return request({
+ url: '/sysDicType/listPage',
+ method: 'get',
+ params: data,
+ })
+}
+
+export function dictypebyid(id: string | number) {
+ return request({
+ url: `/sysDicType/getById/${id}`,
+ method: 'get',
+ })
+}
+
+export function dictypeall() {
+ return request({
+ url: `/sysDicType/list`,
+ method: 'get',
+ })
+}
\ No newline at end of file
diff --git a/rc_autoplc_front/src/api/system/permission.ts b/rc_autoplc_front/src/api/system/permission.ts
new file mode 100644
index 0000000..92b44ae
--- /dev/null
+++ b/rc_autoplc_front/src/api/system/permission.ts
@@ -0,0 +1,47 @@
+import request from '@/utils/request'
+
+export function permissionadd(data: any) {
+ return request({
+ url: '/permission/add',
+ method: 'post',
+ data,
+ })
+}
+
+export function permissiondel(id: string | number) {
+ return request({
+ url: `/permission/del/${id}`,
+ method: 'delete',
+ })
+}
+
+export function permissionupd(data: any) {
+ return request({
+ url: '/permission/update',
+ method: 'put',
+ data,
+ })
+}
+
+export function permissionlist(data: any) {
+ return request({
+ url: '/permission/listPage',
+ method: 'get',
+ params: data,
+ })
+}
+
+export function permissionbyid(id: string | number) {
+ return request({
+ url: `/permission/getById/${id}`,
+ method: 'get',
+ })
+}
+
+export function permissionselect(data?: any) {
+ return request({
+ url: '/permission/list',
+ method: 'get',
+ params: data,
+ })
+}
diff --git a/rc_autoplc_front/src/api/system/role-permission.ts b/rc_autoplc_front/src/api/system/role-permission.ts
new file mode 100644
index 0000000..51e91de
--- /dev/null
+++ b/rc_autoplc_front/src/api/system/role-permission.ts
@@ -0,0 +1,38 @@
+import request from '@/utils/request'
+
+// 给角色添加权限
+export function rolePermissionAdd(data: any) {
+ return request({
+ url: '/rolePermission/add',
+ method: 'post',
+ data,
+ })
+}
+
+// 清空某个角色的所有权限
+export function rolePermissionClearByRoleId(roleId: string | number) {
+ return request({
+ url: `/rolePermission/clearByRoleId/${roleId}`,
+ method: 'delete',
+ })
+}
+
+// 删除单条角色权限关联
+export function rolePermissionDel(roleId: string | number, permissionId: string | number) {
+ return request({
+ url: `/rolePermission/del`,
+ method: 'delete',
+ params: {
+ roleId,
+ permissionId
+ }
+ })
+}
+
+// 根据角色ID查询已绑定的权限ID列表
+export function rolePermissionListByRoleId(roleId: string | number) {
+ return request({
+ url: `/rolePermission/listByRoleId/${roleId}`,
+ method: 'get',
+ })
+}
\ No newline at end of file
diff --git a/rc_autoplc_front/src/api/system/user.ts b/rc_autoplc_front/src/api/system/user.ts
index 9c032ef..6ae1408 100644
--- a/rc_autoplc_front/src/api/system/user.ts
+++ b/rc_autoplc_front/src/api/system/user.ts
@@ -44,4 +44,26 @@ export function userbyid(id: string | number) {
url: `/user/getById/${id}`,
method: 'get',
})
+}
+
+export function userlogin(username: string, password: string) {
+ return request({
+ url: '/user/login',
+ method: 'post',
+ params: {
+ username,
+ password,
+ },
+ })
+}
+
+export function userregister(username: string, password: string) {
+ return request({
+ url: '/user/register',
+ method: 'post',
+ params: {
+ username,
+ password,
+ },
+ })
}
\ No newline at end of file
diff --git a/rc_autoplc_front/src/api/tb/devparam.ts b/rc_autoplc_front/src/api/tb/devparam.ts
index 75d0e18..f666e0a 100644
--- a/rc_autoplc_front/src/api/tb/devparam.ts
+++ b/rc_autoplc_front/src/api/tb/devparam.ts
@@ -44,4 +44,28 @@ export function devparamselect(data: any) {
method: 'get',
params: data,
})
+}
+
+// 为参数增加设备的devId
+export function devparamaddDevId(devId: number, paramId: number) {
+ return request({
+ url: '/devParam/addDevId',
+ method: 'post',
+ params: {
+ devId,
+ paramId,
+ },
+ })
+}
+
+// 为参数减少设备的devId
+export function devparamdelDevId(devId: number, paramId: number) {
+ return request({
+ url: '/devParam/delDevId',
+ method: 'post',
+ params: {
+ devId,
+ paramId,
+ },
+ })
}
\ No newline at end of file
diff --git a/rc_autoplc_front/src/api/tb/flowinfo.ts b/rc_autoplc_front/src/api/tb/flowinfo.ts
new file mode 100644
index 0000000..859448c
--- /dev/null
+++ b/rc_autoplc_front/src/api/tb/flowinfo.ts
@@ -0,0 +1,39 @@
+import request from '@/utils/request'
+
+export function flowInfoadd(data: any) {
+ return request({
+ url: '/flowInfo/add',
+ method: 'post',
+ data,
+ })
+}
+
+export function flowInfodel(id: string | number) {
+ return request({
+ url: `/flowInfo/del/${id}`,
+ method: 'delete',
+ })
+}
+
+export function flowInfoupd(data: any) {
+ return request({
+ url: '/flowInfo/update',
+ method: 'put',
+ data,
+ })
+}
+
+export function flowInfolist(data: any) {
+ return request({
+ url: '/flowInfo/listPage',
+ method: 'get',
+ params: data,
+ })
+}
+
+export function flowInfobyid(id: string | number) {
+ return request({
+ url: `/flowInfo/getById/${id}`,
+ method: 'get',
+ })
+}
\ No newline at end of file
diff --git a/rc_autoplc_front/src/api/tb/goodsflowstatus.ts b/rc_autoplc_front/src/api/tb/goodsflowstatus.ts
new file mode 100644
index 0000000..b36276b
--- /dev/null
+++ b/rc_autoplc_front/src/api/tb/goodsflowstatus.ts
@@ -0,0 +1,47 @@
+import request from '@/utils/request'
+
+export function goodsFlowStatusadd(data: any) {
+ return request({
+ url: '/goodsFlowStatus/add',
+ method: 'post',
+ data,
+ })
+}
+
+export function goodsFlowStatusdel(id: string | number) {
+ return request({
+ url: `/goodsFlowStatus/del/${id}`,
+ method: 'delete',
+ })
+}
+
+export function goodsFlowStatusupd(data: any) {
+ return request({
+ url: '/goodsFlowStatus/update',
+ method: 'put',
+ data,
+ })
+}
+
+export function goodsFlowStatuslist(data: any) {
+ return request({
+ url: '/goodsFlowStatus/listPage',
+ method: 'get',
+ params: data,
+ })
+}
+
+export function goodsFlowStatusselect(data: any) {
+ return request({
+ url: '/goodsFlowStatus/list',
+ method: 'get',
+ params: data,
+ })
+}
+
+export function goodsFlowStatusbyid(id: string | number) {
+ return request({
+ url: `/goodsFlowStatus/getById/${id}`,
+ method: 'get',
+ })
+}
\ No newline at end of file
diff --git a/rc_autoplc_front/src/api/tb/goodsinfo.ts b/rc_autoplc_front/src/api/tb/goodsinfo.ts
new file mode 100644
index 0000000..0c0b42c
--- /dev/null
+++ b/rc_autoplc_front/src/api/tb/goodsinfo.ts
@@ -0,0 +1,39 @@
+import request from '@/utils/request'
+
+export function goodsInfoadd(data: any) {
+ return request({
+ url: '/goodsInfo/add',
+ method: 'post',
+ data,
+ })
+}
+
+export function goodsInfodel(id: string | number) {
+ return request({
+ url: `/goodsInfo/del/${id}`,
+ method: 'delete',
+ })
+}
+
+export function goodsInfoupd(data: any) {
+ return request({
+ url: '/goodsInfo/update',
+ method: 'put',
+ data,
+ })
+}
+
+export function goodsInfolist(data: any) {
+ return request({
+ url: '/goodsInfo/listPage',
+ method: 'get',
+ params: data,
+ })
+}
+
+export function goodsInfobyid(id: string | number) {
+ return request({
+ url: `/goodsInfo/getById/${id}`,
+ method: 'get',
+ })
+}
\ No newline at end of file
diff --git a/rc_autoplc_front/src/api/tb/plcdevicecontrol.ts b/rc_autoplc_front/src/api/tb/plcdevicecontrol.ts
new file mode 100644
index 0000000..4b13387
--- /dev/null
+++ b/rc_autoplc_front/src/api/tb/plcdevicecontrol.ts
@@ -0,0 +1,121 @@
+import request from '@/utils/request'
+
+// 连接PLC设备
+export function plcConnect(data: any) {
+ return request({
+ url: '/plc/connect',
+ method: 'post',
+ params: data
+ })
+}
+
+// 调用PLC设备执行动作
+export function plcDoAction(data: any) {
+ return request({
+ url: '/plc/doAction',
+ method: 'post',
+ params: data
+ })
+}
+
+// 获取全部PLC连接对象
+export function plcGetAll() {
+ return request({
+ url: '/plc/getAll',
+ method: 'get'
+ })
+}
+
+// PLC设备获取模式值
+export function plcGetModel(ipAddr: string) {
+ return request({
+ url: '/plc/getModel',
+ method: 'get',
+ params: { ipAddr }
+ })
+}
+
+// 根据IP地址查询PLC连接对象
+export function plcGetPlcByIp(ipAddr: string) {
+ return request({
+ url: '/plc/getPlcByIp',
+ method: 'get',
+ params: { ipAddr }
+ })
+}
+
+// 暂停运行PLC
+export function plcPause(ipAddr: string) {
+ return request({
+ url: '/plc/pause',
+ method: 'post',
+ params: { ipAddr }
+ })
+}
+
+// PLC设备获取状态值
+export function plcPlcStatus(ipAddr: string) {
+ return request({
+ url: '/plc/plcStatus',
+ method: 'get',
+ params: { ipAddr }
+ })
+}
+
+// 获取主 PLC 状态对象(Swagger: GET /plc/mastertPlcStatus)
+export function masterPlcStatus() {
+ return request({
+ url: '/plc/mastertPlcStatus',
+ method: 'get',
+ })
+}
+
+// 别名:更贴近接口语义
+export function plcMasterPlcStatus() {
+ return masterPlcStatus()
+}
+
+// PLC设备复位故障
+export function plcResetError(ipAddr: string) {
+ return request({
+ url: '/plc/resetError',
+ method: 'post',
+ params: { ipAddr }
+ })
+}
+
+// 运行PLC
+export function plcRun(ipAddr: string) {
+ return request({
+ url: '/plc/run',
+ method: 'post',
+ params: { ipAddr }
+ })
+}
+
+// 为样品执行国标
+export function plcRunFlow(data: any) {
+ return request({
+ url: '/plc/runFlow',
+ method: 'post',
+ params: data
+ })
+}
+
+// PLC设备设置模式
+export function plcSetModel(data: any) {
+ return request({
+ url: '/plc/setModel',
+ method: 'post',
+ params: data
+ })
+}
+
+// 停止PLC
+export function plcStop(ipAddr: string) {
+ return request({
+ url: '/plc/stop',
+ method: 'post',
+ params: { ipAddr }
+ })
+}
\ No newline at end of file
diff --git a/rc_autoplc_front/src/api/tb/stepinfo.ts b/rc_autoplc_front/src/api/tb/stepinfo.ts
new file mode 100644
index 0000000..934741e
--- /dev/null
+++ b/rc_autoplc_front/src/api/tb/stepinfo.ts
@@ -0,0 +1,63 @@
+import request from '@/utils/request'
+
+export function stepInfoadd(data: any) {
+ return request({
+ url: '/stepInfo/add',
+ method: 'post',
+ data,
+ })
+}
+
+export function stepInfoaddlist(data: any) {
+ return request({
+ url: '/stepInfo/batchAdd',
+ method: 'post',
+ data,
+ })
+}
+
+export function stepInfodel(id: string | number) {
+ return request({
+ url: `/stepInfo/del/${id}`,
+ method: 'delete',
+ })
+}
+
+export function stepInfodellist(data: any[]) {
+ return request({
+ url: '/stepInfo/batchDel',
+ method: 'delete',
+ data
+ })
+}
+
+export function stepInfoupd(data: any) {
+ return request({
+ url: '/stepInfo/update',
+ method: 'put',
+ data,
+ })
+}
+
+export function stepInfoupdlist(data: any) {
+ return request({
+ url: '/stepInfo/batchUpdate',
+ method: 'post',
+ data,
+ })
+}
+
+export function stepInfolist(data: any) {
+ return request({
+ url: '/stepInfo/listPage',
+ method: 'get',
+ params: data,
+ })
+}
+
+export function stepInfobyid(id: string | number) {
+ return request({
+ url: `/stepInfo/getById/${id}`,
+ method: 'get',
+ })
+}
\ No newline at end of file
diff --git a/rc_autoplc_front/src/assets/image/plc.jpg b/rc_autoplc_front/src/assets/image/plc.jpg
new file mode 100644
index 0000000..ac88816
Binary files /dev/null and b/rc_autoplc_front/src/assets/image/plc.jpg differ
diff --git a/rc_autoplc_front/src/router/index.ts b/rc_autoplc_front/src/router/index.ts
index 3604ca3..2ebc19d 100644
--- a/rc_autoplc_front/src/router/index.ts
+++ b/rc_autoplc_front/src/router/index.ts
@@ -1,12 +1,30 @@
-import { createRouter, createWebHistory } from 'vue-router'
+import { createRouter, createWebHashHistory } from 'vue-router'
+import { useAuthStore } from '@/stores/auth'
+import { ElMessage } from 'element-plus'
const router = createRouter({
- history: createWebHistory(import.meta.env.BASE_URL),
+ history: createWebHashHistory(import.meta.env.BASE_URL),
routes: [
+ {
+ path: '/login',
+ name: 'login',
+ component: () => import('../views/Login.vue'),
+ meta: { requiresAuth: false },
+ },
{
path: '/',
component: () => import('../views/Layout.vue'),
+ meta: { requiresAuth: true },
children: [
+ {
+ path: '',
+ redirect: '/home',
+ },
+ {
+ path: '/home',
+ name: 'home',
+ component: () => import('../views/Home.vue'),
+ },
{
path: '/user',
name: 'user',
@@ -22,6 +40,11 @@ const router = createRouter({
name: 'department',
component: () => import('../views/department/index.vue'),
},
+ {
+ path: '/permission',
+ name: 'permission',
+ component: () => import('../views/permission/index.vue'),
+ },
{
path: '/position',
name: 'position',
@@ -42,6 +65,11 @@ const router = createRouter({
name: 'island-info',
component: () => import('../views/islandInfo/index.vue'),
},
+ {
+ path: '/devparam',
+ name: 'devparam',
+ component: () => import('../views/devparam/index.vue'),
+ },
{
path: '/devinfo',
name: 'devinfo',
@@ -52,20 +80,69 @@ const router = createRouter({
name: 'plc-devinfo',
component: () => import('../views/devinfo/plc.vue'),
},
+ {
+ path: '/goods-info',
+ name: 'goods-info',
+ component: () => import('../views/goods/index.vue'),
+ },
+ {
+ path: '/flow-info',
+ name: 'flow-info',
+ component: () => import('../views/flowinfo/index.vue'),
+ },
+ {
+ path: '/step-info',
+ name: 'step-info',
+ component: () => import('../views/stepinfo/index.vue'),
+ },
+ {
+ path: '/plc-device-control',
+ name: 'plc-device-control',
+ component: () => import('../views/plcdevicecontrol/index.vue'),
+ },
+ {
+ path: '/sample-injection',
+ name: 'sample-injection',
+ component: () => import('../views/sampleinjection/index.vue'),
+ },
],
},
],
})
// 添加全局路由守卫
-// router.beforeEach((to, from, next) => {
-// const token = localStorage.getItem('token')
+router.beforeEach((to, _from, next) => {
+ const authStore = useAuthStore()
+ const token = authStore.getToken()
-// if (to.path !== '/login' && !token) {
-// next('/login')
-// } else {
-// next()
-// }
-// })
+ // 如果访问登录页
+ if (to.path === '/login') {
+ // 已登录状态下访问登录页,自动跳转到首页
+ if (token) {
+ next('/home')
+ ElMessage.success('已登录,自动跳转')
+ } else {
+ // 未登录,正常进入登录页
+ next()
+ }
+ return
+ }
+
+ // 访问需要认证的页面,但未登录(无token)
+ if (to.meta.requiresAuth && !token) {
+ ElMessage.warning('请先登录')
+ next('/login')
+ return
+ }
+
+ // 如果访问根路径,重定向到首页
+ if (to.path === '/') {
+ next('/home')
+ return
+ }
+
+ // 已登录且访问合法页面,正常放行
+ next()
+})
export default router
diff --git a/rc_autoplc_front/src/router/permission.ts b/rc_autoplc_front/src/router/permission.ts
deleted file mode 100644
index 0968c2e..0000000
--- a/rc_autoplc_front/src/router/permission.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-// import router from './index' // 导入你的路由实例(与index.ts对应)
-// import { ElMessage } from 'element-plus'
-// import { useAuthStore } from '@/stores/auth' // 你的Pinia auth store路径
-
-// // 路由前置守卫:每次路由跳转前执行
-// router.beforeEach((to, from, next) => {
-// const authStore = useAuthStore() // 获取auth store实例
-// const token = authStore.getToken() // 调用你的getToken()方法获取token
-
-// // 1. 如果访问登录页
-// if (to.path === '/login') {
-// // 已登录状态下访问登录页,自动跳转到首页/dashboard
-// if (token) {
-// next('/dashboard')
-// ElMessage.success('已登录,自动跳转')
-// } else {
-// // 未登录,正常进入登录页
-// next()
-// }
-// return
-// }
-
-// // 2. 访问非登录页,但未登录(无token)
-// if (!token) {
-// ElMessage.warning('请先登录')
-// next('/login') // 强制跳转到登录页
-// return
-// }
-
-// // 3. 访问根路径,自动跳转到dashboard
-// if (to.path === '/') {
-// next('/dashboard')
-// return
-// }
-
-// // 4. 已登录且访问合法页面,正常放行
-// next()
-// })
\ No newline at end of file
diff --git a/rc_autoplc_front/src/utils/request.ts b/rc_autoplc_front/src/utils/request.ts
index 8dcb4f3..d1c3c14 100644
--- a/rc_autoplc_front/src/utils/request.ts
+++ b/rc_autoplc_front/src/utils/request.ts
@@ -30,6 +30,38 @@ const TokenManager = {
// 删除默认请求头
delete request.defaults.headers.common['Authorization']
},
+
+ // 初始化token(应用启动时调用)
+ initToken() {
+ const token = this.getToken()
+ if (token) {
+ request.defaults.headers.common['Authorization'] = `Bearer ${token}`
+ }
+ },
+}
+
+// 应用启动时初始化token
+TokenManager.initToken()
+
+// 登录过期提示防重复标志
+let isLoginExpiredShown = false
+
+// 处理登录过期(防重复提示)
+const handleLoginExpired = () => {
+ if (!isLoginExpiredShown) {
+ isLoginExpiredShown = true
+ // 清除token
+ TokenManager.removeToken()
+ // 显示提示消息
+ ElMessage.error('登录已过期,请重新登录')
+ // 跳转到登录页
+ router.replace('/login').finally(() => {
+ // 延迟重置标志位,确保跳转完成后再允许下次提示
+ setTimeout(() => {
+ isLoginExpiredShown = false
+ }, 1000)
+ })
+ }
}
// 请求拦截器
@@ -61,28 +93,65 @@ request.interceptors.response.use(
// 处理业务错误码
if (data.code === 302) {
- // 清除token
- TokenManager.removeToken()
- // 跳转到登录页
- router.replace('/login')
+ // 处理登录过期(防重复提示)
+ handleLoginExpired()
return Promise.reject(data)
}
// 其他错误码
if (data.code !== 0 && data.code !== undefined) {
- ElMessage.error(data.message || data.msg || '请求失败')
+ // 检查是否是状态刷新相关的请求,如果是则静默处理某些错误
+ const url = response.config?.url || ''
+ const isStatusRefreshRequest = url.includes('/plc/plcStatus') || url.includes('/plc/getModel')
+ const errorMsg = data.message || data.msg || ''
+
+ // 如果是状态刷新请求,且错误消息包含特定关键词,则静默处理
+ if (isStatusRefreshRequest && (
+ errorMsg.includes('停止失败') ||
+ errorMsg.includes('未连接') ||
+ errorMsg.includes('连接失败') ||
+ errorMsg.includes('获取状态失败') ||
+ errorMsg.includes('获取模式失败')
+ )) {
+ // 静默处理,不弹出错误提示
+ console.debug('状态刷新请求错误(已静默处理):', errorMsg)
+ return Promise.reject(data)
+ }
+
+ ElMessage.error(errorMsg || '请求失败')
return Promise.reject(data)
}
return data
},
(error) => {
+ // 处理401未授权错误
+ if (error.response?.status === 401) {
+ // 处理登录过期(防重复提示)
+ handleLoginExpired()
+ return Promise.reject(error)
+ }
+
+ // 检查是否是状态刷新相关的请求
+ const url = error.config?.url || ''
+ const isStatusRefreshRequest = url.includes('/plc/plcStatus') || url.includes('/plc/getModel')
+ const errorMsg = error.response?.data?.message || error.response?.data?.msg || '请求失败'
+
+ // 如果是状态刷新请求,且错误消息包含特定关键词,则静默处理
+ if (isStatusRefreshRequest && (
+ errorMsg.includes('停止失败') ||
+ errorMsg.includes('未连接') ||
+ errorMsg.includes('连接失败') ||
+ errorMsg.includes('获取状态失败') ||
+ errorMsg.includes('获取模式失败')
+ )) {
+ // 静默处理,不弹出错误提示
+ console.debug('状态刷新请求错误(已静默处理):', errorMsg)
+ return Promise.reject(error)
+ }
+
// 网络错误或其他错误
- ElMessage.error(
- error.response?.data?.message ||
- error.response?.data?.msg ||
- '请求失败'
- )
+ ElMessage.error(errorMsg)
return Promise.reject(error)
}
)
diff --git a/rc_autoplc_front/src/views/Home.vue b/rc_autoplc_front/src/views/Home.vue
new file mode 100644
index 0000000..a8aadd4
--- /dev/null
+++ b/rc_autoplc_front/src/views/Home.vue
@@ -0,0 +1,56 @@
+
+
+
+
欢迎使用中核404内照射上位机中控系统
+
+
+
+
+
+
+
diff --git a/rc_autoplc_front/src/views/Layout.vue b/rc_autoplc_front/src/views/Layout.vue
index 44daf7b..5ea5e63 100644
--- a/rc_autoplc_front/src/views/Layout.vue
+++ b/rc_autoplc_front/src/views/Layout.vue
@@ -3,7 +3,7 @@