feat:更新知识库对话框

This commit is contained in:
2026-07-28 19:50:21 +08:00
parent 0d196edd28
commit efa27f126d
10 changed files with 337 additions and 403 deletions

View File

@@ -9,6 +9,7 @@
"preview": "vite preview" "preview": "vite preview"
}, },
"dependencies": { "dependencies": {
"@vueup/vue-quill": "^1.5.5",
"axios": "^1.18.1", "axios": "^1.18.1",
"element-plus": "^2.14.3", "element-plus": "^2.14.3",
"pinia": "^4.0.2", "pinia": "^4.0.2",

394
pnpm-lock.yaml generated
View File

@@ -8,6 +8,9 @@ importers:
.: .:
dependencies: dependencies:
'@vueup/vue-quill':
specifier: ^1.5.5
version: 1.5.5(vue@3.5.40(typescript@6.0.3))
axios: axios:
specifier: ^1.18.1 specifier: ^1.18.1
version: 1.18.1 version: 1.18.1
@@ -16,13 +19,13 @@ importers:
version: 2.14.3(vue@3.5.40(typescript@6.0.3)) version: 2.14.3(vue@3.5.40(typescript@6.0.3))
pinia: pinia:
specifier: ^4.0.2 specifier: ^4.0.2
version: 4.0.2(@vue/devtools-api@8.2.0)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)) version: 4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3))
vue: vue:
specifier: ^3.5.39 specifier: ^3.5.39
version: 3.5.40(typescript@6.0.3) version: 3.5.40(typescript@6.0.3)
vue-router: vue-router:
specifier: ^5.2.0 specifier: ^5.2.0
version: 5.2.0(@vue/compiler-sfc@3.5.40)(pinia@4.0.2(@vue/devtools-api@8.2.0)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.1.5)(vite@8.1.5(@types/node@24.13.3)(sass-embedded@1.100.0)(sass@1.102.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) version: 5.2.0(@vue/compiler-sfc@3.5.40)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.1.5)(vite@8.1.5(@types/node@24.13.3)(sass@1.102.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))
vue3-eslint: vue3-eslint:
specifier: git+https://gitee.com/Cxx0822/vue3-eslint specifier: git+https://gitee.com/Cxx0822/vue3-eslint
version: git+https://gitee.com/Cxx0822/vue3-eslint#849a4e0e783d3ecc57035fb2f92950998b6b2e41(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@7.32.0)(typescript@6.0.3))(eslint@7.32.0)(typescript@6.0.3))(@typescript-eslint/parser@5.62.0(eslint@7.32.0)(typescript@6.0.3))(eslint-config-standard@16.0.3(eslint-plugin-import@2.32.0(@typescript-eslint/parser@5.62.0(eslint@7.32.0)(typescript@6.0.3))(eslint@7.32.0))(eslint-plugin-node@11.1.0(eslint@7.32.0))(eslint-plugin-promise@5.2.0(eslint@7.32.0))(eslint@7.32.0))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@5.62.0(eslint@7.32.0)(typescript@6.0.3))(eslint@7.32.0))(eslint-plugin-node@11.1.0(eslint@7.32.0))(eslint-plugin-promise@5.2.0(eslint@7.32.0))(eslint-plugin-vue@8.7.1(eslint@7.32.0))(eslint@7.32.0) version: git+https://gitee.com/Cxx0822/vue3-eslint#849a4e0e783d3ecc57035fb2f92950998b6b2e41(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@7.32.0)(typescript@6.0.3))(eslint@7.32.0)(typescript@6.0.3))(@typescript-eslint/parser@5.62.0(eslint@7.32.0)(typescript@6.0.3))(eslint-config-standard@16.0.3(eslint-plugin-import@2.32.0(@typescript-eslint/parser@5.62.0(eslint@7.32.0)(typescript@6.0.3))(eslint@7.32.0))(eslint-plugin-node@11.1.0(eslint@7.32.0))(eslint-plugin-promise@5.2.0(eslint@7.32.0))(eslint@7.32.0))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@5.62.0(eslint@7.32.0)(typescript@6.0.3))(eslint@7.32.0))(eslint-plugin-node@11.1.0(eslint@7.32.0))(eslint-plugin-promise@5.2.0(eslint@7.32.0))(eslint-plugin-vue@8.7.1(eslint@7.32.0))(eslint@7.32.0)
@@ -32,7 +35,7 @@ importers:
version: 24.13.3 version: 24.13.3
'@vitejs/plugin-vue': '@vitejs/plugin-vue':
specifier: ^6.0.7 specifier: ^6.0.7
version: 6.0.8(vite@8.1.5(@types/node@24.13.3)(sass-embedded@1.100.0)(sass@1.102.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)) version: 6.0.8(vite@8.1.5(@types/node@24.13.3)(sass@1.102.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))
'@vue/tsconfig': '@vue/tsconfig':
specifier: ^0.9.1 specifier: ^0.9.1
version: 0.9.1(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)) version: 0.9.1(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3))
@@ -44,7 +47,7 @@ importers:
version: 6.0.3 version: 6.0.3
vite: vite:
specifier: ^8.1.1 specifier: ^8.1.1
version: 8.1.5(@types/node@24.13.3)(sass-embedded@1.100.0)(sass@1.102.0)(yaml@2.9.0) version: 8.1.5(@types/node@24.13.3)(sass@1.102.0)(yaml@2.9.0)
vue-tsc: vue-tsc:
specifier: ^3.3.5 specifier: ^3.3.5
version: 3.3.8(typescript@6.0.3) version: 3.3.8(typescript@6.0.3)
@@ -96,9 +99,6 @@ packages:
resolution: {integrity: sha512-eY+Yn3dCqTGmyiq2QRU66lA5FL8lqqqvecHt0fF3uHONIa7ToYsaCiWV8lOKqAs0Rb2SjixiKFROngnulPtt2g==} resolution: {integrity: sha512-eY+Yn3dCqTGmyiq2QRU66lA5FL8lqqqvecHt0fF3uHONIa7ToYsaCiWV8lOKqAs0Rb2SjixiKFROngnulPtt2g==}
engines: {node: ^22.18.0 || >=24.11.0} engines: {node: ^22.18.0 || >=24.11.0}
'@bufbuild/protobuf@2.13.0':
resolution: {integrity: sha512-acq7c49vxfm1ggJ95P70TX7ABDM0vxr1SYD3BB0o0jnBLB4OAqeHyKuN+cD3w80gXEDQ2zxHpR6CUeA+O/aU9g==}
'@ctrl/tinycolor@4.2.0': '@ctrl/tinycolor@4.2.0':
resolution: {integrity: sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==} resolution: {integrity: sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==}
engines: {node: '>=14'} engines: {node: '>=14'}
@@ -494,14 +494,14 @@ packages:
'@vue/compiler-ssr@3.5.40': '@vue/compiler-ssr@3.5.40':
resolution: {integrity: sha512-rrE5xiXG663+vHCHa3J9p2z5OcBRjXmoqenprJxAFQxg5pSshzeBiCE6pu46axapRJ2Adk0YDA2BRZVjiHXnhg==} resolution: {integrity: sha512-rrE5xiXG663+vHCHa3J9p2z5OcBRjXmoqenprJxAFQxg5pSshzeBiCE6pu46axapRJ2Adk0YDA2BRZVjiHXnhg==}
'@vue/devtools-api@8.2.0': '@vue/devtools-api@8.2.1':
resolution: {integrity: sha512-wsa2juekhKh6xni3yrcPYYALoXLCiOVDvLxJ6dLXGBBJdzLwFsygNzqdLeIxBkoWeoTN1bQpXmMDxWdX5mDeAg==} resolution: {integrity: sha512-6u4vXBlIBAC1wMplIZgpyPn7uh/s4Bf6F5bMzvLv+EdJ0aHs/+4B7Ygv864EStQSjRbsRzTko/kUG1A1IejQ3A==}
'@vue/devtools-kit@8.2.0': '@vue/devtools-kit@8.2.1':
resolution: {integrity: sha512-6NVyj/npe412N3Tshpr9eSCzuhup6jlkVYXi0bEolIxfdqEYccVdNyqR7dvpYFMB+FmDEUaO8waMa8og/1MokA==} resolution: {integrity: sha512-FIGIuq3AWReEpbAHY/cRGeHDfI0qOb8OCQ3YjbEAX04uaxIDbGc9rhkbVcG7rnfHPXE3RsU5KrWOu9V/okd8AQ==}
'@vue/devtools-shared@8.2.0': '@vue/devtools-shared@8.2.1':
resolution: {integrity: sha512-Cc+nxAI3J49IRS9subfx+6gGokeS970/nCz8VvOWp1iBt45WAfOy18+KcDaAvEiUqV3yn5AadA22PwcOLkvqpg==} resolution: {integrity: sha512-Fkac7lUdGReh6pVOi3AYPRGe82LQqRmAfThW7RRligOAP0ZA/Z1z9XLHDM9dv34pV2HRc79DK8uKPeG2fLnA/g==}
'@vue/language-core@3.3.8': '@vue/language-core@3.3.8':
resolution: {integrity: sha512-ieGT8jJdhhy0mGzStZhsg/qPw5bQZJg5yF+3+XU6saf4sM7yo9ZXy3h+nCwrm2+b4qS/SypkNdR2jAF3uei9tA==} resolution: {integrity: sha512-ieGT8jJdhhy0mGzStZhsg/qPw5bQZJg5yF+3+XU6saf4sM7yo9ZXy3h+nCwrm2+b4qS/SypkNdR2jAF3uei9tA==}
@@ -532,6 +532,11 @@ packages:
vue: vue:
optional: true optional: true
'@vueup/vue-quill@1.5.5':
resolution: {integrity: sha512-ygA61ZZPaRzTHXi8H1w5td1XCtjwRsO6oBuJHdCbfotGQ7hBQukVp5dsYeVXWKuSiF8hGDKwIlROyNNrMalQCQ==}
peerDependencies:
vue: ^3.2.41
'@vueuse/core@14.3.0': '@vueuse/core@14.3.0':
resolution: {integrity: sha512-aHfz47g0ZhMtTVHmIzMVpJy8ePhhOy68GY5bv110+5DVtZ+W7BsOx+m61UNQqfrWyPztIHIanWa3E2tib3NFIw==} resolution: {integrity: sha512-aHfz47g0ZhMtTVHmIzMVpJy8ePhhOy68GY5bv110+5DVtZ+W7BsOx+m61UNQqfrWyPztIHIanWa3E2tib3NFIw==}
peerDependencies: peerDependencies:
@@ -706,9 +711,6 @@ packages:
color-name@1.1.4: color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
colorjs.io@0.5.2:
resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==}
combined-stream@1.0.8: combined-stream@1.0.8:
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
engines: {node: '>= 0.8'} engines: {node: '>= 0.8'}
@@ -995,12 +997,18 @@ packages:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
exsolve@1.1.0: eventemitter3@5.0.4:
resolution: {integrity: sha512-D+42+T12DdIlJM3uepa55qGiL3sYdLBOxIl2ifQCzCHz4c7eiolaHsi3BIqEr7JxBzxv2pYZQX9kw16ziMcEmw==} resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==}
exsolve@1.1.1:
resolution: {integrity: sha512-9U/jZUgjnSGyntRr6y5Muu1MJcwFl6kPu7k8qLF0IMNfLqvw0NZ4nnVDq0RVoZ0RvCyumib4Ez3KYrVfilrw+g==}
fast-deep-equal@3.1.3: fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
fast-diff@1.3.0:
resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
fast-glob@3.3.3: fast-glob@3.3.3:
resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
engines: {node: '>=8.6.0'} engines: {node: '>=8.6.0'}
@@ -1432,6 +1440,13 @@ packages:
lodash: '*' lodash: '*'
lodash-es: '*' lodash-es: '*'
lodash.clonedeep@4.5.0:
resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==}
lodash.isequal@4.5.0:
resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead.
lodash.merge@4.6.2: lodash.merge@4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
@@ -1552,6 +1567,9 @@ packages:
resolution: {integrity: sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg==} resolution: {integrity: sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
parchment@3.0.0:
resolution: {integrity: sha512-HUrJFQ/StvgmXRcQ1ftY6VEZUq3jA2t9ncFN4F84J/vN0/FPpQF+8FKXb3l6fLces6q0uOHj6NJn+2xvZnxO6A==}
parent-module@1.0.1: parent-module@1.0.1:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
engines: {node: '>=6'} engines: {node: '>=6'}
@@ -1641,6 +1659,14 @@ packages:
queue-microtask@1.2.3: queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
quill-delta@5.1.0:
resolution: {integrity: sha512-X74oCeRI4/p0ucjb5Ma8adTXd9Scumz367kkMK5V/IatcX6A0vlgLgKbzXWy5nZmCGeNJm2oQX0d2Eqj+ZIlCA==}
engines: {node: '>= 12.0.0'}
quill@2.0.2:
resolution: {integrity: sha512-QfazNrhMakEdRG57IoYFwffUIr04LWJxbS/ZkidRFXYCQt63c1gK6Z7IHUXMx/Vh25WgPBU42oBaNzQ0K1R/xw==}
engines: {npm: '>=8.2.3'}
readdirp@5.0.0: readdirp@5.0.0:
resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==}
engines: {node: '>= 20.19.0'} engines: {node: '>= 20.19.0'}
@@ -1692,9 +1718,6 @@ packages:
run-parallel@1.2.0: run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
rxjs@7.8.2:
resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
safe-array-concat@1.1.4: safe-array-concat@1.1.4:
resolution: {integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==} resolution: {integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==}
engines: {node: '>=0.4'} engines: {node: '>=0.4'}
@@ -1707,128 +1730,6 @@ packages:
resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
sass-embedded-all-unknown@1.100.0:
resolution: {integrity: sha512-auFtXY/kwYILmSVjtBDwyj0axcLbYYiffOKWoaXHnI5bsYwiRbBh3EneR1rpbX2ZIZCrwX93i5pxKLTZF/662Q==}
cpu: ['!arm', '!arm64', '!riscv64', '!x64']
sass-embedded-android-arm64@1.100.0:
resolution: {integrity: sha512-W+Ru9JwTnfU0UX3jSZcbqFdtKFMcYdfFwytc57h2DgnqCOIiAqI2E06mABZBZC+r3LwXCBuS5GbXAGeVgvVDkA==}
engines: {node: '>=14.0.0'}
cpu: [arm64]
os: [android]
sass-embedded-android-arm@1.100.0:
resolution: {integrity: sha512-70f3HgX2pFNmzpGQ86n5e6QfWn2fP4QUQGfFQK0P1XH73ZLIzLo2YqygrGKGKeeqtc5eU2Wl1/xQzhzuKnO4kw==}
engines: {node: '>=14.0.0'}
cpu: [arm]
os: [android]
sass-embedded-android-riscv64@1.100.0:
resolution: {integrity: sha512-icU3o0V/uCSytSpf+tX5Lf51BvyQEbLzDUJfUi9etSauYBGHpPKkdtdZH0si4v98phq11Kl8rSV1SggksxF1Hg==}
engines: {node: '>=14.0.0'}
cpu: [riscv64]
os: [android]
sass-embedded-android-x64@1.100.0:
resolution: {integrity: sha512-mevF9VQk6gEYByy8+jusaHGmd7Usb2ytX/DsEOd0JtOGCtcf1kh575xJ6OUBDIcJ15uLnbau/0iy1eP6WVBvWA==}
engines: {node: '>=14.0.0'}
cpu: [x64]
os: [android]
sass-embedded-darwin-arm64@1.100.0:
resolution: {integrity: sha512-1PVlYi61POo93IT/FfrG1mc1tAHxeSTyUALF2aOFmXGWjVXr3bQzEQiBGCOvQbj/ix+5hNyXFXcEMEyKvtUJJA==}
engines: {node: '>=14.0.0'}
cpu: [arm64]
os: [darwin]
sass-embedded-darwin-x64@1.100.0:
resolution: {integrity: sha512-x97o3JnGyImZNCIVs9wQHJUE5QCvmVIKaH1cwrz/5dK7OT1FpeNiW+u9TUomP9hG6Ekjd8EL8NBHpxTfIhdjmg==}
engines: {node: '>=14.0.0'}
cpu: [x64]
os: [darwin]
sass-embedded-linux-arm64@1.100.0:
resolution: {integrity: sha512-Dwjmj8Z6VRy7rAi53JAdEwIyUjpfl7PhpSc2/LpQPQx+aO5Dp7Spaipkax0ufJl1SoDUdchCsM4y/88YaluorQ==}
engines: {node: '>=14.0.0'}
cpu: [arm64]
os: [linux]
libc: glibc
sass-embedded-linux-arm@1.100.0:
resolution: {integrity: sha512-9Ul7O1eKrc5YlhwWjkp8tZPSe3UEwSZ1uwUZOQom1HL0pRlBA6F/IlGZYFTLwnHMIP1fc77MMNaBRfc05mKMpw==}
engines: {node: '>=14.0.0'}
cpu: [arm]
os: [linux]
libc: glibc
sass-embedded-linux-musl-arm64@1.100.0:
resolution: {integrity: sha512-XpACJB2KjSLjf2e9uuvGVdOURsoNrFqgRiihhXyUHK9W0t3LIHb7z5MA/7XGPIT9bWSOO2zyw+rH/FHtDV/Yrg==}
engines: {node: '>=14.0.0'}
cpu: [arm64]
os: [linux]
libc: musl
sass-embedded-linux-musl-arm@1.100.0:
resolution: {integrity: sha512-sl0JgbGloPyJg66XXx5UDSDScZ0oU85DpMQU4JU/sCUCFj1Z8zZ69SJWKTCNE4/jwnce7WI2zPCV5AG+RHOZJw==}
engines: {node: '>=14.0.0'}
cpu: [arm]
os: [linux]
libc: musl
sass-embedded-linux-musl-riscv64@1.100.0:
resolution: {integrity: sha512-ShvI0Kx04mwoCARwZ0UjiT97isQvzO80tAt91zmFyHLN9kelc/IrQi940farSm2xQVPCKdeVyeG0ekBsokSpYQ==}
engines: {node: '>=14.0.0'}
cpu: [riscv64]
os: [linux]
libc: musl
sass-embedded-linux-musl-x64@1.100.0:
resolution: {integrity: sha512-TDBCRWNuS4RDLQXvRc1gjZlWiWTWaWGp0Bwu/IKwJxov81lsvrCs3TihTyNXtW7V5aoN4Ky3r0QOkNb3mwmBnA==}
engines: {node: '>=14.0.0'}
cpu: [x64]
os: [linux]
libc: musl
sass-embedded-linux-riscv64@1.100.0:
resolution: {integrity: sha512-j4ENJGOheO+fm3j/yorLxCjBP6/XskrZx7dTLlT+lXYwN/qqCqoA/gsNLI0McS3DFM6GBwPiffzWsdWS8t6sEQ==}
engines: {node: '>=14.0.0'}
cpu: [riscv64]
os: [linux]
libc: glibc
sass-embedded-linux-x64@1.100.0:
resolution: {integrity: sha512-0vUSN8j0WGtCJIOPh//EmUvYGHW0QOe5iul8qyhPk50MAcw49MA0r34AhftjDdx94ILPF6vApFs0gwHPQRlpVA==}
engines: {node: '>=14.0.0'}
cpu: [x64]
os: [linux]
libc: glibc
sass-embedded-unknown-all@1.100.0:
resolution: {integrity: sha512-c+naBgWId4MIpToXcI0DgqetjdAkwTTAxFAuOaBz7HUXLdyG1oZRrEvSsbe41nEdQOKH0vgofVFCeSQgoXOG9A==}
os: ['!android', '!darwin', '!linux', '!win32']
sass-embedded-win32-arm64@1.100.0:
resolution: {integrity: sha512-iE+yxj+hUXwwbqpHkXxgAWTzeRfcWxJ7SSTQEPMk48lwq3oCrWLlz5sQuWHbuTK/i0GKQfROdP+hOmPi89yjUg==}
engines: {node: '>=14.0.0'}
cpu: [arm64]
os: [win32]
sass-embedded-win32-x64@1.100.0:
resolution: {integrity: sha512-qI4F8MI7/KYoy9NdjJfhSspG42WPkADSNDvwEV7qWvCSFC83koJssRsKO2/PfY+niZz6BG65Ic/D+A11h959hw==}
engines: {node: '>=14.0.0'}
cpu: [x64]
os: [win32]
sass-embedded@1.100.0:
resolution: {integrity: sha512-Ut8wlQSk19tm7jMK6mz6cF1+e+E7tUnW2tM02zQDPnOTcVbV8qCQG8UWxZkkNlY50+hV3hqP24OOkUlMz8xBpw==}
engines: {node: '>=16.0.0'}
hasBin: true
sass@1.100.0:
resolution: {integrity: sha512-B5j0rYMlinhhOo9tjQebMVVn0TfyXAF+wB3b2ggZUuJ/is/Y+7+JGjirAMxHZ9Z3hIP98NPfamlAkBHa1lAaXQ==}
engines: {node: '>=20.19.0'}
hasBin: true
sass@1.102.0: sass@1.102.0:
resolution: {integrity: sha512-NSOyTnaQF7rTAEOtI2fwb386vL+akyiQLBZu8Na7hXCb+umJy0GAqlcMIaqACZ6Z1VgTBS4K9PG6B3IdjHGJsw==} resolution: {integrity: sha512-NSOyTnaQF7rTAEOtI2fwb386vL+akyiQLBZu8Na7hXCb+umJy0GAqlcMIaqACZ6Z1VgTBS4K9PG6B3IdjHGJsw==}
engines: {node: '>=20.19.0'} engines: {node: '>=20.19.0'}
@@ -1937,22 +1838,10 @@ packages:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'} engines: {node: '>=8'}
supports-color@8.1.1:
resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
engines: {node: '>=10'}
supports-preserve-symlinks-flag@1.0.0: supports-preserve-symlinks-flag@1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
sync-child-process@1.0.2:
resolution: {integrity: sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==}
engines: {node: '>=16.0.0'}
sync-message-port@1.2.0:
resolution: {integrity: sha512-gAQ9qrUN/UCypHtGFbbe7Rc/f9bzO88IwrG8TDo/aMKAApKyD6E3W4Cm0EfhfBb6Z6SKt59tTCTfD+n1xmAvMg==}
engines: {node: '>=16.0.0'}
table@6.9.0: table@6.9.0:
resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==}
engines: {node: '>=10.0.0'} engines: {node: '>=10.0.0'}
@@ -2068,9 +1957,6 @@ packages:
v8-compile-cache@2.4.0: v8-compile-cache@2.4.0:
resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==} resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==}
varint@6.0.0:
resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==}
vite@8.1.5: vite@8.1.5:
resolution: {integrity: sha512-7ULLwsCdYx/nRyrpiEwvqb5TFHrMVZyBt+rg/OAXT7rgj/z+DtTDyKFeLAdDkubDVDKD8jOsndmy7m55XcfUsw==} resolution: {integrity: sha512-7ULLwsCdYx/nRyrpiEwvqb5TFHrMVZyBt+rg/OAXT7rgj/z+DtTDyKFeLAdDkubDVDKD8jOsndmy7m55XcfUsw==}
engines: {node: ^20.19.0 || >=22.12.0} engines: {node: ^20.19.0 || >=22.12.0}
@@ -2255,9 +2141,6 @@ snapshots:
'@babel/helper-string-parser': 8.0.0 '@babel/helper-string-parser': 8.0.0
'@babel/helper-validator-identifier': 8.0.4 '@babel/helper-validator-identifier': 8.0.4
'@bufbuild/protobuf@2.13.0':
optional: true
'@ctrl/tinycolor@4.2.0': {} '@ctrl/tinycolor@4.2.0': {}
'@element-plus/icons-vue@2.3.2(vue@3.5.40(typescript@6.0.3))': '@element-plus/icons-vue@2.3.2(vue@3.5.40(typescript@6.0.3))':
@@ -2583,10 +2466,10 @@ snapshots:
'@typescript-eslint/types': 5.62.0 '@typescript-eslint/types': 5.62.0
eslint-visitor-keys: 3.4.3 eslint-visitor-keys: 3.4.3
'@vitejs/plugin-vue@6.0.8(vite@8.1.5(@types/node@24.13.3)(sass-embedded@1.100.0)(sass@1.102.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))': '@vitejs/plugin-vue@6.0.8(vite@8.1.5(@types/node@24.13.3)(sass@1.102.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3))':
dependencies: dependencies:
'@rolldown/pluginutils': 1.0.1 '@rolldown/pluginutils': 1.0.1
vite: 8.1.5(@types/node@24.13.3)(sass-embedded@1.100.0)(sass@1.102.0)(yaml@2.9.0) vite: 8.1.5(@types/node@24.13.3)(sass@1.102.0)(yaml@2.9.0)
vue: 3.5.40(typescript@6.0.3) vue: 3.5.40(typescript@6.0.3)
'@volar/language-core@2.4.28': '@volar/language-core@2.4.28':
@@ -2641,18 +2524,18 @@ snapshots:
'@vue/compiler-dom': 3.5.40 '@vue/compiler-dom': 3.5.40
'@vue/shared': 3.5.40 '@vue/shared': 3.5.40
'@vue/devtools-api@8.2.0': '@vue/devtools-api@8.2.1':
dependencies: dependencies:
'@vue/devtools-kit': 8.2.0 '@vue/devtools-kit': 8.2.1
'@vue/devtools-kit@8.2.0': '@vue/devtools-kit@8.2.1':
dependencies: dependencies:
'@vue/devtools-shared': 8.2.0 '@vue/devtools-shared': 8.2.1
birpc: 2.9.0 birpc: 2.9.0
hookable: 5.5.3 hookable: 5.5.3
perfect-debounce: 2.1.0 perfect-debounce: 2.1.0
'@vue/devtools-shared@8.2.0': {} '@vue/devtools-shared@8.2.1': {}
'@vue/language-core@3.3.8': '@vue/language-core@3.3.8':
dependencies: dependencies:
@@ -2693,6 +2576,12 @@ snapshots:
typescript: 6.0.3 typescript: 6.0.3
vue: 3.5.40(typescript@6.0.3) vue: 3.5.40(typescript@6.0.3)
'@vueup/vue-quill@1.5.5(vue@3.5.40(typescript@6.0.3))':
dependencies:
quill: 2.0.2
quill-delta: 5.1.0
vue: 3.5.40(typescript@6.0.3)
'@vueuse/core@14.3.0(vue@3.5.40(typescript@6.0.3))': '@vueuse/core@14.3.0(vue@3.5.40(typescript@6.0.3))':
dependencies: dependencies:
'@types/web-bluetooth': 0.0.21 '@types/web-bluetooth': 0.0.21
@@ -2902,9 +2791,6 @@ snapshots:
color-name@1.1.4: {} color-name@1.1.4: {}
colorjs.io@0.5.2:
optional: true
combined-stream@1.0.8: combined-stream@1.0.8:
dependencies: dependencies:
delayed-stream: 1.0.0 delayed-stream: 1.0.0
@@ -3299,10 +3185,14 @@ snapshots:
esutils@2.0.3: {} esutils@2.0.3: {}
exsolve@1.1.0: {} eventemitter3@5.0.4: {}
exsolve@1.1.1: {}
fast-deep-equal@3.1.3: {} fast-deep-equal@3.1.3: {}
fast-diff@1.3.0: {}
fast-glob@3.3.3: fast-glob@3.3.3:
dependencies: dependencies:
'@nodelib/fs.stat': 2.0.5 '@nodelib/fs.stat': 2.0.5
@@ -3711,6 +3601,10 @@ snapshots:
lodash: 4.18.1 lodash: 4.18.1
lodash-es: 4.18.1 lodash-es: 4.18.1
lodash.clonedeep@4.5.0: {}
lodash.isequal@4.5.0: {}
lodash.merge@4.6.2: {} lodash.merge@4.6.2: {}
lodash.truncate@4.4.2: {} lodash.truncate@4.4.2: {}
@@ -3843,6 +3737,8 @@ snapshots:
object-keys: 1.1.1 object-keys: 1.1.1
safe-push-apply: 1.0.0 safe-push-apply: 1.0.0
parchment@3.0.0: {}
parent-module@1.0.1: parent-module@1.0.1:
dependencies: dependencies:
callsites: 3.1.0 callsites: 3.1.0
@@ -3867,9 +3763,9 @@ snapshots:
picomatch@4.0.5: {} picomatch@4.0.5: {}
pinia@4.0.2(@vue/devtools-api@8.2.0)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)): pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)):
dependencies: dependencies:
'@vue/devtools-api': 8.2.0 '@vue/devtools-api': 8.2.1
nostics: 1.2.0 nostics: 1.2.0
vue: 3.5.40(typescript@6.0.3) vue: 3.5.40(typescript@6.0.3)
optionalDependencies: optionalDependencies:
@@ -3884,7 +3780,7 @@ snapshots:
pkg-types@2.3.1: pkg-types@2.3.1:
dependencies: dependencies:
confbox: 0.2.4 confbox: 0.2.4
exsolve: 1.1.0 exsolve: 1.1.1
pathe: 2.0.3 pathe: 2.0.3
possible-typed-array-names@1.1.0: {} possible-typed-array-names@1.1.0: {}
@@ -3912,6 +3808,19 @@ snapshots:
queue-microtask@1.2.3: {} queue-microtask@1.2.3: {}
quill-delta@5.1.0:
dependencies:
fast-diff: 1.3.0
lodash.clonedeep: 4.5.0
lodash.isequal: 4.5.0
quill@2.0.2:
dependencies:
eventemitter3: 5.0.4
lodash-es: 4.18.1
parchment: 3.0.0
quill-delta: 5.1.0
readdirp@5.0.0: {} readdirp@5.0.0: {}
reflect.getprototypeof@1.0.10: reflect.getprototypeof@1.0.10:
@@ -3987,11 +3896,6 @@ snapshots:
dependencies: dependencies:
queue-microtask: 1.2.3 queue-microtask: 1.2.3
rxjs@7.8.2:
dependencies:
tslib: 2.8.1
optional: true
safe-array-concat@1.1.4: safe-array-concat@1.1.4:
dependencies: dependencies:
call-bind: 1.0.9 call-bind: 1.0.9
@@ -4011,103 +3915,6 @@ snapshots:
es-errors: 1.3.0 es-errors: 1.3.0
is-regex: 1.2.1 is-regex: 1.2.1
sass-embedded-all-unknown@1.100.0:
dependencies:
sass: 1.100.0
optional: true
sass-embedded-android-arm64@1.100.0:
optional: true
sass-embedded-android-arm@1.100.0:
optional: true
sass-embedded-android-riscv64@1.100.0:
optional: true
sass-embedded-android-x64@1.100.0:
optional: true
sass-embedded-darwin-arm64@1.100.0:
optional: true
sass-embedded-darwin-x64@1.100.0:
optional: true
sass-embedded-linux-arm64@1.100.0:
optional: true
sass-embedded-linux-arm@1.100.0:
optional: true
sass-embedded-linux-musl-arm64@1.100.0:
optional: true
sass-embedded-linux-musl-arm@1.100.0:
optional: true
sass-embedded-linux-musl-riscv64@1.100.0:
optional: true
sass-embedded-linux-musl-x64@1.100.0:
optional: true
sass-embedded-linux-riscv64@1.100.0:
optional: true
sass-embedded-linux-x64@1.100.0:
optional: true
sass-embedded-unknown-all@1.100.0:
dependencies:
sass: 1.100.0
optional: true
sass-embedded-win32-arm64@1.100.0:
optional: true
sass-embedded-win32-x64@1.100.0:
optional: true
sass-embedded@1.100.0:
dependencies:
'@bufbuild/protobuf': 2.13.0
colorjs.io: 0.5.2
immutable: 5.1.9
rxjs: 7.8.2
supports-color: 8.1.1
sync-child-process: 1.0.2
varint: 6.0.0
optionalDependencies:
sass-embedded-all-unknown: 1.100.0
sass-embedded-android-arm: 1.100.0
sass-embedded-android-arm64: 1.100.0
sass-embedded-android-riscv64: 1.100.0
sass-embedded-android-x64: 1.100.0
sass-embedded-darwin-arm64: 1.100.0
sass-embedded-darwin-x64: 1.100.0
sass-embedded-linux-arm: 1.100.0
sass-embedded-linux-arm64: 1.100.0
sass-embedded-linux-musl-arm: 1.100.0
sass-embedded-linux-musl-arm64: 1.100.0
sass-embedded-linux-musl-riscv64: 1.100.0
sass-embedded-linux-musl-x64: 1.100.0
sass-embedded-linux-riscv64: 1.100.0
sass-embedded-linux-x64: 1.100.0
sass-embedded-unknown-all: 1.100.0
sass-embedded-win32-arm64: 1.100.0
sass-embedded-win32-x64: 1.100.0
optional: true
sass@1.100.0:
dependencies:
chokidar: 5.0.0
immutable: 5.1.9
source-map-js: 1.2.1
optionalDependencies:
'@parcel/watcher': 2.6.0
optional: true
sass@1.102.0: sass@1.102.0:
dependencies: dependencies:
chokidar: 5.0.0 chokidar: 5.0.0
@@ -4241,21 +4048,8 @@ snapshots:
dependencies: dependencies:
has-flag: 4.0.0 has-flag: 4.0.0
supports-color@8.1.1:
dependencies:
has-flag: 4.0.0
optional: true
supports-preserve-symlinks-flag@1.0.0: {} supports-preserve-symlinks-flag@1.0.0: {}
sync-child-process@1.0.2:
dependencies:
sync-message-port: 1.2.0
optional: true
sync-message-port@1.2.0:
optional: true
table@6.9.0: table@6.9.0:
dependencies: dependencies:
ajv: 8.20.0 ajv: 8.20.0
@@ -4349,14 +4143,14 @@ snapshots:
pathe: 2.0.3 pathe: 2.0.3
picomatch: 4.0.5 picomatch: 4.0.5
unplugin@3.3.0(rolldown@1.1.5)(vite@8.1.5(@types/node@24.13.3)(sass-embedded@1.100.0)(sass@1.102.0)(yaml@2.9.0)): unplugin@3.3.0(rolldown@1.1.5)(vite@8.1.5(@types/node@24.13.3)(sass@1.102.0)(yaml@2.9.0)):
dependencies: dependencies:
'@jridgewell/remapping': 2.3.5 '@jridgewell/remapping': 2.3.5
picomatch: 4.0.5 picomatch: 4.0.5
webpack-virtual-modules: 0.6.2 webpack-virtual-modules: 0.6.2
optionalDependencies: optionalDependencies:
rolldown: 1.1.5 rolldown: 1.1.5
vite: 8.1.5(@types/node@24.13.3)(sass-embedded@1.100.0)(sass@1.102.0)(yaml@2.9.0) vite: 8.1.5(@types/node@24.13.3)(sass@1.102.0)(yaml@2.9.0)
uri-js@4.4.1: uri-js@4.4.1:
dependencies: dependencies:
@@ -4366,10 +4160,7 @@ snapshots:
v8-compile-cache@2.4.0: {} v8-compile-cache@2.4.0: {}
varint@6.0.0: vite@8.1.5(@types/node@24.13.3)(sass@1.102.0)(yaml@2.9.0):
optional: true
vite@8.1.5(@types/node@24.13.3)(sass-embedded@1.100.0)(sass@1.102.0)(yaml@2.9.0):
dependencies: dependencies:
lightningcss: 1.33.0 lightningcss: 1.33.0
picomatch: 4.0.5 picomatch: 4.0.5
@@ -4380,7 +4171,6 @@ snapshots:
'@types/node': 24.13.3 '@types/node': 24.13.3
fsevents: 2.3.3 fsevents: 2.3.3
sass: 1.102.0 sass: 1.102.0
sass-embedded: 1.100.0
yaml: 2.9.0 yaml: 2.9.0
vscode-uri@3.1.0: {} vscode-uri@3.1.0: {}
@@ -4400,11 +4190,11 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
vue-router@5.2.0(@vue/compiler-sfc@3.5.40)(pinia@4.0.2(@vue/devtools-api@8.2.0)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.1.5)(vite@8.1.5(@types/node@24.13.3)(sass-embedded@1.100.0)(sass@1.102.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)): vue-router@5.2.0(@vue/compiler-sfc@3.5.40)(pinia@4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)))(rolldown@1.1.5)(vite@8.1.5(@types/node@24.13.3)(sass@1.102.0)(yaml@2.9.0))(vue@3.5.40(typescript@6.0.3)):
dependencies: dependencies:
'@babel/generator': 8.0.0 '@babel/generator': 8.0.0
'@vue-macros/common': 3.1.4(vue@3.5.40(typescript@6.0.3)) '@vue-macros/common': 3.1.4(vue@3.5.40(typescript@6.0.3))
'@vue/devtools-api': 8.2.0 '@vue/devtools-api': 8.2.1
ast-walker-scope: 0.9.0 ast-walker-scope: 0.9.0
chokidar: 5.0.0 chokidar: 5.0.0
json5: 2.2.3 json5: 2.2.3
@@ -4417,14 +4207,14 @@ snapshots:
picomatch: 4.0.5 picomatch: 4.0.5
scule: 1.3.0 scule: 1.3.0
tinyglobby: 0.2.17 tinyglobby: 0.2.17
unplugin: 3.3.0(rolldown@1.1.5)(vite@8.1.5(@types/node@24.13.3)(sass-embedded@1.100.0)(sass@1.102.0)(yaml@2.9.0)) unplugin: 3.3.0(rolldown@1.1.5)(vite@8.1.5(@types/node@24.13.3)(sass@1.102.0)(yaml@2.9.0))
unplugin-utils: 0.3.2 unplugin-utils: 0.3.2
vue: 3.5.40(typescript@6.0.3) vue: 3.5.40(typescript@6.0.3)
yaml: 2.9.0 yaml: 2.9.0
optionalDependencies: optionalDependencies:
'@vue/compiler-sfc': 3.5.40 '@vue/compiler-sfc': 3.5.40
pinia: 4.0.2(@vue/devtools-api@8.2.0)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3)) pinia: 4.0.2(@vue/devtools-api@8.2.1)(typescript@6.0.3)(vue@3.5.40(typescript@6.0.3))
vite: 8.1.5(@types/node@24.13.3)(sass-embedded@1.100.0)(sass@1.102.0)(yaml@2.9.0) vite: 8.1.5(@types/node@24.13.3)(sass@1.102.0)(yaml@2.9.0)
transitivePeerDependencies: transitivePeerDependencies:
- '@farmfe/core' - '@farmfe/core'
- '@rspack/core' - '@rspack/core'

