diff --git a/code/fms/fms-vue/.oxfmtrc.json b/code/fms/fms-vue/.oxfmtrc.json new file mode 100644 index 00000000..55c15df3 --- /dev/null +++ b/code/fms/fms-vue/.oxfmtrc.json @@ -0,0 +1,4 @@ +{ + "$schema": "./node_modules/oxfmt/configuration_schema.json", + "ignorePatterns": [] +} diff --git a/code/fms/fms-vue/index.html b/code/fms/fms-vue/index.html index c3fc33a7..99b16711 100644 --- a/code/fms/fms-vue/index.html +++ b/code/fms/fms-vue/index.html @@ -1,10 +1,11 @@ - + - fms-vue + + FMS 管理系统
diff --git a/code/fms/fms-vue/package.json b/code/fms/fms-vue/package.json index d016c8a7..ce2f57c5 100644 --- a/code/fms/fms-vue/package.json +++ b/code/fms/fms-vue/package.json @@ -1,20 +1,31 @@ { "name": "fms-vue", - "private": true, "version": "0.0.0", + "private": true, "type": "module", "scripts": { "dev": "vite", "build": "vite build", - "preview": "vite preview" + "preview": "vite preview", + "fmt": "oxfmt", + "fmt:check": "oxfmt --check" }, "dependencies": { - "vue": "^3.5.39" + "@antdv-next/icons": "1.1.1", + "antdv-next": "^1.4.2", + "pinia": "^4.0.2", + "pinia-plugin-persistedstate": "^4.7.1", + "vue": "^3.5.39", + "vue-router": "^5.2.0" }, "devDependencies": { "@antdv-next/auto-import-resolver": "^1.1.0", + "@antdv-next/tailwind": "^1.1.1", + "@tailwindcss/vite": "4.3.2", "@vitejs/plugin-vue": "^6.0.7", "oxfmt": "^0.58.0", + "sass": "^1.101.0", + "tailwindcss": "^4.3.2", "unplugin-auto-import": "^21.0.0", "unplugin-vue-components": "^32.1.0", "vite": "^8.1.1" diff --git a/code/fms/fms-vue/pnpm-lock.yaml b/code/fms/fms-vue/pnpm-lock.yaml index 976300de..f741a37f 100644 --- a/code/fms/fms-vue/pnpm-lock.yaml +++ b/code/fms/fms-vue/pnpm-lock.yaml @@ -8,54 +8,138 @@ importers: .: dependencies: + '@antdv-next/icons': + specifier: 1.1.1 + version: 1.1.1(vue@3.5.39) + antdv-next: + specifier: ^1.4.2 + version: 1.4.2(vue@3.5.39) + pinia: + specifier: ^4.0.2 + version: 4.0.2(@vue/devtools-api@8.1.5)(vue@3.5.39) + pinia-plugin-persistedstate: + specifier: ^4.7.1 + version: 4.7.1(pinia@4.0.2(@vue/devtools-api@8.1.5)(vue@3.5.39)) vue: specifier: ^3.5.39 version: 3.5.39 + vue-router: + specifier: ^5.2.0 + version: 5.2.0(@vue/compiler-sfc@3.5.39)(pinia@4.0.2(@vue/devtools-api@8.1.5)(vue@3.5.39))(rolldown@1.1.5)(vite@8.1.4(jiti@2.7.0)(sass@1.101.0)(yaml@2.9.0))(vue@3.5.39) devDependencies: '@antdv-next/auto-import-resolver': specifier: ^1.1.0 - version: 1.1.0(unplugin-vue-components@32.1.0(rolldown@1.1.5)(vite@8.1.4)(vue@3.5.39)) + version: 1.1.0(unplugin-vue-components@32.1.0(rolldown@1.1.5)(vite@8.1.4(jiti@2.7.0)(sass@1.101.0)(yaml@2.9.0))(vue@3.5.39)) + '@antdv-next/tailwind': + specifier: ^1.1.1 + version: 1.1.1(tailwindcss@4.3.2) + '@tailwindcss/vite': + specifier: 4.3.2 + version: 4.3.2(vite@8.1.4(jiti@2.7.0)(sass@1.101.0)(yaml@2.9.0)) '@vitejs/plugin-vue': specifier: ^6.0.7 - version: 6.0.7(vite@8.1.4)(vue@3.5.39) + version: 6.0.7(vite@8.1.4(jiti@2.7.0)(sass@1.101.0)(yaml@2.9.0))(vue@3.5.39) oxfmt: specifier: ^0.58.0 version: 0.58.0 + sass: + specifier: ^1.101.0 + version: 1.101.0 + tailwindcss: + specifier: ^4.3.2 + version: 4.3.2 unplugin-auto-import: specifier: ^21.0.0 - version: 21.0.0 + version: 21.0.0(@vueuse/core@14.3.0(vue@3.5.39)) unplugin-vue-components: specifier: ^32.1.0 - version: 32.1.0(rolldown@1.1.5)(vite@8.1.4)(vue@3.5.39) + version: 32.1.0(rolldown@1.1.5)(vite@8.1.4(jiti@2.7.0)(sass@1.101.0)(yaml@2.9.0))(vue@3.5.39) vite: specifier: ^8.1.1 - version: 8.1.4 + version: 8.1.4(jiti@2.7.0)(sass@1.101.0)(yaml@2.9.0) packages: + '@ant-design/colors@7.2.1': + resolution: {integrity: sha512-lCHDcEzieu4GA3n8ELeZ5VQ8pKQAWcGGLRTQ50aQM2iqPpq2evTxER84jfdPvsPAtEcZ7m44NI45edFMo8oOYQ==} + + '@ant-design/colors@8.0.1': + resolution: {integrity: sha512-foPVl0+SWIslGUtD/xBr1p9U4AKzPhNYEseXYRRo5QSzGACYZrQbe11AYJbYfAWnWSpGBx6JjBmSeugUsD9vqQ==} + + '@ant-design/fast-color@2.0.6': + resolution: {integrity: sha512-y2217gk4NqL35giHl72o6Zzqji9O7vHh9YmhUVkPtAOpoTCH4uWxo/pr4VE8t0+ChEPs0qo4eJRC5Q1eXWo3vA==} + engines: {node: '>=8.x'} + + '@ant-design/fast-color@3.0.1': + resolution: {integrity: sha512-esKJegpW4nckh0o6kV3Tkb7NPIZYbPnnFxmQDUmL08ukXZAvV85TZBr70eGuke/CIArLaP6aw8lt9KILjnWuOw==} + engines: {node: '>=8.x'} + + '@ant-design/icons-svg@4.5.0': + resolution: {integrity: sha512-1BTUFyKPTBZ53MuTP8s0k5SFEXL7o3VHEOwLgzaoWKwnBeqIcqUtVshc4SKzhI6uACfqhJqBwBUE9FsWR3uULA==} + '@antdv-next/auto-import-resolver@1.1.0': resolution: {integrity: sha512-kX8/fYi2YnDJzymiZVqE9cbfL0dmGx23q/qLbVpU3/+/g0005Hd0zWIGyTUdNQDi5ci0i+6P4yOhpTDq47qYUA==} engines: {node: '>=20.19.0'} peerDependencies: unplugin-vue-components: '>=28.0.0' + '@antdv-next/cssinjs@1.0.6': + resolution: {integrity: sha512-8NL+AzjFZVHfG9A2l+r4rNWdRfbS5FFFozGU9jVl7WNgd7y+wEYSzl+qvRjJuqd3IryacrDfsTxIgcSQkVlr5Q==} + peerDependencies: + vue: '>=3.2.0' + + '@antdv-next/icons@1.1.1': + resolution: {integrity: sha512-SiblayeqWLW58funYgNVR8FaVDKNCZIbgRT3kTWZEag+UnNUOhaHRFj675u84IHACtUpmyLfMLysVnmfAljttg==} + peerDependencies: + vue: '>=3.2.0' + + '@antdv-next/tailwind@1.1.1': + resolution: {integrity: sha512-HuQmufVKulhGDvd0UCQmbL//2sDXi+2cHukKREo0XbBSsK49eIn+iWCjuPZIQbchc/eZmmuCdjxSKgNxlQYRRg==} + peerDependencies: + tailwindcss: '>=3.0.0' + + '@babel/generator@8.0.0': + resolution: {integrity: sha512-NT9NrVwJsbSV6Y2FSstWa71EETOnzrjkL5/wX3D2mYHtKM+qvqB1DvR4D0Setb/gDBsHzRICifwEWMO8CnTF6g==} + engines: {node: ^22.18.0 || >=24.11.0} + '@babel/helper-string-parser@7.29.7': resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@8.0.0': + resolution: {integrity: sha512-6mJgmFFFIIO82vvoLt9XtRC7/TkzXfts1t/SpRX4IHSzMgqoPYCWesVu1udUPUWioAE/2fcG6WuI8zrkE1gwrg==} + engines: {node: ^22.18.0 || >=24.11.0} + '@babel/helper-validator-identifier@7.29.7': resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@8.0.4': + resolution: {integrity: sha512-4wFaiLd0bVo4cIoTXI3zKI038NIWE/cr3jvBjejOVYVxV/m8Ltav1USiGzG1fmS5J2RhgEOgXNNK46cRPnRsrg==} + engines: {node: ^22.18.0 || >=24.11.0} + '@babel/parser@7.29.7': resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@8.0.4': + resolution: {integrity: sha512-srpptsAkEbbNIC/q8nT7o+m6CQe8CJUTV/t7MYc9NnWlgYVtHOb7JH6SorxMhN0kuRJjVqXbKClG6xSbPtzz+g==} + engines: {node: ^22.18.0 || >=24.11.0} + hasBin: true + + '@babel/runtime@7.29.7': + resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} + engines: {node: '>=6.9.0'} + '@babel/types@7.29.7': resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} + '@babel/types@8.0.4': + resolution: {integrity: sha512-eY+Yn3dCqTGmyiq2QRU66lA5FL8lqqqvecHt0fF3uHONIa7ToYsaCiWV8lOKqAs0Rb2SjixiKFROngnulPtt2g==} + engines: {node: ^22.18.0 || >=24.11.0} + '@emnapi/core@1.11.1': resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} @@ -65,6 +149,12 @@ packages: '@emnapi/wasi-threads@1.2.2': resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} + '@emotion/hash@0.8.0': + resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==} + + '@emotion/unitless@0.7.5': + resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} + '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -212,6 +302,94 @@ packages: cpu: [x64] os: [win32] + '@parcel/watcher-android-arm64@2.5.6': + resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.5.6': + resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.6': + resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.6': + resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.5.6': + resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-arm-musl@2.5.6': + resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + libc: [musl] + + '@parcel/watcher-linux-arm64-glibc@2.5.6': + resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-arm64-musl@2.5.6': + resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@parcel/watcher-linux-x64-glibc@2.5.6': + resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@parcel/watcher-linux-x64-musl@2.5.6': + resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@parcel/watcher-win32-arm64@2.5.6': + resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.5.6': + resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.5.6': + resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.5.6': + resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} + engines: {node: '>= 10.0.0'} + '@rolldown/binding-android-arm64@1.1.5': resolution: {integrity: sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -310,12 +488,326 @@ packages: '@rolldown/pluginutils@1.0.1': resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + '@tailwindcss/node@4.3.2': + resolution: {integrity: sha512-yWP/sqEcBLaD8JuA6zNwxoYKr75qxTioYwlRwekj5Jr/I5GXnoJfjetH/psLUIv74cYTH2lBUEzBkinthoYcBg==} + + '@tailwindcss/oxide-android-arm64@4.3.2': + resolution: {integrity: sha512-WHxqIuHpvZ5VtdX6GTl1Ik/Vp2YuN42Et+0CdeaVd/frQ9jAvGmvR8vLT+jk3e8/Q3x8kECB9+R17pgpp2BulA==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.3.2': + resolution: {integrity: sha512-GZypeUY/IDJW3877KeM+O67vbXr3MBnbtEL4aYhNErv/JWZhye2vGSWWG9tB6iiqR2MqRNkY8IOUy4NdSZV26w==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.3.2': + resolution: {integrity: sha512-UIIzmefR6KO1sDU7MzRqAxC8iBpft/VhkGjTjnhoS6k7Z3rQ9wEgA1ODSiyH/tcSYssulNm4Ci3hOeK1jH7ccQ==} + engines: {node: '>= 20'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.3.2': + resolution: {integrity: sha512-GN+uAmcI6DNspnCDwtOAZrTz6oukJnp337qZvxqCGLd3BHBzJpO0ZbTLRvJNdztOeAmTzewewGIMPb0tk2R4WA==} + engines: {node: '>= 20'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.2': + resolution: {integrity: sha512-4ABn7qSbdHRwTiDiuWNegCyb5+2FJ4vKIKc3DmKrvAFw7MU1Lm11dIkTPwUaFdTzc7IsOpDbqBrlh0x6y36U/w==} + engines: {node: '>= 20'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.3.2': + resolution: {integrity: sha512-wDgEIGwoM8w8pufh9LVt1PahDgNdKXrLC2qfAnV3vAmococ9RWbxeAw4pxPttd/TsJfwjyLf90Dg1y9y8I6Emw==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@tailwindcss/oxide-linux-arm64-musl@4.3.2': + resolution: {integrity: sha512-J5Nuk0uZQIiMTJj3LEx4sAA9tMFUoXQZFv1J6An+QGYe53HKRJuFDi0rpq/tuouCZeAbOBY3kQ6g8qeD4TUjtA==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@tailwindcss/oxide-linux-x64-gnu@4.3.2': + resolution: {integrity: sha512-kqCZpSKOBEJO4mz7OqWoofBZeXTAwaVGPj0ErAj7CojmhKpWVWVOnrt9dE8odoIraZq4oj3ausM37kXi+Tow8w==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@tailwindcss/oxide-linux-x64-musl@4.3.2': + resolution: {integrity: sha512-cixpqbh2toJDmkuCRI68nXA8ZxNmdK9Y+9v5h3MC3ZQKy/0BO8AWzlkWyRM7JAFSGBlfig4YVTPsK6MVgqz1uw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@tailwindcss/oxide-wasm32-wasi@4.3.2': + resolution: {integrity: sha512-4ec2Z/LOmRsAgU23CS4xeJfcJlmRg94A/XrbGRCF1gyU/zdDfRLYDVsS+ynSZCmGNxQ1jQriQOKMQeQxBA3Isw==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.3.2': + resolution: {integrity: sha512-Zyr/M0+XcYZu3bZrUytc7TXvrk0ftWfl8gN2MwekNDzhqhKRUucMPSeOzM0o0wH5AWOU49BsKRrfKxI2atCPMQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.3.2': + resolution: {integrity: sha512-QI9BO7KlNZsp2GuO0jwAAj5jCDABOKXRkCk2XuKTSaNEFSdfzqswYVTtCHBNKHLsqyjFyFkqlDiwkNbTYSssMQ==} + engines: {node: '>= 20'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.3.2': + resolution: {integrity: sha512-z8ZgnzX8gdNoWLBLqBPoh/sjnxkwvf9ZuWjnO0l0yIzbLa5/9S+eC5QxGZKRobVHIC3/1BoMWjHblqWjcgFgag==} + engines: {node: '>= 20'} + + '@tailwindcss/vite@4.3.2': + resolution: {integrity: sha512-eHpMeX4JXfVNJDEcsouTeCBubJBTcTLigeaw/NTUW6PB5ATKKXdyonnXgTBX2VuRbjz1hjfz6C5XAhr52ImQXA==} + peerDependencies: + vite: ^5.2.0 || ^6 || ^7 || ^8 + '@tybys/wasm-util@0.10.3': resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} '@types/estree@1.0.9': resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/jsesc@2.5.1': + resolution: {integrity: sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==} + + '@types/web-bluetooth@0.0.21': + resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} + + '@v-c/async-validator@1.0.1': + resolution: {integrity: sha512-2WXdbTso13119ZLiwUv1JkmdL0K4ll69id4oE3ft3LQX+YAHOoJtfx080u26lLtypgZS32PguoohgB0BVo39rg==} + + '@v-c/cascader@1.1.2': + resolution: {integrity: sha512-Aa0cXTo4J3d71NjSogjB1fG+yTBGIK5xt/oxqjy/jBcYo0mweOOLrtxSXl+86ZK7LIoWjEE+/MBxRwAR0R4l3w==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/checkbox@1.0.1': + resolution: {integrity: sha512-+QsE/0VfU6oeglwuHWYxRNTn3+eV08iG0uN/upDmqSGznezInzfUClh+t4acd/OxyJVtuob0WKsg/vPlT6WRWw==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/collapse@1.0.1': + resolution: {integrity: sha512-HL7Cec3HDVgefdx5AtAgWiibKHZJuKkB3l24eU5vLQ5quv+zswrPhJUr2Opx8LcTkfX9Yjwu1NcrZpf56z0Xhw==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/color-picker@1.0.6': + resolution: {integrity: sha512-XiTlEMG5p5jkCdKP7nbeo9EJrpdXnoW4uBOA2us8pVgA6m0GxrwMoCg//X+1XsuOaebG/1Swo65mjRuMBM6rZg==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/dialog@1.2.0': + resolution: {integrity: sha512-I+ODJyaWTp8/ePuPQUkay70J3wVwKrzG+Eo6k+cEuO7+J93v6tXjUVT//jeY6bhmiaeeGe8BSy9EK5RuBGxTpw==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/drawer@1.0.6': + resolution: {integrity: sha512-nW8rCsf7viUsTo+8SAfqcNDO4B0GC4n2VidHV4kJzbERrMvMsHVpDz1LO+UFgLs8Mn9EjpQm40JtF6d/BNkW0g==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/dropdown@1.0.4': + resolution: {integrity: sha512-HHIREYqHp5HR6R0Wwgw5jujxTnlhFWrVZS0/H8EQomeLAAJXWAnRxFvT6fWqaIo9S5JFPN7fbjE9vGjNjWzGng==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/image@1.0.12': + resolution: {integrity: sha512-SwGOHRSHPiAWlazy+vfwE3dIniIWQLXfl6R0SdlMFbUZ6mbklkym2KqJxj+ZL7psl4tpO+WsgU9IZDMBzXmFPw==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/input-number@1.0.6': + resolution: {integrity: sha512-eAL1JAVB9Yo5Yx6+92NPvlhipAHX+79XivK/3Yh2A+/aafWMsMp8p7+22CsnmlWP1uaQWy2vhgUBdmwAVqPRFA==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/input@1.1.1': + resolution: {integrity: sha512-rEqhP6ULovlFCMaLYlMC3axjSU2hlyBJs/+Bw2N+403H2nreJKjS82n6vgvl/9vMAwTHrkm/jdFxk78WwWDRxw==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/mentions@1.1.3': + resolution: {integrity: sha512-D0oJBs2eadW6Z0bhrWhg6VELMGl715HqCYD3gBdsBOWfS4z8cabkbDpj415lxa/IT7WUhgXZoheND144ZLFscQ==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/menu@1.2.2': + resolution: {integrity: sha512-1tAfBvwEKUzoak8YDq+RvdH+BvmtJKPDKfEkucLBp3RuEkjXWDvVKt3rF2e7E7qKN2wbKR20fyLC0mA70BaqbA==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/mini-decimal@1.0.1': + resolution: {integrity: sha512-76wZLdlkI017iDlaZMNOWZyDCv29YVabUJn5urQgIKtW4dnI5AkNXWtmLyhl/mu/OS7ZGisRi5ai/558QhLQxQ==} + + '@v-c/mutate-observer@1.0.2': + resolution: {integrity: sha512-btnmj0NezMcQ/vOlTlP9p47NBOa8q/CIYdDMrpM3W0JrmAHrkAUD7hiWypLXyBuiEko+SQc3U07rcm8StQ5qFA==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/notification@2.0.2': + resolution: {integrity: sha512-SkvQfZRuWdNaSAZQOoB12a/kvicpZ4X5lsyDObWyzOmkv5hrZioAixk2QgNhJ7b5jPYfjyYT8JfjeubjEk4BMQ==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/overflow@1.1.1': + resolution: {integrity: sha512-Q7EpThPBEa/+eIfacWhyZqfKQVPyDnAelswEXYsmFokXY/aeGkdFe8eUr3m3X5NKTNrFDWZiDDHyXEnInTpxQQ==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/pagination@1.0.1': + resolution: {integrity: sha512-lx8B/kjAA+ABGXSKpm92z5OjKb25UqNcDOUAc0PlYurKZYfn2JG+jTCDS2mGVHV/8PEjiIBT22Xv0XLh3blvIg==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/picker@1.2.2': + resolution: {integrity: sha512-HaM6cG9MjTfo/g2qFiRRTGfQ4Fb9MhoPrj4k486dJSEE0EFwVEdRDdHURbY10m491OAEFdg/ZwNrIl63SBQBcw==} + peerDependencies: + date-fns: '>= 2.x' + dayjs: '>= 1.x' + luxon: '>= 3.x' + moment: '>= 2.x' + vue: ^3.0.0 + peerDependenciesMeta: + date-fns: + optional: true + dayjs: + optional: true + luxon: + optional: true + moment: + optional: true + + '@v-c/portal@1.0.8': + resolution: {integrity: sha512-93elruWfHKrdtRkpFBNpi47YhQjA75tCuG8C/WvcQ9x/dp+H3i+y7h6t0iyyDjZu1w3d2U5+d43vtslmoQXBYg==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/progress@1.0.1': + resolution: {integrity: sha512-ZTaXBYfAASPSk9MD/tu3eZUCnB1UhK6s0G/F0AkNwvzPiVcR2kiiDZO12YpfmdZwUjcrg8U7miAg89aSUZ/aPw==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/qrcode@1.0.1': + resolution: {integrity: sha512-kPcpjgX5lEj6/vatJOqrUtqj5PGvcAYCs5CAu1kBO0B6FGnSuHM/JXlYQrmMNIOD1sI/GzgYIa9KL6mc8FCHJw==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/rate@1.0.1': + resolution: {integrity: sha512-ZWWY01LeKu9S/JncdvSr2gz2Kwwum3bB/AxzzCsuhCyg+9P4BLwX7S2WZDMiJ92uYEpiYladVTCa9XdSCPaCaQ==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/resize-observer@1.1.3': + resolution: {integrity: sha512-+b1VJCnUJzcbT/dthgo1GpiY98Y7QEDqI+BkZc/PquQx1cqVgRLEVU/n1vfDx8A6msgwjEAHPoBrPWSiNWZiQA==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/segmented@1.0.3': + resolution: {integrity: sha512-+XHRu0Oou6FSAQUjIPnEQLjQUIDhMYQ4eUh8nRpg/S5BCju32/bh8ycmyqrGpQ2z7o+s2ZjKS5vy2b81Lh6xUw==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/select@1.1.4': + resolution: {integrity: sha512-yYK2GZmlvi0fGyJLRdrwYWJHWyTdggiZhB8NnukRDc52tF5MUIPUzyD7TpTu0ScPPrazzfsyz1MC4yEBvMBAIw==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/slick@1.0.2': + resolution: {integrity: sha512-8BbPxJgYST+tio9jyeFQgJb/3XSFhfWZN8Am7YVYeqsYsvn3g8wu61UZNSjlkp9ArOEe+ujOgX4izfDHeXh4RA==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/slider@1.1.0': + resolution: {integrity: sha512-W11+HdY7JjpsZA+2x6ZcZLK/z/cwY+o3fbqzCgguWdKY8qwhA2CWQBd6SMidFa8F+L2HU/JupNx6Yu3cVw9piQ==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/steps@1.0.0': + resolution: {integrity: sha512-DPL0OOb8pDLlTPZB93b8+Saxiz6V5zEpGXKaCnsbXUuOhimkc7089AuEKfpMw+8x1SrVe+gapWf5RRHWXUm2pg==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/switch@1.0.1': + resolution: {integrity: sha512-dWMBfb5/8o3GFGvayyT576YWB6yPW8Aa2Ba5I9hXcYvuIH4JJ5NYI3WJqc8KpFMNA4Y4/MyVIY3NNsXyXa22bw==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/table@1.1.8': + resolution: {integrity: sha512-F/z+muG/aQ4+qZgVJbxp6DxdkZzje0iXKnAoiBpRURo90xr1xwv/eDIH6COvgTWsBPhT8l56t2ZiLAQRHIi4PA==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/tabs@1.2.1': + resolution: {integrity: sha512-rN8F+yFv6Wh7ZPDDY/vmVNh1QScpTErmY3HgdOFH96PrsunSvACCtE8R0Y0ZlbNPP3sIwVCykiyvtxVOstDHCg==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/textarea@1.1.0': + resolution: {integrity: sha512-+E2DZogCNHb/0Jf/DJLqX5BH22/HcdTcHo9dMjmS+X/NDRCGl1sQfeEa+7mGAWnYXAmL4RIS8PS6lwEn90inbA==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/tooltip@1.0.4': + resolution: {integrity: sha512-IXrZGi6HXBJmTjn/oKpP5b6A3TG1Aq6tE8FEtxVFuyksp0I2vdufsSMzkZihV2LzNzvO5lobGD8F+s9SwlJWBg==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/tour@1.1.1': + resolution: {integrity: sha512-q8OZjbRNR683xePlyG0Idn/PNWeMtz5MNr66ROnsBpVTY/eScjHUHqpNtJKbTvn2oj9iZf+SbJdpDWxxPh1ZiA==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/tree-select@1.1.1': + resolution: {integrity: sha512-jh0Wnj7iO8Exm5DFZHvfkdK1Jowxgs2bZ7/0C/2et9Ko9uUEEbJiDKxtEEKiiUNM8pRyUVVEYMNyndA1/HtMFw==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/tree@1.1.1': + resolution: {integrity: sha512-TIdW6DG92dC0gk02zjiqF0zKwRGccF0OQw8iOfBgLNk277HpLPLebUEN50VPGnTFB36Smc51/o4tCr1X6Bozwg==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/trigger@1.0.18': + resolution: {integrity: sha512-oPYinzigAzV5p+MWb+U4qrP777GmujKGWljWWXdpVbRhA4aJvfQzIGfnYL2nQqEIOJPUvzHLnxB+H/6+VDWoJg==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/upload@1.0.0': + resolution: {integrity: sha512-W92PNCD61aM/B5w8oUzHQSDHur1T8484726Ls0IoNMO5nPiF/15eEE3RuuI/t7xXQVP/fA06hNSwzXwGWdDg1w==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/util@1.0.21': + resolution: {integrity: sha512-OoWD9SHR9E4jHiP4YzQbYlpp4r9cCvR5QXEtLb8iO4xIc86/noR5f98m307kicULdte3MR4uK+O2sEoo5I2f0g==} + peerDependencies: + vue: ^3.0.0 + + '@v-c/virtual-list@1.1.0': + resolution: {integrity: sha512-EwOdJVe/lx5O8oKtHXZ7SR19GozuI4o70MN58uZfWrPkzOCiYs0flJslcveyVCxPrdqNE2t8XF3lPN+px1Fbqw==} + peerDependencies: + vue: ^3.0.0 + '@vitejs/plugin-vue@6.0.7': resolution: {integrity: sha512-km+p+XdSz9Sxm5rqUbqcSfZYaAniKxWBj1KURl+Jr7UaPvvX7BmaWMdP69I5rrFDeQGyxAG7NXdc57vz+snhWg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -323,6 +815,15 @@ packages: vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 vue: ^3.2.25 + '@vue-macros/common@3.1.3': + resolution: {integrity: sha512-pphnexn8CDKugcA4TYSKlg1XanBYPbILST+eZK9ZGqG8sVbNR5L0kXEpRqs8+iSznosHt/Jo2k1FGl0tnWIpyg==} + engines: {node: '>=20.19.0'} + peerDependencies: + vue: ^2.7.0 || ^3.2.25 + peerDependenciesMeta: + vue: + optional: true + '@vue/compiler-core@3.5.39': resolution: {integrity: sha512-16KBTEXAJCpDr0mwlw+AZyhu8iyC7R3S2vBwsI7QnWJU6X3WKc9VKeNEZpiMdZ569qWhz9574L3vV55qRL0Vtw==} @@ -335,6 +836,15 @@ packages: '@vue/compiler-ssr@3.5.39': resolution: {integrity: sha512-Ce7/wvwMHai74bdszfXExdazFigYnlF9zgCmEQUcM1j0fOymlouZ7XilTYNo8oUjhlnjYOZbGrcYKuqjz89Ucw==} + '@vue/devtools-api@8.1.5': + resolution: {integrity: sha512-YJipMVAKe5wT5CWf5kTYCaNV7NMNjFVxJkIkJaJ4W/nCxEBzlZzrOsYKeCymdCrFZmBS/+wTWFoUs3Jf/Q6XSQ==} + + '@vue/devtools-kit@8.1.5': + resolution: {integrity: sha512-FcSAxsi4eWuXLCB7Rv9lj0aIVHHPNVQ2BazGf4RJTc2JCqb4BQg0hk87ZFhminCfl+mD5OUI0rX2cgyu4kJOGA==} + + '@vue/devtools-shared@8.1.5': + resolution: {integrity: sha512-mhT4zcPFhF+Xk1O4BfhhrbXzpmfqY03fS6xGpcllbQG7lDjhQf8pQHcTIhqQIYx1hfwtHmk/6jM96ele0UxPqQ==} + '@vue/reactivity@3.5.39': resolution: {integrity: sha512-TpsuBJ9gGlZa5d23XcM2y8EXanz9dZeVDQBXRwzy46ItgvM+rWpzs+UVM0wcRLxGvcav0HE5jz2gNL53xlRAog==} @@ -352,15 +862,45 @@ packages: '@vue/shared@3.5.39': resolution: {integrity: sha512-l1rrBtBfTnmxvtsvdQDXltUUy8S1Y+ZaqdfUzmAnJkTd8Z8rv5v/ytW+TKiqEOWyHPoqtPlNFSs0lhRmYVSHVA==} + '@vueuse/core@14.3.0': + resolution: {integrity: sha512-aHfz47g0ZhMtTVHmIzMVpJy8ePhhOy68GY5bv110+5DVtZ+W7BsOx+m61UNQqfrWyPztIHIanWa3E2tib3NFIw==} + peerDependencies: + vue: ^3.5.0 + + '@vueuse/metadata@14.3.0': + resolution: {integrity: sha512-BwxmbAzwAVF50+MW57GXOUEV61nFBGnlBvrTqj49PqWJu3uw7hdu72ztXeZ33RdZtDY6kO+bfCAE1PCn88Tktw==} + + '@vueuse/shared@14.3.0': + resolution: {integrity: sha512-bZpge9eSXwa4ToSiqJ7j6KRwhAsneMFoSz3LMWKQDkqimm3D/tbFlrklrs/IOqC8tEcYmXQZJ6N0UrjhBirVCg==} + peerDependencies: + vue: ^3.5.0 + acorn@8.17.0: resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} engines: {node: '>=0.4.0'} hasBin: true + antdv-next@1.4.2: + resolution: {integrity: sha512-3hVPjxjuRN8gHQnmaZgPs5PYrwlkmX7pDDMdsrb1NUGdrF8qvUp4vpFb1B+eGkJRjfWKG1xxyyHw7jQsE8xprw==} + + ast-kit@2.2.0: + resolution: {integrity: sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw==} + engines: {node: '>=20.19.0'} + + ast-walker-scope@0.9.0: + resolution: {integrity: sha512-IJdzo2vLiElBxKzwS36VsCue/62d6IdWjnPB2v3nuPKeWGynp6FF/CYoLa5i/3jXH/z97ZDdsXz6abpgM6w07A==} + engines: {node: '>=20.19.0'} + + birpc@2.9.0: + resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==} + chokidar@5.0.0: resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} engines: {node: '>= 20.19.0'} + compute-scroll-into-view@3.1.1: + resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==} + confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} @@ -370,14 +910,27 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + dayjs@1.11.21: + resolution: {integrity: sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==} + + defu@6.1.7: + resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} + detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} + enhanced-resolve@5.21.6: + resolution: {integrity: sha512-aNnGCvbJ/RIyWo1IuhNdVjnNF+EjH9wpzpNHt+ci/m9He9LJvUN8wrCcXjp9cWsGNAuvSpVFTx/vraAFQ8qGjQ==} + engines: {node: '>=10.13.0'} + entities@7.0.1: resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} engines: {node: '>=0.12'} + es-toolkit@1.49.0: + resolution: {integrity: sha512-G5iZ6Pc/FNRY/soKZHC+TxGDD83rHUDXxzaWhGCX44vAv/tMs56WMusnm/KMNK+luUPsgA9U28cGr4RDlSzL2g==} + escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} @@ -405,9 +958,40 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + + immutable@5.1.9: + resolution: {integrity: sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + hasBin: true + js-tokens@9.0.1: resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + lightningcss-android-arm64@1.32.0: resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} engines: {node: '>= 12.0.0'} @@ -486,17 +1070,30 @@ packages: resolution: {integrity: sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q==} engines: {node: '>=14'} + magic-string-ast@1.0.3: + resolution: {integrity: sha512-CvkkH1i81zl7mmb94DsRiFeG9V2fR2JeuK8yDgS8oiZSFa++wWLEgZ5ufEOyLHbvSbD1gTRKv9NdX69Rnvr9JA==} + engines: {node: '>=20.19.0'} + magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} mlly@1.8.2: resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} + muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + nanoid@3.3.16: resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + + nostics@1.1.4: + resolution: {integrity: sha512-U4FApICSLCQ0dYiN59pxUCEZC053palQXi57yLaNdMaL6TBY4C4q3qZrJKUGcor2dGv8EhEwt8y5KvU2bo2kFg==} + obug@2.1.3: resolution: {integrity: sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==} engines: {node: '>=12.20.0'} @@ -517,6 +1114,9 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + perfect-debounce@2.1.0: + resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -524,6 +1124,30 @@ packages: resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} engines: {node: '>=12'} + pinia-plugin-persistedstate@4.7.1: + resolution: {integrity: sha512-WHOqh2esDlR3eAaknPbqXrkkj0D24h8shrDPqysgCFR6ghqP/fpFfJmMPJp0gETHsvrh9YNNg6dQfo2OEtDnIQ==} + peerDependencies: + '@nuxt/kit': '>=3.0.0' + '@pinia/nuxt': '>=0.10.0' + pinia: '>=3.0.0' + peerDependenciesMeta: + '@nuxt/kit': + optional: true + '@pinia/nuxt': + optional: true + pinia: + optional: true + + pinia@4.0.2: + resolution: {integrity: sha512-yKVVA7bSj5oRZFp/Ab9wLlmyb5gPUYEiIm4ryiWTe/xe7PtkRdMVOp1X1ggvq0c6Uj7Q0Du1HnV2mtAwM0Ks1g==} + peerDependencies: + '@vue/devtools-api': ^8.1.5 + typescript: '>=5.6.0' + vue: ^3.5.11 + peerDependenciesMeta: + typescript: + optional: true + pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} @@ -541,11 +1165,22 @@ packages: resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} engines: {node: '>= 20.19.0'} + resize-observer-polyfill@1.5.1: + resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} + rolldown@1.1.5: resolution: {integrity: sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true + sass@1.101.0: + resolution: {integrity: sha512-OL3GoQyoUdDt843DpVmDO6y2k1sc5IhUDSpu8XucEI+35neq5QivZ1iuegnpraEVTJXlQGK1gl27zKcTLEPbQw==} + engines: {node: '>=20.19.0'} + hasBin: true + + scroll-into-view-if-needed@3.1.0: + resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} + scule@1.3.0: resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} @@ -556,6 +1191,20 @@ packages: strip-literal@3.1.0: resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} + stylis@4.4.0: + resolution: {integrity: sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==} + + tailwindcss@4.3.2: + resolution: {integrity: sha512-WtctNNSH8A9jlMIqxzuYumOHU5uGZyRv0Q5svQl+oEPy5w84YpBxdb7MdqyiSPQge5jTJ6zFQLq0PFygdccSBA==} + + tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} + engines: {node: '>=6'} + + throttle-debounce@5.0.2: + resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==} + engines: {node: '>=12.22'} + tinyglobby@0.2.17: resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} @@ -680,6 +1329,24 @@ packages: yaml: optional: true + vue-router@5.2.0: + resolution: {integrity: sha512-QAC5i0LEb1GLG0LXDQmHu8L7FX12j0KwU/JTKmLQUJMrn04gQdKP6Du+p0QwpHb3iy71vBlqnHQ8WAfOSAWhqw==} + peerDependencies: + '@pinia/colada': '>=0.21.2' + '@vue/compiler-sfc': ^3.5.34 || ^4.0.0 + pinia: ^3.0.4 || ^4.0.2 + vite: ^7.3.0 || ^8.0.0 + vue: ^3.5.34 || ^4.0.0 + peerDependenciesMeta: + '@pinia/colada': + optional: true + '@vue/compiler-sfc': + optional: true + pinia: + optional: true + vite: + optional: true + vue@3.5.39: resolution: {integrity: sha512-xmZCYabFGcirU8r0fTuvl/LICc1OU620rnqepaJDL/a141ZigkG7AyaxQLdqJ02ZRYzWe6YPaDHeQx7MfknQfA==} peerDependencies: @@ -691,25 +1358,90 @@ packages: webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} + engines: {node: '>= 14.6'} + hasBin: true + snapshots: - '@antdv-next/auto-import-resolver@1.1.0(unplugin-vue-components@32.1.0(rolldown@1.1.5)(vite@8.1.4)(vue@3.5.39))': + '@ant-design/colors@7.2.1': dependencies: - unplugin-vue-components: 32.1.0(rolldown@1.1.5)(vite@8.1.4)(vue@3.5.39) + '@ant-design/fast-color': 2.0.6 + + '@ant-design/colors@8.0.1': + dependencies: + '@ant-design/fast-color': 3.0.1 + + '@ant-design/fast-color@2.0.6': + dependencies: + '@babel/runtime': 7.29.7 + + '@ant-design/fast-color@3.0.1': {} + + '@ant-design/icons-svg@4.5.0': {} + + '@antdv-next/auto-import-resolver@1.1.0(unplugin-vue-components@32.1.0(rolldown@1.1.5)(vite@8.1.4(jiti@2.7.0)(sass@1.101.0)(yaml@2.9.0))(vue@3.5.39))': + dependencies: + unplugin-vue-components: 32.1.0(rolldown@1.1.5)(vite@8.1.4(jiti@2.7.0)(sass@1.101.0)(yaml@2.9.0))(vue@3.5.39) + + '@antdv-next/cssinjs@1.0.6(vue@3.5.39)': + dependencies: + '@emotion/hash': 0.8.0 + '@emotion/unitless': 0.7.5 + '@v-c/util': 1.0.21(vue@3.5.39) + csstype: 3.2.3 + stylis: 4.4.0 + vue: 3.5.39 + + '@antdv-next/icons@1.1.1(vue@3.5.39)': + dependencies: + '@ant-design/colors': 7.2.1 + '@ant-design/icons-svg': 4.5.0 + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@antdv-next/tailwind@1.1.1(tailwindcss@4.3.2)': + dependencies: + tailwindcss: 4.3.2 + + '@babel/generator@8.0.0': + dependencies: + '@babel/parser': 8.0.4 + '@babel/types': 8.0.4 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + '@types/jsesc': 2.5.1 + jsesc: 3.1.0 '@babel/helper-string-parser@7.29.7': {} + '@babel/helper-string-parser@8.0.0': {} + '@babel/helper-validator-identifier@7.29.7': {} + '@babel/helper-validator-identifier@8.0.4': {} + '@babel/parser@7.29.7': dependencies: '@babel/types': 7.29.7 + '@babel/parser@8.0.4': + dependencies: + '@babel/types': 8.0.4 + + '@babel/runtime@7.29.7': {} + '@babel/types@7.29.7': dependencies: '@babel/helper-string-parser': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 + '@babel/types@8.0.4': + dependencies: + '@babel/helper-string-parser': 8.0.0 + '@babel/helper-validator-identifier': 8.0.4 + '@emnapi/core@1.11.1': dependencies: '@emnapi/wasi-threads': 1.2.2 @@ -726,6 +1458,10 @@ snapshots: tslib: 2.8.1 optional: true + '@emotion/hash@0.8.0': {} + + '@emotion/unitless@0.7.5': {} + '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -811,6 +1547,67 @@ snapshots: '@oxfmt/binding-win32-x64-msvc@0.58.0': optional: true + '@parcel/watcher-android-arm64@2.5.6': + optional: true + + '@parcel/watcher-darwin-arm64@2.5.6': + optional: true + + '@parcel/watcher-darwin-x64@2.5.6': + optional: true + + '@parcel/watcher-freebsd-x64@2.5.6': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-arm-musl@2.5.6': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.5.6': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.5.6': + optional: true + + '@parcel/watcher-linux-x64-musl@2.5.6': + optional: true + + '@parcel/watcher-win32-arm64@2.5.6': + optional: true + + '@parcel/watcher-win32-ia32@2.5.6': + optional: true + + '@parcel/watcher-win32-x64@2.5.6': + optional: true + + '@parcel/watcher@2.5.6': + dependencies: + detect-libc: 2.1.2 + is-glob: 4.0.3 + node-addon-api: 7.1.1 + picomatch: 4.0.5 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.6 + '@parcel/watcher-darwin-arm64': 2.5.6 + '@parcel/watcher-darwin-x64': 2.5.6 + '@parcel/watcher-freebsd-x64': 2.5.6 + '@parcel/watcher-linux-arm-glibc': 2.5.6 + '@parcel/watcher-linux-arm-musl': 2.5.6 + '@parcel/watcher-linux-arm64-glibc': 2.5.6 + '@parcel/watcher-linux-arm64-musl': 2.5.6 + '@parcel/watcher-linux-x64-glibc': 2.5.6 + '@parcel/watcher-linux-x64-musl': 2.5.6 + '@parcel/watcher-win32-arm64': 2.5.6 + '@parcel/watcher-win32-ia32': 2.5.6 + '@parcel/watcher-win32-x64': 2.5.6 + optional: true + '@rolldown/binding-android-arm64@1.1.5': optional: true @@ -862,6 +1659,74 @@ snapshots: '@rolldown/pluginutils@1.0.1': {} + '@tailwindcss/node@4.3.2': + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.21.6 + jiti: 2.7.0 + lightningcss: 1.32.0 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.3.2 + + '@tailwindcss/oxide-android-arm64@4.3.2': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.3.2': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.3.2': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.3.2': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.2': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.3.2': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.3.2': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.3.2': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.3.2': + optional: true + + '@tailwindcss/oxide-wasm32-wasi@4.3.2': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.3.2': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.3.2': + optional: true + + '@tailwindcss/oxide@4.3.2': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.3.2 + '@tailwindcss/oxide-darwin-arm64': 4.3.2 + '@tailwindcss/oxide-darwin-x64': 4.3.2 + '@tailwindcss/oxide-freebsd-x64': 4.3.2 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.2 + '@tailwindcss/oxide-linux-arm64-gnu': 4.3.2 + '@tailwindcss/oxide-linux-arm64-musl': 4.3.2 + '@tailwindcss/oxide-linux-x64-gnu': 4.3.2 + '@tailwindcss/oxide-linux-x64-musl': 4.3.2 + '@tailwindcss/oxide-wasm32-wasi': 4.3.2 + '@tailwindcss/oxide-win32-arm64-msvc': 4.3.2 + '@tailwindcss/oxide-win32-x64-msvc': 4.3.2 + + '@tailwindcss/vite@4.3.2(vite@8.1.4(jiti@2.7.0)(sass@1.101.0)(yaml@2.9.0))': + dependencies: + '@tailwindcss/node': 4.3.2 + '@tailwindcss/oxide': 4.3.2 + tailwindcss: 4.3.2 + vite: 8.1.4(jiti@2.7.0)(sass@1.101.0)(yaml@2.9.0) + '@tybys/wasm-util@0.10.3': dependencies: tslib: 2.8.1 @@ -869,10 +1734,266 @@ snapshots: '@types/estree@1.0.9': {} - '@vitejs/plugin-vue@6.0.7(vite@8.1.4)(vue@3.5.39)': + '@types/jsesc@2.5.1': {} + + '@types/web-bluetooth@0.0.21': {} + + '@v-c/async-validator@1.0.1': {} + + '@v-c/cascader@1.1.2(vue@3.5.39)': + dependencies: + '@v-c/select': 1.1.4(vue@3.5.39) + '@v-c/tree': 1.1.1(vue@3.5.39) + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/checkbox@1.0.1(vue@3.5.39)': + dependencies: + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/collapse@1.0.1(vue@3.5.39)': + dependencies: + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/color-picker@1.0.6(vue@3.5.39)': + dependencies: + '@ant-design/fast-color': 3.0.1 + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/dialog@1.2.0(vue@3.5.39)': + dependencies: + '@v-c/portal': 1.0.8(vue@3.5.39) + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/drawer@1.0.6(vue@3.5.39)': + dependencies: + '@v-c/portal': 1.0.8(vue@3.5.39) + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/dropdown@1.0.4(vue@3.5.39)': + dependencies: + '@v-c/trigger': 1.0.18(vue@3.5.39) + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/image@1.0.12(vue@3.5.39)': + dependencies: + '@v-c/portal': 1.0.8(vue@3.5.39) + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/input-number@1.0.6(vue@3.5.39)': + dependencies: + '@v-c/input': 1.1.1(vue@3.5.39) + '@v-c/mini-decimal': 1.0.1 + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/input@1.1.1(vue@3.5.39)': + dependencies: + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/mentions@1.1.3(vue@3.5.39)': + dependencies: + '@v-c/input': 1.1.1(vue@3.5.39) + '@v-c/menu': 1.2.2(vue@3.5.39) + '@v-c/textarea': 1.1.0(vue@3.5.39) + '@v-c/trigger': 1.0.18(vue@3.5.39) + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/menu@1.2.2(vue@3.5.39)': + dependencies: + '@v-c/overflow': 1.1.1(vue@3.5.39) + '@v-c/trigger': 1.0.18(vue@3.5.39) + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/mini-decimal@1.0.1': {} + + '@v-c/mutate-observer@1.0.2(vue@3.5.39)': + dependencies: + '@v-c/resize-observer': 1.1.3(vue@3.5.39) + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/notification@2.0.2(vue@3.5.39)': + dependencies: + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/overflow@1.1.1(vue@3.5.39)': + dependencies: + '@v-c/resize-observer': 1.1.3(vue@3.5.39) + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/pagination@1.0.1(vue@3.5.39)': + dependencies: + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/picker@1.2.2(dayjs@1.11.21)(vue@3.5.39)': + dependencies: + '@v-c/overflow': 1.1.1(vue@3.5.39) + '@v-c/resize-observer': 1.1.3(vue@3.5.39) + '@v-c/trigger': 1.0.18(vue@3.5.39) + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + optionalDependencies: + dayjs: 1.11.21 + + '@v-c/portal@1.0.8(vue@3.5.39)': + dependencies: + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/progress@1.0.1(vue@3.5.39)': + dependencies: + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/qrcode@1.0.1(vue@3.5.39)': + dependencies: + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/rate@1.0.1(vue@3.5.39)': + dependencies: + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/resize-observer@1.1.3(vue@3.5.39)': + dependencies: + '@v-c/util': 1.0.21(vue@3.5.39) + resize-observer-polyfill: 1.5.1 + vue: 3.5.39 + + '@v-c/segmented@1.0.3(vue@3.5.39)': + dependencies: + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/select@1.1.4(vue@3.5.39)': + dependencies: + '@v-c/overflow': 1.1.1(vue@3.5.39) + '@v-c/trigger': 1.0.18(vue@3.5.39) + '@v-c/util': 1.0.21(vue@3.5.39) + '@v-c/virtual-list': 1.1.0(vue@3.5.39) + vue: 3.5.39 + + '@v-c/slick@1.0.2(vue@3.5.39)': + dependencies: + '@v-c/util': 1.0.21(vue@3.5.39) + es-toolkit: 1.49.0 + vue: 3.5.39 + + '@v-c/slider@1.1.0(vue@3.5.39)': + dependencies: + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/steps@1.0.0(vue@3.5.39)': + dependencies: + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/switch@1.0.1(vue@3.5.39)': + dependencies: + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/table@1.1.8(vue@3.5.39)': + dependencies: + '@v-c/resize-observer': 1.1.3(vue@3.5.39) + '@v-c/util': 1.0.21(vue@3.5.39) + '@v-c/virtual-list': 1.1.0(vue@3.5.39) + vue: 3.5.39 + + '@v-c/tabs@1.2.1(vue@3.5.39)': + dependencies: + '@v-c/dropdown': 1.0.4(vue@3.5.39) + '@v-c/menu': 1.2.2(vue@3.5.39) + '@v-c/overflow': 1.1.1(vue@3.5.39) + '@v-c/resize-observer': 1.1.3(vue@3.5.39) + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/textarea@1.1.0(vue@3.5.39)': + dependencies: + '@v-c/input': 1.1.1(vue@3.5.39) + '@v-c/resize-observer': 1.1.3(vue@3.5.39) + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/tooltip@1.0.4(vue@3.5.39)': + dependencies: + '@v-c/trigger': 1.0.18(vue@3.5.39) + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/tour@1.1.1(vue@3.5.39)': + dependencies: + '@v-c/portal': 1.0.8(vue@3.5.39) + '@v-c/trigger': 1.0.18(vue@3.5.39) + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/tree-select@1.1.1(vue@3.5.39)': + dependencies: + '@v-c/select': 1.1.4(vue@3.5.39) + '@v-c/tree': 1.1.1(vue@3.5.39) + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/tree@1.1.1(vue@3.5.39)': + dependencies: + '@v-c/util': 1.0.21(vue@3.5.39) + '@v-c/virtual-list': 1.1.0(vue@3.5.39) + vue: 3.5.39 + + '@v-c/trigger@1.0.18(vue@3.5.39)': + dependencies: + '@v-c/portal': 1.0.8(vue@3.5.39) + '@v-c/resize-observer': 1.1.3(vue@3.5.39) + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/upload@1.0.0(vue@3.5.39)': + dependencies: + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@v-c/util@1.0.21(vue@3.5.39)': + dependencies: + vue: 3.5.39 + + '@v-c/virtual-list@1.1.0(vue@3.5.39)': + dependencies: + '@v-c/resize-observer': 1.1.3(vue@3.5.39) + '@v-c/util': 1.0.21(vue@3.5.39) + vue: 3.5.39 + + '@vitejs/plugin-vue@6.0.7(vite@8.1.4(jiti@2.7.0)(sass@1.101.0)(yaml@2.9.0))(vue@3.5.39)': dependencies: '@rolldown/pluginutils': 1.0.1 - vite: 8.1.4 + vite: 8.1.4(jiti@2.7.0)(sass@1.101.0)(yaml@2.9.0) + vue: 3.5.39 + + '@vue-macros/common@3.1.3(vue@3.5.39)': + dependencies: + '@vue/compiler-sfc': 3.5.39 + ast-kit: 2.2.0 + local-pkg: 1.2.1 + magic-string-ast: 1.0.3 + unplugin-utils: 0.3.2 + optionalDependencies: vue: 3.5.39 '@vue/compiler-core@3.5.39': @@ -905,6 +2026,19 @@ snapshots: '@vue/compiler-dom': 3.5.39 '@vue/shared': 3.5.39 + '@vue/devtools-api@8.1.5': + dependencies: + '@vue/devtools-kit': 8.1.5 + + '@vue/devtools-kit@8.1.5': + dependencies: + '@vue/devtools-shared': 8.1.5 + birpc: 2.9.0 + hookable: 5.5.3 + perfect-debounce: 2.1.0 + + '@vue/devtools-shared@8.1.5': {} + '@vue/reactivity@3.5.39': dependencies: '@vue/shared': 3.5.39 @@ -929,22 +2063,116 @@ snapshots: '@vue/shared@3.5.39': {} + '@vueuse/core@14.3.0(vue@3.5.39)': + dependencies: + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 14.3.0 + '@vueuse/shared': 14.3.0(vue@3.5.39) + vue: 3.5.39 + + '@vueuse/metadata@14.3.0': {} + + '@vueuse/shared@14.3.0(vue@3.5.39)': + dependencies: + vue: 3.5.39 + acorn@8.17.0: {} + antdv-next@1.4.2(vue@3.5.39): + dependencies: + '@ant-design/colors': 8.0.1 + '@ant-design/fast-color': 3.0.1 + '@antdv-next/cssinjs': 1.0.6(vue@3.5.39) + '@antdv-next/icons': 1.1.1(vue@3.5.39) + '@v-c/async-validator': 1.0.1 + '@v-c/cascader': 1.1.2(vue@3.5.39) + '@v-c/checkbox': 1.0.1(vue@3.5.39) + '@v-c/collapse': 1.0.1(vue@3.5.39) + '@v-c/color-picker': 1.0.6(vue@3.5.39) + '@v-c/dialog': 1.2.0(vue@3.5.39) + '@v-c/drawer': 1.0.6(vue@3.5.39) + '@v-c/dropdown': 1.0.4(vue@3.5.39) + '@v-c/image': 1.0.12(vue@3.5.39) + '@v-c/input': 1.1.1(vue@3.5.39) + '@v-c/input-number': 1.0.6(vue@3.5.39) + '@v-c/mentions': 1.1.3(vue@3.5.39) + '@v-c/menu': 1.2.2(vue@3.5.39) + '@v-c/mutate-observer': 1.0.2(vue@3.5.39) + '@v-c/notification': 2.0.2(vue@3.5.39) + '@v-c/pagination': 1.0.1(vue@3.5.39) + '@v-c/picker': 1.2.2(dayjs@1.11.21)(vue@3.5.39) + '@v-c/progress': 1.0.1(vue@3.5.39) + '@v-c/qrcode': 1.0.1(vue@3.5.39) + '@v-c/rate': 1.0.1(vue@3.5.39) + '@v-c/resize-observer': 1.1.3(vue@3.5.39) + '@v-c/segmented': 1.0.3(vue@3.5.39) + '@v-c/select': 1.1.4(vue@3.5.39) + '@v-c/slick': 1.0.2(vue@3.5.39) + '@v-c/slider': 1.1.0(vue@3.5.39) + '@v-c/steps': 1.0.0(vue@3.5.39) + '@v-c/switch': 1.0.1(vue@3.5.39) + '@v-c/table': 1.1.8(vue@3.5.39) + '@v-c/tabs': 1.2.1(vue@3.5.39) + '@v-c/textarea': 1.1.0(vue@3.5.39) + '@v-c/tooltip': 1.0.4(vue@3.5.39) + '@v-c/tour': 1.1.1(vue@3.5.39) + '@v-c/tree': 1.1.1(vue@3.5.39) + '@v-c/tree-select': 1.1.1(vue@3.5.39) + '@v-c/trigger': 1.0.18(vue@3.5.39) + '@v-c/upload': 1.0.0(vue@3.5.39) + '@v-c/util': 1.0.21(vue@3.5.39) + '@v-c/virtual-list': 1.1.0(vue@3.5.39) + '@vueuse/core': 14.3.0(vue@3.5.39) + dayjs: 1.11.21 + es-toolkit: 1.49.0 + scroll-into-view-if-needed: 3.1.0 + throttle-debounce: 5.0.2 + transitivePeerDependencies: + - date-fns + - luxon + - moment + - vue + + ast-kit@2.2.0: + dependencies: + '@babel/parser': 7.29.7 + pathe: 2.0.3 + + ast-walker-scope@0.9.0: + dependencies: + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + ast-kit: 2.2.0 + + birpc@2.9.0: {} + chokidar@5.0.0: dependencies: readdirp: 5.0.0 + compute-scroll-into-view@3.1.1: {} + confbox@0.1.8: {} confbox@0.2.4: {} csstype@3.2.3: {} + dayjs@1.11.21: {} + + defu@6.1.7: {} + detect-libc@2.1.2: {} + enhanced-resolve@5.21.6: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.3 + entities@7.0.1: {} + es-toolkit@1.49.0: {} + escape-string-regexp@5.0.0: {} estree-walker@2.0.2: {} @@ -962,8 +2190,28 @@ snapshots: fsevents@2.3.3: optional: true + graceful-fs@4.2.11: {} + + hookable@5.5.3: {} + + immutable@5.1.9: {} + + is-extglob@2.1.1: + optional: true + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + optional: true + + jiti@2.7.0: {} + js-tokens@9.0.1: {} + jsesc@3.1.0: {} + + json5@2.2.3: {} + lightningcss-android-arm64@1.32.0: optional: true @@ -1019,6 +2267,10 @@ snapshots: pkg-types: 2.3.1 quansync: 0.2.11 + magic-string-ast@1.0.3: + dependencies: + magic-string: 0.30.21 + magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -1030,8 +2282,15 @@ snapshots: pkg-types: 1.3.1 ufo: 1.6.4 + muggle-string@0.4.1: {} + nanoid@3.3.16: {} + node-addon-api@7.1.1: + optional: true + + nostics@1.1.4: {} + obug@2.1.3: {} oxfmt@0.58.0: @@ -1060,10 +2319,24 @@ snapshots: pathe@2.0.3: {} + perfect-debounce@2.1.0: {} + picocolors@1.1.1: {} picomatch@4.0.5: {} + pinia-plugin-persistedstate@4.7.1(pinia@4.0.2(@vue/devtools-api@8.1.5)(vue@3.5.39)): + dependencies: + defu: 6.1.7 + optionalDependencies: + pinia: 4.0.2(@vue/devtools-api@8.1.5)(vue@3.5.39) + + pinia@4.0.2(@vue/devtools-api@8.1.5)(vue@3.5.39): + dependencies: + '@vue/devtools-api': 8.1.5 + nostics: 1.1.4 + vue: 3.5.39 + pkg-types@1.3.1: dependencies: confbox: 0.1.8 @@ -1086,6 +2359,8 @@ snapshots: readdirp@5.0.0: {} + resize-observer-polyfill@1.5.1: {} + rolldown@1.1.5: dependencies: '@oxc-project/types': 0.139.0 @@ -1107,6 +2382,18 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.1.5 '@rolldown/binding-win32-x64-msvc': 1.1.5 + sass@1.101.0: + dependencies: + chokidar: 5.0.0 + immutable: 5.1.9 + source-map-js: 1.2.1 + optionalDependencies: + '@parcel/watcher': 2.5.6 + + scroll-into-view-if-needed@3.1.0: + dependencies: + compute-scroll-into-view: 3.1.1 + scule@1.3.0: {} source-map-js@1.2.1: {} @@ -1115,6 +2402,14 @@ snapshots: dependencies: js-tokens: 9.0.1 + stylis@4.4.0: {} + + tailwindcss@4.3.2: {} + + tapable@2.3.3: {} + + throttle-debounce@5.0.2: {} + tinyglobby@0.2.17: dependencies: fdir: 6.5.0(picomatch@4.0.5) @@ -1144,7 +2439,7 @@ snapshots: unplugin: 2.3.11 unplugin-utils: 0.3.2 - unplugin-auto-import@21.0.0: + unplugin-auto-import@21.0.0(@vueuse/core@14.3.0(vue@3.5.39)): dependencies: local-pkg: 1.2.1 magic-string: 0.30.21 @@ -1152,13 +2447,15 @@ snapshots: unimport: 5.7.0 unplugin: 2.3.11 unplugin-utils: 0.3.2 + optionalDependencies: + '@vueuse/core': 14.3.0(vue@3.5.39) unplugin-utils@0.3.2: dependencies: pathe: 2.0.3 picomatch: 4.0.5 - unplugin-vue-components@32.1.0(rolldown@1.1.5)(vite@8.1.4)(vue@3.5.39): + unplugin-vue-components@32.1.0(rolldown@1.1.5)(vite@8.1.4(jiti@2.7.0)(sass@1.101.0)(yaml@2.9.0))(vue@3.5.39): dependencies: chokidar: 5.0.0 local-pkg: 1.2.1 @@ -1167,7 +2464,7 @@ snapshots: obug: 2.1.3 picomatch: 4.0.5 tinyglobby: 0.2.17 - unplugin: 3.3.0(rolldown@1.1.5)(vite@8.1.4) + unplugin: 3.3.0(rolldown@1.1.5)(vite@8.1.4(jiti@2.7.0)(sass@1.101.0)(yaml@2.9.0)) unplugin-utils: 0.3.2 vue: 3.5.39 transitivePeerDependencies: @@ -1188,16 +2485,16 @@ snapshots: picomatch: 4.0.5 webpack-virtual-modules: 0.6.2 - unplugin@3.3.0(rolldown@1.1.5)(vite@8.1.4): + unplugin@3.3.0(rolldown@1.1.5)(vite@8.1.4(jiti@2.7.0)(sass@1.101.0)(yaml@2.9.0)): dependencies: '@jridgewell/remapping': 2.3.5 picomatch: 4.0.5 webpack-virtual-modules: 0.6.2 optionalDependencies: rolldown: 1.1.5 - vite: 8.1.4 + vite: 8.1.4(jiti@2.7.0)(sass@1.101.0)(yaml@2.9.0) - vite@8.1.4: + vite@8.1.4(jiti@2.7.0)(sass@1.101.0)(yaml@2.9.0): dependencies: lightningcss: 1.32.0 picomatch: 4.0.5 @@ -1206,6 +2503,44 @@ snapshots: tinyglobby: 0.2.17 optionalDependencies: fsevents: 2.3.3 + jiti: 2.7.0 + sass: 1.101.0 + yaml: 2.9.0 + + vue-router@5.2.0(@vue/compiler-sfc@3.5.39)(pinia@4.0.2(@vue/devtools-api@8.1.5)(vue@3.5.39))(rolldown@1.1.5)(vite@8.1.4(jiti@2.7.0)(sass@1.101.0)(yaml@2.9.0))(vue@3.5.39): + dependencies: + '@babel/generator': 8.0.0 + '@vue-macros/common': 3.1.3(vue@3.5.39) + '@vue/devtools-api': 8.1.5 + ast-walker-scope: 0.9.0 + chokidar: 5.0.0 + json5: 2.2.3 + local-pkg: 1.2.1 + magic-string: 0.30.21 + mlly: 1.8.2 + muggle-string: 0.4.1 + nostics: 1.1.4 + pathe: 2.0.3 + picomatch: 4.0.5 + scule: 1.3.0 + tinyglobby: 0.2.17 + unplugin: 3.3.0(rolldown@1.1.5)(vite@8.1.4(jiti@2.7.0)(sass@1.101.0)(yaml@2.9.0)) + unplugin-utils: 0.3.2 + vue: 3.5.39 + yaml: 2.9.0 + optionalDependencies: + '@vue/compiler-sfc': 3.5.39 + pinia: 4.0.2(@vue/devtools-api@8.1.5)(vue@3.5.39) + vite: 8.1.4(jiti@2.7.0)(sass@1.101.0)(yaml@2.9.0) + transitivePeerDependencies: + - '@farmfe/core' + - '@rspack/core' + - bun-types-no-globals + - esbuild + - rolldown + - rollup + - unloader + - webpack vue@3.5.39: dependencies: @@ -1216,3 +2551,5 @@ snapshots: '@vue/shared': 3.5.39 webpack-virtual-modules@0.6.2: {} + + yaml@2.9.0: {} diff --git a/code/fms/fms-vue/pnpm-workspace.yaml b/code/fms/fms-vue/pnpm-workspace.yaml new file mode 100644 index 00000000..575c48e4 --- /dev/null +++ b/code/fms/fms-vue/pnpm-workspace.yaml @@ -0,0 +1,5 @@ +allowBuilds: + "@parcel/watcher": true +minimumReleaseAgeExclude: + - pinia@4.0.2 + - vue-router@5.2.0 diff --git a/code/fms/fms-vue/src/App.vue b/code/fms/fms-vue/src/App.vue index 62ebe1b4..f5065806 100644 --- a/code/fms/fms-vue/src/App.vue +++ b/code/fms/fms-vue/src/App.vue @@ -1,7 +1,7 @@ - - diff --git a/code/fms/fms-vue/src/components/HelloWorld.vue b/code/fms/fms-vue/src/components/HelloWorld.vue deleted file mode 100644 index f91553de..00000000 --- a/code/fms/fms-vue/src/components/HelloWorld.vue +++ /dev/null @@ -1,95 +0,0 @@ - - - diff --git a/code/fms/fms-vue/src/layouts/DefaultLayout.vue b/code/fms/fms-vue/src/layouts/DefaultLayout.vue new file mode 100644 index 00000000..12dcd9f3 --- /dev/null +++ b/code/fms/fms-vue/src/layouts/DefaultLayout.vue @@ -0,0 +1,453 @@ + + + + + diff --git a/code/fms/fms-vue/src/main.js b/code/fms/fms-vue/src/main.js index 2425c0f7..be571869 100644 --- a/code/fms/fms-vue/src/main.js +++ b/code/fms/fms-vue/src/main.js @@ -1,5 +1,15 @@ -import { createApp } from 'vue' -import './style.css' -import App from './App.vue' +import { createApp } from "vue"; +import { createPinia } from "pinia"; +import piniaPluginPersistedstate from "pinia-plugin-persistedstate"; +import App from "./App.vue"; +import router from "./router"; +import "./styles/tailwind.css"; +import "./styles/main.scss"; -createApp(App).mount('#app') +const app = createApp(App); +const pinia = createPinia(); + +pinia.use(piniaPluginPersistedstate); +app.use(pinia); +app.use(router); +app.mount("#app"); diff --git a/code/fms/fms-vue/src/router/index.js b/code/fms/fms-vue/src/router/index.js new file mode 100644 index 00000000..2cd647f0 --- /dev/null +++ b/code/fms/fms-vue/src/router/index.js @@ -0,0 +1,82 @@ +import { createRouter, createWebHistory } from "vue-router"; + +const routes = [ + { + path: "/", + component: () => import("../layouts/DefaultLayout.vue"), + children: [ + { + path: "", + redirect: "/dashboard", + }, + { + path: "dashboard", + name: "dashboard", + component: () => import("../views/DashboardView.vue"), + meta: { title: "工作台", menuKey: "/dashboard" }, + }, + { + path: "business/orders", + name: "business-orders", + component: () => import("../views/DataListView.vue"), + meta: { + title: "业务单据", + section: "业务管理", + menuKey: "/business/orders", + source: "v_bs_business", + }, + }, + { + path: "fees/receivable", + name: "fees-receivable", + component: () => import("../views/DataListView.vue"), + meta: { + title: "应收费用", + section: "费用管理", + menuKey: "/fees/receivable", + source: "v_fee_receivable", + }, + }, + { + path: "reports/operations", + name: "reports-operations", + component: () => import("../views/DataListView.vue"), + meta: { + title: "运营报表", + section: "报表中心", + menuKey: "/reports/operations", + source: "v_report_operations", + }, + }, + { + path: "system/users", + name: "system-users", + component: () => import("../views/DataListView.vue"), + meta: { + title: "用户管理", + section: "系统设置", + menuKey: "/system/users", + source: "sys_user", + }, + }, + ], + }, + { + path: "/:pathMatch(.*)*", + redirect: "/dashboard", + }, +]; + +const router = createRouter({ + history: createWebHistory(), + routes, + scrollBehavior: () => ({ top: 0 }), +}); + +router.beforeEach((to) => { + document.title = to.meta.title ? `${to.meta.title} - FMS 管理系统` : "FMS 管理系统"; + + return true; +}); + +export default router; diff --git a/code/fms/fms-vue/src/services/api.js b/code/fms/fms-vue/src/services/api.js new file mode 100644 index 00000000..425bd49f --- /dev/null +++ b/code/fms/fms-vue/src/services/api.js @@ -0,0 +1,22 @@ +import { post } from "./http"; + +export const authApi = { + login(credentials) { + return post("/api/auth/login", credentials); + }, +}; + +export const dataApi = { + loadData(params) { + return post("/api/data/loaddata", params); + }, + loadDataBySql(sql) { + return post("/api/data/loaddatabysql", { sql }); + }, + page(params) { + return post("/api/data/page", params); + }, + saveObject(tables) { + return post("/api/data/saveobjt", { tables }); + }, +}; diff --git a/code/fms/fms-vue/src/services/http.js b/code/fms/fms-vue/src/services/http.js new file mode 100644 index 00000000..839b2d7e --- /dev/null +++ b/code/fms/fms-vue/src/services/http.js @@ -0,0 +1,40 @@ +import { useAuthStore } from "../stores/auth"; + +const API_BASE_URL = import.meta.env.VITE_API_BASE_URL ?? ""; + +export async function request(path, options = {}) { + const authStore = useAuthStore(); + const headers = new Headers(options.headers); + + headers.set("Accept", "application/json"); + if (options.body && !headers.has("Content-Type")) { + headers.set("Content-Type", "application/json"); + } + if (authStore.token) { + headers.set("Authorization", `Bearer ${authStore.token}`); + } + + const response = await fetch(`${API_BASE_URL}${path}`, { + ...options, + headers, + }); + const payload = await response.json().catch(() => null); + + if (!response.ok) { + if (response.status === 401) authStore.clearSession(); + throw new Error(payload?.message ?? `请求失败 (${response.status})`); + } + + if (payload?.code !== undefined && payload.code !== 0) { + throw new Error(payload.message ?? "请求失败"); + } + + return payload?.data ?? payload; +} + +export function post(path, body) { + return request(path, { + method: "POST", + body: JSON.stringify(body), + }); +} diff --git a/code/fms/fms-vue/src/stores/app.js b/code/fms/fms-vue/src/stores/app.js new file mode 100644 index 00000000..fe8c95c5 --- /dev/null +++ b/code/fms/fms-vue/src/stores/app.js @@ -0,0 +1,29 @@ +import { defineStore } from "pinia"; + +export const useAppStore = defineStore("app", { + state: () => ({ + locale: "zh-CN", + sidebarCollapsed: false, + visitedTabs: [{ key: "/dashboard", label: "工作台", closable: false }], + }), + actions: { + toggleSidebar() { + this.sidebarCollapsed = !this.sidebarCollapsed; + }, + setLocale(locale) { + this.locale = locale; + }, + addVisitedTab(tab) { + if (!this.visitedTabs.some((item) => item.key === tab.key)) { + this.visitedTabs.push(tab); + } + }, + removeVisitedTab(key) { + this.visitedTabs = this.visitedTabs.filter((item) => item.key !== key); + }, + }, + persist: { + key: "fms-app", + pick: ["locale", "sidebarCollapsed", "visitedTabs"], + }, +}); diff --git a/code/fms/fms-vue/src/stores/auth.js b/code/fms/fms-vue/src/stores/auth.js new file mode 100644 index 00000000..d8dedb68 --- /dev/null +++ b/code/fms/fms-vue/src/stores/auth.js @@ -0,0 +1,39 @@ +import { computed, ref } from "vue"; +import { defineStore } from "pinia"; + +export const useAuthStore = defineStore( + "auth", + () => { + const token = ref(""); + const orgid = ref(""); + const user = ref(null); + const isAuthenticated = computed(() => Boolean(token.value)); + + function setSession(payload, organization) { + token.value = payload.token ?? payload.access_token ?? ""; + orgid.value = payload.orgid ?? organization; + user.value = payload.user ?? payload.user_info ?? null; + } + + function clearSession() { + token.value = ""; + orgid.value = ""; + user.value = null; + } + + return { + token, + orgid, + user, + isAuthenticated, + setSession, + clearSession, + }; + }, + { + persist: { + key: "fms-auth", + pick: ["token", "orgid", "user"], + }, + }, +); diff --git a/code/fms/fms-vue/src/style.css b/code/fms/fms-vue/src/style.css deleted file mode 100644 index 527d4fba..00000000 --- a/code/fms/fms-vue/src/style.css +++ /dev/null @@ -1,296 +0,0 @@ -:root { - --text: #6b6375; - --text-h: #08060d; - --bg: #fff; - --border: #e5e4e7; - --code-bg: #f4f3ec; - --accent: #aa3bff; - --accent-bg: rgba(170, 59, 255, 0.1); - --accent-border: rgba(170, 59, 255, 0.5); - --social-bg: rgba(244, 243, 236, 0.5); - --shadow: - rgba(0, 0, 0, 0.1) 0 10px 15px -3px, rgba(0, 0, 0, 0.05) 0 4px 6px -2px; - - --sans: system-ui, 'Segoe UI', Roboto, sans-serif; - --heading: system-ui, 'Segoe UI', Roboto, sans-serif; - --mono: ui-monospace, Consolas, monospace; - - font: 18px/145% var(--sans); - letter-spacing: 0.18px; - color-scheme: light dark; - color: var(--text); - background: var(--bg); - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - - @media (max-width: 1024px) { - font-size: 16px; - } -} - -@media (prefers-color-scheme: dark) { - :root { - --text: #9ca3af; - --text-h: #f3f4f6; - --bg: #16171d; - --border: #2e303a; - --code-bg: #1f2028; - --accent: #c084fc; - --accent-bg: rgba(192, 132, 252, 0.15); - --accent-border: rgba(192, 132, 252, 0.5); - --social-bg: rgba(47, 48, 58, 0.5); - --shadow: - rgba(0, 0, 0, 0.4) 0 10px 15px -3px, rgba(0, 0, 0, 0.25) 0 4px 6px -2px; - } - - #social .button-icon { - filter: invert(1) brightness(2); - } -} - -body { - margin: 0; -} - -h1, -h2 { - font-family: var(--heading); - font-weight: 500; - color: var(--text-h); -} - -h1 { - font-size: 56px; - letter-spacing: -1.68px; - margin: 32px 0; - @media (max-width: 1024px) { - font-size: 36px; - margin: 20px 0; - } -} -h2 { - font-size: 24px; - line-height: 118%; - letter-spacing: -0.24px; - margin: 0 0 8px; - @media (max-width: 1024px) { - font-size: 20px; - } -} -p { - margin: 0; -} - -code, -.counter { - font-family: var(--mono); - display: inline-flex; - border-radius: 4px; - color: var(--text-h); -} - -code { - font-size: 15px; - line-height: 135%; - padding: 4px 8px; - background: var(--code-bg); -} - -.counter { - font-size: 16px; - padding: 5px 10px; - border-radius: 5px; - color: var(--accent); - background: var(--accent-bg); - border: 2px solid transparent; - transition: border-color 0.3s; - margin-bottom: 24px; - - &:hover { - border-color: var(--accent-border); - } - &:focus-visible { - outline: 2px solid var(--accent); - outline-offset: 2px; - } -} - -.hero { - position: relative; - - .base, - .framework, - .vite { - inset-inline: 0; - margin: 0 auto; - } - - .base { - width: 170px; - position: relative; - z-index: 0; - } - - .framework, - .vite { - position: absolute; - } - - .framework { - z-index: 1; - top: 34px; - height: 28px; - transform: perspective(2000px) rotateZ(300deg) rotateX(44deg) rotateY(39deg) - scale(1.4); - } - - .vite { - z-index: 0; - top: 107px; - height: 26px; - width: auto; - transform: perspective(2000px) rotateZ(300deg) rotateX(40deg) rotateY(39deg) - scale(0.8); - } -} - -#app { - width: 1126px; - max-width: 100%; - margin: 0 auto; - text-align: center; - border-inline: 1px solid var(--border); - min-height: 100svh; - display: flex; - flex-direction: column; - box-sizing: border-box; -} - -#center { - display: flex; - flex-direction: column; - gap: 25px; - place-content: center; - place-items: center; - flex-grow: 1; - - @media (max-width: 1024px) { - padding: 32px 20px 24px; - gap: 18px; - } -} - -#next-steps { - display: flex; - border-top: 1px solid var(--border); - text-align: left; - - & > div { - flex: 1 1 0; - padding: 32px; - @media (max-width: 1024px) { - padding: 24px 20px; - } - } - - .icon { - margin-bottom: 16px; - width: 22px; - height: 22px; - } - - @media (max-width: 1024px) { - flex-direction: column; - text-align: center; - } -} - -#docs { - border-right: 1px solid var(--border); - - @media (max-width: 1024px) { - border-right: none; - border-bottom: 1px solid var(--border); - } -} - -#next-steps ul { - list-style: none; - padding: 0; - display: flex; - gap: 8px; - margin: 32px 0 0; - - .logo { - height: 18px; - } - - a { - color: var(--text-h); - font-size: 16px; - border-radius: 6px; - background: var(--social-bg); - display: flex; - padding: 6px 12px; - align-items: center; - gap: 8px; - text-decoration: none; - transition: box-shadow 0.3s; - - &:hover { - box-shadow: var(--shadow); - } - .button-icon { - height: 18px; - width: 18px; - } - } - - @media (max-width: 1024px) { - margin-top: 20px; - flex-wrap: wrap; - justify-content: center; - - li { - flex: 1 1 calc(50% - 8px); - } - - a { - width: 100%; - justify-content: center; - box-sizing: border-box; - } - } -} - -#spacer { - height: 88px; - border-top: 1px solid var(--border); - @media (max-width: 1024px) { - height: 48px; - } -} - -.ticks { - position: relative; - width: 100%; - - &::before, - &::after { - content: ''; - position: absolute; - top: -4.5px; - border: 5px solid transparent; - } - - &::before { - left: 0; - border-left-color: var(--border); - } - &::after { - right: 0; - border-right-color: var(--border); - } -} diff --git a/code/fms/fms-vue/src/styles/main.scss b/code/fms/fms-vue/src/styles/main.scss new file mode 100644 index 00000000..f36397ce --- /dev/null +++ b/code/fms/fms-vue/src/styles/main.scss @@ -0,0 +1,60 @@ +:root { + color: #1f2329; + background: #f5f7fa; + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +* { + box-sizing: border-box; +} + +html, +body, +#app, +.ant-app, +.theme-root { + min-height: 100%; + margin: 0; +} + +body { + min-width: 1200px; +} + +button, +input, +textarea, +select { + font: inherit; +} + +a { + text-decoration: none; +} + +.theme-root { + --fms-bg: #f5f7fa; + --fms-surface: #ffffff; + --fms-border: #e5e8eb; + --fms-hover: #f2f3f5; + --fms-text: #1f2329; + --fms-text-secondary: #646a73; + --fms-shadow: 0 4px 12px rgb(31 35 41 / 6%); + + color: var(--fms-text); + background: var(--fms-bg); +} + +@media (prefers-reduced-motion: reduce) { + *, + *::before, + *::after { + scroll-behavior: auto !important; + transition-duration: 0.01ms !important; + animation-duration: 0.01ms !important; + animation-iteration-count: 1 !important; + } +} diff --git a/code/fms/fms-vue/src/styles/tailwind.css b/code/fms/fms-vue/src/styles/tailwind.css new file mode 100644 index 00000000..b7daa069 --- /dev/null +++ b/code/fms/fms-vue/src/styles/tailwind.css @@ -0,0 +1,2 @@ +@import "tailwindcss"; +@import "@antdv-next/tailwind/compat.css"; diff --git a/code/fms/fms-vue/src/views/DashboardView.vue b/code/fms/fms-vue/src/views/DashboardView.vue new file mode 100644 index 00000000..c97b336e --- /dev/null +++ b/code/fms/fms-vue/src/views/DashboardView.vue @@ -0,0 +1,218 @@ + + + + + diff --git a/code/fms/fms-vue/src/views/DataListView.vue b/code/fms/fms-vue/src/views/DataListView.vue new file mode 100644 index 00000000..55d9b0a1 --- /dev/null +++ b/code/fms/fms-vue/src/views/DataListView.vue @@ -0,0 +1,140 @@ + + + + + diff --git a/code/fms/fms-vue/src/views/LoginView.vue b/code/fms/fms-vue/src/views/LoginView.vue new file mode 100644 index 00000000..2644cd2f --- /dev/null +++ b/code/fms/fms-vue/src/views/LoginView.vue @@ -0,0 +1,158 @@ + + + + + diff --git a/code/fms/fms-vue/vite.config.js b/code/fms/fms-vue/vite.config.js index aa792ec8..fa8b0453 100644 --- a/code/fms/fms-vue/vite.config.js +++ b/code/fms/fms-vue/vite.config.js @@ -1,14 +1,16 @@ -import { defineConfig } from 'vite' -import vue from '@vitejs/plugin-vue' -import { AntdvNextResolver } from '@antdv-next/auto-import-resolver' -import Components from 'unplugin-vue-components/vite' +import { defineConfig } from "vite"; +import vue from "@vitejs/plugin-vue"; +import tailwindcss from "@tailwindcss/vite"; +import { AntdvNextResolver } from "@antdv-next/auto-import-resolver"; +import Components from "unplugin-vue-components/vite"; // https://vite.dev/config/ export default defineConfig({ - plugins: [vue(), - + plugins: [ + tailwindcss(), + vue(), Components({ resolvers: [AntdvNextResolver()], }), ], -}) +});