增加AI问答生成测试项

This commit is contained in:
2025-12-02 18:09:17 +08:00
parent 80ef6f7ce8
commit 03aed85d86
14 changed files with 563 additions and 238 deletions

View File

@@ -4,3 +4,5 @@ VITE_APP_ENV = development
VITE_APP_BASE_URL = http://127.0.0.1:8000/api VITE_APP_BASE_URL = http://127.0.0.1:8000/api
VITE_APP_WS_URL = ws://127.0.0.1:8000/message.io VITE_APP_WS_URL = ws://127.0.0.1:8000/message.io
VITE_APP_PROXY_PREFIX = /api VITE_APP_PROXY_PREFIX = /api
# AI
VUE_APP_AI_API_BASE = http://192.168.0.63:8777

View File

@@ -3,3 +3,5 @@ VITE_APP_ENV = production
VITE_APP_BASE_URL = http://127.0.0.1:8000/api VITE_APP_BASE_URL = http://127.0.0.1:8000/api
VITE_APP_WS_URL = ws://127.0.0.1:8000/message.io VITE_APP_WS_URL = ws://127.0.0.1:8000/message.io
VITE_APP_PROXY_PREFIX = /api VITE_APP_PROXY_PREFIX = /api
# AI
VUE_APP_AI_API_BASE = http://192.168.0.63:8777

View File

