From 94d755e5101c739865e77372fa6b00b1b9c331c1 Mon Sep 17 00:00:00 2001 From: 19972076849 <3504229115@qq.com> Date: Mon, 1 Sep 2025 09:44:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=9C=80=E7=BB=88=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SeKeshedemo/.idea/.gitignore | 8 - SeKeshedemo/.idea/compiler.xml | 19 - SeKeshedemo/.idea/encodings.xml | 6 - SeKeshedemo/.idea/jarRepositories.xml | 20 - SeKeshedemo/.idea/misc.xml | 14 - SeKeshedemo/.idea/uiDesigner.xml | 124 - SeKeshedemo/.idea/workspace.xml | 126 - .../.mvn/wrapper/maven-wrapper.properties | 19 - SeKeshedemo/pom.xml | 109 - .../com/example/demo/Demo4Application.java | 13 - .../com/example/demo/config/MyFilter.java | 64 - .../demo/controller/ArticleController.java | 58 - .../demo/controller/BorrowController.java | 68 - .../demo/controller/BorrowRankController.java | 33 - .../demo/controller/UserController.java | 131 - .../example/demo/mapper/ArticleMapper.java | 42 - .../com/example/demo/mapper/BorrowMapper.java | 62 - .../example/demo/mapper/BorrowRankMapper.java | 44 - .../com/example/demo/mapper/UserMapper.java | 63 - .../java/com/example/demo/pojo/Article.java | 15 - .../example/demo/pojo/ArticleRentRankDTO.java | 11 - .../java/com/example/demo/pojo/Borrow.java | 13 - .../java/com/example/demo/pojo/Result.java | 31 - .../main/java/com/example/demo/pojo/User.java | 17 - .../main/java/com/example/demo/pojo/info.java | 9 - .../example/demo/service/ArticleService.java | 18 - .../demo/service/BorrowRankService.java | 28 - .../example/demo/service/BorrowService.java | 14 - .../com/example/demo/service/UserService.java | 20 - .../demo/service/impl/ArticleServiceImpl.java | 47 - .../demo/service/impl/BorrowServiceImpl.java | 35 - .../demo/service/impl/UserServiceImpl.java | 58 - .../java/com/example/demo/utils/JwtUtil.java | 30 - .../java/com/example/demo/utils/Md5Util.java | 73 - .../src/main/resources/application.properties | 25 - .../example/demo/Demo4ApplicationTests.java | 13 - .../target/classes/application.properties | 25 - .../com/example/demo/Demo4Application.class | Bin 736 -> 0 bytes .../com/example/demo/config/MyFilter.class | Bin 3307 -> 0 bytes .../demo/controller/ArticleController.class | Bin 4040 -> 0 bytes .../demo/controller/BorrowController.class | Bin 3043 -> 0 bytes .../controller/BorrowRankController.class | Bin 1173 -> 0 bytes .../demo/controller/UserController.class | Bin 6886 -> 0 bytes .../example/demo/mapper/ArticleMapper.class | Bin 1553 -> 0 bytes .../example/demo/mapper/BorrowMapper.class | Bin 1756 -> 0 bytes .../demo/mapper/BorrowRankMapper.class | Bin 1142 -> 0 bytes .../com/example/demo/mapper/UserMapper.class | Bin 2260 -> 0 bytes .../com/example/demo/pojo/Article.class | Bin 4117 -> 0 bytes .../demo/pojo/ArticleRentRankDTO.class | Bin 3393 -> 0 bytes .../com/example/demo/pojo/Borrow.class | Bin 3499 -> 0 bytes .../com/example/demo/pojo/Result.class | Bin 4241 -> 0 bytes .../classes/com/example/demo/pojo/User.class | Bin 5784 -> 0 bytes .../classes/com/example/demo/pojo/info.class | Bin 2323 -> 0 bytes .../example/demo/service/ArticleService.class | Bin 700 -> 0 bytes .../demo/service/BorrowRankService.class | Bin 942 -> 0 bytes .../example/demo/service/BorrowService.class | Bin 247 -> 0 bytes .../example/demo/service/UserService.class | Bin 622 -> 0 bytes .../service/impl/ArticleServiceImpl.class | Bin 2292 -> 0 bytes .../demo/service/impl/BorrowServiceImpl.class | Bin 1223 -> 0 bytes .../demo/service/impl/UserServiceImpl.class | Bin 1917 -> 0 bytes .../com/example/demo/utils/JwtUtil.class | Bin 2193 -> 0 bytes .../com/example/demo/utils/Md5Util.class | Bin 2953 -> 0 bytes library_system/.gitignore | 24 - library_system/.vscode/extensions.json | 3 - library_system/README.md | 5 - library_system/index.html | 13 - library_system/package-lock.json | 2498 ----------------- library_system/package.json | 26 - library_system/public/vite.svg | 1 - library_system/src/App.vue | 71 - library_system/src/assets/style.css | 62 - library_system/src/assets/vue.svg | 1 - library_system/src/components/BookCard.vue | 88 - library_system/src/components/HeaderBar.vue | 249 -- library_system/src/main.js | 25 - library_system/src/router/index.js | 131 - library_system/src/store/index.js | 370 --- library_system/src/utils/date.js | 16 - library_system/src/utils/request.js | 73 - library_system/src/utils/storage.js | 43 - .../src/views/Admin/AllBorrowRecords.vue | 148 - .../src/views/Admin/BookManagement.vue | 188 -- library_system/src/views/Auth/Login.vue | 133 - library_system/src/views/Auth/Register.vue | 156 - library_system/src/views/Books/AddBook.vue | 141 - library_system/src/views/Books/BookDetail.vue | 186 -- library_system/src/views/Books/BookList.vue | 202 -- library_system/src/views/Books/EditBook.vue | 3 - .../src/views/Borrow/BorrowBook.vue | 142 - .../src/views/Borrow/ReturnBook.vue | 155 - library_system/src/views/Home.vue | 164 -- .../src/views/Ranking/MonthlyRank.vue | 114 - .../src/views/Ranking/WeeklyRank.vue | 113 - .../src/views/User/BorrowRecords.vue | 96 - library_system/src/views/User/Profile.vue | 122 - library_system/src/views/User/Recharge.vue | 135 - library_system/vite.config.js | 13 - library_system/文档.md | 170 -- src/assets/style.css | 62 - src/assets/vue.svg | 1 - src/components/BookCard.vue | 88 - src/components/HeaderBar.vue | 249 -- src/main.js | 25 - src/router/index.js | 131 - src/store/index.js | 370 --- src/utils/date.js | 16 - src/utils/request.js | 73 - src/utils/storage.js | 43 - src/views/Admin/AllBorrowRecords.vue | 148 - src/views/Admin/BookManagement.vue | 188 -- src/views/Auth/Login.vue | 133 - src/views/Auth/Register.vue | 156 - src/views/Books/AddBook.vue | 141 - src/views/Books/BookDetail.vue | 186 -- src/views/Books/BookList.vue | 202 -- src/views/Books/EditBook.vue | 3 - src/views/Borrow/BorrowBook.vue | 142 - src/views/Borrow/ReturnBook.vue | 155 - src/views/Home.vue | 164 -- src/views/Ranking/MonthlyRank.vue | 114 - src/views/Ranking/WeeklyRank.vue | 113 - src/views/User/BorrowRecords.vue | 96 - src/views/User/Profile.vue | 122 - src/views/User/Recharge.vue | 129 - 124 files changed, 10835 deletions(-) delete mode 100644 SeKeshedemo/.idea/.gitignore delete mode 100644 SeKeshedemo/.idea/compiler.xml delete mode 100644 SeKeshedemo/.idea/encodings.xml delete mode 100644 SeKeshedemo/.idea/jarRepositories.xml delete mode 100644 SeKeshedemo/.idea/misc.xml delete mode 100644 SeKeshedemo/.idea/uiDesigner.xml delete mode 100644 SeKeshedemo/.idea/workspace.xml delete mode 100644 SeKeshedemo/.mvn/wrapper/maven-wrapper.properties delete mode 100644 SeKeshedemo/pom.xml delete mode 100644 SeKeshedemo/src/main/java/com/example/demo/Demo4Application.java delete mode 100644 SeKeshedemo/src/main/java/com/example/demo/config/MyFilter.java delete mode 100644 SeKeshedemo/src/main/java/com/example/demo/controller/ArticleController.java delete mode 100644 SeKeshedemo/src/main/java/com/example/demo/controller/BorrowController.java delete mode 100644 SeKeshedemo/src/main/java/com/example/demo/controller/BorrowRankController.java delete mode 100644 SeKeshedemo/src/main/java/com/example/demo/controller/UserController.java delete mode 100644 SeKeshedemo/src/main/java/com/example/demo/mapper/ArticleMapper.java delete mode 100644 SeKeshedemo/src/main/java/com/example/demo/mapper/BorrowMapper.java delete mode 100644 SeKeshedemo/src/main/java/com/example/demo/mapper/BorrowRankMapper.java delete mode 100644 SeKeshedemo/src/main/java/com/example/demo/mapper/UserMapper.java delete mode 100644 SeKeshedemo/src/main/java/com/example/demo/pojo/Article.java delete mode 100644 SeKeshedemo/src/main/java/com/example/demo/pojo/ArticleRentRankDTO.java delete mode 100644 SeKeshedemo/src/main/java/com/example/demo/pojo/Borrow.java delete mode 100644 SeKeshedemo/src/main/java/com/example/demo/pojo/Result.java delete mode 100644 SeKeshedemo/src/main/java/com/example/demo/pojo/User.java delete mode 100644 SeKeshedemo/src/main/java/com/example/demo/pojo/info.java delete mode 100644 SeKeshedemo/src/main/java/com/example/demo/service/ArticleService.java delete mode 100644 SeKeshedemo/src/main/java/com/example/demo/service/BorrowRankService.java delete mode 100644 SeKeshedemo/src/main/java/com/example/demo/service/BorrowService.java delete mode 100644 SeKeshedemo/src/main/java/com/example/demo/service/UserService.java delete mode 100644 SeKeshedemo/src/main/java/com/example/demo/service/impl/ArticleServiceImpl.java delete mode 100644 SeKeshedemo/src/main/java/com/example/demo/service/impl/BorrowServiceImpl.java delete mode 100644 SeKeshedemo/src/main/java/com/example/demo/service/impl/UserServiceImpl.java delete mode 100644 SeKeshedemo/src/main/java/com/example/demo/utils/JwtUtil.java delete mode 100644 SeKeshedemo/src/main/java/com/example/demo/utils/Md5Util.java delete mode 100644 SeKeshedemo/src/main/resources/application.properties delete mode 100644 SeKeshedemo/src/test/java/com/example/demo/Demo4ApplicationTests.java delete mode 100644 SeKeshedemo/target/classes/application.properties delete mode 100644 SeKeshedemo/target/classes/com/example/demo/Demo4Application.class delete mode 100644 SeKeshedemo/target/classes/com/example/demo/config/MyFilter.class delete mode 100644 SeKeshedemo/target/classes/com/example/demo/controller/ArticleController.class delete mode 100644 SeKeshedemo/target/classes/com/example/demo/controller/BorrowController.class delete mode 100644 SeKeshedemo/target/classes/com/example/demo/controller/BorrowRankController.class delete mode 100644 SeKeshedemo/target/classes/com/example/demo/controller/UserController.class delete mode 100644 SeKeshedemo/target/classes/com/example/demo/mapper/ArticleMapper.class delete mode 100644 SeKeshedemo/target/classes/com/example/demo/mapper/BorrowMapper.class delete mode 100644 SeKeshedemo/target/classes/com/example/demo/mapper/BorrowRankMapper.class delete mode 100644 SeKeshedemo/target/classes/com/example/demo/mapper/UserMapper.class delete mode 100644 SeKeshedemo/target/classes/com/example/demo/pojo/Article.class delete mode 100644 SeKeshedemo/target/classes/com/example/demo/pojo/ArticleRentRankDTO.class delete mode 100644 SeKeshedemo/target/classes/com/example/demo/pojo/Borrow.class delete mode 100644 SeKeshedemo/target/classes/com/example/demo/pojo/Result.class delete mode 100644 SeKeshedemo/target/classes/com/example/demo/pojo/User.class delete mode 100644 SeKeshedemo/target/classes/com/example/demo/pojo/info.class delete mode 100644 SeKeshedemo/target/classes/com/example/demo/service/ArticleService.class delete mode 100644 SeKeshedemo/target/classes/com/example/demo/service/BorrowRankService.class delete mode 100644 SeKeshedemo/target/classes/com/example/demo/service/BorrowService.class delete mode 100644 SeKeshedemo/target/classes/com/example/demo/service/UserService.class delete mode 100644 SeKeshedemo/target/classes/com/example/demo/service/impl/ArticleServiceImpl.class delete mode 100644 SeKeshedemo/target/classes/com/example/demo/service/impl/BorrowServiceImpl.class delete mode 100644 SeKeshedemo/target/classes/com/example/demo/service/impl/UserServiceImpl.class delete mode 100644 SeKeshedemo/target/classes/com/example/demo/utils/JwtUtil.class delete mode 100644 SeKeshedemo/target/classes/com/example/demo/utils/Md5Util.class delete mode 100644 library_system/.gitignore delete mode 100644 library_system/.vscode/extensions.json delete mode 100644 library_system/README.md delete mode 100644 library_system/index.html delete mode 100644 library_system/package-lock.json delete mode 100644 library_system/package.json delete mode 100644 library_system/public/vite.svg delete mode 100644 library_system/src/App.vue delete mode 100644 library_system/src/assets/style.css delete mode 100644 library_system/src/assets/vue.svg delete mode 100644 library_system/src/components/BookCard.vue delete mode 100644 library_system/src/components/HeaderBar.vue delete mode 100644 library_system/src/main.js delete mode 100644 library_system/src/router/index.js delete mode 100644 library_system/src/store/index.js delete mode 100644 library_system/src/utils/date.js delete mode 100644 library_system/src/utils/request.js delete mode 100644 library_system/src/utils/storage.js delete mode 100644 library_system/src/views/Admin/AllBorrowRecords.vue delete mode 100644 library_system/src/views/Admin/BookManagement.vue delete mode 100644 library_system/src/views/Auth/Login.vue delete mode 100644 library_system/src/views/Auth/Register.vue delete mode 100644 library_system/src/views/Books/AddBook.vue delete mode 100644 library_system/src/views/Books/BookDetail.vue delete mode 100644 library_system/src/views/Books/BookList.vue delete mode 100644 library_system/src/views/Books/EditBook.vue delete mode 100644 library_system/src/views/Borrow/BorrowBook.vue delete mode 100644 library_system/src/views/Borrow/ReturnBook.vue delete mode 100644 library_system/src/views/Home.vue delete mode 100644 library_system/src/views/Ranking/MonthlyRank.vue delete mode 100644 library_system/src/views/Ranking/WeeklyRank.vue delete mode 100644 library_system/src/views/User/BorrowRecords.vue delete mode 100644 library_system/src/views/User/Profile.vue delete mode 100644 library_system/src/views/User/Recharge.vue delete mode 100644 library_system/vite.config.js delete mode 100644 library_system/文档.md delete mode 100644 src/assets/style.css delete mode 100644 src/assets/vue.svg delete mode 100644 src/components/BookCard.vue delete mode 100644 src/components/HeaderBar.vue delete mode 100644 src/main.js delete mode 100644 src/router/index.js delete mode 100644 src/store/index.js delete mode 100644 src/utils/date.js delete mode 100644 src/utils/request.js delete mode 100644 src/utils/storage.js delete mode 100644 src/views/Admin/AllBorrowRecords.vue delete mode 100644 src/views/Admin/BookManagement.vue delete mode 100644 src/views/Auth/Login.vue delete mode 100644 src/views/Auth/Register.vue delete mode 100644 src/views/Books/AddBook.vue delete mode 100644 src/views/Books/BookDetail.vue delete mode 100644 src/views/Books/BookList.vue delete mode 100644 src/views/Books/EditBook.vue delete mode 100644 src/views/Borrow/BorrowBook.vue delete mode 100644 src/views/Borrow/ReturnBook.vue delete mode 100644 src/views/Home.vue delete mode 100644 src/views/Ranking/MonthlyRank.vue delete mode 100644 src/views/Ranking/WeeklyRank.vue delete mode 100644 src/views/User/BorrowRecords.vue delete mode 100644 src/views/User/Profile.vue delete mode 100644 src/views/User/Recharge.vue diff --git a/SeKeshedemo/.idea/.gitignore b/SeKeshedemo/.idea/.gitignore deleted file mode 100644 index 463c03e..0000000 --- a/SeKeshedemo/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# ĬϺԵļ -/shelf/ -/workspace.xml -# ڱ༭ HTTP ͻ -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml diff --git a/SeKeshedemo/.idea/compiler.xml b/SeKeshedemo/.idea/compiler.xml deleted file mode 100644 index bfc71e1..0000000 --- a/SeKeshedemo/.idea/compiler.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/SeKeshedemo/.idea/encodings.xml b/SeKeshedemo/.idea/encodings.xml deleted file mode 100644 index 63e9001..0000000 --- a/SeKeshedemo/.idea/encodings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/SeKeshedemo/.idea/jarRepositories.xml b/SeKeshedemo/.idea/jarRepositories.xml deleted file mode 100644 index 712ab9d..0000000 --- a/SeKeshedemo/.idea/jarRepositories.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/SeKeshedemo/.idea/misc.xml b/SeKeshedemo/.idea/misc.xml deleted file mode 100644 index 88aa9a7..0000000 --- a/SeKeshedemo/.idea/misc.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/SeKeshedemo/.idea/uiDesigner.xml b/SeKeshedemo/.idea/uiDesigner.xml deleted file mode 100644 index 2b63946..0000000 --- a/SeKeshedemo/.idea/uiDesigner.xml +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/SeKeshedemo/.idea/workspace.xml b/SeKeshedemo/.idea/workspace.xml deleted file mode 100644 index a045fe5..0000000 --- a/SeKeshedemo/.idea/workspace.xml +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - { - "keyToString": { - "RequestMappingsPanelOrder0": "0", - "RequestMappingsPanelOrder1": "1", - "RequestMappingsPanelWidth0": "75", - "RequestMappingsPanelWidth1": "75", - "RunOnceActivity.OpenProjectViewOnStart": "true", - "RunOnceActivity.ShowReadmeOnStart": "true", - "WebServerToolWindowFactoryState": "false", - "last_opened_file_path": "D:/2025666/SeKeshedemo/src/main/java/com/example/demo", - "node.js.detected.package.eslint": "true", - "node.js.detected.package.tslint": "true", - "node.js.selected.package.eslint": "(autodetect)", - "node.js.selected.package.tslint": "(autodetect)", - "nodejs_package_manager_path": "npm", - "spring.configuration.checksum": "fe01ce2a7fbac8fafaed7c982a04e229", - "vue.rearranger.settings.migration": "true" - } -} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1753251776913 - - - - - - - - - - file://$PROJECT_DIR$/src/main/java/com/example/demo/controller/UserController.java - 127 - - - - - - - \ No newline at end of file diff --git a/SeKeshedemo/.mvn/wrapper/maven-wrapper.properties b/SeKeshedemo/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index 12fbe1e..0000000 --- a/SeKeshedemo/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1,19 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -wrapperVersion=3.3.2 -distributionType=only-script -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.11/apache-maven-3.9.11-bin.zip diff --git a/SeKeshedemo/pom.xml b/SeKeshedemo/pom.xml deleted file mode 100644 index 1c6089d..0000000 --- a/SeKeshedemo/pom.xml +++ /dev/null @@ -1,109 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 3.4.2 - - - com.example - demo - 0.0.1-SNAPSHOT - jar - demo - demo - - - - - - - - - - - - - - - 17 - - - - org.springframework.boot - spring-boot-starter-thymeleaf - - - org.springframework.boot - spring-boot-starter-web - - - - - - - - - org.springframework.boot - spring-boot-starter-web-services - - - org.mybatis.spring.boot - mybatis-spring-boot-starter - 3.0.4 - - - - com.mysql - mysql-connector-j - runtime - - - org.springframework.boot - spring-boot-starter-tomcat - provided - - - org.springframework.boot - spring-boot-starter-test - test - - - org.mybatis.spring.boot - mybatis-spring-boot-starter-test - 3.0.4 - test - - - org.projectlombok - lombok - - - com.auth0 - java-jwt - 4.4.0 - - - - org.apache.tomcat - tomcat-jdbc - - - - - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - diff --git a/SeKeshedemo/src/main/java/com/example/demo/Demo4Application.java b/SeKeshedemo/src/main/java/com/example/demo/Demo4Application.java deleted file mode 100644 index 0344102..0000000 --- a/SeKeshedemo/src/main/java/com/example/demo/Demo4Application.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.example.demo; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class Demo4Application { - - public static void main(String[] args) { - SpringApplication.run(Demo4Application.class, args); - } - -} diff --git a/SeKeshedemo/src/main/java/com/example/demo/config/MyFilter.java b/SeKeshedemo/src/main/java/com/example/demo/config/MyFilter.java deleted file mode 100644 index 05a6e96..0000000 --- a/SeKeshedemo/src/main/java/com/example/demo/config/MyFilter.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.example.demo.config; - -import com.example.demo.pojo.Result; -import com.fasterxml.jackson.databind.ObjectMapper; -import jakarta.servlet.*; -import jakarta.servlet.annotation.WebFilter; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import org.springframework.stereotype.Component; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -@Component -//重点 -@WebFilter({"/user/*","/api","/upload","/borrow","/api/rank"}) -public class MyFilter implements Filter{ - - List exclude; - - @Override - public void init(FilterConfig filterConfig) throws ServletException { - System.out.println("初始化MyFilter=========================="); - exclude = new ArrayList<>(); - exclude.add("/user/login"); - exclude.add("/user/register"); - } - @Override - public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { - HttpServletResponse response = (HttpServletResponse) servletResponse; - HttpServletRequest request = (HttpServletRequest) servletRequest; - String requestURI = request.getRequestURI(); - if (exclude.contains(requestURI) || - requestURI.endsWith(".html") || - requestURI.endsWith(".js") || - requestURI.endsWith(".css") || - requestURI.endsWith(".png") || - requestURI.endsWith(".jpg") || - requestURI.endsWith(".jpeg") - ) { - // 在排除列表中,继续过滤链 - filterChain.doFilter(servletRequest,servletResponse); - return; - } - - boolean loginflag = request.getSession().getAttribute("username") != null; - if(loginflag){ - //登陆成功 - //这就代码就是放行 - filterChain.doFilter(servletRequest, servletResponse); - }else{ - //登陆失败,打回请求 - ObjectMapper mapper = new ObjectMapper(); - response.getWriter().write(mapper.writeValueAsString(Result.error("未登录"))); - } - - System.out.println("filter=========================="); - } - @Override - public void destroy() { - System.out.println("销毁filter=========================="); - } -} diff --git a/SeKeshedemo/src/main/java/com/example/demo/controller/ArticleController.java b/SeKeshedemo/src/main/java/com/example/demo/controller/ArticleController.java deleted file mode 100644 index a5b6da0..0000000 --- a/SeKeshedemo/src/main/java/com/example/demo/controller/ArticleController.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.example.demo.controller; - -import com.example.demo.mapper.UserMapper; -import com.example.demo.pojo.Article; -import com.example.demo.pojo.Result; -import com.example.demo.service.ArticleService; -import com.fasterxml.jackson.core.JsonProcessingException; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpSession; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -@RestController -@CrossOrigin -@RequestMapping("/api") -public class ArticleController { - - - @Autowired - ArticleService articleService; - - @Autowired - UserMapper userMapper; - - @PostMapping("/add") - public Result
addarticle(@RequestBody Article article, HttpSession session) throws JsonProcessingException { - System.out.println("Received article: " + article); // 添加此行以调试 - int admin = userMapper.findByUserName(String.valueOf(session.getAttribute("username"))).getAdmin(); - if (admin == 1) { - articleService.addarticle(article); - return Result.success(article); - } - else{ - return Result.error("权限不够。。。"); - } - } - - @GetMapping("/select") - public Result selectarticle(HttpServletRequest request) { - List
articles = articleService.selectarticle(); - System.out.println(request.getRequestURL()); - return Result.success(articles); - } - - - - //根据书籍名字搜索单个书籍信息 - @GetMapping("/selectone") - public Result
selectone(String title){ - Article article= articleService.selectonearticle(title); - return Result.success(article); - } - - - -} diff --git a/SeKeshedemo/src/main/java/com/example/demo/controller/BorrowController.java b/SeKeshedemo/src/main/java/com/example/demo/controller/BorrowController.java deleted file mode 100644 index bd6f248..0000000 --- a/SeKeshedemo/src/main/java/com/example/demo/controller/BorrowController.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.example.demo.controller; - -import com.example.demo.mapper.BorrowMapper; -import com.example.demo.pojo.Article; -import com.example.demo.pojo.Borrow; -import com.example.demo.pojo.Result; -import com.example.demo.service.ArticleService; -import com.example.demo.service.BorrowService; - -import com.example.demo.service.UserService; -import jakarta.servlet.http.HttpSession; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.time.LocalDateTime; - -@RestController -@CrossOrigin -@RequestMapping("/borrow") -public class BorrowController { - @Autowired - private BorrowService borrowService; - - @Autowired - private UserService userService; - - @Autowired - private ArticleService articleService; - @Autowired - private BorrowMapper borrowMapper; - - - //租借书 - @PostMapping("/borrowbook") - public Result borrowbook(String title, HttpSession session) { - Borrow borrow = new Borrow(); - borrow.setTitle(title); - borrow.setBorrower((String) session.getAttribute("username")); - borrow.setBorrow_time(LocalDateTime.now()); - Article article = articleService.selectonearticle(title); - float money = article.getMoney(); - float balance = userService.findmoney(session.getAttribute("username")); - if (balance >= money) { - borrowService.borrow(borrow); - userService.deduct(money,session.getAttribute("username")); - return Result.success(borrow); - } - else{ - return Result.error("余额不足!"); - } - } - - - //还书 - @PostMapping("/returnbook") - public Result returnbook(String title, HttpSession session){ - Borrow borrow=new Borrow(); - borrow.setTitle(title); - borrow.setBorrower((String) session.getAttribute("username")); - borrow.setReturn_time(LocalDateTime.now()); - borrowService.returnbook(borrow); - borrowMapper.fine(); - return Result.success(borrow); - } -} diff --git a/SeKeshedemo/src/main/java/com/example/demo/controller/BorrowRankController.java b/SeKeshedemo/src/main/java/com/example/demo/controller/BorrowRankController.java deleted file mode 100644 index 7b522bb..0000000 --- a/SeKeshedemo/src/main/java/com/example/demo/controller/BorrowRankController.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.example.demo.controller; - -import com.example.demo.pojo.ArticleRentRankDTO; -import com.example.demo.service.BorrowRankService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -import java.util.List; - -@RestController -@RequestMapping("/api/rank") -public class BorrowRankController { - - @Autowired - private BorrowRankService borrowRankService; - - /** - * 本周热租榜单接口 - */ - @GetMapping("/weekly") - public List weeklyRank() { - return borrowRankService.getWeeklyRank(); - } - - /** - * 本月热租榜单接口 - */ - @GetMapping("/monthly") - public List monthlyRank() { - return borrowRankService.getMonthlyRank(); - } -} \ No newline at end of file diff --git a/SeKeshedemo/src/main/java/com/example/demo/controller/UserController.java b/SeKeshedemo/src/main/java/com/example/demo/controller/UserController.java deleted file mode 100644 index 8d35b18..0000000 --- a/SeKeshedemo/src/main/java/com/example/demo/controller/UserController.java +++ /dev/null @@ -1,131 +0,0 @@ -package com.example.demo.controller; - - -import com.example.demo.mapper.BorrowMapper; -import com.example.demo.mapper.UserMapper; -import com.example.demo.pojo.*; -import com.example.demo.service.ArticleService; -import com.example.demo.service.UserService; -import jakarta.servlet.http.HttpSession; -import org.apache.ibatis.annotations.Delete; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - - -@CrossOrigin(origins = "http://localhost:8877") -@RestController -@RequestMapping("/user") - -public class UserController { - - @Autowired - private UserService userService; - @Autowired - private UserMapper userMapper; - - @Autowired - private BorrowMapper borrowMapper; - - @Autowired - private ArticleService articleService; - -//获取用户登陆信息 - @GetMapping("/getinfo") - public ResponseEntity getInfo(HttpSession session) { - String username = (String) session.getAttribute("username"); - if (username == null) { - return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("{\"error\": \"Username not found in session\"}"); - } - info info = userService.getinfo(username); - System.out.println(info); - if (info == null) { - return ResponseEntity.status(HttpStatus.NOT_FOUND).body("{\"error\": \"User information not found for username: " + username + "\"}"); - } - return ResponseEntity.ok(info); - } - - - //注册 - @PostMapping("/register") - public Result register(String username, String password) { - User u = userService.findByUserName(username); - if (u == null) { - userService.register(username, password); - return Result.success(); - } else { - return Result.error("该用户名已被注册"); - } - } - //登陆 - @PostMapping("/login") - public Result login(String username, String password,HttpSession session) { - User u = userService.findByUserName(username); - if (u != null) { - userService.login(username, password); - String pass=userMapper.login(username); - - if (password.equals(pass)) { - session.setAttribute("username",username); - System.out.println("登陆成功!"); - return Result.success("登陆成功!"); - } else { - //这里已经处理好了 - return Result.error("账号或密码错误!"); - } - } else { - return null; - } - } -//充值金额 - @PostMapping("/recharge") - public Result recharge(float money,HttpSession session){ - userService.recharge(money, (String) session.getAttribute("username")); - return Result.success("成功充值:"+money+"元"); - } - - //查询金额+VIP - @PostMapping("/findmoney") - public Result findmoney(HttpSession session){ - float balance=userService.findmoney(session.getAttribute("username")); - userMapper.updateVIP(balance,(String) session.getAttribute("username")); - int VIP=userMapper.findVIP((String) session.getAttribute("username")); - return Result.success("余额为:"+balance+"元"+" 当前VIP等级为:"+VIP); - } - - //查询个人借书记录 - @GetMapping("findone") - public Result findone(HttpSession session){ - User user=userMapper.findByUserName((String) session.getAttribute("username")); - int admin=user.getAdmin(); - if(admin==1){ - List borrow=borrowMapper.findall(); - return Result.success(borrow); - } - else{ - Borrow borrow=borrowMapper.findone(user.getUsername()); - return Result.success(borrow); - } - } - - //管理员删除书籍 - @PostMapping("delete") - public Result delete(String title,HttpSession session) { - int admin = userMapper.findByUserName((String) session.getAttribute("username")).getAdmin(); - if (admin == 1) { - userMapper.deletebook(title); - return Result.success("该书本已删除!"); - } - else{ - return Result.error("权限不够。。。"); - } - } - - @GetMapping("/borrow/books") - public Result> getUserBorrowedBooks(HttpSession session) { - return Result.success(articleService.getUserBorrowedBooks((String) session.getAttribute("username"))); - } -} \ No newline at end of file diff --git a/SeKeshedemo/src/main/java/com/example/demo/mapper/ArticleMapper.java b/SeKeshedemo/src/main/java/com/example/demo/mapper/ArticleMapper.java deleted file mode 100644 index 134d6b1..0000000 --- a/SeKeshedemo/src/main/java/com/example/demo/mapper/ArticleMapper.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.example.demo.mapper; - - -import com.example.demo.pojo.Article; -import org.apache.ibatis.annotations.*; - -import java.util.List; - -@Mapper -public interface ArticleMapper { - - @Insert("INSERT INTO article (title, content, url, state)\n" + - "VALUES \n" + - "(#{title}, #{content}, #{url},#{state})") - @Options(useGeneratedKeys = true, keyColumn = "id", keyProperty = "id") - Long addarticle(Article article); - - - //查询所有书籍所有信息 - @Select("SELECT * FROM article") - List
selectarticle(); - - //查询 - -//管理员删除书籍 - @Delete("DELETE FROM article WHERE id = #{id}") - Integer deleteArticle(Long id); - - //查询单本书 - @Select("SELECT * from article where title=#{title}") - Article selectonearticle(String title); - - - @Select("SELECT a.* " + - "FROM article a " + - "INNER JOIN borrow b ON a.title = b.title " + - "INNER JOIN user u ON b.borrower = u.username " + - "WHERE u.username = #{username} " + - "AND b.borrow_time IS NOT NULL " + - "AND b.return_time IS NULL") - List
findBorrowedBooksByUsername(String username); -} diff --git a/SeKeshedemo/src/main/java/com/example/demo/mapper/BorrowMapper.java b/SeKeshedemo/src/main/java/com/example/demo/mapper/BorrowMapper.java deleted file mode 100644 index 8560fec..0000000 --- a/SeKeshedemo/src/main/java/com/example/demo/mapper/BorrowMapper.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.example.demo.mapper; - -import com.example.demo.pojo.Article; -import com.example.demo.pojo.Borrow; -import org.apache.ibatis.annotations.Insert; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Select; -import org.apache.ibatis.annotations.Update; - -import java.util.List; - -@Mapper -public interface BorrowMapper { - //借书 - @Insert("INSERT INTO borrow (title, borrower, borrow_time)\n" + - "VALUES \n" + - "(#{title}, #{borrower}, now())") - void borrowrecord(Borrow borrow); - - // 更新对应物品的被租数量(number+1) - @Update("UPDATE article " + - "SET number = number + 1 " + - "WHERE title = #{title}") - void incrementArticleNumber(String title); - -//还书 - @Insert("INSERT INTO borrow (title, borrower, return_time)\n" + - "VALUES \n" + - "(#{title}, #{borrower}, now())") - void returnrecord(Borrow borrow); - - //超过一个月罚金扣20元 - @Update("UPDATE user\n" + - "SET balance = balance - 20\n" + - "WHERE username IN (\n" + - " SELECT username\n" + - " FROM borrow\n" + - " WHERE DATEDIFF(CURRENT_DATE(), borrow_time) > 30\n" + - ");") - void fine(); - - //查询还借书记录(所有) - @Select("select * from borrow") - List findall(); - - //查询还书记录(个人) - @Select("select * from borrow where borrower=#{username}") - Borrow findone(String username); - - - //查询个人已经借的书的所有信息 - @Select("SELECT a.* " + - "FROM article a " + - "INNER JOIN borrow b ON a.title = b.title " + - "INNER JOIN user u ON b.borrower = u.username " + - "WHERE u.username = #{username} " + - "AND b.borrow_time IS NOT NULL " + - "AND b.return_time IS NULL") - List
findBorrowedBooksByUsername(String username); - - -} diff --git a/SeKeshedemo/src/main/java/com/example/demo/mapper/BorrowRankMapper.java b/SeKeshedemo/src/main/java/com/example/demo/mapper/BorrowRankMapper.java deleted file mode 100644 index 4e824eb..0000000 --- a/SeKeshedemo/src/main/java/com/example/demo/mapper/BorrowRankMapper.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.example.demo.mapper; - -import com.example.demo.pojo.ArticleRentRankDTO; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Select; -import java.util.List; - -@Mapper -public interface BorrowRankMapper { - - /** - * 查询本周热租榜单(Top10) - */ - @Select("SELECT " + - "b.title, " + - "a.url, " + - "a.money, " + - "COUNT(b.title) AS number " + - "FROM borrow b " + - "LEFT JOIN article a ON b.title = a.title " + - "WHERE b.borrow_time >= DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) " + - "AND b.borrow_time < DATE_ADD(DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY), INTERVAL 7 DAY) " + - "GROUP BY b.title, a.url, a.money " + - "ORDER BY number DESC " + - "LIMIT 10") - List listWeeklyRank(); - - /** - * 查询本月热租榜单(Top10) - */ - @Select("SELECT " + - "b.title, " + - "a.url, " + - "a.money, " + - "COUNT(b.title) AS number " + - "FROM borrow b " + - "LEFT JOIN article a ON b.title = a.title " + - "WHERE b.borrow_time >= DATE_FORMAT(CURDATE(), '%Y-%m-01') " + - "AND b.borrow_time < DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-%m-01'), INTERVAL 1 MONTH) " + - "GROUP BY b.title, a.url, a.money " + - "ORDER BY number DESC " + - "LIMIT 10") - List listMonthlyRank(); -} \ No newline at end of file diff --git a/SeKeshedemo/src/main/java/com/example/demo/mapper/UserMapper.java b/SeKeshedemo/src/main/java/com/example/demo/mapper/UserMapper.java deleted file mode 100644 index 9686fb8..0000000 --- a/SeKeshedemo/src/main/java/com/example/demo/mapper/UserMapper.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.example.demo.mapper; - - -import com.example.demo.pojo.User; -import com.example.demo.pojo.info; -import org.apache.ibatis.annotations.*; - -@Mapper -public interface UserMapper { - @Select("select * from user where username=#{username}") - User findByUserName(String username); - - @Insert("insert into user(username,password,vip,create_time,update_time,admin,balance)" + - " values(#{username},#{password},#{vip},now(),now(),#{admin},#{balance})") - void add(String username,String password,int vip,int admin,float balance); - - @Select("SELECT password FROM user WHERE username=#{username}") - String login(String username); - - - @Select("select username,pic from user where username=#{username}") - info getinfo( String username); - - - //充钱 - @Update("UPDATE user\n" + - "SET balance=balance+#{money1}\n" + - "WHERE username=#{username};") - void recharge(float money1,String username); - - - //查询余额 - @Select("select balance from user where username=#{username}") - float findbalance(Object username); - - //更新VIP余额 - @Update("UPDATE `user`\n" + - "SET `vip` = CASE\n" + - " WHEN `balance` >= 10 AND `balance` < 30 THEN '1'\n" + - " WHEN `balance` >= 30 AND `balance` < 100 THEN '2'\n" + - " WHEN `balance` >= 100 AND `balance` < 300 THEN '3'\n" + - " WHEN `balance` >= 300 AND `balance` < 500 THEN '4'\n" + - " WHEN `balance` >= 500 THEN '5'\n" + - " ELSE `vip` -- 不满足条件的记录保持原有vip值\n" + - "END\n" + - "WHERE `username` = #{username};") - void updateVIP( float balance,String username); - - @Select("select vip from user where username=#{username}") - int findVIP(String username); - - //扣钱 - @Update("UPDATE user\n" + - "SET balance=balance-#{money1}\n" + - "WHERE username=#{username};") - void deduct(float money1,String username); - - //管理员删除书 - @Delete("DELETE FROM article WHERE title=#{title}") - void deletebook(String title); - - -} diff --git a/SeKeshedemo/src/main/java/com/example/demo/pojo/Article.java b/SeKeshedemo/src/main/java/com/example/demo/pojo/Article.java deleted file mode 100644 index e39fcc3..0000000 --- a/SeKeshedemo/src/main/java/com/example/demo/pojo/Article.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.example.demo.pojo; - - -import lombok.Data; - -@Data -public class Article { - private int id; - private String title; - private String content; - private String url; - private String state; - private float money; - private int number; -} diff --git a/SeKeshedemo/src/main/java/com/example/demo/pojo/ArticleRentRankDTO.java b/SeKeshedemo/src/main/java/com/example/demo/pojo/ArticleRentRankDTO.java deleted file mode 100644 index f40c651..0000000 --- a/SeKeshedemo/src/main/java/com/example/demo/pojo/ArticleRentRankDTO.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.example.demo.pojo; - -import lombok.Data; - -@Data -public class ArticleRentRankDTO { - private String title; // 物品名称 - private String url; // 封面图片 - private Float money; // 租借价格 - private Integer number; // 租借次数 -} \ No newline at end of file diff --git a/SeKeshedemo/src/main/java/com/example/demo/pojo/Borrow.java b/SeKeshedemo/src/main/java/com/example/demo/pojo/Borrow.java deleted file mode 100644 index 9db0a1d..0000000 --- a/SeKeshedemo/src/main/java/com/example/demo/pojo/Borrow.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.example.demo.pojo; - -import lombok.Data; - -import java.time.LocalDateTime; - -@Data -public class Borrow { - private String title; - private String borrower; - private LocalDateTime borrow_time; - private LocalDateTime return_time; -} diff --git a/SeKeshedemo/src/main/java/com/example/demo/pojo/Result.java b/SeKeshedemo/src/main/java/com/example/demo/pojo/Result.java deleted file mode 100644 index 9605aec..0000000 --- a/SeKeshedemo/src/main/java/com/example/demo/pojo/Result.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.example.demo.pojo; - - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - -//统一响应结果 -@NoArgsConstructor -@AllArgsConstructor -@Data -public class Result { - private Integer code;//业务状态码 0-成功 1-失败,前端获取到这个code就可以判断了 - private String message;//提示信息 - private T data;//响应数据 - - //快速返回操作成功响应结果(带响应数据) - public static Result success(E data) { - return new Result<>(200, "操作成功", data); - } - - //快速返回操作成功响应结果 - public static Result success() { - return new Result(200, "操作成功", null); - } - - public static Result error(String message) { - return new Result(1, message, null); - } - -} diff --git a/SeKeshedemo/src/main/java/com/example/demo/pojo/User.java b/SeKeshedemo/src/main/java/com/example/demo/pojo/User.java deleted file mode 100644 index 820ce38..0000000 --- a/SeKeshedemo/src/main/java/com/example/demo/pojo/User.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.example.demo.pojo; - -import lombok.Data; - -import java.time.LocalDateTime; -@Data -public class User { - private Integer id; - private String username; - private String password; - private String vip; - private String userPic; - private LocalDateTime createTime; - private LocalDateTime updateTime; - private Integer admin; - private float balance; -} diff --git a/SeKeshedemo/src/main/java/com/example/demo/pojo/info.java b/SeKeshedemo/src/main/java/com/example/demo/pojo/info.java deleted file mode 100644 index 8aa8d91..0000000 --- a/SeKeshedemo/src/main/java/com/example/demo/pojo/info.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.example.demo.pojo; - -import lombok.Data; - -@Data -public class info { - private String username; - private String pic; -} diff --git a/SeKeshedemo/src/main/java/com/example/demo/service/ArticleService.java b/SeKeshedemo/src/main/java/com/example/demo/service/ArticleService.java deleted file mode 100644 index 32723d7..0000000 --- a/SeKeshedemo/src/main/java/com/example/demo/service/ArticleService.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.example.demo.service; - -import com.example.demo.pojo.Article; - -import java.util.List; - -public interface ArticleService { - Long addarticle(Article article); - - List
selectarticle(); - - List
getUserBorrowedBooks(String username); - - boolean deletearticle(Long id); - - Article selectonearticle(String title); -} - diff --git a/SeKeshedemo/src/main/java/com/example/demo/service/BorrowRankService.java b/SeKeshedemo/src/main/java/com/example/demo/service/BorrowRankService.java deleted file mode 100644 index 6bce2d3..0000000 --- a/SeKeshedemo/src/main/java/com/example/demo/service/BorrowRankService.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.example.demo.service; - -import com.example.demo.mapper.BorrowRankMapper; -import com.example.demo.pojo.ArticleRentRankDTO; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import java.util.List; - -@Service -public class BorrowRankService { - - @Autowired // 改用Spring的@Autowired注解 - private BorrowRankMapper borrowRankMapper; - - /** - * 获取本周热租榜单 - */ - public List getWeeklyRank() { - return borrowRankMapper.listWeeklyRank(); - } - - /** - * 获取本月热租榜单 - */ - public List getMonthlyRank() { - return borrowRankMapper.listMonthlyRank(); - } -} \ No newline at end of file diff --git a/SeKeshedemo/src/main/java/com/example/demo/service/BorrowService.java b/SeKeshedemo/src/main/java/com/example/demo/service/BorrowService.java deleted file mode 100644 index 2189cd0..0000000 --- a/SeKeshedemo/src/main/java/com/example/demo/service/BorrowService.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.example.demo.service; - -import com.example.demo.mapper.BorrowMapper; -import com.example.demo.pojo.Borrow; -import org.springframework.beans.factory.annotation.Autowired; - -public interface BorrowService { - - - void borrow(Borrow borrow); - - void returnbook(Borrow borrow); - -} \ No newline at end of file diff --git a/SeKeshedemo/src/main/java/com/example/demo/service/UserService.java b/SeKeshedemo/src/main/java/com/example/demo/service/UserService.java deleted file mode 100644 index 1443d55..0000000 --- a/SeKeshedemo/src/main/java/com/example/demo/service/UserService.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.example.demo.service; - -import com.example.demo.pojo.User; -import com.example.demo.pojo.info; - -public interface UserService { - User findByUserName(String username); - - void register(String username, String password); - - void login(String username, String password); - - info getinfo(String username); - - void recharge(float money, String username); - - float findmoney(Object username); - - void deduct(float money, Object username); -} diff --git a/SeKeshedemo/src/main/java/com/example/demo/service/impl/ArticleServiceImpl.java b/SeKeshedemo/src/main/java/com/example/demo/service/impl/ArticleServiceImpl.java deleted file mode 100644 index 420d740..0000000 --- a/SeKeshedemo/src/main/java/com/example/demo/service/impl/ArticleServiceImpl.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.example.demo.service.impl; - -import com.example.demo.mapper.ArticleMapper; -import com.example.demo.pojo.Article; -import com.example.demo.service.ArticleService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -public class ArticleServiceImpl implements ArticleService { - - - @Autowired - ArticleMapper articleMapper; - @Override - public Long addarticle(Article article) { - - return articleMapper.addarticle(article); - } - - @Override - public List
selectarticle() { - return articleMapper.selectarticle(); - } - - @Override - public boolean deletearticle(Long id) { - final Integer integer = articleMapper.deleteArticle((long) Math.toIntExact(id)); - return integer == 1; - } - - @Override - public Article selectonearticle(String title) { - return articleMapper.selectonearticle(title); - } - - @Override - public List
getUserBorrowedBooks(String username) { - // 可添加参数校验(如用户名非空) - if (username == null || username.trim().isEmpty()) { - throw new IllegalArgumentException("用户名不能为空"); - } - return articleMapper.findBorrowedBooksByUsername(username); - } -} diff --git a/SeKeshedemo/src/main/java/com/example/demo/service/impl/BorrowServiceImpl.java b/SeKeshedemo/src/main/java/com/example/demo/service/impl/BorrowServiceImpl.java deleted file mode 100644 index 38f3618..0000000 --- a/SeKeshedemo/src/main/java/com/example/demo/service/impl/BorrowServiceImpl.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.example.demo.service.impl; - - -import com.example.demo.mapper.BorrowMapper; -import com.example.demo.pojo.Article; -import com.example.demo.pojo.Borrow; -import com.example.demo.service.BorrowService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -@Service -public class BorrowServiceImpl implements BorrowService { - - @Autowired - BorrowMapper borrowMapper ; - - @Transactional - public void borrow(Borrow borrow) { - // 1. 新增租借记录 - borrowMapper.borrowrecord(borrow); - // 2. 对应物品的number+1(根据title关联) - borrowMapper.incrementArticleNumber(borrow.getTitle()); - } - - - @Override - public void returnbook(Borrow borrow) { - borrowMapper.returnrecord(borrow); - } - - -} diff --git a/SeKeshedemo/src/main/java/com/example/demo/service/impl/UserServiceImpl.java b/SeKeshedemo/src/main/java/com/example/demo/service/impl/UserServiceImpl.java deleted file mode 100644 index 3d3dd30..0000000 --- a/SeKeshedemo/src/main/java/com/example/demo/service/impl/UserServiceImpl.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.example.demo.service.impl; - - -import com.example.demo.mapper.UserMapper; -import com.example.demo.pojo.User; -import com.example.demo.pojo.info; -import com.example.demo.service.UserService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -@Service -public class UserServiceImpl implements UserService { - - @Autowired - private UserMapper userMapper; - - - - - @Override - public User findByUserName(String username) { - User u=userMapper.findByUserName(username); - return u; - } - - @Override - public void register(String username, String password) { - userMapper.add(username,password,0,0,0); - } - - @Override - public void login(String username, String password) { - - - } - - - - public info getinfo(String username) { - return userMapper.getinfo(username); - } - - @Override - public void recharge(float money, String username) { - userMapper.recharge(money,username); - } - - @Override - public float findmoney(Object username) { - return userMapper.findbalance(username); - } - - @Override - public void deduct(float money,Object name) { - userMapper.deduct(money, (String) name); - } - -} diff --git a/SeKeshedemo/src/main/java/com/example/demo/utils/JwtUtil.java b/SeKeshedemo/src/main/java/com/example/demo/utils/JwtUtil.java deleted file mode 100644 index 425b01a..0000000 --- a/SeKeshedemo/src/main/java/com/example/demo/utils/JwtUtil.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.example.demo.utils; - -import com.auth0.jwt.JWT; -import com.auth0.jwt.algorithms.Algorithm; - -import java.util.Date; -import java.util.Map; - -public class JwtUtil { - - private static final String KEY = "itheima"; - - //接收业务数据,生成token并返回 - public static String genToken(Map claims) { - return JWT.create() - .withClaim("claims", claims) - .withExpiresAt(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 12)) - .sign(Algorithm.HMAC256(KEY)); - } - - //接收token,验证token,并返回业务数据 - public static Map parseToken(String token) { - return JWT.require(Algorithm.HMAC256(KEY)) - .build() - .verify(token) - .getClaim("claims") - .asMap(); - } - -} diff --git a/SeKeshedemo/src/main/java/com/example/demo/utils/Md5Util.java b/SeKeshedemo/src/main/java/com/example/demo/utils/Md5Util.java deleted file mode 100644 index 002c882..0000000 --- a/SeKeshedemo/src/main/java/com/example/demo/utils/Md5Util.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.example.demo.utils; - - -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; - -public class Md5Util { - /** - * 默认的密码字符串组合,用来将字节转换成 16 进制表示的字符,apache校验下载的文件的正确性用的就是默认的这个组合 - */ - protected static char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; - - protected static MessageDigest messagedigest = null; - - static { - try { - messagedigest = MessageDigest.getInstance("MD5"); - } catch (NoSuchAlgorithmException nsaex) { - System.err.println(Md5Util.class.getName() + "初始化失败,MessageDigest不支持MD5Util。"); - nsaex.printStackTrace(); - } - } - - /** - * 生成字符串的md5校验值 - * - * @param s - * @return - */ - public static String getMD5String(String s) { - return getMD5String(s.getBytes()); - } - - /** - * 判断字符串的md5校验码是否与一个已知的md5码相匹配 - * - * @param password 要校验的字符串 - * @param md5PwdStr 已知的md5校验码 - * @return - */ - public static boolean checkPassword(String password, String md5PwdStr) { - String s = getMD5String(password); - return s.equals(md5PwdStr); - } - - - public static String getMD5String(byte[] bytes) { - messagedigest.update(bytes); - return bufferToHex(messagedigest.digest()); - } - - private static String bufferToHex(byte bytes[]) { - return bufferToHex(bytes, 0, bytes.length); - } - - private static String bufferToHex(byte bytes[], int m, int n) { - StringBuffer stringbuffer = new StringBuffer(2 * n); - int k = m + n; - for (int l = m; l < k; l++) { - appendHexPair(bytes[l], stringbuffer); - } - return stringbuffer.toString(); - } - - private static void appendHexPair(byte bt, StringBuffer stringbuffer) { - char c0 = hexDigits[(bt & 0xf0) >> 4];// 取字节中高 4 位的数字转换, >>> - // 为逻辑右移,将符号位一起右移,此处未发现两种符号有何不同 - char c1 = hexDigits[bt & 0xf];// 取字节中低 4 位的数字转换 - stringbuffer.append(c0); - stringbuffer.append(c1); - } - -} diff --git a/SeKeshedemo/src/main/resources/application.properties b/SeKeshedemo/src/main/resources/application.properties deleted file mode 100644 index 2ce5e24..0000000 --- a/SeKeshedemo/src/main/resources/application.properties +++ /dev/null @@ -1,25 +0,0 @@ - - -file.upload-dir=D:\\uploads\\files -# MySQL ????? - -#spring.datasource.url= jdbc:mysql://124.220.45.50:3306/big_event -#spring.datasource.username= big_event -#spring.datasource.password= 3cjBiCj3ZBafn3kP - -#spring.datasource.url= jdbc:mysql://127.0.0.1:3306/big_event -#spring.datasource.username=root -#spring.datasource.password=hsp - - -spring.datasource.url= jdbc:mysql://127.0.0.1:3306/big_event1 -spring.datasource.username= root -spring.datasource.password= hsp - - - -spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -server.port=8877 -spring.servlet.multipart.max-file-size=5MB -spring.servlet.multipart.max-request-size=5MB - diff --git a/SeKeshedemo/src/test/java/com/example/demo/Demo4ApplicationTests.java b/SeKeshedemo/src/test/java/com/example/demo/Demo4ApplicationTests.java deleted file mode 100644 index bf176f8..0000000 --- a/SeKeshedemo/src/test/java/com/example/demo/Demo4ApplicationTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.example.demo; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class Demo4ApplicationTests { - - @Test - void contextLoads() { - } - -} diff --git a/SeKeshedemo/target/classes/application.properties b/SeKeshedemo/target/classes/application.properties deleted file mode 100644 index 2ce5e24..0000000 --- a/SeKeshedemo/target/classes/application.properties +++ /dev/null @@ -1,25 +0,0 @@ - - -file.upload-dir=D:\\uploads\\files -# MySQL ????? - -#spring.datasource.url= jdbc:mysql://124.220.45.50:3306/big_event -#spring.datasource.username= big_event -#spring.datasource.password= 3cjBiCj3ZBafn3kP - -#spring.datasource.url= jdbc:mysql://127.0.0.1:3306/big_event -#spring.datasource.username=root -#spring.datasource.password=hsp - - -spring.datasource.url= jdbc:mysql://127.0.0.1:3306/big_event1 -spring.datasource.username= root -spring.datasource.password= hsp - - - -spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -server.port=8877 -spring.servlet.multipart.max-file-size=5MB -spring.servlet.multipart.max-request-size=5MB - diff --git a/SeKeshedemo/target/classes/com/example/demo/Demo4Application.class b/SeKeshedemo/target/classes/com/example/demo/Demo4Application.class deleted file mode 100644 index 9b3b9e9f60a5cf0f18d73c4ee286ad17390d3e26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 736 zcmah{OHbQC5dJnKIE1u7coh0LATA*X_JX(skZ7u&+)_1Fdgy8GY|Mha8?D#C-{J(~ zzz^U@A!c19tSVA1c}Da4X7-zTe7b)CaD-1S)G!yI-bMrS49n-@Qt(vhgr7#|GIk8} zhe|7V%rMv89R+AIY{w?!@>*omRPwRR4F5u6|71E%RVN+q?ig=UDl;p-@aROEU8PsKBI9<09`&O(ljcJkWsfzcC{ z6jns3th6Av5BC}B12dKkOQF*8dyz%b{_?pDozTQ09SN(v{o<^!&Ir>MzDajx#y^B7%SlU#t)VGwEWav0-ul0M?|H5mwtg1csZ5Sk zuKb&|Hm=+U0UXbys$7C7oFUFiuH?%~KGSw8ob|DdfKJ7KH86iHB$vqIq#5Z(?-uN) z3@?-PVNl5m$@bp_bg)X+0@kojAinsZ1Ou9#pm&Fb->>!lEYnX8-#Pc@=ik5k z0l*G?oJ9gj4NW>yNDEw8GLM*sZ8}Bcz<5dK1A+8*%dvu;0?E#<(Pm`OtRbtT1^SZh zBQt&=%iQHwskCA!G-SEPLCP;oEftGAd3}9 zHlq!fXjr3TEiM&UpLffKoHol9TN(vfc8$F2Ojt#u7A*bA>AYPnNTwgT3#}@HOz<*+ z7NhD*&#>L1<+Pw38#G+5V)W2OIs8~qm8t*EmU)des^9Qx1wJp!9dQxFd6*oXZBSwc7>ecy8FXk&=q zQuB+77VaW>4l*Rg9mg!o77SxV!yP*A#3*@LA6>n=fKHDC0ihkQ1|(<4*_vTd6=R-h zxQjihSU+JZhE11kqh#i%eAh7wW?+t6P9dHJ`^-v3dRdGi*@8~oqvKxuTcDYK$2^O= z0;_67sdawzfw>*##$Vq4Omp1Yu=80cy-`96QA<*8~O;Nam z;V@;ZkgieM(Tc!2hPt#tmT0h{_DttxC15}K8Xh}KN5uWQu#F>UpA075!a>txLy@1% z!fcG}pZ58=0#!35%q(3F8%1DC2-)B4E26iIy{`s(JbIa9gRi<^S;PgMXbchjb1TJ@ zif2>|el!O!ZP19Z4^!e$^5O$Upu1t~qCpe~zu-mlqBBH59Un`p+o%?eSr$6h3QwLK z6>B$=xEDD{!n1Y4Hj4t{ZXQ=70Vfv6Q^;5iZ`96vPNBUA77;=#@SyYD89Etpt6p9* zPtv}%cDVN{X98`*RVT2@a@6uI_Q8PTxPcimPXXY1MZ;Hjj^c#k)lt`*GSuXhZZK1k z#-Ll~;VYeh1?^}^+gz|^jLGo`W^PO!QDcdBi|DxTW+xeDg+q%A727p=NzjaOmvita z(^sDi&vd5H&f7}@0zUsk-C+2xQcB zM;q`U9^x;7hw&dIL*)wJ39fDa5?Zcx4i|Kv#)?DVVAa=H-Tf6-=hn?*eF9^l+!4ut z`dG;@fYrP@w(%Z!2`V_DK);FCL-qWBjHPcodIQN(nBjkoMwA4)xxc7#$p zrCp)4iqb$RwNe_SGz)!8&*pjTN#YA-`!k!dx^{}mh<~l1f3Wy zz&nSh@eFZPYtQ1j5d1kD$McLPjnDA{UL@=~KEX@0oMJQ|;AOnRZ^!88RlEibC#by& z>ECf!L#Kvr4O=tIZxp}bBC$5CTbgEHk1N-jq({&f=tWiV&5&}6k=wXUMbfN5c_0QQ z5rU%rDgkyf_+4Q_5i^_PG!jfsQT!y{;(HyXxA}gD#@@XLDIf3oc;CkdK0fsE(H~Ge Bf-C?4 diff --git a/SeKeshedemo/target/classes/com/example/demo/controller/ArticleController.class b/SeKeshedemo/target/classes/com/example/demo/controller/ArticleController.class deleted file mode 100644 index bdf58c0116d6960dc94aa942557f73ea0a1faca2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4040 zcmcInX>%0E8Gd>t7_kf>i&!>bK*87+0(*=NiGwgiQozVrfuaSGgj}uN)@r2L>Ge#n zKsgieI`Z;LY*d|8x=E({ONk&~d()90nzD(MtdAD48+#n|ySNVn>$wfdY68x(44Uf7 zyuhQwsfe5{qsMYf6iJTJ0lM)K7x!aO;DNeaQWH9?NORpc3mnBph96m zpM(7_4&WhyyiyRs@R8SVdE^(NK}V(NYI@J=yZEwW&t?a8#hrvW2p)cH&Vy=3v;x zF^mWdEy^Vs8R>C*IZ(!1Fs9*M;$KmIDy9q|NO)7w7RwI>WHqbFY=>jFhn($Ap7VxwwFf0*`fg(VdUrkkx9YR^a4tr^3Yj3{~sOrKDLb zMO?z9gXdj*8YO{;I`k&&Gb(NdtYIf^Rw@LEz*G4&W%=*oZH}9uyvzdm*V`}s`>ogh zap#qP{{Ef6zj!30)3r^Rw>=Xz0|%Wh*w=)!>qurSOsiW?a&Mi zXZda#Kk!O^Y)JlDe9pn=UEIJI81oJ4A}N#^^+Hp{48tzMD4SfHVbu1wWG9^|wROBX zKc4{VL43(Jk1yZV99l7(wV9VL=1^h#OO4i{YTNyEKG2(lp_OHUeKXC__;oew$NpTP z#==k=X;|A#-7_T})x6mDtlE6UqPwZ1C2vm2F!ttU#pr0olWhiXtZDR3KT_3Ef!+yS zC9L<9{7_wP*5_1oRZ_gbKuK3*Fe@Y9&a=f{v*1&o*O|19`W@BC&0x%?zi|sA&^JOd zbvW$^AHE0aS~Q)w)fkU#u9*myX^Rn)gi6`S$`YG*7L($ITNTwvGU1>}lv^|BB@fEz zRz2_*NgV5t2STL0=Q)~=v@JNMs?A84OewRVtJBhEkDLthj?>8>cdsph;ncKkfRrgd!W>1NMv1}{182{n(6jfcp3Ah%s!hv=>A%Bpr;S68TO z($>~Jft0WLE#N6?bqCvLwkDK^NrpmZu%B$aXsxv;fx-1vwbE!+*2%kQw~~-kTTaMx zDwhw3*96;039)u_VwQ|=(z;(eA+zQrQ2r1tEA8A{vA>uZ!sf_RudJIn-Bl*1$r|#B_=Zm$jB9OT6Ujze z<#8W=#*62SswjV1RfjUfoEZ{(w&NE?{1R_Ec+1{*f5qG3S~~o2SuZIs%?f?v75HM> z-38vvXDA~~wOx{7HBj-EwvoR;{E>qKYW%m`zyKEb@1_LsvB;U=y>5y7miZ6pK`-AI z{siav9qjr5dx7`yz{sC*@WjBwt9YaUF0bNvfy*b~$H&hd?0pw|x&Q3(Rg4vIoovs& zH!yVvSKgzbo<#Y6iU$s24}BZKVcIx^GxX#%GA;M>`5+0~vsudz&ALs?q9<< zDc8Cmlc|UA1J<8alm(`2AXaf*(A_Vdu&!}Cb!vA)I)WmOW02n$HnKx0d)tu%_!eHI ziXy)uzm3}z{}QQe{L_{1aK)OwO^^_6bH7W1)ZFiJ^nJ|GOKaauW?z36@2?av)iNqg zv;9H_PVs~Hbk3muwn6=P89$)RokWa{aa;Y%WJ{y=!!Bn0hz9(a6a~DJ><-e;pK$&v fpV!*PzK%CI@8kUEe13{wb5`W&H~1~y#lHUm3!s;$ diff --git a/SeKeshedemo/target/classes/com/example/demo/controller/BorrowController.class b/SeKeshedemo/target/classes/com/example/demo/controller/BorrowController.class deleted file mode 100644 index c47d055d736ae35dc54a867a6c8c61c971be8186..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3043 zcma)8$yOUj6ul)0nxXMPVuw;|tWDvTVygBM@&-PH3nT*pYGahP-R$=W^1>%DiLD zIWvwi;JB`{&;Si_^=Q$IQ>o-c9X8Uc;7Qju^Rf|} z(X8P)9nWKnz@8a%)^vT-;PQM<`o^^H&lwl^7?Yl7Iktd4CH;P%-qHo1AZ^t^%5cNH zQW{!Ur5lE$0^h1*n+m*0HAus^^3oV~GG^|)>C17BNRsU= z2yAaphKQ9WDFv}l$9^0T*ieGFr7THp6nvF^$%%Tj;gE)Q9Z7TubX6Qf#<6|Z$>pRQ z9mZg3f>@-{%H-r2iL^4rN)A^zP$YBB=wD@;YD5>hHT38(a9H5bGwvh5p3G51jx8f_ zfumKAr@~{Ps3;6l){CPWj_Ej#69PNewWgLRh!J8g2AUmGwDswD2`71`N@gVn+SX>^ z`idRXKZVm8&geLca{>n{;ES}CZ4#)TwCrp?3}cn>BLOCZzy@>-;=DjpI;fsfXzgo< z7HTrGWN<@xMZ*Oh7jcQ|Uo*H>+gR2ipupZLP-XSZ0#*4B>lndhZp+GSLA8aJ_Myt6 zN=`K3Dz0f5)iH+gHCx4~^a?pT(Y!(?!#Wn|Etf@+p-K*dz{1_BI!p*`eEi$De}Dho z<40frwe;gZzur^$uj{yhHw0=V8cAQzIvb2s2vg}A9w`!6`LuM$O}ZCo4*K4N=~`+WO(y(li+DYi+^*A^h|&=9 zrDzlwFIPfzT2$Klw?L{&Gb`5$#o&i`P;;4TBkxLw#mi*h)1d@*RVG+oG4xkzce~dx zEw(lW7WD`*#C>U#cdu&BO=G^9nWZu!YB!BYf7;1jHP!j~(k0Eus~+ouOdDx-p7ImD z>Uh2qnYwQYIB(_(glII%X>T-Ew9FG3a|&)o4q3sqJrMM!mCK|@U4Luos#*Z7Sbt?Z zV|e!12VKYWuDI5eWpiJ3DOZQQQy}U}+FFz@_OeoA{P&aKlf4%LGaS|OJ(zueuqgof^}<_*i(6vH2AS;7n5kFb3Sdpmx@!OmrL#&9yRHL-*veKnkV zv1q%DR1AH!t+lN+-`vMRF7DOpfkUW6 zJDT{{V+Xm|k51;-g%jxJz0-qh9NolWCUpcJjs?kG2os2sV=7$ngM=4Rz&x3*W5O4) zKpX>?aF-SddK|<%c$Yk0q`&w0Rg3qDzYXF)I?yzD(D!& zac&^chx~nX6T-tie%&r|i~9sj&@T0KZf{0xy&bS+E`xOwaK!DgfSp}ImZzA@X|i*M z?3^V#=g3Pxa~TMj=m_CTOr%Ooq)JR2jhJ|9E*}&4lK}qHAk!9R^BKpV^Y=w5<1haQ DL{&KE diff --git a/SeKeshedemo/target/classes/com/example/demo/controller/BorrowRankController.class b/SeKeshedemo/target/classes/com/example/demo/controller/BorrowRankController.class deleted file mode 100644 index b7e56bbc460269124cfd3f28df1cdf42147c4067..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1173 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 diff --git a/SeKeshedemo/target/classes/com/example/demo/mapper/ArticleMapper.class b/SeKeshedemo/target/classes/com/example/demo/mapper/ArticleMapper.class deleted file mode 100644 index 2199b40f6099351ae89bdb437b434f0a96b11a06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1553 zcma)+TT|0O6vxk^P$+_eq9R@v%cW&H%{V+_ohcBs8d9byIHM1`ZI%*9vYpKa>@fXe zKKST^AIkA0O)m&D<)KZo`#bml?w`Lue*r)daw!-iu-Xuw#(yxc<#NsDp3pqjYH_KR zq;eWA-;cjiaF@V?Q+CcYm-$VtQa|MlMIg;=n{`0~Z?eWUXDx9mdakx|#=wIi{N@(= z+~?{<*au89k1H+%0;#^k#cJp)$Kyv%;M84S@_nJ0a)gi6njvIUV=dM=;hIy&>nahNX-x2QQGnX;m$q`r|kyE7=Cm)p^2K+tuxx_&BC*BV3;7AC8sWaZ* z5pL-D1jZbjz%(u#NPz=UZ2~g^cd_sN2F+)amWIl4HNy#_f~PE}=`$5dEPC@A@OH$E z-l2z4y|v;j5L~cyL*J><4Z2sY?Dx8gdD=)QUg{}hHT(bMhow-)-Z#0tMd01oErKh% z7`Uci2}?hJ(5pIiY+A%QId%uz-0hd}dB0_w!>L$GIw-^3h@PN`VgV4?=ofq}h1V;X zUYu~rY0MORVj-|}?D+P!kWyT5e2TMRyM2hN^ik?q!i|Z<2V{7flch>jq@I9_z)FacwbioOU;;$sSb%ea(AZ2BvZ0PevI8q9uy`zSJ)gL(Wz z%ZKm?u?57(;Bjm=izZL{W>1k>gl7ZqbBXr|Tk2!a5qkkI2iU72Y~YO|whXT^ktEj) YV%^{?Hw0fre`|4S>+$Xc#>)cy1F12%l>h($ diff --git a/SeKeshedemo/target/classes/com/example/demo/mapper/BorrowMapper.class b/SeKeshedemo/target/classes/com/example/demo/mapper/BorrowMapper.class deleted file mode 100644 index 3afcca74b43f0bd18225b7fa47632490239c11ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1756 zcmb7ETTc@~6h4Erm5K@oDB@)h#4TbM@v%ZuU>j@7mULS*@qx^?Ls{HQGu;IZ;cxh3 zeDKi+f0Xg;>~32_1#GhE%$#q|H z4j1Z{CxmypD>oS!B`|T!PMB&lx2;yqW8U-$jGGc9c+(Rt0t-szg13%$?8UwcxqbAq z%l#v-wZ{Z=xX(qGKsxe5V6GOpzUAV)8=~Mm|PH;Q7V0s3}0AoTNa&??yfGP z(P=TCV-XvTy`5rRqb%}I4XsXH8H8>mi6^7|4*ASrmMv!61g4Z+)T6++ zY_(!_L(PmCR@-IB7*?`=0r2*6Rd1q$tJG<58wUn~(_OiuEA&u!PFz=7o?{jzSYa?zAz7Iq5kt!c#P`d`~ zUp&S`R0xUu8B2iWSE%fKG64)#qH8t!zKUvz$JwM+ow9r)e=}YU0K+nA5W>uSGRP># zAfMD9Ptd?YI7W%}oEG(+-c>mnv}{nlTBmxWQi-htb0e*2A&@n^Ks0&DvazX?5xvo4 znh(jlS~3y1kS2iBg%37B1|Q)Rq+tXyxJzN%@ox;jI|#|*ck2_7E{r4WHlFohcL!h- zJ=i3|rmpsO4`I_VgV&NseHXK6yAKaA(j0~ufrmZJd@sx+#5{&4{cN5NWYdRHge|}` ctTe7IghgH#hj?8=f6ryiWob=gycYm}07Vq$w*UYD diff --git a/SeKeshedemo/target/classes/com/example/demo/mapper/BorrowRankMapper.class b/SeKeshedemo/target/classes/com/example/demo/mapper/BorrowRankMapper.class deleted file mode 100644 index 0e4172097fc7f0b4e975661014ecb6f577e5badb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1142 zcmd5+!EVz)5S=YFp#{=Xi37K}lsZzHZB880L~>$>2J9HwPNN8+Y8_Uo)3rBp>_UHy z10TRgA=XZ+RH;M}TsW+DJ@e+x?9)E~`1$QS0JPws3|j=WiHs=!%A&d8^fQknjo5t7 z6WWnUBEPsSzOsuz86FeZpRsF31&gQD31)nf5~zr9k&ZaO5;r-Rz=2k^3Rsqgf?6uu zB(UR!)0m}M!U?qR0Zy%ZQ_ST|Qawq-iQq1e)12Gzon~8+y>hcS4I_RYF2X=?J&t9{ z(on_=0%(N_}VI6McuVc5v z|D<@&ac$jS3tPjZ!}0N9bbQh{`V)PBTYpE*2HMWRKda)u>bdL5ESd0LD3q06Zo0Id zJMUo^EG^wE5g_nL{S5%Nl)JZ~1Y1zfzu*b%sJ)`{yJ|iC2xI}z6z2H@n2M_1D;V|* KhLWm&0q_en{z6Ou diff --git a/SeKeshedemo/target/classes/com/example/demo/mapper/UserMapper.class b/SeKeshedemo/target/classes/com/example/demo/mapper/UserMapper.class deleted file mode 100644 index ae1983dbc9c7af51e9de55b40293b9ea5ac8815f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2260 zcmb7FU2hXd6up~Zo0t|TCD72X0k?@A?5v#x2`RWzir2!D6QVc?4?NW4-HEfoyJPLH zlcHdWN`0x+^3=XmMTkFuDpf*NY2lsUk%asT#GTpoN0V4Kmc~0fd+xdSo;!2r_1k}5 z0zej~BQT`E6`flu`<`0$8dD8san+*rI&;)jmpKb^8i5lEoZX~bRIO3Fs@|?_GTl?) z^tx#q-`*F%MQSkx((z&kRq`CuuFfTjM;z4oCYSVcNV~wi4Q?z^2N^u(xC)$XAfYV@ z$CewmXIgB{bj?bQ&D%EjsAqB;VdF*aR8?B1`UX?Y3NE`U?Eusgt6`MrBD6(o4U8`3 z$`vw6)*WsU;e~8(Fo(&haF~tlw0t)e7^a4yz~nJG9nG>($S2k?^g4CjZSJ7m@RnIe z-_)>7TY*T0qI5b&(J$LTdn6}4dgz;8v$(ENS`bg>yqaOQC$dqiSU}+{WqZ+S@jK+`AC2>?31!hZH zQMtZp67o#1HbC3UNiIx1p2K#5Cq;G%>UgGJV`8geqmWeCqvaDD zbhN}9j?VI?aByZ7cdCD1O^HjW|Kaq(b72LrTjPxg5XE~g1YsD02)>1|pW|Z$$7zH_ zah$pfiVGhg>_c4hVWS}lJA<&ZI6lI04oA!E=PL42fKu@PvNrw zHZlaCqtotqzi2!D5}^bx_hY<*uvj;vNaJ|MuMqk*jQ3-lKv=w+v3HCKgigZM4r8)Q W!&Ez!DFmqaWeCzz;V^#50K5a)9BUZ> diff --git a/SeKeshedemo/target/classes/com/example/demo/pojo/Article.class b/SeKeshedemo/target/classes/com/example/demo/pojo/Article.class deleted file mode 100644 index 6a1dd63ed3eab820ae808e536dc95ab0f5094dcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4117 zcmbVPYjYdb8GeqmH_7Y7F}WZTLI|dn?F6-?O&d7|CrU&_Z4+V>T469-p)8D{PDVOKnUCENH#-7etKJV>3=e?cx zNdNiz(|-Y&#p_w5kT#*&&|xTyU30EGg}UQkEj+by&8>zC#!1ij!p9WS`N@kJSjd>j z+8BYYaDO#u6xV8@F+fn3>hU4_!YL*&Z8vMV4M~)rG&;MlOPChfe56Acs*Y($5=nG z@k2QyL#)NFn?JJgW1NUjSdR0xJ3rauXOc0g-i(ct5|ZIcJZ*9CF&mG|_AEh5aUMl{ z%EoCC8x%j&s*C81jkBGDmL!`J#1l5op`x(kiuk=8RQ&L?7q%6&eB^ZsKd~_{UR$e9 zd$knQ+;Mi(qK&6;USVIuS#x=8)d`>VLaKe%$(Q|?@|Ddo{C|>iWk@>cp*X|b&wIWb zr*qj^iQ6rxI`xZA%M(5kYT>F!w;q_kYa7of?7y(?hhD?2_}9I*M}SklA23}WW0O{{ z2aT0rt?-2FyDcWM#w~g~ZW=9LnY_r0wcv)ULG8TLavE;vwz$orMN-_p9!zR0yRtM% z3dpjNVcFu1QL$n&X+bFtw`6D)N6u>y^xw0jyXjmIuDUJaO9Cd68#xjQJDeS~dZ zCL&m4A_1|&AWjc`UkcV+Rk!R(dF^E6JR+Bl**+ZvVLNO&%{c9C3oj|0NsRJdZB`vQ z6ooBBa+;7lO_u01A)Fo*{QJ z(LT#n$!y;Q^f#Eds7zr4$l4N!qk0I?=qCd}nJs}hw1)ug8U)I23B)l!1Zejl(8!iR zd>n=V?HdHLw*=yYIRxmwj|Xxzx+M@_%OOAq2dlPYOQ4_PXGlkVR3xDEr7^YtHq7CT zv^Ta$8cCW=I#}U3?$bHy*slHE^*nyQ34Z!EMz;$u7o!U=Oh5cDhQsgLF1*~gF1#@P z@V^`mzk9pza*ez2!t}#m8VzKd=dYWq9Wt z+%CM#vM&6gP4N6S7kjV%!loNxgMB$Y^=IhXt?AETy$?NoYx>`?7LH8a!GjS?;^8Cw zd?-3HlVm3Ufurvw{4w&!I?CgVlBoGv!T z=NP|<(VU($dW`0ZCXMEbR?ZY7D={*2R*zAsn4wXrn9XIxD4Q5%a@mfNCKor|Gj8L# z-HhYzUbin%MU6?@gD>E6mZz|Yw{V5BG;Q9%RZ<#Wz#3Lb>G&0`JW>YUK^fObnfL&6 z)Yte3{gY2oom2*&VLuwAvheB035=W8f3d@aW$(1V!d|{q{Ik?oxHl#<|AXwzf$Bgt zHTk)b^x_HnFJnfRG7iqGIP7@J=-se&h9O}mQ^p-YSMn{Km{0RLyUEog`rBhOC$-rF zV>7GL6_+~{+o9ZLj$NLm^7x`yu??)T>60%`;@7`;OpD_Rp)S$(cXcW#&zPR acqv}wYVnj`^K%2QlFO3%J^qN-koy*N?7mt6 diff --git a/SeKeshedemo/target/classes/com/example/demo/pojo/ArticleRentRankDTO.class b/SeKeshedemo/target/classes/com/example/demo/pojo/ArticleRentRankDTO.class deleted file mode 100644 index 736f03e287ee5db34b79c83941c581ba94cae603..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3393 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 diff --git a/SeKeshedemo/target/classes/com/example/demo/pojo/Result.class b/SeKeshedemo/target/classes/com/example/demo/pojo/Result.class deleted file mode 100644 index 74f881bdc885bd48c578f263255158d3a2ee8e95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4241 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 diff --git a/SeKeshedemo/target/classes/com/example/demo/pojo/info.class b/SeKeshedemo/target/classes/com/example/demo/pojo/info.class deleted file mode 100644 index 663dba06ab8303e273ec216392917a9f292d0ec4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2323 zcma)7T~i!I6g|B=GdsHsu)#pG0V6R)`OGFJD%pi-Limb6s1UJAUmTW}9oU^&cV;Q` zPb`0cyzrn^idA{A^d(mL8~hnQ8sq7i0R~u&#j<_-_U+T>o_o9Z_rIV03}70oIi!%z zK(nC35Xf)ayLPc=yIaLa8{4uH2pCh2>jZZN(!(R`S(wOXkh9PMOW;z)s~6>0cD+%P z#Z6iFiVbhuD?08Mo`Bi%Wz)6mQlMw)78Iolg9*T9jEjcJPT4Fv#@-+YNky z$t2hK=(A+n@DtFYv$~fYSFW_`8?yPt-l&Djc@?|1ZZ{n@kDXdjb$H&u(!a}J7U+N6 zas#I>7u{XQcewkW>w1A5IAp9!QuFE?-cE5|y0U2pa+6y+{G^sAw2$){S!a_h%b@CQ zuG&o&H;_%D8Qe$-1q2J9tae;70o@C#vMJE1xDOq-Mpx)hILt7B9U+j7)C0a%*0zS&?&&5;m)v^tx(GCUoEP z0zYWljVLqU#0(3qB8Cr{PK)tD0#1vOZUeJ9%wax*1=SNIFm&ABj=Ssa$YOM6)FyLw zCGeV01-?!;NE{fQxL~`RHR%s6dEQQ|Q9j!>3D1d*Po6epoAA#P@rSo2;ff(<>{@Nj z2_!3TExK%jnVRkU($8Q?;M$p-+ELA5Md0#(hq6FXUbwN$m<3w| z2K{ewR^&`@)JK1U_&yAKo8Ly{#4v3uwns3^*;u?f&QYj$;SA6Z$b84e6pn#1uLR=r z&<3dUG?4j9pb1<@I!vuZKqY}OI`$(n?Q`pkA`s=K@>XIA%0fwaOOZd7@QwEHo&OhJ z)!+!e`wToE&Y1n5WR@X|>e%SF(6#-sUtxX&J-t8n3(V#5(F5eeDUI_henh3<_?cnW!04;igmKlBGyq=^&{3gxhmFiRd1a_7wVUYFzP=1 z!BOW}%9p3K=}_E(e7Q<#&HUING7|^5{JHY?mo&9d(Bc(S3C^W~_Cnr{P-9AIigE`f zQqn0|nN|up+`trRrg4>bVVaf}iuMrNOFA@)CIp3o5HA^YJWnY{FZ9EJ!x-(Pi(#jF z`R>u3n^dsOx=SUjl6!_Xfzy{S5;uAdy5dZd&p{d=gyr}U_c)qFe8B(vc*t3f)<
  • M#fT9TabvF?%ZU{%z1QI>fXwrD`wziYH*mlWwi~cqb{s4cJaZ0hp zV3gawnKy6V%+AN>+dBYUz_A4-2B)qHIlhW;8X)&DR6IsKlP>a+Hqs5y$)E+B44M-$ z6Fd-+&uU zWg|^MGt?cGXcw<#3fiL|S8$eoUxfjK4Z0zKG95)3Duk^RF{na%CpD;3Xp2H6*e2Y7 h9eOP&yA;k+O-k)StEg_zt2?k?gbs+!;BYQ=^acLL!6EUBR-jaaH7GOKnurU*L!rj}WH`aV zGAJKOC2fa6v3WSC!VRcaz^lPJ)EKk^9dZ09qBul8!btN3&4mn*zt+a+Sx=~G|I$P3 z;nH_3;usCp`#C_Ag;we>bKC1shs_FX)!-&H7&QO4kU>3^iT!{$4d?DX3>wWtKbteP zGUPr*Gy1I>+;-?qmw&94J^xd%+e?*|5e{S`haq;A(pFfhRl?wgP*^@6%|A=2Q@#9_Z^pgacuuvlq^i zJ(tw)S$<{L?wopTjPc6s)xI1nVN*kGI=MX@<>9fOXx=qe1|jxPS+~Nsrzh89Ap-N19Vb^3RIU0Gt$ptkcE`Ql{S@Py8-K!?gm(!r75A*)RK4(TFk zx>}NV$>O9L>9y8ZV4vxu0J|hz7{G%)k`6!#a1ZX2X7B(Sl;w(Fkd@`NzCh(0Y%usl l-c`c(3c*_t9%ea@sPgf3r0qOu?;oTBjqLh9T@Jbr@EcRg<{|(9 diff --git a/SeKeshedemo/target/classes/com/example/demo/service/BorrowService.class b/SeKeshedemo/target/classes/com/example/demo/service/BorrowService.class deleted file mode 100644 index da4698b8f38dbd9c1c4601539487f71b6302a67d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 247 zcmZXO%MQUn6o&snTWTZTz(&}Z2M`+zD?-x5e%hYUYI~aLg=e$y03J$AvBB~?=fB+_ z*BgKZ`VLwGl*+Fjon1WKk_FpQ2 z(PaIXlyl6VnE7;X{2MBd9PX4>DV3xP0asI5>C9(78SuE$0j;8h1cqPzv!>b>5NMn6 YK+DXrU>kM}Sq(G`yFVxM?=@<;PlGN!y8r+H diff --git a/SeKeshedemo/target/classes/com/example/demo/service/UserService.class b/SeKeshedemo/target/classes/com/example/demo/service/UserService.class deleted file mode 100644 index d0ded2833cbbff8d8dc50d176abe39471e180d58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 622 zcmb7>O-=$q5QSf(!vHGc59k3*gpK2#xN*S>e-fhmcBUAb%yg5U0p)5gJb;HXRs#l< z*|@8IdG*!ns?V?Y4*)kf_fZnK2u&K$n@lGO1rent$jHuANWl{qgJtbwSD-PLGZ`dO z$HBwPn8IA3K2$ooojd2fOiAFn-Cw%~xm7yucKTZ*CT46F{4QhfC?A>VQCcSCWHW)v zl!1BytXPUw#vnnq<%puG+uv{6kAr_u85&$4`qJ){PH*}+^wppt)yznN!VM+`^EAB>VE-;XsiK83|MlHaq`!BisqJ+g%)f)rQ?wRyt0J!$I;Nx})fI-ecp}?{PIMWFndpYea6a#r zEODQg%C@iyqU2f?;jPQOup}K>GoF%pTV#T>6df`2@ZfNPm&?LqIFoL{DEU9tyaU5z zH+pf%z+n?d(8qB4KY204c%cwRWVjG-4OVtn-CC$*BE6q~+I5P4)BzKNI7-Yb!lsJU z(fZ<{c~wciz zNXfQEk=rv~v04(k=6O+8(sep9%P{!pi*Nq?Z2OPTA3WT7@Yg3lKit`S^zB{@(|AJ< z&Ky}Blv-BT<4qH9A;oZfSvrMT*Yn&BL94q~ncciYup-R?qJPSmAfH5QAkp~uek+cd?+m)aidzw3GX&1c!s{To9A|xds6Si!>C%36z^hd zn`^Y6a8*zwqpqCcR`;gCC1ETGwc-|Ta-ED49>wg+$fCnl)gx|`HFeahIrS9CD?}ii zn>vmD#xD66L}G~{A`2A%@rlxc3kHeiv*E|ubP;++@%$RyZ(*t0l~h3;_hlLCnB-j) zO3S55K{S9>ItwH;*GR5DT|U(RN;;Ntt6pAQmzvA5W>M)o{G5hlh##n+3YA{CYO^e? zP=`sn+dAo$VVI|X=!b*WG<|i@x)84P`q1tM?JQcgUHjNJ*bnp(!D46xa=l648h{M& z4sOv(Hxv5EN;^-}8lkm&>_-^myXcAFd)hWa4EPX71G5l9v&!H$LERzic19bGOV>V` zY1~V+(=lTjcNhJv1$L-`SuBLjl1BvZlIMH48zNQFMt{JF&u|OJcJTbCI~du;nFtmp zwlE(33P$v6MBBb2vo=3@{Yr!0ia`wfVNL`Pb@n4z!uvkqUVMNL$@(L*C$GP8(!j*k zdR|L(Ov6C=99*vpt@RpxLcQ+cV}c6nbYb;^1=>X* J>M~mf{sk92G7T#9egk-m-8?)@YM#o# zGGyPVSlM?B6Xi-{8dI3gA@8FApMeKD;_|DAI-%q(8EM{?=3E7mD@yVA+8BLtG)R4< z41?e7=MF@tBMrl5Erk&EUnRYRx@rM4DCRKh<1XeHHvXq+#ARflO^ac@oF?n&Q=L#% zD~&wnv5-T_$9*g^tfXkh${D8G($I-FLtI9CBuUjO# zSW|JLqb>-ZVXmeF5jKQT?m0Q{R48h$uTaEDWpZ=CMyfm9q!Zp6J$R z;gncui178T0<9r|B#%rOmsh_|i;(d01Jj#YpV7mS?wLS-P)=j%hR5zu@3=3|P`;I~ zOT$QQFFTSa_n?Y(x|>DU5guX&w(d N)Z&pFL#JK>{{V5#FveNkW>Iv?(OTCWcMZkI*;?C6O#48Pb&0@8jLU46%2t^*Skk zs%oW56@94s+#gl-%ZBX|4B!4CHV^An!z%F#%L0(UyO=wbX*9G7^ts<@0=8CM*9fCYi&{|*tje4qpW z*|A06lS3tNzur0HwI78#=(ieq^pQC-F?Ni4&B1jnlD71Hfwc=#RPp@`ny? z;v<1_Uqw1NF#oRx8xhyA(tXj;Hul$J@mC>M7xwf;nvCbKZ1#bQ@2_ijIT|L&lf!YoN z6Uj)MU@WlNF=5{wk8JY~Ldx>igsZC-0ewZ-s({KErFTm#wU?l zM+a(eGVH1Fm1KH>g^uy$pesXd_vztGbf}5v=Jh?T`J&k*OvMgo5D&~kzQqD!BCwRt zdNws|=&p(mjsLy01S1u)4ocV8V}1*)W|c_CFb~w|GH4{nV>XC`H#;zW9ncOsB&VV?@l3*Re&0+&Pqnq}; zZN_NdPSLiww`jR`tYmU?q~mtjLK7DD>pi*o_@qp>Xl+xfX~%99aMrJ+>Gc?8F>#xs zR8y359pY=0=G|k(wr0oXU1^@+<6^Eo>umH!hJrIq?%)wxEZ-__$xPexh)0PSkFlIW zy-VTK0)D1jc5WWLm%Gs7Y)@+pfNw)o%l S91AOI0pG>z_VhkH1O5e_@PK3h diff --git a/SeKeshedemo/target/classes/com/example/demo/utils/JwtUtil.class b/SeKeshedemo/target/classes/com/example/demo/utils/JwtUtil.class deleted file mode 100644 index 581445df53c450709c58d07a8aee3642f5aa3571..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2193 zcma)7ZCevZ6g?A&OV$NKst70)3AVwuthHjbL0Sx0iHX`K#?soC$!17~Zg$h%jmYol zA8EfRw9nHY&>z*OcQ(P07d0PtXZFsWd(J(3@65md{q+xkJJ{C|!H9-Y15un|i0|{~ z+_bq`MR@5kOsFk3mvvu998($+2HwLthQ)VnW{4fgpq5da8Mafo z4*5dhNvE1_S(<^g%{*_Uhv1`OnqeXg6mHw1RCLT>R>Pcui@4OKQQ^=J1Yu8EP0tff zP?U9%m$ohaP_As0L`LNIRp>a6MWyj&hS5}32^mMyz%s5djH@iRUo@mA{7q8)Mmv+& z1coF2A;W@_OuXRrhAqsBsJo_$;hWim;0aB}u)?4bn2>d@<0E{m;S&R^Fd3G*)#i59 z^~kgCo0}(7+Iv60nYq4pli}6?wR`0q6eFz?|J1;Bd`3$6vg(Af-VII~^!;8{jcW#O z;&YN81#8(X6~~5XzsTwIwXKA}SP% zQrX5m4PP6$j~#|&H`>5G3}aOhv^(siF2m!Y-C=K$G2BI<50KN4H}DXT+7;S4F;0QD zL89EJR;89A;W}-ox|dq&!S*ggqQ4NRhcd3?2iyrt+-_14jAkfnhRK|C#KUI2EW9Ew z+hj@PT#MT!?n(9CHjV~0)v}9W;k>zjhyuys6y0A1m2L8Lo3@UZz6w(LycjkyU?i> z+P4s$8tr=sm+=AJgaE@F9^)Gtzg0&!QW&8*-Hr4vkj12t(HOn@3hd9&rATkJ48-t+ z-bTv-B|Hsn-(i=6sLd|4a4mTREir!eB_{vI`Q0O2IEQ)u3h%$fQX+K(TDbNHxsO1F zo+fl)k|5$3#}qChfhGFxKqWDO@5$!}dRpMh@{GQIq$f)E84W+t6T#2K@fYwmpJ!xI zyca^$BiuN~EvDc%6643%ir^So21O+jQkf$Xzy&&WXDH?@UDIc^HSBX!0HM=q+5TB7=Zo!kTKs41il}lnHS~VCt+R!fWl;xB&a^5UgOEOcG zWhYbj?2?-qD-Pzl5YVYVc6@Ldt}`{2>lRI>H7KevUb`z zCFj+CzuMm=u!YJaBkKgLVYfi%@Xxnbdic{Kk%J4;`< zQlWZo5(S*oFs0)ayehEC2U~5BfK_F_RC%oEmw90#PvQ4EUQ^dVt1mn0nbzFtnyI*q z4m(9ot)q5Dj@Qf6EJSm<#GUq0$1+Q2%$lvf!_BBSYcq!Jqd(v6Sph+@_BGYT17l2j zvrcistdRsy)+pCv%}Q%-g7jQ=YDIx(*U9f%sJ?S7%<3bhM7cOPak}^yMHQLK z(Gy-ig6S8`oFGfO>)&WW*RjpkAcuuW={fr5lQm{mLk1$#yekA@Bi0@+SgR3>y%s-W zmBQ;ZR&h-^FAxUts3L!=-pEOE(y7-hdD2$I>*1BTTVwmj{^TYc$KE3~sTmSj`v+uvTvFgV9_tHlXKKbIojd$2d>H@y^_Pedkct442_@jpF zs__0Kuydt6?aC!*PG*9#32O1AX?adz9}3FGg%E0ta})PAq?fR1Y*+sx zIzQ)UfTsQ$0BO42?;~yxL^08A9zOGvN41!N93K*iUG z+7&{5i6}Dw4Ez%Vg;>w*9c0G4dtN&j?LHXmh;>B&j<$41Z2!O#_PrMqH~;tDz#w;=Kmn=}jv@n3BAIcaGk4u}BiDsK3MhXGxoew2H?w{f_u4L@Aft{gb3 z)<)~q14I2iix@iFzg3MZCD`fvmSg!Hr>`f_&4+adUi2eK2WYsAd7={6_mRDYPAuRG zt#;7E*STt1E``e!bNP$o4ZpfoDcmEB3ig^|d=o1)8GG`DsIfO+h#C9xg=S-azMvTg z@`boDm@gR3#zBsn@f^pv@jSJMr3+^J* z_YPTqpW!Zd=tX|NiK~=X=}92+BdQusZ6?%P+=$?9ss!Et9u2*V5BQbj>O*{lKjX>& E1GCPj%K!iX diff --git a/library_system/.gitignore b/library_system/.gitignore deleted file mode 100644 index a547bf3..0000000 --- a/library_system/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -dist -dist-ssr -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? diff --git a/library_system/.vscode/extensions.json b/library_system/.vscode/extensions.json deleted file mode 100644 index a7cea0b..0000000 --- a/library_system/.vscode/extensions.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "recommendations": ["Vue.volar"] -} diff --git a/library_system/README.md b/library_system/README.md deleted file mode 100644 index 1511959..0000000 --- a/library_system/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Vue 3 + Vite - -This template should help get you started developing with Vue 3 in Vite. The template uses Vue 3 ` - - diff --git a/library_system/package-lock.json b/library_system/package-lock.json deleted file mode 100644 index f6fe63e..0000000 --- a/library_system/package-lock.json +++ /dev/null @@ -1,2498 +0,0 @@ -{ - "name": "library_system", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "library_system", - "version": "0.0.0", - "dependencies": { - "axios": "^1.11.0", - "element-plus": "^2.10.4", - "pinia": "^3.0.3", - "vue": "^3.5.17", - "vue-router": "^4.5.1", - "vuex": "^4.1.0" - }, - "devDependencies": { - "@types/node": "^24.1.0", - "@vitejs/plugin-vue": "^6.0.0", - "unplugin-auto-import": "^19.3.0", - "unplugin-vue-components": "^28.8.0", - "vite": "^7.0.4" - } - }, - "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" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", - "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", - "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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" - } - }, - "node_modules/@element-plus/icons-vue": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz", - "integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==", - "license": "MIT", - "peerDependencies": { - "vue": "^3.2.0" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz", - "integrity": "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.8.tgz", - "integrity": "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz", - "integrity": "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.8.tgz", - "integrity": "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz", - "integrity": "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz", - "integrity": "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz", - "integrity": "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz", - "integrity": "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz", - "integrity": "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz", - "integrity": "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz", - "integrity": "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz", - "integrity": "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz", - "integrity": "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz", - "integrity": "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz", - "integrity": "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz", - "integrity": "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz", - "integrity": "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz", - "integrity": "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz", - "integrity": "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz", - "integrity": "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz", - "integrity": "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz", - "integrity": "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz", - "integrity": "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz", - "integrity": "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz", - "integrity": "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz", - "integrity": "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@floating-ui/core": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.2.tgz", - "integrity": "sha512-wNB5ooIKHQc+Kui96jE/n69rHFWAVoxn5CAzL1Xdd8FG03cgY3MLO+GF9U3W737fYDSgPWA6MReKhBQBop6Pcw==", - "license": "MIT", - "dependencies": { - "@floating-ui/utils": "^0.2.10" - } - }, - "node_modules/@floating-ui/dom": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.2.tgz", - "integrity": "sha512-7cfaOQuCS27HD7DX+6ib2OrnW+b4ZBwDNnCcT0uTyidcmyWb03FnQqJybDBoCnpdxwBSfA94UAYlRCt7mV+TbA==", - "license": "MIT", - "dependencies": { - "@floating-ui/core": "^1.7.2", - "@floating-ui/utils": "^0.2.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/sourcemap-codec": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", - "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", - "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==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.19", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.19.tgz", - "integrity": "sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.45.1.tgz", - "integrity": "sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.45.1.tgz", - "integrity": "sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.1.tgz", - "integrity": "sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.45.1.tgz", - "integrity": "sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.45.1.tgz", - "integrity": "sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.45.1.tgz", - "integrity": "sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.45.1.tgz", - "integrity": "sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.45.1.tgz", - "integrity": "sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.45.1.tgz", - "integrity": "sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.45.1.tgz", - "integrity": "sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.45.1.tgz", - "integrity": "sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.45.1.tgz", - "integrity": "sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.45.1.tgz", - "integrity": "sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.45.1.tgz", - "integrity": "sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.45.1.tgz", - "integrity": "sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.1.tgz", - "integrity": "sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.1.tgz", - "integrity": "sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.45.1.tgz", - "integrity": "sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.45.1.tgz", - "integrity": "sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.1.tgz", - "integrity": "sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "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.20", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==", - "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", - "dependencies": { - "@types/lodash": "*" - } - }, - "node_modules/@types/node": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.1.0.tgz", - "integrity": "sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.8.0" - } - }, - "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.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.0.tgz", - "integrity": "sha512-iAliE72WsdhjzTOp2DtvKThq1VBC4REhwRcaA+zPAAph6I+OQhUXv+Xu2KS7ElxYtb7Zc/3R30Hwv1DxEo7NXQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rolldown/pluginutils": "1.0.0-beta.19" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "peerDependencies": { - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0", - "vue": "^3.2.25" - } - }, - "node_modules/@vue/compiler-core": { - "version": "3.5.18", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.18.tgz", - "integrity": "sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.28.0", - "@vue/shared": "3.5.18", - "entities": "^4.5.0", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.1" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.5.18", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.18.tgz", - "integrity": "sha512-RMbU6NTU70++B1JyVJbNbeFkK+A+Q7y9XKE2EM4NLGm2WFR8x9MbAtWxPPLdm0wUkuZv9trpwfSlL6tjdIa1+A==", - "license": "MIT", - "dependencies": { - "@vue/compiler-core": "3.5.18", - "@vue/shared": "3.5.18" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.5.18", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.18.tgz", - "integrity": "sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.28.0", - "@vue/compiler-core": "3.5.18", - "@vue/compiler-dom": "3.5.18", - "@vue/compiler-ssr": "3.5.18", - "@vue/shared": "3.5.18", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.17", - "postcss": "^8.5.6", - "source-map-js": "^1.2.1" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.5.18", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.18.tgz", - "integrity": "sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==", - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.5.18", - "@vue/shared": "3.5.18" - } - }, - "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/devtools-kit": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.7.tgz", - "integrity": "sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==", - "license": "MIT", - "dependencies": { - "@vue/devtools-shared": "^7.7.7", - "birpc": "^2.3.0", - "hookable": "^5.5.3", - "mitt": "^3.0.1", - "perfect-debounce": "^1.0.0", - "speakingurl": "^14.0.1", - "superjson": "^2.2.2" - } - }, - "node_modules/@vue/devtools-shared": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.7.tgz", - "integrity": "sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==", - "license": "MIT", - "dependencies": { - "rfdc": "^1.4.1" - } - }, - "node_modules/@vue/reactivity": { - "version": "3.5.18", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.18.tgz", - "integrity": "sha512-x0vPO5Imw+3sChLM5Y+B6G1zPjwdOri9e8V21NnTnlEvkxatHEH5B5KEAJcjuzQ7BsjGrKtfzuQ5eQwXh8HXBg==", - "license": "MIT", - "dependencies": { - "@vue/shared": "3.5.18" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.5.18", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.18.tgz", - "integrity": "sha512-DUpHa1HpeOQEt6+3nheUfqVXRog2kivkXHUhoqJiKR33SO4x+a5uNOMkV487WPerQkL0vUuRvq/7JhRgLW3S+w==", - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.18", - "@vue/shared": "3.5.18" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.5.18", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.18.tgz", - "integrity": "sha512-YwDj71iV05j4RnzZnZtGaXwPoUWeRsqinblgVJwR8XTXYZ9D5PbahHQgsbmzUvCWNF6x7siQ89HgnX5eWkr3mw==", - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.18", - "@vue/runtime-core": "3.5.18", - "@vue/shared": "3.5.18", - "csstype": "^3.1.3" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.5.18", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.18.tgz", - "integrity": "sha512-PvIHLUoWgSbDG7zLHqSqaCoZvHi6NNmfVFOqO+OnwvqMz/tqQr3FuGWS8ufluNddk7ZLBJYMrjcw1c6XzR12mA==", - "license": "MIT", - "dependencies": { - "@vue/compiler-ssr": "3.5.18", - "@vue/shared": "3.5.18" - }, - "peerDependencies": { - "vue": "3.5.18" - } - }, - "node_modules/@vue/shared": { - "version": "3.5.18", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.18.tgz", - "integrity": "sha512-cZy8Dq+uuIXbxCZpuLd2GJdeSO/lIzIspC2WtkqIpje5QyFbvLaI5wZtdUjLHjGZrlVX6GilejatWwVYYRc8tA==", - "license": "MIT" - }, - "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", - "@vueuse/metadata": "9.13.0", - "@vueuse/shared": "9.13.0", - "vue-demi": "*" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "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": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } - } - }, - "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" - } - }, - "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": "*" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "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": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } - } - }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "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.11.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", - "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/birpc": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.5.0.tgz", - "integrity": "sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "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", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "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" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/confbox": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", - "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/copy-anything": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", - "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", - "license": "MIT", - "dependencies": { - "is-what": "^4.1.8" - }, - "engines": { - "node": ">=12.13" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "license": "MIT" - }, - "node_modules/dayjs": { - "version": "1.11.13", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", - "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "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/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", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/element-plus": { - "version": "2.10.4", - "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.10.4.tgz", - "integrity": "sha512-UD4elWHrCnp1xlPhbXmVcaKFLCRaRAY6WWRwemGfGW3ceIjXm9fSYc9RNH3AiOEA6Ds1p9ZvhCs76CR9J8Vd+A==", - "license": "MIT", - "dependencies": { - "@ctrl/tinycolor": "^3.4.1", - "@element-plus/icons-vue": "^2.3.1", - "@floating-ui/dom": "^1.0.1", - "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", - "@types/lodash": "^4.14.182", - "@types/lodash-es": "^4.17.6", - "@vueuse/core": "^9.1.0", - "async-validator": "^4.2.5", - "dayjs": "^1.11.13", - "escape-html": "^1.0.3", - "lodash": "^4.17.21", - "lodash-es": "^4.17.21", - "lodash-unified": "^1.0.2", - "memoize-one": "^6.0.0", - "normalize-wheel-es": "^1.2.0" - }, - "peerDependencies": { - "vue": "^3.2.0" - } - }, - "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" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "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" - } - }, - "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" - } - }, - "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" - }, - "engines": { - "node": ">= 0.4" - } - }, - "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", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esbuild": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz", - "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.8", - "@esbuild/android-arm": "0.25.8", - "@esbuild/android-arm64": "0.25.8", - "@esbuild/android-x64": "0.25.8", - "@esbuild/darwin-arm64": "0.25.8", - "@esbuild/darwin-x64": "0.25.8", - "@esbuild/freebsd-arm64": "0.25.8", - "@esbuild/freebsd-x64": "0.25.8", - "@esbuild/linux-arm": "0.25.8", - "@esbuild/linux-arm64": "0.25.8", - "@esbuild/linux-ia32": "0.25.8", - "@esbuild/linux-loong64": "0.25.8", - "@esbuild/linux-mips64el": "0.25.8", - "@esbuild/linux-ppc64": "0.25.8", - "@esbuild/linux-riscv64": "0.25.8", - "@esbuild/linux-s390x": "0.25.8", - "@esbuild/linux-x64": "0.25.8", - "@esbuild/netbsd-arm64": "0.25.8", - "@esbuild/netbsd-x64": "0.25.8", - "@esbuild/openbsd-arm64": "0.25.8", - "@esbuild/openbsd-x64": "0.25.8", - "@esbuild/openharmony-arm64": "0.25.8", - "@esbuild/sunos-x64": "0.25.8", - "@esbuild/win32-arm64": "0.25.8", - "@esbuild/win32-ia32": "0.25.8", - "@esbuild/win32-x64": "0.25.8" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/exsolve": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.7.tgz", - "integrity": "sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fdir": { - "version": "6.4.6", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", - "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "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" - } - }, - "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", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 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" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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" - }, - "engines": { - "node": ">= 0.4" - } - }, - "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/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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", - "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", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-what": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", - "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", - "license": "MIT", - "engines": { - "node": ">=12.13" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/js-tokens": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", - "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/local-pkg": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.1.tgz", - "integrity": "sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mlly": "^1.7.4", - "pkg-types": "^2.0.1", - "quansync": "^0.2.8" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "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" - }, - "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": "*", - "lodash": "*", - "lodash-es": "*" - } - }, - "node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" - } - }, - "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" - } - }, - "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/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" - } - }, - "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" - }, - "engines": { - "node": ">= 0.6" - } - }, - "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/mlly": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz", - "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.14.0", - "pathe": "^2.0.1", - "pkg-types": "^1.3.0", - "ufo": "^1.5.4" - } - }, - "node_modules/mlly/node_modules/confbox": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", - "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/mlly/node_modules/pkg-types": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", - "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "confbox": "^0.1.8", - "mlly": "^1.7.4", - "pathe": "^2.0.1" - } - }, - "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/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", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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/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": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pinia": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.3.tgz", - "integrity": "sha512-ttXO/InUULUXkMHpTdp9Fj4hLpD/2AoJdmAbAeW2yu1iy1k+pkFekQXw5VpC0/5p51IOR/jDaDRfRWRnMMsGOA==", - "license": "MIT", - "dependencies": { - "@vue/devtools-api": "^7.7.2" - }, - "funding": { - "url": "https://github.com/sponsors/posva" - }, - "peerDependencies": { - "typescript": ">=4.4.4", - "vue": "^2.7.0 || ^3.5.11" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/pinia/node_modules/@vue/devtools-api": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.7.tgz", - "integrity": "sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==", - "license": "MIT", - "dependencies": { - "@vue/devtools-kit": "^7.7.7" - } - }, - "node_modules/pkg-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.2.0.tgz", - "integrity": "sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "confbox": "^0.2.2", - "exsolve": "^1.0.7", - "pathe": "^2.0.3" - } - }, - "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", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "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/quansync": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.10.tgz", - "integrity": "sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/antfu" - }, - { - "type": "individual", - "url": "https://github.com/sponsors/sxzz" - } - ], - "license": "MIT" - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/readdirp/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "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.45.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.45.1.tgz", - "integrity": "sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.45.1", - "@rollup/rollup-android-arm64": "4.45.1", - "@rollup/rollup-darwin-arm64": "4.45.1", - "@rollup/rollup-darwin-x64": "4.45.1", - "@rollup/rollup-freebsd-arm64": "4.45.1", - "@rollup/rollup-freebsd-x64": "4.45.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.45.1", - "@rollup/rollup-linux-arm-musleabihf": "4.45.1", - "@rollup/rollup-linux-arm64-gnu": "4.45.1", - "@rollup/rollup-linux-arm64-musl": "4.45.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.45.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.45.1", - "@rollup/rollup-linux-riscv64-gnu": "4.45.1", - "@rollup/rollup-linux-riscv64-musl": "4.45.1", - "@rollup/rollup-linux-s390x-gnu": "4.45.1", - "@rollup/rollup-linux-x64-gnu": "4.45.1", - "@rollup/rollup-linux-x64-musl": "4.45.1", - "@rollup/rollup-win32-arm64-msvc": "4.45.1", - "@rollup/rollup-win32-ia32-msvc": "4.45.1", - "@rollup/rollup-win32-x64-msvc": "4.45.1", - "fsevents": "~2.3.2" - } - }, - "node_modules/scule": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz", - "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==", - "dev": true, - "license": "MIT" - }, - "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" - } - }, - "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" - } - }, - "node_modules/strip-literal": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.0.0.tgz", - "integrity": "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==", - "dev": true, - "license": "MIT", - "dependencies": { - "js-tokens": "^9.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/superjson": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", - "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", - "license": "MIT", - "dependencies": { - "copy-anything": "^3.0.2" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/tinyglobby": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", - "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.4.4", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ufo": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", - "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", - "dev": true, - "license": "MIT" - }, - "node_modules/undici-types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", - "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", - "dev": true, - "license": "MIT" - }, - "node_modules/unimport": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/unimport/-/unimport-4.2.0.tgz", - "integrity": "sha512-mYVtA0nmzrysnYnyb3ALMbByJ+Maosee2+WyE0puXl+Xm2bUwPorPaaeZt0ETfuroPOtG8jj1g/qeFZ6buFnag==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.14.1", - "escape-string-regexp": "^5.0.0", - "estree-walker": "^3.0.3", - "local-pkg": "^1.1.1", - "magic-string": "^0.30.17", - "mlly": "^1.7.4", - "pathe": "^2.0.3", - "picomatch": "^4.0.2", - "pkg-types": "^2.1.0", - "scule": "^1.3.0", - "strip-literal": "^3.0.0", - "tinyglobby": "^0.2.12", - "unplugin": "^2.2.2", - "unplugin-utils": "^0.2.4" - }, - "engines": { - "node": ">=18.12.0" - } - }, - "node_modules/unimport/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/unplugin": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.5.tgz", - "integrity": "sha512-RyWSb5AHmGtjjNQ6gIlA67sHOsWpsbWpwDokLwTcejVdOjEkJZh7QKu14J00gDDVSh8kGH4KYC/TNBceXFZhtw==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.14.1", - "picomatch": "^4.0.2", - "webpack-virtual-modules": "^0.6.2" - }, - "engines": { - "node": ">=18.12.0" - } - }, - "node_modules/unplugin-auto-import": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/unplugin-auto-import/-/unplugin-auto-import-19.3.0.tgz", - "integrity": "sha512-iIi0u4Gq2uGkAOGqlPJOAMI8vocvjh1clGTfSK4SOrJKrt+tirrixo/FjgBwXQNNdS7ofcr7OxzmOb/RjWxeEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "local-pkg": "^1.1.1", - "magic-string": "^0.30.17", - "picomatch": "^4.0.2", - "unimport": "^4.2.0", - "unplugin": "^2.3.4", - "unplugin-utils": "^0.2.4" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@nuxt/kit": "^3.2.2", - "@vueuse/core": "*" - }, - "peerDependenciesMeta": { - "@nuxt/kit": { - "optional": true - }, - "@vueuse/core": { - "optional": true - } - } - }, - "node_modules/unplugin-utils": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.2.4.tgz", - "integrity": "sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pathe": "^2.0.2", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=18.12.0" - }, - "funding": { - "url": "https://github.com/sponsors/sxzz" - } - }, - "node_modules/unplugin-vue-components": { - "version": "28.8.0", - "resolved": "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-28.8.0.tgz", - "integrity": "sha512-2Q6ZongpoQzuXDK0ZsVzMoshH0MWZQ1pzVL538G7oIDKRTVzHjppBDS8aB99SADGHN3lpGU7frraCG6yWNoL5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "chokidar": "^3.6.0", - "debug": "^4.4.1", - "local-pkg": "^1.1.1", - "magic-string": "^0.30.17", - "mlly": "^1.7.4", - "tinyglobby": "^0.2.14", - "unplugin": "^2.3.5", - "unplugin-utils": "^0.2.4" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@babel/parser": "^7.15.8", - "@nuxt/kit": "^3.2.2 || ^4.0.0", - "vue": "2 || 3" - }, - "peerDependenciesMeta": { - "@babel/parser": { - "optional": true - }, - "@nuxt/kit": { - "optional": true - } - } - }, - "node_modules/vite": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.6.tgz", - "integrity": "sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.25.0", - "fdir": "^6.4.6", - "picomatch": "^4.0.3", - "postcss": "^8.5.6", - "rollup": "^4.40.0", - "tinyglobby": "^0.2.14" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^20.19.0 || >=22.12.0", - "jiti": ">=1.21.0", - "less": "^4.0.0", - "lightningcss": "^1.21.0", - "sass": "^1.70.0", - "sass-embedded": "^1.70.0", - "stylus": ">=0.54.8", - "sugarss": "^5.0.0", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/vue": { - "version": "3.5.18", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.18.tgz", - "integrity": "sha512-7W4Y4ZbMiQ3SEo+m9lnoNpV9xG7QVMLa+/0RFwwiAVkeYoyGXqWE85jabU4pllJNUzqfLShJ5YLptewhCWUgNA==", - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.5.18", - "@vue/compiler-sfc": "3.5.18", - "@vue/runtime-dom": "3.5.18", - "@vue/server-renderer": "3.5.18", - "@vue/shared": "3.5.18" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/vue-router": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.5.1.tgz", - "integrity": "sha512-ogAF3P97NPm8fJsE4by9dwSYtDwXIY1nFY9T6DyQnGHd1E2Da94w9JIolpe42LJGIl0DwOHBi8TcRPlPGwbTtw==", - "license": "MIT", - "dependencies": { - "@vue/devtools-api": "^6.6.4" - }, - "funding": { - "url": "https://github.com/sponsors/posva" - }, - "peerDependencies": { - "vue": "^3.2.0" - } - }, - "node_modules/vuex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz", - "integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==", - "license": "MIT", - "dependencies": { - "@vue/devtools-api": "^6.0.0-beta.11" - }, - "peerDependencies": { - "vue": "^3.2.0" - } - }, - "node_modules/webpack-virtual-modules": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", - "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", - "dev": true, - "license": "MIT" - } - } -} diff --git a/library_system/package.json b/library_system/package.json deleted file mode 100644 index f8dd95d..0000000 --- a/library_system/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "library_system", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite preview" - }, - "dependencies": { - "axios": "^1.11.0", - "element-plus": "^2.10.4", - "pinia": "^3.0.3", - "vue": "^3.5.17", - "vue-router": "^4.5.1", - "vuex": "^4.1.0" - }, - "devDependencies": { - "@types/node": "^24.1.0", - "@vitejs/plugin-vue": "^6.0.0", - "unplugin-auto-import": "^19.3.0", - "unplugin-vue-components": "^28.8.0", - "vite": "^7.0.4" - } -} diff --git a/library_system/public/vite.svg b/library_system/public/vite.svg deleted file mode 100644 index e7b8dfb..0000000 --- a/library_system/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/library_system/src/App.vue b/library_system/src/App.vue deleted file mode 100644 index 6427272..0000000 --- a/library_system/src/App.vue +++ /dev/null @@ -1,71 +0,0 @@ - - - - - \ No newline at end of file diff --git a/library_system/src/assets/style.css b/library_system/src/assets/style.css deleted file mode 100644 index 92ac9fe..0000000 --- a/library_system/src/assets/style.css +++ /dev/null @@ -1,62 +0,0 @@ -/* Element Plus 主题定制 */ -:root { - --el-color-primary: #165dff; - --el-color-primary-light-3: #3c8dff; - --el-color-primary-light-5: #6baaff; - --el-color-primary-light-7: #a3cfff; - --el-color-primary-light-8: #d6eaff; - --el-color-primary-light-9: #f4faff; -} - -body { - font-family: 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', Arial, sans-serif; - background: #f6f8fa; - color: #222; - margin: 0; -} - -.el-header, .el-footer { - background: #fff; - box-shadow: 0 2px 8px 0 rgba(0,0,0,0.03); -} - -.el-menu { - border-right: none; -} - -.el-card { - border-radius: 12px; - box-shadow: 0 2px 12px 0 rgba(22,93,255,0.04); -} - -.el-main { - padding: 32px 24px 24px 24px; - min-height: 80vh; -} - -a { - color: var(--el-color-primary); - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - -/* 登录/注册页面居中 */ -.page-center { - min-height: 100vh; - display: flex; - align-items: center; - justify-content: center; - background: linear-gradient(135deg, #e3f0ff 0%, #f6f8fa 100%); -} - -/* 头像样式 */ -.avatar { - width: 48px; - height: 48px; - border-radius: 50%; - object-fit: cover; - box-shadow: 0 2px 8px 0 rgba(22,93,255,0.08); -} diff --git a/library_system/src/assets/vue.svg b/library_system/src/assets/vue.svg deleted file mode 100644 index 770e9d3..0000000 --- a/library_system/src/assets/vue.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/library_system/src/components/BookCard.vue b/library_system/src/components/BookCard.vue deleted file mode 100644 index 8e01c96..0000000 --- a/library_system/src/components/BookCard.vue +++ /dev/null @@ -1,88 +0,0 @@ - - - - - \ No newline at end of file diff --git a/library_system/src/components/HeaderBar.vue b/library_system/src/components/HeaderBar.vue deleted file mode 100644 index 63f8f2f..0000000 --- a/library_system/src/components/HeaderBar.vue +++ /dev/null @@ -1,249 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/library_system/src/main.js b/library_system/src/main.js deleted file mode 100644 index 2b9699b..0000000 --- a/library_system/src/main.js +++ /dev/null @@ -1,25 +0,0 @@ -import { createApp } from 'vue' -import App from './App.vue' -import router from './router' -import store from './store' -import ElementPlus from 'element-plus' -import 'element-plus/dist/index.css' -import * as ElementPlusIconsVue from '@element-plus/icons-vue' - -const app = createApp(App) - -// 注册所有图标 -for (const [key, component] of Object.entries(ElementPlusIconsVue)) { - app.component(key, component) -} - -app.use(ElementPlus) -app.use(store) -app.use(router) - -// 初始化会话 -store.dispatch('initSession') - -app.mount('#app') - -window.store = store \ No newline at end of file diff --git a/library_system/src/router/index.js b/library_system/src/router/index.js deleted file mode 100644 index 6c4095f..0000000 --- a/library_system/src/router/index.js +++ /dev/null @@ -1,131 +0,0 @@ -import { createRouter, createWebHistory } from 'vue-router' -import store from '../store' - - - -const routes = [ - { - path: '/', - name: 'Home', - component: () => import('../views/Home.vue'), - meta: { requiresAuth: false } - }, - { - path: '/login', - name: 'Login', - component: () => import('../views/Auth/Login.vue') - }, - { - path: '/register', - name: 'Register', - component: () => import('../views/Auth/Register.vue') - }, - - { - path: '/books', - name: 'Books', - component: () => import('../views/Books/BookList.vue'), - meta: { requiresAuth: true } - }, - { - path: '/books/:id', - name: 'BookDetail', - component: () => import('../views/Books/BookDetail.vue'), - meta: { requiresAuth: true } - }, - { - path: '/books/add', - name: 'AddBook', - component: () => import('../views/Books/AddBook.vue'), - meta: { requiresAuth: true, requiresAdmin: true } - }, - // { - // path: '/books/edit/:id', - // name: 'EditBook', - // component: () => import('../views/Books/EditBook.vue'), - // meta: { requiresAuth: true, requiresAdmin: true } - // }, - { - path: '/borrow', - name: 'BorrowBook', - component: () => import('../views/Borrow/BorrowBook.vue'), - meta: { requiresAuth: true } - }, - { - path: '/return', - name: 'ReturnBook', - component: () => import('../views/Borrow/ReturnBook.vue'), - meta: { requiresAuth: true } - }, - { - path: '/borrow-records', - name: 'BorrowRecords', - component: () => import('../views/User/BorrowRecords.vue'), - meta: { requiresAuth: true } - }, - { - path: '/recharge', - name: 'Recharge', - component: () => import('../views/User/Recharge.vue'), - meta: { requiresAuth: true } - }, - { - path: '/ranking/weekly', - name: 'WeeklyRank', - component: () => import('../views/Ranking/WeeklyRank.vue'), - meta: { requiresAuth: true } - }, - { - path: '/ranking/monthly', - name: 'MonthlyRank', - component: () => import('../views/Ranking/MonthlyRank.vue'), - meta: { requiresAuth: true } - }, - { - path: '/admin/borrow-records', - name: 'AllBorrowRecords', - component: () => import('../views/Admin/AllBorrowRecords.vue'), - meta: { requiresAdmin: true } - }, - { - path: '/admin/books', - name: 'BookManagement', - component: () => import('../views/Admin/BookManagement.vue'), - meta: { requiresAdmin: true } - } -] - -const router = createRouter({ - history: createWebHistory(import.meta.env.BASE_URL), - routes -}) - -// 路由守卫 -router.beforeEach((to, from, next) => { - // 等待会话初始化完成 - if (!store.state.sessionInitialized) { - return next() - } - - const isAuthenticated = store.getters.isAuthenticated - const isAdmin = store.getters.isAdmin - - // 如果路由需要认证但用户未登录,跳转到登录页 - if (to.meta.requiresAuth && !isAuthenticated) { - return next('/login') - } - - // 如果路由需要管理员权限但用户不是管理员 - if (to.meta.requiresAdmin && !isAdmin) { - return next({ name: 'Home' }) - } - - // 如果用户已登录但访问登录/注册页,跳转到首页 - if ((to.name === 'Login' || to.name === 'Register') && isAuthenticated) { - return next({ name: 'Home' }) - } - - next() -}) - -export default router \ No newline at end of file diff --git a/library_system/src/store/index.js b/library_system/src/store/index.js deleted file mode 100644 index 38f5493..0000000 --- a/library_system/src/store/index.js +++ /dev/null @@ -1,370 +0,0 @@ -import { createStore } from 'vuex' -import service from '../utils/request' - -export default createStore({ - state: { - user: JSON.parse(sessionStorage.getItem('user')) || null, - balance: JSON.parse(sessionStorage.getItem('balance')) || 0, - vipLevel: JSON.parse(sessionStorage.getItem('vipLevel')) || 0, - borrowedBooks: JSON.parse(sessionStorage.getItem('borrowedBooks')) || [], - sessionInitialized: false - }, - getters: { - isAuthenticated: state => !!state.user, - isAdmin: state => state.user?.admin || false - }, - mutations: { - setUser(state, user) { - const admin = user.admin === 1; - const userData = { - ...user, - admin - }; - - state.user = user - console.log("user") - console.log(user) - console.log("state.user") - console.log(state.user) - sessionStorage.setItem('user', JSON.stringify(user)) - }, - setBalanceAndVip(state, { balance, vip }) { - state.balance = balance - state.vipLevel = vip - sessionStorage.setItem('balance', JSON.stringify(balance)) - sessionStorage.setItem('vipLevel', JSON.stringify(vip)) - }, - setBorrowedBooks(state, books) { - state.borrowedBooks = books - sessionStorage.setItem('borrowedBooks', JSON.stringify(books)) - }, - clearUser(state) { - state.user = null - state.balance = 0 - state.vipLevel = 0 - state.borrowedBooks = [] - sessionStorage.removeItem('user') - sessionStorage.removeItem('balance') - sessionStorage.removeItem('vipLevel') - sessionStorage.removeItem('borrowedBooks') - }, - removeBorrowedBook(state, title) { - state.borrowedBooks = state.borrowedBooks.filter(book => book.title !== title) - }, - setSessionInitialized(state, value) { - state.sessionInitialized = value - } - }, - actions: { - async initSession({ commit, dispatch }) { - try { - // 静默获取用户信息 - const userData = await service.get('/user/getinfo', { - silent: true // 避免未登录时显示错误 - }) - - if (userData && userData.username) { - const admin = userData.admin === 1; - - commit('setUser', { - username: userData.username, - pic: userData.pic || '', - admin - }) - - // 获取关联信息 - try { - await dispatch('fetchBalanceAndVip') - } catch (balanceError) { - console.warn('获取余额信息失败:', balanceError) - } - - try { - await dispatch('fetchBorrowedBooks') - } catch (booksError) { - console.warn('获取借阅书籍失败:', booksError) - } - } - } catch (error) { - console.log('未检测到有效会话,用户需要重新登录') - // 清除可能存在的无效数据 - commit('clearUser') - } finally { - commit('setSessionInitialized', true) - } - }, - - - // 用户登录 - async login({ dispatch }, { username, password }) { - const response = await service.post('/user/login', - `username=${encodeURIComponent(username)}&password=${encodeURIComponent(password)}`, - { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } - ) - - // 登录成功后获取用户信息 - const userInfo = await dispatch('fetchUser') - return { - ...response.data, - user: userInfo - } - }, - - // 用户注册 - async register(_, { username, password }) { - const response = await service.post('/user/register', - `username=${encodeURIComponent(username)}&password=${encodeURIComponent(password)}`, - { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } - ) - - return response.data - }, - - // 获取当前用户信息 - 符合接口文档 - async fetchUser({ commit, dispatch }) { - try { - const response = await service.get('/user/getinfo') - const userData = response.data - console.log("fetchUer userData") - console.log(userData) - const admin = userData.admin === 1; - // 用户信息接口直接返回用户对象 - commit('setUser', { - username: userData.username || '', - pic: userData.pic || '', - admin - }) - - // 获取关联信息 - try { - await dispatch('fetchBalanceAndVip') - } catch (balanceError) { - console.error('获取余额信息失败:', balanceError) - } - - try { - await dispatch('fetchBorrowedBooks') - } catch (booksError) { - console.error('获取借阅书籍失败:', booksError) - } - - return userData - } catch (error) { - commit('clearUser') - throw error - } - }, - - // 获取余额和VIP等级 - 符合接口文档1.5 - async fetchBalanceAndVip({ commit }) { - try { - const response = await service.post('/user/findmoney') - const resData = response.data || {} - if (resData.code === 200) { - console.log("fetchBalanceAndVip resData") - console.log(resData) - const balance = resData.data.balance - const vip = resData.data.vip - - // const message = resData.message || '' - // // 使用正则表达式解析余额和VIP等级 - // const balanceMatch = message.match(/余额为:(\d+\.?\d*)元/) - // const vipMatch = message.match(/当前VIP等级为:(\d+)/) - console.log("balance:"+balance+",vip:"+vip) - if (balance && vip) { - commit('setBalanceAndVip', { balance, vip }) - } else { - console.warn('无法解析余额或VIP信息:', message) - commit('setBalanceAndVip', { balance: 0, vip: 0 }) - } - } else { - throw new Error(resData.message || '获取余额信息失败') - } - - return resData - } catch (error) { - console.error('获取余额失败:', error) - // 不抛出错误,避免影响其他功能 - return { code: 500, message: '获取余额失败' } - } - }, - - - // 账户充值 - async recharge({ dispatch }, { money }) { // 添加 { dispatch } 解构 - const response = await service.post('/user/recharge', - `money=${money}`, - { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } - ) - - // 充值后刷新余额 - await dispatch('fetchBalanceAndVip') - return response.data - }, - - // 退出登录 - async logout({ commit }) { - commit('clearUser') - return { code: 200, message: '已退出登录' } - }, - - // 查询个人借书记录 - async fetchBorrowRecords() { - const response = await service.get('/user/findone') - return response.data - }, - - // 获取当前用户已借书籍 - async fetchBorrowedBooks({ commit }) { - const response = await service.get('/user/borrow/books') - - // 按照接口文档处理响应 - if (response.data.code === 200) { - commit('setBorrowedBooks', response.data.data || []) - } else { - throw new Error(response.data.message || '获取已借书籍失败') - } - - return response.data -}, - - // 租借书籍 -async borrowBook({ dispatch }, { title }) { - const response = await service.post('/borrow/borrowbook', - `title=${encodeURIComponent(title)}`, - { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } - ) - - // 借书后刷新用户信息 - await dispatch('fetchUser') - return response.data -}, - -// 归还书籍 - 符合接口文档3.2 -async returnBook({ dispatch }, { title }) { - try { - const response = await service.post('/borrow/returnbook', - `title=${encodeURIComponent(title)}`, - { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } - ) - - // 还书成功后刷新借阅书籍列表 - await dispatch('fetchBorrowedBooks') - - return response.data - } catch (error) { - console.error('还书失败:', error) - throw error - } -}, - - // 查询全部书籍 - 符合接口文档 - async fetchBooks(_, params = {}) { - const config = { - params: { - page: params.page || 1, - pageSize: params.pageSize || 10, - title: params.keyword || '' - } - } - - const response = await service.get('/api/select', config) - const countResponse = await service.get('/api/countArticle') - - // console.log('请求书籍:', params.title) - // console.log('API响应:', response) - // 处理不同响应格式 - let list = [] - let total = countResponse.data.data - if (Array.isArray(response)) { - list = response - // total = response.length - } else if (Array.isArray(response.data)) { - list = response.data - // total = response.data.length - } else if (response.data && Array.isArray(response.data.data)) { - list = response.data.data - // total = response.data.total || response.data.data.length - } else if (response.data && Array.isArray(response.data.list)) { - list = response.data.list - // total = response.data.total || response.data.list.length - } - - return { - data: { - list, - total - } - } - }, - - // 根据书名查单本书 - 符合接口文档2.3 - async fetchBookByTitle(_, payload) { - const { title } = payload; - - try { - const response = await service.get('/api/selectone', { - params: { title } - }) - - // 根据接口文档处理响应 - if (response.data && response.data.code === 200) { - return { data: response.data.data } - } else { - throw new Error(response.data?.message || '获取书籍信息失败') - } - } catch (error) { - console.error('API请求失败:', error) - throw error - } - }, - async fetchBookById(_, payload) { - const { id } = payload; - - try { - const response = await service.get('/api/selectById/'+id) - - // 根据接口文档处理响应 - if (response.data && response.data.code === 200) { - return { data: response.data.data } - } else { - throw new Error(response.data?.message || '获取书籍信息失败') - } - } catch (error) { - console.error('API请求失败:', error) - throw error - } - }, - - // 新增书籍 - async addBook(_, bookData) { - const response = await service.post('/api/add', bookData, { - headers: { 'Content-Type': 'application/json' } - }) - - return response.data - }, - - // 管理员删除书籍 - async deleteBook(_, { title }) { - const response = await service.post('/user/delete', - `title=${encodeURIComponent(title)}`, - { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } - ) - - return response.data - }, - - // 本周热租榜 - 符合接口文档 - async fetchWeeklyRank() { - const response = await service.get('/api/rank/weekly') - return { data: Array.isArray(response) ? response : response.data || [] } - }, - - // 本月热租榜 - 符合接口文档 - async fetchMonthlyRank() { - const response = await service.get('/api/rank/monthly') - return { data: Array.isArray(response) ? response : response.data || [] } - } - } -}) \ No newline at end of file diff --git a/library_system/src/utils/date.js b/library_system/src/utils/date.js deleted file mode 100644 index 3e8c5fc..0000000 --- a/library_system/src/utils/date.js +++ /dev/null @@ -1,16 +0,0 @@ -export function formatDate(dateString) { - if (!dateString) return '未知时间' - - const date = new Date(dateString) - - // 处理无效日期 - if (isNaN(date.getTime())) return dateString - - const year = date.getFullYear() - const month = String(date.getMonth() + 1).padStart(2, '0') - const day = String(date.getDate()).padStart(2, '0') - const hours = String(date.getHours()).padStart(2, '0') - const minutes = String(date.getMinutes()).padStart(2, '0') - - return `${year}-${month}-${day} ${hours}:${minutes}` -} \ No newline at end of file diff --git a/library_system/src/utils/request.js b/library_system/src/utils/request.js deleted file mode 100644 index d24e273..0000000 --- a/library_system/src/utils/request.js +++ /dev/null @@ -1,73 +0,0 @@ -import axios from 'axios' -import { ElMessage } from 'element-plus' -import store from '../store/index' -import router from '../router/index' - -// 创建axios实例 -const service = axios.create({ - baseURL: 'http://localhost:8877', - timeout: 10000, - withCredentials: true // 允许携带cookie -}) - -// 请求拦截器 -service.interceptors.request.use( - config => { - - return config - }, - error => { - return Promise.reject(error) - } -) - -// 响应拦截器 -service.interceptors.response.use( - response => { - // 处理成功响应 - const res = response.data - - // 处理业务错误 (code !== 200) - if (res && typeof res === 'object' && res.code !== undefined && res.code !== 200) { - // 检查是否为静默请求 - if (!response.config.silent) { - ElMessage.error(res.message || '请求失败') - } - return Promise.reject(new Error(res.message || 'Error')) - } - - // 返回整个响应对象,确保组件可以访问响应头等信息 - return response - }, - error => { - // 处理HTTP错误 - if (error.response) { - switch (error.response.status) { - case 401: - // 只有在非静默请求时才显示错误信息 - if (!error.config?.silent) { - store.dispatch('logout') - router.push('/login') - ElMessage.error('请先登录') - } - break - case 403: - if (!error.config?.silent) { - ElMessage.error('没有操作权限') - } - break - default: - if (!error.config?.silent) { - ElMessage.error(error.response.data?.message || '请求失败') - } - } - } else { - if (!error.config?.silent) { - ElMessage.error('网络错误,请检查连接') - } - } - return Promise.reject(error) - } -) - -export default service \ No newline at end of file diff --git a/library_system/src/utils/storage.js b/library_system/src/utils/storage.js deleted file mode 100644 index 6e019e3..0000000 --- a/library_system/src/utils/storage.js +++ /dev/null @@ -1,43 +0,0 @@ -// 安全地解析JSON字符串 -export function safeParseJSON(str, defaultValue = null) { - if (!str) return defaultValue - try { - return JSON.parse(str) - } catch (error) { - console.error('JSON解析失败:', error) - return defaultValue - } -} - -// 安全地存储数据到sessionStorage -export function safeSetItem(key, value) { - try { - sessionStorage.setItem(key, JSON.stringify(value)) - return true - } catch (error) { - console.error('存储数据失败:', error) - return false - } -} - -// 安全地从sessionStorage获取数据 -export function safeGetItem(key, defaultValue = null) { - try { - const item = sessionStorage.getItem(key) - return item ? JSON.parse(item) : defaultValue - } catch (error) { - console.error('获取数据失败:', error) - return defaultValue - } -} - -// 安全地从sessionStorage删除数据 -export function safeRemoveItem(key) { - try { - sessionStorage.removeItem(key) - return true - } catch (error) { - console.error('删除数据失败:', error) - return false - } -} \ No newline at end of file diff --git a/library_system/src/views/Admin/AllBorrowRecords.vue b/library_system/src/views/Admin/AllBorrowRecords.vue deleted file mode 100644 index 4c349b5..0000000 --- a/library_system/src/views/Admin/AllBorrowRecords.vue +++ /dev/null @@ -1,148 +0,0 @@ - - - - - diff --git a/library_system/src/views/Admin/BookManagement.vue b/library_system/src/views/Admin/BookManagement.vue deleted file mode 100644 index 593064b..0000000 --- a/library_system/src/views/Admin/BookManagement.vue +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/library_system/src/views/Auth/Login.vue b/library_system/src/views/Auth/Login.vue deleted file mode 100644 index d5a5fa7..0000000 --- a/library_system/src/views/Auth/Login.vue +++ /dev/null @@ -1,133 +0,0 @@ - - - - - \ No newline at end of file diff --git a/library_system/src/views/Auth/Register.vue b/library_system/src/views/Auth/Register.vue deleted file mode 100644 index 817e739..0000000 --- a/library_system/src/views/Auth/Register.vue +++ /dev/null @@ -1,156 +0,0 @@ - - - - - \ No newline at end of file diff --git a/library_system/src/views/Books/AddBook.vue b/library_system/src/views/Books/AddBook.vue deleted file mode 100644 index 5d13af0..0000000 --- a/library_system/src/views/Books/AddBook.vue +++ /dev/null @@ -1,141 +0,0 @@ - - - - - \ No newline at end of file diff --git a/library_system/src/views/Books/BookDetail.vue b/library_system/src/views/Books/BookDetail.vue deleted file mode 100644 index 886041f..0000000 --- a/library_system/src/views/Books/BookDetail.vue +++ /dev/null @@ -1,186 +0,0 @@ - - - - - \ No newline at end of file diff --git a/library_system/src/views/Books/BookList.vue b/library_system/src/views/Books/BookList.vue deleted file mode 100644 index 9ee4e05..0000000 --- a/library_system/src/views/Books/BookList.vue +++ /dev/null @@ -1,202 +0,0 @@ - - - - - \ No newline at end of file diff --git a/library_system/src/views/Books/EditBook.vue b/library_system/src/views/Books/EditBook.vue deleted file mode 100644 index eeaf97a..0000000 --- a/library_system/src/views/Books/EditBook.vue +++ /dev/null @@ -1,3 +0,0 @@ - \ No newline at end of file diff --git a/library_system/src/views/Borrow/BorrowBook.vue b/library_system/src/views/Borrow/BorrowBook.vue deleted file mode 100644 index e92d27b..0000000 --- a/library_system/src/views/Borrow/BorrowBook.vue +++ /dev/null @@ -1,142 +0,0 @@ - - - - - \ No newline at end of file diff --git a/library_system/src/views/Borrow/ReturnBook.vue b/library_system/src/views/Borrow/ReturnBook.vue deleted file mode 100644 index f597661..0000000 --- a/library_system/src/views/Borrow/ReturnBook.vue +++ /dev/null @@ -1,155 +0,0 @@ - - - - - \ No newline at end of file diff --git a/library_system/src/views/Home.vue b/library_system/src/views/Home.vue deleted file mode 100644 index e75e16c..0000000 --- a/library_system/src/views/Home.vue +++ /dev/null @@ -1,164 +0,0 @@ - - - - - \ No newline at end of file diff --git a/library_system/src/views/Ranking/MonthlyRank.vue b/library_system/src/views/Ranking/MonthlyRank.vue deleted file mode 100644 index ff3ff3f..0000000 --- a/library_system/src/views/Ranking/MonthlyRank.vue +++ /dev/null @@ -1,114 +0,0 @@ - - - - - \ No newline at end of file diff --git a/library_system/src/views/Ranking/WeeklyRank.vue b/library_system/src/views/Ranking/WeeklyRank.vue deleted file mode 100644 index b719fb8..0000000 --- a/library_system/src/views/Ranking/WeeklyRank.vue +++ /dev/null @@ -1,113 +0,0 @@ - - - - - \ No newline at end of file diff --git a/library_system/src/views/User/BorrowRecords.vue b/library_system/src/views/User/BorrowRecords.vue deleted file mode 100644 index ffcad87..0000000 --- a/library_system/src/views/User/BorrowRecords.vue +++ /dev/null @@ -1,96 +0,0 @@ - - - - - \ No newline at end of file diff --git a/library_system/src/views/User/Profile.vue b/library_system/src/views/User/Profile.vue deleted file mode 100644 index b03de23..0000000 --- a/library_system/src/views/User/Profile.vue +++ /dev/null @@ -1,122 +0,0 @@ - - - - - \ No newline at end of file diff --git a/library_system/src/views/User/Recharge.vue b/library_system/src/views/User/Recharge.vue deleted file mode 100644 index cc1f495..0000000 --- a/library_system/src/views/User/Recharge.vue +++ /dev/null @@ -1,135 +0,0 @@ - - - - - \ No newline at end of file diff --git a/library_system/vite.config.js b/library_system/vite.config.js deleted file mode 100644 index fc42a82..0000000 --- a/library_system/vite.config.js +++ /dev/null @@ -1,13 +0,0 @@ -// vite.config.js -import { defineConfig } from 'vite' -import vue from '@vitejs/plugin-vue' -import path from 'path' // 确保引入 path 模块 - -export default defineConfig({ - plugins: [vue()], - resolve: { - alias: { - '@': path.resolve(__dirname, 'src') // 关键配置:@ 指向 src 目录 - } - } -}) \ No newline at end of file diff --git a/library_system/文档.md b/library_system/文档.md deleted file mode 100644 index 745b68f..0000000 --- a/library_system/文档.md +++ /dev/null @@ -1,170 +0,0 @@ -书籍租赁系统 -前端对接后端接口文档(无 JWT · 纯 Session) - ---- - -### 一、通用信息 -| 项 | 值 | -| ---------------- | ----------------------------------------- | -| 基地址 | `http://localhost:8877` | -| 认证方式 | Cookie(Session) | -| 统一返回 | `{ code: 200/1, message: "", data: ... }` | -| 白名单(免登录) | `POST /user/login` `POST /user/register` | - ---- - -### 二、用户模块 -#### 1. 注册 -``` -POST /user/register -Content-Type: application/x-www-form-urlencoded - -username=xxx&password=xxx -``` -成功 → `{ code:200, message:"操作成功" }` - -#### 2. 登录 -``` -POST /user/login -Content-Type: application/x-www-form-urlencoded - -username=xxx&password=xxx -``` -成功 → `{ code:200, message:"登陆成功!" }` -失败 → `{ code:1, message:"账号或密码错误!" }` - -#### 3. 获取当前用户信息 -``` -GET /user/getinfo -``` -返回 -```json -{ - "username": "张三", - "pic": "http://xxx/avatar.png" -} -``` - -#### 4. 充值 -``` -POST /user/recharge -Content-Type: application/x-www-form-urlencoded - -money=50 -``` -返回 -```json -{ code:200, message:"成功充值:50.0元" } -``` - -#### 5. 余额 + VIP -``` -POST /user/findmoney -``` -返回 -```json -{ code:200, message:"余额为:100.0元 当前VIP等级为:2" } -``` - -#### 6. 借书记录 -``` -GET /user/findone -``` -- 普通用户:单条对象 -- 管理员:数组 - ---- - -### 三、书籍模块 -#### 1. 新增书籍(管理员) -``` -POST /api/add -Content-Type: application/json - -{ - "title":"三体", - "content":"科幻小说", - "url":"http://...jpg", - "state":"草稿", - "money":5.00, - "number":10 -} -``` -成功 → 返回完整书籍对象 - -#### 2. 查询全部书籍 -``` -GET /api/select -``` -返回数组 - -#### 3. 书名查单本 -``` -GET /api/selectone?title=三体 -``` -返回单条对象 - -#### 4. 删除书籍(管理员) -``` -POST /user/delete -Content-Type: application/x-www-form-urlencoded - -title=三体 -``` -返回 -```json -{ code:200, message:"该书本已删除!" } -``` - -#### 5. 当前用户已借书籍 -``` -GET /user/borrow/books -``` -返回书籍数组 - ---- - -### 四、租借模块 -#### 1. 借书 -``` -POST /borrow/borrowbook -Content-Type: application/x-www-form-urlencoded - -title=三体 -``` -- 余额不足 → `{ code:1, message:"余额不足!" }` -- 成功 → `{ code:200, data:{...} }` - -#### 2. 还书 -``` -POST /borrow/returnbook -Content-Type: application/x-www-form-urlencoded - -title=三体 -``` -返回 -```json -{ code:200, data:{..., return_time:"2025-07-25T16:35:00"} } -``` - ---- - -### 五、排行模块 -#### 1. 本周热租榜 -``` -GET /api/rank/weekly -``` -返回 -```json -[ - { "title":"三体", "url":"...", "money":5, "number":12 }, - ... -] -``` - -#### 2. 本月热租榜 -``` -GET /api/rank/monthly -``` -结构同上 - diff --git a/src/assets/style.css b/src/assets/style.css deleted file mode 100644 index 92ac9fe..0000000 --- a/src/assets/style.css +++ /dev/null @@ -1,62 +0,0 @@ -/* Element Plus 主题定制 */ -:root { - --el-color-primary: #165dff; - --el-color-primary-light-3: #3c8dff; - --el-color-primary-light-5: #6baaff; - --el-color-primary-light-7: #a3cfff; - --el-color-primary-light-8: #d6eaff; - --el-color-primary-light-9: #f4faff; -} - -body { - font-family: 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', Arial, sans-serif; - background: #f6f8fa; - color: #222; - margin: 0; -} - -.el-header, .el-footer { - background: #fff; - box-shadow: 0 2px 8px 0 rgba(0,0,0,0.03); -} - -.el-menu { - border-right: none; -} - -.el-card { - border-radius: 12px; - box-shadow: 0 2px 12px 0 rgba(22,93,255,0.04); -} - -.el-main { - padding: 32px 24px 24px 24px; - min-height: 80vh; -} - -a { - color: var(--el-color-primary); - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - -/* 登录/注册页面居中 */ -.page-center { - min-height: 100vh; - display: flex; - align-items: center; - justify-content: center; - background: linear-gradient(135deg, #e3f0ff 0%, #f6f8fa 100%); -} - -/* 头像样式 */ -.avatar { - width: 48px; - height: 48px; - border-radius: 50%; - object-fit: cover; - box-shadow: 0 2px 8px 0 rgba(22,93,255,0.08); -} diff --git a/src/assets/vue.svg b/src/assets/vue.svg deleted file mode 100644 index 770e9d3..0000000 --- a/src/assets/vue.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/components/BookCard.vue b/src/components/BookCard.vue deleted file mode 100644 index 8e01c96..0000000 --- a/src/components/BookCard.vue +++ /dev/null @@ -1,88 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/components/HeaderBar.vue b/src/components/HeaderBar.vue deleted file mode 100644 index 63f8f2f..0000000 --- a/src/components/HeaderBar.vue +++ /dev/null @@ -1,249 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/src/main.js b/src/main.js deleted file mode 100644 index 2b9699b..0000000 --- a/src/main.js +++ /dev/null @@ -1,25 +0,0 @@ -import { createApp } from 'vue' -import App from './App.vue' -import router from './router' -import store from './store' -import ElementPlus from 'element-plus' -import 'element-plus/dist/index.css' -import * as ElementPlusIconsVue from '@element-plus/icons-vue' - -const app = createApp(App) - -// 注册所有图标 -for (const [key, component] of Object.entries(ElementPlusIconsVue)) { - app.component(key, component) -} - -app.use(ElementPlus) -app.use(store) -app.use(router) - -// 初始化会话 -store.dispatch('initSession') - -app.mount('#app') - -window.store = store \ No newline at end of file diff --git a/src/router/index.js b/src/router/index.js deleted file mode 100644 index 6c4095f..0000000 --- a/src/router/index.js +++ /dev/null @@ -1,131 +0,0 @@ -import { createRouter, createWebHistory } from 'vue-router' -import store from '../store' - - - -const routes = [ - { - path: '/', - name: 'Home', - component: () => import('../views/Home.vue'), - meta: { requiresAuth: false } - }, - { - path: '/login', - name: 'Login', - component: () => import('../views/Auth/Login.vue') - }, - { - path: '/register', - name: 'Register', - component: () => import('../views/Auth/Register.vue') - }, - - { - path: '/books', - name: 'Books', - component: () => import('../views/Books/BookList.vue'), - meta: { requiresAuth: true } - }, - { - path: '/books/:id', - name: 'BookDetail', - component: () => import('../views/Books/BookDetail.vue'), - meta: { requiresAuth: true } - }, - { - path: '/books/add', - name: 'AddBook', - component: () => import('../views/Books/AddBook.vue'), - meta: { requiresAuth: true, requiresAdmin: true } - }, - // { - // path: '/books/edit/:id', - // name: 'EditBook', - // component: () => import('../views/Books/EditBook.vue'), - // meta: { requiresAuth: true, requiresAdmin: true } - // }, - { - path: '/borrow', - name: 'BorrowBook', - component: () => import('../views/Borrow/BorrowBook.vue'), - meta: { requiresAuth: true } - }, - { - path: '/return', - name: 'ReturnBook', - component: () => import('../views/Borrow/ReturnBook.vue'), - meta: { requiresAuth: true } - }, - { - path: '/borrow-records', - name: 'BorrowRecords', - component: () => import('../views/User/BorrowRecords.vue'), - meta: { requiresAuth: true } - }, - { - path: '/recharge', - name: 'Recharge', - component: () => import('../views/User/Recharge.vue'), - meta: { requiresAuth: true } - }, - { - path: '/ranking/weekly', - name: 'WeeklyRank', - component: () => import('../views/Ranking/WeeklyRank.vue'), - meta: { requiresAuth: true } - }, - { - path: '/ranking/monthly', - name: 'MonthlyRank', - component: () => import('../views/Ranking/MonthlyRank.vue'), - meta: { requiresAuth: true } - }, - { - path: '/admin/borrow-records', - name: 'AllBorrowRecords', - component: () => import('../views/Admin/AllBorrowRecords.vue'), - meta: { requiresAdmin: true } - }, - { - path: '/admin/books', - name: 'BookManagement', - component: () => import('../views/Admin/BookManagement.vue'), - meta: { requiresAdmin: true } - } -] - -const router = createRouter({ - history: createWebHistory(import.meta.env.BASE_URL), - routes -}) - -// 路由守卫 -router.beforeEach((to, from, next) => { - // 等待会话初始化完成 - if (!store.state.sessionInitialized) { - return next() - } - - const isAuthenticated = store.getters.isAuthenticated - const isAdmin = store.getters.isAdmin - - // 如果路由需要认证但用户未登录,跳转到登录页 - if (to.meta.requiresAuth && !isAuthenticated) { - return next('/login') - } - - // 如果路由需要管理员权限但用户不是管理员 - if (to.meta.requiresAdmin && !isAdmin) { - return next({ name: 'Home' }) - } - - // 如果用户已登录但访问登录/注册页,跳转到首页 - if ((to.name === 'Login' || to.name === 'Register') && isAuthenticated) { - return next({ name: 'Home' }) - } - - next() -}) - -export default router \ No newline at end of file diff --git a/src/store/index.js b/src/store/index.js deleted file mode 100644 index 38f5493..0000000 --- a/src/store/index.js +++ /dev/null @@ -1,370 +0,0 @@ -import { createStore } from 'vuex' -import service from '../utils/request' - -export default createStore({ - state: { - user: JSON.parse(sessionStorage.getItem('user')) || null, - balance: JSON.parse(sessionStorage.getItem('balance')) || 0, - vipLevel: JSON.parse(sessionStorage.getItem('vipLevel')) || 0, - borrowedBooks: JSON.parse(sessionStorage.getItem('borrowedBooks')) || [], - sessionInitialized: false - }, - getters: { - isAuthenticated: state => !!state.user, - isAdmin: state => state.user?.admin || false - }, - mutations: { - setUser(state, user) { - const admin = user.admin === 1; - const userData = { - ...user, - admin - }; - - state.user = user - console.log("user") - console.log(user) - console.log("state.user") - console.log(state.user) - sessionStorage.setItem('user', JSON.stringify(user)) - }, - setBalanceAndVip(state, { balance, vip }) { - state.balance = balance - state.vipLevel = vip - sessionStorage.setItem('balance', JSON.stringify(balance)) - sessionStorage.setItem('vipLevel', JSON.stringify(vip)) - }, - setBorrowedBooks(state, books) { - state.borrowedBooks = books - sessionStorage.setItem('borrowedBooks', JSON.stringify(books)) - }, - clearUser(state) { - state.user = null - state.balance = 0 - state.vipLevel = 0 - state.borrowedBooks = [] - sessionStorage.removeItem('user') - sessionStorage.removeItem('balance') - sessionStorage.removeItem('vipLevel') - sessionStorage.removeItem('borrowedBooks') - }, - removeBorrowedBook(state, title) { - state.borrowedBooks = state.borrowedBooks.filter(book => book.title !== title) - }, - setSessionInitialized(state, value) { - state.sessionInitialized = value - } - }, - actions: { - async initSession({ commit, dispatch }) { - try { - // 静默获取用户信息 - const userData = await service.get('/user/getinfo', { - silent: true // 避免未登录时显示错误 - }) - - if (userData && userData.username) { - const admin = userData.admin === 1; - - commit('setUser', { - username: userData.username, - pic: userData.pic || '', - admin - }) - - // 获取关联信息 - try { - await dispatch('fetchBalanceAndVip') - } catch (balanceError) { - console.warn('获取余额信息失败:', balanceError) - } - - try { - await dispatch('fetchBorrowedBooks') - } catch (booksError) { - console.warn('获取借阅书籍失败:', booksError) - } - } - } catch (error) { - console.log('未检测到有效会话,用户需要重新登录') - // 清除可能存在的无效数据 - commit('clearUser') - } finally { - commit('setSessionInitialized', true) - } - }, - - - // 用户登录 - async login({ dispatch }, { username, password }) { - const response = await service.post('/user/login', - `username=${encodeURIComponent(username)}&password=${encodeURIComponent(password)}`, - { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } - ) - - // 登录成功后获取用户信息 - const userInfo = await dispatch('fetchUser') - return { - ...response.data, - user: userInfo - } - }, - - // 用户注册 - async register(_, { username, password }) { - const response = await service.post('/user/register', - `username=${encodeURIComponent(username)}&password=${encodeURIComponent(password)}`, - { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } - ) - - return response.data - }, - - // 获取当前用户信息 - 符合接口文档 - async fetchUser({ commit, dispatch }) { - try { - const response = await service.get('/user/getinfo') - const userData = response.data - console.log("fetchUer userData") - console.log(userData) - const admin = userData.admin === 1; - // 用户信息接口直接返回用户对象 - commit('setUser', { - username: userData.username || '', - pic: userData.pic || '', - admin - }) - - // 获取关联信息 - try { - await dispatch('fetchBalanceAndVip') - } catch (balanceError) { - console.error('获取余额信息失败:', balanceError) - } - - try { - await dispatch('fetchBorrowedBooks') - } catch (booksError) { - console.error('获取借阅书籍失败:', booksError) - } - - return userData - } catch (error) { - commit('clearUser') - throw error - } - }, - - // 获取余额和VIP等级 - 符合接口文档1.5 - async fetchBalanceAndVip({ commit }) { - try { - const response = await service.post('/user/findmoney') - const resData = response.data || {} - if (resData.code === 200) { - console.log("fetchBalanceAndVip resData") - console.log(resData) - const balance = resData.data.balance - const vip = resData.data.vip - - // const message = resData.message || '' - // // 使用正则表达式解析余额和VIP等级 - // const balanceMatch = message.match(/余额为:(\d+\.?\d*)元/) - // const vipMatch = message.match(/当前VIP等级为:(\d+)/) - console.log("balance:"+balance+",vip:"+vip) - if (balance && vip) { - commit('setBalanceAndVip', { balance, vip }) - } else { - console.warn('无法解析余额或VIP信息:', message) - commit('setBalanceAndVip', { balance: 0, vip: 0 }) - } - } else { - throw new Error(resData.message || '获取余额信息失败') - } - - return resData - } catch (error) { - console.error('获取余额失败:', error) - // 不抛出错误,避免影响其他功能 - return { code: 500, message: '获取余额失败' } - } - }, - - - // 账户充值 - async recharge({ dispatch }, { money }) { // 添加 { dispatch } 解构 - const response = await service.post('/user/recharge', - `money=${money}`, - { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } - ) - - // 充值后刷新余额 - await dispatch('fetchBalanceAndVip') - return response.data - }, - - // 退出登录 - async logout({ commit }) { - commit('clearUser') - return { code: 200, message: '已退出登录' } - }, - - // 查询个人借书记录 - async fetchBorrowRecords() { - const response = await service.get('/user/findone') - return response.data - }, - - // 获取当前用户已借书籍 - async fetchBorrowedBooks({ commit }) { - const response = await service.get('/user/borrow/books') - - // 按照接口文档处理响应 - if (response.data.code === 200) { - commit('setBorrowedBooks', response.data.data || []) - } else { - throw new Error(response.data.message || '获取已借书籍失败') - } - - return response.data -}, - - // 租借书籍 -async borrowBook({ dispatch }, { title }) { - const response = await service.post('/borrow/borrowbook', - `title=${encodeURIComponent(title)}`, - { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } - ) - - // 借书后刷新用户信息 - await dispatch('fetchUser') - return response.data -}, - -// 归还书籍 - 符合接口文档3.2 -async returnBook({ dispatch }, { title }) { - try { - const response = await service.post('/borrow/returnbook', - `title=${encodeURIComponent(title)}`, - { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } - ) - - // 还书成功后刷新借阅书籍列表 - await dispatch('fetchBorrowedBooks') - - return response.data - } catch (error) { - console.error('还书失败:', error) - throw error - } -}, - - // 查询全部书籍 - 符合接口文档 - async fetchBooks(_, params = {}) { - const config = { - params: { - page: params.page || 1, - pageSize: params.pageSize || 10, - title: params.keyword || '' - } - } - - const response = await service.get('/api/select', config) - const countResponse = await service.get('/api/countArticle') - - // console.log('请求书籍:', params.title) - // console.log('API响应:', response) - // 处理不同响应格式 - let list = [] - let total = countResponse.data.data - if (Array.isArray(response)) { - list = response - // total = response.length - } else if (Array.isArray(response.data)) { - list = response.data - // total = response.data.length - } else if (response.data && Array.isArray(response.data.data)) { - list = response.data.data - // total = response.data.total || response.data.data.length - } else if (response.data && Array.isArray(response.data.list)) { - list = response.data.list - // total = response.data.total || response.data.list.length - } - - return { - data: { - list, - total - } - } - }, - - // 根据书名查单本书 - 符合接口文档2.3 - async fetchBookByTitle(_, payload) { - const { title } = payload; - - try { - const response = await service.get('/api/selectone', { - params: { title } - }) - - // 根据接口文档处理响应 - if (response.data && response.data.code === 200) { - return { data: response.data.data } - } else { - throw new Error(response.data?.message || '获取书籍信息失败') - } - } catch (error) { - console.error('API请求失败:', error) - throw error - } - }, - async fetchBookById(_, payload) { - const { id } = payload; - - try { - const response = await service.get('/api/selectById/'+id) - - // 根据接口文档处理响应 - if (response.data && response.data.code === 200) { - return { data: response.data.data } - } else { - throw new Error(response.data?.message || '获取书籍信息失败') - } - } catch (error) { - console.error('API请求失败:', error) - throw error - } - }, - - // 新增书籍 - async addBook(_, bookData) { - const response = await service.post('/api/add', bookData, { - headers: { 'Content-Type': 'application/json' } - }) - - return response.data - }, - - // 管理员删除书籍 - async deleteBook(_, { title }) { - const response = await service.post('/user/delete', - `title=${encodeURIComponent(title)}`, - { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } - ) - - return response.data - }, - - // 本周热租榜 - 符合接口文档 - async fetchWeeklyRank() { - const response = await service.get('/api/rank/weekly') - return { data: Array.isArray(response) ? response : response.data || [] } - }, - - // 本月热租榜 - 符合接口文档 - async fetchMonthlyRank() { - const response = await service.get('/api/rank/monthly') - return { data: Array.isArray(response) ? response : response.data || [] } - } - } -}) \ No newline at end of file diff --git a/src/utils/date.js b/src/utils/date.js deleted file mode 100644 index 3e8c5fc..0000000 --- a/src/utils/date.js +++ /dev/null @@ -1,16 +0,0 @@ -export function formatDate(dateString) { - if (!dateString) return '未知时间' - - const date = new Date(dateString) - - // 处理无效日期 - if (isNaN(date.getTime())) return dateString - - const year = date.getFullYear() - const month = String(date.getMonth() + 1).padStart(2, '0') - const day = String(date.getDate()).padStart(2, '0') - const hours = String(date.getHours()).padStart(2, '0') - const minutes = String(date.getMinutes()).padStart(2, '0') - - return `${year}-${month}-${day} ${hours}:${minutes}` -} \ No newline at end of file diff --git a/src/utils/request.js b/src/utils/request.js deleted file mode 100644 index d24e273..0000000 --- a/src/utils/request.js +++ /dev/null @@ -1,73 +0,0 @@ -import axios from 'axios' -import { ElMessage } from 'element-plus' -import store from '../store/index' -import router from '../router/index' - -// 创建axios实例 -const service = axios.create({ - baseURL: 'http://localhost:8877', - timeout: 10000, - withCredentials: true // 允许携带cookie -}) - -// 请求拦截器 -service.interceptors.request.use( - config => { - - return config - }, - error => { - return Promise.reject(error) - } -) - -// 响应拦截器 -service.interceptors.response.use( - response => { - // 处理成功响应 - const res = response.data - - // 处理业务错误 (code !== 200) - if (res && typeof res === 'object' && res.code !== undefined && res.code !== 200) { - // 检查是否为静默请求 - if (!response.config.silent) { - ElMessage.error(res.message || '请求失败') - } - return Promise.reject(new Error(res.message || 'Error')) - } - - // 返回整个响应对象,确保组件可以访问响应头等信息 - return response - }, - error => { - // 处理HTTP错误 - if (error.response) { - switch (error.response.status) { - case 401: - // 只有在非静默请求时才显示错误信息 - if (!error.config?.silent) { - store.dispatch('logout') - router.push('/login') - ElMessage.error('请先登录') - } - break - case 403: - if (!error.config?.silent) { - ElMessage.error('没有操作权限') - } - break - default: - if (!error.config?.silent) { - ElMessage.error(error.response.data?.message || '请求失败') - } - } - } else { - if (!error.config?.silent) { - ElMessage.error('网络错误,请检查连接') - } - } - return Promise.reject(error) - } -) - -export default service \ No newline at end of file diff --git a/src/utils/storage.js b/src/utils/storage.js deleted file mode 100644 index 6e019e3..0000000 --- a/src/utils/storage.js +++ /dev/null @@ -1,43 +0,0 @@ -// 安全地解析JSON字符串 -export function safeParseJSON(str, defaultValue = null) { - if (!str) return defaultValue - try { - return JSON.parse(str) - } catch (error) { - console.error('JSON解析失败:', error) - return defaultValue - } -} - -// 安全地存储数据到sessionStorage -export function safeSetItem(key, value) { - try { - sessionStorage.setItem(key, JSON.stringify(value)) - return true - } catch (error) { - console.error('存储数据失败:', error) - return false - } -} - -// 安全地从sessionStorage获取数据 -export function safeGetItem(key, defaultValue = null) { - try { - const item = sessionStorage.getItem(key) - return item ? JSON.parse(item) : defaultValue - } catch (error) { - console.error('获取数据失败:', error) - return defaultValue - } -} - -// 安全地从sessionStorage删除数据 -export function safeRemoveItem(key) { - try { - sessionStorage.removeItem(key) - return true - } catch (error) { - console.error('删除数据失败:', error) - return false - } -} \ No newline at end of file diff --git a/src/views/Admin/AllBorrowRecords.vue b/src/views/Admin/AllBorrowRecords.vue deleted file mode 100644 index ebf2a4e..0000000 --- a/src/views/Admin/AllBorrowRecords.vue +++ /dev/null @@ -1,148 +0,0 @@ - - - - - diff --git a/src/views/Admin/BookManagement.vue b/src/views/Admin/BookManagement.vue deleted file mode 100644 index 593064b..0000000 --- a/src/views/Admin/BookManagement.vue +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/src/views/Auth/Login.vue b/src/views/Auth/Login.vue deleted file mode 100644 index d5a5fa7..0000000 --- a/src/views/Auth/Login.vue +++ /dev/null @@ -1,133 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/views/Auth/Register.vue b/src/views/Auth/Register.vue deleted file mode 100644 index 817e739..0000000 --- a/src/views/Auth/Register.vue +++ /dev/null @@ -1,156 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/views/Books/AddBook.vue b/src/views/Books/AddBook.vue deleted file mode 100644 index 5d13af0..0000000 --- a/src/views/Books/AddBook.vue +++ /dev/null @@ -1,141 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/views/Books/BookDetail.vue b/src/views/Books/BookDetail.vue deleted file mode 100644 index 886041f..0000000 --- a/src/views/Books/BookDetail.vue +++ /dev/null @@ -1,186 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/views/Books/BookList.vue b/src/views/Books/BookList.vue deleted file mode 100644 index 9ee4e05..0000000 --- a/src/views/Books/BookList.vue +++ /dev/null @@ -1,202 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/views/Books/EditBook.vue b/src/views/Books/EditBook.vue deleted file mode 100644 index eeaf97a..0000000 --- a/src/views/Books/EditBook.vue +++ /dev/null @@ -1,3 +0,0 @@ - \ No newline at end of file diff --git a/src/views/Borrow/BorrowBook.vue b/src/views/Borrow/BorrowBook.vue deleted file mode 100644 index e92d27b..0000000 --- a/src/views/Borrow/BorrowBook.vue +++ /dev/null @@ -1,142 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/views/Borrow/ReturnBook.vue b/src/views/Borrow/ReturnBook.vue deleted file mode 100644 index f597661..0000000 --- a/src/views/Borrow/ReturnBook.vue +++ /dev/null @@ -1,155 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/views/Home.vue b/src/views/Home.vue deleted file mode 100644 index e75e16c..0000000 --- a/src/views/Home.vue +++ /dev/null @@ -1,164 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/views/Ranking/MonthlyRank.vue b/src/views/Ranking/MonthlyRank.vue deleted file mode 100644 index ff3ff3f..0000000 --- a/src/views/Ranking/MonthlyRank.vue +++ /dev/null @@ -1,114 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/views/Ranking/WeeklyRank.vue b/src/views/Ranking/WeeklyRank.vue deleted file mode 100644 index b719fb8..0000000 --- a/src/views/Ranking/WeeklyRank.vue +++ /dev/null @@ -1,113 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/views/User/BorrowRecords.vue b/src/views/User/BorrowRecords.vue deleted file mode 100644 index ffcad87..0000000 --- a/src/views/User/BorrowRecords.vue +++ /dev/null @@ -1,96 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/views/User/Profile.vue b/src/views/User/Profile.vue deleted file mode 100644 index b03de23..0000000 --- a/src/views/User/Profile.vue +++ /dev/null @@ -1,122 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/views/User/Recharge.vue b/src/views/User/Recharge.vue deleted file mode 100644 index a258e97..0000000 --- a/src/views/User/Recharge.vue +++ /dev/null @@ -1,129 +0,0 @@ - - - - - \ No newline at end of file