From 0c0784405c29535c1830788e3f4c434e8b88915c Mon Sep 17 00:00:00 2001 From: zhuyu <990951175@qq.com> Date: Sat, 11 Apr 2026 17:04:12 +0800 Subject: [PATCH] init --- .dockerignore | 45 + .gitignore | 4 + Dockerfile | 37 + index.html | 12 + nginx.conf | 47 + package-lock.json | 3136 +++++++++++++++++++++ package.json | 27 + src/App.tsx | 25 + src/api/auth.ts | 28 + src/api/http.ts | 37 + src/api/performance.ts | 122 + src/context/AuthContext.tsx | 55 + src/hooks/useBreakpoint.ts | 13 + src/img/logo.png | Bin 0 -> 35412 bytes src/img/logo2.png | Bin 0 -> 62139 bytes src/main.tsx | 10 + src/pages/Login.tsx | 179 ++ src/pages/employee/Dashboard.tsx | 108 + src/pages/employee/PerformanceForm.tsx | 427 +++ src/pages/employee/PerformanceHistory.tsx | 418 +++ src/pages/employee/performanceItems.ts | 33 + src/pages/gm/CompanyOverview.tsx | 175 ++ src/pages/gm/ConfigManagement.tsx | 217 ++ src/pages/gm/Dashboard.tsx | 107 + src/pages/manager/Dashboard.tsx | 114 + src/pages/manager/EmployeeManagement.tsx | 226 ++ src/pages/manager/PerformanceReview.tsx | 452 +++ src/pages/manager/SubordinateList.tsx | 266 ++ src/pages/manager/TeamStatistics.tsx | 160 ++ src/router/index.tsx | 84 + src/vite-env.d.ts | 9 + tmpclaude-37f2-cwd | 1 + tmpclaude-3b05-cwd | 1 + tmpclaude-4b38-cwd | 1 + tmpclaude-930e-cwd | 1 + tmpclaude-96c1-cwd | 1 + tmpclaude-9780-cwd | 1 + tmpclaude-a31e-cwd | 1 + tmpclaude-e993-cwd | 1 + tsconfig.json | 21 + tsconfig.node.json | 10 + vite.config.ts | 15 + 42 files changed, 6627 insertions(+) create mode 100644 .dockerignore create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 index.html create mode 100644 nginx.conf create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 src/App.tsx create mode 100644 src/api/auth.ts create mode 100644 src/api/http.ts create mode 100644 src/api/performance.ts create mode 100644 src/context/AuthContext.tsx create mode 100644 src/hooks/useBreakpoint.ts create mode 100644 src/img/logo.png create mode 100644 src/img/logo2.png create mode 100644 src/main.tsx create mode 100644 src/pages/Login.tsx create mode 100644 src/pages/employee/Dashboard.tsx create mode 100644 src/pages/employee/PerformanceForm.tsx create mode 100644 src/pages/employee/PerformanceHistory.tsx create mode 100644 src/pages/employee/performanceItems.ts create mode 100644 src/pages/gm/CompanyOverview.tsx create mode 100644 src/pages/gm/ConfigManagement.tsx create mode 100644 src/pages/gm/Dashboard.tsx create mode 100644 src/pages/manager/Dashboard.tsx create mode 100644 src/pages/manager/EmployeeManagement.tsx create mode 100644 src/pages/manager/PerformanceReview.tsx create mode 100644 src/pages/manager/SubordinateList.tsx create mode 100644 src/pages/manager/TeamStatistics.tsx create mode 100644 src/router/index.tsx create mode 100644 src/vite-env.d.ts create mode 100644 tmpclaude-37f2-cwd create mode 100644 tmpclaude-3b05-cwd create mode 100644 tmpclaude-4b38-cwd create mode 100644 tmpclaude-930e-cwd create mode 100644 tmpclaude-96c1-cwd create mode 100644 tmpclaude-9780-cwd create mode 100644 tmpclaude-a31e-cwd create mode 100644 tmpclaude-e993-cwd create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..22a1510 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,45 @@ +# 依赖目录 +node_modules +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# 构建输出 +dist +build + +# 环境文件 +.env +.env.local +.env.development +.env.production + +# 测试相关 +coverage +.nyc_output + +# 编辑器文件 +.vscode +.idea +*.swp +*.swo + +# 系统文件 +.DS_Store +Thumbs.db + +# Git +.git +.gitignore + +# Docker相关 +.dockerignore +Dockerfile +docker-compose.yml + +# 日志文件 +logs +*.log + +# 临时文件 +tmpclaude-* \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa0926a --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +node_modules/ +dist/ +.env +*.log diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..e5ec3f4 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,37 @@ +# 构建阶段 +FROM node:20-alpine AS builder + +# 设置工作目录 +WORKDIR /app + +# 复制package.json和package-lock.json +COPY package*.json ./ + +# 安装依赖 +RUN npm ci --only=production --ignore-scripts && \ + npm ci --only=development --ignore-scripts + +# 复制源代码 +COPY . . + +# 构建参数:API基础URL(默认为相对路径 /api,通过Nginx代理) +ARG VITE_API_BASE_URL=/api +ENV VITE_API_BASE_URL=${VITE_API_BASE_URL} + +# 构建应用 +RUN npm run build + +# 运行时阶段 - 使用Nginx提供静态文件 +FROM nginx:alpine AS runtime + +# 复制Nginx配置 +COPY nginx.conf /etc/nginx/conf.d/default.conf + +# 从构建阶段复制构建产物 +COPY --from=builder /app/dist /usr/share/nginx/html + +# 暴露端口 +EXPOSE 80 + +# 启动Nginx +CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..37ae696 --- /dev/null +++ b/index.html @@ -0,0 +1,12 @@ + + + + + + 员工月度绩效考核系统 + + +
+ + + diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..736a7e5 --- /dev/null +++ b/nginx.conf @@ -0,0 +1,47 @@ +server { + listen 80; + server_name localhost; + + # 根目录 + root /usr/share/nginx/html; + index index.html; + + # 启用gzip压缩 + gzip on; + gzip_vary on; + gzip_min_length 1024; + gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json; + + # 静态文件缓存 + location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|svg|eot)$ { + expires 1y; + add_header Cache-Control "public, immutable"; + try_files $uri =404; + } + + # SPA路由支持 - 所有非静态文件请求重定向到index.html + location / { + try_files $uri $uri/ /index.html; + } + + # 健康检查端点 + location /health { + access_log off; + return 200 'healthy\n'; + add_header Content-Type text/plain; + } + + # API代理到后端服务 + location /api { + proxy_pass http://backend:3001; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + # 超时设置 + proxy_connect_timeout 60s; + proxy_send_timeout 60s; + proxy_read_timeout 60s; + } +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..a71a7f8 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3136 @@ +{ + "name": "employee-performance-frontend", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "employee-performance-frontend", + "version": "1.0.0", + "dependencies": { + "@ant-design/icons": "^5.2.6", + "antd": "^5.12.0", + "axios": "^1.6.0", + "echarts": "^5.4.3", + "echarts-for-react": "^3.0.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-router-dom": "^6.21.0" + }, + "devDependencies": { + "@types/react": "^18.2.45", + "@types/react-dom": "^18.2.18", + "@vitejs/plugin-react": "^4.2.1", + "typescript": "^5.3.2", + "vite": "^5.0.8" + } + }, + "node_modules/@ant-design/colors": { + "version": "7.2.1", + "resolved": "https://registry.npmmirror.com/@ant-design/colors/-/colors-7.2.1.tgz", + "integrity": "sha512-lCHDcEzieu4GA3n8ELeZ5VQ8pKQAWcGGLRTQ50aQM2iqPpq2evTxER84jfdPvsPAtEcZ7m44NI45edFMo8oOYQ==", + "license": "MIT", + "dependencies": { + "@ant-design/fast-color": "^2.0.6" + } + }, + "node_modules/@ant-design/cssinjs": { + "version": "1.24.0", + "resolved": "https://registry.npmmirror.com/@ant-design/cssinjs/-/cssinjs-1.24.0.tgz", + "integrity": "sha512-K4cYrJBsgvL+IoozUXYjbT6LHHNt+19a9zkvpBPxLjFHas1UpPM2A5MlhROb0BT8N8WoavM5VsP9MeSeNK/3mg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.11.1", + "@emotion/hash": "^0.8.0", + "@emotion/unitless": "^0.7.5", + "classnames": "^2.3.1", + "csstype": "^3.1.3", + "rc-util": "^5.35.0", + "stylis": "^4.3.4" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/@ant-design/cssinjs-utils": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/@ant-design/cssinjs-utils/-/cssinjs-utils-1.1.3.tgz", + "integrity": "sha512-nOoQMLW1l+xR1Co8NFVYiP8pZp3VjIIzqV6D6ShYF2ljtdwWJn5WSsH+7kvCktXL/yhEtWURKOfH5Xz/gzlwsg==", + "license": "MIT", + "dependencies": { + "@ant-design/cssinjs": "^1.21.0", + "@babel/runtime": "^7.23.2", + "rc-util": "^5.38.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@ant-design/fast-color": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/@ant-design/fast-color/-/fast-color-2.0.6.tgz", + "integrity": "sha512-y2217gk4NqL35giHl72o6Zzqji9O7vHh9YmhUVkPtAOpoTCH4uWxo/pr4VE8t0+ChEPs0qo4eJRC5Q1eXWo3vA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.7" + }, + "engines": { + "node": ">=8.x" + } + }, + "node_modules/@ant-design/icons": { + "version": "5.6.1", + "resolved": "https://registry.npmmirror.com/@ant-design/icons/-/icons-5.6.1.tgz", + "integrity": "sha512-0/xS39c91WjPAZOWsvi1//zjx6kAp4kxWwctR6kuU6p133w8RU0D2dSCvZC19uQyharg/sAvYxGYWl01BbZZfg==", + "license": "MIT", + "dependencies": { + "@ant-design/colors": "^7.0.0", + "@ant-design/icons-svg": "^4.4.0", + "@babel/runtime": "^7.24.8", + "classnames": "^2.2.6", + "rc-util": "^5.31.1" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/@ant-design/icons-svg": { + "version": "4.4.2", + "resolved": "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz", + "integrity": "sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==", + "license": "MIT" + }, + "node_modules/@ant-design/react-slick": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/@ant-design/react-slick/-/react-slick-1.1.2.tgz", + "integrity": "sha512-EzlvzE6xQUBrZuuhSAFTdsr4P2bBBHGZwKFemEfq8gIGyIQCxalYfZW/T2ORbtQx5rU69o+WycP3exY/7T1hGA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.4", + "classnames": "^2.2.5", + "json2mq": "^0.2.0", + "resize-observer-polyfill": "^1.5.1", + "throttle-debounce": "^5.0.0" + }, + "peerDependencies": { + "react": ">=16.9.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@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.29.1", + "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@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-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@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-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-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "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.29.2", + "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "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-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "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/runtime": { + "version": "7.29.2", + "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmmirror.com/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==", + "license": "MIT" + }, + "node_modules/@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmmirror.com/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==", + "license": "MIT" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "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==", + "dev": true, + "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/@rc-component/async-validator": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/@rc-component/async-validator/-/async-validator-5.1.0.tgz", + "integrity": "sha512-n4HcR5siNUXRX23nDizbZBQPO0ZM/5oTtmKZ6/eqL0L2bo747cklFdZGRN2f+c9qWGICwDzrhW0H7tE9PptdcA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.4" + }, + "engines": { + "node": ">=14.x" + } + }, + "node_modules/@rc-component/color-picker": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/@rc-component/color-picker/-/color-picker-2.0.1.tgz", + "integrity": "sha512-WcZYwAThV/b2GISQ8F+7650r5ZZJ043E57aVBFkQ+kSY4C6wdofXgB0hBx+GPGpIU0Z81eETNoDUJMr7oy/P8Q==", + "license": "MIT", + "dependencies": { + "@ant-design/fast-color": "^2.0.6", + "@babel/runtime": "^7.23.6", + "classnames": "^2.2.6", + "rc-util": "^5.38.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/context": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@rc-component/context/-/context-1.4.0.tgz", + "integrity": "sha512-kFcNxg9oLRMoL3qki0OMxK+7g5mypjgaaJp/pkOis/6rVxma9nJBF/8kCIuTYHUQNr0ii7MxqE33wirPZLJQ2w==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "rc-util": "^5.27.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/mini-decimal": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/@rc-component/mini-decimal/-/mini-decimal-1.1.3.tgz", + "integrity": "sha512-bk/FJ09fLf+NLODMAFll6CfYrHPBioTedhW6lxDBuuWucJEqFUd4l/D/5JgIi3dina6sYahB8iuPAZTNz2pMxw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.0" + }, + "engines": { + "node": ">=8.x" + } + }, + "node_modules/@rc-component/mutate-observer": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/@rc-component/mutate-observer/-/mutate-observer-1.1.0.tgz", + "integrity": "sha512-QjrOsDXQusNwGZPf4/qRQasg7UFEj06XiCJ8iuiq/Io7CrHrgVi6Uuetw60WAMG1799v+aM8kyc+1L/GBbHSlw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.0", + "classnames": "^2.3.2", + "rc-util": "^5.24.4" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/portal": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/@rc-component/portal/-/portal-1.1.2.tgz", + "integrity": "sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.0", + "classnames": "^2.3.2", + "rc-util": "^5.24.4" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/qrcode": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/@rc-component/qrcode/-/qrcode-1.1.1.tgz", + "integrity": "sha512-LfLGNymzKdUPjXUbRP+xOhIWY4jQ+YMj5MmWAcgcAq1Ij8XP7tRmAXqyuv96XvLUBE/5cA8hLFl9eO1JQMujrA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.7" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/tour": { + "version": "1.15.1", + "resolved": "https://registry.npmmirror.com/@rc-component/tour/-/tour-1.15.1.tgz", + "integrity": "sha512-Tr2t7J1DKZUpfJuDZWHxyxWpfmj8EZrqSgyMZ+BCdvKZ6r1UDsfU46M/iWAAFBy961Ssfom2kv5f3UcjIL2CmQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.0", + "@rc-component/portal": "^1.0.0-9", + "@rc-component/trigger": "^2.0.0", + "classnames": "^2.3.2", + "rc-util": "^5.24.4" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/trigger": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/@rc-component/trigger/-/trigger-2.3.1.tgz", + "integrity": "sha512-ORENF39PeXTzM+gQEshuk460Z8N4+6DkjpxlpE7Q3gYy1iBpLrx0FOJz3h62ryrJZ/3zCAUIkT1Pb/8hHWpb3A==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.2", + "@rc-component/portal": "^1.1.0", + "classnames": "^2.3.2", + "rc-motion": "^2.0.0", + "rc-resize-observer": "^1.3.1", + "rc-util": "^5.44.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@remix-run/router": { + "version": "1.23.2", + "resolved": "https://registry.npmmirror.com/@remix-run/router/-/router-1.23.2.tgz", + "integrity": "sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmmirror.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz", + "integrity": "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.1.tgz", + "integrity": "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.1.tgz", + "integrity": "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.1.tgz", + "integrity": "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.1.tgz", + "integrity": "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.1.tgz", + "integrity": "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.1.tgz", + "integrity": "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.1.tgz", + "integrity": "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.1.tgz", + "integrity": "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.1.tgz", + "integrity": "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.1.tgz", + "integrity": "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.1.tgz", + "integrity": "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.1.tgz", + "integrity": "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.1.tgz", + "integrity": "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.1.tgz", + "integrity": "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.1.tgz", + "integrity": "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.1.tgz", + "integrity": "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.1.tgz", + "integrity": "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.1.tgz", + "integrity": "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.1.tgz", + "integrity": "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.1.tgz", + "integrity": "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.1.tgz", + "integrity": "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.1.tgz", + "integrity": "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.1.tgz", + "integrity": "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.1.tgz", + "integrity": "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmmirror.com/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmmirror.com/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmmirror.com/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "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/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmmirror.com/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.28", + "resolved": "https://registry.npmmirror.com/@types/react/-/react-18.3.28.tgz", + "integrity": "sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmmirror.com/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/antd": { + "version": "5.29.3", + "resolved": "https://registry.npmmirror.com/antd/-/antd-5.29.3.tgz", + "integrity": "sha512-3DdbGCa9tWAJGcCJ6rzR8EJFsv2CtyEbkVabZE14pfgUHfCicWCj0/QzQVLDYg8CPfQk9BH7fHCoTXHTy7MP/A==", + "license": "MIT", + "dependencies": { + "@ant-design/colors": "^7.2.1", + "@ant-design/cssinjs": "^1.23.0", + "@ant-design/cssinjs-utils": "^1.1.3", + "@ant-design/fast-color": "^2.0.6", + "@ant-design/icons": "^5.6.1", + "@ant-design/react-slick": "~1.1.2", + "@babel/runtime": "^7.26.0", + "@rc-component/color-picker": "~2.0.1", + "@rc-component/mutate-observer": "^1.1.0", + "@rc-component/qrcode": "~1.1.0", + "@rc-component/tour": "~1.15.1", + "@rc-component/trigger": "^2.3.0", + "classnames": "^2.5.1", + "copy-to-clipboard": "^3.3.3", + "dayjs": "^1.11.11", + "rc-cascader": "~3.34.0", + "rc-checkbox": "~3.5.0", + "rc-collapse": "~3.9.0", + "rc-dialog": "~9.6.0", + "rc-drawer": "~7.3.0", + "rc-dropdown": "~4.2.1", + "rc-field-form": "~2.7.1", + "rc-image": "~7.12.0", + "rc-input": "~1.8.0", + "rc-input-number": "~9.5.0", + "rc-mentions": "~2.20.0", + "rc-menu": "~9.16.1", + "rc-motion": "^2.9.5", + "rc-notification": "~5.6.4", + "rc-pagination": "~5.1.0", + "rc-picker": "~4.11.3", + "rc-progress": "~4.0.0", + "rc-rate": "~2.13.1", + "rc-resize-observer": "^1.4.3", + "rc-segmented": "~2.7.0", + "rc-select": "~14.16.8", + "rc-slider": "~11.1.9", + "rc-steps": "~6.0.1", + "rc-switch": "~4.1.0", + "rc-table": "~7.54.0", + "rc-tabs": "~15.7.0", + "rc-textarea": "~1.10.2", + "rc-tooltip": "~6.4.0", + "rc-tree": "~5.13.1", + "rc-tree-select": "~5.27.0", + "rc-upload": "~4.11.0", + "rc-util": "^5.44.4", + "scroll-into-view-if-needed": "^3.1.0", + "throttle-debounce": "^5.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ant-design" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "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.14.0", + "resolved": "https://registry.npmmirror.com/axios/-/axios-1.14.0.tgz", + "integrity": "sha512-3Y8yrqLSwjuzpXuZ0oIYZ/XGgLwUIBU3uLvbcpb0pidD9ctpShJd43KSlEEkVQg6DS0G9NKyzOvBfUtDKEyHvQ==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.16", + "resolved": "https://registry.npmmirror.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.16.tgz", + "integrity": "sha512-Lyf3aK28zpsD1yQMiiHD4RvVb6UdMoo8xzG2XzFIfR9luPzOpcBlAsT/qfB1XWS1bxWT+UtE4WmQgsp297FYOA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "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.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "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.30001786", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001786.tgz", + "integrity": "sha512-4oxTZEvqmLLrERwxO76yfKM7acZo310U+v4kqexI2TL1DkkUEMT8UijrxxcnVdxR3qkVf5awGRX+4Z6aPHVKrA==", + "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/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "license": "MIT" + }, + "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/compute-scroll-into-view": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-3.1.1.tgz", + "integrity": "sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==", + "license": "MIT" + }, + "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-to-clipboard": { + "version": "3.3.3", + "resolved": "https://registry.npmmirror.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", + "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", + "license": "MIT", + "dependencies": { + "toggle-selection": "^1.0.6" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/dayjs": { + "version": "1.11.20", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.20.tgz", + "integrity": "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==", + "license": "MIT", + "peer": true + }, + "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/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/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/echarts": { + "version": "5.6.0", + "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.6.0.tgz", + "integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "2.3.0", + "zrender": "5.6.1" + } + }, + "node_modules/echarts-for-react": { + "version": "3.0.6", + "resolved": "https://registry.npmmirror.com/echarts-for-react/-/echarts-for-react-3.0.6.tgz", + "integrity": "sha512-4zqLgTGWS3JvkQDXjzkR1k1CHRdpd6by0988TWMJgnvDytegWLbeP/VNZmMa+0VJx2eD7Y632bi2JquXDgiGJg==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "size-sensor": "^1.0.1" + }, + "peerDependencies": { + "echarts": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", + "react": "^15.0.0 || >=16.0.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.332", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.332.tgz", + "integrity": "sha512-7OOtytmh/rINMLwaFTbcMVvYXO3AUm029X0LcyfYk0B557RlPkdpTpnH9+htMlfu5dKwOmT0+Zs2Aw+lnn6TeQ==", + "dev": true, + "license": "ISC" + }, + "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.21.5", + "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "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/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "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.5", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "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/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/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "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/json2mq": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/json2mq/-/json2mq-0.2.0.tgz", + "integrity": "sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==", + "license": "MIT", + "dependencies": { + "string-convert": "^0.2.0" + } + }, + "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/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "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/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/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/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==", + "dev": true, + "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.37", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.37.tgz", + "integrity": "sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==", + "dev": true, + "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==", + "dev": true, + "license": "ISC" + }, + "node_modules/postcss": { + "version": "8.5.8", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/rc-cascader": { + "version": "3.34.0", + "resolved": "https://registry.npmmirror.com/rc-cascader/-/rc-cascader-3.34.0.tgz", + "integrity": "sha512-KpXypcvju9ptjW9FaN2NFcA2QH9E9LHKq169Y0eWtH4e/wHQ5Wh5qZakAgvb8EKZ736WZ3B0zLLOBsrsja5Dag==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.7", + "classnames": "^2.3.1", + "rc-select": "~14.16.2", + "rc-tree": "~5.13.0", + "rc-util": "^5.43.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-checkbox": { + "version": "3.5.0", + "resolved": "https://registry.npmmirror.com/rc-checkbox/-/rc-checkbox-3.5.0.tgz", + "integrity": "sha512-aOAQc3E98HteIIsSqm6Xk2FPKIER6+5vyEFMZfo73TqM+VVAIqOkHoPjgKLqSNtVLWScoaM7vY2ZrGEheI79yg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.3.2", + "rc-util": "^5.25.2" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-collapse": { + "version": "3.9.0", + "resolved": "https://registry.npmmirror.com/rc-collapse/-/rc-collapse-3.9.0.tgz", + "integrity": "sha512-swDdz4QZ4dFTo4RAUMLL50qP0EY62N2kvmk2We5xYdRwcRn8WcYtuetCJpwpaCbUfUt5+huLpVxhvmnK+PHrkA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.3.4", + "rc-util": "^5.27.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-dialog": { + "version": "9.6.0", + "resolved": "https://registry.npmmirror.com/rc-dialog/-/rc-dialog-9.6.0.tgz", + "integrity": "sha512-ApoVi9Z8PaCQg6FsUzS8yvBEQy0ZL2PkuvAgrmohPkN3okps5WZ5WQWPc1RNuiOKaAYv8B97ACdsFU5LizzCqg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/portal": "^1.0.0-8", + "classnames": "^2.2.6", + "rc-motion": "^2.3.0", + "rc-util": "^5.21.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-drawer": { + "version": "7.3.0", + "resolved": "https://registry.npmmirror.com/rc-drawer/-/rc-drawer-7.3.0.tgz", + "integrity": "sha512-DX6CIgiBWNpJIMGFO8BAISFkxiuKitoizooj4BDyee8/SnBn0zwO2FHrNDpqqepj0E/TFTDpmEBCyFuTgC7MOg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@rc-component/portal": "^1.1.1", + "classnames": "^2.2.6", + "rc-motion": "^2.6.1", + "rc-util": "^5.38.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-dropdown": { + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/rc-dropdown/-/rc-dropdown-4.2.1.tgz", + "integrity": "sha512-YDAlXsPv3I1n42dv1JpdM7wJ+gSUBfeyPK59ZpBD9jQhK9jVuxpjj3NmWQHOBceA1zEPVX84T2wbdb2SD0UjmA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@rc-component/trigger": "^2.0.0", + "classnames": "^2.2.6", + "rc-util": "^5.44.1" + }, + "peerDependencies": { + "react": ">=16.11.0", + "react-dom": ">=16.11.0" + } + }, + "node_modules/rc-field-form": { + "version": "2.7.1", + "resolved": "https://registry.npmmirror.com/rc-field-form/-/rc-field-form-2.7.1.tgz", + "integrity": "sha512-vKeSifSJ6HoLaAB+B8aq/Qgm8a3dyxROzCtKNCsBQgiverpc4kWDQihoUwzUj+zNWJOykwSY4dNX3QrGwtVb9A==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.0", + "@rc-component/async-validator": "^5.0.3", + "rc-util": "^5.32.2" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-image": { + "version": "7.12.0", + "resolved": "https://registry.npmmirror.com/rc-image/-/rc-image-7.12.0.tgz", + "integrity": "sha512-cZ3HTyyckPnNnUb9/DRqduqzLfrQRyi+CdHjdqgsyDpI3Ln5UX1kXnAhPBSJj9pVRzwRFgqkN7p9b6HBDjmu/Q==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.11.2", + "@rc-component/portal": "^1.0.2", + "classnames": "^2.2.6", + "rc-dialog": "~9.6.0", + "rc-motion": "^2.6.2", + "rc-util": "^5.34.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-input": { + "version": "1.8.0", + "resolved": "https://registry.npmmirror.com/rc-input/-/rc-input-1.8.0.tgz", + "integrity": "sha512-KXvaTbX+7ha8a/k+eg6SYRVERK0NddX8QX7a7AnRvUa/rEH0CNMlpcBzBkhI0wp2C8C4HlMoYl8TImSN+fuHKA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-util": "^5.18.1" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/rc-input-number": { + "version": "9.5.0", + "resolved": "https://registry.npmmirror.com/rc-input-number/-/rc-input-number-9.5.0.tgz", + "integrity": "sha512-bKaEvB5tHebUURAEXw35LDcnRZLq3x1k7GxfAqBMzmpHkDGzjAtnUL8y4y5N15rIFIg5IJgwr211jInl3cipag==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/mini-decimal": "^1.0.1", + "classnames": "^2.2.5", + "rc-input": "~1.8.0", + "rc-util": "^5.40.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-mentions": { + "version": "2.20.0", + "resolved": "https://registry.npmmirror.com/rc-mentions/-/rc-mentions-2.20.0.tgz", + "integrity": "sha512-w8HCMZEh3f0nR8ZEd466ATqmXFCMGMN5UFCzEUL0bM/nGw/wOS2GgRzKBcm19K++jDyuWCOJOdgcKGXU3fXfbQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.22.5", + "@rc-component/trigger": "^2.0.0", + "classnames": "^2.2.6", + "rc-input": "~1.8.0", + "rc-menu": "~9.16.0", + "rc-textarea": "~1.10.0", + "rc-util": "^5.34.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-menu": { + "version": "9.16.1", + "resolved": "https://registry.npmmirror.com/rc-menu/-/rc-menu-9.16.1.tgz", + "integrity": "sha512-ghHx6/6Dvp+fw8CJhDUHFHDJ84hJE3BXNCzSgLdmNiFErWSOaZNsihDAsKq9ByTALo/xkNIwtDFGIl6r+RPXBg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/trigger": "^2.0.0", + "classnames": "2.x", + "rc-motion": "^2.4.3", + "rc-overflow": "^1.3.1", + "rc-util": "^5.27.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-motion": { + "version": "2.9.5", + "resolved": "https://registry.npmmirror.com/rc-motion/-/rc-motion-2.9.5.tgz", + "integrity": "sha512-w+XTUrfh7ArbYEd2582uDrEhmBHwK1ZENJiSJVb7uRxdE7qJSYjbO2eksRXmndqyKqKoYPc9ClpPh5242mV1vA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-util": "^5.44.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-notification": { + "version": "5.6.4", + "resolved": "https://registry.npmmirror.com/rc-notification/-/rc-notification-5.6.4.tgz", + "integrity": "sha512-KcS4O6B4qzM3KH7lkwOB7ooLPZ4b6J+VMmQgT51VZCeEcmghdeR4IrMcFq0LG+RPdnbe/ArT086tGM8Snimgiw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.9.0", + "rc-util": "^5.20.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-overflow": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/rc-overflow/-/rc-overflow-1.5.0.tgz", + "integrity": "sha512-Lm/v9h0LymeUYJf0x39OveU52InkdRXqnn2aYXfWmo8WdOonIKB2kfau+GF0fWq6jPgtdO9yMqveGcK6aIhJmg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.37.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-pagination": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/rc-pagination/-/rc-pagination-5.1.0.tgz", + "integrity": "sha512-8416Yip/+eclTFdHXLKTxZvn70duYVGTvUUWbckCCZoIl3jagqke3GLsFrMs0bsQBikiYpZLD9206Ej4SOdOXQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.3.2", + "rc-util": "^5.38.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-picker": { + "version": "4.11.3", + "resolved": "https://registry.npmmirror.com/rc-picker/-/rc-picker-4.11.3.tgz", + "integrity": "sha512-MJ5teb7FlNE0NFHTncxXQ62Y5lytq6sh5nUw0iH8OkHL/TjARSEvSHpr940pWgjGANpjCwyMdvsEV55l5tYNSg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.7", + "@rc-component/trigger": "^2.0.0", + "classnames": "^2.2.1", + "rc-overflow": "^1.3.2", + "rc-resize-observer": "^1.4.0", + "rc-util": "^5.43.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "date-fns": ">= 2.x", + "dayjs": ">= 1.x", + "luxon": ">= 3.x", + "moment": ">= 2.x", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + }, + "peerDependenciesMeta": { + "date-fns": { + "optional": true + }, + "dayjs": { + "optional": true + }, + "luxon": { + "optional": true + }, + "moment": { + "optional": true + } + } + }, + "node_modules/rc-progress": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/rc-progress/-/rc-progress-4.0.0.tgz", + "integrity": "sha512-oofVMMafOCokIUIBnZLNcOZFsABaUw8PPrf1/y0ZBvKZNpOiu5h4AO9vv11Sw0p4Hb3D0yGWuEattcQGtNJ/aw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "rc-util": "^5.16.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-rate": { + "version": "2.13.1", + "resolved": "https://registry.npmmirror.com/rc-rate/-/rc-rate-2.13.1.tgz", + "integrity": "sha512-QUhQ9ivQ8Gy7mtMZPAjLbxBt5y9GRp65VcUyGUMF3N3fhiftivPHdpuDIaWIMOTEprAjZPC08bls1dQB+I1F2Q==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-util": "^5.0.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-resize-observer": { + "version": "1.4.3", + "resolved": "https://registry.npmmirror.com/rc-resize-observer/-/rc-resize-observer-1.4.3.tgz", + "integrity": "sha512-YZLjUbyIWox8E9i9C3Tm7ia+W7euPItNWSPX5sCcQTYbnwDb5uNpnLHQCG1f22oZWUhLw4Mv2tFmeWe68CDQRQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.20.7", + "classnames": "^2.2.1", + "rc-util": "^5.44.1", + "resize-observer-polyfill": "^1.5.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-segmented": { + "version": "2.7.1", + "resolved": "https://registry.npmmirror.com/rc-segmented/-/rc-segmented-2.7.1.tgz", + "integrity": "sha512-izj1Nw/Dw2Vb7EVr+D/E9lUTkBe+kKC+SAFSU9zqr7WV2W5Ktaa9Gc7cB2jTqgk8GROJayltaec+DBlYKc6d+g==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-motion": "^2.4.4", + "rc-util": "^5.17.0" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/rc-select": { + "version": "14.16.8", + "resolved": "https://registry.npmmirror.com/rc-select/-/rc-select-14.16.8.tgz", + "integrity": "sha512-NOV5BZa1wZrsdkKaiK7LHRuo5ZjZYMDxPP6/1+09+FB4KoNi8jcG1ZqLE3AVCxEsYMBe65OBx71wFoHRTP3LRg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/trigger": "^2.1.1", + "classnames": "2.x", + "rc-motion": "^2.0.1", + "rc-overflow": "^1.3.1", + "rc-util": "^5.16.1", + "rc-virtual-list": "^3.5.2" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/rc-slider": { + "version": "11.1.9", + "resolved": "https://registry.npmmirror.com/rc-slider/-/rc-slider-11.1.9.tgz", + "integrity": "sha512-h8IknhzSh3FEM9u8ivkskh+Ef4Yo4JRIY2nj7MrH6GQmrwV6mcpJf5/4KgH5JaVI1H3E52yCdpOlVyGZIeph5A==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-util": "^5.36.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-steps": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/rc-steps/-/rc-steps-6.0.1.tgz", + "integrity": "sha512-lKHL+Sny0SeHkQKKDJlAjV5oZ8DwCdS2hFhAkIjuQt1/pB81M0cA0ErVFdHq9+jmPmFw1vJB2F5NBzFXLJxV+g==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.16.7", + "classnames": "^2.2.3", + "rc-util": "^5.16.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-switch": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/rc-switch/-/rc-switch-4.1.0.tgz", + "integrity": "sha512-TI8ufP2Az9oEbvyCeVE4+90PDSljGyuwix3fV58p7HV2o4wBnVToEyomJRVyTaZeqNPAp+vqeo4Wnj5u0ZZQBg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.21.0", + "classnames": "^2.2.1", + "rc-util": "^5.30.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-table": { + "version": "7.54.0", + "resolved": "https://registry.npmmirror.com/rc-table/-/rc-table-7.54.0.tgz", + "integrity": "sha512-/wDTkki6wBTjwylwAGjpLKYklKo9YgjZwAU77+7ME5mBoS32Q4nAwoqhA2lSge6fobLW3Tap6uc5xfwaL2p0Sw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/context": "^1.4.0", + "classnames": "^2.2.5", + "rc-resize-observer": "^1.1.0", + "rc-util": "^5.44.3", + "rc-virtual-list": "^3.14.2" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-tabs": { + "version": "15.7.0", + "resolved": "https://registry.npmmirror.com/rc-tabs/-/rc-tabs-15.7.0.tgz", + "integrity": "sha512-ZepiE+6fmozYdWf/9gVp7k56PKHB1YYoDsKeQA1CBlJ/POIhjkcYiv0AGP0w2Jhzftd3AVvZP/K+V+Lpi2ankA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.11.2", + "classnames": "2.x", + "rc-dropdown": "~4.2.0", + "rc-menu": "~9.16.0", + "rc-motion": "^2.6.2", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.34.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-textarea": { + "version": "1.10.2", + "resolved": "https://registry.npmmirror.com/rc-textarea/-/rc-textarea-1.10.2.tgz", + "integrity": "sha512-HfaeXiaSlpiSp0I/pvWpecFEHpVysZ9tpDLNkxQbMvMz6gsr7aVZ7FpWP9kt4t7DB+jJXesYS0us1uPZnlRnwQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1", + "rc-input": "~1.8.0", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.27.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-tooltip": { + "version": "6.4.0", + "resolved": "https://registry.npmmirror.com/rc-tooltip/-/rc-tooltip-6.4.0.tgz", + "integrity": "sha512-kqyivim5cp8I5RkHmpsp1Nn/Wk+1oeloMv9c7LXNgDxUpGm+RbXJGL+OPvDlcRnx9DBeOe4wyOIl4OKUERyH1g==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.11.2", + "@rc-component/trigger": "^2.0.0", + "classnames": "^2.3.1", + "rc-util": "^5.44.3" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-tree": { + "version": "5.13.1", + "resolved": "https://registry.npmmirror.com/rc-tree/-/rc-tree-5.13.1.tgz", + "integrity": "sha512-FNhIefhftobCdUJshO7M8uZTA9F4OPGVXqGfZkkD/5soDeOhwO06T/aKTrg0WD8gRg/pyfq+ql3aMymLHCTC4A==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.0.1", + "rc-util": "^5.16.1", + "rc-virtual-list": "^3.5.1" + }, + "engines": { + "node": ">=10.x" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/rc-tree-select": { + "version": "5.27.0", + "resolved": "https://registry.npmmirror.com/rc-tree-select/-/rc-tree-select-5.27.0.tgz", + "integrity": "sha512-2qTBTzwIT7LRI1o7zLyrCzmo5tQanmyGbSaGTIf7sYimCklAToVVfpMC6OAldSKolcnjorBYPNSKQqJmN3TCww==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.7", + "classnames": "2.x", + "rc-select": "~14.16.2", + "rc-tree": "~5.13.0", + "rc-util": "^5.43.0" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/rc-upload": { + "version": "4.11.0", + "resolved": "https://registry.npmmirror.com/rc-upload/-/rc-upload-4.11.0.tgz", + "integrity": "sha512-ZUyT//2JAehfHzjWowqROcwYJKnZkIUGWaTE/VogVrepSl7AFNbQf4+zGfX4zl9Vrj/Jm8scLO0R6UlPDKK4wA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "classnames": "^2.2.5", + "rc-util": "^5.2.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-util": { + "version": "5.44.4", + "resolved": "https://registry.npmmirror.com/rc-util/-/rc-util-5.44.4.tgz", + "integrity": "sha512-resueRJzmHG9Q6rI/DfK6Kdv9/Lfls05vzMs1Sk3M2P+3cJa+MakaZyWY8IPfehVuhPJFKrIY1IK4GqbiaiY5w==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "react-is": "^18.2.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-virtual-list": { + "version": "3.19.2", + "resolved": "https://registry.npmmirror.com/rc-virtual-list/-/rc-virtual-list-3.19.2.tgz", + "integrity": "sha512-Ys6NcjwGkuwkeaWBDqfI3xWuZ7rDiQXlH1o2zLfFzATfEgXcqpk8CkgMfbJD81McqjcJVez25a3kPxCR807evA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.20.0", + "classnames": "^2.2.6", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.36.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmmirror.com/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmmirror.com/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmmirror.com/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmmirror.com/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "6.30.3", + "resolved": "https://registry.npmmirror.com/react-router/-/react-router-6.30.3.tgz", + "integrity": "sha512-XRnlbKMTmktBkjCLE8/XcZFlnHvr2Ltdr1eJX4idL55/9BbORzyZEaIkBFDhFGCEWBBItsVrDxwx3gnisMitdw==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.23.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.30.3", + "resolved": "https://registry.npmmirror.com/react-router-dom/-/react-router-dom-6.30.3.tgz", + "integrity": "sha512-pxPcv1AczD4vso7G4Z3TKcvlxK7g7TNt3/FNGMhfqyntocvYKj+GCatfigGDjbLozC4baguJ0ReCigoDJXb0ag==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.23.2", + "react-router": "6.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", + "license": "MIT" + }, + "node_modules/rollup": { + "version": "4.60.1", + "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.60.1.tgz", + "integrity": "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==", + "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.60.1", + "@rollup/rollup-android-arm64": "4.60.1", + "@rollup/rollup-darwin-arm64": "4.60.1", + "@rollup/rollup-darwin-x64": "4.60.1", + "@rollup/rollup-freebsd-arm64": "4.60.1", + "@rollup/rollup-freebsd-x64": "4.60.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.1", + "@rollup/rollup-linux-arm-musleabihf": "4.60.1", + "@rollup/rollup-linux-arm64-gnu": "4.60.1", + "@rollup/rollup-linux-arm64-musl": "4.60.1", + "@rollup/rollup-linux-loong64-gnu": "4.60.1", + "@rollup/rollup-linux-loong64-musl": "4.60.1", + "@rollup/rollup-linux-ppc64-gnu": "4.60.1", + "@rollup/rollup-linux-ppc64-musl": "4.60.1", + "@rollup/rollup-linux-riscv64-gnu": "4.60.1", + "@rollup/rollup-linux-riscv64-musl": "4.60.1", + "@rollup/rollup-linux-s390x-gnu": "4.60.1", + "@rollup/rollup-linux-x64-gnu": "4.60.1", + "@rollup/rollup-linux-x64-musl": "4.60.1", + "@rollup/rollup-openbsd-x64": "4.60.1", + "@rollup/rollup-openharmony-arm64": "4.60.1", + "@rollup/rollup-win32-arm64-msvc": "4.60.1", + "@rollup/rollup-win32-ia32-msvc": "4.60.1", + "@rollup/rollup-win32-x64-gnu": "4.60.1", + "@rollup/rollup-win32-x64-msvc": "4.60.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmmirror.com/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/scroll-into-view-if-needed": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-3.1.0.tgz", + "integrity": "sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==", + "license": "MIT", + "dependencies": { + "compute-scroll-into-view": "^3.0.2" + } + }, + "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/size-sensor": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/size-sensor/-/size-sensor-1.0.3.tgz", + "integrity": "sha512-+k9mJ2/rQMiRmQUcjn+qznch260leIXY8r4FyYKKyRBO/s5UoeMAHGkCJyE1R/4wrIhTJONfyloY55SkE7ve3A==", + "license": "ISC" + }, + "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==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-convert": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/string-convert/-/string-convert-0.2.1.tgz", + "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==", + "license": "MIT" + }, + "node_modules/stylis": { + "version": "4.3.6", + "resolved": "https://registry.npmmirror.com/stylis/-/stylis-4.3.6.tgz", + "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==", + "license": "MIT" + }, + "node_modules/throttle-debounce": { + "version": "5.0.2", + "resolved": "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-5.0.2.tgz", + "integrity": "sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==", + "license": "MIT", + "engines": { + "node": ">=12.22" + } + }, + "node_modules/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==", + "license": "MIT" + }, + "node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "license": "0BSD" + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "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": "5.4.21", + "resolved": "https://registry.npmmirror.com/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "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/zrender": { + "version": "5.6.1", + "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.1.tgz", + "integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==", + "license": "BSD-3-Clause", + "dependencies": { + "tslib": "2.3.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..670bdff --- /dev/null +++ b/package.json @@ -0,0 +1,27 @@ +{ + "name": "employee-performance-frontend", + "version": "1.0.0", + "private": true, + "dependencies": { + "@ant-design/icons": "^5.2.6", + "antd": "^5.12.0", + "axios": "^1.6.0", + "echarts": "^5.4.3", + "echarts-for-react": "^3.0.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-router-dom": "^6.21.0" + }, + "devDependencies": { + "@types/react": "^18.2.45", + "@types/react-dom": "^18.2.18", + "@vitejs/plugin-react": "^4.2.1", + "typescript": "^5.3.2", + "vite": "^5.0.8" + }, + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "preview": "vite preview" + } +} diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000..6ebe182 --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,25 @@ +import React from 'react'; +import { BrowserRouter } from 'react-router-dom'; +import { ConfigProvider } from 'antd'; +import zhCN from 'antd/locale/zh_CN'; +import dayjs from 'dayjs'; +import 'dayjs/locale/zh-cn'; +import { AuthProvider } from './context/AuthContext'; +import AppRouter from './router'; + +// 配置 dayjs 使用中文 +dayjs.locale('zh-cn'); + +const App: React.FC = () => { + return ( + + + + + + + + ); +}; + +export default App; diff --git a/src/api/auth.ts b/src/api/auth.ts new file mode 100644 index 0000000..e549edc --- /dev/null +++ b/src/api/auth.ts @@ -0,0 +1,28 @@ +import http from './http'; +import type { UserInfo } from '../context/AuthContext'; + +interface LoginResponse { + token: string; + userInfo: UserInfo; +} + +interface ApiResponse { + code: number; + message: string; + data: T; +} + +export const authApi = { + login: async ( + username: string, + password: string, + role: string + ): Promise => { + const { data } = await http.post>('/api/user/login', { + username, + password, + role, + }); + return data.data; // 返回 data.data,因为后端包装了一层 + }, +}; diff --git a/src/api/http.ts b/src/api/http.ts new file mode 100644 index 0000000..7d473e9 --- /dev/null +++ b/src/api/http.ts @@ -0,0 +1,37 @@ +import axios from 'axios'; + +const TOKEN_KEY = 'auth_token'; + +const http = axios.create({ + baseURL: import.meta.env.VITE_API_BASE_URL || 'https://pe-system-d.gogodao.net', + timeout: 15000, +}); + +// Request interceptor — attach token automatically +http.interceptors.request.use( + (config) => { + const token = localStorage.getItem(TOKEN_KEY); + if (token) { + config.headers.Authorization = `Bearer ${token}`; + } + return config; + }, + (error) => Promise.reject(error) +); + +// Response interceptor — handle 401/403 +http.interceptors.response.use( + (response) => response, + (error) => { + const status = error?.response?.status; + if (status === 401 || status === 403) { + // Clear stored credentials and redirect to login + localStorage.removeItem(TOKEN_KEY); + localStorage.removeItem('auth_user'); + window.location.href = '/login'; + } + return Promise.reject(error); + } +); + +export default http; diff --git a/src/api/performance.ts b/src/api/performance.ts new file mode 100644 index 0000000..e3a98cd --- /dev/null +++ b/src/api/performance.ts @@ -0,0 +1,122 @@ +import http from './http'; + +export interface AttendanceData { + leave: number; + late: number; + absent: number; + lackCard: number; + remark?: string; +} + +export interface PerformanceItemDTO { + itemName: string; + weight: number; + userContent: string; + selfScore: number; + evidence?: string; +} + +export interface PerformanceSubmitDTO { + month: string; + status: 'draft' | 'submitted'; + workSummary: string; + attendance: AttendanceData; + performanceItems: PerformanceItemDTO[]; +} + +export interface AIScoreItem { + itemName: string; + weight: number; + aiScore: number; + scoreExplanation: string; +} + +export interface AIResult { + aiId: number; + perfId: number; + aiScoreDetail: AIScoreItem[]; + aiTotalScore: number; + aiProblems: string[]; + aiSuggestions: string[]; + createTime: string; +} + +export interface PerformanceRecord { + perfId: number; + userId: number; + month: string; + status: 'draft' | 'submitted' | 'under_review' | 'completed' | 'rejected'; + selfScore?: number; + aiScore?: number; + managerScore?: number; + totalScore?: number; + level?: 'excellent' | 'qualified' | 'need_motivation' | 'unqualified'; + rewardPunish?: string; + workSummary?: string; + submitTime?: string; + reviewTime?: string; + reviewOpinion?: string; + performanceItems?: PerformanceItemDetail[]; + attendance?: AttendanceData & { attendanceScore?: number }; + aiResult?: AIResult; +} + +export interface PerformanceItemDetail extends PerformanceItemDTO { + itemId: number; + itemCategory: 'business' | 'comprehensive'; + aiScore?: number; + aiExplanation?: string; + managerScore?: number; + managerExplanation?: string; +} + +export interface PageResult { + list: T[]; + total: number; + page: number; + pageSize: number; +} + +export const performanceApi = { + submit: async (data: PerformanceSubmitDTO): Promise<{ perfId: number }> => { + const { data: res } = await http.post('/api/performance/submit', data); + return res.data; // 解包 data.data + }, + + getMyList: async (params?: { + month?: string; + page?: number; + pageSize?: number; + }): Promise> => { + const { data } = await http.get('/api/performance/employee/get', { params }); + // 后端返回格式: { code, message, data: { total, records } } + // 转换为前端期望的格式: { list, total, page, pageSize } + return { + list: data.data.records || [], + total: data.data.total || 0, + page: params?.page || 1, + pageSize: params?.pageSize || 10, + }; + }, + + getDetail: async (perfId: number): Promise => { + const { data } = await http.get(`/api/performance/employee/get`, { + params: { perfId }, + }); + return data.data; + }, + + requestModification: async (perfId: number, reason: string): Promise => { + await http.post('/api/performance/request-modification', { perfId, reason }); + }, + + // 查询 AI 评分是否完成 + checkAIResult: async (perfId: number): Promise<{ done: boolean; aiScore?: number }> => { + const { data } = await http.get('/api/performance/employee/get', { params: { perfId } }); + const rec = data.data; + return { + done: rec?.aiScore != null, + aiScore: rec?.aiScore, + }; + }, +}; diff --git a/src/context/AuthContext.tsx b/src/context/AuthContext.tsx new file mode 100644 index 0000000..2a7197a --- /dev/null +++ b/src/context/AuthContext.tsx @@ -0,0 +1,55 @@ +import React, { createContext, useContext, useState, useCallback } from 'react'; + +export interface UserInfo { + userId: number; + name: string; + role: 'employee' | 'manager' | 'generalManager'; + department: string; + position: string; +} + +interface AuthContextValue { + token: string | null; + userInfo: UserInfo | null; + login: (token: string, userInfo: UserInfo) => void; + logout: () => void; +} + +const AuthContext = createContext(null); + +const TOKEN_KEY = 'auth_token'; +const USER_KEY = 'auth_user'; + +export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => { + const [token, setToken] = useState(() => localStorage.getItem(TOKEN_KEY)); + const [userInfo, setUserInfo] = useState(() => { + const stored = localStorage.getItem(USER_KEY); + return stored ? JSON.parse(stored) : null; + }); + + const login = useCallback((newToken: string, newUserInfo: UserInfo) => { + localStorage.setItem(TOKEN_KEY, newToken); + localStorage.setItem(USER_KEY, JSON.stringify(newUserInfo)); + setToken(newToken); + setUserInfo(newUserInfo); + }, []); + + const logout = useCallback(() => { + localStorage.removeItem(TOKEN_KEY); + localStorage.removeItem(USER_KEY); + setToken(null); + setUserInfo(null); + }, []); + + return ( + + {children} + + ); +}; + +export const useAuth = (): AuthContextValue => { + const ctx = useContext(AuthContext); + if (!ctx) throw new Error('useAuth must be used within AuthProvider'); + return ctx; +}; diff --git a/src/hooks/useBreakpoint.ts b/src/hooks/useBreakpoint.ts new file mode 100644 index 0000000..d9a208e --- /dev/null +++ b/src/hooks/useBreakpoint.ts @@ -0,0 +1,13 @@ +import { useState, useEffect } from 'react'; + +export function useIsMobile(): boolean { + const [isMobile, setIsMobile] = useState(() => window.innerWidth < 768); + + useEffect(() => { + const handler = () => setIsMobile(window.innerWidth < 768); + window.addEventListener('resize', handler); + return () => window.removeEventListener('resize', handler); + }, []); + + return isMobile; +} diff --git a/src/img/logo.png b/src/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d1869d21e7ec9ec111b825d655168c3ddcf2d054 GIT binary patch literal 35412 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 P0#41;$kMPJfsXta5m~%r literal 0 HcmV?d00001 diff --git a/src/img/logo2.png b/src/img/logo2.png new file mode 100644 index 0000000000000000000000000000000000000000..3d6f4beb14a043791a52f1fef3c305f2511ee88e GIT binary patch literal 62139 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

!UHVT#qw>}PxQO$sUZ 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 literal 0 HcmV?d00001 diff --git a/src/main.tsx b/src/main.tsx new file mode 100644 index 0000000..7da97d7 --- /dev/null +++ b/src/main.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import App from './App'; +import 'antd/dist/reset.css'; + +ReactDOM.createRoot(document.getElementById('root')!).render( + + + +); diff --git a/src/pages/Login.tsx b/src/pages/Login.tsx new file mode 100644 index 0000000..3b7c5f1 --- /dev/null +++ b/src/pages/Login.tsx @@ -0,0 +1,179 @@ +import React, { useState } from 'react'; +import { Form, Input, Button, Select, Alert, Typography } from 'antd'; +import { UserOutlined, LockOutlined, TeamOutlined } from '@ant-design/icons'; +import { useNavigate } from 'react-router-dom'; +import { useAuth } from '../context/AuthContext'; +import { authApi } from '../api/auth'; +import logo from '../img/logo2.png'; + +const { Option } = Select; +const { Text } = Typography; + +interface LoginFormValues { + username: string; + password: string; + role: 'employee' | 'manager' | 'generalManager'; +} + +const roleRedirect: Record = { + employee: '/employee', + manager: '/manager', + generalManager: '/gm', +}; + +const LoginPage: React.FC = () => { + const { login } = useAuth(); + const navigate = useNavigate(); + const [loading, setLoading] = useState(false); + const [alertInfo, setAlertInfo] = useState<{ type: 'success' | 'error'; msg: string } | null>(null); + + const onFinish = async (values: LoginFormValues) => { + setLoading(true); + setAlertInfo(null); + try { + const { token, userInfo } = await authApi.login(values.username, values.password, values.role); + login(token, userInfo); + setAlertInfo({ type: 'success', msg: `欢迎回来,${userInfo.name}!正在跳转...` }); + setTimeout(() => navigate(roleRedirect[userInfo.role], { replace: true }), 800); + } catch (err: any) { + setAlertInfo({ type: 'error', msg: err?.response?.data?.message || '登录失败,请检查用户名、密码和角色' }); + } finally { + setLoading(false); + } + }; + + return ( +

+ {/* 光晕装饰 */} +
+
+
+ + {/* 双层纹理叠层:点阵 + 斜线 */} +
+ +
+ {/* Logo + 标题 */} +
+ logo +
员工月度绩效考核系统
+
+ + {/* 提示信息 */} + {alertInfo && ( + + )} + + + name="login" + onFinish={onFinish} + initialValues={{ role: 'employee' }} + size="large" + > + + } + placeholder="用户名(工号)" + style={styles.input} + /> + + + + } + placeholder="密码" + style={styles.input} + /> + + + + + + + + + + + +
+ 优一科技 © 2026 +
+
+
+ ); +}; + +const styles: Record = { + bg: { + minHeight: '100vh', + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + background: 'linear-gradient(135deg, #f0f7ff 0%, #e8f0fe 35%, #fce4ec 70%, #f3e5f5 100%)', + position: 'relative', + overflow: 'hidden', + padding: 16, + }, + circle: { + position: 'absolute', + borderRadius: '50%', + background: 'radial-gradient(circle, rgba(99,102,241,0.12) 0%, transparent 70%)', + filter: 'blur(40px)', + }, + card: { + width: '100%', + maxWidth: 400, + background: '#ffffff', + borderRadius: 20, + padding: '36px 32px 28px', + boxShadow: '0 4px 24px rgba(99,102,241,0.12), 0 1px 4px rgba(0,0,0,0.06)', + position: 'relative', + zIndex: 1, + border: '1px solid rgba(99,102,241,0.08)', + }, + input: { + borderRadius: 8, + height: 44, + }, + btn: { + height: 46, + borderRadius: 10, + fontSize: 16, + fontWeight: 600, + background: 'linear-gradient(90deg, #6366f1, #8b5cf6)', + border: 'none', + letterSpacing: 2, + }, +}; + +export default LoginPage; diff --git a/src/pages/employee/Dashboard.tsx b/src/pages/employee/Dashboard.tsx new file mode 100644 index 0000000..c3e9d18 --- /dev/null +++ b/src/pages/employee/Dashboard.tsx @@ -0,0 +1,108 @@ +import React from 'react'; +import { Routes, Route, Link, useLocation, useNavigate } from 'react-router-dom'; +import { Layout, Menu, Typography, Button } from 'antd'; +import { HomeOutlined, FormOutlined, HistoryOutlined, LogoutOutlined } from '@ant-design/icons'; +import PerformanceForm from './PerformanceForm'; +import PerformanceHistory from './PerformanceHistory'; +import { useIsMobile } from '../../hooks/useBreakpoint'; +import { useAuth } from '../../context/AuthContext'; +import logo from '../../img/logo.png'; + +const { Header, Content, Sider } = Layout; +const { Title } = Typography; + +const menuItems = [ + { key: '/employee', icon: , label: 首页, mobileLabel: '首页' }, + { key: '/employee/form', icon: , label: 绩效填报, mobileLabel: '填报' }, + { key: '/employee/history', icon: , label: 绩效历史, mobileLabel: '历史' }, +]; + +const EmployeeDashboard: React.FC = () => { + const location = useLocation(); + const navigate = useNavigate(); + const isMobile = useIsMobile(); + const { logout } = useAuth(); + + const selectedKey = menuItems.find(item => + item.key !== '/employee' ? location.pathname.startsWith(item.key) : location.pathname === item.key + )?.key ?? '/employee'; + + const handleLogout = () => { + logout(); + navigate('/login'); + }; + + return ( + +
+
+ logo + {!isMobile && 绩效考核系统} +
+ +
+ + + {!isMobile && ( + + ({ key, icon, label }))} + /> + + )} + + + + } /> + } /> + } /> + + + + + + {/* 移动端底部导航 */} + {isMobile && ( +
+ {menuItems.map(item => ( + + {item.icon} + {item.mobileLabel} + + ))} +
+ )} + + ); +}; + +const HomePage: React.FC = () => ( +
+ 欢迎使用员工绩效考核系统 + 请从菜单选择功能: +
    +
  • 绩效填报:填写月度绩效考核内容
  • +
  • 绩效历史:查看历史绩效记录和详情
  • +
+
+); + +export default EmployeeDashboard; diff --git a/src/pages/employee/PerformanceForm.tsx b/src/pages/employee/PerformanceForm.tsx new file mode 100644 index 0000000..16560c5 --- /dev/null +++ b/src/pages/employee/PerformanceForm.tsx @@ -0,0 +1,427 @@ +import React, { useState, useEffect, useRef } from 'react'; +import { + Form, + Input, + InputNumber, + Button, + Card, + Divider, + Space, + Typography, + message, + Tag, + Row, + Col, + Alert, + DatePicker, + Result, + Spin, +} from 'antd'; +import { SaveOutlined, SendOutlined, LoadingOutlined, CheckCircleOutlined } from '@ant-design/icons'; +import { useAuth } from '../../context/AuthContext'; +import { performanceApi, PerformanceSubmitDTO } from '../../api/performance'; +import { ALL_PERFORMANCE_ITEMS } from './performanceItems'; +import dayjs, { Dayjs } from 'dayjs'; + +const { Title, Text } = Typography; +const { TextArea } = Input; + +interface FormValues { + assessmentMonth: Dayjs; + workSummary: string; + leave: number; + late: number; + absent: number; + lackCard: number; + attendanceRemark?: string; + items: Array<{ + userContent: string; + selfScore: number; + evidence?: string; + }>; +} + +const PerformanceForm: React.FC = () => { + const { userInfo } = useAuth(); + const [form] = Form.useForm(); + const [submitting, setSubmitting] = useState(false); + const [saving, setSaving] = useState(false); + const [submitted, setSubmitted] = useState(false); + const [aiWaiting, setAiWaiting] = useState(false); + const [aiDone, setAiDone] = useState(false); + const pollTimerRef = useRef | null>(null); + const isMobile = typeof window !== 'undefined' && window.innerWidth < 768; + + // 清理轮询定时器 + useEffect(() => { + return () => { + if (pollTimerRef.current) clearInterval(pollTimerRef.current); + }; + }, []); + + // 轮询 AI 结果 + const pollAIResult = (perfId: number) => { + setAiWaiting(true); + let attempts = 0; + const maxAttempts = 40; // 最多轮询 40 次(约 2 分钟) + + pollTimerRef.current = setInterval(async () => { + attempts++; + try { + const result = await performanceApi.checkAIResult(perfId); + if (result.done) { + clearInterval(pollTimerRef.current!); + setAiWaiting(false); + setAiDone(true); + } else if (attempts >= maxAttempts) { + clearInterval(pollTimerRef.current!); + setAiWaiting(false); + setAiDone(true); // 超时也跳转,让用户去历史记录查看 + } + } catch { + // 忽略轮询错误,继续重试 + } + }, 3000); // 每 3 秒轮询一次 + }; + + // 获取本月作为默认值 + const getPreviousMonth = (): Dayjs => { + return dayjs(); + }; + + const buildDTO = (values: FormValues, status: 'draft' | 'submitted'): PerformanceSubmitDTO => ({ + month: values.assessmentMonth.format('YYYY-MM'), + status, + workSummary: values.workSummary || '', + attendance: { + leave: values.leave ?? 0, + late: values.late ?? 0, + absent: values.absent ?? 0, + lackCard: values.lackCard ?? 0, + remark: values.attendanceRemark, + }, + performanceItems: ALL_PERFORMANCE_ITEMS.map((item, idx) => ({ + itemName: item.itemName, + weight: item.weight, + userContent: values.items?.[idx]?.userContent || '', + selfScore: values.items?.[idx]?.selfScore ?? 0, + evidence: values.items?.[idx]?.evidence, + })), + }); + + const handleSave = async () => { + const values = form.getFieldsValue(); + setSaving(true); + try { + await performanceApi.submit(buildDTO(values, 'draft')); + message.success('草稿已暂存'); + } catch (err: any) { + message.error(err?.response?.data?.message || '暂存失败,请重试'); + } finally { + setSaving(false); + } + }; + + const handleSubmit = async (values: FormValues) => { + setSubmitting(true); + try { + const result = await performanceApi.submit(buildDTO(values, 'submitted')); + setSubmitted(true); + form.resetFields(); + // 提交成功后开始轮询 AI 结果 + if (result?.perfId) { + pollAIResult(result.perfId); + } + } catch (err: any) { + message.error(err?.response?.data?.message || '提交失败,请重试'); + } finally { + setSubmitting(false); + } + }; + + if (submitted) { + // AI 分析完成 + if (aiDone) { + return ( + } + title="AI 分析完成!" + subTitle="绩效已提交,AI 评分已生成,可前往历史记录查看详情。" + style={{ margin: 24 }} + extra={ + + + + } + /> + ); + } + + // AI 分析中 + if (aiWaiting) { + return ( +
+ } /> +
+ AI 正在分析中,请稍等! + + 系统正在对您的绩效数据进行 AI 智能评分,通常需要 30 秒至 1 分钟... + +
+
+ ); + } + + // 提交成功但还未开始轮询(过渡状态) + return ( + setSubmitted(false)}>重新填报 + } + /> + ); + } + + return ( +
+ 绩效填报 + + {/* 基础信息 */} + + {isMobile ? ( + +
姓名:{userInfo?.name}
+
部门:{userInfo?.department}
+
岗位:{userInfo?.position}
+
+ ) : ( + + 姓名:{userInfo?.name} + 部门:{userInfo?.department} + 岗位:{userInfo?.position} + + )} +
+ +
({ selfScore: 0 })), + }} + > + {/* 考核月份选择 */} + + + { + // 不能选择未来的月份 + return current && current > dayjs().endOf('month'); + }} + /> + + + {/* 考核指标 */} + + + + {/* 业务素质 */} + + 业务素质考评 <Tag color="blue">占总分 70%</Tag> + + {ALL_PERFORMANCE_ITEMS.filter(i => i.category === 'business').map((item, idx) => ( + + {item.itemName} + 权重 {item.weight} 分 + + } + > + + {item.description} + + + + +