@@ -1,7 +1,7 @@
{ {
"useTabs": false, "useTabs": false,
"tabWidth": 4, "tabWidth": 4,
"printWidth": 120, "printWidth": 160,
"singleQuote": false, "singleQuote": false,
"trailingComma": "none", "trailingComma": "none",
"semi": false "semi": false

376
cdTMP/package-lock.json generated
View File

@@ -10,9 +10,9 @@
"dependencies": { "dependencies": {
"@arco-design/color": "^0.4.0", "@arco-design/color": "^0.4.0",
"@arco-design/web-vue": "^2.57.0", "@arco-design/web-vue": "^2.57.0",
"@tanstack/vue-query": "^5.91.2", "@tanstack/vue-query": "^5.92.0",
"@tinymce/tinymce-vue": "^6.3.0", "@tinymce/tinymce-vue": "^6.3.0",
"@vueuse/core": "^14.0.0", "@vueuse/core": "^14.1.0",
"axios": "^1.13.2", "axios": "^1.13.2",
"class-variance-authority": "^0.7.1", "class-variance-authority": "^0.7.1",
"clsx": "^2.1.1", "clsx": "^2.1.1",
@@ -29,10 +29,10 @@
"tailwind-merge": "^3.4.0", "tailwind-merge": "^3.4.0",
"tinymce": "^7.9.1", "tinymce": "^7.9.1",
"tw-animate-css": "^1.4.0", "tw-animate-css": "^1.4.0",
"vue": "^3.5.24", "vue": "^3.5.25",
"vue-clipboard3": "^2.0.0", "vue-clipboard3": "^2.0.0",
"vue-color-kit": "^1.0.6", "vue-color-kit": "^1.0.6",
"vue-data-ui": "^3.7.6", "vue-data-ui": "^3.7.14",
"vue-router": "^4.6.3", "vue-router": "^4.6.3",
"vuedraggable": "^2.24.3" "vuedraggable": "^2.24.3"
}, },
@@ -43,20 +43,20 @@
"@types/node": "^24.10.1", "@types/node": "^24.10.1",
"@types/nprogress": "^0.2.3", "@types/nprogress": "^0.2.3",
"@types/qs": "^6.14.0", "@types/qs": "^6.14.0",
"@vitejs/plugin-vue": "^6.0.1", "@vitejs/plugin-vue": "^6.0.2",
"@vitejs/plugin-vue-jsx": "^5.1.1", "@vitejs/plugin-vue-jsx": "^5.1.2",
"@vue/babel-plugin-jsx": "^2.0.1", "@vue/babel-plugin-jsx": "^2.0.1",
"browserslist": "^4.28.0", "browserslist": "^4.28.0",
"eslint": "^9.39.1", "eslint": "^9.39.1",
"eslint-plugin-vue": "^10.5.1", "eslint-plugin-vue": "^10.6.2",
"less": "^4.4.2", "less": "^4.4.2",
"less-loader": "^12.3.0", "less-loader": "^12.3.0",
"postcss": "^8.5.6", "postcss": "^8.5.6",
"prettier": "^3.6.2", "prettier": "^3.7.3",
"rollup-plugin-visualizer": "^6.0.5", "rollup-plugin-visualizer": "^6.0.5",
"tailwindcss": "^4.1.17", "tailwindcss": "^4.1.17",
"typescript": "^5.9.3", "typescript": "^5.9.3",
"vite": "^7.2.2", "vite": "^7.2.6",
"vue-eslint-parser": "^10.2.0" "vue-eslint-parser": "^10.2.0"
} }
}, },
@@ -73,20 +73,6 @@
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
} }
}, },
"node_modules/@ampproject/remapping": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.3.0.tgz",
"integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.24"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@arco-design/color": { "node_modules/@arco-design/color": {
"version": "0.4.0", "version": "0.4.0",
"resolved": "https://registry.npmmirror.com/@arco-design/color/-/color-0.4.0.tgz", "resolved": "https://registry.npmmirror.com/@arco-design/color/-/color-0.4.0.tgz",
@@ -142,23 +128,23 @@
} }
}, },
"node_modules/@babel/core": { "node_modules/@babel/core": {
"version": "7.28.3", "version": "7.28.5",
"resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.28.3.tgz", "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.28.5.tgz",
"integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.27.1", "@babel/code-frame": "^7.27.1",
"@babel/generator": "^7.28.3", "@babel/generator": "^7.28.5",
"@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-compilation-targets": "^7.27.2",
"@babel/helper-module-transforms": "^7.28.3", "@babel/helper-module-transforms": "^7.28.3",
"@babel/helpers": "^7.28.3", "@babel/helpers": "^7.28.4",
"@babel/parser": "^7.28.3", "@babel/parser": "^7.28.5",
"@babel/template": "^7.27.2", "@babel/template": "^7.27.2",
"@babel/traverse": "^7.28.3", "@babel/traverse": "^7.28.5",
"@babel/types": "^7.28.2", "@babel/types": "^7.28.5",
"@jridgewell/remapping": "^2.3.5",
"convert-source-map": "^2.0.0", "convert-source-map": "^2.0.0",
"debug": "^4.1.0", "debug": "^4.1.0",
"gensync": "^1.0.0-beta.2", "gensync": "^1.0.0-beta.2",
@@ -174,14 +160,14 @@
} }
}, },
"node_modules/@babel/generator": { "node_modules/@babel/generator": {
"version": "7.28.3", "version": "7.28.5",
"resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.28.3.tgz", "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.28.5.tgz",
"integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/parser": "^7.28.3", "@babel/parser": "^7.28.5",
"@babel/types": "^7.28.2", "@babel/types": "^7.28.5",
"@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/gen-mapping": "^0.3.12",
"@jridgewell/trace-mapping": "^0.3.28", "@jridgewell/trace-mapping": "^0.3.28",
"jsesc": "^3.0.2" "jsesc": "^3.0.2"
@@ -221,18 +207,18 @@
} }
}, },
"node_modules/@babel/helper-create-class-features-plugin": { "node_modules/@babel/helper-create-class-features-plugin": {
"version": "7.28.3", "version": "7.28.5",
"resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz", "resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz",
"integrity": "sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==", "integrity": "sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-annotate-as-pure": "^7.27.3",
"@babel/helper-member-expression-to-functions": "^7.27.1", "@babel/helper-member-expression-to-functions": "^7.28.5",
"@babel/helper-optimise-call-expression": "^7.27.1", "@babel/helper-optimise-call-expression": "^7.27.1",
"@babel/helper-replace-supers": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1",
"@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
"@babel/traverse": "^7.28.3", "@babel/traverse": "^7.28.5",
"semver": "^6.3.1" "semver": "^6.3.1"
}, },
"engines": { "engines": {
@@ -253,14 +239,14 @@
} }
}, },
"node_modules/@babel/helper-member-expression-to-functions": { "node_modules/@babel/helper-member-expression-to-functions": {
"version": "7.27.1", "version": "7.28.5",
"resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", "resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz",
"integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/traverse": "^7.27.1", "@babel/traverse": "^7.28.5",
"@babel/types": "^7.27.1" "@babel/types": "^7.28.5"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@@ -382,14 +368,14 @@
} }
}, },
"node_modules/@babel/helpers": { "node_modules/@babel/helpers": {
"version": "7.28.3", "version": "7.28.4",
"resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.28.3.tgz", "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.28.4.tgz",
"integrity": "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==", "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/template": "^7.27.2", "@babel/template": "^7.27.2",
"@babel/types": "^7.28.2" "@babel/types": "^7.28.4"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@@ -443,14 +429,14 @@
} }
}, },
"node_modules/@babel/plugin-transform-typescript": { "node_modules/@babel/plugin-transform-typescript": {
"version": "7.28.0", "version": "7.28.5",
"resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz", "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.5.tgz",
"integrity": "sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==", "integrity": "sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-annotate-as-pure": "^7.27.3",
"@babel/helper-create-class-features-plugin": "^7.27.1", "@babel/helper-create-class-features-plugin": "^7.28.5",
"@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1",
"@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
"@babel/plugin-syntax-typescript": "^7.27.1" "@babel/plugin-syntax-typescript": "^7.27.1"
@@ -478,18 +464,18 @@
} }
}, },
"node_modules/@babel/traverse": { "node_modules/@babel/traverse": {
"version": "7.28.4", "version": "7.28.5",
"resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.28.4.tgz", "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.28.5.tgz",
"integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==", "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/code-frame": "^7.27.1", "@babel/code-frame": "^7.27.1",
"@babel/generator": "^7.28.3", "@babel/generator": "^7.28.5",
"@babel/helper-globals": "^7.28.0", "@babel/helper-globals": "^7.28.0",
"@babel/parser": "^7.28.4", "@babel/parser": "^7.28.5",
"@babel/template": "^7.27.2", "@babel/template": "^7.27.2",
"@babel/types": "^7.28.4", "@babel/types": "^7.28.5",
"debug": "^4.3.1" "debug": "^4.3.1"
}, },
"engines": { "engines": {
@@ -1207,9 +1193,9 @@
} }
}, },
"node_modules/@rolldown/pluginutils": { "node_modules/@rolldown/pluginutils": {
"version": "1.0.0-beta.29", "version": "1.0.0-beta.50",
"resolved": "https://registry.npmmirror.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.29.tgz", "resolved": "https://registry.npmmirror.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.50.tgz",
"integrity": "sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==", "integrity": "sha512-5e76wQiQVeL1ICOZVUg4LSOVYg9jyhGCin+icYozhsUzM+fHE7kddi1bdiE0jwVqTfkjba3jUFbEkoC9WkdvyA==",
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
@@ -1796,9 +1782,9 @@
} }
}, },
"node_modules/@tanstack/query-core": { "node_modules/@tanstack/query-core": {
"version": "5.90.10", "version": "5.90.11",
"resolved": "https://registry.npmmirror.com/@tanstack/query-core/-/query-core-5.90.10.tgz", "resolved": "https://registry.npmmirror.com/@tanstack/query-core/-/query-core-5.90.11.tgz",
"integrity": "sha512-EhZVFu9rl7GfRNuJLJ3Y7wtbTnENsvzp+YpcAV7kCYiXni1v8qZh++lpw4ch4rrwC0u/EZRnBHIehzCGzwXDSQ==", "integrity": "sha512-f9z/nXhCgWDF4lHqgIE30jxLe4sYv15QodfdPDKYAk7nAEjNcndy4dHz3ezhdUaR23BpWa4I2EH4/DZ0//Uf8A==",
"license": "MIT", "license": "MIT",
"funding": { "funding": {
"type": "github", "type": "github",
@@ -1806,13 +1792,13 @@
} }
}, },
"node_modules/@tanstack/vue-query": { "node_modules/@tanstack/vue-query": {
"version": "5.91.2", "version": "5.92.0",
"resolved": "https://registry.npmmirror.com/@tanstack/vue-query/-/vue-query-5.91.2.tgz", "resolved": "https://registry.npmmirror.com/@tanstack/vue-query/-/vue-query-5.92.0.tgz",
"integrity": "sha512-ReppmGrVLtiWhwHnhmGJftBbVMf0BrLWtfOk6rQs0qWrhgCei1oUiLsqTCyES/zeZVqaUTmAuUpBrLwQ4DmQTQ==", "integrity": "sha512-4DcB+vkYjYtrysrZLnoPTz2/N/1pPtJm9j1dat+/bp7lvMGAiedJIsIlnrusIlRVV2OeU5SKZy7PhwcX1U4stw==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@tanstack/match-sorter-utils": "^8.19.4", "@tanstack/match-sorter-utils": "^8.19.4",
"@tanstack/query-core": "5.90.10", "@tanstack/query-core": "5.90.11",
"@vue/devtools-api": "^6.6.3", "@vue/devtools-api": "^6.6.3",
"vue-demi": "^0.14.10" "vue-demi": "^0.14.10"
}, },
@@ -1934,13 +1920,13 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/@vitejs/plugin-vue": { "node_modules/@vitejs/plugin-vue": {
"version": "6.0.1", "version": "6.0.2",
"resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-6.0.1.tgz", "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-6.0.2.tgz",
"integrity": "sha512-+MaE752hU0wfPFJEUAIxqw18+20euHHdxVtMvbFcOEpjEyfqXH/5DCoTHiVJ0J29EhTJdoTkjEv5YBKU9dnoTw==", "integrity": "sha512-iHmwV3QcVGGvSC1BG5bZ4z6iwa1SOpAPWmnjOErd4Ske+lZua5K9TtAVdx0gMBClJ28DViCbSmZitjWZsWO3LA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@rolldown/pluginutils": "1.0.0-beta.29" "@rolldown/pluginutils": "1.0.0-beta.50"
}, },
"engines": { "engines": {
"node": "^20.19.0 || >=22.12.0" "node": "^20.19.0 || >=22.12.0"
@@ -1951,17 +1937,17 @@
} }
}, },
"node_modules/@vitejs/plugin-vue-jsx": { "node_modules/@vitejs/plugin-vue-jsx": {
"version": "5.1.1", "version": "5.1.2",
"resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-5.1.1.tgz", "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-5.1.2.tgz",
"integrity": "sha512-uQkfxzlF8SGHJJVH966lFTdjM/lGcwJGzwAHpVqAPDD/QcsqoUGa+q31ox1BrUfi+FLP2ChVp7uLXE3DkHyDdQ==", "integrity": "sha512-3a2BOryRjG/Iih87x87YXz5c8nw27eSlHytvSKYfp8ZIsp5+FgFQoKeA7k2PnqWpjJrv6AoVTMnvmuKUXb771A==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/core": "^7.28.3", "@babel/core": "^7.28.5",
"@babel/plugin-syntax-typescript": "^7.27.1", "@babel/plugin-syntax-typescript": "^7.27.1",
"@babel/plugin-transform-typescript": "^7.28.0", "@babel/plugin-transform-typescript": "^7.28.5",
"@rolldown/pluginutils": "^1.0.0-beta.34", "@rolldown/pluginutils": "^1.0.0-beta.50",
"@vue/babel-plugin-jsx": "^1.5.0" "@vue/babel-plugin-jsx": "^2.0.1"
}, },
"engines": { "engines": {
"node": "^20.19.0 || >=22.12.0" "node": "^20.19.0 || >=22.12.0"
@@ -1971,66 +1957,6 @@
"vue": "^3.0.0" "vue": "^3.0.0"
} }
}, },
"node_modules/@vitejs/plugin-vue-jsx/node_modules/@rolldown/pluginutils": {
"version": "1.0.0-beta.34",
"resolved": "https://registry.npmmirror.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.34.tgz",
"integrity": "sha512-LyAREkZHP5pMom7c24meKmJCdhf2hEyvam2q0unr3or9ydwDL+DJ8chTF6Av/RFPb3rH8UFBdMzO5MxTZW97oA==",
"dev": true,
"license": "MIT"
},
"node_modules/@vitejs/plugin-vue-jsx/node_modules/@vue/babel-helper-vue-transform-on": {
"version": "1.5.0",
"resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.5.0.tgz",
"integrity": "sha512-0dAYkerNhhHutHZ34JtTl2czVQHUNWv6xEbkdF5W+Yrv5pCWsqjeORdOgbtW2I9gWlt+wBmVn+ttqN9ZxR5tzA==",
"dev": true,
"license": "MIT"
},
"node_modules/@vitejs/plugin-vue-jsx/node_modules/@vue/babel-plugin-jsx": {
"version": "1.5.0",
"resolved": "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.5.0.tgz",
"integrity": "sha512-mneBhw1oOqCd2247O0Yw/mRwC9jIGACAJUlawkmMBiNmL4dGA2eMzuNZVNqOUfYTa6vqmND4CtOPzmEEEqLKFw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-module-imports": "^7.27.1",
"@babel/helper-plugin-utils": "^7.27.1",
"@babel/plugin-syntax-jsx": "^7.27.1",
"@babel/template": "^7.27.2",
"@babel/traverse": "^7.28.0",
"@babel/types": "^7.28.2",
"@vue/babel-helper-vue-transform-on": "1.5.0",
"@vue/babel-plugin-resolve-type": "1.5.0",
"@vue/shared": "^3.5.18"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
},
"peerDependenciesMeta": {
"@babel/core": {
"optional": true
}
}
},
"node_modules/@vitejs/plugin-vue-jsx/node_modules/@vue/babel-plugin-resolve-type": {
"version": "1.5.0",
"resolved": "https://registry.npmmirror.com/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.5.0.tgz",
"integrity": "sha512-Wm/60o+53JwJODm4Knz47dxJnLDJ9FnKnGZJbUUf8nQRAtt6P+undLUAVU3Ha33LxOJe6IPoifRQ6F/0RrU31w==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.27.1",
"@babel/helper-module-imports": "^7.27.1",
"@babel/helper-plugin-utils": "^7.27.1",
"@babel/parser": "^7.28.0",
"@vue/compiler-sfc": "^3.5.18"
},
"funding": {
"url": "https://github.com/sponsors/sxzz"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@vue/babel-helper-vue-transform-on": { "node_modules/@vue/babel-helper-vue-transform-on": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-2.0.1.tgz", "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-2.0.1.tgz",
@@ -2085,39 +2011,39 @@
} }
}, },
"node_modules/@vue/compiler-core": { "node_modules/@vue/compiler-core": {
"version": "3.5.24", "version": "3.5.25",
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.24.tgz", "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.25.tgz",
"integrity": "sha512-eDl5H57AOpNakGNAkFDH+y7kTqrQpJkZFXhWZQGyx/5Wh7B1uQYvcWkvZi11BDhscPgj8N7XV3oRwiPnx1Vrig==", "integrity": "sha512-vay5/oQJdsNHmliWoZfHPoVZZRmnSWhug0BYT34njkYTPqClh3DNWLkZNJBVSjsNMrg0CCrBfoKkjZQPM/QVUw==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/parser": "^7.28.5", "@babel/parser": "^7.28.5",
"@vue/shared": "3.5.24", "@vue/shared": "3.5.25",
"entities": "^4.5.0", "entities": "^4.5.0",
"estree-walker": "^2.0.2", "estree-walker": "^2.0.2",
"source-map-js": "^1.2.1" "source-map-js": "^1.2.1"
} }
}, },
"node_modules/@vue/compiler-dom": { "node_modules/@vue/compiler-dom": {
"version": "3.5.24", "version": "3.5.25",
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.24.tgz", "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.25.tgz",
"integrity": "sha512-1QHGAvs53gXkWdd3ZMGYuvQFXHW4ksKWPG8HP8/2BscrbZ0brw183q2oNWjMrSWImYLHxHrx1ItBQr50I/q2zw==", "integrity": "sha512-4We0OAcMZsKgYoGlMjzYvaoErltdFI2/25wqanuTu+S4gismOTRTBPi4IASOjxWdzIwrYSjnqONfKvuqkXzE2Q==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@vue/compiler-core": "3.5.24", "@vue/compiler-core": "3.5.25",
"@vue/shared": "3.5.24" "@vue/shared": "3.5.25"
} }
}, },
"node_modules/@vue/compiler-sfc": { "node_modules/@vue/compiler-sfc": {
"version": "3.5.24", "version": "3.5.25",
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.24.tgz", "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.25.tgz",
"integrity": "sha512-8EG5YPRgmTB+YxYBM3VXy8zHD9SWHUJLIGPhDovo3Z8VOgvP+O7UP5vl0J4BBPWYD9vxtBabzW1EuEZ+Cqs14g==", "integrity": "sha512-PUgKp2rn8fFsI++lF2sO7gwO2d9Yj57Utr5yEsDf3GNaQcowCLKL7sf+LvVFvtJDXUp/03+dC6f2+LCv5aK1ag==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@babel/parser": "^7.28.5", "@babel/parser": "^7.28.5",
"@vue/compiler-core": "3.5.24", "@vue/compiler-core": "3.5.25",
"@vue/compiler-dom": "3.5.24", "@vue/compiler-dom": "3.5.25",
"@vue/compiler-ssr": "3.5.24", "@vue/compiler-ssr": "3.5.25",
"@vue/shared": "3.5.24", "@vue/shared": "3.5.25",
"estree-walker": "^2.0.2", "estree-walker": "^2.0.2",
"magic-string": "^0.30.21", "magic-string": "^0.30.21",
"postcss": "^8.5.6", "postcss": "^8.5.6",
@@ -2125,13 +2051,13 @@
} }
}, },
"node_modules/@vue/compiler-ssr": { "node_modules/@vue/compiler-ssr": {
"version": "3.5.24", "version": "3.5.25",
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.24.tgz", "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.25.tgz",
"integrity": "sha512-trOvMWNBMQ/odMRHW7Ae1CdfYx+7MuiQu62Jtu36gMLXcaoqKvAyh+P73sYG9ll+6jLB6QPovqoKGGZROzkFFg==", "integrity": "sha512-ritPSKLBcParnsKYi+GNtbdbrIE1mtuFEJ4U1sWeuOMlIziK5GtOL85t5RhsNy4uWIXPgk+OUdpnXiTdzn8o3A==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@vue/compiler-dom": "3.5.24", "@vue/compiler-dom": "3.5.25",
"@vue/shared": "3.5.24" "@vue/shared": "3.5.25"
} }
}, },
"node_modules/@vue/devtools-api": { "node_modules/@vue/devtools-api": {
@@ -2165,64 +2091,64 @@
} }
}, },
"node_modules/@vue/reactivity": { "node_modules/@vue/reactivity": {
"version": "3.5.24", "version": "3.5.25",
"resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.24.tgz", "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.25.tgz",
"integrity": "sha512-BM8kBhtlkkbnyl4q+HiF5R5BL0ycDPfihowulm02q3WYp2vxgPcJuZO866qa/0u3idbMntKEtVNuAUp5bw4teg==", "integrity": "sha512-5xfAypCQepv4Jog1U4zn8cZIcbKKFka3AgWHEFQeK65OW+Ys4XybP6z2kKgws4YB43KGpqp5D/K3go2UPPunLA==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@vue/shared": "3.5.24" "@vue/shared": "3.5.25"
} }
}, },
"node_modules/@vue/runtime-core": { "node_modules/@vue/runtime-core": {
"version": "3.5.24", "version": "3.5.25",
"resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.24.tgz", "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.25.tgz",
"integrity": "sha512-RYP/byyKDgNIqfX/gNb2PB55dJmM97jc9wyF3jK7QUInYKypK2exmZMNwnjueWwGceEkP6NChd3D2ZVEp9undQ==", "integrity": "sha512-Z751v203YWwYzy460bzsYQISDfPjHTl+6Zzwo/a3CsAf+0ccEjQ8c+0CdX1WsumRTHeywvyUFtW6KvNukT/smA==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@vue/reactivity": "3.5.24", "@vue/reactivity": "3.5.25",
"@vue/shared": "3.5.24" "@vue/shared": "3.5.25"
} }
}, },
"node_modules/@vue/runtime-dom": { "node_modules/@vue/runtime-dom": {
"version": "3.5.24", "version": "3.5.25",
"resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.24.tgz", "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.25.tgz",
"integrity": "sha512-Z8ANhr/i0XIluonHVjbUkjvn+CyrxbXRIxR7wn7+X7xlcb7dJsfITZbkVOeJZdP8VZwfrWRsWdShH6pngMxRjw==", "integrity": "sha512-a4WrkYFbb19i9pjkz38zJBg8wa/rboNERq3+hRRb0dHiJh13c+6kAbgqCPfMaJ2gg4weWD3APZswASOfmKwamA==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@vue/reactivity": "3.5.24", "@vue/reactivity": "3.5.25",
"@vue/runtime-core": "3.5.24", "@vue/runtime-core": "3.5.25",
"@vue/shared": "3.5.24", "@vue/shared": "3.5.25",
"csstype": "^3.1.3" "csstype": "^3.1.3"
} }
}, },
"node_modules/@vue/server-renderer": { "node_modules/@vue/server-renderer": {
"version": "3.5.24", "version": "3.5.25",
"resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.24.tgz", "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.25.tgz",
"integrity": "sha512-Yh2j2Y4G/0/4z/xJ1Bad4mxaAk++C2v4kaa8oSYTMJBJ00/ndPuxCnWeot0/7/qafQFLh5pr6xeV6SdMcE/G1w==", "integrity": "sha512-UJaXR54vMG61i8XNIzTSf2Q7MOqZHpp8+x3XLGtE3+fL+nQd+k7O5+X3D/uWrnQXOdMw5VPih+Uremcw+u1woQ==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@vue/compiler-ssr": "3.5.24", "@vue/compiler-ssr": "3.5.25",
"@vue/shared": "3.5.24" "@vue/shared": "3.5.25"
}, },
"peerDependencies": { "peerDependencies": {
"vue": "3.5.24" "vue": "3.5.25"
} }
}, },
"node_modules/@vue/shared": { "node_modules/@vue/shared": {
"version": "3.5.24", "version": "3.5.25",
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.24.tgz", "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.25.tgz",
"integrity": "sha512-9cwHL2EsJBdi8NY22pngYYWzkTDhld6fAD6jlaeloNGciNSJL6bLpbxVgXl96X00Jtc6YWQv96YA/0sxex/k1A==", "integrity": "sha512-AbOPdQQnAnzs58H2FrrDxYj/TJfmeS2jdfEEhgiKINy+bnOANmVizIEgq1r+C5zsbs6l1CCQxtcj71rwNQ4jWg==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/@vueuse/core": { "node_modules/@vueuse/core": {
"version": "14.0.0", "version": "14.1.0",
"resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-14.0.0.tgz", "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-14.1.0.tgz",
"integrity": "sha512-d6tKRWkZE8IQElX2aHBxXOMD478fHIYV+Dzm2y9Ag122ICBpNKtGICiXKOhWU3L1kKdttDD9dCMS4bGP3jhCTQ==", "integrity": "sha512-rgBinKs07hAYyPF834mDTigH7BtPqvZ3Pryuzt1SD/lg5wEcWqvwzXXYGEDb2/cP0Sj5zSvHl3WkmMELr5kfWw==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@types/web-bluetooth": "^0.0.21", "@types/web-bluetooth": "^0.0.21",
"@vueuse/metadata": "14.0.0", "@vueuse/metadata": "14.1.0",
"@vueuse/shared": "14.0.0" "@vueuse/shared": "14.1.0"
}, },
"funding": { "funding": {
"url": "https://github.com/sponsors/antfu" "url": "https://github.com/sponsors/antfu"
@@ -2232,18 +2158,18 @@
} }
}, },
"node_modules/@vueuse/metadata": { "node_modules/@vueuse/metadata": {
"version": "14.0.0", "version": "14.1.0",
"resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-14.0.0.tgz", "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-14.1.0.tgz",
"integrity": "sha512-6yoGqbJcMldVCevkFiHDBTB1V5Hq+G/haPlGIuaFZHpXC0HADB0EN1ryQAAceiW+ryS3niUwvdFbGiqHqBrfVA==", "integrity": "sha512-7hK4g015rWn2PhKcZ99NyT+ZD9sbwm7SGvp7k+k+rKGWnLjS/oQozoIZzWfCewSUeBmnJkIb+CNr7Zc/EyRnnA==",
"license": "MIT", "license": "MIT",
"funding": { "funding": {
"url": "https://github.com/sponsors/antfu" "url": "https://github.com/sponsors/antfu"
} }
}, },
"node_modules/@vueuse/shared": { "node_modules/@vueuse/shared": {
"version": "14.0.0", "version": "14.1.0",
"resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-14.0.0.tgz", "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-14.1.0.tgz",
"integrity": "sha512-mTCA0uczBgurRlwVaQHfG0Ja7UdGe4g9mwffiJmvLiTtp1G4AQyIjej6si/k8c8pUwTfVpNufck+23gXptPAkw==", "integrity": "sha512-EcKxtYvn6gx1F8z9J5/rsg3+lTQnvOruQd8fUecW99DCK04BkWD7z5KQ/wTAx+DazyoEE9dJt/zV8OIEQbM6kw==",
"license": "MIT", "license": "MIT",
"funding": { "funding": {
"url": "https://github.com/sponsors/antfu" "url": "https://github.com/sponsors/antfu"
@@ -2728,9 +2654,9 @@
} }
}, },
"node_modules/csstype": { "node_modules/csstype": {
"version": "3.2.2", "version": "3.2.3",
"resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.2.2.tgz", "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.2.3.tgz",
"integrity": "sha512-D80T+tiqkd/8B0xNlbstWDG4x6aqVfO52+OlSUNIdkTvmNw0uQpJLeos2J/2XvpyidAFuTPmpad+tUxLndwj6g==", "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/dayjs": { "node_modules/dayjs": {
@@ -3053,16 +2979,16 @@
} }
}, },
"node_modules/eslint-plugin-vue": { "node_modules/eslint-plugin-vue": {
"version": "10.5.1", "version": "10.6.2",
"resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-10.5.1.tgz", "resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-10.6.2.tgz",
"integrity": "sha512-SbR9ZBUFKgvWAbq3RrdCtWaW0IKm6wwUiApxf3BVTNfqUIo4IQQmreMg2iHFJJ6C/0wss3LXURBJ1OwS/MhFcQ==", "integrity": "sha512-nA5yUs/B1KmKzvC42fyD0+l9Yd+LtEpVhWRbXuDj0e+ZURcTtyRbMDWUeJmTAh2wC6jC83raS63anNM2YT3NPw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@eslint-community/eslint-utils": "^4.4.0", "@eslint-community/eslint-utils": "^4.4.0",
"natural-compare": "^1.4.0", "natural-compare": "^1.4.0",
"nth-check": "^2.1.1", "nth-check": "^2.1.1",
"postcss-selector-parser": "^6.0.15", "postcss-selector-parser": "^7.1.0",
"semver": "^7.6.3", "semver": "^7.6.3",
"xml-name-validator": "^4.0.0" "xml-name-validator": "^4.0.0"
}, },
@@ -4666,9 +4592,9 @@
} }
}, },
"node_modules/postcss-selector-parser": { "node_modules/postcss-selector-parser": {
"version": "6.1.2", "version": "7.1.0",
"resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
"integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@@ -4696,9 +4622,9 @@
} }
}, },
"node_modules/prettier": { "node_modules/prettier": {
"version": "3.6.2", "version": "3.7.3",
"resolved": "https://registry.npmmirror.com/prettier/-/prettier-3.6.2.tgz", "resolved": "https://registry.npmmirror.com/prettier/-/prettier-3.7.3.tgz",
"integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "integrity": "sha512-QgODejq9K3OzoBbuyobZlUhznP5SKwPqp+6Q6xw6o8gnhr4O85L2U915iM2IDcfF2NPXVaM9zlo9tdwipnYwzg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"bin": { "bin": {
@@ -5420,9 +5346,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/vite": { "node_modules/vite": {
"version": "7.2.2", "version": "7.2.6",
"resolved": "https://registry.npmmirror.com/vite/-/vite-7.2.2.tgz", "resolved": "https://registry.npmmirror.com/vite/-/vite-7.2.6.tgz",
"integrity": "sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==", "integrity": "sha512-tI2l/nFHC5rLh7+5+o7QjKjSR04ivXDF4jcgV0f/bTQ+OJiITy5S6gaynVsEM+7RqzufMnVbIon6Sr5x1SDYaQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"peer": true, "peer": true,
@@ -5496,17 +5422,17 @@
} }
}, },
"node_modules/vue": { "node_modules/vue": {
"version": "3.5.24", "version": "3.5.25",
"resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.24.tgz", "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.25.tgz",
"integrity": "sha512-uTHDOpVQTMjcGgrqFPSb8iO2m1DUvo+WbGqoXQz8Y1CeBYQ0FXf2z1gLRaBtHjlRz7zZUBHxjVB5VTLzYkvftg==", "integrity": "sha512-YLVdgv2K13WJ6n+kD5owehKtEXwdwXuj2TTyJMsO7pSeKw2bfRNZGjhB7YzrpbMYj5b5QsUebHpOqR3R3ziy/g==",
"license": "MIT", "license": "MIT",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"@vue/compiler-dom": "3.5.24", "@vue/compiler-dom": "3.5.25",
"@vue/compiler-sfc": "3.5.24", "@vue/compiler-sfc": "3.5.25",
"@vue/runtime-dom": "3.5.24", "@vue/runtime-dom": "3.5.25",
"@vue/server-renderer": "3.5.24", "@vue/server-renderer": "3.5.25",
"@vue/shared": "3.5.24" "@vue/shared": "3.5.25"
}, },
"peerDependencies": { "peerDependencies": {
"typescript": "*" "typescript": "*"
@@ -5536,9 +5462,9 @@
} }
}, },
"node_modules/vue-data-ui": { "node_modules/vue-data-ui": {
"version": "3.7.6", "version": "3.7.14",
"resolved": "https://registry.npmmirror.com/vue-data-ui/-/vue-data-ui-3.7.6.tgz", "resolved": "https://registry.npmmirror.com/vue-data-ui/-/vue-data-ui-3.7.14.tgz",
"integrity": "sha512-nXd4uZ0SrP1Ch8L/AP81ncPN6xpy0qErQzxCh8dSuY3p1tooSQ1/Ugx3xT78+S7aYrUKlMgc91KXCutqn7TIkA==", "integrity": "sha512-MhEd3ZN0w1VVAnJPwo1xCcx1bg8owGm3+4Apn/kxO/dh+k3NqOXdGjaRrKOZdqc63l1GQ03hrAVknYxpILo9hA==",
"license": "MIT", "license": "MIT",
"peerDependencies": { "peerDependencies": {
"jspdf": "^3.0.1", "jspdf": "^3.0.1",

View File

@@ -13,9 +13,9 @@
"dependencies": { "dependencies": {
"@arco-design/color": "^0.4.0", "@arco-design/color": "^0.4.0",
"@arco-design/web-vue": "^2.57.0", "@arco-design/web-vue": "^2.57.0",
"@tanstack/vue-query": "^5.91.2", "@tanstack/vue-query": "^5.92.0",
"@tinymce/tinymce-vue": "^6.3.0", "@tinymce/tinymce-vue": "^6.3.0",
"@vueuse/core": "^14.0.0", "@vueuse/core": "^14.1.0",
"axios": "^1.13.2", "axios": "^1.13.2",
"class-variance-authority": "^0.7.1", "class-variance-authority": "^0.7.1",
"clsx": "^2.1.1", "clsx": "^2.1.1",
@@ -32,10 +32,10 @@
"tailwind-merge": "^3.4.0", "tailwind-merge": "^3.4.0",
"tinymce": "^7.9.1", "tinymce": "^7.9.1",
"tw-animate-css": "^1.4.0", "tw-animate-css": "^1.4.0",
"vue": "^3.5.24", "vue": "^3.5.25",
"vue-clipboard3": "^2.0.0", "vue-clipboard3": "^2.0.0",
"vue-color-kit": "^1.0.6", "vue-color-kit": "^1.0.6",
"vue-data-ui": "^3.7.6", "vue-data-ui": "^3.7.14",
"vue-router": "^4.6.3", "vue-router": "^4.6.3",
"vuedraggable": "^2.24.3" "vuedraggable": "^2.24.3"
}, },
@@ -46,20 +46,20 @@
"@types/node": "^24.10.1", "@types/node": "^24.10.1",
"@types/nprogress": "^0.2.3", "@types/nprogress": "^0.2.3",
"@types/qs": "^6.14.0", "@types/qs": "^6.14.0",
"@vitejs/plugin-vue": "^6.0.1", "@vitejs/plugin-vue": "^6.0.2",
"@vitejs/plugin-vue-jsx": "^5.1.1", "@vitejs/plugin-vue-jsx": "^5.1.2",
"@vue/babel-plugin-jsx": "^2.0.1", "@vue/babel-plugin-jsx": "^2.0.1",
"browserslist": "^4.28.0", "browserslist": "^4.28.0",
"eslint": "^9.39.1", "eslint": "^9.39.1",
"eslint-plugin-vue": "^10.5.1", "eslint-plugin-vue": "^10.6.2",
"less": "^4.4.2", "less": "^4.4.2",
"less-loader": "^12.3.0", "less-loader": "^12.3.0",
"postcss": "^8.5.6", "postcss": "^8.5.6",
"prettier": "^3.6.2", "prettier": "^3.7.3",
"rollup-plugin-visualizer": "^6.0.5", "rollup-plugin-visualizer": "^6.0.5",
"tailwindcss": "^4.1.17", "tailwindcss": "^4.1.17",
"typescript": "^5.9.3", "typescript": "^5.9.3",
"vite": "^7.2.2", "vite": "^7.2.6",
"vue-eslint-parser": "^10.2.0" "vue-eslint-parser": "^10.2.0"
} }
} }