View File

@@ -7,4 +7,5 @@
<style lang="scss"> <style lang="scss">
@use '@/styles/index.module.scss'; @use '@/styles/index.module.scss';
@use "@/styles/common.module.scss";
</style> </style>

View File

@@ -1,7 +1,7 @@
<template> <template>
<el-dialog v-model="libraryStore.fileDetailDialogVisible" <el-dialog v-model="libraryStore.fileDetailDialogVisible"
:title="libraryStore.currentFile.name" center :title="libraryStore.currentFile.name" center
width="90%" destroy-on-close class="file-dialog"> width="90%" destroy-on-close class="file-detail-dialog">
<el-splitter> <el-splitter>
<el-splitter-panel size="50%"> <el-splitter-panel size="50%">
<div class="raw-file"> <div class="raw-file">
@@ -24,7 +24,7 @@
<span class="q-num">Q{{ i + 1 }}</span> <span class="q-num">Q{{ i + 1 }}</span>
<el-tag size="small" type="primary" effect="dark">{{ q.type }}</el-tag> <el-tag size="small" type="primary" effect="dark">{{ q.type }}</el-tag>
</div> </div>
<div class="q-body">{{ q.stem }}</div> <div class="q-body">{{ q.question }}</div>
<ul v-if="q.options" class="q-options"> <ul v-if="q.options" class="q-options">
<li v-for="opt in q.options" :key="opt">{{ opt }}</li> <li v-for="opt in q.options" :key="opt">{{ opt }}</li>
</ul> </ul>
@@ -51,7 +51,7 @@ const libraryStore = useLibraryStore()
</script> </script>
<style lang="scss"> <style lang="scss">
.file-dialog { .file-detail-dialog {
.raw-file { .raw-file {
height: 100%; height: 100%;
padding: 10px; padding: 10px;

View File

@@ -1,14 +1,20 @@
<template> <template>
<el-dialog v-model="libraryStore.fileDialogVisible" <el-dialog v-model="libraryStore.fileDialogVisible"
title="新增资料" width="80%" center destroy-on-close> title="新增资料" width="80%"
<el-splitter> center destroy-on-close
<el-splitter-panel> class="file-dialog common-dialog">
<el-form ref="ruleFormRef" :model="libraryStore.currentFile" <el-steps :active="activeStep" align-center>
<el-step title="上传资料" :icon="Upload" />
<el-step title="确认资料" :icon="Document " />
<el-step title="生成题库" :icon="MagicStick" />
</el-steps>
<el-form ref="libraryFileFormRef" v-if="activeStep === 1"
:model="libraryStore.currentFile"
:rules="rules" label-width="auto"> :rules="rules" label-width="auto">
<el-form-item label="学科" prop="subject"> <el-form-item label="学科" prop="subject">
<el-select v-model="libraryStore.currentFile.subject" <el-select v-model="libraryStore.currentFile.subject"
multiple filterable allow-create filterable allow-create placeholder="请输入或选择学科名称">
placeholder="请输入或选择学科名称" style="width: 240px">
<el-option v-for="(item, index) in subjectOptions" <el-option v-for="(item, index) in subjectOptions"
:key="index" :label="item" :value="item"/> :key="index" :label="item" :value="item"/>
</el-select> </el-select>
@@ -16,54 +22,77 @@
<el-form-item label="模块" prop="module"> <el-form-item label="模块" prop="module">
<el-select v-model="libraryStore.currentFile.module" <el-select v-model="libraryStore.currentFile.module"
multiple filterable allow-create filterable allow-create placeholder="请输入或选择模块名称">
placeholder="请输入或选择模块名称" style="width: 240px">
<el-option v-for="(item, index) in subjectOptions" <el-option v-for="(item, index) in subjectOptions"
:key="index" :label="item" :value="item"/> :key="index" :label="item" :value="item"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="名称" prop="name">
<el-input v-model="libraryStore.currentFile.name"
show-word-limit :maxlength="20"
placeholder="请输入资料名称">
</el-input>
</el-form-item>
<el-form-item label="文件"> <el-form-item label="文件">
<el-upload class="upload-demo" <el-upload class="upload-demo" drag :http-request="upload">
drag
:http-request="upload">
<el-icon class="el-icon--upload"><upload-filled /></el-icon> <el-icon class="el-icon--upload"><upload-filled /></el-icon>
<div class="el-upload__text"> <div class="el-upload__text">
Drop file here or <em>click to upload</em> 拖拽文件至此或 <em>点击上传</em>
</div> </div>
<template #tip> <template #tip>
<div class="el-upload__tip"> <div class="el-upload__tip">
jpg/png files with a size less than 500kb 请上传小于10M的图片
</div> </div>
</template> </template>
</el-upload> </el-upload>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-splitter-panel>
<el-splitter-panel> <QuillEditor v-if="activeStep === 2" :content="fileContent" contentType="html" theme="snow"/>
<el-input
v-model="fileContent" <div v-if="activeStep === 3" class="generate-question">
style="width: 100%;padding: 10px;" <div>
:rows="20"
type="textarea"
placeholder="Please input"
/>
</el-splitter-panel>
<el-splitter-panel>
<el-button type="primary" @click="generate">生成题库</el-button> <el-button type="primary" @click="generate">生成题库</el-button>
<el-input </div>
v-model="questionContent"
style="width: 100%;padding: 10px;" <div v-if="hasGenerate" class="question-list">
:rows="20" <el-card v-for="(q, index) in libraryStore.currentFile.questions"
type="textarea" :key="q.id" class="question-card">
placeholder="Please input" <div class="question-title">
/> {{ index + 1 }}.
</el-splitter-panel> {{ q.type === 'single' ? '单选' : '多选' }}
</el-splitter> {{ q.question }}
</div>
<div class="question-options">
<div v-for="(opt, i) in q.options" :key="i" style="line-height: 1.8">
{{ String.fromCharCode(65 + i) }}. {{ opt }}
</div>
</div>
<div class="question-answer">
正确答案{{ q.answer.join('、') }}
</div>
<div class="question-action">
<el-button type="danger" size="small"
@click="libraryStore.currentFile.questions.splice(index, 1)">
删除
</el-button>
</div>
</el-card>
</div>
<div v-else v-html="questionContent" />
</div>
<template #footer> <template #footer>
<el-button @click="libraryStore.fileDialogVisible = false">取消</el-button> <el-button @click="libraryStore.fileDialogVisible = false">取消</el-button>
<el-button type="primary" @click="submitForm(ruleFormRef)">确认</el-button> <el-button type="primary" @click="previousClick" :disabled="activeStep === 1">上一步</el-button>
<el-button type="primary" @click="nextClick" :disabled="activeStep === 3">下一步</el-button>
<el-button type="primary" @click="submitForm()" :disabled="activeStep !== 3">确认</el-button>
</template> </template>
</el-dialog> </el-dialog>
</template> </template>
@@ -71,13 +100,17 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref } from 'vue' import { ref } from 'vue'
import { useLibraryStore } from '@/stores/library.ts' import { useLibraryStore } from '@/stores/library.ts'
import { ElMessage, type FormInstance, type UploadRequestOptions } from 'element-plus' import { ElLoading, ElMessage, type FormInstance, type UploadRequestOptions } from 'element-plus'
import { UploadFilled } from '@element-plus/icons-vue' import { Document, MagicStick, Upload, UploadFilled } from '@element-plus/icons-vue'
import axios from 'axios' import axios from 'axios'
import { QuillEditor } from '@vueup/vue-quill'
import '@vueup/vue-quill/dist/vue-quill.snow.css'
const libraryStore = useLibraryStore() const libraryStore = useLibraryStore()
const ruleFormRef = ref<FormInstance>() const libraryFileFormRef = ref<FormInstance>()
const activeStep = ref(1)
const hasGenerate = ref(false)
const subjectOptions = ['中医学', '公务员'] const subjectOptions = ['中医学', '公务员']
@@ -90,15 +123,47 @@ const rules = {
], ],
module: [ module: [
{ required: true, message: '请输入模块名称', trigger: 'blur' } { required: true, message: '请输入模块名称', trigger: 'blur' }
],
name: [
{ required: true, message: '请输入资料名称', trigger: 'blur' }
] ]
} }
const previousClick = () => {
if (activeStep.value > 1) {
activeStep.value--
}
}
const nextClick = async () => {
if (activeStep.value === 1) {
try {
await libraryFileFormRef.value?.validate()
} catch {
ElMessage.error('请先输入信息')
return
}
}
if (activeStep.value < 3) {
activeStep.value++
}
}
const upload = async (options: UploadRequestOptions) => { const upload = async (options: UploadRequestOptions) => {
const { file } = options const { file } = options
libraryStore.currentFile.size = file.size
libraryStore.currentFile.type = 'image'
const formData = new FormData() const formData = new FormData()
formData.append('file', file) formData.append('file', file)
const loading = ElLoading.service({
lock: true,
text: '文件上传中 请等待',
background: 'rgba(0, 0, 0, 0.7)'
})
try { try {
const res = await axios.post('http://127.0.0.1:8000/upload', formData, { const res = await axios.post('http://127.0.0.1:8000/upload', formData, {
headers: { headers: {
@@ -107,9 +172,11 @@ const upload = async (options: UploadRequestOptions) => {
}) })
ElMessage.success('上传成功') ElMessage.success('上传成功')
fileContent.value = res.data.text fileContent.value = res.data.text
} catch (err) { } catch (error) {
ElMessage.error('上传失败') console.log(error)
console.error(err) ElMessage.error('上传失败 请联系管理员')
} finally {
loading.close()
} }
} }
@@ -120,6 +187,13 @@ const generate = async () => {
} }
questionContent.value = '' questionContent.value = ''
hasGenerate.value = false
const loading = ElLoading.service({
lock: true,
text: '题库生成中 请等待',
background: 'rgba(0, 0, 0, 0.7)'
})
try { try {
const response = await fetch('http://127.0.0.1:8000/generate', { const response = await fetch('http://127.0.0.1:8000/generate', {
@@ -146,24 +220,77 @@ const generate = async () => {
} }
ElMessage.success('生成完成') ElMessage.success('生成完成')
} catch (err) { hasGenerate.value = true
ElMessage.error('生成失败')
console.error(err) libraryStore.currentFile.questions = JSON.parse(questionContent.value)
} catch (error) {
console.log(error)
ElMessage.error('生成失败 请联系管理员')
} finally {
loading.close()
} }
} }
const submitForm = async (formEl: FormInstance | undefined) => { const submitForm = async () => {
if (!formEl) return if (libraryStore.currentFile.questions.length > 0) {
await formEl.validate((valid, fields) => { const res = await axios.post('http://127.0.0.1:8000/files', libraryStore.currentFile, {
if (valid) { headers: {
libraryStore.fileDialogVisible = false 'Content-Type': 'application/json'
} else {
console.log('请先输入信息')
} }
}) })
} else {
ElMessage.error('请先生成题库')
}
} }
</script> </script>
<style lang="scss"> <style lang="scss">
.file-dialog {
.el-dialog__body {
display: flex;
flex-direction: column;
gap: 16px;
.ql-container {
height: auto;
}
.generate-question {
display: flex;
flex-direction: column;
gap: 10px;
}
.question-list {
display: flex;
flex-direction: column;
gap: 10px;
.question-card {
.el-card__body {
display: flex;
flex-direction: column;
gap: 10px;
}
.question-title {
font-weight: 600;
}
.question-options {
padding-left: 16px;
}
.question-answer {
color: #67c23a;
font-size: 13px;
}
.question-action {
text-align: right;
}
}
}
}
}
</style> </style>

View File

@@ -9,7 +9,7 @@
</div> </div>
<div class="file-text"> <div class="file-text">
<div class="file-name">{{ file.name }}</div> <div class="file-name">{{ file.name }}</div>
<div class="file-meta">{{ file.size }} · {{ file.time }}</div> <div class="file-meta">{{ file.size }} · {{ file.uploadTime }}</div>
</div> </div>
</div> </div>

View File

@@ -59,13 +59,11 @@ export const useLibraryStore = defineStore('library', {
subject: '中医学', subject: '中医学',
module: '中医基础理疗', module: '中医基础理疗',
name: '向量代数.pdf', name: '向量代数.pdf',
size: '2.4 MB', size: 2.4,
time: '2分钟前', uploadTime: '2分钟前',
type: 'pdf', type: 'pdf',
iconClass: 'icon-pdf',
questions: [ questions: [
{ type: '选择题', stem: '设 a=(1,2,3), b=(2,-1,1),求 a·b = ?', options: ['A. 3', 'B. 5', 'C. 7', 'D. 9'], answer: 'A' }, { id: 1, type: 'single', question: '设 a=(1,2,3), b=(2,-1,1),求 a·b = ?', options: ['A. 3', 'B. 5', 'C. 7', 'D. 9'], answer: ['A'] }
{ type: '计算题', stem: '求过点 P(1,0,2) 且法向量为 n=(2,1,-1) 的平面方程', answer: '2x + y - z = 0' }
] ]
}, },
{ {
@@ -73,23 +71,23 @@ export const useLibraryStore = defineStore('library', {
subject: '中医学', subject: '中医学',
module: '中医基础理疗', module: '中医基础理疗',
name: '向量代数精讲.png', name: '向量代数精讲.png',
size: '156 MB', size: 156,
time: '3小时前', uploadTime: '3小时前',
type: 'image', type: 'image',
iconClass: 'icon-image' questions: []
} }
] ]
}, },
getEmptyFile(): ILibraryFile { getEmptyFile(): ILibraryFile {
return { return {
iconClass: '',
id: 0, id: 0,
module: '', module: '',
name: '', name: '',
size: '', size: 0,
subject: '', subject: '',
time: '', uploadTime: '',
type: '' type: '',
questions: []
} }
} }
} }

View File

@@ -0,0 +1,17 @@
.common-view {
}
.common-dialog {
--el-dialog-margin-top: 0 !important;
margin: 0 auto !important;
height: 100vh;
display: flex;
flex-direction: column;
.el-dialog__body {
flex-grow: 1;
overflow: auto;
}
}

View File

@@ -5,10 +5,11 @@ export interface ITreeNode {
} }
export interface ILibraryFileQuestion { export interface ILibraryFileQuestion {
id: number;
type: string; type: string;
stem: string; question: string;
options?: string[]; options: string[];
answer: string; answer: string[];
} }
export interface ILibraryFile { export interface ILibraryFile {
@@ -16,9 +17,8 @@ export interface ILibraryFile {
subject: string; subject: string;
module: string; module: string;
name: string; name: string;
size: string; size: number;
time: string; uploadTime: string;
type: string; type: string;
iconClass: string; questions: ILibraryFileQuestion[];
questions?: ILibraryFileQuestion[];
} }