From bb4e78ef97d2020fcd2323d58a8df783ad58f4bc Mon Sep 17 00:00:00 2001 From: callmeyan Date: Sat, 7 May 2022 09:37:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E7=9B=AE=E5=BD=95=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=88=97=E8=A1=A8;=E5=B0=81=E8=A3=85=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E8=AF=B7=E6=B1=82=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 81 +++++++++++ .idea/vcs.xml | 6 + driver/pom.xml | 24 ++-- .../longicorn/driver/DriverApplication.java | 1 + .../longicorn/driver/config/BizException.java | 3 + .../driver/config/SwaggerConfiguration.java | 80 +++++++++++ .../longicorn/driver/config/WebConfig.java | 6 +- .../driver/controller/FolderController.java | 19 ++- .../xyz/longicorn/driver/dto/ApiResult.java | 34 +++++ driver/src/main/resources/application.yml | 8 ++ web/index.html | 2 +- web/package-lock.json | 109 +++++++++++++- web/package.json | 1 + web/src/Main.vue | 135 +++++++++--------- web/src/components/FileIcon.vue | 2 +- web/src/service/api.js | 69 +++++++++ web/src/service/type.d.ts | 1 + 17 files changed, 493 insertions(+), 88 deletions(-) create mode 100644 README.md create mode 100644 .idea/vcs.xml create mode 100644 driver/src/main/java/xyz/longicorn/driver/config/SwaggerConfiguration.java create mode 100644 driver/src/main/java/xyz/longicorn/driver/dto/ApiResult.java create mode 100644 web/src/service/api.js create mode 100644 web/src/service/type.d.ts diff --git a/ README.md b/ README.md new file mode 100644 index 0000000..15f8f19 --- /dev/null +++ b/ README.md @@ -0,0 +1,81 @@ +## 六 天牛网盘 +### 6.1 数据字典 + +#### 用户信息 + +#### 文件信息 + +编号、用户编号、文件名、目录编号 、类型、大小、位置、创建时间、状态、hash + +#### 目录信息 + +编号、用户编号、目录名称、上级目录编号、目录路径、创建时间、状态 + +#### 分享信息 + +编号、用户编号、分享的数据编号、分类类型(file|folder)、提取码、分享有效期、状态 + +### 6.2 技术架构 + +```shell +# 安装前端ui框架 +npm i element-plus @element-plus/icons-vue less less-loader +``` + +### 6.3 后端项目 + +```yaml +# 应用名称 +spring: + application: + name: Driver + # 数据库 + datasource: + name: defaultDataSource + url: jdbc:mysql://localhost:3306/net_driver?serverTimezone=Asia/Shanghai + driver-class-name: com.mysql.cj.jdbc.Driver + username: root + password: 123456 + # 添加druid数据库连接池 + type: com.alibaba.druid.pool.DruidDataSource + #数据源配置 + druid: + max-active: 1000 + initial-size: 10 + max-wait: 1000 + min-idle: 10 + time-between-eviction-runs-millis: 60000 + min-evictable-idle-time-millis: 300000 + validation-query: select 1 + test-while-idle: true + test-on-borrow: false + test-on-return: false + max-pool-prepared-statement-per-connection-size: 0 + + #监控 + stat-view-servlet: + url-pattern: /druid/* + reset-enable: false + login-username: admin + login-password: admin + allow: 127.0.0.1 + # 是否启用 + enabled: true + web-stat-filter: + url-pattern: /* + exclusions: /druid/*,*.js,*.css,*.html,*.png,*.jpg + # redis缓存 + redis: + database: 1 +# 应用服务 WEB 访问端口 +server: + port: 8080 +# Actuator Web 访问端口 +#management.server.port=8081 +#management.endpoints.jmx.exposure.include=* +#management.endpoints.web.exposure.include=* +#management.endpoint.health.show-details=always + + +``` + diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/driver/pom.xml b/driver/pom.xml index 6762a14..e0091c0 100644 --- a/driver/pom.xml +++ b/driver/pom.xml @@ -21,10 +21,10 @@ org.springframework.boot spring-boot-starter-actuator - - - - + + + + org.springframework.boot spring-boot-starter-data-redis @@ -74,11 +74,17 @@ spring-boot-starter-test test - - - - - + + + io.springfox + springfox-boot-starter + 3.0.0 + + + + + + diff --git a/driver/src/main/java/xyz/longicorn/driver/DriverApplication.java b/driver/src/main/java/xyz/longicorn/driver/DriverApplication.java index fe54168..a0c7fab 100644 --- a/driver/src/main/java/xyz/longicorn/driver/DriverApplication.java +++ b/driver/src/main/java/xyz/longicorn/driver/DriverApplication.java @@ -2,6 +2,7 @@ package xyz.longicorn.driver; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; @SpringBootApplication public class DriverApplication { diff --git a/driver/src/main/java/xyz/longicorn/driver/config/BizException.java b/driver/src/main/java/xyz/longicorn/driver/config/BizException.java index c5cff25..3e45bee 100644 --- a/driver/src/main/java/xyz/longicorn/driver/config/BizException.java +++ b/driver/src/main/java/xyz/longicorn/driver/config/BizException.java @@ -1,5 +1,8 @@ package xyz.longicorn.driver.config; +import lombok.Data; + +@Data public class BizException extends RuntimeException { private int code; diff --git a/driver/src/main/java/xyz/longicorn/driver/config/SwaggerConfiguration.java b/driver/src/main/java/xyz/longicorn/driver/config/SwaggerConfiguration.java new file mode 100644 index 0000000..e6b14fd --- /dev/null +++ b/driver/src/main/java/xyz/longicorn/driver/config/SwaggerConfiguration.java @@ -0,0 +1,80 @@ +package xyz.longicorn.driver.config; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.util.ReflectionUtils; +import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.oas.annotations.EnableOpenApi; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.Contact; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.spring.web.plugins.WebFluxRequestHandlerProvider; +import springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider; + +import java.lang.reflect.Field; +import java.util.List; +import java.util.stream.Collectors; + +@Configuration +@EnableOpenApi +public class SwaggerConfiguration { + + // 创建api文档信息 + @Bean + public Docket createRestApi() { + return new Docket(DocumentationType.SWAGGER_2) + .apiInfo(apiInfo()) + .select() + .apis(RequestHandlerSelectors.basePackage("xyz.longicorn.driver.controller")) + .paths(PathSelectors.any()) + .build(); + } + + // API的信息 + private ApiInfo apiInfo() { + return new ApiInfoBuilder().title("天牛网盘 API文档").description("天牛网盘 API文档") + .contact(new Contact("老王", "https://driver.longicorn.xyz/documents", "api@longicorn.xyz")) + .version("1.0").build(); + } + + + // 解决swagger nullpointer + @Bean + public static BeanPostProcessor springfoxHandlerProviderBeanPostProcessor() { + return new BeanPostProcessor() { + + @Override + public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { + if (bean instanceof WebMvcRequestHandlerProvider || bean instanceof WebFluxRequestHandlerProvider) { + customizeSpringfoxHandlerMappings(getHandlerMappings(bean)); + } + return bean; + } + + private void customizeSpringfoxHandlerMappings(List mappings) { + List copy = mappings.stream() + .filter(mapping -> mapping.getPatternParser() == null) + .collect(Collectors.toList()); + mappings.clear(); + mappings.addAll(copy); + } + + @SuppressWarnings("unchecked") + private List getHandlerMappings(Object bean) { + try { + Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings"); + field.setAccessible(true); + return (List) field.get(bean); + } catch (IllegalArgumentException | IllegalAccessException e) { + throw new IllegalStateException(e); + } + } + }; + } +} \ No newline at end of file diff --git a/driver/src/main/java/xyz/longicorn/driver/config/WebConfig.java b/driver/src/main/java/xyz/longicorn/driver/config/WebConfig.java index 34bb630..5d5a811 100644 --- a/driver/src/main/java/xyz/longicorn/driver/config/WebConfig.java +++ b/driver/src/main/java/xyz/longicorn/driver/config/WebConfig.java @@ -1,10 +1,12 @@ package xyz.longicorn.driver.config; +import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; 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 public class WebConfig implements WebMvcConfigurer { @Override @@ -13,7 +15,9 @@ public class WebConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { - + //映射static路径的请求到static目录下 +// registry.addResourceHandler("/static/**") +// .addResourceLocations("classpath:/static/"); } @Override diff --git a/driver/src/main/java/xyz/longicorn/driver/controller/FolderController.java b/driver/src/main/java/xyz/longicorn/driver/controller/FolderController.java index 99cce47..664c9f7 100644 --- a/driver/src/main/java/xyz/longicorn/driver/controller/FolderController.java +++ b/driver/src/main/java/xyz/longicorn/driver/controller/FolderController.java @@ -1,8 +1,13 @@ package xyz.longicorn.driver.controller; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import xyz.longicorn.driver.dto.ApiResult; import xyz.longicorn.driver.pojo.FolderInfo; import xyz.longicorn.driver.service.FolderService; @@ -11,13 +16,21 @@ import java.util.List; @RestController @RequestMapping("/api/folder") +@Api("目录操作") public class FolderController { @Resource private FolderService folderService; @RequestMapping("/list") - // 查询相应目录下的所有文件(夹)信息 - public List listFolder(@RequestParam(required = false, defaultValue = "/") String folderPath) { - return folderService.listFolder(1, folderPath); + //接口文档的名称 + @ApiOperation(value = "查询目录信息", notes = "查询相应目录下的所有文件(夹)信息",httpMethod = "GET") + public ApiResult listFolder(@RequestParam(required = false, defaultValue = "/") String folderPath) { + return ApiResult.success(folderService.listFolder(1, folderPath)); + } + + // 创建目录 + @ApiOperation(value = "创建目录", notes = "创建目录1") + public FolderInfo create(String parent, String name) { + return null; } } diff --git a/driver/src/main/java/xyz/longicorn/driver/dto/ApiResult.java b/driver/src/main/java/xyz/longicorn/driver/dto/ApiResult.java new file mode 100644 index 0000000..666a17e --- /dev/null +++ b/driver/src/main/java/xyz/longicorn/driver/dto/ApiResult.java @@ -0,0 +1,34 @@ +package xyz.longicorn.driver.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; +import lombok.experimental.Accessors; +import xyz.longicorn.driver.config.BizException; + +import java.io.Serializable; +import java.util.Date; + +@Data +@Accessors(chain = true) +@ToString +@AllArgsConstructor +@NoArgsConstructor +public class ApiResult implements Serializable { + private int code; + private String message; + private Object data; + + public static ApiResult success(Object data) { + return new ApiResult(0, "success", data); + } + + public static ApiResult error(int code, String message) { + return new ApiResult(code, message, null); + } + + public static ApiResult error(BizException e) { + return new ApiResult(e.getCode(), e.getMessage(), null); + } +} diff --git a/driver/src/main/resources/application.yml b/driver/src/main/resources/application.yml index c6e3bd9..30468f0 100644 --- a/driver/src/main/resources/application.yml +++ b/driver/src/main/resources/application.yml @@ -40,6 +40,14 @@ spring: # redis缓存 redis: database: 1 + + mvc: + pathmatch: + # 因为Springfox使用的路径匹配是基于AntPathMatcher的,而Spring Boot 2.6.X使用的是PathPatternMatcher。 + matching-strategy: ant_path_matcher +springfox: + documentation: + enabled: true # 应用服务 WEB 访问端口 server: port: 8080 diff --git a/web/index.html b/web/index.html index 030a6ff..2ad38c2 100644 --- a/web/index.html +++ b/web/index.html @@ -4,7 +4,7 @@ - Vite App + 天牛网盘
diff --git a/web/package-lock.json b/web/package-lock.json index e599e6e..31a2c35 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -12,6 +12,7 @@ "element-plus": "^2.1.11", "less": "^4.1.2", "less-loader": "^10.2.0", + "qs": "^6.10.3", "vue": "^3.2.25", "vue-router": "^4.0.15" }, @@ -514,6 +515,15 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "peer": true }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001336", "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001336.tgz", @@ -1079,8 +1089,17 @@ "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } }, "node_modules/glob-to-regexp": { "version": "0.4.1", @@ -1097,7 +1116,6 @@ "version": "1.0.3", "resolved": "https://registry.npmmirror.com/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -1114,6 +1132,14 @@ "node": ">=8" } }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -1377,6 +1403,11 @@ "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.1.2.tgz", "integrity": "sha512-scX83plWJXYH1J4+BhAuIHadROzxX0UBF3+HuZNY2Ks8BciE7tSTQ+5JhTsvzjaO0/EJdm4JBGrfObKxFf3Png==" }, + "node_modules/object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==" + }, "node_modules/parse-node-version": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/parse-node-version/-/parse-node-version-1.0.1.tgz", @@ -1433,6 +1464,17 @@ "node": ">=6" } }, + "node_modules/qs": { + "version": "6.10.3", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + } + }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz", @@ -1521,6 +1563,16 @@ "randombytes": "^2.1.0" } }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", @@ -2264,6 +2316,15 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "peer": true }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "caniuse-lite": { "version": "1.0.30001336", "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001336.tgz", @@ -2607,8 +2668,17 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } }, "glob-to-regexp": { "version": "0.4.1", @@ -2625,7 +2695,6 @@ "version": "1.0.3", "resolved": "https://registry.npmmirror.com/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -2636,6 +2705,11 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "peer": true }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -2835,6 +2909,11 @@ "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.1.2.tgz", "integrity": "sha512-scX83plWJXYH1J4+BhAuIHadROzxX0UBF3+HuZNY2Ks8BciE7tSTQ+5JhTsvzjaO0/EJdm4JBGrfObKxFf3Png==" }, + "object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==" + }, "parse-node-version": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/parse-node-version/-/parse-node-version-1.0.1.tgz", @@ -2879,6 +2958,14 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "peer": true }, + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "requires": { + "side-channel": "^1.0.4" + } + }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz", @@ -2952,6 +3039,16 @@ "randombytes": "^2.1.0" } }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", diff --git a/web/package.json b/web/package.json index 848976c..3200035 100644 --- a/web/package.json +++ b/web/package.json @@ -12,6 +12,7 @@ "element-plus": "^2.1.11", "less": "^4.1.2", "less-loader": "^10.2.0", + "qs": "^6.10.3", "vue": "^3.2.25", "vue-router": "^4.0.15" }, diff --git a/web/src/Main.vue b/web/src/Main.vue index 79f07e5..c2ea036 100644 --- a/web/src/Main.vue +++ b/web/src/Main.vue @@ -1,80 +1,55 @@ - -