View File

@@ -0,0 +1,23 @@
import { request } from "@/api/request"
const AI_API_BASE = import.meta.env.VUE_APP_AI_API_BASE || "http://192.168.0.63:8777"
interface DataRowType {
question: string
stream: boolean
}
export default {
/**
* 请求AI生成测试项
* @returns 可流式或一次性
*/
getAiTestItem(data: DataRowType) {
return request({
url: `${AI_API_BASE}/api/local_doc_qa/testing_item`,
timeout: 20000,
method: "post",
data
})
}
}

View File

@@ -0,0 +1,81 @@
<style scoped>
button {
position: relative;
padding: 10px 20px;
border-radius: 0px;
border: 1px solid rgb(61, 106, 255);
font-size: 14px;
text-transform: uppercase;
font-weight: 600;
letter-spacing: 2px;
background: transparent;
color: rgb(61, 106, 255);
overflow: hidden;
box-shadow: 0 0 0 0 transparent;
-webkit-transition: all 0.2s ease-in;
-moz-transition: all 0.2s ease-in;
transition: all 0.2s ease-in;
}
button:hover {
background: rgb(61, 106, 255);
box-shadow: 0 0 30px 5px rgba(0, 142, 236, 0.815);
-webkit-transition: all 0.2s ease-out;
-moz-transition: all 0.2s ease-out;
transition: all 0.2s ease-out;
color: #fff;
cursor: pointer;
}
button:hover::before {
-webkit-animation: sh02 0.5s 0s linear;
-moz-animation: sh02 0.5s 0s linear;
animation: sh02 0.5s 0s linear;
}
button::before {
content: "";
display: block;
width: 0px;
height: 86%;
position: absolute;
top: 7%;
left: 0%;
opacity: 0;
background: #fff;
box-shadow: 0 0 50px 30px #fff;
-webkit-transform: skewX(-20deg);
-moz-transform: skewX(-20deg);
-ms-transform: skewX(-20deg);
-o-transform: skewX(-20deg);
transform: skewX(-20deg);
}
@keyframes sh02 {
from {
opacity: 0;
left: 0%;
}
50% {
opacity: 1;
}
to {
opacity: 0;
left: 100%;
}
}
button:active {
box-shadow: 0 0 0 0 transparent;
-webkit-transition: box-shadow 0.2s ease-in;
-moz-transition: box-shadow 0.2s ease-in;
transition: box-shadow 0.2s ease-in;
}
</style>
<template>
<button>AI生成测试项</button>
</template>

