From 96ccf6430a15fb733a5239a87b58ffb90ab95aa8 Mon Sep 17 00:00:00 2001 From: yuantao Date: Thu, 15 Jan 2026 10:38:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 193 +++ .playwright-mcp/display-all-fields.png | Bin 0 -> 112818 bytes .playwright-mcp/display-grid-layout.png | Bin 0 -> 109169 bytes IFLOW.md | 0 admin/.gitignore | 24 + admin/index.html | 13 + admin/package-lock.json | 1740 +++++++++++++++++++++++ admin/package.json | 21 + admin/public/vite.svg | 1 + admin/src/App.vue | 1286 +++++++++++++++++ admin/src/counter.ts | 9 + admin/src/main.js | 23 + admin/src/main.ts | 24 + admin/src/store/index.js | 491 +++++++ admin/src/style.css | 97 ++ admin/src/styles/components.css | 249 ++++ admin/src/styles/element-plus.css | 567 ++++++++ admin/src/styles/global.css | 322 +++++ admin/src/styles/variables.css | 163 +++ admin/src/typescript.svg | 1 + admin/tsconfig.json | 26 + admin/vite.config.js | 13 + display/.gitignore | 24 + display/index.html | 13 + display/package-lock.json | 1739 ++++++++++++++++++++++ display/package.json | 20 + display/public/vite.svg | 1 + display/src/App.vue | 451 ++++++ display/src/counter.ts | 9 + display/src/main.js | 9 + display/src/main.ts | 24 + display/src/store/index.js | 153 ++ display/src/style.css | 30 + display/src/styles/variables.css | 93 ++ display/src/typescript.svg | 1 + display/tsconfig.json | 26 + display/vite.config.js | 13 + index.html | 13 + package-lock.json | 1463 +++++++++++++++++++ package.json | 1 + src/App.vue | 20 + src/main.js | 24 + src/router/index.js | 44 + src/store/index.js | 490 +++++++ src/styles/element-plus.css | 340 +++++ src/styles/global.css | 241 ++++ src/styles/variables.css | 82 ++ src/views/.gitkeep | 1 + src/views/Admin.vue | 1324 +++++++++++++++++ src/views/AdminLayout.vue | 412 ++++++ src/views/Display.vue | 454 ++++++ src/views/admin/Participants.vue | 452 ++++++ src/views/admin/Prizes.vue | 163 +++ src/views/admin/Rounds.vue | 199 +++ src/views/admin/Winners.vue | 99 ++ test_participants.csv | 6 + utils/indexedDB.js | 145 ++ vite.config.js | 14 + 58 files changed, 13856 insertions(+) create mode 100644 .gitignore create mode 100644 .playwright-mcp/display-all-fields.png create mode 100644 .playwright-mcp/display-grid-layout.png create mode 100644 IFLOW.md create mode 100644 admin/.gitignore create mode 100644 admin/index.html create mode 100644 admin/package-lock.json create mode 100644 admin/package.json create mode 100644 admin/public/vite.svg create mode 100644 admin/src/App.vue create mode 100644 admin/src/counter.ts create mode 100644 admin/src/main.js create mode 100644 admin/src/main.ts create mode 100644 admin/src/store/index.js create mode 100644 admin/src/style.css create mode 100644 admin/src/styles/components.css create mode 100644 admin/src/styles/element-plus.css create mode 100644 admin/src/styles/global.css create mode 100644 admin/src/styles/variables.css create mode 100644 admin/src/typescript.svg create mode 100644 admin/tsconfig.json create mode 100644 admin/vite.config.js create mode 100644 display/.gitignore create mode 100644 display/index.html create mode 100644 display/package-lock.json create mode 100644 display/package.json create mode 100644 display/public/vite.svg create mode 100644 display/src/App.vue create mode 100644 display/src/counter.ts create mode 100644 display/src/main.js create mode 100644 display/src/main.ts create mode 100644 display/src/store/index.js create mode 100644 display/src/style.css create mode 100644 display/src/styles/variables.css create mode 100644 display/src/typescript.svg create mode 100644 display/tsconfig.json create mode 100644 display/vite.config.js create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 src/App.vue create mode 100644 src/main.js create mode 100644 src/router/index.js create mode 100644 src/store/index.js create mode 100644 src/styles/element-plus.css create mode 100644 src/styles/global.css create mode 100644 src/styles/variables.css create mode 100644 src/views/.gitkeep create mode 100644 src/views/Admin.vue create mode 100644 src/views/AdminLayout.vue create mode 100644 src/views/Display.vue create mode 100644 src/views/admin/Participants.vue create mode 100644 src/views/admin/Prizes.vue create mode 100644 src/views/admin/Rounds.vue create mode 100644 src/views/admin/Winners.vue create mode 100644 test_participants.csv create mode 100644 utils/indexedDB.js create mode 100644 vite.config.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a1a3098 --- /dev/null +++ b/.gitignore @@ -0,0 +1,193 @@ +# File created using '.gitignore Generator' for Visual Studio Code: https://bit.ly/vscode-gig +# Created by https://www.toptal.com/developers/gitignore/api/windows,visualstudiocode,node +# Edit at https://www.toptal.com/developers/gitignore?templates=windows,visualstudiocode,node + +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +### Node Patch ### +# Serverless Webpack directories +.webpack/ + +# Optional stylelint cache + +# SvelteKit build / generate output +.svelte-kit + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets + +# Local History for Visual Studio Code +.history/ + +# Built Visual Studio Code Extensions +*.vsix + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history +.ionide + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# End of https://www.toptal.com/developers/gitignore/api/windows,visualstudiocode,node + +# Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option) + diff --git a/.playwright-mcp/display-all-fields.png b/.playwright-mcp/display-all-fields.png new file mode 100644 index 0000000000000000000000000000000000000000..89e7f948f70ae692bd23e748e2dc2b8bf0e05ebf GIT binary patch literal 112818 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�eFSR_O;&?BK+*L&;?@8 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 literal 0 HcmV?d00001 diff --git a/.playwright-mcp/display-grid-layout.png b/.playwright-mcp/display-grid-layout.png new file mode 100644 index 0000000000000000000000000000000000000000..4d3adad4a9e7cd3e85a9810423ff04eeb961ffd0 GIT binary patch literal 109169 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�arX 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 m`2YV8vt + + + + + + admin + + +
+ + + diff --git a/admin/package-lock.json b/admin/package-lock.json new file mode 100644 index 0000000..7968a23 --- /dev/null +++ b/admin/package-lock.json @@ -0,0 +1,1740 @@ +{ + "name": "admin", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "admin", + "version": "0.0.0", + "dependencies": { + "@element-plus/icons-vue": "^2.3.2", + "element-plus": "^2.13.1", + "pinia": "^3.0.4" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^6.0.3", + "typescript": "~5.9.3", + "vite": "^7.2.4" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz", + "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/types": "^7.28.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", + "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/@element-plus/icons-vue": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz", + "integrity": "sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", + "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT", + "peer": true + }, + "node_modules/@popperjs/core": { + "name": "@sxzz/popperjs-es", + "version": "2.11.7", + "resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz", + "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz", + "integrity": "sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.1.tgz", + "integrity": "sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.1.tgz", + "integrity": "sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.1.tgz", + "integrity": "sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.1.tgz", + "integrity": "sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.1.tgz", + "integrity": "sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.1.tgz", + "integrity": "sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.1.tgz", + "integrity": "sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.1.tgz", + "integrity": "sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.1.tgz", + "integrity": "sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.1.tgz", + "integrity": "sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.1.tgz", + "integrity": "sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.1.tgz", + "integrity": "sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.1.tgz", + "integrity": "sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.1.tgz", + "integrity": "sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.1.tgz", + "integrity": "sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.1.tgz", + "integrity": "sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.1.tgz", + "integrity": "sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.1.tgz", + "integrity": "sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.1.tgz", + "integrity": "sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.1.tgz", + "integrity": "sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.1.tgz", + "integrity": "sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.1.tgz", + "integrity": "sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.1.tgz", + "integrity": "sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.1.tgz", + "integrity": "sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.1.tgz", + "integrity": "sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA==", + "license": "MIT" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "license": "MIT" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.3.tgz", + "integrity": "sha512-TlGPkLFLVOY3T7fZrwdvKpjprR3s4fxRln0ORDo1VQ7HHyxJwTlrjKU3kpVWTlaAjIEuCTokmjkZnr8Tpc925w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "1.0.0-beta.53" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.26.tgz", + "integrity": "sha512-vXyI5GMfuoBCnv5ucIT7jhHKl55Y477yxP6fc4eUswjP8FG3FFVFd41eNDArR+Uk3QKn2Z85NavjaxLxOC19/w==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/parser": "^7.28.5", + "@vue/shared": "3.5.26", + "entities": "^7.0.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.26.tgz", + "integrity": "sha512-y1Tcd3eXs834QjswshSilCBnKGeQjQXB6PqFn/1nxcQw4pmG42G8lwz+FZPAZAby6gZeHSt/8LMPfZ4Rb+Bd/A==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/compiler-core": "3.5.26", + "@vue/shared": "3.5.26" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.26.tgz", + "integrity": "sha512-egp69qDTSEZcf4bGOSsprUr4xI73wfrY5oRs6GSgXFTiHrWj4Y3X5Ydtip9QMqiCMCPVwLglB9GBxXtTadJ3mA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/parser": "^7.28.5", + "@vue/compiler-core": "3.5.26", + "@vue/compiler-dom": "3.5.26", + "@vue/compiler-ssr": "3.5.26", + "@vue/shared": "3.5.26", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.26.tgz", + "integrity": "sha512-lZT9/Y0nSIRUPVvapFJEVDbEXruZh2IYHMk2zTtEgJSlP5gVOqeWXH54xDKAaFS4rTnDeDBQUYDtxKyoW9FwDw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/compiler-dom": "3.5.26", + "@vue/shared": "3.5.26" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.7.9", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.9.tgz", + "integrity": "sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.9" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.9", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.9.tgz", + "integrity": "sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.9", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.9", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.9.tgz", + "integrity": "sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==", + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.26.tgz", + "integrity": "sha512-9EnYB1/DIiUYYnzlnUBgwU32NNvLp/nhxLXeWRhHUEeWNTn1ECxX8aGO7RTXeX6PPcxe3LLuNBFoJbV4QZ+CFQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/shared": "3.5.26" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.26.tgz", + "integrity": "sha512-xJWM9KH1kd201w5DvMDOwDHYhrdPTrAatn56oB/LRG4plEQeZRQLw0Bpwih9KYoqmzaxF0OKSn6swzYi84e1/Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/reactivity": "3.5.26", + "@vue/shared": "3.5.26" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.26.tgz", + "integrity": "sha512-XLLd/+4sPC2ZkN/6+V4O4gjJu6kSDbHAChvsyWgm1oGbdSO3efvGYnm25yCjtFm/K7rrSDvSfPDgN1pHgS4VNQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/reactivity": "3.5.26", + "@vue/runtime-core": "3.5.26", + "@vue/shared": "3.5.26", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.26.tgz", + "integrity": "sha512-TYKLXmrwWKSodyVuO1WAubucd+1XlLg4set0YoV+Hu8Lo79mp/YMwWV5mC5FgtsDxX3qo1ONrxFaTP1OQgy1uA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/compiler-ssr": "3.5.26", + "@vue/shared": "3.5.26" + }, + "peerDependencies": { + "vue": "3.5.26" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.26.tgz", + "integrity": "sha512-7Z6/y3uFI5PRoKeorTOSXKcDj0MSasfNNltcslbFrPpcw6aXRUALq4IfJlaTRspiWIUOEZbrpM+iQGmCOiWe4A==", + "license": "MIT", + "peer": true + }, + "node_modules/@vueuse/core": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.11.1.tgz", + "integrity": "sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "10.11.1", + "@vueuse/shared": "10.11.1", + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.11.1.tgz", + "integrity": "sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.11.1.tgz", + "integrity": "sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==", + "license": "MIT", + "dependencies": { + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==", + "license": "MIT" + }, + "node_modules/birpc": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz", + "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/copy-anything": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-4.0.5.tgz", + "integrity": "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==", + "license": "MIT", + "dependencies": { + "is-what": "^5.2.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT", + "peer": true + }, + "node_modules/dayjs": { + "version": "1.11.19", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz", + "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==", + "license": "MIT" + }, + "node_modules/element-plus": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.13.1.tgz", + "integrity": "sha512-eG4BDBGdAsUGN6URH1PixzZb0ngdapLivIk1meghS1uEueLvQ3aljSKrCt5x6sYb6mUk8eGtzTQFgsPmLavQcA==", + "license": "MIT", + "dependencies": { + "@ctrl/tinycolor": "^3.4.1", + "@element-plus/icons-vue": "^2.3.2", + "@floating-ui/dom": "^1.0.1", + "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", + "@types/lodash": "^4.17.20", + "@types/lodash-es": "^4.17.12", + "@vueuse/core": "^10.11.0", + "async-validator": "^4.2.5", + "dayjs": "^1.11.19", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "lodash-unified": "^1.0.3", + "memoize-one": "^6.0.0", + "normalize-wheel-es": "^1.2.0" + }, + "peerDependencies": { + "vue": "^3.3.0" + } + }, + "node_modules/entities": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.0.tgz", + "integrity": "sha512-FDWG5cmEYf2Z00IkYRhbFrwIwvdFKH07uV8dvNy0omp/Qb1xcyCWp2UDtcwJF4QZZvk0sLudP6/hAu42TaqVhQ==", + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT", + "peer": true + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT" + }, + "node_modules/is-what": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-5.5.0.tgz", + "integrity": "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.17.22", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.22.tgz", + "integrity": "sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q==", + "license": "MIT" + }, + "node_modules/lodash-unified": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.3.tgz", + "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", + "license": "MIT", + "peerDependencies": { + "@types/lodash-es": "*", + "lodash": "*", + "lodash-es": "*" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "license": "MIT" + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize-wheel-es": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", + "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==", + "license": "BSD-3-Clause" + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pinia": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.4.tgz", + "integrity": "sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^7.7.7" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.5.0", + "vue": "^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, + "node_modules/rollup": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.1.tgz", + "integrity": "sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==", + "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.55.1", + "@rollup/rollup-android-arm64": "4.55.1", + "@rollup/rollup-darwin-arm64": "4.55.1", + "@rollup/rollup-darwin-x64": "4.55.1", + "@rollup/rollup-freebsd-arm64": "4.55.1", + "@rollup/rollup-freebsd-x64": "4.55.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.55.1", + "@rollup/rollup-linux-arm-musleabihf": "4.55.1", + "@rollup/rollup-linux-arm64-gnu": "4.55.1", + "@rollup/rollup-linux-arm64-musl": "4.55.1", + "@rollup/rollup-linux-loong64-gnu": "4.55.1", + "@rollup/rollup-linux-loong64-musl": "4.55.1", + "@rollup/rollup-linux-ppc64-gnu": "4.55.1", + "@rollup/rollup-linux-ppc64-musl": "4.55.1", + "@rollup/rollup-linux-riscv64-gnu": "4.55.1", + "@rollup/rollup-linux-riscv64-musl": "4.55.1", + "@rollup/rollup-linux-s390x-gnu": "4.55.1", + "@rollup/rollup-linux-x64-gnu": "4.55.1", + "@rollup/rollup-linux-x64-musl": "4.55.1", + "@rollup/rollup-openbsd-x64": "4.55.1", + "@rollup/rollup-openharmony-arm64": "4.55.1", + "@rollup/rollup-win32-arm64-msvc": "4.55.1", + "@rollup/rollup-win32-ia32-msvc": "4.55.1", + "@rollup/rollup-win32-x64-gnu": "4.55.1", + "@rollup/rollup-win32-x64-msvc": "4.55.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/superjson": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.6.tgz", + "integrity": "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==", + "license": "MIT", + "dependencies": { + "copy-anything": "^4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/vite": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.26.tgz", + "integrity": "sha512-SJ/NTccVyAoNUJmkM9KUqPcYlY+u8OVL1X5EW9RIs3ch5H2uERxyyIUI4MRxVCSOiEcupX9xNGde1tL9ZKpimA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/compiler-dom": "3.5.26", + "@vue/compiler-sfc": "3.5.26", + "@vue/runtime-dom": "3.5.26", + "@vue/server-renderer": "3.5.26", + "@vue/shared": "3.5.26" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + } + } +} diff --git a/admin/package.json b/admin/package.json new file mode 100644 index 0000000..b94baf0 --- /dev/null +++ b/admin/package.json @@ -0,0 +1,21 @@ +{ + "name": "admin", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "preview": "vite preview" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^6.0.3", + "typescript": "~5.9.3", + "vite": "^7.2.4" + }, + "dependencies": { + "@element-plus/icons-vue": "^2.3.2", + "element-plus": "^2.13.1", + "pinia": "^3.0.4" + } +} diff --git a/admin/public/vite.svg b/admin/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/admin/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/src/App.vue b/admin/src/App.vue new file mode 100644 index 0000000..65c3a53 --- /dev/null +++ b/admin/src/App.vue @@ -0,0 +1,1286 @@ + + + + + \ No newline at end of file diff --git a/admin/src/counter.ts b/admin/src/counter.ts new file mode 100644 index 0000000..09e5afd --- /dev/null +++ b/admin/src/counter.ts @@ -0,0 +1,9 @@ +export function setupCounter(element: HTMLButtonElement) { + let counter = 0 + const setCounter = (count: number) => { + counter = count + element.innerHTML = `count is ${counter}` + } + element.addEventListener('click', () => setCounter(counter + 1)) + setCounter(0) +} diff --git a/admin/src/main.js b/admin/src/main.js new file mode 100644 index 0000000..14e0233 --- /dev/null +++ b/admin/src/main.js @@ -0,0 +1,23 @@ +import { createApp } from 'vue' +import { createPinia } from 'pinia' +import ElementPlus from 'element-plus' +import 'element-plus/dist/index.css' +import * as ElementPlusIconsVue from '@element-plus/icons-vue' +import App from './App.vue' + +// 引入全局样式 +import './styles/variables.css' +import './styles/global.css' +import './styles/components.css' +import './styles/element-plus.css' + +const app = createApp(App) +app.use(createPinia()) +app.use(ElementPlus) + +// 注册所有图标 +for (const [key, component] of Object.entries(ElementPlusIconsVue)) { + app.component(key, component) +} + +app.mount('#app') \ No newline at end of file diff --git a/admin/src/main.ts b/admin/src/main.ts new file mode 100644 index 0000000..6396b50 --- /dev/null +++ b/admin/src/main.ts @@ -0,0 +1,24 @@ +import './style.css' +import typescriptLogo from './typescript.svg' +import viteLogo from '/vite.svg' +import { setupCounter } from './counter.ts' + +document.querySelector('#app')!.innerHTML = ` +
+` + +setupCounter(document.querySelector('#counter')!) diff --git a/admin/src/store/index.js b/admin/src/store/index.js new file mode 100644 index 0000000..a4f89fc --- /dev/null +++ b/admin/src/store/index.js @@ -0,0 +1,491 @@ +import { defineStore } from 'pinia' +import { ref, watch } from 'vue' +import { indexedDB } from '@utils/indexedDB' + +export const useLotteryStore = defineStore('lottery', () => { + // 状态 + const fields = ref([]) + const participants = ref([]) + const prizes = ref([]) + const rounds = ref([]) + const winners = ref([]) + const isRolling = ref(false) + const currentRound = ref(null) + const displayMode = ref('scroll') + const backgroundImage = ref('') + const isInitialized = ref(false) + + // 初始化 - 从IndexedDB加载数据 + const initialize = async () => { + if (isInitialized.value) return + + try { + const data = await indexedDB.getAll() + + fields.value = data.lottery_fields || [] + participants.value = data.lottery_participants || [] + prizes.value = data.lottery_prizes || [] + rounds.value = data.lottery_rounds || [] + winners.value = data.lottery_winners || [] + isRolling.value = data.lottery_isRolling === 'true' + currentRound.value = data.lottery_currentRound || null + displayMode.value = data.lottery_displayMode || 'scroll' + backgroundImage.value = data.lottery_backgroundImage || '' + + isInitialized.value = true + } catch (error) { + console.error('Failed to initialize from IndexedDB:', error) + // 使用默认值 + fields.value = [{key: 'name', label: '姓名', required: true}] + isInitialized.value = true + } + } + + // 保存单个数据到IndexedDB + const saveData = async (key, value) => { + try { + console.log(`Saving ${key} to IndexedDB...`) + // 深拷贝数据以避免Vue响应式包装器 + const clonedValue = JSON.parse(JSON.stringify(value)) + await indexedDB.set(key, clonedValue) + + // 触发localStorage事件通知其他标签页 + localStorage.setItem('lottery_data_changed', Date.now().toString()) + + console.log(`Successfully saved ${key}`) + } catch (error) { + console.error(`Failed to save ${key} to IndexedDB:`, error) + throw error + } + } + + // ============ 字段管理 ============ + const addField = async (field) => { + const newField = { + id: Date.now(), + key: field.key, + label: field.label, + required: field.required || false + } + fields.value.push(newField) + await saveData('lottery_fields', fields.value) + } + + const updateField = async (field) => { + const index = fields.value.findIndex(f => f.id === field.id) + if (index > -1) { + fields.value[index] = field + await saveData('lottery_fields', fields.value) + } + } + + const removeField = async (id) => { + const index = fields.value.findIndex(f => f.id === id) + if (index > -1) { + fields.value.splice(index, 1) + await saveData('lottery_fields', fields.value) + } + } + + // ============ 参与者管理 ============ + const addParticipant = async (data) => { + const participant = { id: Date.now(), ...data } + participants.value.push(participant) + await saveData('lottery_participants', participants.value) + } + + const updateParticipant = async (id, data) => { + const index = participants.value.findIndex(p => p.id === id) + if (index > -1) { + participants.value[index] = { ...participants.value[index], ...data } + await saveData('lottery_participants', participants.value) + } + } + + const removeParticipant = async (id) => { + const index = participants.value.findIndex(p => p.id === id) + if (index > -1) { + participants.value.splice(index, 1) + await saveData('lottery_participants', participants.value) + } + } + + const clearParticipants = async () => { + participants.value = [] + await saveData('lottery_participants', participants.value) + } + + const importParticipantsFromFile = (file) => { + return new Promise((resolve, reject) => { + const reader = new FileReader() + reader.onload = async (e) => { + try { + const content = e.target.result + const lines = content.split('\n').map(l => l.trim()).filter(l => l) + + // 检测是否是CSV格式(包含逗号) + const isCSV = lines.some(line => line.includes(',')) + + if (isCSV) { + // CSV格式导入 + const headers = lines[0].split(',').map(h => h.trim()) + const data = [] + + // 自动添加缺失的字段到配置 + headers.forEach(header => { + if (!fields.value.some(f => f.key === header)) { + fields.value.push({ + id: Date.now() + Math.random(), + key: header, + label: header, + required: false + }) + } + }) + + // 保存更新后的字段配置 + await saveData('lottery_fields', fields.value) + + for (let i = 1; i < lines.length; i++) { + const values = lines[i].split(',').map(v => v.trim()) + const participant = { id: Date.now() + i } + headers.forEach((header, index) => { + participant[header] = values[index] || '' + }) + data.push(participant) + } + + participants.value.push(...data) + await saveData('lottery_participants', participants.value) + resolve(data.length) + } else { + // 简单文本格式导入(每行一个姓名) + const data = lines.map(line => ({ + id: Date.now() + Math.random(), + name: line + })) + participants.value.push(...data) + await saveData('lottery_participants', participants.value) + resolve(data.length) + } + } catch (error) { + reject(error) + } + } + reader.onerror = () => reject(new Error('文件读取失败')) + reader.readAsText(file) + }) + } + + // ============ 奖品管理 ============ + const addPrize = async (prize) => { + prizes.value.push({ + id: Date.now(), + name: prize.name, + stock: parseInt(prize.stock) || 0, + used: 0 + }) + await saveData('lottery_prizes', prizes.value) + } + + const updatePrize = async (prize) => { + const index = prizes.value.findIndex(p => p.id === prize.id) + if (index > -1) { + prizes.value[index] = prize + await saveData('lottery_prizes', prizes.value) + } + } + + const removePrize = async (id) => { + const index = prizes.value.findIndex(p => p.id === id) + if (index > -1) { + prizes.value.splice(index, 1) + await saveData('lottery_prizes', prizes.value) + } + } + + const getPrizeAvailable = (prizeId) => { + const prize = prizes.value.find(p => p.id === prizeId) + return prize ? prize.stock - prize.used : 0 + } + + // ============ 轮次管理 ============ + const addRound = async (round) => { + rounds.value.push({ + id: Date.now(), + name: round.name, + prizeId: round.prizeId, + count: parseInt(round.count) || 1, + completed: false + }) + await saveData('lottery_rounds', rounds.value) + } + + const updateRound = async (round) => { + const index = rounds.value.findIndex(r => r.id === round.id) + if (index > -1) { + rounds.value[index] = round + await saveData('lottery_rounds', rounds.value) + } + } + + const removeRound = async (id) => { + const index = rounds.value.findIndex(r => r.id === id) + if (index > -1) { + rounds.value.splice(index, 1) + await saveData('lottery_rounds', rounds.value) + } + } + + const getPrizeForRound = (roundId) => { + const round = rounds.value.find(r => r.id === roundId) + if (!round) return null + return prizes.value.find(p => p.id === round.prizeId) + } + + // ============ 抽奖控制 ============ + const startLottery = async (round) => { + const prize = getPrizeForRound(round.id) + if (!prize) { + throw new Error('奖品不存在') + } + if (prize.used >= prize.stock) { + throw new Error('奖品库存不足') + } + if (round.completed) { + throw new Error('该轮次已完成') + } + if (participants.value.length === 0) { + throw new Error('参与者名单为空') + } + + currentRound.value = round + isRolling.value = true + displayMode.value = 'scroll' + + await saveData('lottery_currentRound', currentRound.value) + await saveData('lottery_isRolling', isRolling.value) + await saveData('lottery_displayMode', displayMode.value) + } + + const stopLottery = async () => { + if (!currentRound.value) return + + const round = rounds.value.find(r => r.id === currentRound.value.id) + const prize = prizes.value.find(p => p.id === round.prizeId) + + // 获取可用的参与者(未中奖) + const availableParticipants = participants.value.filter( + p => !winners.value.some(w => w.id === p.id) + ) + + // 计算本次抽奖人数 + const maxAvailable = prize.stock - prize.used + const roundCount = Math.min(round.count, maxAvailable, availableParticipants.length) + + if (roundCount === 0) { + isRolling.value = false + displayMode.value = 'result' + await saveData('lottery_isRolling', isRolling.value) + await saveData('lottery_displayMode', displayMode.value) + return + } + + // 随机抽取 + const shuffled = [...availableParticipants].sort(() => Math.random() - 0.5) + const newWinners = shuffled.slice(0, roundCount) + + // 记录中奖者 + newWinners.forEach(participant => { + winners.value.push({ + id: participant.id, + ...participant, + prizeId: prize.id, + prizeName: prize.name, + roundId: round.id, + roundName: round.name, + time: new Date().toISOString() + }) + }) + + // 更新奖品使用量 + prize.used += roundCount + + // 更新轮次状态 + round.completed = roundCount >= round.count || prize.used >= prize.stock + + isRolling.value = false + displayMode.value = 'result' + + await saveData('lottery_winners', winners.value) + await saveData('lottery_prizes', prizes.value) + await saveData('lottery_rounds', rounds.value) + await saveData('lottery_isRolling', isRolling.value) + await saveData('lottery_displayMode', displayMode.value) + } + + const resetLottery = async () => { + winners.value = [] + isRolling.value = false + currentRound.value = null + displayMode.value = 'scroll' + + // 重置奖品使用量 + prizes.value.forEach(p => { + p.used = 0 + }) + + // 重置轮次状态 + rounds.value.forEach(r => { + r.completed = false + }) + + await saveData('lottery_winners', winners.value) + await saveData('lottery_isRolling', isRolling.value) + await saveData('lottery_currentRound', currentRound.value) + await saveData('lottery_displayMode', displayMode.value) + await saveData('lottery_prizes', prizes.value) + await saveData('lottery_rounds', rounds.value) + } + + // ============ 导出功能 ============ + const exportWinners = () => { + if (winners.value.length === 0) return + + // 获取所有字段 + const participantFields = Object.keys(winners.value[0]).filter( + key => !['id', 'prizeId', 'prizeName', 'roundId', 'roundName', 'time'].includes(key) + ) + + const headers = [...participantFields, '奖品', '轮次', '时间'] + const rows = winners.value.map(w => { + const row = {} + participantFields.forEach(field => { + row[field] = w[field] || '' + }) + row['奖品'] = w.prizeName + row['轮次'] = w.roundName + row['时间'] = new Date(w.time).toLocaleString() + return row + }) + + // 转换为CSV格式 + const csv = [headers.join(','), ...rows.map(row => headers.map(h => row[h]).join(','))].join('\n') + + // 创建下载 + const blob = new Blob(['\ufeff' + csv], { type: 'text/csv;charset=utf-8' }) + const url = URL.createObjectURL(blob) + const link = document.createElement('a') + link.href = url + link.download = `中奖名单_${new Date().toLocaleDateString()}.csv` + link.click() + URL.revokeObjectURL(url) + } + + const exportParticipants = () => { + if (participants.value.length === 0) return + + // 获取所有字段 + const allKeys = new Set() + participants.value.forEach(p => { + Object.keys(p).forEach(key => { + if (key !== 'id') allKeys.add(key) + }) + }) + + const headers = Array.from(allKeys) + const rows = participants.value.map(p => headers.map(h => p[h] || '').join(',')) + + const csv = [headers.join(','), ...rows].join('\n') + const blob = new Blob(['\ufeff' + csv], { type: 'text/csv;charset=utf-8' }) + const url = URL.createObjectURL(blob) + const link = document.createElement('a') + link.href = url + link.download = `抽奖名单_${new Date().toLocaleDateString()}.csv` + link.click() + URL.revokeObjectURL(url) + } + + // ============ 显示控制 ============ + const switchDisplayMode = async (mode) => { + displayMode.value = mode + await saveData('lottery_displayMode', displayMode.value) + } + + const setBackgroundImage = async (imageData) => { + try { + console.log('setBackgroundImage called with image data length:', imageData ? imageData.length : 0) + await saveData('lottery_backgroundImage', imageData) + backgroundImage.value = imageData + console.log('setBackgroundImage completed successfully') + } catch (error) { + console.error('Failed to save background image:', error) + throw new Error('保存背景图片失败') + } + } + + const clearBackgroundImage = async () => { + try { + await indexedDB.delete('lottery_backgroundImage') + backgroundImage.value = '' + } catch (error) { + console.error('Failed to clear background image:', error) + throw new Error('清除背景图片失败') + } + } + + return { + // 状态 + fields, + participants, + prizes, + rounds, + winners, + isRolling, + currentRound, + displayMode, + backgroundImage, + isInitialized, + + // 初始化 + initialize, + + // 字段管理 + addField, + updateField, + removeField, + + // 参与者管理 + addParticipant, + updateParticipant, + removeParticipant, + clearParticipants, + importParticipantsFromFile, + + // 奖品管理 + addPrize, + updatePrize, + removePrize, + getPrizeAvailable, + + // 轮次管理 + addRound, + updateRound, + removeRound, + getPrizeForRound, + + // 抽奖控制 + startLottery, + stopLottery, + resetLottery, + + // 导出功能 + exportWinners, + exportParticipants, + + // 显示控制 + switchDisplayMode, + setBackgroundImage, + clearBackgroundImage + } +}) \ No newline at end of file diff --git a/admin/src/style.css b/admin/src/style.css new file mode 100644 index 0000000..4d6fb7a --- /dev/null +++ b/admin/src/style.css @@ -0,0 +1,97 @@ +:root { + font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + padding: 0; + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +#app { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.vanilla:hover { + filter: drop-shadow(0 0 2em #3178c6aa); +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/admin/src/styles/components.css b/admin/src/styles/components.css new file mode 100644 index 0000000..73ec2ec --- /dev/null +++ b/admin/src/styles/components.css @@ -0,0 +1,249 @@ +/* 组件样式 */ + +/* ===== 按钮组件 ===== */ +.el-button { + font-family: var(--font-family-primary); + font-weight: var(--font-weight-medium); + border-radius: var(--border-radius-md); + transition: var(--transition-normal); + box-shadow: var(--shadow-small); +} + +.el-button--primary { + background-color: var(--color-primary); + border-color: var(--color-primary); +} + +.el-button--primary:hover { + background-color: var(--color-secondary); + border-color: var(--color-secondary); + box-shadow: var(--shadow-button); +} + +.el-button--success { + background-color: var(--color-success); + border-color: var(--color-success); +} + +.el-button--warning { + background-color: var(--color-warning); + border-color: var(--color-warning); +} + +.el-button--danger { + background-color: var(--color-danger); + border-color: var(--color-danger); +} + +/* ===== 卡片组件 ===== */ +.el-card { + border-radius: var(--border-radius-lg); + box-shadow: var(--shadow-medium); + border: 1px solid var(--color-border); +} + +.el-card__header { + font-family: var(--font-family-secondary); + font-weight: var(--font-weight-semibold); + font-size: var(--font-size-lg); + color: var(--color-text-primary); + padding: var(--spacing-xl); + border-bottom: 1px solid var(--color-border); +} + +.el-card__body { + padding: var(--spacing-xl); +} + +/* ===== 表单组件 ===== */ +.el-form-item__label { + font-family: var(--font-family-primary); + font-weight: var(--font-weight-medium); + color: var(--color-text-primary); +} + +.el-input__wrapper { + border-radius: var(--border-radius-md); + transition: var(--transition-normal); +} + +.el-input__wrapper:hover { + box-shadow: var(--shadow-small); +} + +.el-input__wrapper.is-focus { + box-shadow: var(--shadow-medium); +} + +/* ===== 表格组件 ===== */ +.el-table { + border-radius: var(--border-radius-lg); + overflow: hidden; +} + +.el-table th.el-table__cell { + background-color: var(--color-primary); + color: var(--color-text-white); + font-family: var(--font-family-secondary); + font-weight: var(--font-weight-semibold); +} + +.el-table tr { + transition: var(--transition-background); +} + +.el-table--enable-row-hover .el-table__body tr:hover > td { + background-color: rgba(var(--color-secondary-rgb), 0.1); +} + +/* ===== 对话框组件 ===== */ +.el-dialog { + border-radius: var(--border-radius-xl); + box-shadow: var(--shadow-large); +} + +.el-dialog__header { + font-family: var(--font-family-secondary); + font-weight: var(--font-weight-semibold); + font-size: var(--font-size-xl); + color: var(--color-text-primary); + padding: var(--spacing-2xl); + border-bottom: 1px solid var(--color-border); +} + +.el-dialog__body { + padding: var(--spacing-2xl); +} + +.el-dialog__footer { + padding: var(--spacing-xl) var(--spacing-2xl); + border-top: 1px solid var(--color-border); +} + +/* ===== 标签组件 ===== */ +.el-tag { + border-radius: var(--border-radius-md); + font-weight: var(--font-weight-medium); +} + +.el-tag--success { + background-color: rgba(var(--color-success), 0.1); + color: var(--color-success); + border-color: var(--color-success); +} + +.el-tag--warning { + background-color: rgba(var(--color-warning), 0.1); + color: var(--color-warning); + border-color: var(--color-warning); +} + +.el-tag--danger { + background-color: rgba(var(--color-danger), 0.1); + color: var(--color-danger); + border-color: var(--color-danger); +} + +/* ===== 消息提示组件 ===== */ +.el-message { + border-radius: var(--border-radius-lg); + box-shadow: var(--shadow-large); + font-family: var(--font-family-primary); +} + +.el-message--success { + background-color: var(--color-success); + border-color: var(--color-success); +} + +.el-message--warning { + background-color: var(--color-warning); + border-color: var(--color-warning); +} + +.el-message--error { + background-color: var(--color-danger); + border-color: var(--color-danger); +} + +/* ===== 自定义卡片样式 ===== */ +.custom-card { + background: var(--color-background); + border-radius: var(--border-radius-lg); + box-shadow: var(--shadow-medium); + padding: var(--spacing-2xl); + transition: var(--transition-normal); +} + +.custom-card:hover { + box-shadow: var(--shadow-large); + transform: translateY(-2px); +} + +/* ===== 标题样式 ===== */ +.page-title { + font-family: var(--font-family-secondary); + font-weight: var(--font-weight-bold); + font-size: var(--font-size-3xl); + color: var(--color-primary); + margin-bottom: var(--spacing-xl); +} + +.section-title { + font-family: var(--font-family-secondary); + font-weight: var(--font-weight-semibold); + font-size: var(--font-size-xl); + color: var(--color-text-primary); + margin-bottom: var(--spacing-lg); + padding-bottom: var(--spacing-sm); + border-bottom: 2px solid var(--color-secondary); +} + +/* ===== 统计卡片 ===== */ +.stat-card { + background: linear-gradient(135deg, var(--color-primary), var(--color-accent)); + color: var(--color-text-white); + border-radius: var(--border-radius-xl); + padding: var(--spacing-2xl); + box-shadow: var(--shadow-large); +} + +.stat-card .stat-value { + font-family: var(--font-family-secondary); + font-weight: var(--font-weight-bold); + font-size: var(--font-size-4xl); + margin-bottom: var(--spacing-sm); +} + +.stat-card .stat-label { + font-family: var(--font-family-primary); + font-weight: var(--font-weight-medium); + font-size: var(--font-size-md); + opacity: 0.9; +} + +/* ===== 操作按钮组 ===== */ +.action-buttons { + display: flex; + gap: var(--spacing-md); + flex-wrap: wrap; +} + +/* ===== 表单区域 ===== */ +.form-section { + background: var(--color-background); + border-radius: var(--border-radius-lg); + padding: var(--spacing-2xl); + box-shadow: var(--shadow-medium); + margin-bottom: var(--spacing-xl); +} + +.form-section-title { + font-family: var(--font-family-secondary); + font-weight: var(--font-weight-semibold); + font-size: var(--font-size-lg); + color: var(--color-text-primary); + margin-bottom: var(--spacing-lg); + padding-bottom: var(--spacing-sm); + border-bottom: 1px solid var(--color-border); +} \ No newline at end of file diff --git a/admin/src/styles/element-plus.css b/admin/src/styles/element-plus.css new file mode 100644 index 0000000..ed1a771 --- /dev/null +++ b/admin/src/styles/element-plus.css @@ -0,0 +1,567 @@ +/* Element Plus 组件样式覆盖 - 基于参考项目设计 */ + +/* ===== 按钮组件 ===== */ +.el-button { + display: inline-flex; + align-items: center; + justify-content: center; + gap: var(--spacing-sm); + border: 1px solid transparent; + border-radius: var(--border-radius-md); + font-size: var(--font-size-base); + font-weight: var(--font-weight-semibold); + font-family: var(--font-family-primary); + text-decoration: none; + cursor: pointer; + transition: var(--transition-color), var(--transition-background), var(--transition-border), var(--transition-box-shadow), var(--transition-transform); + background: none; + color: var(--color-text-primary); + padding: var(--spacing-lg) var(--spacing-xl); +} + +.el-button:focus { + outline: 2px solid var(--color-secondary); + outline-offset: 2px; +} + +.el-button:disabled { + opacity: 0.6; + cursor: not-allowed; +} + +.el-button--primary { + background: var(--color-primary); + border-color: var(--color-primary); + color: var(--color-text-white); + box-shadow: var(--shadow-button); +} + +.el-button--primary:hover { + background: var(--color-primary); + border-color: var(--color-primary); + transform: translateY(-2px); + box-shadow: 0 6px 20px rgba(var(--color-primary-rgb), 0.4); +} + +.el-button--primary:active { + transform: translateY(0); + box-shadow: var(--shadow-button); +} + +.el-button--success { + background: var(--color-success); + border-color: var(--color-success); + color: var(--color-text-white); + box-shadow: 0 4px 16px rgba(var(--color-success-rgb), 0.3); +} + +.el-button--success:hover { + background: var(--color-success); + border-color: var(--color-success); + transform: translateY(-2px); + box-shadow: 0 6px 20px rgba(var(--color-success-rgb), 0.4); +} + +.el-button--success:active { + transform: translateY(0); + box-shadow: 0 4px 16px rgba(var(--color-success-rgb), 0.3); +} + +.el-button--danger { + background: var(--color-danger); + border-color: var(--color-danger); + color: var(--color-text-white); + box-shadow: 0 4px 16px rgba(var(--color-danger-rgb), 0.3); +} + +.el-button--danger:hover { + background: var(--color-danger); + border-color: var(--color-danger); + transform: translateY(-2px); + box-shadow: 0 6px 20px rgba(var(--color-danger-rgb), 0.4); +} + +.el-button--danger:active { + transform: translateY(0); + box-shadow: 0 4px 16px rgba(var(--color-danger-rgb), 0.3); +} + +.el-button--warning { + background: var(--color-warning); + border-color: var(--color-warning); + color: var(--color-text-white); + box-shadow: 0 4px 16px rgba(var(--color-warning-rgb), 0.3); +} + +.el-button--warning:hover { + background: var(--color-warning); + border-color: var(--color-warning); + transform: translateY(-2px); + box-shadow: 0 6px 20px rgba(var(--color-warning-rgb), 0.4); +} + +.el-button--warning:active { + transform: translateY(0); + box-shadow: 0 4px 16px rgba(var(--color-warning-rgb), 0.3); +} + +.el-button--info { + background: var(--color-info); + border-color: var(--color-info); + color: var(--color-text-white); + box-shadow: 0 4px 16px rgba(var(--color-info-rgb), 0.3); +} + +.el-button--info:hover { + background: var(--color-info); + border-color: var(--color-info); + transform: translateY(-2px); + box-shadow: 0 6px 20px rgba(var(--color-info-rgb), 0.4); +} + +.el-button--info:active { + transform: translateY(0); + box-shadow: 0 4px 16px rgba(var(--color-info-rgb), 0.3); +} + +.el-button--default { + background: var(--color-background); + border-color: var(--color-border); + color: var(--color-text-primary); +} + +.el-button--default:hover { + background: rgba(var(--color-primary-rgb), 0.1); + border-color: var(--color-primary); + color: var(--color-primary); +} + +.el-button--default:active { + transform: translateY(0); +} + +.el-button--small { + padding: var(--spacing-sm) var(--spacing-lg); + font-size: var(--font-size-sm); + height: var(--button-height-sm); +} + +.el-button--small.el-button--primary:hover, +.el-button--small.el-button--success:hover, +.el-button--small.el-button--info:hover, +.el-button--small.el-button--warning:hover, +.el-button--small.el-button--danger:hover { + transform: translateY(-1px); +} + +.el-button--small.el-button--primary:active, +.el-button--small.el-button--success:active, +.el-button--small.el-button--info:active, +.el-button--small.el-button--warning:active, +.el-button--small.el-button--danger:active { + transform: translateY(0); +} + +.el-button.is-circle { + border-radius: var(--border-radius-full); +} + +.el-button.is-link { + border: none; + background: transparent; + box-shadow: none; + padding: var(--spacing-sm) var(--spacing-md); +} + +.el-button.is-link:hover { + background: transparent; + transform: none; + box-shadow: none; +} + +.el-button--text { + border: none; + background: transparent; + box-shadow: none; + color: var(--color-text-primary); +} + +.el-button--text:hover { + background: rgba(var(--color-primary-rgb), 0.1); + color: var(--color-primary); + transform: none; +} + +/* ===== 卡片组件 ===== */ +.el-card { + border-radius: var(--border-radius-lg); + box-shadow: var(--shadow-small); + border: 1px solid var(--color-border); +} + +.el-card__header { + font-family: var(--font-family-secondary); + font-weight: var(--font-weight-semibold); + font-size: var(--font-size-lg); + color: var(--color-text-primary); + padding: var(--spacing-xl); + border-bottom: 1px solid var(--color-border); + background: var(--color-background); +} + +.el-card__body { + padding: var(--spacing-xl); + background: var(--color-background); +} + +/* ===== 表格组件 ===== */ +.el-table { + border-radius: var(--border-radius-lg); + overflow: hidden; + box-shadow: var(--shadow-small); + font-family: var(--font-family-primary); +} + +.el-table .el-table__header-wrapper { + background: var(--color-background); +} + +.el-table th { + background: var(--color-background); + color: var(--color-text-primary); + font-weight: var(--font-weight-semibold); + font-family: var(--font-family-secondary); + border-bottom: 1px solid var(--color-border); +} + +.el-table td { + color: var(--color-text-primary); + border-bottom: 1px solid var(--color-border); + font-size: var(--font-size-base); +} + +.el-table .el-table__row:hover > td { + background: rgba(var(--color-primary-rgb), 0.05); +} + +.el-table .el-table__row { + transition: var(--transition-background); +} + +/* ===== 对话框组件 ===== */ +.el-dialog { + border-radius: var(--border-radius-lg); + box-shadow: var(--shadow-large); + overflow: hidden; +} + +.el-dialog__header { + background: var(--color-primary); + color: var(--color-text-white); + padding: var(--spacing-2xl); + border-bottom: none; +} + +.el-dialog__title { + color: var(--color-text-white); + font-weight: var(--font-weight-semibold); + font-family: var(--font-family-secondary); +} + +.el-dialog__headerbtn { + position: absolute; + top: 50%; + right: var(--spacing-lg); + transform: translateY(-50%); + width: 32px; + height: 32px; + display: flex; + align-items: center; + justify-content: center; + border-radius: var(--border-radius-full); + background: rgba(255, 255, 255, 0.1); + backdrop-filter: blur(10px); + transition: var(--transition-background), var(--transition-transform); +} + +.el-dialog__headerbtn .el-dialog__close { + color: var(--color-text-white); + font-size: 16px; + font-weight: var(--font-weight-bold); +} + +.el-dialog__headerbtn:hover { + background: rgba(255, 255, 255, 0.2); + transform: translateY(-50%) scale(1.1); +} + +.el-dialog__body { + padding: var(--spacing-2xl); +} + +.el-dialog__footer { + padding: var(--spacing-lg) var(--spacing-2xl) var(--spacing-2xl); + border-top: 1px solid var(--color-border); + text-align: right; +} + +/* ===== 表单组件 ===== */ +.el-form-item__label { + color: var(--color-text-primary); + font-weight: var(--font-weight-medium); + font-family: var(--font-family-primary); + font-size: var(--font-size-base); +} + +.el-input__wrapper { + border-radius: var(--border-radius-md); + border: 1px solid var(--color-border); + background: var(--color-background); + transition: var(--transition-border), var(--transition-box-shadow); + box-shadow: none; +} + +.el-input__wrapper:hover { + border-color: var(--color-primary); + box-shadow: none; +} + +.el-input__wrapper.is-focus { + border-color: var(--color-primary); + box-shadow: var(--shadow-small); +} + +.el-input__inner::placeholder { + color: var(--color-text-light); +} + +.el-textarea__inner { + border-radius: var(--border-radius-md); + border: 1px solid var(--color-border); + background: var(--color-background); + transition: var(--transition-border), var(--transition-box-shadow); + font-family: var(--font-family-primary); + font-size: var(--font-size-base); + color: var(--color-text-primary); + line-height: var(--line-height-relaxed); + box-shadow: none; +} + +.el-textarea__inner:hover { + border-color: var(--color-primary); + box-shadow: none; +} + +.el-textarea__inner:focus { + border-color: var(--color-primary); + box-shadow: var(--shadow-small); +} + +.el-textarea__inner::placeholder { + color: var(--color-text-light); +} + +/* ===== 选择器组件 ===== */ +.el-select .el-input__wrapper { + border-radius: var(--border-radius-md); + box-shadow: none; +} + +.el-select-dropdown { + border-radius: var(--border-radius-lg); + border: none; + box-shadow: var(--shadow-large); + padding: var(--spacing-md); +} + +.el-select-dropdown__item { + border-radius: var(--border-radius-md); + padding: var(--spacing-lg) var(--spacing-xl); + transition: var(--transition-color), var(--transition-background); + font-weight: var(--font-weight-medium); + color: var(--color-text-primary); +} + +.el-select-dropdown__item:hover { + background: rgba(var(--color-primary-rgb), 0.1); + color: var(--color-primary); +} + +.el-select-dropdown__item.is-selected { + background: var(--color-primary); + color: var(--color-text-white); +} + +/* ===== 数字输入框 ===== */ +.el-input-number { + width: 100px; +} + +.el-input-number .el-input__wrapper { + border-radius: var(--border-radius-sm); + border: 1px solid var(--color-border); + background: var(--color-background); + transition: var(--transition-border), var(--transition-box-shadow); + box-shadow: none; +} + +.el-input-number .el-input__wrapper:hover { + border-color: var(--color-primary); + box-shadow: none; +} + +.el-input-number .el-input__wrapper.is-focus { + border-color: var(--color-primary); + box-shadow: var(--shadow-small); +} + +/* ===== 上传组件 ===== */ +.el-upload-dragger { + border-radius: var(--border-radius-lg); + border: 2px dashed var(--color-border); + transition: var(--transition-border), var(--transition-background); +} + +.el-upload-dragger:hover { + border-color: var(--color-primary); + background: rgba(var(--color-primary-rgb), 0.05); +} + +/* ===== 标签组件 ===== */ +.el-tag { + border-radius: var(--border-radius-full); + font-weight: var(--font-weight-medium); + font-family: var(--font-family-primary); +} + +.el-tag--success { + background: var(--color-success); + border-color: var(--color-success); + color: var(--color-text-white); +} + +.el-tag--info { + background: var(--color-info); + border-color: var(--color-info); + color: var(--color-text-white); +} + +.el-tag--warning { + background: var(--color-warning); + border-color: var(--color-warning); + color: var(--color-text-white); +} + +.el-tag--danger { + background: var(--color-danger); + border-color: var(--color-danger); + color: var(--color-text-white); +} + +/* ===== 消息提示 ===== */ +.el-message { + border-radius: var(--border-radius-lg); + box-shadow: var(--shadow-large); + font-family: var(--font-family-primary); +} + +.el-message--success { + background: var(--color-success); + border-color: var(--color-success); +} + +.el-message--warning { + background: var(--color-warning); + border-color: var(--color-warning); +} + +.el-message--error { + background: var(--color-danger); + border-color: var(--color-danger); +} + +.el-message--info { + background: var(--color-info); + border-color: var(--color-info); +} + +/* ===== 复选框 ===== */ +.el-checkbox { + font-family: var(--font-family-primary); + font-weight: var(--font-weight-medium); +} + +.el-checkbox__input.is-checked .el-checkbox__inner { + background-color: var(--color-primary); + border-color: var(--color-primary); +} + +.el-checkbox__inner:hover { + border-color: var(--color-primary); +} + +/* ===== 分页 ===== */ +.el-pagination { + font-family: var(--font-family-primary); + font-size: var(--font-size-base); +} + +.el-pagination .el-pager li { + font-weight: var(--font-weight-medium); + color: var(--color-text-primary); + border-radius: var(--border-radius-sm); + margin: 0 2px; + transition: var(--transition-color), var(--transition-background); +} + +.el-pagination .el-pager li.active { + background: var(--color-primary); + color: var(--color-text-white); +} + +.el-pagination .el-pager li:hover { + color: var(--color-text-primary); +} + +.el-pagination button { + border-radius: var(--border-radius-sm); +} + +/* ===== 开关 ===== */ +.el-switch { + --el-switch-on-color: var(--color-success); +} + +.el-switch__core { + border-radius: var(--border-radius-full); +} + +/* ===== 下拉菜单 ===== */ +.el-dropdown-menu { + border-radius: var(--border-radius-lg); + border: none; + box-shadow: var(--shadow-large); + padding: var(--spacing-md); + background: var(--color-background); + overflow: hidden; + font-family: var(--font-family-primary); +} + +.el-dropdown-menu__item { + border-radius: var(--border-radius-md); + padding: var(--spacing-lg) var(--spacing-xl); + transition: var(--transition-color), var(--transition-background); + font-weight: var(--font-weight-medium); + color: var(--color-text-primary); +} + +.el-dropdown-menu__item:hover { + background: rgba(var(--color-primary-rgb), 0.1); + color: var(--color-primary); +} + +.el-dropdown-menu__item.is-divided { + border-top: 1px solid rgba(0, 0, 0, 0.06); + margin-top: 8px; + padding-top: 16px; +} \ No newline at end of file diff --git a/admin/src/styles/global.css b/admin/src/styles/global.css new file mode 100644 index 0000000..0422089 --- /dev/null +++ b/admin/src/styles/global.css @@ -0,0 +1,322 @@ +/* 全局基础样式 */ + +/* ===== 重置样式 ===== */ +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +html { + font-size: 16px; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; +} + +body { + font-family: var(--font-family-primary); + font-size: var(--font-size-base); + font-weight: var(--font-weight-normal); + line-height: var(--line-height-normal); + color: var(--color-text-primary); + background-color: var(--color-background); + overflow-x: hidden; +} + +/* ===== 通用样式 ===== */ +h1, h2, h3, h4, h5, h6 { + font-family: var(--font-family-secondary); + font-weight: var(--font-weight-semibold); + line-height: var(--line-height-tight); + margin-bottom: var(--spacing-md); + color: var(--color-text-primary); +} + +h1 { + font-size: var(--font-size-4xl); +} + +h2 { + font-size: var(--font-size-3xl); +} + +h3 { + font-size: var(--font-size-2xl); +} + +h4 { + font-size: var(--font-size-xl); +} + +h5 { + font-size: var(--font-size-lg); +} + +h6 { + font-size: var(--font-size-md); +} + +p { + margin-bottom: var(--spacing-md); + color: var(--color-text-secondary); +} + +a { + color: var(--color-secondary); + text-decoration: none; + transition: var(--transition-color); +} + +a:hover { + color: var(--color-primary); +} + +ul, ol { + margin-bottom: var(--spacing-md); + padding-left: var(--spacing-2xl); +} + +li { + margin-bottom: var(--spacing-sm); + color: var(--color-text-secondary); +} + +img { + max-width: 100%; + height: auto; + display: block; +} + +/* ===== 工具类 ===== */ +.container { + width: 100%; + max-width: 1400px; + margin: 0 auto; + padding: 0 var(--spacing-lg); +} + +.text-center { + text-align: center; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-primary { + color: var(--color-primary); +} + +.text-secondary { + color: var(--color-secondary); +} + +.text-muted { + color: var(--color-text-light); +} + +.font-bold { + font-weight: var(--font-weight-bold); +} + +.font-semibold { + font-weight: var(--font-weight-semibold); +} + +.font-medium { + font-weight: var(--font-weight-medium); +} + +/* ===== 间距工具类 ===== */ +.m-0 { margin: 0; } +.mt-0 { margin-top: 0; } +.mr-0 { margin-right: 0; } +.mb-0 { margin-bottom: 0; } +.ml-0 { margin-left: 0; } +.mx-0 { margin-left: 0; margin-right: 0; } +.my-0 { margin-top: 0; margin-bottom: 0; } + +.m-1 { margin: var(--spacing-xs); } +.mt-1 { margin-top: var(--spacing-xs); } +.mr-1 { margin-right: var(--spacing-xs); } +.mb-1 { margin-bottom: var(--spacing-xs); } +.ml-1 { margin-left: var(--spacing-xs); } +.mx-1 { margin-left: var(--spacing-xs); margin-right: var(--spacing-xs); } +.my-1 { margin-top: var(--spacing-xs); margin-bottom: var(--spacing-xs); } + +.m-2 { margin: var(--spacing-sm); } +.mt-2 { margin-top: var(--spacing-sm); } +.mr-2 { margin-right: var(--spacing-sm); } +.mb-2 { margin-bottom: var(--spacing-sm); } +.ml-2 { margin-left: var(--spacing-sm); } +.mx-2 { margin-left: var(--spacing-sm); margin-right: var(--spacing-sm); } +.my-2 { margin-top: var(--spacing-sm); margin-bottom: var(--spacing-sm); } + +.m-3 { margin: var(--spacing-md); } +.mt-3 { margin-top: var(--spacing-md); } +.mr-3 { margin-right: var(--spacing-md); } +.mb-3 { margin-bottom: var(--spacing-md); } +.ml-3 { margin-left: var(--spacing-md); } +.mx-3 { margin-left: var(--spacing-md); margin-right: var(--spacing-md); } +.my-3 { margin-top: var(--spacing-md); margin-bottom: var(--spacing-md); } + +.m-4 { margin: var(--spacing-lg); } +.mt-4 { margin-top: var(--spacing-lg); } +.mr-4 { margin-right: var(--spacing-lg); } +.mb-4 { margin-bottom: var(--spacing-lg); } +.ml-4 { margin-left: var(--spacing-lg); } +.mx-4 { margin-left: var(--spacing-lg); margin-right: var(--spacing-lg); } +.my-4 { margin-top: var(--spacing-lg); margin-bottom: var(--spacing-lg); } + +.p-0 { padding: 0; } +.pt-0 { padding-top: 0; } +.pr-0 { padding-right: 0; } +.pb-0 { padding-bottom: 0; } +.pl-0 { padding-left: 0; } +.px-0 { padding-left: 0; padding-right: 0; } +.py-0 { padding-top: 0; padding-bottom: 0; } + +.p-1 { padding: var(--spacing-xs); } +.pt-1 { padding-top: var(--spacing-xs); } +.pr-1 { padding-right: var(--spacing-xs); } +.pb-1 { padding-bottom: var(--spacing-xs); } +.pl-1 { padding-left: var(--spacing-xs); } +.px-1 { padding-left: var(--spacing-xs); padding-right: var(--spacing-xs); } +.py-1 { padding-top: var(--spacing-xs); padding-bottom: var(--spacing-xs); } + +.p-2 { padding: var(--spacing-sm); } +.pt-2 { padding-top: var(--spacing-sm); } +.pr-2 { padding-right: var(--spacing-sm); } +.pb-2 { padding-bottom: var(--spacing-sm); } +.pl-2 { padding-left: var(--spacing-sm); } +.px-2 { padding-left: var(--spacing-sm); padding-right: var(--spacing-sm); } +.py-2 { padding-top: var(--spacing-sm); padding-bottom: var(--spacing-sm); } + +.p-3 { padding: var(--spacing-md); } +.pt-3 { padding-top: var(--spacing-md); } +.pr-3 { padding-right: var(--spacing-md); } +.pb-3 { padding-bottom: var(--spacing-md); } +.pl-3 { padding-left: var(--spacing-md); } +.px-3 { padding-left: var(--spacing-md); padding-right: var(--spacing-md); } +.py-3 { padding-top: var(--spacing-md); padding-bottom: var(--spacing-md); } + +.p-4 { padding: var(--spacing-lg); } +.pt-4 { padding-top: var(--spacing-lg); } +.pr-4 { padding-right: var(--spacing-lg); } +.pb-4 { padding-bottom: var(--spacing-lg); } +.pl-4 { padding-left: var(--spacing-lg); } +.px-4 { padding-left: var(--spacing-lg); padding-right: var(--spacing-lg); } +.py-4 { padding-top: var(--spacing-lg); padding-bottom: var(--spacing-lg); } + +/* ===== Flexbox 工具类 ===== */ +.d-flex { + display: flex; +} + +.flex-row { + flex-direction: row; +} + +.flex-column { + flex-direction: column; +} + +.justify-start { + justify-content: flex-start; +} + +.justify-center { + justify-content: center; +} + +.justify-end { + justify-content: flex-end; +} + +.justify-between { + justify-content: space-between; +} + +.align-start { + align-items: flex-start; +} + +.align-center { + align-items: center; +} + +.align-end { + align-items: flex-end; +} + +.flex-wrap { + flex-wrap: wrap; +} + +.flex-1 { + flex: 1; +} + +/* ===== 滚动条样式 ===== */ +::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +::-webkit-scrollbar-track { + background: var(--color-border); + border-radius: var(--border-radius-sm); +} + +::-webkit-scrollbar-thumb { + background: var(--color-text-light); + border-radius: var(--border-radius-sm); + transition: var(--transition-background); +} + +::-webkit-scrollbar-thumb:hover { + background: var(--color-text-secondary); +} + +/* ===== Vue 应用样式 ===== */ +#app { + min-height: 100vh; + display: flex; + flex-direction: column; +} + +/* 过渡动画 */ +.fade-enter-active, +.fade-leave-active { + transition: opacity var(--transition-normal); +} + +.fade-enter-from, +.fade-leave-to { + opacity: 0; +} + +.slide-fade-enter-active { + transition: all var(--transition-normal) ease-out; +} + +.slide-fade-leave-active { + transition: all var(--transition-fast) ease-in; +} + +.slide-fade-enter-from { + transform: translateY(-10px); + opacity: 0; +} + +.slide-fade-leave-to { + transform: translateY(10px); + opacity: 0; +} \ No newline at end of file diff --git a/admin/src/styles/variables.css b/admin/src/styles/variables.css new file mode 100644 index 0000000..02c2fd6 --- /dev/null +++ b/admin/src/styles/variables.css @@ -0,0 +1,163 @@ +/* 全局样式变量 - 基于琳盛网站设计系统 */ + +/* ===== 色彩系统 ===== */ +:root { + /* 主色调 - 深棕红色 */ + --color-primary: rgb(29, 17, 17); + --color-primary-rgb: 29, 17, 17; + + /* 次要色 - 青绿色 */ + --color-secondary: rgb(0, 165, 141); + --color-secondary-rgb: 0, 165, 141; + + /* 强调色 - 深蓝色 */ + --color-accent: rgb(34, 37, 121); + --color-accent-rgb: 34, 37, 121; + + /* 背景色 */ + --color-background: rgb(255, 255, 255); + --color-background-rgb: 255, 255, 255; + + /* 文字颜色 */ + --color-text-primary: rgb(29, 17, 17); + --color-text-secondary: rgb(64, 64, 64); + --color-text-light: rgb(120, 120, 120); + --color-text-white: rgb(255, 255, 255); + + /* 边框颜色 */ + --color-border: rgb(225, 225, 225); + --color-border-light: rgba(0, 0, 0, 0.1); + + /* 状态颜色 */ + --color-success: rgb(0, 165, 141); + --color-warning: rgb(243, 156, 18); + --color-danger: rgb(220, 53, 69); + --color-info: rgb(23, 162, 184); + + /* 阴影 */ + --shadow-small: 0 2px 8px rgba(0, 0, 0, 0.05); + --shadow-medium: 0 4px 16px rgba(0, 0, 0, 0.1); + --shadow-large: 0 8px 24px rgba(0, 0, 0, 0.15); + --shadow-button: 0 4px 16px rgba(var(--color-primary-rgb), 0.3); +} + +/* ===== 字体系统 ===== */ +:root { + /* 主字体 - Poppins */ + --font-family-primary: 'Poppins', 'Noto Sans SC', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; + + /* 辅助字体 - Montserrat */ + --font-family-secondary: 'Montserrat', 'Noto Sans SC', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; + + /* 等宽字体 */ + --font-family-mono: 'Fira Code', 'Consolas', 'Monaco', 'Courier New', monospace; + + /* 字体大小 */ + --font-size-xs: 12px; + --font-size-sm: 13px; + --font-size-base: 14px; + --font-size-md: 16px; + --font-size-lg: 18px; + --font-size-xl: 20px; + --font-size-2xl: 24px; + --font-size-3xl: 28px; + --font-size-4xl: 32px; + + /* 字体粗细 */ + --font-weight-light: 300; + --font-weight-normal: 400; + --font-weight-medium: 500; + --font-weight-semibold: 600; + --font-weight-bold: 700; + + /* 行高 */ + --line-height-tight: 1.2; + --line-height-normal: 1.4; + --line-height-relaxed: 1.6; + --line-height-loose: 1.8; +} + +/* ===== 间距系统 ===== */ +:root { + --spacing-xs: 4px; + --spacing-sm: 8px; + --spacing-md: 12px; + --spacing-lg: 16px; + --spacing-xl: 20px; + --spacing-2xl: 24px; + --spacing-3xl: 32px; + --spacing-4xl: 40px; + --spacing-5xl: 48px; +} + +/* ===== 圆角系统 ===== */ +:root { + --border-radius-none: 0px; + --border-radius-sm: 4px; + --border-radius-md: 8px; + --border-radius-lg: 12px; + --border-radius-xl: 16px; + --border-radius-2xl: 20px; + --border-radius-full: 50%; +} + +/* ===== 过渡动画 ===== */ +:root { + --transition-fast: 0.15s ease; + --transition-normal: 0.3s ease; + --transition-slow: 0.5s ease; + + /* 简化的过渡效果 */ + --transition-color: color var(--transition-normal); + --transition-background: background-color var(--transition-normal); + --transition-border: border-color var(--transition-normal); + --transition-transform: transform var(--transition-normal); + --transition-box-shadow: box-shadow var(--transition-normal); +} + +/* ===== 断点系统 ===== */ +:root { + --breakpoint-sm: 576px; + --breakpoint-md: 768px; + --breakpoint-lg: 992px; + --breakpoint-xl: 1200px; + --breakpoint-2xl: 1400px; +} + +/* ===== Z-index 层级 ===== */ +:root { + --z-index-dropdown: 1000; + --z-index-sticky: 1020; + --z-index-fixed: 1030; + --z-index-modal-backdrop: 1040; + --z-index-modal: 1050; + --z-index-popover: 1060; + --z-index-tooltip: 1070; +} + +/* ===== 组件特定变量 ===== */ +:root { + /* 按钮高度 */ + --button-height-sm: 32px; + --button-height-md: 40px; + --button-height-lg: 48px; + --button-height-xl: 56px; + + /* 输入框高度 */ + --input-height-sm: 32px; + --input-height-md: 40px; + --input-height-lg: 48px; + + /* 侧边栏 */ + --sidebar-width-collapsed: 80px; + --sidebar-width-expanded: 260px; + --sidebar-height: 80px; + + /* 头部导航 */ + --header-height: 108px; + + /* 卡片 */ + --card-padding: var(--spacing-2xl); + --card-border-radius: var(--border-radius-lg); + --card-shadow: var(--shadow-medium); +} \ No newline at end of file diff --git a/admin/src/typescript.svg b/admin/src/typescript.svg new file mode 100644 index 0000000..d91c910 --- /dev/null +++ b/admin/src/typescript.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/tsconfig.json b/admin/tsconfig.json new file mode 100644 index 0000000..4ba8dd9 --- /dev/null +++ b/admin/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "target": "ES2022", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "types": ["vite/client"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src"] +} diff --git a/admin/vite.config.js b/admin/vite.config.js new file mode 100644 index 0000000..39fe8c1 --- /dev/null +++ b/admin/vite.config.js @@ -0,0 +1,13 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import path from 'path' + +export default defineConfig({ + plugins: [vue()], + resolve: { + alias: { + '@': path.resolve(__dirname, './src'), + '@utils': path.resolve(__dirname, '../utils') + } + } +}) \ No newline at end of file diff --git a/display/.gitignore b/display/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/display/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/display/index.html b/display/index.html new file mode 100644 index 0000000..56e0c9b --- /dev/null +++ b/display/index.html @@ -0,0 +1,13 @@ + + + + + + + display + + +
+ + + diff --git a/display/package-lock.json b/display/package-lock.json new file mode 100644 index 0000000..521b619 --- /dev/null +++ b/display/package-lock.json @@ -0,0 +1,1739 @@ +{ + "name": "display", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "display", + "version": "0.0.0", + "dependencies": { + "element-plus": "^2.13.1", + "pinia": "^3.0.4" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^6.0.3", + "typescript": "~5.9.3", + "vite": "^7.2.4" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz", + "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/types": "^7.28.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", + "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/@element-plus/icons-vue": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz", + "integrity": "sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", + "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT", + "peer": true + }, + "node_modules/@popperjs/core": { + "name": "@sxzz/popperjs-es", + "version": "2.11.7", + "resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz", + "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz", + "integrity": "sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.1.tgz", + "integrity": "sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.1.tgz", + "integrity": "sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.1.tgz", + "integrity": "sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.1.tgz", + "integrity": "sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.1.tgz", + "integrity": "sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.1.tgz", + "integrity": "sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.1.tgz", + "integrity": "sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.1.tgz", + "integrity": "sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.1.tgz", + "integrity": "sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.1.tgz", + "integrity": "sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.1.tgz", + "integrity": "sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.1.tgz", + "integrity": "sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.1.tgz", + "integrity": "sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.1.tgz", + "integrity": "sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.1.tgz", + "integrity": "sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.1.tgz", + "integrity": "sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.1.tgz", + "integrity": "sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.1.tgz", + "integrity": "sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.1.tgz", + "integrity": "sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.1.tgz", + "integrity": "sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.1.tgz", + "integrity": "sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.1.tgz", + "integrity": "sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.1.tgz", + "integrity": "sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.1.tgz", + "integrity": "sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.1.tgz", + "integrity": "sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA==", + "license": "MIT" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "license": "MIT" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.3.tgz", + "integrity": "sha512-TlGPkLFLVOY3T7fZrwdvKpjprR3s4fxRln0ORDo1VQ7HHyxJwTlrjKU3kpVWTlaAjIEuCTokmjkZnr8Tpc925w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "1.0.0-beta.53" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.26.tgz", + "integrity": "sha512-vXyI5GMfuoBCnv5ucIT7jhHKl55Y477yxP6fc4eUswjP8FG3FFVFd41eNDArR+Uk3QKn2Z85NavjaxLxOC19/w==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/parser": "^7.28.5", + "@vue/shared": "3.5.26", + "entities": "^7.0.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.26.tgz", + "integrity": "sha512-y1Tcd3eXs834QjswshSilCBnKGeQjQXB6PqFn/1nxcQw4pmG42G8lwz+FZPAZAby6gZeHSt/8LMPfZ4Rb+Bd/A==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/compiler-core": "3.5.26", + "@vue/shared": "3.5.26" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.26.tgz", + "integrity": "sha512-egp69qDTSEZcf4bGOSsprUr4xI73wfrY5oRs6GSgXFTiHrWj4Y3X5Ydtip9QMqiCMCPVwLglB9GBxXtTadJ3mA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/parser": "^7.28.5", + "@vue/compiler-core": "3.5.26", + "@vue/compiler-dom": "3.5.26", + "@vue/compiler-ssr": "3.5.26", + "@vue/shared": "3.5.26", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.26.tgz", + "integrity": "sha512-lZT9/Y0nSIRUPVvapFJEVDbEXruZh2IYHMk2zTtEgJSlP5gVOqeWXH54xDKAaFS4rTnDeDBQUYDtxKyoW9FwDw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/compiler-dom": "3.5.26", + "@vue/shared": "3.5.26" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.7.9", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.9.tgz", + "integrity": "sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.9" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.9", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.9.tgz", + "integrity": "sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.9", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.9", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.9.tgz", + "integrity": "sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==", + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.26.tgz", + "integrity": "sha512-9EnYB1/DIiUYYnzlnUBgwU32NNvLp/nhxLXeWRhHUEeWNTn1ECxX8aGO7RTXeX6PPcxe3LLuNBFoJbV4QZ+CFQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/shared": "3.5.26" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.26.tgz", + "integrity": "sha512-xJWM9KH1kd201w5DvMDOwDHYhrdPTrAatn56oB/LRG4plEQeZRQLw0Bpwih9KYoqmzaxF0OKSn6swzYi84e1/Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/reactivity": "3.5.26", + "@vue/shared": "3.5.26" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.26.tgz", + "integrity": "sha512-XLLd/+4sPC2ZkN/6+V4O4gjJu6kSDbHAChvsyWgm1oGbdSO3efvGYnm25yCjtFm/K7rrSDvSfPDgN1pHgS4VNQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/reactivity": "3.5.26", + "@vue/runtime-core": "3.5.26", + "@vue/shared": "3.5.26", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.26.tgz", + "integrity": "sha512-TYKLXmrwWKSodyVuO1WAubucd+1XlLg4set0YoV+Hu8Lo79mp/YMwWV5mC5FgtsDxX3qo1ONrxFaTP1OQgy1uA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/compiler-ssr": "3.5.26", + "@vue/shared": "3.5.26" + }, + "peerDependencies": { + "vue": "3.5.26" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.26.tgz", + "integrity": "sha512-7Z6/y3uFI5PRoKeorTOSXKcDj0MSasfNNltcslbFrPpcw6aXRUALq4IfJlaTRspiWIUOEZbrpM+iQGmCOiWe4A==", + "license": "MIT", + "peer": true + }, + "node_modules/@vueuse/core": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.11.1.tgz", + "integrity": "sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "10.11.1", + "@vueuse/shared": "10.11.1", + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.11.1.tgz", + "integrity": "sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.11.1.tgz", + "integrity": "sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==", + "license": "MIT", + "dependencies": { + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==", + "license": "MIT" + }, + "node_modules/birpc": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz", + "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/copy-anything": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-4.0.5.tgz", + "integrity": "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==", + "license": "MIT", + "dependencies": { + "is-what": "^5.2.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT", + "peer": true + }, + "node_modules/dayjs": { + "version": "1.11.19", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz", + "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==", + "license": "MIT" + }, + "node_modules/element-plus": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.13.1.tgz", + "integrity": "sha512-eG4BDBGdAsUGN6URH1PixzZb0ngdapLivIk1meghS1uEueLvQ3aljSKrCt5x6sYb6mUk8eGtzTQFgsPmLavQcA==", + "license": "MIT", + "dependencies": { + "@ctrl/tinycolor": "^3.4.1", + "@element-plus/icons-vue": "^2.3.2", + "@floating-ui/dom": "^1.0.1", + "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", + "@types/lodash": "^4.17.20", + "@types/lodash-es": "^4.17.12", + "@vueuse/core": "^10.11.0", + "async-validator": "^4.2.5", + "dayjs": "^1.11.19", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "lodash-unified": "^1.0.3", + "memoize-one": "^6.0.0", + "normalize-wheel-es": "^1.2.0" + }, + "peerDependencies": { + "vue": "^3.3.0" + } + }, + "node_modules/entities": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.0.tgz", + "integrity": "sha512-FDWG5cmEYf2Z00IkYRhbFrwIwvdFKH07uV8dvNy0omp/Qb1xcyCWp2UDtcwJF4QZZvk0sLudP6/hAu42TaqVhQ==", + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT", + "peer": true + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT" + }, + "node_modules/is-what": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-5.5.0.tgz", + "integrity": "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.17.22", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.22.tgz", + "integrity": "sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q==", + "license": "MIT" + }, + "node_modules/lodash-unified": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.3.tgz", + "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", + "license": "MIT", + "peerDependencies": { + "@types/lodash-es": "*", + "lodash": "*", + "lodash-es": "*" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "license": "MIT" + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize-wheel-es": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", + "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==", + "license": "BSD-3-Clause" + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pinia": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.4.tgz", + "integrity": "sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^7.7.7" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.5.0", + "vue": "^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, + "node_modules/rollup": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.1.tgz", + "integrity": "sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==", + "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.55.1", + "@rollup/rollup-android-arm64": "4.55.1", + "@rollup/rollup-darwin-arm64": "4.55.1", + "@rollup/rollup-darwin-x64": "4.55.1", + "@rollup/rollup-freebsd-arm64": "4.55.1", + "@rollup/rollup-freebsd-x64": "4.55.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.55.1", + "@rollup/rollup-linux-arm-musleabihf": "4.55.1", + "@rollup/rollup-linux-arm64-gnu": "4.55.1", + "@rollup/rollup-linux-arm64-musl": "4.55.1", + "@rollup/rollup-linux-loong64-gnu": "4.55.1", + "@rollup/rollup-linux-loong64-musl": "4.55.1", + "@rollup/rollup-linux-ppc64-gnu": "4.55.1", + "@rollup/rollup-linux-ppc64-musl": "4.55.1", + "@rollup/rollup-linux-riscv64-gnu": "4.55.1", + "@rollup/rollup-linux-riscv64-musl": "4.55.1", + "@rollup/rollup-linux-s390x-gnu": "4.55.1", + "@rollup/rollup-linux-x64-gnu": "4.55.1", + "@rollup/rollup-linux-x64-musl": "4.55.1", + "@rollup/rollup-openbsd-x64": "4.55.1", + "@rollup/rollup-openharmony-arm64": "4.55.1", + "@rollup/rollup-win32-arm64-msvc": "4.55.1", + "@rollup/rollup-win32-ia32-msvc": "4.55.1", + "@rollup/rollup-win32-x64-gnu": "4.55.1", + "@rollup/rollup-win32-x64-msvc": "4.55.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/superjson": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.6.tgz", + "integrity": "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==", + "license": "MIT", + "dependencies": { + "copy-anything": "^4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/vite": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.26.tgz", + "integrity": "sha512-SJ/NTccVyAoNUJmkM9KUqPcYlY+u8OVL1X5EW9RIs3ch5H2uERxyyIUI4MRxVCSOiEcupX9xNGde1tL9ZKpimA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/compiler-dom": "3.5.26", + "@vue/compiler-sfc": "3.5.26", + "@vue/runtime-dom": "3.5.26", + "@vue/server-renderer": "3.5.26", + "@vue/shared": "3.5.26" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + } + } +} diff --git a/display/package.json b/display/package.json new file mode 100644 index 0000000..9c6fa69 --- /dev/null +++ b/display/package.json @@ -0,0 +1,20 @@ +{ + "name": "display", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "preview": "vite preview" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^6.0.3", + "typescript": "~5.9.3", + "vite": "^7.2.4" + }, + "dependencies": { + "element-plus": "^2.13.1", + "pinia": "^3.0.4" + } +} diff --git a/display/public/vite.svg b/display/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/display/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/display/src/App.vue b/display/src/App.vue new file mode 100644 index 0000000..f72c9a3 --- /dev/null +++ b/display/src/App.vue @@ -0,0 +1,451 @@ + + + + + \ No newline at end of file diff --git a/display/src/counter.ts b/display/src/counter.ts new file mode 100644 index 0000000..09e5afd --- /dev/null +++ b/display/src/counter.ts @@ -0,0 +1,9 @@ +export function setupCounter(element: HTMLButtonElement) { + let counter = 0 + const setCounter = (count: number) => { + counter = count + element.innerHTML = `count is ${counter}` + } + element.addEventListener('click', () => setCounter(counter + 1)) + setCounter(0) +} diff --git a/display/src/main.js b/display/src/main.js new file mode 100644 index 0000000..ce016e1 --- /dev/null +++ b/display/src/main.js @@ -0,0 +1,9 @@ +import { createApp } from 'vue' +import { createPinia } from 'pinia' +import App from './App.vue' +import './styles/variables.css' +import './style.css' + +const app = createApp(App) +app.use(createPinia()) +app.mount('#app') diff --git a/display/src/main.ts b/display/src/main.ts new file mode 100644 index 0000000..6396b50 --- /dev/null +++ b/display/src/main.ts @@ -0,0 +1,24 @@ +import './style.css' +import typescriptLogo from './typescript.svg' +import viteLogo from '/vite.svg' +import { setupCounter } from './counter.ts' + +document.querySelector('#app')!.innerHTML = ` +
+ + + + + + +

Vite + TypeScript

+
+ +
+

+ Click on the Vite and TypeScript logos to learn more +

+
+` + +setupCounter(document.querySelector('#counter')!) diff --git a/display/src/store/index.js b/display/src/store/index.js new file mode 100644 index 0000000..10b0544 --- /dev/null +++ b/display/src/store/index.js @@ -0,0 +1,153 @@ +import { defineStore } from 'pinia' +import { ref, watch } from 'vue' +import { indexedDB } from '@utils/indexedDB' + +export const useLotteryStore = defineStore('lottery', () => { + // 初始化数据 + const fields = ref([]) + const participants = ref([]) + const prizes = ref([]) + const rounds = ref([]) + const winners = ref([]) + const isRolling = ref(false) + const currentRound = ref(null) + const displayMode = ref('scroll') + const backgroundImage = ref('') + const isInitialized = ref(false) + + // 从IndexedDB初始化数据 + const initFromIndexedDB = async () => { + if (isInitialized.value) return + + try { + console.log('Display: Initializing from IndexedDB...') + const data = await indexedDB.getAll() + console.log('Display: Retrieved data keys:', Object.keys(data)) + + fields.value = data.lottery_fields || [] + participants.value = data.lottery_participants || [] + prizes.value = data.lottery_prizes || [] + rounds.value = data.lottery_rounds || [] + winners.value = data.lottery_winners || [] + isRolling.value = data.lottery_isRolling === 'true' + currentRound.value = data.lottery_currentRound || null + displayMode.value = data.lottery_displayMode || 'scroll' + backgroundImage.value = data.lottery_backgroundImage || '' + + console.log('Display: Initialized background image:', backgroundImage.value ? 'Yes' : 'No') + console.log('Display: Initialization completed') + + isInitialized.value = true + } catch (error) { + console.error('Display: Failed to initialize from IndexedDB:', error) + // 使用默认值 + fields.value = [{key: 'name', label: '姓名', required: true}] + isInitialized.value = true + } + } + + // 初始化 + initFromIndexedDB() + + // 监听localStorage变化来触发数据同步 + const handleStorageChange = (e) => { + if (e.key === 'lottery_data_changed') { + console.log('Display: Storage change detected, reloading data...') + initFromIndexedDB() + } + } + + if (typeof window !== 'undefined') { + window.addEventListener('storage', handleStorageChange) + } + + // 轮询同步IndexedDB数据(作为备用) + let syncInterval = null + const startSync = () => { + if (syncInterval) return + + console.log('Display: Starting sync interval...') + + syncInterval = setInterval(async () => { + try { + const data = await indexedDB.getAll() + + // 只更新变化的值,避免不必要的重渲染 + if (JSON.stringify(data.lottery_fields) !== JSON.stringify(fields.value)) { + fields.value = data.lottery_fields || [] + } + if (JSON.stringify(data.lottery_participants) !== JSON.stringify(participants.value)) { + participants.value = data.lottery_participants || [] + } + if (JSON.stringify(data.lottery_prizes) !== JSON.stringify(prizes.value)) { + prizes.value = data.lottery_prizes || [] + } + if (JSON.stringify(data.lottery_rounds) !== JSON.stringify(rounds.value)) { + rounds.value = data.lottery_rounds || [] + } + if (JSON.stringify(data.lottery_winners) !== JSON.stringify(winners.value)) { + winners.value = data.lottery_winners || [] + } + if (data.lottery_isRolling !== isRolling.value) { + isRolling.value = data.lottery_isRolling === 'true' + } + if (JSON.stringify(data.lottery_currentRound) !== JSON.stringify(currentRound.value)) { + currentRound.value = data.lottery_currentRound || null + } + if (data.lottery_displayMode !== displayMode.value) { + displayMode.value = data.lottery_displayMode || 'scroll' + } + if (data.lottery_backgroundImage !== backgroundImage.value) { + console.log('Display: Background image changed from', backgroundImage.value ? 'Yes' : 'No', 'to', data.lottery_backgroundImage ? 'Yes' : 'No') + backgroundImage.value = data.lottery_backgroundImage || '' + } + } catch (error) { + console.error('Display: Failed to sync data from IndexedDB:', error) + } + }, 1000) // 每秒同步一次 + } + + const stopSync = () => { + if (syncInterval) { + clearInterval(syncInterval) + syncInterval = null + } + if (typeof window !== 'undefined') { + window.removeEventListener('storage', handleStorageChange) + } + } + + // 启动同步 + startSync() + + // ============ 只读方法 ============ + const getPrizeForRound = (roundId) => { + const round = rounds.value.find(r => r.id === roundId) + if (!round) return null + return prizes.value.find(p => p.id === round.prizeId) + } + + const switchDisplayMode = (mode) => { + displayMode.value = mode + } + + return { + // 状态 + fields, + participants, + prizes, + rounds, + winners, + isRolling, + currentRound, + displayMode, + backgroundImage, + isInitialized, + + // 只读方法 + getPrizeForRound, + switchDisplayMode, + startSync, + stopSync + } +}) \ No newline at end of file diff --git a/display/src/style.css b/display/src/style.css new file mode 100644 index 0000000..de9c9fe --- /dev/null +++ b/display/src/style.css @@ -0,0 +1,30 @@ +:root { + font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + padding: 0; + margin: 0; + width: 100vw; + height: 100vh; +} diff --git a/display/src/styles/variables.css b/display/src/styles/variables.css new file mode 100644 index 0000000..7148f3c --- /dev/null +++ b/display/src/styles/variables.css @@ -0,0 +1,93 @@ +:root { + /* 颜色系统 - 参考项目配色 */ + --color-primary: rgb(29, 17, 17); + --color-primary-rgb: 29, 17, 17; + + --color-secondary: rgb(0, 165, 141); + --color-secondary-rgb: 0, 165, 141; + + --color-accent: rgb(34, 37, 121); + --color-accent-rgb: 34, 37, 121; + + --color-success: rgb(0, 165, 141); + --color-warning: rgb(255, 193, 7); + --color-danger: rgb(220, 53, 69); + --color-info: rgb(23, 162, 184); + + --color-text-primary: rgb(51, 51, 51); + --color-text-secondary: rgb(108, 117, 125); + --color-text-light: rgb(173, 181, 189); + --color-text-white: rgb(255, 255, 255); + + --color-background: rgb(248, 249, 250); + --color-border: rgb(222, 226, 230); + --color-border-light: rgb(233, 236, 239); + + /* 字体系统 */ + --font-family-primary: 'Poppins', 'Noto Sans SC', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; + --font-family-secondary: 'Montserrat', 'Noto Sans SC', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; + + --font-size-xs: 12px; + --font-size-sm: 14px; + --font-size-base: 16px; + --font-size-lg: 18px; + --font-size-xl: 20px; + --font-size-2xl: 24px; + --font-size-3xl: 32px; + --font-size-4xl: 48px; + + --font-weight-light: 300; + --font-weight-normal: 400; + --font-weight-medium: 500; + --font-weight-semibold: 600; + --font-weight-bold: 700; + + /* 间距系统 */ + --spacing-xs: 4px; + --spacing-sm: 8px; + --spacing-md: 12px; + --spacing-lg: 16px; + --spacing-xl: 20px; + --spacing-2xl: 24px; + --spacing-3xl: 32px; + --spacing-4xl: 40px; + + /* 圆角系统 */ + --border-radius-sm: 4px; + --border-radius-md: 8px; + --border-radius-lg: 12px; + --border-radius-xl: 16px; + --border-radius-full: 50%; + + /* 阴影系统 */ + --shadow-small: 0 2px 8px rgba(0, 0, 0, 0.08); + --shadow-medium: 0 4px 16px rgba(0, 0, 0, 0.12); + --shadow-large: 0 8px 32px rgba(0, 0, 0, 0.16); + --shadow-button: 0 4px 12px rgba(0, 0, 0, 0.15); + + /* 过渡动画 */ + --transition-fast: 0.15s ease; + --transition-normal: 0.3s ease; + --transition-slow: 0.5s ease; + --transition-color: background-color 0.3s ease, border-color 0.3s ease, color 0.3s ease; + --transition-background: background-color 0.3s ease; + --transition-border: border-color 0.3s ease; + --transition-box-shadow: box-shadow 0.3s ease; + --transition-transform: transform 0.3s ease; + + /* 行高 */ + --line-height-tight: 1.2; + --line-height-normal: 1.5; + --line-height-relaxed: 1.75; + + /* 布局 */ + --header-height: 64px; + --sidebar-height: 64px; + --button-height-sm: 32px; + --button-height-md: 40px; + --button-height-lg: 48px; + + /* 卡片 */ + --card-border-radius: 12px; + --card-shadow: 0 2px 12px rgba(0, 0, 0, 0.08); +} \ No newline at end of file diff --git a/display/src/typescript.svg b/display/src/typescript.svg new file mode 100644 index 0000000..d91c910 --- /dev/null +++ b/display/src/typescript.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/display/tsconfig.json b/display/tsconfig.json new file mode 100644 index 0000000..4ba8dd9 --- /dev/null +++ b/display/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "target": "ES2022", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "types": ["vite/client"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src"] +} diff --git a/display/vite.config.js b/display/vite.config.js new file mode 100644 index 0000000..39fe8c1 --- /dev/null +++ b/display/vite.config.js @@ -0,0 +1,13 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import path from 'path' + +export default defineConfig({ + plugins: [vue()], + resolve: { + alias: { + '@': path.resolve(__dirname, './src'), + '@utils': path.resolve(__dirname, '../utils') + } + } +}) \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..f13913c --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + 抽奖系统 + + +
+ + + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..90d1405 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1463 @@ +{ + "name": "rolling-draw", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "rolling-draw", + "version": "1.0.0", + "dependencies": { + "@element-plus/icons-vue": "^2.3.1", + "element-plus": "^2.5.0", + "pinia": "^2.1.7", + "vue": "^3.4.0", + "vue-router": "^4.2.5" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.0.0", + "vite": "^5.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz", + "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", + "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/@element-plus/icons-vue": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz", + "integrity": "sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@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.npmjs.org/@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.npmjs.org/@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.npmjs.org/@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.npmjs.org/@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.npmjs.org/@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.npmjs.org/@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.npmjs.org/@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.npmjs.org/@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.npmjs.org/@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.npmjs.org/@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.npmjs.org/@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.npmjs.org/@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.npmjs.org/@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.npmjs.org/@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.npmjs.org/@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.npmjs.org/@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.npmjs.org/@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.npmjs.org/@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.npmjs.org/@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.npmjs.org/@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.npmjs.org/@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.npmjs.org/@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/@floating-ui/core": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", + "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@popperjs/core": { + "name": "@sxzz/popperjs-es", + "version": "2.11.7", + "resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz", + "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.1.tgz", + "integrity": "sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.1.tgz", + "integrity": "sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.1.tgz", + "integrity": "sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.1.tgz", + "integrity": "sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.1.tgz", + "integrity": "sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.1.tgz", + "integrity": "sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.1.tgz", + "integrity": "sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.1.tgz", + "integrity": "sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.1.tgz", + "integrity": "sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.1.tgz", + "integrity": "sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.1.tgz", + "integrity": "sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.1.tgz", + "integrity": "sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.1.tgz", + "integrity": "sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.1.tgz", + "integrity": "sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.1.tgz", + "integrity": "sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.1.tgz", + "integrity": "sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.1.tgz", + "integrity": "sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.1.tgz", + "integrity": "sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.1.tgz", + "integrity": "sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.1.tgz", + "integrity": "sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.1.tgz", + "integrity": "sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.1.tgz", + "integrity": "sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.1.tgz", + "integrity": "sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.1.tgz", + "integrity": "sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.1.tgz", + "integrity": "sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA==", + "license": "MIT" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "license": "MIT" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.26.tgz", + "integrity": "sha512-vXyI5GMfuoBCnv5ucIT7jhHKl55Y477yxP6fc4eUswjP8FG3FFVFd41eNDArR+Uk3QKn2Z85NavjaxLxOC19/w==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@vue/shared": "3.5.26", + "entities": "^7.0.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.26.tgz", + "integrity": "sha512-y1Tcd3eXs834QjswshSilCBnKGeQjQXB6PqFn/1nxcQw4pmG42G8lwz+FZPAZAby6gZeHSt/8LMPfZ4Rb+Bd/A==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.26", + "@vue/shared": "3.5.26" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.26.tgz", + "integrity": "sha512-egp69qDTSEZcf4bGOSsprUr4xI73wfrY5oRs6GSgXFTiHrWj4Y3X5Ydtip9QMqiCMCPVwLglB9GBxXtTadJ3mA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@vue/compiler-core": "3.5.26", + "@vue/compiler-dom": "3.5.26", + "@vue/compiler-ssr": "3.5.26", + "@vue/shared": "3.5.26", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.26.tgz", + "integrity": "sha512-lZT9/Y0nSIRUPVvapFJEVDbEXruZh2IYHMk2zTtEgJSlP5gVOqeWXH54xDKAaFS4rTnDeDBQUYDtxKyoW9FwDw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.26", + "@vue/shared": "3.5.26" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/@vue/reactivity": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.26.tgz", + "integrity": "sha512-9EnYB1/DIiUYYnzlnUBgwU32NNvLp/nhxLXeWRhHUEeWNTn1ECxX8aGO7RTXeX6PPcxe3LLuNBFoJbV4QZ+CFQ==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.26" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.26.tgz", + "integrity": "sha512-xJWM9KH1kd201w5DvMDOwDHYhrdPTrAatn56oB/LRG4plEQeZRQLw0Bpwih9KYoqmzaxF0OKSn6swzYi84e1/Q==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.26", + "@vue/shared": "3.5.26" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.26.tgz", + "integrity": "sha512-XLLd/+4sPC2ZkN/6+V4O4gjJu6kSDbHAChvsyWgm1oGbdSO3efvGYnm25yCjtFm/K7rrSDvSfPDgN1pHgS4VNQ==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.26", + "@vue/runtime-core": "3.5.26", + "@vue/shared": "3.5.26", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.26.tgz", + "integrity": "sha512-TYKLXmrwWKSodyVuO1WAubucd+1XlLg4set0YoV+Hu8Lo79mp/YMwWV5mC5FgtsDxX3qo1ONrxFaTP1OQgy1uA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.26", + "@vue/shared": "3.5.26" + }, + "peerDependencies": { + "vue": "3.5.26" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.26.tgz", + "integrity": "sha512-7Z6/y3uFI5PRoKeorTOSXKcDj0MSasfNNltcslbFrPpcw6aXRUALq4IfJlaTRspiWIUOEZbrpM+iQGmCOiWe4A==", + "license": "MIT" + }, + "node_modules/@vueuse/core": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.11.1.tgz", + "integrity": "sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "10.11.1", + "@vueuse/shared": "10.11.1", + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/metadata": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.11.1.tgz", + "integrity": "sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.11.1.tgz", + "integrity": "sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==", + "license": "MIT", + "dependencies": { + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==", + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/dayjs": { + "version": "1.11.19", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz", + "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==", + "license": "MIT" + }, + "node_modules/element-plus": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.13.1.tgz", + "integrity": "sha512-eG4BDBGdAsUGN6URH1PixzZb0ngdapLivIk1meghS1uEueLvQ3aljSKrCt5x6sYb6mUk8eGtzTQFgsPmLavQcA==", + "license": "MIT", + "dependencies": { + "@ctrl/tinycolor": "^3.4.1", + "@element-plus/icons-vue": "^2.3.2", + "@floating-ui/dom": "^1.0.1", + "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", + "@types/lodash": "^4.17.20", + "@types/lodash-es": "^4.17.12", + "@vueuse/core": "^10.11.0", + "async-validator": "^4.2.5", + "dayjs": "^1.11.19", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "lodash-unified": "^1.0.3", + "memoize-one": "^6.0.0", + "normalize-wheel-es": "^1.2.0" + }, + "peerDependencies": { + "vue": "^3.3.0" + } + }, + "node_modules/entities": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.0.tgz", + "integrity": "sha512-FDWG5cmEYf2Z00IkYRhbFrwIwvdFKH07uV8dvNy0omp/Qb1xcyCWp2UDtcwJF4QZZvk0sLudP6/hAu42TaqVhQ==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/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/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.17.22", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.22.tgz", + "integrity": "sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q==", + "license": "MIT" + }, + "node_modules/lodash-unified": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.3.tgz", + "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", + "license": "MIT", + "peerDependencies": { + "@types/lodash-es": "*", + "lodash": "*", + "lodash-es": "*" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize-wheel-es": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", + "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==", + "license": "BSD-3-Clause" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/pinia": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.3.1.tgz", + "integrity": "sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.3", + "vue-demi": "^0.14.10" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.4.4", + "vue": "^2.7.0 || ^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/rollup": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.1.tgz", + "integrity": "sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==", + "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.55.1", + "@rollup/rollup-android-arm64": "4.55.1", + "@rollup/rollup-darwin-arm64": "4.55.1", + "@rollup/rollup-darwin-x64": "4.55.1", + "@rollup/rollup-freebsd-arm64": "4.55.1", + "@rollup/rollup-freebsd-x64": "4.55.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.55.1", + "@rollup/rollup-linux-arm-musleabihf": "4.55.1", + "@rollup/rollup-linux-arm64-gnu": "4.55.1", + "@rollup/rollup-linux-arm64-musl": "4.55.1", + "@rollup/rollup-linux-loong64-gnu": "4.55.1", + "@rollup/rollup-linux-loong64-musl": "4.55.1", + "@rollup/rollup-linux-ppc64-gnu": "4.55.1", + "@rollup/rollup-linux-ppc64-musl": "4.55.1", + "@rollup/rollup-linux-riscv64-gnu": "4.55.1", + "@rollup/rollup-linux-riscv64-musl": "4.55.1", + "@rollup/rollup-linux-s390x-gnu": "4.55.1", + "@rollup/rollup-linux-x64-gnu": "4.55.1", + "@rollup/rollup-linux-x64-musl": "4.55.1", + "@rollup/rollup-openbsd-x64": "4.55.1", + "@rollup/rollup-openharmony-arm64": "4.55.1", + "@rollup/rollup-win32-arm64-msvc": "4.55.1", + "@rollup/rollup-win32-ia32-msvc": "4.55.1", + "@rollup/rollup-win32-x64-gnu": "4.55.1", + "@rollup/rollup-win32-x64-msvc": "4.55.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "license": "MIT", + "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/vue": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.26.tgz", + "integrity": "sha512-SJ/NTccVyAoNUJmkM9KUqPcYlY+u8OVL1X5EW9RIs3ch5H2uERxyyIUI4MRxVCSOiEcupX9xNGde1tL9ZKpimA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.26", + "@vue/compiler-sfc": "3.5.26", + "@vue/runtime-dom": "3.5.26", + "@vue/server-renderer": "3.5.26", + "@vue/shared": "3.5.26" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vue-router": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.4.tgz", + "integrity": "sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..dc912bb --- /dev/null +++ b/package.json @@ -0,0 +1 @@ +{"name": "rolling-draw", "version": "1.0.0", "type": "module", "scripts": {"dev": "vite", "build": "vite build", "preview": "vite preview"}, "dependencies": {"vue": "^3.4.0", "vue-router": "^4.2.5", "pinia": "^2.1.7", "element-plus": "^2.5.0", "@element-plus/icons-vue": "^2.3.1"}, "devDependencies": {"@vitejs/plugin-vue": "^5.0.0", "vite": "^5.0.0"}} \ No newline at end of file diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..a076222 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,20 @@ + + + + + \ No newline at end of file diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..56adc4b --- /dev/null +++ b/src/main.js @@ -0,0 +1,24 @@ +import { createApp } from 'vue' +import { createPinia } from 'pinia' +import ElementPlus from 'element-plus' +import 'element-plus/dist/index.css' +import * as ElementPlusIconsVue from '@element-plus/icons-vue' +import router from './router' +import App from './App.vue' +import './styles/variables.css' +import './styles/global.css' +import './styles/element-plus.css' + +const app = createApp(App) +const pinia = createPinia() + +app.use(pinia) +app.use(router) +app.use(ElementPlus) + +// 注册所有图标 +for (const [key, component] of Object.entries(ElementPlusIconsVue)) { + app.component(key, component) +} + +app.mount('#app') \ No newline at end of file diff --git a/src/router/index.js b/src/router/index.js new file mode 100644 index 0000000..9d67b20 --- /dev/null +++ b/src/router/index.js @@ -0,0 +1,44 @@ +import { createRouter, createWebHistory } from 'vue-router' + +const router = createRouter({ + history: createWebHistory(), + routes: [ + { + path: '/', + redirect: '/admin/participants' + }, + { + path: '/admin', + component: () => import('@/views/AdminLayout.vue'), + children: [ + { + path: 'participants', + name: 'Participants', + component: () => import('@/views/admin/Participants.vue') + }, + { + path: 'prizes', + name: 'Prizes', + component: () => import('@/views/admin/Prizes.vue') + }, + { + path: 'rounds', + name: 'Rounds', + component: () => import('@/views/admin/Rounds.vue') + }, + { + path: 'winners', + name: 'Winners', + component: () => import('@/views/admin/Winners.vue') + } + ] + }, + { + path: '/display', + name: 'Display', + component: () => import('@/views/Display.vue') + } + ] +}) + +export default router \ No newline at end of file diff --git a/src/store/index.js b/src/store/index.js new file mode 100644 index 0000000..daa9199 --- /dev/null +++ b/src/store/index.js @@ -0,0 +1,490 @@ +import { defineStore } from 'pinia' +import { ref, watch } from 'vue' +import { indexedDB } from '@utils/indexedDB' + +export const useLotteryStore = defineStore('lottery', () => { + // 初始化数据 + const fields = ref([]) + const participants = ref([]) + const prizes = ref([]) + const rounds = ref([]) + const winners = ref([]) + const isRolling = ref(false) + const currentRound = ref(null) + const displayMode = ref('scroll') + const backgroundImage = ref('') + const columnsPerRow = ref(3) // 每行显示的人数 + const isInitialized = ref(false) + + // 从IndexedDB初始化数据 + const initialize = async () => { + if (isInitialized.value) return + + try { + console.log('Initializing from IndexedDB...') + const data = await indexedDB.getAll() + console.log('Retrieved data keys:', Object.keys(data)) + + fields.value = data.lottery_fields || [] + participants.value = data.lottery_participants || [] + prizes.value = data.lottery_prizes || [] + rounds.value = data.lottery_rounds || [] + winners.value = data.lottery_winners || [] + isRolling.value = data.lottery_isRolling === 'true' + currentRound.value = data.lottery_currentRound || null + displayMode.value = data.lottery_displayMode || 'scroll' + backgroundImage.value = data.lottery_backgroundImage || '' + columnsPerRow.value = data.lottery_columnsPerRow || 3 + + console.log('Initialized background image:', backgroundImage.value ? 'Yes' : 'No') + console.log('Initialization completed') + + // 如果当前不是滚动状态,重置显示模式 + if (!isRolling.value && displayMode.value === 'result') { + displayMode.value = 'scroll' + await saveData('lottery_displayMode', displayMode.value) + } + + isInitialized.value = true + } catch (error) { + console.error('Failed to initialize from IndexedDB:', error) + // 使用默认值 + fields.value = [{key: 'name', label: '姓名', required: true}] + isInitialized.value = true + } + } + + // 保存单个数据到IndexedDB + const saveData = async (key, value) => { + try { + console.log(`Saving ${key} to IndexedDB...`) + // 深拷贝数据以避免Vue响应式包装器 + const clonedValue = JSON.parse(JSON.stringify(value)) + await indexedDB.set(key, clonedValue) + + // 触发localStorage事件通知其他标签页 + localStorage.setItem('lottery_data_changed', Date.now().toString()) + + console.log(`Successfully saved ${key}`) + } catch (error) { + console.error(`Failed to save ${key} to IndexedDB:`, error) + throw error + } + } + + // 监听localStorage变化 + const handleStorageChange = (e) => { + if (e.key === 'lottery_data_changed') { + console.log('Storage change detected, reloading data...') + initialize() + } + } + + if (typeof window !== 'undefined') { + window.addEventListener('storage', handleStorageChange) + } + + // ============ 字段管理 ============ + const addField = async (field) => { + const newField = { + id: Date.now(), + key: field.key, + label: field.label, + required: field.required || false + } + fields.value.push(newField) + await saveData('lottery_fields', fields.value) + } + + const updateField = async (field) => { + const index = fields.value.findIndex(f => f.id === field.id) + if (index > -1) { + fields.value[index] = field + await saveData('lottery_fields', fields.value) + } + } + + const removeField = async (id) => { + const index = fields.value.findIndex(f => f.id === id) + if (index > -1) { + fields.value.splice(index, 1) + await saveData('lottery_fields', fields.value) + } + } + + // ============ 参与者管理 ============ + const addParticipant = async (participant) => { + participants.value.push(participant) + await saveData('lottery_participants', participants.value) + } + + const updateParticipant = async (participant) => { + const index = participants.value.findIndex(p => p.id === participant.id) + if (index > -1) { + participants.value[index] = participant + await saveData('lottery_participants', participants.value) + } + } + + const removeParticipant = async (id) => { + const index = participants.value.findIndex(p => p.id === id) + if (index > -1) { + participants.value.splice(index, 1) + await saveData('lottery_participants', participants.value) + } + } + + const clearParticipants = async () => { + participants.value = [] + await saveData('lottery_participants', participants.value) + } + + const importParticipantsFromFile = (file) => { + return new Promise((resolve, reject) => { + const reader = new FileReader() + reader.onload = async (e) => { + try { + const content = e.target.result + const lines = content.split('\n').map(l => l.trim()).filter(l => l) + + // 检测是否是CSV格式(包含逗号) + const isCSV = lines.some(line => line.includes(',')) + + if (isCSV) { + // CSV格式导入 + const headers = lines[0].split(',').map(h => h.trim()) + const data = [] + + // 自动添加缺失的字段到配置 + headers.forEach(header => { + if (!fields.value.some(f => f.key === header)) { + fields.value.push({ + id: Date.now() + Math.random(), + key: header, + label: header, + required: false + }) + } + }) + + // 保存更新后的字段配置 + await saveData('lottery_fields', fields.value) + + for (let i = 1; i < lines.length; i++) { + const values = lines[i].split(',').map(v => v.trim()) + const participant = { id: Date.now() + i } + headers.forEach((header, index) => { + participant[header] = values[index] || '' + }) + data.push(participant) + } + + participants.value.push(...data) + await saveData('lottery_participants', participants.value) + resolve(data.length) + } else { + // 简单文本格式导入(每行一个姓名) + const data = lines.map(line => ({ + id: Date.now() + Math.random(), + name: line + })) + participants.value.push(...data) + await saveData('lottery_participants', participants.value) + resolve(data.length) + } + } catch (error) { + reject(error) + } + } + reader.onerror = () => reject(new Error('文件读取失败')) + reader.readAsText(file) + }) + } + + const exportParticipants = () => { + const headers = fields.value.map(f => f.label) + const rows = participants.value.map(p => headers.map(h => p[h] || '').join(',')) + + const csv = [headers.join(','), ...rows].join('\n') + const blob = new Blob(['\ufeff' + csv], { type: 'text/csv;charset=utf-8' }) + const url = URL.createObjectURL(blob) + const link = document.createElement('a') + link.href = url + link.download = `抽奖名单_${new Date().toLocaleDateString()}.csv` + link.click() + URL.revokeObjectURL(url) + } + + // ============ 奖品管理 ============ + const addPrize = async (prize) => { + prizes.value.push({ + id: Date.now(), + name: prize.name, + stock: parseInt(prize.stock) || 0, + used: 0 + }) + await saveData('lottery_prizes', prizes.value) + } + + const updatePrize = async (prize) => { + const index = prizes.value.findIndex(p => p.id === prize.id) + if (index > -1) { + prizes.value[index] = prize + await saveData('lottery_prizes', prizes.value) + } + } + + const removePrize = async (id) => { + const index = prizes.value.findIndex(p => p.id === id) + if (index > -1) { + prizes.value.splice(index, 1) + await saveData('lottery_prizes', prizes.value) + } + } + + const getPrizeAvailable = (prizeId) => { + const prize = prizes.value.find(p => p.id === prizeId) + return prize ? prize.stock - prize.used : 0 + } + + // ============ 轮次管理 ============ + const addRound = async (round) => { + rounds.value.push({ + id: Date.now(), + name: round.name, + prizeId: round.prizeId, + count: parseInt(round.count) || 1, + completed: false + }) + await saveData('lottery_rounds', rounds.value) + } + + const updateRound = async (round) => { + const index = rounds.value.findIndex(r => r.id === round.id) + if (index > -1) { + rounds.value[index] = round + await saveData('lottery_rounds', rounds.value) + } + } + + const removeRound = async (id) => { + const index = rounds.value.findIndex(r => r.id === id) + if (index > -1) { + rounds.value.splice(index, 1) + await saveData('lottery_rounds', rounds.value) + } + } + + const getPrizeForRound = (roundId) => { + const round = rounds.value.find(r => r.id === roundId) + if (!round) return null + return prizes.value.find(p => p.id === round.prizeId) + } + + // ============ 抽奖控制 ============ + const startLottery = async (round) => { + const prize = getPrizeForRound(round.id) + if (!prize) { + throw new Error('奖品不存在') + } + if (prize.used >= prize.stock) { + throw new Error('奖品库存不足') + } + if (round.completed) { + throw new Error('该轮次已完成') + } + if (participants.value.length === 0) { + throw new Error('暂无名单') + } + + // 重置显示模式为滚动模式 + displayMode.value = 'scroll' + + // 设置滚动状态 + isRolling.value = true + currentRound.value = round + + // 保存状态 + await saveData('lottery_displayMode', displayMode.value) + await saveData('lottery_isRolling', isRolling.value) + await saveData('lottery_currentRound', currentRound.value) + } + + const stopLottery = async () => { + if (!currentRound.value) return + + const prize = getPrizeForRound(currentRound.value.id) + if (!prize) { + throw new Error('奖品不存在') + } + + // 随机选择中奖者 + const available = participants.value.filter(p => { + return !winners.value.some(w => w.participantId === p.id) + }) + + if (available.length < currentRound.value.count) { + throw new Error(`可用人数不足,需要${currentRound.value.count}人,只有${available.length}人`) + } + + // Fisher-Yates洗牌算法 + for (let i = available.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)) + ;[available[i], available[j]] = [available[j], available[i]] + } + + const selected = available.slice(0, currentRound.value.count) + + // 保存中奖记录 + selected.forEach(p => { + winners.value.push({ + id: Date.now() + Math.random(), + participantId: p.id, + participant: p, // 保存完整的参与者信息 + prizeName: prize.name, + roundId: currentRound.value.id, + roundName: currentRound.value.name, + time: new Date().toLocaleString() + }) + }) + + // 更新奖品使用数量 + prize.used += currentRound.value.count + + // 更新轮次状态 + const roundIndex = rounds.value.findIndex(r => r.id === currentRound.value.id) + if (roundIndex > -1) { + rounds.value[roundIndex].completed = true + } + + // 停止滚动 + isRolling.value = false + displayMode.value = 'result' + currentRound.value = null + + // 保存所有相关数据 + await saveData('lottery_winners', winners.value) + await saveData('lottery_prizes', prizes.value) + await saveData('lottery_rounds', rounds.value) + await saveData('lottery_isRolling', isRolling.value) + await saveData('lottery_currentRound', currentRound.value) + await saveData('lottery_displayMode', displayMode.value) + } + + const resetLottery = async () => { + winners.value = [] + prizes.value.forEach(p => p.used = 0) + rounds.value.forEach(r => r.completed = false) + isRolling.value = false + currentRound.value = null + displayMode.value = 'scroll' + await saveData('lottery_winners', winners.value) + await saveData('lottery_prizes', prizes.value) + await saveData('lottery_rounds', rounds.value) + await saveData('lottery_isRolling', isRolling.value) + await saveData('lottery_currentRound', currentRound.value) + await saveData('lottery_displayMode', displayMode.value) + } + + const exportWinners = () => { + const headers = ['姓名', '奖品', '轮次', '时间'] + const rows = winners.value.map(w => [w.name, w.prizeName, w.roundName, w.time]) + + const csv = [headers.join(','), ...rows].join('\n') + const blob = new Blob(['\ufeff' + csv], { type: 'text/csv;charset=utf-8' }) + const url = URL.createObjectURL(blob) + const link = document.createElement('a') + link.href = url + link.download = `中奖名单_${new Date().toLocaleDateString()}.csv` + link.click() + URL.revokeObjectURL(url) + } + + // ============ 显示控制 ============ + const switchDisplayMode = async (mode) => { + displayMode.value = mode + await saveData('lottery_displayMode', displayMode.value) + } + + const setColumnsPerRow = async (columns) => { + columnsPerRow.value = columns + await saveData('lottery_columnsPerRow', columnsPerRow.value) + } + + const setBackgroundImage = async (imageData) => { + try { + console.log('setBackgroundImage called with image data length:', imageData ? imageData.length : 0) + await saveData('lottery_backgroundImage', imageData) + backgroundImage.value = imageData + console.log('setBackgroundImage completed successfully') + } catch (error) { + console.error('Failed to save background image:', error) + throw new Error('保存背景图片失败') + } + } + + const clearBackgroundImage = async () => { + try { + await indexedDB.delete('lottery_backgroundImage') + backgroundImage.value = '' + } catch (error) { + console.error('Failed to clear background image:', error) + throw new Error('清除背景图片失败') + } + } + + return { + // 状态 + fields, + participants, + prizes, + rounds, + winners, + isRolling, + currentRound, + displayMode, + backgroundImage, + columnsPerRow, + isInitialized, + + // 初始化 + initialize, + + // 字段管理 + addField, + updateField, + removeField, + + // 参与者管理 + addParticipant, + updateParticipant, + removeParticipant, + clearParticipants, + importParticipantsFromFile, + exportParticipants, + + // 奖品管理 + addPrize, + updatePrize, + removePrize, + getPrizeAvailable, + + // 轮次管理 + addRound, + updateRound, + removeRound, + getPrizeForRound, + + // 抽奖控制 + startLottery, + stopLottery, + resetLottery, + exportWinners, + + // 显示控制 + switchDisplayMode, + setColumnsPerRow, + setBackgroundImage, + clearBackgroundImage + } +}) \ No newline at end of file diff --git a/src/styles/element-plus.css b/src/styles/element-plus.css new file mode 100644 index 0000000..d443cff --- /dev/null +++ b/src/styles/element-plus.css @@ -0,0 +1,340 @@ +/* Element Plus Custom Styles */ + +/* Element Plus Variables Override */ +:root { + --el-color-primary: var(--color-primary); + --el-color-primary-light-3: #8fa3f7; + --el-color-primary-light-5: #b8c5f8; + --el-color-primary-light-7: #dce0fa; + --el-color-primary-light-8: #ebeefc; + --el-color-primary-light-9: #f5f6fe; + --el-color-primary-dark-2: #5369d6; + + --el-color-success: var(--color-success); + --el-color-warning: var(--color-warning); + --el-color-danger: var(--color-danger); + --el-color-info: var(--color-info); + + --el-border-radius-base: var(--border-radius-md); + --el-border-radius-small: var(--border-radius-sm); + --el-border-radius-round: 20px; + --el-border-radius-circle: 100%; + + --el-font-size-base: var(--font-size-base); + --el-font-size-small: var(--font-size-sm); + --el-font-size-large: var(--font-size-lg); + --el-font-size-extra-large: var(--font-size-xl); + + --el-transition-duration: var(--transition-normal); +} + +/* Element Plus Button Customization */ +.el-button { + font-family: var(--font-family-primary); + font-weight: var(--font-weight-medium); + border-radius: var(--border-radius-md); + transition: all var(--transition-normal); +} + +.el-button:hover { + transform: translateY(-1px); + box-shadow: var(--shadow-small); +} + +.el-button:active { + transform: translateY(0); +} + +.el-button--primary { + background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-secondary) 100%); + border: none; +} + +.el-button--primary:hover { + background: linear-gradient(135deg, var(--color-primary-dark-2) 0%, var(--color-secondary) 100%); +} + +.el-button--success { + background: var(--color-success); + border: none; +} + +.el-button--danger { + background: var(--color-danger); + border: none; +} + +.el-button--warning { + background: var(--color-warning); + border: none; +} + +.el-button--info { + background: var(--color-info); + border: none; +} + +/* Element Plus Card Customization */ +.el-card { + border-radius: var(--border-radius-lg); + box-shadow: var(--shadow-small); + transition: all var(--transition-normal); + border: 1px solid var(--color-border); +} + +.el-card:hover { + box-shadow: var(--shadow-medium); +} + +.el-card__header { + border-bottom: 1px solid var(--color-border); + padding: var(--spacing-lg) var(--spacing-xl); + font-family: var(--font-family-secondary); + font-weight: var(--font-weight-semibold); + font-size: var(--font-size-lg); +} + +.el-card__body { + padding: var(--spacing-xl); +} + +/* Element Plus Dialog Customization */ +.el-dialog { + border-radius: var(--border-radius-lg); + box-shadow: var(--shadow-large); +} + +.el-dialog__header { + background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-secondary) 100%); + color: var(--color-text-white); + padding: var(--spacing-xl) var(--spacing-2xl); + border-radius: var(--border-radius-lg) var(--border-radius-lg) 0 0; +} + +.el-dialog__title { + font-family: var(--font-family-secondary); + font-weight: var(--font-weight-semibold); + font-size: var(--font-size-lg); +} + +.el-dialog__body { + padding: var(--spacing-2xl); +} + +.el-dialog__footer { + padding: var(--spacing-lg) var(--spacing-2xl); + border-top: 1px solid var(--color-border); +} + +/* Element Plus Input Customization */ +.el-input__wrapper { + border-radius: var(--border-radius-md); + box-shadow: none; + border: 1px solid var(--color-border); + transition: all var(--transition-normal); +} + +.el-input__wrapper:hover { + border-color: var(--color-primary); + box-shadow: none; +} + +.el-input__wrapper.is-focus { + border-color: var(--color-primary); + box-shadow: 0 0 0 2px rgba(var(--color-primary-rgb), 0.1); +} + +.el-input__inner { + font-family: var(--font-family-primary); + font-size: var(--font-size-base); +} + +/* Element Plus Select Customization */ +.el-select .el-input__wrapper { + border-radius: var(--border-radius-md); +} + +.el-select-dropdown__item { + font-family: var(--font-family-primary); + font-size: var(--font-size-base); +} + +.el-select-dropdown__item.is-selected { + background: rgba(var(--color-primary-rgb), 0.1); + color: var(--color-primary); + font-weight: var(--font-weight-semibold); +} + +/* Element Plus Form Customization */ +.el-form-item__label { + font-family: var(--font-family-primary); + font-weight: var(--font-weight-medium); + color: var(--color-text-primary); + font-size: var(--font-size-base); +} + +.el-form-item__error { + font-family: var(--font-family-primary); + font-size: var(--font-size-sm); +} + +/* Element Plus Table Customization */ +.el-table { + font-family: var(--font-family-primary); + border-radius: var(--border-radius-md); + overflow: hidden; +} + +.el-table th { + background: var(--color-background); + color: var(--color-text-primary); + font-weight: var(--font-weight-semibold); + font-family: var(--font-family-secondary); + font-size: var(--font-size-base); + border-bottom: 2px solid var(--color-border); +} + +.el-table td { + color: var(--color-text-primary); + font-size: var(--font-size-base); + border-bottom: 1px solid var(--color-border); +} + +.el-table .el-table__row:hover > td { + background: rgba(var(--color-primary-rgb), 0.05); +} + +.el-table--striped .el-table__body tr.el-table__row--striped td { + background: rgba(var(--color-primary-rgb), 0.03); +} + +.el-table__body tr.current-row > td { + background: rgba(var(--color-primary-rgb), 0.1); +} + +/* Element Plus Upload Customization */ +.el-upload-dragger { + border-radius: var(--border-radius-lg); + border: 2px dashed var(--color-border); + transition: all var(--transition-normal); + background: var(--color-background); +} + +.el-upload-dragger:hover { + border-color: var(--color-primary); + background: rgba(var(--color-primary-rgb), 0.05); +} + +.el-upload__tip { + color: var(--color-text-light); + font-size: var(--font-size-sm); + margin-top: var(--spacing-sm); +} + +/* Element Plus Message Customization */ +.el-message { + border-radius: var(--border-radius-lg); + box-shadow: var(--shadow-large); + font-family: var(--font-family-primary); + font-weight: var(--font-weight-medium); + padding: var(--spacing-lg) var(--spacing-xl); +} + +.el-message__icon { + font-size: var(--font-size-xl); +} + +/* Element Plus Message Box Customization */ +.el-message-box { + border-radius: var(--border-radius-lg); + box-shadow: var(--shadow-large); +} + +.el-message-box__header { + padding: var(--spacing-xl) var(--spacing-2xl); + border-bottom: 1px solid var(--color-border); +} + +.el-message-box__title { + font-family: var(--font-family-secondary); + font-weight: var(--font-weight-semibold); + font-size: var(--font-size-lg); +} + +.el-message-box__content { + padding: var(--spacing-2xl); + font-family: var(--font-family-primary); + font-size: var(--font-size-base); +} + +.el-message-box__btns { + padding: var(--spacing-lg) var(--spacing-2xl); + border-top: 1px solid var(--color-border); +} + +/* Element Plus Checkbox Customization */ +.el-checkbox__label { + font-family: var(--font-family-primary); + font-size: var(--font-size-base); + color: var(--color-text-primary); +} + +.el-checkbox__input.is-checked .el-checkbox__inner { + background-color: var(--color-primary); + border-color: var(--color-primary); +} + +/* Element Plus Radio Customization */ +.el-radio__label { + font-family: var(--font-family-primary); + font-size: var(--font-size-base); + color: var(--color-text-primary); +} + +.el-radio__input.is-checked .el-radio__inner { + background-color: var(--color-primary); + border-color: var(--color-primary); +} + +/* Element Plus Switch Customization */ +.el-switch.is-checked .el-switch__core { + background-color: var(--color-primary); + border-color: var(--color-primary); +} + +/* Element Plus Tag Customization */ +.el-tag { + border-radius: var(--border-radius-md); + font-family: var(--font-family-primary); + font-weight: var(--font-weight-medium); +} + +.el-tag--primary { + background: rgba(var(--color-primary-rgb), 0.1); + color: var(--color-primary); + border-color: var(--color-primary); +} + +.el-tag--success { + background: rgba(var(--color-success), 0.1); + color: var(--color-success); + border-color: var(--color-success); +} + +.el-tag--warning { + background: rgba(var(--color-warning), 0.1); + color: var(--color-warning); + border-color: var(--color-warning); +} + +.el-tag--danger { + background: rgba(var(--color-danger), 0.1); + color: var(--color-danger); + border-color: var(--color-danger); +} + +.el-tag--info { + background: rgba(var(--color-info), 0.1); + color: var(--color-info); + border-color: var(--color-info); +} \ No newline at end of file diff --git a/src/styles/global.css b/src/styles/global.css new file mode 100644 index 0000000..db53bc7 --- /dev/null +++ b/src/styles/global.css @@ -0,0 +1,241 @@ +/* Global Styles */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +html, +body { + width: 100%; + height: 100%; + overflow: hidden; +} + +body { + font-family: var(--font-family-primary); + font-size: var(--font-size-base); + line-height: var(--line-height-normal); + color: var(--color-text-primary); + background: var(--color-background); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +#app { + width: 100%; + height: 100%; +} + +/* Scrollbar Styling */ +::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +::-webkit-scrollbar-track { + background: var(--color-border-light); + border-radius: var(--border-radius-sm); +} + +::-webkit-scrollbar-thumb { + background: var(--color-text-light); + border-radius: var(--border-radius-sm); + transition: background var(--transition-normal); +} + +::-webkit-scrollbar-thumb:hover { + background: var(--color-text-secondary); +} + +/* Typography */ +h1, h2, h3, h4, h5, h6 { + font-family: var(--font-family-secondary); + font-weight: var(--font-weight-bold); + line-height: var(--line-height-tight); + margin-bottom: var(--spacing-lg); +} + +h1 { font-size: var(--font-size-4xl); } +h2 { font-size: var(--font-size-3xl); } +h3 { font-size: var(--font-size-2xl); } +h4 { font-size: var(--font-size-xl); } +h5 { font-size: var(--font-size-lg); } +h6 { font-size: var(--font-size-base); } + +p { + margin-bottom: var(--spacing-md); + line-height: var(--line-height-relaxed); +} + +/* Links */ +a { + color: var(--color-primary); + text-decoration: none; + transition: color var(--transition-normal); +} + +a:hover { + color: var(--color-secondary); +} + +/* Lists */ +ul, ol { + margin-bottom: var(--spacing-md); + padding-left: var(--spacing-2xl); +} + +li { + margin-bottom: var(--spacing-sm); + line-height: var(--line-height-normal); +} + +/* Code */ +code { + font-family: 'Consolas', 'Monaco', 'Courier New', monospace; + font-size: var(--font-size-sm); + background: var(--color-border); + padding: var(--spacing-xs) var(--spacing-sm); + border-radius: var(--border-radius-sm); +} + +pre { + font-family: 'Consolas', 'Monaco', 'Courier New', monospace; + font-size: var(--font-size-sm); + background: var(--color-border); + padding: var(--spacing-lg); + border-radius: var(--border-radius-md); + overflow-x: auto; + line-height: var(--line-height-relaxed); +} + +pre code { + background: none; + padding: 0; +} + +/* Tables */ +table { + width: 100%; + border-collapse: collapse; + margin-bottom: var(--spacing-lg); +} + +th, td { + padding: var(--spacing-md); + text-align: left; + border-bottom: 1px solid var(--color-border); +} + +th { + font-weight: var(--font-weight-semibold); + color: var(--color-text-primary); +} + +tr:hover { + background: var(--color-border-light); +} + +/* Forms */ +input, +textarea, +select { + font-family: var(--font-family-primary); + font-size: var(--font-size-base); + line-height: var(--line-height-normal); + color: var(--color-text-primary); +} + +input::placeholder, +textarea::placeholder { + color: var(--color-text-light); +} + +/* Buttons */ +button { + font-family: var(--font-family-primary); + font-size: var(--font-size-base); + line-height: var(--line-height-normal); + cursor: pointer; +} + +/* Images */ +img { + max-width: 100%; + height: auto; + display: block; +} + +/* Utilities */ +.text-center { text-align: center; } +.text-left { text-align: left; } +.text-right { text-align: right; } + +.text-primary { color: var(--color-primary); } +.text-secondary { color: var(--color-secondary); } +.text-success { color: var(--color-success); } +.text-danger { color: var(--color-danger); } +.text-warning { color: var(--color-warning); } +.text-light { color: var(--color-text-light); } + +.bg-primary { background: var(--color-primary); } +.bg-secondary { background: var(--color-secondary); } +.bg-success { background: var(--color-success); } +.bg-danger { background: var(--color-danger); } +.bg-warning { background: var(--color-warning); } + +.mt-0 { margin-top: 0; } +.mt-1 { margin-top: var(--spacing-xs); } +.mt-2 { margin-top: var(--spacing-sm); } +.mt-3 { margin-top: var(--spacing-md); } +.mt-4 { margin-top: var(--spacing-lg); } +.mt-5 { margin-top: var(--spacing-xl); } + +.mb-0 { margin-bottom: 0; } +.mb-1 { margin-bottom: var(--spacing-xs); } +.mb-2 { margin-bottom: var(--spacing-sm); } +.mb-3 { margin-bottom: var(--spacing-md); } +.mb-4 { margin-bottom: var(--spacing-lg); } +.mb-5 { margin-bottom: var(--spacing-xl); } + +.p-0 { padding: 0; } +.p-1 { padding: var(--spacing-xs); } +.p-2 { padding: var(--spacing-sm); } +.p-3 { padding: var(--spacing-md); } +.p-4 { padding: var(--spacing-lg); } +.p-5 { padding: var(--spacing-xl); } + +.d-flex { display: flex; } +.d-inline-flex { display: inline-flex; } +.d-block { display: block; } +.d-inline-block { display: inline-block; } +.d-none { display: none; } + +.flex-row { flex-direction: row; } +.flex-column { flex-direction: column; } +.flex-wrap { flex-wrap: wrap; } +.flex-nowrap { flex-wrap: nowrap; } + +.justify-start { justify-content: flex-start; } +.justify-center { justify-content: center; } +.justify-end { justify-content: flex-end; } +.justify-between { justify-content: space-between; } +.justify-around { justify-content: space-around; } + +.align-start { align-items: flex-start; } +.align-center { align-items: center; } +.align-end { align-items: flex-end; } +.align-stretch { align-items: stretch; } + +.gap-0 { gap: 0; } +.gap-1 { gap: var(--spacing-xs); } +.gap-2 { gap: var(--spacing-sm); } +.gap-3 { gap: var(--spacing-md); } +.gap-4 { gap: var(--spacing-lg); } +.gap-5 { gap: var(--spacing-xl); } + +.w-100 { width: 100%; } +.h-100 { height: 100%; } +.position-relative { position: relative; } +.position-absolute { position: absolute; } +.position-fixed { position: fixed; } \ No newline at end of file diff --git a/src/styles/variables.css b/src/styles/variables.css new file mode 100644 index 0000000..54eb656 --- /dev/null +++ b/src/styles/variables.css @@ -0,0 +1,82 @@ +/* CSS Variables */ +:root { + /* Colors */ + --color-primary: #667eea; + --color-primary-rgb: 102, 126, 234; + --color-secondary: #764ba2; + --color-secondary-rgb: 118, 75, 162; + --color-accent: #f093fb; + --color-accent-rgb: 240, 147, 251; + + --color-success: #00b894; + --color-danger: #e74c3c; + --color-info: #14b8a6; + --color-warning: #f39c12; + + --color-background: #f5f7fa; + --color-border: #e2e8f0; + --color-border-light: #f8fafc; + + --color-text-primary: #2d3748; + --color-text-secondary: #4a5568; + --color-text-light: #718096; + --color-text-white: #ffffff; + + /* Spacing */ + --spacing-xs: 4px; + --spacing-sm: 8px; + --spacing-md: 12px; + --spacing-lg: 16px; + --spacing-xl: 24px; + --spacing-2xl: 32px; + --spacing-3xl: 48px; + --spacing-4xl: 64px; + + /* Typography */ + --font-family-primary: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; + --font-family-secondary: 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif; + + --font-size-xs: 12px; + --font-size-sm: 14px; + --font-size-base: 16px; + --font-size-lg: 18px; + --font-size-xl: 20px; + --font-size-2xl: 24px; + --font-size-3xl: 32px; + --font-size-4xl: 48px; + + --font-weight-normal: 400; + --font-weight-medium: 500; + --font-weight-semibold: 600; + --font-weight-bold: 700; + + --line-height-tight: 1.25; + --line-height-normal: 1.5; + --line-height-relaxed: 1.75; + + /* Border Radius */ + --border-radius-sm: 4px; + --border-radius-md: 8px; + --border-radius-lg: 12px; + --border-radius-xl: 16px; + + /* Shadows */ + --shadow-small: 0 1px 3px rgba(0, 0, 0, 0.1); + --shadow-medium: 0 4px 6px rgba(0, 0, 0, 0.1); + --shadow-large: 0 10px 25px rgba(0, 0, 0, 0.15); + + /* Transitions */ + --transition-fast: 150ms; + --transition-normal: 300ms; + --transition-slow: 500ms; + + --transition-color: color var(--transition-normal) ease; + --transition-background: background var(--transition-normal) ease; + --transition-border: border-color var(--transition-normal) ease; + --transition-box-shadow: box-shadow var(--transition-normal) ease; + + /* Layout */ + --header-height: 64px; + --sidebar-width: 240px; + --content-max-width: 1200px; +} \ No newline at end of file diff --git a/src/views/.gitkeep b/src/views/.gitkeep new file mode 100644 index 0000000..dc17de1 --- /dev/null +++ b/src/views/.gitkeep @@ -0,0 +1 @@ +# Views directory \ No newline at end of file diff --git a/src/views/Admin.vue b/src/views/Admin.vue new file mode 100644 index 0000000..5c57ddb --- /dev/null +++ b/src/views/Admin.vue @@ -0,0 +1,1324 @@ + + + + + \ No newline at end of file diff --git a/src/views/AdminLayout.vue b/src/views/AdminLayout.vue new file mode 100644 index 0000000..6ae142e --- /dev/null +++ b/src/views/AdminLayout.vue @@ -0,0 +1,412 @@ + + + + + \ No newline at end of file diff --git a/src/views/Display.vue b/src/views/Display.vue new file mode 100644 index 0000000..4d20928 --- /dev/null +++ b/src/views/Display.vue @@ -0,0 +1,454 @@ + + + + + \ No newline at end of file diff --git a/src/views/admin/Participants.vue b/src/views/admin/Participants.vue new file mode 100644 index 0000000..e099e22 --- /dev/null +++ b/src/views/admin/Participants.vue @@ -0,0 +1,452 @@ + + + + + \ No newline at end of file diff --git a/src/views/admin/Prizes.vue b/src/views/admin/Prizes.vue new file mode 100644 index 0000000..a9714b3 --- /dev/null +++ b/src/views/admin/Prizes.vue @@ -0,0 +1,163 @@ + + + + + \ No newline at end of file diff --git a/src/views/admin/Rounds.vue b/src/views/admin/Rounds.vue new file mode 100644 index 0000000..49c818c --- /dev/null +++ b/src/views/admin/Rounds.vue @@ -0,0 +1,199 @@ + + + + + \ No newline at end of file diff --git a/src/views/admin/Winners.vue b/src/views/admin/Winners.vue new file mode 100644 index 0000000..70fe811 --- /dev/null +++ b/src/views/admin/Winners.vue @@ -0,0 +1,99 @@ + + + + + \ No newline at end of file diff --git a/test_participants.csv b/test_participants.csv new file mode 100644 index 0000000..dc89f93 --- /dev/null +++ b/test_participants.csv @@ -0,0 +1,6 @@ +姓名,部门,职位 +张三,技术部,工程师 +李四,产品部,产品经理 +王五,市场部,市场专员 +赵六,人事部,HR +钱七,财务部,会计 \ No newline at end of file diff --git a/utils/indexedDB.js b/utils/indexedDB.js new file mode 100644 index 0000000..fc4cf8f --- /dev/null +++ b/utils/indexedDB.js @@ -0,0 +1,145 @@ +// IndexedDB 封装工具 +const DB_NAME = 'LotteryDB' +const DB_VERSION = 1 +const STORE_NAME = 'lotteryData' + +class IndexedDBHelper { + constructor() { + this.db = null + } + + async init() { + return new Promise((resolve, reject) => { + const request = window.indexedDB.open(DB_NAME, DB_VERSION) + + request.onerror = () => { + reject(new Error('Failed to open IndexedDB')) + } + + request.onsuccess = () => { + this.db = request.result + resolve(this.db) + } + + request.onupgradeneeded = (event) => { + const db = event.target.result + if (!db.objectStoreNames.contains(STORE_NAME)) { + db.createObjectStore(STORE_NAME) + } + } + }) + } + + async set(key, value) { + if (!this.db) await this.init() + + return new Promise((resolve, reject) => { + const transaction = this.db.transaction([STORE_NAME], 'readwrite') + const store = transaction.objectStore(STORE_NAME) + const request = store.put(value, key) + + request.onsuccess = () => { + console.log(`IndexedDB: Successfully saved ${key}`) + resolve() + } + request.onerror = () => { + console.error(`IndexedDB: Failed to save ${key}`, request.error) + reject(new Error('Failed to save to IndexedDB')) + } + }) + } + + async get(key) { + if (!this.db) await this.init() + + return new Promise((resolve, reject) => { + const transaction = this.db.transaction([STORE_NAME], 'readonly') + const store = transaction.objectStore(STORE_NAME) + const request = store.get(key) + + request.onsuccess = () => { + console.log(`IndexedDB: Retrieved ${key}:`, request.result ? 'Yes' : 'No') + resolve(request.result) + } + request.onerror = () => { + console.error(`IndexedDB: Failed to retrieve ${key}`) + reject(new Error('Failed to read from IndexedDB')) + } + }) + } + + async delete(key) { + if (!this.db) await this.init() + + return new Promise((resolve, reject) => { + const transaction = this.db.transaction([STORE_NAME], 'readwrite') + const store = transaction.objectStore(STORE_NAME) + const request = store.delete(key) + + request.onsuccess = () => resolve() + request.onerror = () => reject(new Error('Failed to delete from IndexedDB')) + }) + } + + async getAll() { + if (!this.db) await this.init() + + return new Promise((resolve, reject) => { + const transaction = this.db.transaction([STORE_NAME], 'readonly') + const store = transaction.objectStore(STORE_NAME) + const keysRequest = store.getAllKeys() + + const result = {} + let completed = 0 + let totalKeys = 0 + + keysRequest.onsuccess = () => { + const keys = keysRequest.result + totalKeys = keys.length + console.log(`IndexedDB: Found ${totalKeys} keys:`, keys) + + if (totalKeys === 0) { + resolve(result) + return + } + + keys.forEach(key => { + const getRequest = store.get(key) + getRequest.onsuccess = () => { + result[key] = getRequest.result + console.log(`IndexedDB: Retrieved ${key}:`, getRequest.result ? 'Yes' : 'No') + completed++ + if (completed === totalKeys) { + console.log('IndexedDB: All data retrieved:', Object.keys(result)) + resolve(result) + } + } + getRequest.onerror = () => { + console.error(`IndexedDB: Failed to retrieve ${key}`) + completed++ + if (completed === totalKeys) { + resolve(result) + } + } + }) + } + + keysRequest.onerror = () => reject(new Error('Failed to read all from IndexedDB')) + }) + } + + async clear() { + if (!this.db) await this.init() + + return new Promise((resolve, reject) => { + const transaction = this.db.transaction([STORE_NAME], 'readwrite') + const store = transaction.objectStore(STORE_NAME) + const request = store.clear() + + request.onsuccess = () => resolve() + request.onerror = () => reject(new Error('Failed to clear IndexedDB')) + }) + } +} + +export const indexedDB = new IndexedDBHelper() \ No newline at end of file diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..d944d72 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,14 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import path from 'path' + +export default defineConfig({ + plugins: [vue()], + resolve: { + alias: { + '@': path.resolve(__dirname, './src'), + '@utils': path.resolve(__dirname, './utils') + }, + extensions: ['.js', '.ts', '.jsx', '.tsx', '.json', '.vue'] + } +}) \ No newline at end of file
+ + + + + + +

Vite + TypeScript

+
+ +
+

+ Click on the Vite and TypeScript logos to learn more +

+