guoyujie
2025-10-13 f77a26afbfd16c52a79b8fec74a1b59548d7ae86
提交 客户端项目
1个文件已修改
76个文件已添加
7186 ■■■■■ 已修改文件
.gitignore 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/.gitignore 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/erp-customer-client/.gitignore 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/erp-customer-client/README.md 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/erp-customer-client/index.html 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/erp-customer-client/jsconfig.json 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/erp-customer-client/package-lock.json 3608 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/erp-customer-client/package.json 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/erp-customer-client/public/config.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/erp-customer-client/public/favicon.ico 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/erp-customer-client/src/App.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/erp-customer-client/src/assets/base.css 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/erp-customer-client/src/assets/img.png 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/erp-customer-client/src/assets/logo.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/erp-customer-client/src/assets/main.css 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/erp-customer-client/src/assets/northGlass.ico 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/erp-customer-client/src/hook/footSum.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/erp-customer-client/src/lang/index.js 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/erp-customer-client/src/lang/zh.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/erp-customer-client/src/main.js 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/erp-customer-client/src/router/index.js 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/erp-customer-client/src/stores/userInfo.js 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/erp-customer-client/src/utils/decimal.js 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/erp-customer-client/src/utils/request.js 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/erp-customer-client/src/views/LoginView.vue 244 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/erp-customer-client/src/views/MainView.vue 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/erp-customer-client/src/views/RegisterView.vue 194 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/erp-customer-client/src/views/order/OrderDetailView.vue 166 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/erp-customer-client/src/views/order/OrderHistoryView.vue 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/erp-customer-client/src/views/order/OrderUnfinishedView.vue 279 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/erp-customer-client/vite.config.js 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/pom.xml 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/NorthglassErpClientApplication.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/common/Constants.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/common/ExceptionController.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/common/Result.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/config/Knife4jConfig.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/config/MyCorsConfig.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/controller/CustomerUserLoginController.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/controller/sd/CustomerController.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/controller/sd/OrderController.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/controller/sd/OrderDetailController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/controller/sd/OrderGlassDetailController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/controller/sd/OrderProcessDetailController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/domain/dto/sd/OrderDTO.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/domain/dto/sd/OrderDetailDTO.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/domain/po/CustomerUserLogin.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/domain/po/sd/Customer.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/domain/po/sd/Order.java 248 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/domain/po/sd/OrderDetail.java 190 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/domain/po/sd/OrderGlassDetail.java 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/domain/po/sd/OrderProcessDetail.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/mapper/CustomerUserLoginMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/mapper/sd/CustomerMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/mapper/sd/OrderDetailMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/mapper/sd/OrderGlassDetailMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/mapper/sd/OrderMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/mapper/sd/OrderProcessDetailMapper.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/service/ICustomerUserLoginService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/service/impl/CustomerUserLoginServiceImpl.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/service/sd/ICustomerService.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/service/sd/IOrderDetailService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/service/sd/IOrderGlassDetailService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/service/sd/IOrderProcessDetailService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/service/sd/IOrderService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/service/sd/impl/CustomerServiceImpl.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/service/sd/impl/OrderDetailServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/service/sd/impl/OrderGlassDetailServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/service/sd/impl/OrderProcessDetailServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/java/com/example/northglasserpclient/service/sd/impl/OrderServiceImpl.java 196 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/resources/application.yml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/resources/mapper/CustomerMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/resources/mapper/CustomerUserLoginMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/resources/mapper/OrderDetailMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/resources/mapper/OrderGlassDetailMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/resources/mapper/OrderMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
northglass-erp-client/src/main/resources/mapper/OrderProcessDetailMapper.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore
@@ -7,6 +7,9 @@
*.jar
*.war
*.ear
northglass-erp-client/src/test
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
northglass-erp-client/.gitignore
New file
@@ -0,0 +1,33 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
northglass-erp-client/erp-customer-client/.gitignore
New file
@@ -0,0 +1,30 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
.DS_Store
dist
dist-ssr
coverage
*.local
/cypress/videos/
/cypress/screenshots/
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
*.tsbuildinfo
northglass-erp-client/erp-customer-client/README.md
New file
@@ -0,0 +1,29 @@
# erp-customer-client
This template should help get you started developing with Vue 3 in Vite.
## Recommended IDE Setup
[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur).
## Customize configuration
See [Vite Configuration Reference](https://vite.dev/config/).
## Project Setup
```sh
npm install
```
### Compile and Hot-Reload for Development
```sh
npm run dev
```
### Compile and Minify for Production
```sh
npm run build
```
northglass-erp-client/erp-customer-client/index.html
New file
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="">
  <head>
    <meta charset="UTF-8">
    <link rel="icon" href="/favicon.ico">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ERP-Customer</title>
  </head>
  <body>
    <div id="app"></div>
    <script type="module" src="/src/main.js"></script>
    <script src="/config.js"></script>
  </body>
</html>
northglass-erp-client/erp-customer-client/jsconfig.json
New file
@@ -0,0 +1,8 @@
{
  "compilerOptions": {
    "paths": {
      "@/*": ["./src/*"]
    }
  },
  "exclude": ["node_modules", "dist"]
}
northglass-erp-client/erp-customer-client/package-lock.json
New file
@@ -0,0 +1,3608 @@
{
  "name": "erp-customer-client",
  "version": "0.0.0",
  "lockfileVersion": 3,
  "requires": true,
  "packages": {
    "": {
      "name": "erp-customer-client",
      "version": "0.0.0",
      "dependencies": {
        "axios": "^1.12.2",
        "decimal.js": "^10.4.3",
        "element-plus": "^2.11.3",
        "pinia": "^3.0.3",
        "pinia-plugin-persistedstate": "^4.5.0",
        "vue": "^3.5.18",
        "vue-i18n": "^11.1.12",
        "vue-router": "^4.5.1",
        "vxe-pc-ui": "~4.9.41",
        "vxe-table": "~4.16.20",
        "xe-utils": "^3.7.9"
      },
      "devDependencies": {
        "@vitejs/plugin-vue": "^6.0.1",
        "vite": "^7.0.6",
        "vite-plugin-vue-devtools": "^8.0.0"
      },
      "engines": {
        "node": "^20.19.0 || >=22.12.0"
      }
    },
    "node_modules/@babel/code-frame": {
      "version": "7.27.1",
      "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.27.1.tgz",
      "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@babel/helper-validator-identifier": "^7.27.1",
        "js-tokens": "^4.0.0",
        "picocolors": "^1.1.1"
      },
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/compat-data": {
      "version": "7.28.4",
      "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.28.4.tgz",
      "integrity": "sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==",
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/core": {
      "version": "7.28.4",
      "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.28.4.tgz",
      "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==",
      "dev": true,
      "license": "MIT",
      "peer": true,
      "dependencies": {
        "@babel/code-frame": "^7.27.1",
        "@babel/generator": "^7.28.3",
        "@babel/helper-compilation-targets": "^7.27.2",
        "@babel/helper-module-transforms": "^7.28.3",
        "@babel/helpers": "^7.28.4",
        "@babel/parser": "^7.28.4",
        "@babel/template": "^7.27.2",
        "@babel/traverse": "^7.28.4",
        "@babel/types": "^7.28.4",
        "@jridgewell/remapping": "^2.3.5",
        "convert-source-map": "^2.0.0",
        "debug": "^4.1.0",
        "gensync": "^1.0.0-beta.2",
        "json5": "^2.2.3",
        "semver": "^6.3.1"
      },
      "engines": {
        "node": ">=6.9.0"
      },
      "funding": {
        "type": "opencollective",
        "url": "https://opencollective.com/babel"
      }
    },
    "node_modules/@babel/generator": {
      "version": "7.28.3",
      "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.28.3.tgz",
      "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@babel/parser": "^7.28.3",
        "@babel/types": "^7.28.2",
        "@jridgewell/gen-mapping": "^0.3.12",
        "@jridgewell/trace-mapping": "^0.3.28",
        "jsesc": "^3.0.2"
      },
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/helper-annotate-as-pure": {
      "version": "7.27.3",
      "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz",
      "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@babel/types": "^7.27.3"
      },
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/helper-compilation-targets": {
      "version": "7.27.2",
      "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
      "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@babel/compat-data": "^7.27.2",
        "@babel/helper-validator-option": "^7.27.1",
        "browserslist": "^4.24.0",
        "lru-cache": "^5.1.1",
        "semver": "^6.3.1"
      },
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/helper-create-class-features-plugin": {
      "version": "7.28.3",
      "resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz",
      "integrity": "sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@babel/helper-annotate-as-pure": "^7.27.3",
        "@babel/helper-member-expression-to-functions": "^7.27.1",
        "@babel/helper-optimise-call-expression": "^7.27.1",
        "@babel/helper-replace-supers": "^7.27.1",
        "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
        "@babel/traverse": "^7.28.3",
        "semver": "^6.3.1"
      },
      "engines": {
        "node": ">=6.9.0"
      },
      "peerDependencies": {
        "@babel/core": "^7.0.0"
      }
    },
    "node_modules/@babel/helper-globals": {
      "version": "7.28.0",
      "resolved": "https://registry.npmmirror.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
      "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/helper-member-expression-to-functions": {
      "version": "7.27.1",
      "resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz",
      "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@babel/traverse": "^7.27.1",
        "@babel/types": "^7.27.1"
      },
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/helper-module-imports": {
      "version": "7.27.1",
      "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
      "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@babel/traverse": "^7.27.1",
        "@babel/types": "^7.27.1"
      },
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/helper-module-transforms": {
      "version": "7.28.3",
      "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz",
      "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@babel/helper-module-imports": "^7.27.1",
        "@babel/helper-validator-identifier": "^7.27.1",
        "@babel/traverse": "^7.28.3"
      },
      "engines": {
        "node": ">=6.9.0"
      },
      "peerDependencies": {
        "@babel/core": "^7.0.0"
      }
    },
    "node_modules/@babel/helper-optimise-call-expression": {
      "version": "7.27.1",
      "resolved": "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz",
      "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@babel/types": "^7.27.1"
      },
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/helper-plugin-utils": {
      "version": "7.27.1",
      "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz",
      "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==",
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/helper-replace-supers": {
      "version": "7.27.1",
      "resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz",
      "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@babel/helper-member-expression-to-functions": "^7.27.1",
        "@babel/helper-optimise-call-expression": "^7.27.1",
        "@babel/traverse": "^7.27.1"
      },
      "engines": {
        "node": ">=6.9.0"
      },
      "peerDependencies": {
        "@babel/core": "^7.0.0"
      }
    },
    "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
      "version": "7.27.1",
      "resolved": "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz",
      "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@babel/traverse": "^7.27.1",
        "@babel/types": "^7.27.1"
      },
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/helper-string-parser": {
      "version": "7.27.1",
      "resolved": "https://registry.npmmirror.com/@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.npmmirror.com/@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/helper-validator-option": {
      "version": "7.27.1",
      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
      "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/helpers": {
      "version": "7.28.4",
      "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.28.4.tgz",
      "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@babel/template": "^7.27.2",
        "@babel/types": "^7.28.4"
      },
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/parser": {
      "version": "7.28.4",
      "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.28.4.tgz",
      "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==",
      "license": "MIT",
      "dependencies": {
        "@babel/types": "^7.28.4"
      },
      "bin": {
        "parser": "bin/babel-parser.js"
      },
      "engines": {
        "node": ">=6.0.0"
      }
    },
    "node_modules/@babel/plugin-proposal-decorators": {
      "version": "7.28.0",
      "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.28.0.tgz",
      "integrity": "sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@babel/helper-create-class-features-plugin": "^7.27.1",
        "@babel/helper-plugin-utils": "^7.27.1",
        "@babel/plugin-syntax-decorators": "^7.27.1"
      },
      "engines": {
        "node": ">=6.9.0"
      },
      "peerDependencies": {
        "@babel/core": "^7.0.0-0"
      }
    },
    "node_modules/@babel/plugin-syntax-decorators": {
      "version": "7.27.1",
      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz",
      "integrity": "sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@babel/helper-plugin-utils": "^7.27.1"
      },
      "engines": {
        "node": ">=6.9.0"
      },
      "peerDependencies": {
        "@babel/core": "^7.0.0-0"
      }
    },
    "node_modules/@babel/plugin-syntax-import-attributes": {
      "version": "7.27.1",
      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz",
      "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@babel/helper-plugin-utils": "^7.27.1"
      },
      "engines": {
        "node": ">=6.9.0"
      },
      "peerDependencies": {
        "@babel/core": "^7.0.0-0"
      }
    },
    "node_modules/@babel/plugin-syntax-import-meta": {
      "version": "7.10.4",
      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
      "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@babel/helper-plugin-utils": "^7.10.4"
      },
      "peerDependencies": {
        "@babel/core": "^7.0.0-0"
      }
    },
    "node_modules/@babel/plugin-syntax-jsx": {
      "version": "7.27.1",
      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz",
      "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@babel/helper-plugin-utils": "^7.27.1"
      },
      "engines": {
        "node": ">=6.9.0"
      },
      "peerDependencies": {
        "@babel/core": "^7.0.0-0"
      }
    },
    "node_modules/@babel/plugin-syntax-typescript": {
      "version": "7.27.1",
      "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz",
      "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@babel/helper-plugin-utils": "^7.27.1"
      },
      "engines": {
        "node": ">=6.9.0"
      },
      "peerDependencies": {
        "@babel/core": "^7.0.0-0"
      }
    },
    "node_modules/@babel/plugin-transform-typescript": {
      "version": "7.28.0",
      "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz",
      "integrity": "sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@babel/helper-annotate-as-pure": "^7.27.3",
        "@babel/helper-create-class-features-plugin": "^7.27.1",
        "@babel/helper-plugin-utils": "^7.27.1",
        "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
        "@babel/plugin-syntax-typescript": "^7.27.1"
      },
      "engines": {
        "node": ">=6.9.0"
      },
      "peerDependencies": {
        "@babel/core": "^7.0.0-0"
      }
    },
    "node_modules/@babel/template": {
      "version": "7.27.2",
      "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.27.2.tgz",
      "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@babel/code-frame": "^7.27.1",
        "@babel/parser": "^7.27.2",
        "@babel/types": "^7.27.1"
      },
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/traverse": {
      "version": "7.28.4",
      "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.28.4.tgz",
      "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@babel/code-frame": "^7.27.1",
        "@babel/generator": "^7.28.3",
        "@babel/helper-globals": "^7.28.0",
        "@babel/parser": "^7.28.4",
        "@babel/template": "^7.27.2",
        "@babel/types": "^7.28.4",
        "debug": "^4.3.1"
      },
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/@babel/types": {
      "version": "7.28.4",
      "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.28.4.tgz",
      "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==",
      "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.npmmirror.com/@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.2",
      "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz",
      "integrity": "sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==",
      "license": "MIT",
      "peerDependencies": {
        "vue": "^3.2.0"
      }
    },
    "node_modules/@esbuild/aix-ppc64": {
      "version": "0.25.10",
      "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.10.tgz",
      "integrity": "sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==",
      "cpu": [
        "ppc64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "aix"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/android-arm": {
      "version": "0.25.10",
      "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.25.10.tgz",
      "integrity": "sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==",
      "cpu": [
        "arm"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "android"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/android-arm64": {
      "version": "0.25.10",
      "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.25.10.tgz",
      "integrity": "sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==",
      "cpu": [
        "arm64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "android"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/android-x64": {
      "version": "0.25.10",
      "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.25.10.tgz",
      "integrity": "sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==",
      "cpu": [
        "x64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "android"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/darwin-arm64": {
      "version": "0.25.10",
      "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.10.tgz",
      "integrity": "sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==",
      "cpu": [
        "arm64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "darwin"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/darwin-x64": {
      "version": "0.25.10",
      "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.25.10.tgz",
      "integrity": "sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==",
      "cpu": [
        "x64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "darwin"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/freebsd-arm64": {
      "version": "0.25.10",
      "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.10.tgz",
      "integrity": "sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==",
      "cpu": [
        "arm64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "freebsd"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/freebsd-x64": {
      "version": "0.25.10",
      "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.10.tgz",
      "integrity": "sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==",
      "cpu": [
        "x64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "freebsd"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/linux-arm": {
      "version": "0.25.10",
      "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.25.10.tgz",
      "integrity": "sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==",
      "cpu": [
        "arm"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/linux-arm64": {
      "version": "0.25.10",
      "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.25.10.tgz",
      "integrity": "sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==",
      "cpu": [
        "arm64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/linux-ia32": {
      "version": "0.25.10",
      "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.25.10.tgz",
      "integrity": "sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==",
      "cpu": [
        "ia32"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/linux-loong64": {
      "version": "0.25.10",
      "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.25.10.tgz",
      "integrity": "sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==",
      "cpu": [
        "loong64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/linux-mips64el": {
      "version": "0.25.10",
      "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.10.tgz",
      "integrity": "sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==",
      "cpu": [
        "mips64el"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/linux-ppc64": {
      "version": "0.25.10",
      "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.10.tgz",
      "integrity": "sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==",
      "cpu": [
        "ppc64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/linux-riscv64": {
      "version": "0.25.10",
      "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.10.tgz",
      "integrity": "sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==",
      "cpu": [
        "riscv64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/linux-s390x": {
      "version": "0.25.10",
      "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.25.10.tgz",
      "integrity": "sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==",
      "cpu": [
        "s390x"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/linux-x64": {
      "version": "0.25.10",
      "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.25.10.tgz",
      "integrity": "sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==",
      "cpu": [
        "x64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/netbsd-arm64": {
      "version": "0.25.10",
      "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.10.tgz",
      "integrity": "sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==",
      "cpu": [
        "arm64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "netbsd"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/netbsd-x64": {
      "version": "0.25.10",
      "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.10.tgz",
      "integrity": "sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==",
      "cpu": [
        "x64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "netbsd"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/openbsd-arm64": {
      "version": "0.25.10",
      "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.10.tgz",
      "integrity": "sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==",
      "cpu": [
        "arm64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "openbsd"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/openbsd-x64": {
      "version": "0.25.10",
      "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.10.tgz",
      "integrity": "sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==",
      "cpu": [
        "x64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "openbsd"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/openharmony-arm64": {
      "version": "0.25.10",
      "resolved": "https://registry.npmmirror.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.10.tgz",
      "integrity": "sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==",
      "cpu": [
        "arm64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "openharmony"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/sunos-x64": {
      "version": "0.25.10",
      "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.25.10.tgz",
      "integrity": "sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==",
      "cpu": [
        "x64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "sunos"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/win32-arm64": {
      "version": "0.25.10",
      "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.25.10.tgz",
      "integrity": "sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==",
      "cpu": [
        "arm64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "win32"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/win32-ia32": {
      "version": "0.25.10",
      "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.25.10.tgz",
      "integrity": "sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==",
      "cpu": [
        "ia32"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "win32"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@esbuild/win32-x64": {
      "version": "0.25.10",
      "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.25.10.tgz",
      "integrity": "sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==",
      "cpu": [
        "x64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "win32"
      ],
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/@floating-ui/core": {
      "version": "1.7.3",
      "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.7.3.tgz",
      "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==",
      "license": "MIT",
      "dependencies": {
        "@floating-ui/utils": "^0.2.10"
      }
    },
    "node_modules/@floating-ui/dom": {
      "version": "1.7.4",
      "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.7.4.tgz",
      "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==",
      "license": "MIT",
      "dependencies": {
        "@floating-ui/core": "^1.7.3",
        "@floating-ui/utils": "^0.2.10"
      }
    },
    "node_modules/@floating-ui/utils": {
      "version": "0.2.10",
      "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.10.tgz",
      "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==",
      "license": "MIT"
    },
    "node_modules/@intlify/core-base": {
      "version": "11.1.12",
      "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-11.1.12.tgz",
      "integrity": "sha512-whh0trqRsSqVLNEUCwU59pyJZYpU8AmSWl8M3Jz2Mv5ESPP6kFh4juas2NpZ1iCvy7GlNRffUD1xr84gceimjg==",
      "license": "MIT",
      "dependencies": {
        "@intlify/message-compiler": "11.1.12",
        "@intlify/shared": "11.1.12"
      },
      "engines": {
        "node": ">= 16"
      },
      "funding": {
        "url": "https://github.com/sponsors/kazupon"
      }
    },
    "node_modules/@intlify/message-compiler": {
      "version": "11.1.12",
      "resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-11.1.12.tgz",
      "integrity": "sha512-Fv9iQSJoJaXl4ZGkOCN1LDM3trzze0AS2zRz2EHLiwenwL6t0Ki9KySYlyr27yVOj5aVz0e55JePO+kELIvfdQ==",
      "license": "MIT",
      "dependencies": {
        "@intlify/shared": "11.1.12",
        "source-map-js": "^1.0.2"
      },
      "engines": {
        "node": ">= 16"
      },
      "funding": {
        "url": "https://github.com/sponsors/kazupon"
      }
    },
    "node_modules/@intlify/shared": {
      "version": "11.1.12",
      "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-11.1.12.tgz",
      "integrity": "sha512-Om86EjuQtA69hdNj3GQec9ZC0L0vPSAnXzB3gP/gyJ7+mA7t06d9aOAiqMZ+xEOsumGP4eEBlfl8zF2LOTzf2A==",
      "license": "MIT",
      "engines": {
        "node": ">= 16"
      },
      "funding": {
        "url": "https://github.com/sponsors/kazupon"
      }
    },
    "node_modules/@jridgewell/gen-mapping": {
      "version": "0.3.13",
      "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
      "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@jridgewell/sourcemap-codec": "^1.5.0",
        "@jridgewell/trace-mapping": "^0.3.24"
      }
    },
    "node_modules/@jridgewell/remapping": {
      "version": "2.3.5",
      "resolved": "https://registry.npmmirror.com/@jridgewell/remapping/-/remapping-2.3.5.tgz",
      "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@jridgewell/gen-mapping": "^0.3.5",
        "@jridgewell/trace-mapping": "^0.3.24"
      }
    },
    "node_modules/@jridgewell/resolve-uri": {
      "version": "3.1.2",
      "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=6.0.0"
      }
    },
    "node_modules/@jridgewell/sourcemap-codec": {
      "version": "1.5.5",
      "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
      "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
      "license": "MIT"
    },
    "node_modules/@jridgewell/trace-mapping": {
      "version": "0.3.31",
      "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
      "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@jridgewell/resolve-uri": "^3.1.0",
        "@jridgewell/sourcemap-codec": "^1.4.14"
      }
    },
    "node_modules/@polka/url": {
      "version": "1.0.0-next.29",
      "resolved": "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.29.tgz",
      "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==",
      "dev": true,
      "license": "MIT"
    },
    "node_modules/@popperjs/core": {
      "name": "@sxzz/popperjs-es",
      "version": "2.11.7",
      "resolved": "https://registry.npmmirror.com/@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.29",
      "resolved": "https://registry.npmmirror.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.29.tgz",
      "integrity": "sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==",
      "dev": true,
      "license": "MIT"
    },
    "node_modules/@rollup/rollup-android-arm-eabi": {
      "version": "4.50.2",
      "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.50.2.tgz",
      "integrity": "sha512-uLN8NAiFVIRKX9ZQha8wy6UUs06UNSZ32xj6giK/rmMXAgKahwExvK6SsmgU5/brh4w/nSgj8e0k3c1HBQpa0A==",
      "cpu": [
        "arm"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "android"
      ]
    },
    "node_modules/@rollup/rollup-android-arm64": {
      "version": "4.50.2",
      "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.50.2.tgz",
      "integrity": "sha512-oEouqQk2/zxxj22PNcGSskya+3kV0ZKH+nQxuCCOGJ4oTXBdNTbv+f/E3c74cNLeMO1S5wVWacSws10TTSB77g==",
      "cpu": [
        "arm64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "android"
      ]
    },
    "node_modules/@rollup/rollup-darwin-arm64": {
      "version": "4.50.2",
      "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.50.2.tgz",
      "integrity": "sha512-OZuTVTpj3CDSIxmPgGH8en/XtirV5nfljHZ3wrNwvgkT5DQLhIKAeuFSiwtbMto6oVexV0k1F1zqURPKf5rI1Q==",
      "cpu": [
        "arm64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "darwin"
      ]
    },
    "node_modules/@rollup/rollup-darwin-x64": {
      "version": "4.50.2",
      "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.50.2.tgz",
      "integrity": "sha512-Wa/Wn8RFkIkr1vy1k1PB//VYhLnlnn5eaJkfTQKivirOvzu5uVd2It01ukeQstMursuz7S1bU+8WW+1UPXpa8A==",
      "cpu": [
        "x64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "darwin"
      ]
    },
    "node_modules/@rollup/rollup-freebsd-arm64": {
      "version": "4.50.2",
      "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.50.2.tgz",
      "integrity": "sha512-QkzxvH3kYN9J1w7D1A+yIMdI1pPekD+pWx7G5rXgnIlQ1TVYVC6hLl7SOV9pi5q9uIDF9AuIGkuzcbF7+fAhow==",
      "cpu": [
        "arm64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "freebsd"
      ]
    },
    "node_modules/@rollup/rollup-freebsd-x64": {
      "version": "4.50.2",
      "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.50.2.tgz",
      "integrity": "sha512-dkYXB0c2XAS3a3jmyDkX4Jk0m7gWLFzq1C3qUnJJ38AyxIF5G/dyS4N9B30nvFseCfgtCEdbYFhk0ChoCGxPog==",
      "cpu": [
        "x64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "freebsd"
      ]
    },
    "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
      "version": "4.50.2",
      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.50.2.tgz",
      "integrity": "sha512-9VlPY/BN3AgbukfVHAB8zNFWB/lKEuvzRo1NKev0Po8sYFKx0i+AQlCYftgEjcL43F2h9Ui1ZSdVBc4En/sP2w==",
      "cpu": [
        "arm"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ]
    },
    "node_modules/@rollup/rollup-linux-arm-musleabihf": {
      "version": "4.50.2",
      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.50.2.tgz",
      "integrity": "sha512-+GdKWOvsifaYNlIVf07QYan1J5F141+vGm5/Y8b9uCZnG/nxoGqgCmR24mv0koIWWuqvFYnbURRqw1lv7IBINw==",
      "cpu": [
        "arm"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ]
    },
    "node_modules/@rollup/rollup-linux-arm64-gnu": {
      "version": "4.50.2",
      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.50.2.tgz",
      "integrity": "sha512-df0Eou14ojtUdLQdPFnymEQteENwSJAdLf5KCDrmZNsy1c3YaCNaJvYsEUHnrg+/DLBH612/R0xd3dD03uz2dg==",
      "cpu": [
        "arm64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ]
    },
    "node_modules/@rollup/rollup-linux-arm64-musl": {
      "version": "4.50.2",
      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.50.2.tgz",
      "integrity": "sha512-iPeouV0UIDtz8j1YFR4OJ/zf7evjauqv7jQ/EFs0ClIyL+by++hiaDAfFipjOgyz6y6xbDvJuiU4HwpVMpRFDQ==",
      "cpu": [
        "arm64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ]
    },
    "node_modules/@rollup/rollup-linux-loong64-gnu": {
      "version": "4.50.2",
      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.50.2.tgz",
      "integrity": "sha512-OL6KaNvBopLlj5fTa5D5bau4W82f+1TyTZRr2BdnfsrnQnmdxh4okMxR2DcDkJuh4KeoQZVuvHvzuD/lyLn2Kw==",
      "cpu": [
        "loong64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ]
    },
    "node_modules/@rollup/rollup-linux-ppc64-gnu": {
      "version": "4.50.2",
      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.50.2.tgz",
      "integrity": "sha512-I21VJl1w6z/K5OTRl6aS9DDsqezEZ/yKpbqlvfHbW0CEF5IL8ATBMuUx6/mp683rKTK8thjs/0BaNrZLXetLag==",
      "cpu": [
        "ppc64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ]
    },
    "node_modules/@rollup/rollup-linux-riscv64-gnu": {
      "version": "4.50.2",
      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.50.2.tgz",
      "integrity": "sha512-Hq6aQJT/qFFHrYMjS20nV+9SKrXL2lvFBENZoKfoTH2kKDOJqff5OSJr4x72ZaG/uUn+XmBnGhfr4lwMRrmqCQ==",
      "cpu": [
        "riscv64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ]
    },
    "node_modules/@rollup/rollup-linux-riscv64-musl": {
      "version": "4.50.2",
      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.50.2.tgz",
      "integrity": "sha512-82rBSEXRv5qtKyr0xZ/YMF531oj2AIpLZkeNYxmKNN6I2sVE9PGegN99tYDLK2fYHJITL1P2Lgb4ZXnv0PjQvw==",
      "cpu": [
        "riscv64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ]
    },
    "node_modules/@rollup/rollup-linux-s390x-gnu": {
      "version": "4.50.2",
      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.50.2.tgz",
      "integrity": "sha512-4Q3S3Hy7pC6uaRo9gtXUTJ+EKo9AKs3BXKc2jYypEcMQ49gDPFU2P1ariX9SEtBzE5egIX6fSUmbmGazwBVF9w==",
      "cpu": [
        "s390x"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ]
    },
    "node_modules/@rollup/rollup-linux-x64-gnu": {
      "version": "4.50.2",
      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.50.2.tgz",
      "integrity": "sha512-9Jie/At6qk70dNIcopcL4p+1UirusEtznpNtcq/u/C5cC4HBX7qSGsYIcG6bdxj15EYWhHiu02YvmdPzylIZlA==",
      "cpu": [
        "x64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ]
    },
    "node_modules/@rollup/rollup-linux-x64-musl": {
      "version": "4.50.2",
      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.50.2.tgz",
      "integrity": "sha512-HPNJwxPL3EmhzeAnsWQCM3DcoqOz3/IC6de9rWfGR8ZCuEHETi9km66bH/wG3YH0V3nyzyFEGUZeL5PKyy4xvw==",
      "cpu": [
        "x64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "linux"
      ]
    },
    "node_modules/@rollup/rollup-openharmony-arm64": {
      "version": "4.50.2",
      "resolved": "https://registry.npmmirror.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.50.2.tgz",
      "integrity": "sha512-nMKvq6FRHSzYfKLHZ+cChowlEkR2lj/V0jYj9JnGUVPL2/mIeFGmVM2mLaFeNa5Jev7W7TovXqXIG2d39y1KYA==",
      "cpu": [
        "arm64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "openharmony"
      ]
    },
    "node_modules/@rollup/rollup-win32-arm64-msvc": {
      "version": "4.50.2",
      "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.50.2.tgz",
      "integrity": "sha512-eFUvvnTYEKeTyHEijQKz81bLrUQOXKZqECeiWH6tb8eXXbZk+CXSG2aFrig2BQ/pjiVRj36zysjgILkqarS2YA==",
      "cpu": [
        "arm64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "win32"
      ]
    },
    "node_modules/@rollup/rollup-win32-ia32-msvc": {
      "version": "4.50.2",
      "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.50.2.tgz",
      "integrity": "sha512-cBaWmXqyfRhH8zmUxK3d3sAhEWLrtMjWBRwdMMHJIXSjvjLKvv49adxiEz+FJ8AP90apSDDBx2Tyd/WylV6ikA==",
      "cpu": [
        "ia32"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "win32"
      ]
    },
    "node_modules/@rollup/rollup-win32-x64-msvc": {
      "version": "4.50.2",
      "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.50.2.tgz",
      "integrity": "sha512-APwKy6YUhvZaEoHyM+9xqmTpviEI+9eL7LoCH+aLcvWYHJ663qG5zx7WzWZY+a9qkg5JtzcMyJ9z0WtQBMDmgA==",
      "cpu": [
        "x64"
      ],
      "dev": true,
      "license": "MIT",
      "optional": true,
      "os": [
        "win32"
      ]
    },
    "node_modules/@sec-ant/readable-stream": {
      "version": "0.4.1",
      "resolved": "https://registry.npmmirror.com/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz",
      "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==",
      "dev": true,
      "license": "MIT"
    },
    "node_modules/@sindresorhus/merge-streams": {
      "version": "4.0.0",
      "resolved": "https://registry.npmmirror.com/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz",
      "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==",
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=18"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/@types/estree": {
      "version": "1.0.8",
      "resolved": "https://registry.npmmirror.com/@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.npmmirror.com/@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.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz",
      "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
      "license": "MIT",
      "peer": true,
      "dependencies": {
        "@types/lodash": "*"
      }
    },
    "node_modules/@types/web-bluetooth": {
      "version": "0.0.16",
      "resolved": "https://registry.npmmirror.com/@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.1",
      "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-6.0.1.tgz",
      "integrity": "sha512-+MaE752hU0wfPFJEUAIxqw18+20euHHdxVtMvbFcOEpjEyfqXH/5DCoTHiVJ0J29EhTJdoTkjEv5YBKU9dnoTw==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@rolldown/pluginutils": "1.0.0-beta.29"
      },
      "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/babel-helper-vue-transform-on": {
      "version": "1.5.0",
      "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.5.0.tgz",
      "integrity": "sha512-0dAYkerNhhHutHZ34JtTl2czVQHUNWv6xEbkdF5W+Yrv5pCWsqjeORdOgbtW2I9gWlt+wBmVn+ttqN9ZxR5tzA==",
      "dev": true,
      "license": "MIT"
    },
    "node_modules/@vue/babel-plugin-jsx": {
      "version": "1.5.0",
      "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.5.0.tgz",
      "integrity": "sha512-mneBhw1oOqCd2247O0Yw/mRwC9jIGACAJUlawkmMBiNmL4dGA2eMzuNZVNqOUfYTa6vqmND4CtOPzmEEEqLKFw==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@babel/helper-module-imports": "^7.27.1",
        "@babel/helper-plugin-utils": "^7.27.1",
        "@babel/plugin-syntax-jsx": "^7.27.1",
        "@babel/template": "^7.27.2",
        "@babel/traverse": "^7.28.0",
        "@babel/types": "^7.28.2",
        "@vue/babel-helper-vue-transform-on": "1.5.0",
        "@vue/babel-plugin-resolve-type": "1.5.0",
        "@vue/shared": "^3.5.18"
      },
      "peerDependencies": {
        "@babel/core": "^7.0.0-0"
      },
      "peerDependenciesMeta": {
        "@babel/core": {
          "optional": true
        }
      }
    },
    "node_modules/@vue/babel-plugin-resolve-type": {
      "version": "1.5.0",
      "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.5.0.tgz",
      "integrity": "sha512-Wm/60o+53JwJODm4Knz47dxJnLDJ9FnKnGZJbUUf8nQRAtt6P+undLUAVU3Ha33LxOJe6IPoifRQ6F/0RrU31w==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@babel/code-frame": "^7.27.1",
        "@babel/helper-module-imports": "^7.27.1",
        "@babel/helper-plugin-utils": "^7.27.1",
        "@babel/parser": "^7.28.0",
        "@vue/compiler-sfc": "^3.5.18"
      },
      "funding": {
        "url": "https://github.com/sponsors/sxzz"
      },
      "peerDependencies": {
        "@babel/core": "^7.0.0-0"
      }
    },
    "node_modules/@vue/compiler-core": {
      "version": "3.5.21",
      "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.21.tgz",
      "integrity": "sha512-8i+LZ0vf6ZgII5Z9XmUvrCyEzocvWT+TeR2VBUVlzIH6Tyv57E20mPZ1bCS+tbejgUgmjrEh7q/0F0bibskAmw==",
      "license": "MIT",
      "dependencies": {
        "@babel/parser": "^7.28.3",
        "@vue/shared": "3.5.21",
        "entities": "^4.5.0",
        "estree-walker": "^2.0.2",
        "source-map-js": "^1.2.1"
      }
    },
    "node_modules/@vue/compiler-dom": {
      "version": "3.5.21",
      "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.21.tgz",
      "integrity": "sha512-jNtbu/u97wiyEBJlJ9kmdw7tAr5Vy0Aj5CgQmo+6pxWNQhXZDPsRr1UWPN4v3Zf82s2H3kF51IbzZ4jMWAgPlQ==",
      "license": "MIT",
      "dependencies": {
        "@vue/compiler-core": "3.5.21",
        "@vue/shared": "3.5.21"
      }
    },
    "node_modules/@vue/compiler-sfc": {
      "version": "3.5.21",
      "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.21.tgz",
      "integrity": "sha512-SXlyk6I5eUGBd2v8Ie7tF6ADHE9kCR6mBEuPyH1nUZ0h6Xx6nZI29i12sJKQmzbDyr2tUHMhhTt51Z6blbkTTQ==",
      "license": "MIT",
      "dependencies": {
        "@babel/parser": "^7.28.3",
        "@vue/compiler-core": "3.5.21",
        "@vue/compiler-dom": "3.5.21",
        "@vue/compiler-ssr": "3.5.21",
        "@vue/shared": "3.5.21",
        "estree-walker": "^2.0.2",
        "magic-string": "^0.30.18",
        "postcss": "^8.5.6",
        "source-map-js": "^1.2.1"
      }
    },
    "node_modules/@vue/compiler-ssr": {
      "version": "3.5.21",
      "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.21.tgz",
      "integrity": "sha512-vKQ5olH5edFZdf5ZrlEgSO1j1DMA4u23TVK5XR1uMhvwnYvVdDF0nHXJUblL/GvzlShQbjhZZ2uvYmDlAbgo9w==",
      "license": "MIT",
      "dependencies": {
        "@vue/compiler-dom": "3.5.21",
        "@vue/shared": "3.5.21"
      }
    },
    "node_modules/@vue/devtools-api": {
      "version": "6.6.4",
      "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
      "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==",
      "license": "MIT"
    },
    "node_modules/@vue/devtools-core": {
      "version": "8.0.2",
      "resolved": "https://registry.npmmirror.com/@vue/devtools-core/-/devtools-core-8.0.2.tgz",
      "integrity": "sha512-V7eKTTHoS6KfK8PSGMLZMhGv/9yNDrmv6Qc3r71QILulnzPnqK2frsTyx3e2MrhdUZnENPEm6hcb4z0GZOqNhw==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@vue/devtools-kit": "^8.0.2",
        "@vue/devtools-shared": "^8.0.2",
        "mitt": "^3.0.1",
        "nanoid": "^5.1.5",
        "pathe": "^2.0.3",
        "vite-hot-client": "^2.1.0"
      },
      "peerDependencies": {
        "vue": "^3.0.0"
      }
    },
    "node_modules/@vue/devtools-core/node_modules/@vue/devtools-kit": {
      "version": "8.0.2",
      "resolved": "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-8.0.2.tgz",
      "integrity": "sha512-yjZKdEmhJzQqbOh4KFBfTOQjDPMrjjBNCnHBvnTGJX+YLAqoUtY2J+cg7BE+EA8KUv8LprECq04ts75wCoIGWA==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@vue/devtools-shared": "^8.0.2",
        "birpc": "^2.5.0",
        "hookable": "^5.5.3",
        "mitt": "^3.0.1",
        "perfect-debounce": "^2.0.0",
        "speakingurl": "^14.0.1",
        "superjson": "^2.2.2"
      }
    },
    "node_modules/@vue/devtools-core/node_modules/@vue/devtools-shared": {
      "version": "8.0.2",
      "resolved": "https://registry.npmmirror.com/@vue/devtools-shared/-/devtools-shared-8.0.2.tgz",
      "integrity": "sha512-mLU0QVdy5Lp40PMGSixDw/Kbd6v5dkQXltd2r+mdVQV7iUog2NlZuLxFZApFZ/mObUBDhoCpf0T3zF2FWWdeHw==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "rfdc": "^1.4.1"
      }
    },
    "node_modules/@vue/devtools-core/node_modules/nanoid": {
      "version": "5.1.5",
      "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-5.1.5.tgz",
      "integrity": "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==",
      "dev": true,
      "funding": [
        {
          "type": "github",
          "url": "https://github.com/sponsors/ai"
        }
      ],
      "license": "MIT",
      "bin": {
        "nanoid": "bin/nanoid.js"
      },
      "engines": {
        "node": "^18 || >=20"
      }
    },
    "node_modules/@vue/devtools-core/node_modules/perfect-debounce": {
      "version": "2.0.0",
      "resolved": "https://registry.npmmirror.com/perfect-debounce/-/perfect-debounce-2.0.0.tgz",
      "integrity": "sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==",
      "dev": true,
      "license": "MIT"
    },
    "node_modules/@vue/devtools-kit": {
      "version": "7.7.7",
      "resolved": "https://registry.npmmirror.com/@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.npmmirror.com/@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.21",
      "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.21.tgz",
      "integrity": "sha512-3ah7sa+Cwr9iiYEERt9JfZKPw4A2UlbY8RbbnH2mGCE8NwHkhmlZt2VsH0oDA3P08X3jJd29ohBDtX+TbD9AsA==",
      "license": "MIT",
      "dependencies": {
        "@vue/shared": "3.5.21"
      }
    },
    "node_modules/@vue/runtime-core": {
      "version": "3.5.21",
      "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.21.tgz",
      "integrity": "sha512-+DplQlRS4MXfIf9gfD1BOJpk5RSyGgGXD/R+cumhe8jdjUcq/qlxDawQlSI8hCKupBlvM+3eS1se5xW+SuNAwA==",
      "license": "MIT",
      "dependencies": {
        "@vue/reactivity": "3.5.21",
        "@vue/shared": "3.5.21"
      }
    },
    "node_modules/@vue/runtime-dom": {
      "version": "3.5.21",
      "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.21.tgz",
      "integrity": "sha512-3M2DZsOFwM5qI15wrMmNF5RJe1+ARijt2HM3TbzBbPSuBHOQpoidE+Pa+XEaVN+czbHf81ETRoG1ltztP2em8w==",
      "license": "MIT",
      "dependencies": {
        "@vue/reactivity": "3.5.21",
        "@vue/runtime-core": "3.5.21",
        "@vue/shared": "3.5.21",
        "csstype": "^3.1.3"
      }
    },
    "node_modules/@vue/server-renderer": {
      "version": "3.5.21",
      "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.21.tgz",
      "integrity": "sha512-qr8AqgD3DJPJcGvLcJKQo2tAc8OnXRcfxhOJCPF+fcfn5bBGz7VCcO7t+qETOPxpWK1mgysXvVT/j+xWaHeMWA==",
      "license": "MIT",
      "dependencies": {
        "@vue/compiler-ssr": "3.5.21",
        "@vue/shared": "3.5.21"
      },
      "peerDependencies": {
        "vue": "3.5.21"
      }
    },
    "node_modules/@vue/shared": {
      "version": "3.5.21",
      "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.21.tgz",
      "integrity": "sha512-+2k1EQpnYuVuu3N7atWyG3/xoFWIVJZq4Mz8XNOdScFI0etES75fbny/oU4lKWk/577P1zmg0ioYvpGEDZ3DLw==",
      "license": "MIT"
    },
    "node_modules/@vueuse/core": {
      "version": "9.13.0",
      "resolved": "https://registry.npmmirror.com/@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/metadata": {
      "version": "9.13.0",
      "resolved": "https://registry.npmmirror.com/@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.npmmirror.com/@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/@vxe-ui/core": {
      "version": "4.2.12",
      "resolved": "https://registry.npmmirror.com/@vxe-ui/core/-/core-4.2.12.tgz",
      "integrity": "sha512-g6gNDykKrKLzxsDDFDYTD/6tWrV9AfSaU7WIlKCO67BSXgKDMaEVTsH7ZZ7fI5qkOO9DH1vo07kbacyBNx7gSQ==",
      "license": "MIT",
      "dependencies": {
        "dom-zindex": "^1.0.6",
        "xe-utils": "^3.7.9"
      },
      "peerDependencies": {
        "vue": "^3.2.0"
      }
    },
    "node_modules/ansis": {
      "version": "4.1.0",
      "resolved": "https://registry.npmmirror.com/ansis/-/ansis-4.1.0.tgz",
      "integrity": "sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==",
      "dev": true,
      "license": "ISC",
      "engines": {
        "node": ">=14"
      }
    },
    "node_modules/async-validator": {
      "version": "4.2.5",
      "resolved": "https://registry.npmmirror.com/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.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz",
      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
      "license": "MIT"
    },
    "node_modules/axios": {
      "version": "1.12.2",
      "resolved": "https://registry.npmmirror.com/axios/-/axios-1.12.2.tgz",
      "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==",
      "license": "MIT",
      "dependencies": {
        "follow-redirects": "^1.15.6",
        "form-data": "^4.0.4",
        "proxy-from-env": "^1.1.0"
      }
    },
    "node_modules/baseline-browser-mapping": {
      "version": "2.8.6",
      "resolved": "https://registry.npmmirror.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.6.tgz",
      "integrity": "sha512-wrH5NNqren/QMtKUEEJf7z86YjfqW/2uw3IL3/xpqZUC95SSVIFXYQeeGjL6FT/X68IROu6RMehZQS5foy2BXw==",
      "dev": true,
      "license": "Apache-2.0",
      "bin": {
        "baseline-browser-mapping": "dist/cli.js"
      }
    },
    "node_modules/birpc": {
      "version": "2.5.0",
      "resolved": "https://registry.npmmirror.com/birpc/-/birpc-2.5.0.tgz",
      "integrity": "sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==",
      "license": "MIT",
      "funding": {
        "url": "https://github.com/sponsors/antfu"
      }
    },
    "node_modules/browserslist": {
      "version": "4.26.2",
      "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.26.2.tgz",
      "integrity": "sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==",
      "dev": true,
      "funding": [
        {
          "type": "opencollective",
          "url": "https://opencollective.com/browserslist"
        },
        {
          "type": "tidelift",
          "url": "https://tidelift.com/funding/github/npm/browserslist"
        },
        {
          "type": "github",
          "url": "https://github.com/sponsors/ai"
        }
      ],
      "license": "MIT",
      "peer": true,
      "dependencies": {
        "baseline-browser-mapping": "^2.8.3",
        "caniuse-lite": "^1.0.30001741",
        "electron-to-chromium": "^1.5.218",
        "node-releases": "^2.0.21",
        "update-browserslist-db": "^1.1.3"
      },
      "bin": {
        "browserslist": "cli.js"
      },
      "engines": {
        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
      }
    },
    "node_modules/bundle-name": {
      "version": "4.1.0",
      "resolved": "https://registry.npmmirror.com/bundle-name/-/bundle-name-4.1.0.tgz",
      "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "run-applescript": "^7.0.0"
      },
      "engines": {
        "node": ">=18"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/call-bind-apply-helpers": {
      "version": "1.0.2",
      "resolved": "https://registry.npmmirror.com/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/caniuse-lite": {
      "version": "1.0.30001743",
      "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001743.tgz",
      "integrity": "sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw==",
      "dev": true,
      "funding": [
        {
          "type": "opencollective",
          "url": "https://opencollective.com/browserslist"
        },
        {
          "type": "tidelift",
          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
        },
        {
          "type": "github",
          "url": "https://github.com/sponsors/ai"
        }
      ],
      "license": "CC-BY-4.0"
    },
    "node_modules/combined-stream": {
      "version": "1.0.8",
      "resolved": "https://registry.npmmirror.com/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/convert-source-map": {
      "version": "2.0.0",
      "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz",
      "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
      "dev": true,
      "license": "MIT"
    },
    "node_modules/copy-anything": {
      "version": "3.0.5",
      "resolved": "https://registry.npmmirror.com/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/cross-spawn": {
      "version": "7.0.6",
      "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz",
      "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "path-key": "^3.1.0",
        "shebang-command": "^2.0.0",
        "which": "^2.0.1"
      },
      "engines": {
        "node": ">= 8"
      }
    },
    "node_modules/csstype": {
      "version": "3.1.3",
      "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
      "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
      "license": "MIT"
    },
    "node_modules/dayjs": {
      "version": "1.11.18",
      "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.18.tgz",
      "integrity": "sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==",
      "license": "MIT"
    },
    "node_modules/debug": {
      "version": "4.4.3",
      "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz",
      "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "ms": "^2.1.3"
      },
      "engines": {
        "node": ">=6.0"
      },
      "peerDependenciesMeta": {
        "supports-color": {
          "optional": true
        }
      }
    },
    "node_modules/decimal.js": {
      "version": "10.4.3",
      "resolved": "https://registry.npmmirror.com/decimal.js/-/decimal.js-10.4.3.tgz",
      "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
      "license": "MIT"
    },
    "node_modules/deep-pick-omit": {
      "version": "1.2.1",
      "resolved": "https://registry.npmmirror.com/deep-pick-omit/-/deep-pick-omit-1.2.1.tgz",
      "integrity": "sha512-2J6Kc/m3irCeqVG42T+SaUMesaK7oGWaedGnQQK/+O0gYc+2SP5bKh/KKTE7d7SJ+GCA9UUE1GRzh6oDe0EnGw==",
      "license": "MIT"
    },
    "node_modules/default-browser": {
      "version": "5.2.1",
      "resolved": "https://registry.npmmirror.com/default-browser/-/default-browser-5.2.1.tgz",
      "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "bundle-name": "^4.1.0",
        "default-browser-id": "^5.0.0"
      },
      "engines": {
        "node": ">=18"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/default-browser-id": {
      "version": "5.0.0",
      "resolved": "https://registry.npmmirror.com/default-browser-id/-/default-browser-id-5.0.0.tgz",
      "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==",
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=18"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/define-lazy-prop": {
      "version": "3.0.0",
      "resolved": "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
      "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=12"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/defu": {
      "version": "6.1.4",
      "resolved": "https://registry.npmmirror.com/defu/-/defu-6.1.4.tgz",
      "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==",
      "license": "MIT"
    },
    "node_modules/delayed-stream": {
      "version": "1.0.0",
      "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",
      "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
      "license": "MIT",
      "engines": {
        "node": ">=0.4.0"
      }
    },
    "node_modules/destr": {
      "version": "2.0.5",
      "resolved": "https://registry.npmmirror.com/destr/-/destr-2.0.5.tgz",
      "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==",
      "license": "MIT"
    },
    "node_modules/dom-zindex": {
      "version": "1.0.6",
      "resolved": "https://registry.npmmirror.com/dom-zindex/-/dom-zindex-1.0.6.tgz",
      "integrity": "sha512-FKWIhiU96bi3xpP9ewRMgANsoVmMUBnMnmpCT6dPMZOunVYJQmJhSRruoI0XSPoHeIif3kyEuiHbFrOJwEJaEA==",
      "license": "MIT"
    },
    "node_modules/dunder-proto": {
      "version": "1.0.1",
      "resolved": "https://registry.npmmirror.com/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/electron-to-chromium": {
      "version": "1.5.222",
      "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.222.tgz",
      "integrity": "sha512-gA7psSwSwQRE60CEoLz6JBCQPIxNeuzB2nL8vE03GK/OHxlvykbLyeiumQy1iH5C2f3YbRAZpGCMT12a/9ih9w==",
      "dev": true,
      "license": "ISC"
    },
    "node_modules/element-plus": {
      "version": "2.11.3",
      "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.11.3.tgz",
      "integrity": "sha512-769xsjLR4B9Vf9cl5PDXnwTEdmFJvMgAkYtthdJKPhjVjU3hdAwTJ+gXKiO+PUyo2KWFwOYKZd4Ywh6PHfkbJg==",
      "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.npmmirror.com/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/error-stack-parser-es": {
      "version": "1.0.5",
      "resolved": "https://registry.npmmirror.com/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz",
      "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==",
      "dev": true,
      "license": "MIT",
      "funding": {
        "url": "https://github.com/sponsors/antfu"
      }
    },
    "node_modules/es-define-property": {
      "version": "1.0.1",
      "resolved": "https://registry.npmmirror.com/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.npmmirror.com/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.npmmirror.com/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.npmmirror.com/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.10",
      "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.25.10.tgz",
      "integrity": "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==",
      "dev": true,
      "hasInstallScript": true,
      "license": "MIT",
      "bin": {
        "esbuild": "bin/esbuild"
      },
      "engines": {
        "node": ">=18"
      },
      "optionalDependencies": {
        "@esbuild/aix-ppc64": "0.25.10",
        "@esbuild/android-arm": "0.25.10",
        "@esbuild/android-arm64": "0.25.10",
        "@esbuild/android-x64": "0.25.10",
        "@esbuild/darwin-arm64": "0.25.10",
        "@esbuild/darwin-x64": "0.25.10",
        "@esbuild/freebsd-arm64": "0.25.10",
        "@esbuild/freebsd-x64": "0.25.10",
        "@esbuild/linux-arm": "0.25.10",
        "@esbuild/linux-arm64": "0.25.10",
        "@esbuild/linux-ia32": "0.25.10",
        "@esbuild/linux-loong64": "0.25.10",
        "@esbuild/linux-mips64el": "0.25.10",
        "@esbuild/linux-ppc64": "0.25.10",
        "@esbuild/linux-riscv64": "0.25.10",
        "@esbuild/linux-s390x": "0.25.10",
        "@esbuild/linux-x64": "0.25.10",
        "@esbuild/netbsd-arm64": "0.25.10",
        "@esbuild/netbsd-x64": "0.25.10",
        "@esbuild/openbsd-arm64": "0.25.10",
        "@esbuild/openbsd-x64": "0.25.10",
        "@esbuild/openharmony-arm64": "0.25.10",
        "@esbuild/sunos-x64": "0.25.10",
        "@esbuild/win32-arm64": "0.25.10",
        "@esbuild/win32-ia32": "0.25.10",
        "@esbuild/win32-x64": "0.25.10"
      }
    },
    "node_modules/escalade": {
      "version": "3.2.0",
      "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz",
      "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=6"
      }
    },
    "node_modules/escape-html": {
      "version": "1.0.3",
      "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz",
      "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
      "license": "MIT"
    },
    "node_modules/estree-walker": {
      "version": "2.0.2",
      "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
      "license": "MIT"
    },
    "node_modules/execa": {
      "version": "9.6.0",
      "resolved": "https://registry.npmmirror.com/execa/-/execa-9.6.0.tgz",
      "integrity": "sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@sindresorhus/merge-streams": "^4.0.0",
        "cross-spawn": "^7.0.6",
        "figures": "^6.1.0",
        "get-stream": "^9.0.0",
        "human-signals": "^8.0.1",
        "is-plain-obj": "^4.1.0",
        "is-stream": "^4.0.1",
        "npm-run-path": "^6.0.0",
        "pretty-ms": "^9.2.0",
        "signal-exit": "^4.1.0",
        "strip-final-newline": "^4.0.0",
        "yoctocolors": "^2.1.1"
      },
      "engines": {
        "node": "^18.19.0 || >=20.5.0"
      },
      "funding": {
        "url": "https://github.com/sindresorhus/execa?sponsor=1"
      }
    },
    "node_modules/fdir": {
      "version": "6.5.0",
      "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.5.0.tgz",
      "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=12.0.0"
      },
      "peerDependencies": {
        "picomatch": "^3 || ^4"
      },
      "peerDependenciesMeta": {
        "picomatch": {
          "optional": true
        }
      }
    },
    "node_modules/figures": {
      "version": "6.1.0",
      "resolved": "https://registry.npmmirror.com/figures/-/figures-6.1.0.tgz",
      "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "is-unicode-supported": "^2.0.0"
      },
      "engines": {
        "node": ">=18"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/follow-redirects": {
      "version": "1.15.11",
      "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.11.tgz",
      "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
      "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.npmmirror.com/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.npmmirror.com/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.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz",
      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
      "license": "MIT",
      "funding": {
        "url": "https://github.com/sponsors/ljharb"
      }
    },
    "node_modules/gensync": {
      "version": "1.0.0-beta.2",
      "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz",
      "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=6.9.0"
      }
    },
    "node_modules/get-intrinsic": {
      "version": "1.3.0",
      "resolved": "https://registry.npmmirror.com/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.npmmirror.com/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/get-stream": {
      "version": "9.0.1",
      "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-9.0.1.tgz",
      "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@sec-ant/readable-stream": "^0.4.1",
        "is-stream": "^4.0.1"
      },
      "engines": {
        "node": ">=18"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/gopd": {
      "version": "1.2.0",
      "resolved": "https://registry.npmmirror.com/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.npmmirror.com/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.npmmirror.com/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.npmmirror.com/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.npmmirror.com/hookable/-/hookable-5.5.3.tgz",
      "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==",
      "license": "MIT"
    },
    "node_modules/human-signals": {
      "version": "8.0.1",
      "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-8.0.1.tgz",
      "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==",
      "dev": true,
      "license": "Apache-2.0",
      "engines": {
        "node": ">=18.18.0"
      }
    },
    "node_modules/is-docker": {
      "version": "3.0.0",
      "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-3.0.0.tgz",
      "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
      "dev": true,
      "license": "MIT",
      "bin": {
        "is-docker": "cli.js"
      },
      "engines": {
        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/is-inside-container": {
      "version": "1.0.0",
      "resolved": "https://registry.npmmirror.com/is-inside-container/-/is-inside-container-1.0.0.tgz",
      "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "is-docker": "^3.0.0"
      },
      "bin": {
        "is-inside-container": "cli.js"
      },
      "engines": {
        "node": ">=14.16"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/is-plain-obj": {
      "version": "4.1.0",
      "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
      "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=12"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/is-stream": {
      "version": "4.0.1",
      "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-4.0.1.tgz",
      "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==",
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=18"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/is-unicode-supported": {
      "version": "2.1.0",
      "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz",
      "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==",
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=18"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/is-what": {
      "version": "4.1.16",
      "resolved": "https://registry.npmmirror.com/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/is-wsl": {
      "version": "3.1.0",
      "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-3.1.0.tgz",
      "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "is-inside-container": "^1.0.0"
      },
      "engines": {
        "node": ">=16"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/isexe": {
      "version": "2.0.0",
      "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz",
      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
      "dev": true,
      "license": "ISC"
    },
    "node_modules/js-tokens": {
      "version": "4.0.0",
      "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz",
      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
      "dev": true,
      "license": "MIT"
    },
    "node_modules/jsesc": {
      "version": "3.1.0",
      "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-3.1.0.tgz",
      "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
      "dev": true,
      "license": "MIT",
      "bin": {
        "jsesc": "bin/jsesc"
      },
      "engines": {
        "node": ">=6"
      }
    },
    "node_modules/json5": {
      "version": "2.2.3",
      "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz",
      "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
      "dev": true,
      "license": "MIT",
      "bin": {
        "json5": "lib/cli.js"
      },
      "engines": {
        "node": ">=6"
      }
    },
    "node_modules/kolorist": {
      "version": "1.8.0",
      "resolved": "https://registry.npmmirror.com/kolorist/-/kolorist-1.8.0.tgz",
      "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==",
      "dev": true,
      "license": "MIT"
    },
    "node_modules/lodash": {
      "version": "4.17.21",
      "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
      "license": "MIT",
      "peer": true
    },
    "node_modules/lodash-es": {
      "version": "4.17.21",
      "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz",
      "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
      "license": "MIT",
      "peer": true
    },
    "node_modules/lodash-unified": {
      "version": "1.0.3",
      "resolved": "https://registry.npmmirror.com/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/lru-cache": {
      "version": "5.1.1",
      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz",
      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
      "dev": true,
      "license": "ISC",
      "dependencies": {
        "yallist": "^3.0.2"
      }
    },
    "node_modules/magic-string": {
      "version": "0.30.19",
      "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.19.tgz",
      "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==",
      "license": "MIT",
      "dependencies": {
        "@jridgewell/sourcemap-codec": "^1.5.5"
      }
    },
    "node_modules/math-intrinsics": {
      "version": "1.1.0",
      "resolved": "https://registry.npmmirror.com/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.npmmirror.com/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.npmmirror.com/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.npmmirror.com/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.npmmirror.com/mitt/-/mitt-3.0.1.tgz",
      "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
      "license": "MIT"
    },
    "node_modules/mrmime": {
      "version": "2.0.1",
      "resolved": "https://registry.npmmirror.com/mrmime/-/mrmime-2.0.1.tgz",
      "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=10"
      }
    },
    "node_modules/ms": {
      "version": "2.1.3",
      "resolved": "https://registry.npmmirror.com/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.npmmirror.com/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/node-releases": {
      "version": "2.0.21",
      "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.21.tgz",
      "integrity": "sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==",
      "dev": true,
      "license": "MIT"
    },
    "node_modules/normalize-wheel-es": {
      "version": "1.2.0",
      "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
      "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==",
      "license": "BSD-3-Clause"
    },
    "node_modules/npm-run-path": {
      "version": "6.0.0",
      "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-6.0.0.tgz",
      "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "path-key": "^4.0.0",
        "unicorn-magic": "^0.3.0"
      },
      "engines": {
        "node": ">=18"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/npm-run-path/node_modules/path-key": {
      "version": "4.0.0",
      "resolved": "https://registry.npmmirror.com/path-key/-/path-key-4.0.0.tgz",
      "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=12"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/ohash": {
      "version": "2.0.11",
      "resolved": "https://registry.npmmirror.com/ohash/-/ohash-2.0.11.tgz",
      "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==",
      "dev": true,
      "license": "MIT"
    },
    "node_modules/open": {
      "version": "10.2.0",
      "resolved": "https://registry.npmmirror.com/open/-/open-10.2.0.tgz",
      "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "default-browser": "^5.2.1",
        "define-lazy-prop": "^3.0.0",
        "is-inside-container": "^1.0.0",
        "wsl-utils": "^0.1.0"
      },
      "engines": {
        "node": ">=18"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/parse-ms": {
      "version": "4.0.0",
      "resolved": "https://registry.npmmirror.com/parse-ms/-/parse-ms-4.0.0.tgz",
      "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==",
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=18"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/path-key": {
      "version": "3.1.1",
      "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz",
      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=8"
      }
    },
    "node_modules/pathe": {
      "version": "2.0.3",
      "resolved": "https://registry.npmmirror.com/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.npmmirror.com/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.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
      "license": "ISC"
    },
    "node_modules/picomatch": {
      "version": "4.0.3",
      "resolved": "https://registry.npmmirror.com/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.npmmirror.com/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-plugin-persistedstate": {
      "version": "4.5.0",
      "resolved": "https://registry.npmmirror.com/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-4.5.0.tgz",
      "integrity": "sha512-QTkP1xJVyCdr2I2p3AKUZM84/e+IS+HktRxKGAIuDzkyaKKV48mQcYkJFVVDuvTxlI5j6X3oZObpqoVB8JnWpw==",
      "license": "MIT",
      "dependencies": {
        "deep-pick-omit": "^1.2.1",
        "defu": "^6.1.4",
        "destr": "^2.0.5"
      },
      "peerDependencies": {
        "@nuxt/kit": ">=3.0.0",
        "@pinia/nuxt": ">=0.10.0",
        "pinia": ">=3.0.0"
      },
      "peerDependenciesMeta": {
        "@nuxt/kit": {
          "optional": true
        },
        "@pinia/nuxt": {
          "optional": true
        },
        "pinia": {
          "optional": true
        }
      }
    },
    "node_modules/pinia/node_modules/@vue/devtools-api": {
      "version": "7.7.7",
      "resolved": "https://registry.npmmirror.com/@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/postcss": {
      "version": "8.5.6",
      "resolved": "https://registry.npmmirror.com/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/pretty-ms": {
      "version": "9.3.0",
      "resolved": "https://registry.npmmirror.com/pretty-ms/-/pretty-ms-9.3.0.tgz",
      "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "parse-ms": "^4.0.0"
      },
      "engines": {
        "node": ">=18"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/proxy-from-env": {
      "version": "1.1.0",
      "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
      "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
      "license": "MIT"
    },
    "node_modules/rfdc": {
      "version": "1.4.1",
      "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz",
      "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
      "license": "MIT"
    },
    "node_modules/rollup": {
      "version": "4.50.2",
      "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.50.2.tgz",
      "integrity": "sha512-BgLRGy7tNS9H66aIMASq1qSYbAAJV6Z6WR4QYTvj5FgF15rZ/ympT1uixHXwzbZUBDbkvqUI1KR0fH1FhMaQ9w==",
      "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.50.2",
        "@rollup/rollup-android-arm64": "4.50.2",
        "@rollup/rollup-darwin-arm64": "4.50.2",
        "@rollup/rollup-darwin-x64": "4.50.2",
        "@rollup/rollup-freebsd-arm64": "4.50.2",
        "@rollup/rollup-freebsd-x64": "4.50.2",
        "@rollup/rollup-linux-arm-gnueabihf": "4.50.2",
        "@rollup/rollup-linux-arm-musleabihf": "4.50.2",
        "@rollup/rollup-linux-arm64-gnu": "4.50.2",
        "@rollup/rollup-linux-arm64-musl": "4.50.2",
        "@rollup/rollup-linux-loong64-gnu": "4.50.2",
        "@rollup/rollup-linux-ppc64-gnu": "4.50.2",
        "@rollup/rollup-linux-riscv64-gnu": "4.50.2",
        "@rollup/rollup-linux-riscv64-musl": "4.50.2",
        "@rollup/rollup-linux-s390x-gnu": "4.50.2",
        "@rollup/rollup-linux-x64-gnu": "4.50.2",
        "@rollup/rollup-linux-x64-musl": "4.50.2",
        "@rollup/rollup-openharmony-arm64": "4.50.2",
        "@rollup/rollup-win32-arm64-msvc": "4.50.2",
        "@rollup/rollup-win32-ia32-msvc": "4.50.2",
        "@rollup/rollup-win32-x64-msvc": "4.50.2",
        "fsevents": "~2.3.2"
      }
    },
    "node_modules/run-applescript": {
      "version": "7.1.0",
      "resolved": "https://registry.npmmirror.com/run-applescript/-/run-applescript-7.1.0.tgz",
      "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==",
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=18"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/semver": {
      "version": "6.3.1",
      "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz",
      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
      "dev": true,
      "license": "ISC",
      "bin": {
        "semver": "bin/semver.js"
      }
    },
    "node_modules/shebang-command": {
      "version": "2.0.0",
      "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz",
      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "shebang-regex": "^3.0.0"
      },
      "engines": {
        "node": ">=8"
      }
    },
    "node_modules/shebang-regex": {
      "version": "3.0.0",
      "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz",
      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=8"
      }
    },
    "node_modules/signal-exit": {
      "version": "4.1.0",
      "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz",
      "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
      "dev": true,
      "license": "ISC",
      "engines": {
        "node": ">=14"
      },
      "funding": {
        "url": "https://github.com/sponsors/isaacs"
      }
    },
    "node_modules/sirv": {
      "version": "3.0.2",
      "resolved": "https://registry.npmmirror.com/sirv/-/sirv-3.0.2.tgz",
      "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@polka/url": "^1.0.0-next.24",
        "mrmime": "^2.0.0",
        "totalist": "^3.0.0"
      },
      "engines": {
        "node": ">=18"
      }
    },
    "node_modules/source-map-js": {
      "version": "1.2.1",
      "resolved": "https://registry.npmmirror.com/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.npmmirror.com/speakingurl/-/speakingurl-14.0.1.tgz",
      "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==",
      "license": "BSD-3-Clause",
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "node_modules/strip-final-newline": {
      "version": "4.0.0",
      "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-4.0.0.tgz",
      "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==",
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=18"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/superjson": {
      "version": "2.2.2",
      "resolved": "https://registry.npmmirror.com/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.15",
      "resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.15.tgz",
      "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "fdir": "^6.5.0",
        "picomatch": "^4.0.3"
      },
      "engines": {
        "node": ">=12.0.0"
      },
      "funding": {
        "url": "https://github.com/sponsors/SuperchupuDev"
      }
    },
    "node_modules/totalist": {
      "version": "3.0.1",
      "resolved": "https://registry.npmmirror.com/totalist/-/totalist-3.0.1.tgz",
      "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==",
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=6"
      }
    },
    "node_modules/unicorn-magic": {
      "version": "0.3.0",
      "resolved": "https://registry.npmmirror.com/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
      "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==",
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=18"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/unplugin-utils": {
      "version": "0.3.0",
      "resolved": "https://registry.npmmirror.com/unplugin-utils/-/unplugin-utils-0.3.0.tgz",
      "integrity": "sha512-JLoggz+PvLVMJo+jZt97hdIIIZ2yTzGgft9e9q8iMrC4ewufl62ekeW7mixBghonn2gVb/ICjyvlmOCUBnJLQg==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "pathe": "^2.0.3",
        "picomatch": "^4.0.3"
      },
      "engines": {
        "node": ">=20.19.0"
      },
      "funding": {
        "url": "https://github.com/sponsors/sxzz"
      }
    },
    "node_modules/update-browserslist-db": {
      "version": "1.1.3",
      "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
      "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
      "dev": true,
      "funding": [
        {
          "type": "opencollective",
          "url": "https://opencollective.com/browserslist"
        },
        {
          "type": "tidelift",
          "url": "https://tidelift.com/funding/github/npm/browserslist"
        },
        {
          "type": "github",
          "url": "https://github.com/sponsors/ai"
        }
      ],
      "license": "MIT",
      "dependencies": {
        "escalade": "^3.2.0",
        "picocolors": "^1.1.1"
      },
      "bin": {
        "update-browserslist-db": "cli.js"
      },
      "peerDependencies": {
        "browserslist": ">= 4.21.0"
      }
    },
    "node_modules/vite": {
      "version": "7.1.6",
      "resolved": "https://registry.npmmirror.com/vite/-/vite-7.1.6.tgz",
      "integrity": "sha512-SRYIB8t/isTwNn8vMB3MR6E+EQZM/WG1aKmmIUCfDXfVvKfc20ZpamngWHKzAmmu9ppsgxsg4b2I7c90JZudIQ==",
      "dev": true,
      "license": "MIT",
      "peer": true,
      "dependencies": {
        "esbuild": "^0.25.0",
        "fdir": "^6.5.0",
        "picomatch": "^4.0.3",
        "postcss": "^8.5.6",
        "rollup": "^4.43.0",
        "tinyglobby": "^0.2.15"
      },
      "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/vite-dev-rpc": {
      "version": "1.1.0",
      "resolved": "https://registry.npmmirror.com/vite-dev-rpc/-/vite-dev-rpc-1.1.0.tgz",
      "integrity": "sha512-pKXZlgoXGoE8sEKiKJSng4hI1sQ4wi5YT24FCrwrLt6opmkjlqPPVmiPWWJn8M8byMxRGzp1CrFuqQs4M/Z39A==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "birpc": "^2.4.0",
        "vite-hot-client": "^2.1.0"
      },
      "funding": {
        "url": "https://github.com/sponsors/antfu"
      },
      "peerDependencies": {
        "vite": "^2.9.0 || ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.1 || ^7.0.0-0"
      }
    },
    "node_modules/vite-hot-client": {
      "version": "2.1.0",
      "resolved": "https://registry.npmmirror.com/vite-hot-client/-/vite-hot-client-2.1.0.tgz",
      "integrity": "sha512-7SpgZmU7R+dDnSmvXE1mfDtnHLHQSisdySVR7lO8ceAXvM0otZeuQQ6C8LrS5d/aYyP/QZ0hI0L+dIPrm4YlFQ==",
      "dev": true,
      "license": "MIT",
      "funding": {
        "url": "https://github.com/sponsors/antfu"
      },
      "peerDependencies": {
        "vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0"
      }
    },
    "node_modules/vite-plugin-vue-devtools": {
      "version": "8.0.2",
      "resolved": "https://registry.npmmirror.com/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-8.0.2.tgz",
      "integrity": "sha512-1069qvMBcyAu3yXQlvYrkwoyLOk0lSSR/gTKy/vy+Det7TXnouGei6ZcKwr5TIe938v/14oLlp0ow6FSJkkORA==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@vue/devtools-core": "^8.0.2",
        "@vue/devtools-kit": "^8.0.2",
        "@vue/devtools-shared": "^8.0.2",
        "execa": "^9.6.0",
        "sirv": "^3.0.2",
        "vite-plugin-inspect": "^11.3.3",
        "vite-plugin-vue-inspector": "^5.3.2"
      },
      "engines": {
        "node": ">=v14.21.3"
      },
      "peerDependencies": {
        "vite": "^6.0.0 || ^7.0.0-0"
      }
    },
    "node_modules/vite-plugin-vue-devtools/node_modules/@vue/devtools-kit": {
      "version": "8.0.2",
      "resolved": "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-8.0.2.tgz",
      "integrity": "sha512-yjZKdEmhJzQqbOh4KFBfTOQjDPMrjjBNCnHBvnTGJX+YLAqoUtY2J+cg7BE+EA8KUv8LprECq04ts75wCoIGWA==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@vue/devtools-shared": "^8.0.2",
        "birpc": "^2.5.0",
        "hookable": "^5.5.3",
        "mitt": "^3.0.1",
        "perfect-debounce": "^2.0.0",
        "speakingurl": "^14.0.1",
        "superjson": "^2.2.2"
      }
    },
    "node_modules/vite-plugin-vue-devtools/node_modules/@vue/devtools-shared": {
      "version": "8.0.2",
      "resolved": "https://registry.npmmirror.com/@vue/devtools-shared/-/devtools-shared-8.0.2.tgz",
      "integrity": "sha512-mLU0QVdy5Lp40PMGSixDw/Kbd6v5dkQXltd2r+mdVQV7iUog2NlZuLxFZApFZ/mObUBDhoCpf0T3zF2FWWdeHw==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "rfdc": "^1.4.1"
      }
    },
    "node_modules/vite-plugin-vue-devtools/node_modules/perfect-debounce": {
      "version": "2.0.0",
      "resolved": "https://registry.npmmirror.com/perfect-debounce/-/perfect-debounce-2.0.0.tgz",
      "integrity": "sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==",
      "dev": true,
      "license": "MIT"
    },
    "node_modules/vite-plugin-vue-devtools/node_modules/vite-plugin-inspect": {
      "version": "11.3.3",
      "resolved": "https://registry.npmmirror.com/vite-plugin-inspect/-/vite-plugin-inspect-11.3.3.tgz",
      "integrity": "sha512-u2eV5La99oHoYPHE6UvbwgEqKKOQGz86wMg40CCosP6q8BkB6e5xPneZfYagK4ojPJSj5anHCrnvC20DpwVdRA==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "ansis": "^4.1.0",
        "debug": "^4.4.1",
        "error-stack-parser-es": "^1.0.5",
        "ohash": "^2.0.11",
        "open": "^10.2.0",
        "perfect-debounce": "^2.0.0",
        "sirv": "^3.0.1",
        "unplugin-utils": "^0.3.0",
        "vite-dev-rpc": "^1.1.0"
      },
      "engines": {
        "node": ">=14"
      },
      "funding": {
        "url": "https://github.com/sponsors/antfu"
      },
      "peerDependencies": {
        "vite": "^6.0.0 || ^7.0.0-0"
      },
      "peerDependenciesMeta": {
        "@nuxt/kit": {
          "optional": true
        }
      }
    },
    "node_modules/vite-plugin-vue-inspector": {
      "version": "5.3.2",
      "resolved": "https://registry.npmmirror.com/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.3.2.tgz",
      "integrity": "sha512-YvEKooQcSiBTAs0DoYLfefNja9bLgkFM7NI2b07bE2SruuvX0MEa9cMaxjKVMkeCp5Nz9FRIdcN1rOdFVBeL6Q==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "@babel/core": "^7.23.0",
        "@babel/plugin-proposal-decorators": "^7.23.0",
        "@babel/plugin-syntax-import-attributes": "^7.22.5",
        "@babel/plugin-syntax-import-meta": "^7.10.4",
        "@babel/plugin-transform-typescript": "^7.22.15",
        "@vue/babel-plugin-jsx": "^1.1.5",
        "@vue/compiler-dom": "^3.3.4",
        "kolorist": "^1.8.0",
        "magic-string": "^0.30.4"
      },
      "peerDependencies": {
        "vite": "^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0"
      }
    },
    "node_modules/vue": {
      "version": "3.5.21",
      "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.21.tgz",
      "integrity": "sha512-xxf9rum9KtOdwdRkiApWL+9hZEMWE90FHh8yS1+KJAiWYh+iGWV1FquPjoO9VUHQ+VIhsCXNNyZ5Sf4++RVZBA==",
      "license": "MIT",
      "peer": true,
      "dependencies": {
        "@vue/compiler-dom": "3.5.21",
        "@vue/compiler-sfc": "3.5.21",
        "@vue/runtime-dom": "3.5.21",
        "@vue/server-renderer": "3.5.21",
        "@vue/shared": "3.5.21"
      },
      "peerDependencies": {
        "typescript": "*"
      },
      "peerDependenciesMeta": {
        "typescript": {
          "optional": true
        }
      }
    },
    "node_modules/vue-demi": {
      "version": "0.14.10",
      "resolved": "https://registry.npmmirror.com/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/vue-i18n": {
      "version": "11.1.12",
      "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-11.1.12.tgz",
      "integrity": "sha512-BnstPj3KLHLrsqbVU2UOrPmr0+Mv11bsUZG0PyCOzsawCivk8W00GMXHeVUWIDOgNaScCuZah47CZFE+Wnl8mw==",
      "license": "MIT",
      "dependencies": {
        "@intlify/core-base": "11.1.12",
        "@intlify/shared": "11.1.12",
        "@vue/devtools-api": "^6.5.0"
      },
      "engines": {
        "node": ">= 16"
      },
      "funding": {
        "url": "https://github.com/sponsors/kazupon"
      },
      "peerDependencies": {
        "vue": "^3.0.0"
      }
    },
    "node_modules/vue-router": {
      "version": "4.5.1",
      "resolved": "https://registry.npmmirror.com/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/vxe-pc-ui": {
      "version": "4.9.41",
      "resolved": "https://registry.npmmirror.com/vxe-pc-ui/-/vxe-pc-ui-4.9.41.tgz",
      "integrity": "sha512-CsaRv7d2NGRkVUOWhF+vHdcS7j1NgGZ5A16564645zS4lIUxkn4pADEieyDsA8GTlNwCZmyYmGtjMfOsUKlcNg==",
      "license": "MIT",
      "dependencies": {
        "@vxe-ui/core": "^4.2.12"
      }
    },
    "node_modules/vxe-table": {
      "version": "4.16.20",
      "resolved": "https://registry.npmmirror.com/vxe-table/-/vxe-table-4.16.20.tgz",
      "integrity": "sha512-AUEOqgr/4fFZ9SBg2akepkadI3c8Ct7/zG/gkurUvCIbixsoZr78c4NStmdhLxlFjUeQkiKb8ukesZsjLloAhA==",
      "license": "MIT",
      "dependencies": {
        "vxe-pc-ui": "^4.8.0"
      }
    },
    "node_modules/which": {
      "version": "2.0.2",
      "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz",
      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
      "dev": true,
      "license": "ISC",
      "dependencies": {
        "isexe": "^2.0.0"
      },
      "bin": {
        "node-which": "bin/node-which"
      },
      "engines": {
        "node": ">= 8"
      }
    },
    "node_modules/wsl-utils": {
      "version": "0.1.0",
      "resolved": "https://registry.npmmirror.com/wsl-utils/-/wsl-utils-0.1.0.tgz",
      "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "is-wsl": "^3.1.0"
      },
      "engines": {
        "node": ">=18"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/xe-utils": {
      "version": "3.7.9",
      "resolved": "https://registry.npmmirror.com/xe-utils/-/xe-utils-3.7.9.tgz",
      "integrity": "sha512-LWH6M7g+TKX8P2fqGxDPgJQygiULhbMtpmfxTMxJTUjuUv9y2+I45UCcVLh5AnmJSxDV1xTxsq7G5P9Eid06JQ==",
      "license": "MIT"
    },
    "node_modules/yallist": {
      "version": "3.1.1",
      "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz",
      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
      "dev": true,
      "license": "ISC"
    },
    "node_modules/yoctocolors": {
      "version": "2.1.2",
      "resolved": "https://registry.npmmirror.com/yoctocolors/-/yoctocolors-2.1.2.tgz",
      "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==",
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">=18"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    }
  }
}
northglass-erp-client/erp-customer-client/package.json
New file
@@ -0,0 +1,32 @@
{
  "name": "erp-customer-client",
  "version": "0.0.0",
  "private": true,
  "type": "module",
  "engines": {
    "node": "^20.19.0 || >=22.12.0"
  },
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "preview": "vite preview"
  },
  "dependencies": {
    "axios": "^1.12.2",
    "decimal.js": "^10.4.3",
    "element-plus": "^2.11.3",
    "pinia": "^3.0.3",
    "pinia-plugin-persistedstate": "^4.5.0",
    "vue": "^3.5.18",
    "vue-i18n": "^11.1.12",
    "vue-router": "^4.5.1",
    "vxe-pc-ui": "~4.9.41",
    "vxe-table": "~4.16.20",
    "xe-utils": "^3.7.9"
  },
  "devDependencies": {
    "@vitejs/plugin-vue": "^6.0.1",
    "vite": "^7.0.6",
    "vite-plugin-vue-devtools": "^8.0.0"
  }
}
northglass-erp-client/erp-customer-client/public/config.js
New file
@@ -0,0 +1,5 @@
const ip = '10.153.19.4'
window.ipConfig = {
    serverUrl:`${ip}:8099`
}
northglass-erp-client/erp-customer-client/public/favicon.ico
northglass-erp-client/erp-customer-client/src/App.vue
New file
@@ -0,0 +1,11 @@
<template>
  <router-view></router-view>
</template>
<script setup>
import { RouterView } from 'vue-router'
</script>
<style scoped>
</style>
northglass-erp-client/erp-customer-client/src/assets/base.css
New file
@@ -0,0 +1,86 @@
/* color palette from <https://github.com/vuejs/theme> */
:root {
  --vt-c-white: #ffffff;
  --vt-c-white-soft: #f8f8f8;
  --vt-c-white-mute: #f2f2f2;
  --vt-c-black: #181818;
  --vt-c-black-soft: #222222;
  --vt-c-black-mute: #282828;
  --vt-c-indigo: #2c3e50;
  --vt-c-divider-light-1: rgba(60, 60, 60, 0.29);
  --vt-c-divider-light-2: rgba(60, 60, 60, 0.12);
  --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65);
  --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48);
  --vt-c-text-light-1: var(--vt-c-indigo);
  --vt-c-text-light-2: rgba(60, 60, 60, 0.66);
  --vt-c-text-dark-1: var(--vt-c-white);
  --vt-c-text-dark-2: rgba(235, 235, 235, 0.64);
}
/* semantic color variables for this project */
:root {
  --color-background: var(--vt-c-white);
  --color-background-soft: var(--vt-c-white-soft);
  --color-background-mute: var(--vt-c-white-mute);
  --color-border: var(--vt-c-divider-light-2);
  --color-border-hover: var(--vt-c-divider-light-1);
  --color-heading: var(--vt-c-text-light-1);
  --color-text: var(--vt-c-text-light-1);
  --section-gap: 160px;
}
@media (prefers-color-scheme: dark) {
  :root {
    --color-background: var(--vt-c-black);
    --color-background-soft: var(--vt-c-black-soft);
    --color-background-mute: var(--vt-c-black-mute);
    --color-border: var(--vt-c-divider-dark-2);
    --color-border-hover: var(--vt-c-divider-dark-1);
    --color-heading: var(--vt-c-text-dark-1);
    --color-text: var(--vt-c-text-dark-2);
  }
}
*,
*::before,
*::after {
  box-sizing: border-box;
  margin: 0;
  font-weight: normal;
}
body {
  min-height: 100vh;
  color: var(--color-text);
  background: var(--color-background);
  transition:
    color 0.5s,
    background-color 0.5s;
  line-height: 1.6;
  font-family:
    Inter,
    -apple-system,
    BlinkMacSystemFont,
    'Segoe UI',
    Roboto,
    Oxygen,
    Ubuntu,
    Cantarell,
    'Fira Sans',
    'Droid Sans',
    'Helvetica Neue',
    sans-serif;
  font-size: 15px;
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
northglass-erp-client/erp-customer-client/src/assets/img.png
northglass-erp-client/erp-customer-client/src/assets/logo.svg
New file
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 261.76 226.69"><path d="M161.096.001l-30.225 52.351L100.647.001H-.005l130.877 226.688L261.749.001z" fill="#41b883"/><path d="M161.096.001l-30.225 52.351L100.647.001H52.346l78.526 136.01L209.398.001z" fill="#34495e"/></svg>
northglass-erp-client/erp-customer-client/src/assets/main.css
New file
@@ -0,0 +1,21 @@
@import './base.css';
html,body{
  /*height: 100%;*/
  /*width: 100%;*/
  margin: 0;
  padding: 0;
  background-color: #D5EAFF;
}
#app {
  font-weight: normal;
  /*width: 100%;*/
  /*height: 100%;*/
}
*{
  padding: 0;
  margin: 0;
}
northglass-erp-client/erp-customer-client/src/assets/northGlass.ico
northglass-erp-client/erp-customer-client/src/hook/footSum.js
New file
@@ -0,0 +1,14 @@
import {add} from '@/utils/decimal'
export default function footSum(list, field) {
    let count = 0
    list.forEach(item => {
        if(field.indexOf('.')>-1){
            let  array = field.split('.')
            count = add((item[array[0]][array[1]] || 0), count)
        }else {
            count =add((item[field]  || 0), count)
        }
    })
    return count
}
northglass-erp-client/erp-customer-client/src/lang/index.js
New file
@@ -0,0 +1,23 @@
import { createI18n}  from 'vue-i18n'
//import zhCN from 'vxe-table/lib/language/zh-CN'
import zh from "./zh"
let messages = {
    'zh-CN':zh,
}
const i18n = createI18n({
    locale: localStorage.getItem('lang') || 'zh-CN', // 设置当前语言类型
    legacy: false, // 如果要支持compositionAPI,此项必须设置为false;
    globalInjection: true, // 全局注册$t方法
    messages
})
let lang = 'zh-CN'
if(localStorage.getItem('lang')==='zh-CN' || localStorage.getItem('lang') === null){
    lang = 'zh-CN'
}else{
    lang = 'en-US'
}
export default i18n
northglass-erp-client/erp-customer-client/src/lang/zh.js
New file
@@ -0,0 +1,2 @@
export  default {
}
northglass-erp-client/erp-customer-client/src/main.js
New file
@@ -0,0 +1,33 @@
import './assets/main.css'
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import i18n from "@/lang"
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
import VxeUIAll from 'vxe-pc-ui'
import 'vxe-pc-ui/es/style.css'
import VxeUITable from 'vxe-table'
import 'vxe-table/es/style.css'
import App from './App.vue'
import router from './router'
import {zhCn} from "element-plus/es/locale/index";
const app = createApp(App)
const pinia = createPinia()
pinia.use(piniaPluginPersistedstate )
app.use(pinia)
app.use(router)
app.use(ElementPlus,{
    locale: zhCn  ,
})
app.use(i18n)
app.use(VxeUIAll)
app.use(VxeUITable)
app.mount('#app')
northglass-erp-client/erp-customer-client/src/router/index.js
New file
@@ -0,0 +1,41 @@
import { createRouter, createWebHistory } from 'vue-router'
const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: [
    {
      path: '/',
      name: 'login',
      component: () => import('@/views/LoginView.vue'),
    },
    {
      path: '/main',
      name: 'main',
      component: () => import('@/views/MainView.vue'),
      children: [
        {
          path: '/orderUnfinished',
          name: 'orderUnfinished',
          component: () => import('@/views/order/OrderUnfinishedView.vue'),
        },
        {
          path: '/orderHistory',
          name: 'orderHistory',
          component: () => import('@/views/order/OrderHistoryView.vue'),
        },
        {
          path: '/register',
          name: 'register',
          component: () => import('@/views/RegisterView.vue'),
        },
        {
          path: '',
          redirect:'/orderUnfinished'
        }
      ]
    },
  ],
})
export default router
northglass-erp-client/erp-customer-client/src/stores/userInfo.js
New file
@@ -0,0 +1,23 @@
import {defineStore} from 'pinia'
import {ref} from "vue";
export  default defineStore("userInfo",{
    state: () =>({
            user:ref({
                id:null,
                loginName:null,
                customerId:null,
                customerName:null,
            }),
            responseCode:null,
            msg:null
    }),
    actions:{
        setResponseCode(cede,msg){
            this.responseCode=cede
            this.msg = msg
        }
    },
    persist: true//数据持久化,防止刷新数据消失
})
northglass-erp-client/erp-customer-client/src/utils/decimal.js
New file
@@ -0,0 +1,55 @@
import  Decimal from "decimal.js"
// 封装加法函数
function add(num1, num2) {
    const decimal1 = new Decimal(num1===null?0:num1);
    const decimal2 = new Decimal(num2===null?0:num2);
    return decimal1.plus(decimal2).toString();
}
function addAuto(num1, num2,scale) {
    const decimal1 = new Decimal(num1===null?0:num1);
    const decimal2 = new Decimal(num2===null?0:num2);
    return decimal1.plus(decimal2).toFixed(2)
}
// 封装减法函数
function subtract(num1, num2) {
    const decimal1 = new Decimal(num1===null || num1===''?0:num1);
    const decimal2 = new Decimal(num2===null || num2===''?0:num2);
    return decimal1.minus(decimal2).toFixed(2)
}
// 封装乘法函数
function multiply(num1, num2) {
    const decimal1 = new Decimal(num1===null || num1===''?0:num1);
    const decimal2 = new Decimal(num2===null || num2===''?0:num2);
    return decimal1.times(decimal2).toFixed(2)
}
function multiplyAuto(num1, num2,scale) {
    const decimal1 = new Decimal(num1===null || num1===''?0:num1);
    const decimal2 = new Decimal(num2===null || num2===''?0:num2);
    return decimal1.times(decimal2).toFixed(scale)
}
// 封装除法函数
function divide(num1, num2) {
    const decimal1 = new Decimal(num1===null || num1===''?0:num1);
    const decimal2 = new Decimal(num2===null || num2===''?0:num2);
    return decimal1.dividedBy(decimal2).toFixed(2);
}
function divideAuto(num1, num2,scale) {
    const decimal1 = new Decimal(num1===null || num1===''?0:num1);
    const decimal2 = new Decimal(num2===null || num2===''?0:num2);
    return decimal1.dividedBy(decimal2).toFixed(scale)
}
export {
    add,
    subtract,
    multiply,
    divide,
    multiplyAuto,
    divideAuto,
    addAuto
}
northglass-erp-client/erp-customer-client/src/utils/request.js
New file
@@ -0,0 +1,56 @@
import axios from 'axios'
/*import useUserInfoStore from '@/stores/userInfo'*/
//const userStore=useUserInfoStore()
const request = axios.create({
    baseURL: `http://${window.ipConfig.serverUrl}`,  // 注意!! 这里是全局统一加上了 后端接口前缀 前缀,后端必须进行跨域配置!
    timeout: 60000
})
//
// request 拦截器
// 可以自请求发送前对请求做一些处理
// 比如统一加token,对请求参数统一加密
request.interceptors.request.use(config => {
    config.headers['Content-Type'] = 'application/json;charset=utf-8';
    /*if(userStore.user){
        config.headers['satoken'] = localStorage.getItem('saToken');
    }*/
      // 设置请求头
    return config
}, error => {
    return Promise.reject(error)
});
// response 拦截器
// 可以在接口响应后统一处理结果
request.interceptors.response.use(
    response => {
        let res = response.data
        //传递报错信息,把报错信息传递到pinia中
       // userStore.setResponseCode(parseInt(res.code),res.msg)
        if(res.code!==200 ){
            if(response.config.responseType !== 'blob'){
                return Promise.reject(res.code)
            }
        }
        // 如果是返回的文件
        if (response.config.responseType === 'blob') {
            return res
        }
        // 兼容服务端返回的字符串数据
        if (typeof res === 'string') {
            res = res ? JSON.parse(res) : res
        }
        return res;
    },
    error => {
        console.log('err' + error) // for debug
        return Promise.reject(error)
    }
)
export default request
northglass-erp-client/erp-customer-client/src/views/LoginView.vue
New file
@@ -0,0 +1,244 @@
<script lang="ts" setup>
import {onMounted, onUnmounted, reactive, ref} from "vue"
import {useRouter,useRoute } from 'vue-router'
import type {FormInstance, FormRules} from 'element-plus'
import { ElMessage } from "element-plus";
import { Lock,Avatar } from '@element-plus/icons-vue'
import request from '@/utils/request'
import userInfo from '@/stores/userInfo'
import { useI18n } from 'vue-i18n'
import i18n from "@/lang/index"
//语言获取
const { t } = useI18n()
let language = ref(localStorage.getItem('lang') || 'zh-CN')
const store=userInfo()
let ruleFormRef  = ref<FormInstance>()
const router = useRouter()
const route = useRoute()
const userForm = reactive({
  loginName: '',
  password: ''
})
let registerState = ref(true)
const validateUser = (rule: any, value: any, callback: any) => {
  if (value === '') {
    callback(new Error('请输入用户名'))
  } else {
    callback()
  }
}
const validatePass = (rule: any, value: any, callback: any) => {
  if (value === '') {
    callback(new Error(  '请输入密码'))
  } else {
    callback()
  }
}
const rules = reactive<FormRules<typeof userForm>>({
  loginName: [{ validator: validateUser, trigger: 'blur' }],
  password: [{ validator: validatePass, trigger: 'blur' }]
})
//登陆方法
const submitForm = (formEl: FormInstance | undefined) => {
  if (!formEl) return
  formEl.validate((valid) => {
    if (valid) {
      loginLoadings.value=true
      //userForm.pass = btoa(userForm.pass)
      request.post('/customerUserLogin/login',
          userForm).then((res) => {
        if(res['code']===200 && res['data']){
          store.$patch({user:res.data})
          if(store.user.loginName==='admin'){
            router.push('/register')
          }else{
            router.push('/main')
          }
          ElMessage.success('登录成功')
        } else {
          ElMessage.error('账号或密码错误')
          loginLoadings.value=false
          return false
        }
      }).catch(error => {
        ElMessage.error('服务器连接错误!')
        loginLoadings.value=false
        return false
      }).then(() => {
        //userForm.pass = atob(userForm.pass)
      })
    }
  })
}
let loginLoadings= ref(false)
let registerLoadings= ref(false)
const keyDown = (e) => {
  // 回车则执行登录方法 enter键的ASCII是13
  if (e.keyCode == 13 ) {
    submitForm(ruleFormRef.value)
  }
}
onMounted(()=>{
  window.addEventListener('keydown', keyDown)
})
onUnmounted(() => {
  window.removeEventListener('keydown', keyDown)
})
const changeLanguage = () =>{
  localStorage.setItem('lang',language.value)
  location.reload()
}
//注册按钮的显示
const changeRegister = ()=>{
  if(userForm.password=='admin'){
    registerState.value =false
  }else {
    registerState.value =true
  }
}
</script>
<template>
  <div class="mainDiv1" >
    <div id="main-login">
      <div id="img-div">
        <img id="img-pic" src="@/assets/img.png" alt="">
      </div>
      <div id="div-login">
        <el-select
            @change="changeLanguage"
            v-model="language"
            placeholder=" "
            style="float: right;width: 6rem">
          <el-option value="zh-CN"  label="中文" />
        </el-select>
        <h2>北玻ERP-终端客户</h2>
        <el-form
            @submit.native.prevent
            ref="ruleFormRef"
            :model="userForm"
            status-icon
            :rules="rules"
        >
          <el-form-item :label="'用户:'" prop="loginName">
            <el-input
                v-model="userForm.loginName"
                type="text"
                autocomplete="off"
                :prefix-icon="Avatar"
                placeholder="请输入用户名"
            />
          </el-form-item>
          <el-form-item label="密码:" prop="password">
            <el-input
                v-model="userForm.password"
                @blur="changeRegister"
                type="password"
                autocomplete="off"
                :prefix-icon="Lock"
                placeholder="请输入密码"
            />
          </el-form-item>
          <el-form-item id="submitForm">
            <el-button
                :loading="loginLoadings"
                type="primary"
                native-type="submit"
                @click="submitForm(ruleFormRef)"
                @keyup.enter.native="keyDown(e)"
            >登录
            </el-button>
          </el-form-item>
        </el-form>
      </div>
    </div>
  </div>
</template>
<style scoped>
.mainDiv1{
//background-color: #1890FF;
//overflow: hidden;
  width: 100vw;
  height: 100vh;
  display: grid;
  place-items: center; /* 同时水平和垂直居中 */
}
#main-login{
  height: 60%;
  width: 70%;
//background-color: #f2f2f2;
}
#img-div{
  width: 55%;
  height: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
  float: left;
}
#img-pic{
  max-height: 90%;
  max-width: 100%;
}
@media (max-width: 1030px) {
  #img-div {
    display: none;
  }
  #main-login{
    display: flex;
    justify-content: center;
  }
}
#div-login{
  margin-top: 5%;
  background-color: #fff;
  float: right;
  width: 40%;
  height: 80%;
  border-radius: 12px;
  min-width: 318px;
  min-height: 300px;
  box-shadow: 0 8px 16px 0 rgba(0,0,0,0), 0 6px 5px 0 rgba(0,0,0,0.19);
}
h2{
  color: #1890FF;
  width: 100%;
  text-align: center;
  margin-top: 20%;
}
.el-form{
  width: 50%;
  margin: 5% auto auto;
}
#submitForm {
  display: flex;
  justify-content: space-evenly;
  margin-top: 2rem;
}
:deep(.el-form-item__content){
  flex: unset
}
</style>
northglass-erp-client/erp-customer-client/src/views/MainView.vue
New file
@@ -0,0 +1,89 @@
<script setup lang="ts">
import OrderUnfinishedView from '@/views/order/OrderUnfinishedView.vue'
import {Expand,CloseBold} from "@element-plus/icons-vue";
import {useRouter,useRoute } from 'vue-router'
import {ref} from "vue";
import userInfo from '@/stores/userInfo'
const activeIndex = ref('1')
const router = useRouter()
const user=userInfo()
const handleSelect = (key: string, keyPath: string[]) => {
  router.push({
    path:`/${key}`,
  })
}
</script>
<template>
  <div id="main-div">
    <el-container>
      <el-header>
        <el-menu
            :default-active="activeIndex"
            class="el-menu-demo"
            mode="horizontal"
            :ellipsis="false"
            @select="handleSelect"
        >
          <el-menu-item  >
            <img
                style="width: 5rem"
                src="../assets/northGlass.ico"
                alt="Element logo"
            />
            <el-text
                :truncated="true"
                style="margin-left: 1rem;font-weight: bolder;width: 40vw">
              {{user.user.customerName}}
            </el-text>
          </el-menu-item>
          <el-sub-menu index="2">
            <template #title><el-icon><Expand /></el-icon></template>
            <el-menu-item index="orderUnfinished">生产订单</el-menu-item>
            <el-menu-item index="orderHistory">历史订单</el-menu-item>
            <el-menu-item v-if="user.user.loginName==='admin'" index="register">客户注册</el-menu-item>
            <el-menu-item index=""><el-icon><CloseBold /></el-icon></el-menu-item>
          </el-sub-menu>
        </el-menu>
      </el-header>
      <el-main>
        <router-view></router-view>
      </el-main>
    </el-container>
  </div>
</template>
<style scoped>
#main-div{
  width: 100vw;
  height: 100vh;
  overflow-y: auto;
}
.el-menu--horizontal > .el-menu-item:nth-child(1) {
  margin-right: auto;
}
*{
  margin: 0;
  padding: 0;
}
.el-header{
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  z-index: 1000;
}
.el-main{
  margin-top: 5rem;
}
</style>
northglass-erp-client/erp-customer-client/src/views/RegisterView.vue
New file
@@ -0,0 +1,194 @@
<script setup lang="ts">
import {useRouter,useRoute} from 'vue-router'
import {onMounted, reactive, ref} from 'vue'
import type { FormProps,FormInstance, FormRules } from 'element-plus'
import {ElMessage,ElMessageBox} from "element-plus";
import request from "@/utils/request";
import {Avatar, UserFilled} from "@element-plus/icons-vue";
const router = useRouter()
const route = useRoute()
let loginLoadings= ref(false)
const labelPosition = ref<FormProps['labelPosition']>('right')
//注册用户参数
const register = reactive({
  customerId: '',
  loginName: '',
  password: '',
  confirmPassword:''
})
const customerList = ref([])
/*方法*/
onMounted(()=>{
  getCustomerList()
})
const getCustomerList = () => {
  request.post(`/customer/getCustomerList`).then((res) => {
    console.log(res.data)
    customerList.value = res.data
  })
}
const checkCustomerId = (rule: any, value: any, callback: any) => {
  if (value === '') {
    callback(new Error('客户未选择'))
  }else{
    callback()
  }
}
const checkName = (rule: any, value: any, callback: any) => {
  if (value.trim() === '') {
    callback(new Error('登录名不能为空'))
  }else if(value.length>11){
    callback(new Error('长度不能超过11'))
  }else{
    callback()
  }
}
const checkPassword = (rule: any, value: any, callback: any) => {
  if (value.trim() === '') {
    callback(new Error('密码不能为空'))
  }else if(value.length>16 || value.length<6){
    callback(new Error('密码长度不能低于6或超过16'))
  }else{
    callback()
  }
}
const checkConfirmPassword = (rule: any, value: any, callback: any) => {
  if (value.trim() === '') {
    callback(new Error('确认密码不能为空'))
  }else if(value !== register.password){
    callback(new Error('两次密码不相同'))
  }else if(value.length>16 || value.length<6){
    callback(new Error('密码长度不能低于6或超过16'))
  }else{
    callback()
  }
}
const ruleFormRef  = ref<FormInstance>()
const rules = reactive<FormRules<typeof register>>({
  customerId: [{ validator: checkCustomerId, trigger: 'blur' }],
  loginName: [{ validator: checkName, trigger: 'blur' }],
  password:[{ validator: checkPassword, trigger: 'blur' }],
  confirmPassword:[{ validator: checkConfirmPassword, trigger: 'blur' }],
})
const submitForm = (formEl: FormInstance | undefined) => {
  if (!formEl) return
  formEl.validate((valid) => {
    if (valid) {
      loginLoadings.value=true
      //register.password = btoa(register.password)
      request.post('/customerUserLogin/register',
          register).then((res) => {
        if(res['code']==200 && res['data'] ==true){
          ElMessage.success(`注册成功`)
        } else {
          ElMessage.error("注册失败,请检查用户名或此客户已存在")
          return false
        }
      }).catch(error => {
        ElMessage.error("服务器连接失败")
        return false
      }).then(() => {
        loginLoadings.value=false
        //register.password = atob(register.password)
      })
    }
  })
}
</script>
<template>
  <h2 style="color: #1890FF">
    <span>
      <el-icon><UserFilled /></el-icon>
      <p>北玻ERP客户查询系统注册</p>
    </span>
  </h2>
  <div id="main-div">
    <div id="register">
      <el-form
          :label-position="labelPosition"
          label-width="100px"
          :model="register"
          ref="ruleFormRef"
          status-icon
          :rules="rules"
      >
        <el-form-item label="客户选择:" prop="customerId">
<!--          <el-input v-model="register.customerId" />-->
          <el-select v-model="register.customerId" placeholder="" filterable>
            <el-option v-for="item in customerList"
                       :value="item['id']"
                       :label="item['customerName']" />
          </el-select>
        </el-form-item>
        <el-form-item label="登录名:" prop="loginName">
          <el-input v-model="register.loginName" />
        </el-form-item>
        <el-form-item label="密码:" prop="password">
          <el-input type="password" v-model="register.password" />
        </el-form-item>
        <el-form-item label="确认密码:" prop="confirmPassword">
          <el-input type="password" v-model="register.confirmPassword" />
        </el-form-item>
        <el-form-item >
          <el-button
              :loading="loginLoadings"
              type="primary"
              @click="submitForm(ruleFormRef)"
          >注册
          </el-button>
        </el-form-item>
      </el-form>
    </div>
  </div>
</template>
<style scoped>
#main-div{
//overflow: hidden;
  position: absolute;
  left:50%;
  top:55%;
  transform: translate(-50%, -50%);
  width: 50vw;
  height: 50vh;
  min-width: 320px;
}
h2{
  text-align: center;
  width: 100vw;
}
#register{
  background-color: #FAFAFA;
  width: 100%;
  height: 100%;
  border-radius: 12px;
  box-shadow: 0 8px 16px 0 rgba(0,0,0,0), 0 6px 5px 0 rgba(0,0,0,0.19);
  display:flex;
  align-items:center;
  justify-content:center;
}
.el-form{
  max-width: 300px;
}
</style>
northglass-erp-client/erp-customer-client/src/views/order/OrderDetailView.vue
New file
@@ -0,0 +1,166 @@
<script setup>
import {onMounted, reactive, ref, watch} from "vue";
import {useI18n} from "vue-i18n"
import request from "@/utils/request"
import footSum from "@/hook/footSum"
import {multiply,multiplyAuto,divideAuto} from '@/utils/decimal'
const { t } = useI18n()
const xGrid = ref()
const gridOptions = reactive({
  loading:false,
  border:  "full",//表格加边框
  keepSource: true,//保持源数据
  align: 'center',//文字居中
  stripe:true,//斑马纹
  showOverflow:true,
  showFooter: true,//显示脚
  rowConfig: {isCurrent: true, isHover: true,height: 30},//鼠标移动或选择高亮
  virtualScroll: true, // 开启虚拟滚动功能
  id: 'OrderDetail',
  scrollY:{ enabled: true,gt:13 },//开启虚拟滚动
  //scrollX:{ enabled: true,gt:15 },//开启虚拟滚动
  columnConfig: {
    resizable: true,
    useKey: true
  },
  customConfig: {
    storage: true
  },
  mouseConfig:{selected: true},//鼠标选中
  keyboardConfig:{
    isArrow: true
  },
  columns:[
    {field: 'orderNumber', title: '自序', width: 80 },
    {field: 'buildingNumber',width:120,  title: '楼层编号'},
    {field: 'productId',width:140,  title: '产品ID'},
    {field: 'productName',width:300,  title: "产品"},
    {field: 'otherColumns.S01',width:140,  title: '编号'},
    {field: 'width',width:120,  title: '宽'},
    {field: 'height',width:140,  title: '高'},
    {field: 'quantity',width:140,  title: '数量'},
    {field: 'processingNote',width:200,  title: '加工要求'},
    {field: 'computeArea',width:180,  title: '结算单片面积'},
    {field: 'computeGrossArea',width:200,  title: '结算总面积'},
    {field: 'price',width:160,  title: '单价'},
    {field: 'grossAmount',width:160,  title: '金额'},
    {field: 'remarks',width:140,  title: '备注'},
    {field: 'shape',width:120,
      title: '形状',
      slots: {default:'default_shape' }},
    {field: 'bendRadius',width:160,  title: '弯钢半径'},
    {field: 'edgingType',width:160,  title: '磨边类型'},
  ],
  footerMethod ({ columns, data }) {//页脚函数
    return[
      columns.map((column, columnIndex) => {
        if (columnIndex === 0) {
          return '合计'
        }
        const List = ["quantity",'grossArea','area','computeGrossArea','computeArea','perimeter','grossAmount']
        if (List.includes(column.field)) {
          return footSum(data, column.field)
        }
        return ''
      })
    ]
  }
})
let props = defineProps({
  orderId:null
})
onMounted(async ()=>{
  //await getColumns()
  await getDetail()
})
watch(()=>props.orderId,(newValue)=>{
  getDetail()
})
const getColumns = async () => {
  await request.post(`/basicOtherMoney/findAllByState`).then(res=>{
    res.data.forEach(item => {
      let column = {
        field: `otherColumns.${item.column}`,
        width:100,
        title: item.alias,
        editRender: {
          name: 'input',
        }
      }
      //columns.push(column)
      gridOptions.columns.push(column)
    })
  })
}
const getDetail = async ()=> {
  await request.post(`/order/getOrderDetail/${props.orderId}`).then(res=>{
    console.log(res)
    xGrid.value.reloadData(res.data)
  })
}
const handleKeyDown = (evnt) =>{
  if(evnt.$event.keyCode === 38 ){
    let nextRowIndex = xGrid.value.getRowIndex(xGrid.value.getCurrentRecord()) - 1;
    if (nextRowIndex < xGrid.value.getTableData().fullData.length && nextRowIndex>=0) {
      xGrid.value.setCurrentRow(xGrid.value.getTableData().fullData[nextRowIndex]);
    }
  }
  if(evnt.$event.keyCode === 40 ){
    let nextRowIndex = xGrid.value.getRowIndex(xGrid.value.getCurrentRecord()) + 1;
    if (nextRowIndex < xGrid.value.getTableData().fullData.length) {
      xGrid.value.setCurrentRow(xGrid.value.getTableData().fullData[nextRowIndex]);
    }
  }
}
</script>
<template>
  <div style="width: 100%;height: 100%">
    <vxe-grid
        height="100%"
        size="mini"
        class="mytable-scrollbar"
        ref="xGrid"
        v-bind="gridOptions"
        @keydown="handleKeyDown"
        v-on="gridEvents"
    >
      <template #default_shape="{ row }">
        <span>{{ row.shape==='1'?'普形':row.shape==='2'?'异形':null }}</span>
      </template>
    </vxe-grid>
  </div>
</template>
<style scoped>
.vxe-grid {
  /* 禁用浏览器默认选中 */
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  transform: translateZ(0);
}
</style>
northglass-erp-client/erp-customer-client/src/views/order/OrderHistoryView.vue
New file
@@ -0,0 +1,146 @@
<script setup>
import {onMounted, reactive, ref} from "vue";
import request from "@/utils/request.js";
import userInfo from '@/stores/userInfo'
import footSum from "@/hook/footSum";
import OrderDetailView from "@/views/order/OrderDetailView.vue";
const user=userInfo()
const value = ref(["",""])
const xGrid = ref()
const dialogVisible = ref(false)
const checkOrderId = ref(null)
const gridOptions = reactive({
  loading:false,
  border:  "full",//表格加边框
  keepSource: true,//保持源数据
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {height: 30,isCurrent:true},//鼠标移动或选择高亮
  id: 'OrderReport',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
  exportConfig: {},
  showOverflow:true,
  columnConfig: {
    resizable: true,
    useKey: true
  },
  filterConfig: {   //筛选配置项
    remote: true
  },
  customConfig: {
    storage: true
  },
  columns:[
    {field: 'orderId',minWidth:120, title: '订单编号'},
    {field: 'project',minWidth:120, title: '项目名称'},
    {field: 'quantity',minWidth:120, title: '数量'},
    {field: 'area',minWidth:120, title: '结算面积'},
    {field: 'money',minWidth:120, title: '总金额'},
    {field: 'createTime',minWidth:120, title: '下单日期'},
    {field: 'deliveryDate',minWidth:120, title: '发货日期'},
    {field: 'contacts',minWidth:120, title: '联系人 '},
    {field: 'contactNumber',minWidth:120, title: '联系电话'},
    {field: 'deliveryAddress',minWidth:120, title: '送货地址'}
  ],//表头按钮
  toolbarConfig: {
    buttons: [],
    slots: {
      buttons: "toolbaruttons"
    }
  },
  data:  [
  ],//table body实际数据
  footerMethod ({ columns, data }) {//页脚函数
    const list = ['quantity', 'area', 'money']
    return[
      columns.map((column, columnIndex) => {
        if (columnIndex === 0) {
          return '合计'
        }
        if (list.includes(column.field)) {
          return footSum(data, column.field)
        }
        return ''
      })
    ]
  }
})
const gridEvents = {
  cellClick({ row }){
    dialogVisible.value = true
    checkOrderId.value = row.orderId
  }
}
onMounted(()=>{
  getOrderHistory()
})
const getOrderHistory = () => {
  const params = {
    customerId:user.user.customerId,
    searchDate:value.value
  }
  request.post('/order/getFinishedOrder',params).then(res=>{
    if (res.code === 200) {
      xGrid.value.reloadData(res.data.orders)
      value.value = res.data.searchDate
    }
  })
}
const sumNum = (list, field) => {
  let count = 0
  list.forEach(item => {
    count += Number(item[field])
  })
  return count.toFixed(2)
}
</script>
<template>
  <div class="page" >
    <vxe-grid
        @filter-change="filterChanged"
        height="100%"
        class="mytable-scrollbar"
        ref="xGrid"
        v-bind="gridOptions"
        v-on="gridEvents"
    >
      <template #toolbaruttons>
        <el-date-picker
            @change="getOrderHistory"
            v-model="value"
            type="daterange"
            start-placeholder=""
            end-placeholder=""
            value-format="YYYY-MM-DD"
        />
      </template>
    </vxe-grid>
    <el-dialog v-model="dialogVisible" fullscreen>
      <template #header>
        <el-text size="large" style="font-weight: bolder">详情</el-text>
        <order-detail-view
            :orderId = "checkOrderId"/>
      </template>
    </el-dialog>
  </div>
</template>
<style scoped>
.page{
  width: 100%;
  height:calc(100vh - 5.5rem);
}
</style>
northglass-erp-client/erp-customer-client/src/views/order/OrderUnfinishedView.vue
New file
@@ -0,0 +1,279 @@
<script lang="ts" setup>
import request from "@/utils/request"
import {onMounted, ref} from "vue";
import userInfo from '@/stores/userInfo'
/*定义变量区*/
const order = ref([])
const dialogVisible = ref(false)
const orderDetails = ref([])
const loading = ref(true)
let productName = ref(null)
const user=userInfo()
/*方法区*/
onMounted(()=>{
  getCustomerOrderUnfinished()
})
//获取客户为完成订单
const getCustomerOrderUnfinished = () => {
  request.post(`/order/getUnfinishedOrder/${user.user.customerId}`).then((res) => {
    order.value = res.data
    loading.value=false
  })
}
//获取此产品的订单明细以及生产进度
const getOrderProgress =async (orderId:string,productId:string)=>{
  await request.post(`/order/getOrderProgress/${orderId}/${productId}`).then((res) => {
    orderDetails.value = res.data
  })
}
//显示明细
const searchGlassDetail =async (orderId,productId,productName1) => {
  await getOrderProgress(orderId,productId)
  productName.value = productName1
  dialogVisible.value = true
}
</script>
<template>
  <div class="grid-container" v-loading="loading">
    <div class="grid-item" v-for="(item,index) in order">
      <el-row>
        <el-col :span="24">
          <el-text class="orderId" size="large"> {{item['orderId']}}</el-text>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="6">
          <el-text >订单进度:</el-text>
        </el-col>
        <el-col :span="17">
          <el-progress :text-inside="true" :stroke-width="20" :percentage="item['percent']" />
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="6">
          <el-text >订单日期:</el-text>
        </el-col>
        <el-col :span="6">
          <el-text class="date" >{{item["createTime"]}}</el-text>
        </el-col>
        <el-col :span="6">
          <el-text >发货日期:</el-text>
        </el-col>
        <el-col :span="6">
          <el-text class="date" >{{item["deliveryDate"]}}</el-text>
        </el-col>
      </el-row>
      <div class="orderDetail">
        <template v-for="(orderDetail,index) in item['orderDetails']">
          <el-row>
            <el-col :span="24">
              <el-divider />
            </el-col>
          </el-row>
          <el-row @click="searchGlassDetail(orderDetail['orderId'],orderDetail['productId'],orderDetail['productName'])">
            <el-col :span="6">
              产品名称:
            </el-col>
            <el-col :span="18" class="productName">
              <el-text style="word-break:break-all;">
                {{orderDetail["productName"]}}
              </el-text>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="6">
              总数量:
            </el-col>
            <el-col :span="6" class="productName">
              <el-text>
                {{orderDetail["quantity"]}}
              </el-text>
            </el-col>
            <el-col :span="6">
              入库:
            </el-col>
            <el-col :span="6" class="productName">
              <el-text>
                {{orderDetail["warehouseNum"]}}
              </el-text>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="6">
              生产数量:
            </el-col>
            <el-col :span="6" class="productName">
              <el-text >
                {{orderDetail["quantityByProduced"]}}
              </el-text>
            </el-col>
            <el-col :span="6">
              发货:
            </el-col>
            <el-col :span="6" class="productName">
              <el-text>
                {{orderDetail["deliveryNum"]}}
              </el-text>
            </el-col>
          </el-row>
        </template>
      </div>
    </div>
  </div>
  <el-dialog v-model="dialogVisible" fullscreen>
    <template #header>
      <el-text size="large" style="font-weight: bolder">{{productName}}</el-text>
    </template>
    <template v-for="(orderDetail,index) in orderDetails">
      <el-row>
        <el-divider />
      </el-row>
<!--订单表头-->
      <el-row gutter="1">
        <el-col :span="3">
          订序:
        </el-col>
        <el-col :span="3">
          {{orderDetail['orderNumber']}}
        </el-col>
        <el-col :span="3">
          宽:
        </el-col>
        <el-col :span="3">
          {{orderDetail['width']}}
        </el-col>
        <el-col :span="3">
          高:
        </el-col>
        <el-col :span="3">
          {{orderDetail['height']}}
        </el-col>
        <el-col :span="3">
          数量:
        </el-col>
        <el-col :span="3">
          {{orderDetail['quantity']}}
        </el-col>
      </el-row>
      <template v-for="(orderProcessDetail,keys,index) in orderDetail['orderProcessDetails']">
        <el-row class="process-row">
          <el-col :span="24">
            <el-text>
              流程卡号:
            </el-text>
            <el-text>{{keys}}</el-text>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="24">
            <template v-for="(orderProcessDetailItem) in orderProcessDetail">
              <el-text class="process">
                {{orderProcessDetailItem['process'] +':'+ orderProcessDetailItem['reportingWorkNum'] }}
              </el-text>
            </template>
          </el-col>
        </el-row>
      </template>
    </template>
  </el-dialog>
</template>
<style scoped>
.grid-container {
  width: 100%;
  //height: 100vh;
  display: grid;
  grid-template-columns: repeat(3, 1fr); /* 默认3列 */
  justify-items: center; /* 水平居中 */
  align-items: center;   /* 垂直居中 */
  gap: 2rem; /* 可选,设置网格之间的间隔 */
}
.grid-item{
  background-color: white;
  height: 70vh;
  width: 25vw;
  text-align: center;
  box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0), 0 6px 5px 0 rgba(0, 0, 0, 0.19);
  border-radius:1rem
}
@media (max-width: 1450px) {
  .grid-container {
    grid-template-columns: 1fr; /* 小屏幕下变为单列 */
  }
  .grid-item{
    width: 90vw;
    height: auto;
    min-height:  70vh;;
  }
  .orderDetail{
    height: auto;
    overflow-y: hidden;
  }
}
:deep(.el-row){
  margin-bottom: 0.4rem;
  text-align: center;
}
.orderId{
  font-size: larger;
  font-weight: bold;
}
.date{
  font-weight: bolder;
}
.el-divider--horizontal {
  border-top: 5px var(--el-border-color) var(--el-border-style);
  display: block;
  height: 1px;
  margin: 24px 0;
  width: 100%;
}
.orderDetail{
  width: calc(100% - 2rem);
  height:calc(100% - 8rem);
  margin-left: auto;
  margin-right: auto;
  overflow-y: auto;
}
.orderDetail .el-col {
  text-align: left;
}
.productName .el-text{
  font-weight: bolder;
  font-size:16px
}
.process{
  margin-right: 0.5rem;
}
.process-row{
  margin-top: 1rem;
}
</style>
northglass-erp-client/erp-customer-client/vite.config.js
New file
@@ -0,0 +1,31 @@
import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueDevTools from 'vite-plugin-vue-devtools'
// https://vite.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    //vueDevTools(),
  ],
  server: {
    port: 5163,//端口号
    host: true,//ip地址 或 '0.0.0.0' 或 "loaclhost"
    open: false, //启动后是否自动打开浏览器
    https: false, // 是否开启 https
    proxy: {
      '^/api': {
        changeOrigin: true, //支持跨域
        rewrite: (path) => path.replace(/^\/api/, "/api"), //重写真实路径,替换/api
      }
    }
  },
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    },
  },
})
northglass-erp-client/pom.xml
New file
@@ -0,0 +1,113 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>northglass-erp-client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>northglass-erp-client</name>
    <description>northglass-erp-client</description>
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.6.13</spring-boot.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.6</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--mybatis plus场景-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
        <!--添加Knife4j依赖-->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
            <version>3.0.3</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.24</version>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <mainClass>com.example.northglasserpclient.NorthglassErpClientApplication</mainClass>
                    <skip>true</skip>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
northglass-erp-client/src/main/java/com/example/northglasserpclient/NorthglassErpClientApplication.java
New file
@@ -0,0 +1,13 @@
package com.example.northglasserpclient;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class NorthglassErpClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(NorthglassErpClientApplication.class, args);
    }
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/common/Constants.java
New file
@@ -0,0 +1,11 @@
package com.example.northglasserpclient.common;
public interface Constants {
    Integer Code_500=500;//系统错误
    Integer Code_401=401;//权限不足
    Integer Code_402=402;//还未登陆
    Integer Code_400=400;//
    Integer Code_200=200;//成功
    Integer Code_600=600;//其他问题
    String Code_msg = "服务器发生异常,保存失败";
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/common/ExceptionController.java
New file
@@ -0,0 +1,29 @@
package com.example.northglasserpclient.common;
import org.mybatis.logging.Logger;
import org.mybatis.logging.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
@ControllerAdvice
public class ExceptionController {
    private final Logger log = LoggerFactory.getLogger(ExceptionController.class);
    @ResponseStatus(value = HttpStatus.BAD_REQUEST)
    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseBody
    public Result  getMessage(MethodArgumentNotValidException exception){
        Result result = new Result();
        result.setCode(600);
        String message =  exception.getBindingResult().getFieldError().getDefaultMessage();
        System.out.println(message);
        // exception.getBindingResult().getFieldErrors(); 获取所有的错误信息
        result.setMsg("'"+exception.getBindingResult().getFieldError().getField()+"':"+message);
        return result;
    }
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/common/Result.java
New file
@@ -0,0 +1,29 @@
package com.example.northglasserpclient.common;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {
    private Integer code;
    private String msg;
    private Object data;
    public static  Result success(){
        return new Result(Constants.Code_200,"",null);
    }
    public static  Result success(Object data){
        return new Result(Constants.Code_200,"",data);
    }
    public static  Result error(Integer code ,String msg){
        return new Result(code,msg,null);
    }
    public static  Result error(){
        return new Result(Constants.Code_500,"服务器发生异常",null);
    }
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/config/Knife4jConfig.java
New file
@@ -0,0 +1,88 @@
package com.example.northglasserpclient.config;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.ReflectionUtils;
import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.spring.web.plugins.WebFluxRequestHandlerProvider;
import springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
import java.lang.reflect.Field;
import java.util.List;
import java.util.stream.Collectors;
@Configuration
@EnableSwagger2WebMvc
public class Knife4jConfig {
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                // apiInfo():配置 API 的一些基本信息,比如:文档标题title,文档描述description,文档版本号version
                .apiInfo(apiInfo())
                // select():生成 API 文档的选择器,用于指定要生成哪些 API 文档
                .select()
                // apis():指定要生成哪个包下的 API 文档
                .apis(RequestHandlerSelectors.basePackage("com.example.northglasserpclient.controller"))
                // paths():指定要生成哪个 URL 匹配模式下的 API 文档。这里使用 PathSelectors.any(),表示生成所有的 API 文档。
                .paths(PathSelectors.any())
                .build();
    }
    private static final String API_TILE="erp-customer-client";
    //文档信息配置
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                // 文档标题
                .title(API_TILE)
                // 文档描述信息
                .description("erp-customer-client在线API文档")
                // 文档版本号
                .version("1.0")
                .build();
    }
    @Bean
    public static BeanPostProcessor springfoxHandlerProviderBeanPostProcessor() {
        return new BeanPostProcessor() {
            @Override
            public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
                if (bean instanceof WebMvcRequestHandlerProvider || bean instanceof WebFluxRequestHandlerProvider) {
                    customizeSpringfoxHandlerMappings(getHandlerMappings(bean));
                }
                return bean;
            }
            private <T extends RequestMappingInfoHandlerMapping> void customizeSpringfoxHandlerMappings(List<T> mappings) {
                List<T> copy = mappings.stream()
                        .filter(mapping -> mapping.getPatternParser() == null)
                        .collect(Collectors.toList());
                mappings.clear();
                mappings.addAll(copy);
            }
            @SuppressWarnings("unchecked")
            private List<RequestMappingInfoHandlerMapping> getHandlerMappings(Object bean) {
                try {
                    Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings");
                    field.setAccessible(true);
                    return (List<RequestMappingInfoHandlerMapping>) field.get(bean);
                } catch (IllegalArgumentException | IllegalAccessException e) {
                    throw new IllegalStateException(e);
                }
            }
        };
    }
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/config/MyCorsConfig.java
New file
@@ -0,0 +1,19 @@
package com.example.northglasserpclient.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration(proxyBeanMethods = false)
public class MyCorsConfig {
    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**");
            }
        };
    }
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/controller/CustomerUserLoginController.java
New file
@@ -0,0 +1,40 @@
package com.example.northglasserpclient.controller;
import com.example.northglasserpclient.common.Result;
import com.example.northglasserpclient.domain.po.CustomerUserLogin;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.example.northglasserpclient.service.ICustomerUserLoginService;
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
@RestController
@RequestMapping("/customerUserLogin")
@Api(value="客户操作接口CustomerUserLogin",tags={"客户操作接口CustomerUserLogin"})
@RequiredArgsConstructor
public class CustomerUserLoginController {
    private final ICustomerUserLoginService customerUserLoginService;
    @ApiOperation("登录")
    @PostMapping("/login")
    public Result login(@RequestBody CustomerUserLogin CustomerUserLogin){
        return Result.success(customerUserLoginService.login(CustomerUserLogin));
    }
    @ApiOperation("注册")
    @PostMapping("/register")
    public Result register(@RequestBody CustomerUserLogin CustomerUserLogin){
        return Result.success(customerUserLoginService.register(CustomerUserLogin));
    }
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/controller/sd/CustomerController.java
New file
@@ -0,0 +1,34 @@
package com.example.northglasserpclient.controller.sd;
import com.example.northglasserpclient.common.Result;
import com.example.northglasserpclient.service.sd.ICustomerService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
@RestController
@RequestMapping("/customer")
@Api(tags = "客户管理")
@RequiredArgsConstructor
public class CustomerController {
    private final ICustomerService customerService;
    @ApiOperation(value = "客户列表")
    @PostMapping("/getCustomerList")
    public Result getCustomerList(){
        return Result.success(customerService.list());
    }
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/controller/sd/OrderController.java
New file
@@ -0,0 +1,53 @@
package com.example.northglasserpclient.controller.sd;
import com.example.northglasserpclient.common.Result;
import com.example.northglasserpclient.service.sd.IOrderService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
@RestController
@RequestMapping("/order")
@RequiredArgsConstructor
@Api(tags = "订单管理")
public class OrderController {
    private final IOrderService orderService;
    @ApiOperation("获取客户未完成订单")
    @PostMapping("/getUnfinishedOrder/{customId}")
    public Result getUnfinishedOrder(@PathVariable String customId){
        return Result.success(orderService.getUnfinishedOrder(customId));
    }
    @ApiOperation("获取客户已完成订单")
    @PostMapping("/getFinishedOrder")
    public Result getFinishedOrder(@RequestBody Map<String,Object> object){
        return Result.success(orderService.getFinishedOrder(object));
    }
    @ApiOperation("获取订单生产进度")
    @PostMapping("/getOrderProgress/{orderId}/{productId}")
    public Result getOrderProgress(@PathVariable String orderId,@PathVariable String productId){
        return Result.success(orderService.getOrderProgress(orderId,productId));
    }
    @ApiOperation("获取订单详情")
    @PostMapping("/getOrderDetail/{orderId}")
    public Result getOrderDetail(@PathVariable String orderId){
        return Result.success(orderService.getOrderDetail(orderId));
    }
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/controller/sd/OrderDetailController.java
New file
@@ -0,0 +1,20 @@
package com.example.northglasserpclient.controller.sd;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
@RestController
@RequestMapping("/order-detail")
public class OrderDetailController {
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/controller/sd/OrderGlassDetailController.java
New file
@@ -0,0 +1,20 @@
package com.example.northglasserpclient.controller.sd;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
@RestController
@RequestMapping("/order-glass-detail")
public class OrderGlassDetailController {
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/controller/sd/OrderProcessDetailController.java
New file
@@ -0,0 +1,20 @@
package com.example.northglasserpclient.controller.sd;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
@RestController
@RequestMapping("/order-process-detail")
public class OrderProcessDetailController {
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/domain/dto/sd/OrderDTO.java
New file
@@ -0,0 +1,16 @@
package com.example.northglasserpclient.domain.dto.sd;
import com.example.northglasserpclient.domain.po.sd.Order;
import com.example.northglasserpclient.domain.po.sd.OrderDetail;
import lombok.Data;
import java.util.List;
@Data
public class OrderDTO extends Order {
    private List<OrderDetailDTO> orderDetails;
    /**
     * 订单完成百分比
     */
    private Integer percent;
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/domain/dto/sd/OrderDetailDTO.java
New file
@@ -0,0 +1,18 @@
package com.example.northglasserpclient.domain.dto.sd;
import com.example.northglasserpclient.domain.po.sd.OrderDetail;
import com.example.northglasserpclient.domain.po.sd.OrderProcessDetail;
import lombok.Data;
import java.util.List;
import java.util.Map;
@Data
public class OrderDetailDTO extends OrderDetail {
    /**
     * 实际生产数量
     */
    private Integer quantityByProduced;
    private List<OrderDetailDTO> orderDetailsDTO;
    private Map<String,List<OrderProcessDetail>> orderProcessDetails;
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/domain/po/CustomerUserLogin.java
New file
@@ -0,0 +1,41 @@
package com.example.northglasserpclient.domain.po;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
 * <p>
 *
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("customer_user_login")
public class CustomerUserLogin implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    private String loginName;
    private String password;
    private Integer customerId;
    @TableField(select = false,exist = false)
    private String customerName;
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/domain/po/sd/Customer.java
New file
@@ -0,0 +1,67 @@
package com.example.northglasserpclient.domain.po.sd;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
 * <p>
 *
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("sd.customer")
public class Customer implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * 客户名称
     */
    private String customerName;
    /**
     * 客户简称
     */
    private String customerAbbreviation;
    /**
     * 客户等级
     */
    private String grade;
    /**
     * 金额额度
     */
    private BigDecimal moneyLimit;
    /**
     * 地址
     */
    private String address;
    /**
     * 联系人
     */
    private String contact;
    /**
     * 联系电话
     */
    private String phone;
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/domain/po/sd/Order.java
New file
@@ -0,0 +1,248 @@
package com.example.northglasserpclient.domain.po.sd;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.time.LocalDate;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
 * <p>
 *
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("sd.order")
public class Order implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * <订单表>
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    /**
     * 订单Id
     */
    private String orderId;
    /**
     * 项目名称
     */
    private String project;
    /**
     * 客户Id
     */
    private Long customerId;
    /**
     * 客户名称
     */
    private String customerName;
    /**
     * 订单类型
     */
    private String orderType;
    /**
     * 订单分类
     */
    private String orderClassify;
    /**
     * 商标选项
     */
    private String icon;
    /**
     * 包装方式
     */
    private String packType;
    /**
     * 送货时间
     */
    private LocalDate deliveryDate;
    /**
     * 批次
     */
    private String batch;
    /**
     * 计算方式
     */
    private Integer calculateType;
    /**
     * 销售人员Id
     */
    private String salesmanId;
    /**
     * 销售人
     */
    private String salesman;
    /**
     * 铝条方式
     */
    private String alType;
    /**
     * 金额
     */
    private BigDecimal money;
    /**
     * 合同编号
     */
    private String contractId;
    /**
     * 客户批次
     */
    private String customerBatch;
    /**
     * 联系人
     */
    private String contacts;
    /**
     * 联系电话
     */
    private String contactNumber;
    /**
     * 送货地址
     */
    private String deliveryAddress;
    /**
     * 其他金额
     */
    private BigDecimal otherMoney;
    /**
     * 其他金额备注
     */
    private String otherMoneyRemarks;
    /**
     * 订单加工备注
     */
    private String processingNote;
    /**
     * 其他备注
     */
    private String otherRemarks;
    /**
     * 面积
     */
    private BigDecimal area;
    /**
     * 数量
     */
    private Long quantity;
    /**
     * 周长
     */
    private String perimeter;
    /**
     * 审核人id
     */
    private String verifierId;
    /**
     * 审核人
     */
    private String verifier;
    /**
     * 创建人id
     */
    private String creatorId;
    /**
     * 创建人
     */
    private String creator;
    /**
     * 下单
     */
    private Integer createOrder;
    /**
     * 工艺审核
     */
    private Integer processReview;
    /**
     * 订单审核
     */
    private Integer orderReview;
    /**
     * 生产订单
     */
    private Integer productionOrder;
    /**
     * 流程卡
     */
    private Integer processingCard;
    /**
     * 入库
未入库状态0,未完全入库状态1,完全入库状态2
     */
    private Integer warehousing;
    /**
     * 发货
     */
    private Integer delivery;
    /**
     * 打印次数
     */
    private Integer printingNumber;
    private Integer version;
    /**
     * 创建日期
     */
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd")
    private LocalDateTime createTime;
    /**
     * 修改时间
     */
    private LocalDateTime updateTime;
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/domain/po/sd/OrderDetail.java
New file
@@ -0,0 +1,190 @@
package com.example.northglasserpclient.domain.po.sd;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
 * <p>
 *
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("sd.order_detail")
public class OrderDetail implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * <订单产品明细>
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * 订单Id
     */
    private String orderId;
    /**
     * 订单产品自序
     */
    private Integer orderNumber;
    /**
     * 楼号
     */
    private String buildingNumber;
    /**
     * 产品Id
     */
    private Long productId;
    /**
     * 产品名称
     */
    private String productName;
    /**
     * 单价
     */
    private BigDecimal price;
    /**
     * 数量
     */
    private Long quantity;
    /**
     * 总金额
     */
    private BigDecimal grossAmount;
    /**
     * 宽
     */
    private BigDecimal width;
    /**
     * 高
     */
    private BigDecimal height;
    /**
     * 形状
     */
    private String shape;
    /**
     * 实际面积
     */
    private BigDecimal area;
    /**
     * 实际总面积
     */
    private BigDecimal grossArea;
    /**
     * 结算单片面积
     */
    private BigDecimal computeArea;
    /**
     * 结算总面积
     */
    private BigDecimal computeGrossArea;
    /**
     * 加工要求
     */
    private String processingNote;
    /**
     * 备注
     */
    private String remarks;
    /**
     * 弯钢弧度
     */
    private Double bendRadius;
    /**
     * 磨边类型
     */
    private String edgingType;
    /**
     * 重量
     */
    private String weight;
    /**
     * 周长
     */
    private String perimeter;
    /**
     * 其他列
     */
    private String otherColumns;
    /**
     * 入库可用数量
     */
    private Integer warehouseNum;
    /**
     * 发货数量
     */
    private Integer deliveryNum;
    private Integer outStockNum;
    /**
     * 退货数量
     */
    private Integer returnNum;
    /**
     * 状态
     */
    private Integer state;
    /**
     * 创建时间
     */
    private LocalDateTime createTime;
    /**
     * 修改时间
     */
    private LocalDateTime updateTime;
    /**
     * 拱高
     */
    private Double archRise;
    /**
     * 单片周长
     */
    private String monolithicPerimeter;
    private String fileName;
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/domain/po/sd/OrderGlassDetail.java
New file
@@ -0,0 +1,134 @@
package com.example.northglasserpclient.domain.po.sd;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
 * <p>
 *
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("sd.order_glass_detail")
public class OrderGlassDetail implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * <订单小片工艺详情表>
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * 订单id
     */
    private String orderId;
    /**
     * 订单产品自序
     */
    private Integer orderNumber;
    /**
     * 产品玻璃顺序
     */
    private Integer technologyNumber;
    /**
     * 片标记(位置)
     */
    private String glassAddress;
    /**
     * 单片名称
     */
    private String glassChild;
    /**
     * 单片宽
     */
    private BigDecimal childWidth;
    /**
     * 单片高
     */
    private BigDecimal childHeight;
    /**
     * 小片面积
     */
    private BigDecimal area;
    /**
     * 总面积
     */
    private BigDecimal totalArea;
    /**
     * 弧长
     */
    private BigDecimal arc;
    /**
     * 标签
     */
    private String icon;
    /**
     * 单片工艺
     */
    private String process;
    /**
     * 生产订单号
     */
    private String productionId;
    /**
     * 分架状态(默认0.已分架1)
     */
    private Integer splittingStatus;
    /**
     * 转单人
     */
    private String founder;
    /**
     * 分组(组别)
     */
    @TableField("`group`")
    private Integer group;
    /**
     * 工单时间
     */
    private LocalDateTime productionTime;
    /**
     * 创建时间
     */
    private LocalDateTime createTime;
    /**
     * 拱高
     */
    private BigDecimal archRise;
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/domain/po/sd/OrderProcessDetail.java
New file
@@ -0,0 +1,79 @@
package com.example.northglasserpclient.domain.po.sd;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
 * <p>
 *
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("sd.order_process_detail")
public class OrderProcessDetail implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * <报工流程明细表>
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * 订单id
     */
    private String orderId;
    /**
     * 流程卡id
     */
    private String processId;
    /**
     * 订单序号
     */
    private Integer orderNumber;
    /**
     * 子产品序号
     */
    private Integer technologyNumber;
    /**
     * 工艺名称
     */
    private String process;
    /**
     * 完工总数量
     */
    private Integer reportingWorkNumCount;
    /**
     * 完工真实数量
     */
    private Integer reportingWorkNum;
    /**
     * 次破数量
     */
    private Integer brokenNum;
    private LocalDateTime createTime;
    private LocalDateTime updateTime;
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/mapper/CustomerUserLoginMapper.java
New file
@@ -0,0 +1,18 @@
package com.example.northglasserpclient.mapper;
import com.example.northglasserpclient.domain.po.CustomerUserLogin;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
@Mapper
public interface CustomerUserLoginMapper extends BaseMapper<CustomerUserLogin> {
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/mapper/sd/CustomerMapper.java
New file
@@ -0,0 +1,18 @@
package com.example.northglasserpclient.mapper.sd;
import com.example.northglasserpclient.domain.po.sd.Customer;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
@Mapper
public interface CustomerMapper extends BaseMapper<Customer> {
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/mapper/sd/OrderDetailMapper.java
New file
@@ -0,0 +1,18 @@
package com.example.northglasserpclient.mapper.sd;
import com.example.northglasserpclient.domain.po.sd.OrderDetail;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
@Mapper
public interface OrderDetailMapper extends BaseMapper<OrderDetail> {
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/mapper/sd/OrderGlassDetailMapper.java
New file
@@ -0,0 +1,18 @@
package com.example.northglasserpclient.mapper.sd;
import com.example.northglasserpclient.domain.po.sd.OrderGlassDetail;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
@Mapper
public interface OrderGlassDetailMapper extends BaseMapper<OrderGlassDetail> {
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/mapper/sd/OrderMapper.java
New file
@@ -0,0 +1,18 @@
package com.example.northglasserpclient.mapper.sd;
import com.example.northglasserpclient.domain.po.sd.Order;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
@Mapper
public interface OrderMapper extends BaseMapper<Order> {
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/mapper/sd/OrderProcessDetailMapper.java
New file
@@ -0,0 +1,21 @@
package com.example.northglasserpclient.mapper.sd;
import com.example.northglasserpclient.domain.po.sd.OrderProcessDetail;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import io.swagger.v3.oas.annotations.Parameter;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
@Mapper
public interface OrderProcessDetailMapper extends BaseMapper<OrderProcessDetail> {
    Integer getProductionQuantity(@Param("orderId") String orderId, @Param("productionId") String productionId);
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/service/ICustomerUserLoginService.java
New file
@@ -0,0 +1,19 @@
package com.example.northglasserpclient.service;
import com.example.northglasserpclient.domain.po.CustomerUserLogin;
import com.baomidou.mybatisplus.extension.service.IService;
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
public interface ICustomerUserLoginService extends IService<CustomerUserLogin> {
    CustomerUserLogin login(CustomerUserLogin customerUserLogin);
    Boolean register(CustomerUserLogin customerUserLogin);
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/service/impl/CustomerUserLoginServiceImpl.java
New file
@@ -0,0 +1,57 @@
package com.example.northglasserpclient.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.northglasserpclient.domain.po.CustomerUserLogin;
import com.example.northglasserpclient.domain.po.sd.Customer;
import com.example.northglasserpclient.mapper.CustomerUserLoginMapper;
import com.example.northglasserpclient.service.ICustomerUserLoginService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.northglasserpclient.service.sd.ICustomerService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
@Service
@RequiredArgsConstructor
public class CustomerUserLoginServiceImpl extends ServiceImpl<CustomerUserLoginMapper, CustomerUserLogin> implements ICustomerUserLoginService {
    private final ICustomerService customerService;
    @Override
    public CustomerUserLogin login(CustomerUserLogin customerUserLogin) {
        CustomerUserLogin user = this.baseMapper.selectOne(
                new QueryWrapper<CustomerUserLogin>().eq("login_name", customerUserLogin.getLoginName())
                        .eq("password", customerUserLogin.getPassword()));
        if(user != null){
            user.setPassword(null);
            Customer customer =  customerService.getById(user.getCustomerId());
            if (customer != null){
                user.setCustomerName(customer.getCustomerName());
            }
            return user;
        }
        return null;
    }
    @Override
    public Boolean register(CustomerUserLogin customerUserLogin) {
        CustomerUserLogin user = this.baseMapper.selectOne(
                new QueryWrapper<CustomerUserLogin>()
                        .eq("login_name", customerUserLogin.getLoginName())
                        .or()
                        .eq("customer_id", customerUserLogin.getCustomerId())
        );
        if (user == null) {
            save(customerUserLogin);
            return true;
        }
        return false;
    }
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/service/sd/ICustomerService.java
New file
@@ -0,0 +1,18 @@
package com.example.northglasserpclient.service.sd;
import com.example.northglasserpclient.domain.po.sd.Customer;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
public interface ICustomerService extends IService<Customer> {
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/service/sd/IOrderDetailService.java
New file
@@ -0,0 +1,16 @@
package com.example.northglasserpclient.service.sd;
import com.example.northglasserpclient.domain.po.sd.OrderDetail;
import com.baomidou.mybatisplus.extension.service.IService;
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
public interface IOrderDetailService extends IService<OrderDetail> {
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/service/sd/IOrderGlassDetailService.java
New file
@@ -0,0 +1,16 @@
package com.example.northglasserpclient.service.sd;
import com.example.northglasserpclient.domain.po.sd.OrderGlassDetail;
import com.baomidou.mybatisplus.extension.service.IService;
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
public interface IOrderGlassDetailService extends IService<OrderGlassDetail> {
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/service/sd/IOrderProcessDetailService.java
New file
@@ -0,0 +1,16 @@
package com.example.northglasserpclient.service.sd;
import com.example.northglasserpclient.domain.po.sd.OrderProcessDetail;
import com.baomidou.mybatisplus.extension.service.IService;
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
public interface IOrderProcessDetailService extends IService<OrderProcessDetail> {
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/service/sd/IOrderService.java
New file
@@ -0,0 +1,29 @@
package com.example.northglasserpclient.service.sd;
import com.example.northglasserpclient.domain.dto.sd.OrderDTO;
import com.example.northglasserpclient.domain.dto.sd.OrderDetailDTO;
import com.example.northglasserpclient.domain.po.sd.Order;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.northglasserpclient.domain.po.sd.OrderDetail;
import java.util.List;
import java.util.Map;
/**
 * <p>
 *  服务类
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
public interface IOrderService extends IService<Order> {
    List<OrderDTO> getUnfinishedOrder(String customId);
    List<OrderDetailDTO> getOrderProgress(String orderId, String productId);
    Map<String,Object> getFinishedOrder(Map<String,Object> object);
    List<OrderDetail> getOrderDetail(String orderId);
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/service/sd/impl/CustomerServiceImpl.java
New file
@@ -0,0 +1,23 @@
package com.example.northglasserpclient.service.sd.impl;
import com.example.northglasserpclient.domain.po.sd.Customer;
import com.example.northglasserpclient.mapper.sd.CustomerMapper;
import com.example.northglasserpclient.service.sd.ICustomerService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
@Service
public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, Customer> implements ICustomerService {
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/service/sd/impl/OrderDetailServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.example.northglasserpclient.service.sd.impl;
import com.example.northglasserpclient.domain.po.sd.OrderDetail;
import com.example.northglasserpclient.mapper.sd.OrderDetailMapper;
import com.example.northglasserpclient.service.sd.IOrderDetailService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
@Service
public class OrderDetailServiceImpl extends ServiceImpl<OrderDetailMapper, OrderDetail> implements IOrderDetailService {
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/service/sd/impl/OrderGlassDetailServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.example.northglasserpclient.service.sd.impl;
import com.example.northglasserpclient.domain.po.sd.OrderGlassDetail;
import com.example.northglasserpclient.mapper.sd.OrderGlassDetailMapper;
import com.example.northglasserpclient.service.sd.IOrderGlassDetailService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
@Service
public class OrderGlassDetailServiceImpl extends ServiceImpl<OrderGlassDetailMapper, OrderGlassDetail> implements IOrderGlassDetailService {
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/service/sd/impl/OrderProcessDetailServiceImpl.java
New file
@@ -0,0 +1,20 @@
package com.example.northglasserpclient.service.sd.impl;
import com.example.northglasserpclient.domain.po.sd.OrderProcessDetail;
import com.example.northglasserpclient.mapper.sd.OrderProcessDetailMapper;
import com.example.northglasserpclient.service.sd.IOrderProcessDetailService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
@Service
public class OrderProcessDetailServiceImpl extends ServiceImpl<OrderProcessDetailMapper, OrderProcessDetail> implements IOrderProcessDetailService {
}
northglass-erp-client/src/main/java/com/example/northglasserpclient/service/sd/impl/OrderServiceImpl.java
New file
@@ -0,0 +1,196 @@
package com.example.northglasserpclient.service.sd.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.northglasserpclient.domain.dto.sd.OrderDTO;
import com.example.northglasserpclient.domain.dto.sd.OrderDetailDTO;
import com.example.northglasserpclient.domain.po.sd.Order;
import com.example.northglasserpclient.domain.po.sd.OrderDetail;
import com.example.northglasserpclient.domain.po.sd.OrderGlassDetail;
import com.example.northglasserpclient.domain.po.sd.OrderProcessDetail;
import com.example.northglasserpclient.mapper.sd.OrderMapper;
import com.example.northglasserpclient.mapper.sd.OrderProcessDetailMapper;
import com.example.northglasserpclient.service.sd.IOrderDetailService;
import com.example.northglasserpclient.service.sd.IOrderGlassDetailService;
import com.example.northglasserpclient.service.sd.IOrderProcessDetailService;
import com.example.northglasserpclient.service.sd.IOrderService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.util.*;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author guo
 * @since 2025-09-18
 */
@Service
@RequiredArgsConstructor
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements IOrderService {
    private final IOrderDetailService orderDetailService;
    private final IOrderProcessDetailService orderProcessDetailService;
    private final IOrderGlassDetailService orderGlassDetailService;
    private final OrderProcessDetailMapper orderProcessDetailMapper;
    @Override
    public List<OrderDTO> getUnfinishedOrder(String customId) {
        List<Order> orders  =  list(
                new LambdaQueryWrapper<Order>()
                        .eq(Order::getCustomerId, customId)
                        .eq(Order::getCreateOrder, 2)
                        .ne(Order::getDelivery, 2)
                        .orderByDesc(Order::getId)
        );
        List<OrderDTO> ordersDTO = JSON.parseObject(
                JSON.toJSONString(orders),
                new TypeReference<List<OrderDTO>>(){}
        );
        //循环所有订单,获取订单按照产品分类进行订单明细 汇总查询
        ordersDTO.forEach(order -> {
            List<OrderDetail> details = orderDetailService.list(
                    new QueryWrapper<OrderDetail>()
                            .select("order_id,order_number,product_id,product_name," +
                                    "sum(quantity) as quantity," +
                                    "sum(warehouse_num+delivery_num) as warehouse_num,"+
                                    "sum(delivery_num) as delivery_num"
                            )
                            .eq("order_id", order.getOrderId())
                            .groupBy("product_id")
            );
            //list转换成DTO,返回前端显示
            List<OrderDetailDTO> detailsDTO = JSON.parseObject(
                    JSON.toJSONString(details),
                    new TypeReference<List<OrderDetailDTO>>(){}
            );
            //循环获取每个产品的完成数
            detailsDTO.forEach(detail -> {
                //获取产品生产订单号例:"NG25082706A"做条件,查询生产订单明细表,获取生产总数量
                OrderGlassDetail glassDetail = orderGlassDetailService
                        .getOne(new LambdaQueryWrapper<OrderGlassDetail>()
                                .eq(OrderGlassDetail::getOrderId, detail.getOrderId())
                                .eq(OrderGlassDetail::getOrderNumber, detail.getOrderNumber())
                                .orderByAsc(OrderGlassDetail::getId)
                                .last("limit 1")
                        );
                //给产品信息添加生产数量
                if(glassDetail != null){
                    Integer getReportingWorkNum = orderProcessDetailMapper
                            .getProductionQuantity(detail.getOrderId(),
                                    glassDetail.getProductionId()
                            );
                    detail.setQuantityByProduced(getReportingWorkNum);
                }else{
                    detail.setQuantityByProduced(0);
                }
            });
            Integer deliveryNum = detailsDTO.stream().map(e -> e.getDeliveryNum()).reduce(Integer::sum).get();
            order.setPercent(deliveryNum/Math.toIntExact(order.getQuantity())*100);
            order.setOrderDetails(detailsDTO);
        });
        return ordersDTO;
    }
    @Override
    public List<OrderDetailDTO> getOrderProgress(String orderId, String productId) {
        //获取此订单 产品所有订单明细
        List<OrderDetail> detailList = orderDetailService.list(
                new LambdaQueryWrapper<OrderDetail>()
                        .eq(OrderDetail::getOrderId, orderId)
                        .eq(OrderDetail::getProductId, productId)
        );
        List<OrderDetailDTO> detailListDTO = JSON.parseObject(
                JSON.toJSONString(detailList),
                new TypeReference<List<OrderDetailDTO>>(){}
        );
        //获取订单生产明细
        detailListDTO.forEach(detail1 -> {
            List<OrderProcessDetail> processDetailsGroupByProcessId = orderProcessDetailService.list(
                    new LambdaQueryWrapper<OrderProcessDetail>()
                            .eq(OrderProcessDetail::getOrderId, detail1.getOrderId())
                            .eq(OrderProcessDetail::getOrderNumber, detail1.getOrderNumber())
                            .groupBy(OrderProcessDetail::getProcessId)
                            .groupBy(OrderProcessDetail::getTechnologyNumber)
                            .orderByAsc(OrderProcessDetail::getOrderNumber)
                            .orderByAsc(OrderProcessDetail::getTechnologyNumber)
            );
            //定义一个map,key为生产工序号+工艺号,value为生产明细
            Map<String,List<OrderProcessDetail>> orderProcessDetailCount = new HashMap<>();
            processDetailsGroupByProcessId.forEach(detail2 -> {
                List<OrderProcessDetail> processDetails = orderProcessDetailService.list(
                        new LambdaQueryWrapper<OrderProcessDetail>()
                                .eq(OrderProcessDetail::getOrderId, detail2.getOrderId())
                                .eq(OrderProcessDetail::getOrderNumber, detail2.getOrderNumber())
                                .eq(OrderProcessDetail::getProcessId, detail2.getProcessId())
                                .eq(OrderProcessDetail::getTechnologyNumber, detail2.getTechnologyNumber())
                );
                orderProcessDetailCount.put(detail2.getProcessId()+"/"+detail2.getTechnologyNumber(),
                        processDetails);
            });
            //给订单明细添加生产明细
            detail1.setOrderProcessDetails(orderProcessDetailCount);
        });
        return detailListDTO;
    }
    @Override
    public Map<String,Object> getFinishedOrder(Map<String,Object> object) {
        List<String> dates = (List<String>) object.get("searchDate");
        String endDate = LocalDate.now().toString();
        String startDate = LocalDate.now().minusDays(180).toString();
        if(dates !=null && dates.size()==2){
            if(!dates.get(0).isEmpty()){
                startDate = dates.get(0);
            }
            if(!dates.get(1).isEmpty()){
                endDate = dates.get(1);
            }
        }
        //获取此客户所有完成的订单
        List<Order> orders  =  list(
                new LambdaQueryWrapper<Order>()
                        .eq(Order::getCustomerId, object.get("customerId"))
                        .eq(Order::getCreateOrder, 2)
                        .eq(Order::getDelivery, 2)
                        .between(Order::getCreateTime, startDate, endDate)
                        .orderByDesc(Order::getId)
        );
        List<OrderDTO> ordersDTO = JSON.parseObject(
                JSON.toJSONString(orders),
                new TypeReference<List<OrderDTO>>(){}
        );
        Map<String,Object> result = new HashMap<>();
        result.put("orders",ordersDTO);
        List<String> list = new ArrayList<>();
        list.add(startDate);
        list.add(endDate);
        result.put("searchDate",list);
        return result;
    }
    @Override
    public List<OrderDetail> getOrderDetail(String orderId) {
        return orderDetailService.list(new LambdaQueryWrapper<OrderDetail>().eq(OrderDetail::getOrderId,orderId));
    }
}
northglass-erp-client/src/main/resources/application.yml
New file
@@ -0,0 +1,25 @@
server:
  port: 8099
spring:
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher
  datasource:
    url: jdbc:mysql://localhost:3306/erp_customer_client?serverTimezone=GMT%2b8
    username: root
    password: beibo.123/
    driver-class-name: com.mysql.cj.jdbc.Driver
    # Druid 连接池的基本属性
    druid:
      initial-size: 5 # 连接池初始化时创建的连接数
      min-idle: 5 # 连接池中保持的最小空闲连接数
      max-active: 300 # 连接池中允许的最大活动连接数
      max-wait: 60000 # 获取连接时的最大等待时间,超过此时间将抛出异常
      time-between-eviction-runs-millis: 60000 # 两次检查连接的时间间隔
      min-evictable-idle-time-millis: 300000 # 连接最小空闲时间,超过这个时间的连接将被回收
      remove-abandoned: true # 是否自动回收超时连接
      remove-abandoned-timeout-millis: 1800 # 自动回收超时连接的等待时间
knife4j:
    enable: true
northglass-erp-client/src/main/resources/mapper/CustomerMapper.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.northglasserpclient.mapper.sd.CustomerMapper">
</mapper>
northglass-erp-client/src/main/resources/mapper/CustomerUserLoginMapper.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.northglasserpclient.mapper.CustomerUserLoginMapper">
</mapper>
northglass-erp-client/src/main/resources/mapper/OrderDetailMapper.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.northglasserpclient.mapper.sd.OrderDetailMapper">
</mapper>
northglass-erp-client/src/main/resources/mapper/OrderGlassDetailMapper.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.northglasserpclient.mapper.sd.OrderGlassDetailMapper">
</mapper>
northglass-erp-client/src/main/resources/mapper/OrderMapper.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.northglasserpclient.mapper.sd.OrderMapper">
</mapper>
northglass-erp-client/src/main/resources/mapper/OrderProcessDetailMapper.xml
New file
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.northglasserpclient.mapper.sd.OrderProcessDetailMapper">
    <select id="getProductionQuantity" resultType="integer">
       select sum(reporting_work_num)
       from
           (select max(reporting_work_num) as reporting_work_num
        from sd.order_process_detail
        where order_id = #{orderId}
        and substr(process_id,1,11) = #{productionId}
        group by order_number, process_id
        ) as a
    </select>
</mapper>