View File

@@ -85,7 +85,7 @@
<template v-else> <template v-else>
<tr> <tr>
<td colspan="3"> <td colspan="3">
<div class="flex justify-center items-center p-2 border-1"> <div class="flex justify-center items-center p-2 border">
<a-alert>暂无测试子项条目请添加</a-alert> <a-alert>暂无测试子项条目请添加</a-alert>
</div> </div>
</td> </td>

View File

@@ -91,4 +91,15 @@ tool.chnRoundNameArray = [
"第十六轮" "第十六轮"
] ]
// 将html变为纯文本
tool.htmlToTextWithDOM = (htmlString) => {
// 1. 创建一个临时的div元素
const tempDiv = document.createElement("div")
// 2. 将HTML字符串设置为临时div的内容
tempDiv.innerHTML = htmlString
// 3. 使用innerText属性获取纯文本这会自动忽略所有HTML标签
const text = tempDiv.innerText || tempDiv.textContent
return text
}
export default tool export default tool

View File

@@ -0,0 +1,219 @@
<template>
<div class="ai-modal-container">
<a-modal v-model:visible="visible" width="80%" unmount-on-close draggable>
<template #title> AI生成测试项 </template>
<div class="flex flex-col">
<a-button type="primary" :disabled="generateLoading" @click="generateClick">{{
generateLoading ? "AI正在生成测试项中..." : "点击生成测试项"
}}</a-button>
<a-progress
:percent="percent"
:style="{ width: '100%' }"
size="large"
:show-text="false"
:color="{
'0%': 'rgb(var(--primary-6))',
'100%': 'rgb(var(--success-6))'
}"
class="mb-2"
/>
<a-list :loading="listLoading" :data="dataList">
<template #header> 设计需求{{ designObj?.name ?? "暂无内容" }} </template>
<template #item="{ item, index }">
<a-list-item>
<div class="item-container">
<a-input-group>
<div class="index-hao">{{ indexTu[index] }}</div>
测试项
<a-input placeholder="测试项标识" v-model="item.ident" :style="{ width: '100px' }" @click.stop.prevent></a-input>
<a-input placeholder="测试项名称" v-model="item.title" :style="{ width: '200px' }" @click.stop.prevent></a-input>
<a-select placeholder="选择优先级" v-model="item.priority" :style="{ width: '100px' }">
<a-option value="1"></a-option>
<a-option value="2"></a-option>
<a-option value="3"></a-option>
</a-select>
<a-select placeholder="选择测试类型" v-model="item.testType" :style="{ width: '200px' }">
<a-option v-for="type in testType" :key="type.key" :value="type.key">
{{ type.title }}
</a-option>
</a-select>
<a-select placeholder="选择测试手段" multiple v-model="item.testMethod" :style="{ width: '250px' }">
<a-option v-for="method in testMethod" :key="method.key" :value="method.key">
{{ method.title }}
</a-option>
</a-select>
</a-input-group>
<div class="m-2 flex justify-start items-center">
<div class="label">测试项描述</div>
<div class="input flex-1">
<a-input v-model="item.demandDescription"></a-input>
</div>
</div>
<div class="arco-table arco-table-size-large arco-table-border arco-table-stripe arco-table-hover">
<div class="arco-table-container">
<table class="arco-table-element" cellpadding="0" cellspacing="0">
<thead>
<tr class="arco-table-tr">
<th class="arco-table-th" :width="100">
<span class="arco-table-cell arco-table-cell-align-center">
<span class="arco-table-th-title">子项序号</span>
</span>
</th>
<th class="arco-table-th" :width="400">
<span class="arco-table-cell arco-table-cell-align-center">
<span class="arco-table-th-title">测试子项描述</span>
</span>
</th>
<th class="arco-table-th" :width="800">
<span class="arco-table-cell arco-table-cell-align-center">
<span class="arco-table-th-title">测试子项步骤</span>
</span>
</th>
</tr>
</thead>
<tbody>
<!-- 这里tr要v-for渲染 -->
<tr class="arco-table-tr" v-for="(row, idx) in item.children" :key="idx">
<td class="arco-table-td">
<span class="arco-table-cell arco-table-cell-align-center">
{{ idx + 1 }}
</span>
</td>
<td class="arco-table-td">
<span class="arco-table-cell">
<a-textarea auto-size placeholder="请填写测试子项名称" v-model="row.name"></a-textarea>
</span>
</td>
<td class="arco-table-td">
<span class="arco-table-cell">
<OpeAndExpect v-model="row.subStep" />
</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</a-list-item>
</template>
</a-list>
</div>
</a-modal>
</div>
</template>
<script setup lang="ts">
import { onUnmounted, ref } from "vue"
import { useRoute } from "vue-router"
import designApi from "@/api/project/designDemand"
import dictApi from "@/api/common"
import OpeAndExpect from "./OpeAndExpect.vue" // 操作和预期子表格
import aiApi from "@/api/outs/aiApi"
import { Message } from "@arco-design/web-vue"
import tool from "@/utils/tool"
// 常量
const indexTu = "①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳㉑㉒㉓㉔㉕㉖㉗㉘㉙㉚"
// 初始化测试类型-一起请求处理错误
const testType = ref<any>([])
const testMethod = ref<any>([])
const fetchTestType = async () => {
try {
const [typeResponse, methodResponse] = await Promise.all([dictApi.getDict("testType"), dictApi.getDict("testMethod")])
testType.value = typeResponse.data
testMethod.value = methodResponse.data
} catch (e) {
Message.error("初始化测试类型或测试手段错误,请检查网络后重试!")
}
}
fetchTestType()
// 初始化设计需求
const route = useRoute()
const getDesign = async () => {
try {
const res = await designApi.getDesignDemandOne({ project_id: route.query.id, key: route.query.key })
designObj.value = res.data
} catch (e) {
Message.error("初始化设计需求信息错误,请检查网络后重试!")
}
}
getDesign()
const designObj: any = ref()
// 进度条和列表加载loading
const percent = ref(0.0)
const listLoading = ref(false)
// 根据测试项生成按钮
const generateLoading = ref(false)
const generateClick = async () => {
try {
generateLoading.value = true
listLoading.value = true
percent.value = 0.1 // 开始进度
startProgressSimulation()
// 变量给AI的问题
const question = tool.htmlToTextWithDOM(designObj.value?.description || "")
console.log("给AI的问题如下", question)
const res = await aiApi.getAiTestItem({ question: question, stream: false })
percent.value = 1.0 // 完成进度
console.log("AI接口返回如下", res)
Message.success("生成测试项成功,请完善信息后录入数据")
} catch (e) {
percent.value = 0.0
} finally {
stopProgressSimulation()
generateLoading.value = false
setTimeout(() => {
listLoading.value = false
}, 500)
}
}
// 生成的AI测试项数据
const dataList = ref([])
// 进度条模拟变量和函数
const progressInterval = ref<NodeJS.Timeout>()
const startProgressSimulation = () => {
progressInterval.value = setInterval(() => {
if (percent.value < 0.8) {
percent.value += (0.8 - percent.value) * 0.1
}
}, 200)
}
const stopProgressSimulation = () => {
if (progressInterval.value) {
clearInterval(progressInterval.value)
progressInterval.value = undefined
}
}
onUnmounted(() => {
stopProgressSimulation()
})
// defineModel
const visible = defineModel<boolean>("visible", { default: false })
</script>
<style scoped lang="less">
.index-hao {
font-size: 18px;
padding: 0 9px;
color: rgb(var(--primary-5));
}
:deep(.arco-list-item) {
border: 1px solid #999 !important;
}
:deep(.arco-progress-line-bar) {
border-radius: 0 !important;
}
:deep(.arco-progress-line) {
border-radius: 0 !important;
}
</style>

View File

@@ -0,0 +1,47 @@
<template>
<div class="arco-table arco-table-size-large arco-table-border arco-table-stripe arco-table-hover">
<div class="arco-table-container">
<table class="arco-table-element" cellpadding="0" cellspacing="0">
<thead>
<tr class="arco-table-tr">
<th class="arco-table-th" :width="400">
<span class="arco-table-cell arco-table-cell-align-center">
<span class="arco-table-th-title">操作</span>
</span>
</th>
<th class="arco-table-th" :width="400">
<span class="arco-table-cell arco-table-cell-align-center">
<span class="arco-table-th-title">预期</span>
</span>
</th>
</tr>
</thead>
<tbody>
<tr class="arco-table-tr" v-for="(record, idx) in modelValue" :key="idx">
<td class="arco-table-td">
<span class="arco-table-cell arco-table-cell-align-center">
<a-textarea auto-size placeholder="请填写步骤" v-model="record.operation"></a-textarea>
</span>
</td>
<td class="arco-table-td">
<span class="arco-table-cell arco-table-cell-align-center">
<a-textarea auto-size placeholder="请填写预期" v-model="record.expect"></a-textarea>
</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</template>
<script setup lang="ts">
const modelValue = defineModel<
{
operation: string
expect: string
}[]
>()
</script>
<style scoped></style>

View File

@@ -26,6 +26,8 @@
<a-button type="outline" @click="handleReplaceClick">批量替换</a-button> <a-button type="outline" @click="handleReplaceClick">批量替换</a-button>
<a-divider direction="vertical" type="double" /> <a-divider direction="vertical" type="double" />
<a-button type="outline" @click="handleOpenReplacePriority">批量修改优先级</a-button> <a-button type="outline" @click="handleOpenReplacePriority">批量修改优先级</a-button>
<a-divider direction="vertical" type="double" />
<AiButton @click="handleAiButtonClick" />
</a-space> </a-space>
</template> </template>
<!-- 版本字段的插槽 --> <!-- 版本字段的插槽 -->
@@ -66,6 +68,8 @@
/> />
<!-- 批量修改优先级 --> <!-- 批量修改优先级 -->
<ReplacePriority @modifySuccess="crudRef.refresh()" ref="replacePriorityRef" /> <ReplacePriority @modifySuccess="crudRef.refresh()" ref="replacePriorityRef" />
<!-- AI-Modal -->
<AiModal v-model:visible="ai_modal_visible"></AiModal>
</div> </div>
</template> </template>
@@ -74,6 +78,8 @@ import { ref } from "vue"
import commonApi from "@/api/common" import commonApi from "@/api/common"
import { useRoute } from "vue-router" import { useRoute } from "vue-router"
import { Message } from "@arco-design/web-vue" import { Message } from "@arco-design/web-vue"
import AiButton from "@/components/ai-button/index.vue"
import AiModal from "./AiModal.vue"
// hooks // hooks
import useCrudOpMore from "./hooks/useCrudOpMore" import useCrudOpMore from "./hooks/useCrudOpMore"
import useColumn from "./hooks/useColumns" import useColumn from "./hooks/useColumns"
@@ -106,6 +112,7 @@ const handleOpenReplacePriority = () => {
// 根据传参获取key分别为轮次、设计需求的key // 根据传参获取key分别为轮次、设计需求的key
const { projectId, crudOptions, handleBeforeCancel } = useCrudOpMore(crudRef) const { projectId, crudOptions, handleBeforeCancel } = useCrudOpMore(crudRef)
const crudColumns = useColumn(crudRef) const crudColumns = useColumn(crudRef)
// 关联弹窗、关联的事件处理 // 关联弹窗、关联的事件处理
const { visible, relatedData, options, cascaderLoading, computedRelatedData, handleOpenRelationCSX, handleRelatedOk } = const { visible, relatedData, options, cascaderLoading, computedRelatedData, handleOpenRelationCSX, handleRelatedOk } =
useRalateDemand(projectId) useRalateDemand(projectId)
@@ -127,6 +134,12 @@ const showType = (record) => {
} }
} }
// AI-MODAL
const ai_modal_visible = ref(false)
const handleAiButtonClick = () => {
ai_modal_visible.value = true
}
// 暴露给route-view的刷新表格函数 // 暴露给route-view的刷新表格函数
const refreshCrudTable = () => { const refreshCrudTable = () => {
crudRef.value.refresh() crudRef.value.refresh()

View File

@@ -47,7 +47,8 @@
], ],
"types": [ "types": [
"vite/client", "vite/client",
"@arco-design/web-vue" "@arco-design/web-vue",
"@types/node"
] ]
}, },
"include": [ "include": [

File diff suppressed because one or more lines are too long