日常修复内容20260422

This commit is contained in:
2026-04-22 18:27:37 +08:00
parent b9c971d6b5
commit c2521db336
13 changed files with 778 additions and 641 deletions

342
cdTMP/package-lock.json generated
View File

@@ -13,7 +13,7 @@
"@tanstack/vue-query": "^5.99.2", "@tanstack/vue-query": "^5.99.2",
"@tinymce/tinymce-vue": "^6.3.0", "@tinymce/tinymce-vue": "^6.3.0",
"@vueuse/core": "^14.2.1", "@vueuse/core": "^14.2.1",
"axios": "^1.15.1", "axios": "^1.15.2",
"class-variance-authority": "^0.7.1", "class-variance-authority": "^0.7.1",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"dayjs": "^1.11.20", "dayjs": "^1.11.20",
@@ -37,8 +37,8 @@
"vuedraggable": "^2.24.3" "vuedraggable": "^2.24.3"
}, },
"devDependencies": { "devDependencies": {
"@tailwindcss/postcss": "^4.2.2", "@tailwindcss/postcss": "^4.2.4",
"@tailwindcss/vite": "^4.2.2", "@tailwindcss/vite": "^4.2.4",
"@types/lodash-es": "^4.17.12", "@types/lodash-es": "^4.17.12",
"@types/node": "^25.6.0", "@types/node": "^25.6.0",
"@types/nprogress": "^0.2.3", "@types/nprogress": "^0.2.3",
@@ -48,15 +48,15 @@
"@vue/babel-plugin-jsx": "^2.0.1", "@vue/babel-plugin-jsx": "^2.0.1",
"browserslist": "^4.28.2", "browserslist": "^4.28.2",
"eslint": "^10.2.1", "eslint": "^10.2.1",
"eslint-plugin-vue": "^10.8.0", "eslint-plugin-vue": "^10.9.0",
"less": "^4.6.4", "less": "^4.6.4",
"less-loader": "^12.3.2", "less-loader": "^12.3.2",
"postcss": "^8.5.10", "postcss": "^8.5.10",
"prettier": "^3.8.3", "prettier": "^3.8.3",
"rollup-plugin-visualizer": "^7.0.1", "rollup-plugin-visualizer": "^7.0.1",
"tailwindcss": "^4.2.2", "tailwindcss": "^4.2.4",
"typescript": "^6.0.3", "typescript": "^6.0.3",
"vite": "^8.0.8", "vite": "^8.0.9",
"vue-eslint-parser": "^10.4.0" "vue-eslint-parser": "^10.4.0"
} }
}, },
@@ -746,9 +746,9 @@
} }
}, },
"node_modules/@napi-rs/wasm-runtime": { "node_modules/@napi-rs/wasm-runtime": {
"version": "1.1.3", "version": "1.1.4",
"resolved": "https://registry.npmmirror.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.3.tgz", "resolved": "https://registry.npmmirror.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz",
"integrity": "sha512-xK9sGVbJWYb08+mTJt3/YV24WxvxpXcXtP6B172paPZ+Ts69Re9dAr7lKwJoeIx8OoeuimEiRZ7umkiUVClmmQ==", "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"optional": true, "optional": true,
@@ -765,9 +765,9 @@
} }
}, },
"node_modules/@oxc-project/types": { "node_modules/@oxc-project/types": {
"version": "0.124.0", "version": "0.126.0",
"resolved": "https://registry.npmmirror.com/@oxc-project/types/-/types-0.124.0.tgz", "resolved": "https://registry.npmmirror.com/@oxc-project/types/-/types-0.126.0.tgz",
"integrity": "sha512-VBFWMTBvHxS11Z5Lvlr3IWgrwhMTXV+Md+EQF0Xf60+wAdsGFTBx7X7K/hP4pi8N7dcm1RvcHwDxZ16Qx8keUg==", "integrity": "sha512-oGfVtjAgwQVVpfBrbtk4e1XDyWHRFta6BS3GWVzrF8xYBT2VGQAk39yJS/wFSMrZqoiCU4oghT3Ch0HaHGIHcQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"funding": { "funding": {
@@ -775,9 +775,9 @@
} }
}, },
"node_modules/@rolldown/binding-android-arm64": { "node_modules/@rolldown/binding-android-arm64": {
"version": "1.0.0-rc.15", "version": "1.0.0-rc.16",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.15.tgz", "resolved": "https://registry.npmmirror.com/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.16.tgz",
"integrity": "sha512-YYe6aWruPZDtHNpwu7+qAHEMbQ/yRl6atqb/AhznLTnD3UY99Q1jE7ihLSahNWkF4EqRPVC4SiR4O0UkLK02tA==", "integrity": "sha512-rhY3k7Bsae9qQfOtph2Pm2jZEA+s8Gmjoz4hhmx70K9iMQ/ddeae+xhRQcM5IuVx5ry1+bGfkvMn7D6MJggVSA==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -792,9 +792,9 @@
} }
}, },
"node_modules/@rolldown/binding-darwin-arm64": { "node_modules/@rolldown/binding-darwin-arm64": {
"version": "1.0.0-rc.15", "version": "1.0.0-rc.16",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.15.tgz", "resolved": "https://registry.npmmirror.com/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.16.tgz",
"integrity": "sha512-oArR/ig8wNTPYsXL+Mzhs0oxhxfuHRfG7Ikw7jXsw8mYOtk71W0OkF2VEVh699pdmzjPQsTjlD1JIOoHkLP1Fg==", "integrity": "sha512-rNz0yK078yrNn3DrdgN+PKiMOW8HfQ92jQiXxwX8yW899ayV00MLVdaCNeVBhG/TbH3ouYVObo8/yrkiectkcQ==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -809,9 +809,9 @@
} }
}, },
"node_modules/@rolldown/binding-darwin-x64": { "node_modules/@rolldown/binding-darwin-x64": {
"version": "1.0.0-rc.15", "version": "1.0.0-rc.16",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.15.tgz", "resolved": "https://registry.npmmirror.com/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.16.tgz",
"integrity": "sha512-YzeVqOqjPYvUbJSWJ4EDL8ahbmsIXQpgL3JVipmN+MX0XnXMeWomLN3Fb+nwCmP/jfyqte5I3XRSm7OfQrbyxw==", "integrity": "sha512-r/OmdR00HmD4i79Z//xO06uEPOq5hRXdhw7nzkxQxwSavs3PSHa1ijntdpOiZ2mzOQ3fVVu8C1M19FoNM+dMUQ==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -826,9 +826,9 @@
} }
}, },
"node_modules/@rolldown/binding-freebsd-x64": { "node_modules/@rolldown/binding-freebsd-x64": {
"version": "1.0.0-rc.15", "version": "1.0.0-rc.16",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.15.tgz", "resolved": "https://registry.npmmirror.com/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.16.tgz",
"integrity": "sha512-9Erhx956jeQ0nNTyif1+QWAXDRD38ZNjr//bSHrt6wDwB+QkAfl2q6Mn1k6OBPerznjRmbM10lgRb1Pli4xZPw==", "integrity": "sha512-KcRE5w8h0OnjUatG8pldyD14/CQ5Phs1oxfR+3pKDjboHRo9+MkqQaiIZlZRpsxC15paeXme/I127tUa9TXJ6g==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -843,9 +843,9 @@
} }
}, },
"node_modules/@rolldown/binding-linux-arm-gnueabihf": { "node_modules/@rolldown/binding-linux-arm-gnueabihf": {
"version": "1.0.0-rc.15", "version": "1.0.0-rc.16",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.15.tgz", "resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.16.tgz",
"integrity": "sha512-cVwk0w8QbZJGTnP/AHQBs5yNwmpgGYStL88t4UIaqcvYJWBfS0s3oqVLZPwsPU6M0zlW4GqjP0Zq5MnAGwFeGA==", "integrity": "sha512-bT0guA1bpxEJ/ZhTRniQf7rNF8ybvXOuWbNIeLABaV5NGjx4EtOWBTSRGWFU9ZWVkPOZ+HNFP8RMcBokBiZ0Kg==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@@ -860,9 +860,9 @@
} }
}, },
"node_modules/@rolldown/binding-linux-arm64-gnu": { "node_modules/@rolldown/binding-linux-arm64-gnu": {
"version": "1.0.0-rc.15", "version": "1.0.0-rc.16",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.15.tgz", "resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.16.tgz",
"integrity": "sha512-eBZ/u8iAK9SoHGanqe/jrPnY0JvBN6iXbVOsbO38mbz+ZJsaobExAm1Iu+rxa4S1l2FjG0qEZn4Rc6X8n+9M+w==", "integrity": "sha512-+tHktCHWV8BDQSjemUqm/Jl/TPk3QObCTIjmdDy/nlupcujZghmKK2962LYrqFpWu+ai01AN/REOH3NEpqvYQg==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -880,9 +880,9 @@
} }
}, },
"node_modules/@rolldown/binding-linux-arm64-musl": { "node_modules/@rolldown/binding-linux-arm64-musl": {
"version": "1.0.0-rc.15", "version": "1.0.0-rc.16",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.15.tgz", "resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.16.tgz",
"integrity": "sha512-ZvRYMGrAklV9PEkgt4LQM6MjQX2P58HPAuecwYObY2DhS2t35R0I810bKi0wmaYORt6m/2Sm+Z+nFgb0WhXNcQ==", "integrity": "sha512-3fPzdREH806oRLxpTWW1Gt4tQHs0TitZFOECB2xzCFLPKnSOy90gwA7P29cksYilFO6XVRY1kzga0cL2nRjKPg==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -900,9 +900,9 @@
} }
}, },
"node_modules/@rolldown/binding-linux-ppc64-gnu": { "node_modules/@rolldown/binding-linux-ppc64-gnu": {
"version": "1.0.0-rc.15", "version": "1.0.0-rc.16",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.15.tgz", "resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.16.tgz",
"integrity": "sha512-VDpgGBzgfg5hLg+uBpCLoFG5kVvEyafmfxGUV0UHLcL5irxAK7PKNeC2MwClgk6ZAiNhmo9FLhRYgvMmedLtnQ==", "integrity": "sha512-EKwI1tSrLs7YVw+JPJT/G2dJQ1jl9qlTTTEG0V2Ok/RdOenRfBw2PQdLPyjhIu58ocdBfP7vIRN/pvMsPxs/AQ==",
"cpu": [ "cpu": [
"ppc64" "ppc64"
], ],
@@ -920,9 +920,9 @@
} }
}, },
"node_modules/@rolldown/binding-linux-s390x-gnu": { "node_modules/@rolldown/binding-linux-s390x-gnu": {
"version": "1.0.0-rc.15", "version": "1.0.0-rc.16",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.15.tgz", "resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.16.tgz",
"integrity": "sha512-y1uXY3qQWCzcPgRJATPSOUP4tCemh4uBdY7e3EZbVwCJTY3gLJWnQABgeUetvED+bt1FQ01OeZwvhLS2bpNrAQ==", "integrity": "sha512-Uknladnb3Sxqu6SEcqBldQyJUpk8NleooZEc0MbRBJ4inEhRYWZX0NJu12vNf2mqAq7gsofAxHrGghiUYjhaLQ==",
"cpu": [ "cpu": [
"s390x" "s390x"
], ],
@@ -940,9 +940,9 @@
} }
}, },
"node_modules/@rolldown/binding-linux-x64-gnu": { "node_modules/@rolldown/binding-linux-x64-gnu": {
"version": "1.0.0-rc.15", "version": "1.0.0-rc.16",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.15.tgz", "resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.16.tgz",
"integrity": "sha512-023bTPBod7J3Y/4fzAN6QtpkSABR0rigtrwaP+qSEabUh5zf6ELr9Nc7GujaROuPY3uwdSIXWrvhn1KxOvurWA==", "integrity": "sha512-FIb8+uG49sZBtLTn+zt1AJ20TqVcqWeSIyoVt0or7uAWesgKaHbiBh6OpA/k9v0LTt+PTrb1Lao133kP4uVxkg==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -960,9 +960,9 @@
} }
}, },
"node_modules/@rolldown/binding-linux-x64-musl": { "node_modules/@rolldown/binding-linux-x64-musl": {
"version": "1.0.0-rc.15", "version": "1.0.0-rc.16",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.15.tgz", "resolved": "https://registry.npmmirror.com/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.16.tgz",
"integrity": "sha512-witB2O0/hU4CgfOOKUoeFgQ4GktPi1eEbAhaLAIpgD6+ZnhcPkUtPsoKKHRzmOoWPZue46IThdSgdo4XneOLYw==", "integrity": "sha512-RuERhF9/EgWxZEXYWCOaViUWHIboceK4/ivdtQ3R0T44NjLkIIlGIAVAuCddFxsZ7vnRHtNQUrt2vR2n2slB2w==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -980,9 +980,9 @@
} }
}, },
"node_modules/@rolldown/binding-openharmony-arm64": { "node_modules/@rolldown/binding-openharmony-arm64": {
"version": "1.0.0-rc.15", "version": "1.0.0-rc.16",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.15.tgz", "resolved": "https://registry.npmmirror.com/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.16.tgz",
"integrity": "sha512-UCL68NJ0Ud5zRipXZE9dF5PmirzJE4E4BCIOOssEnM7wLDsxjc6Qb0sGDxTNRTP53I6MZpygyCpY8Aa8sPfKPg==", "integrity": "sha512-mXcXnvd9GpazCxeUCCnZ2+YF7nut+ZOEbE4GtaiPtyY6AkhZWbK70y1KK3j+RDhjVq5+U8FySkKRb/+w0EeUwA==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -997,9 +997,9 @@
} }
}, },
"node_modules/@rolldown/binding-wasm32-wasi": { "node_modules/@rolldown/binding-wasm32-wasi": {
"version": "1.0.0-rc.15", "version": "1.0.0-rc.16",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.15.tgz", "resolved": "https://registry.npmmirror.com/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.16.tgz",
"integrity": "sha512-ApLruZq/ig+nhaE7OJm4lDjayUnOHVUa77zGeqnqZ9pn0ovdVbbNPerVibLXDmWeUZXjIYIT8V3xkT58Rm9u5Q==", "integrity": "sha512-3Q2KQxnC8IJOLqXmUMoYwyIPZU9hzRbnHaoV3Euz+VVnjZKcY8ktnNP8T9R4/GGQtb27C/UYKABxesKWb8lsvQ==",
"cpu": [ "cpu": [
"wasm32" "wasm32"
], ],
@@ -1009,16 +1009,16 @@
"dependencies": { "dependencies": {
"@emnapi/core": "1.9.2", "@emnapi/core": "1.9.2",
"@emnapi/runtime": "1.9.2", "@emnapi/runtime": "1.9.2",
"@napi-rs/wasm-runtime": "^1.1.3" "@napi-rs/wasm-runtime": "^1.1.4"
}, },
"engines": { "engines": {
"node": ">=14.0.0" "node": "^20.19.0 || >=22.12.0"
} }
}, },
"node_modules/@rolldown/binding-win32-arm64-msvc": { "node_modules/@rolldown/binding-win32-arm64-msvc": {
"version": "1.0.0-rc.15", "version": "1.0.0-rc.16",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.15.tgz", "resolved": "https://registry.npmmirror.com/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.16.tgz",
"integrity": "sha512-KmoUoU7HnN+Si5YWJigfTws1jz1bKBYDQKdbLspz0UaqjjFkddHsqorgiW1mxcAj88lYUE6NC/zJNwT+SloqtA==", "integrity": "sha512-tj7XRemQcOcFwv7qhpUxMTBbI5mWMlE4c1Omhg5+h8GuLXzyj8HviYgR+bB2DMDgRqUE+jiDleqSCRjx4aYk/Q==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -1033,9 +1033,9 @@
} }
}, },
"node_modules/@rolldown/binding-win32-x64-msvc": { "node_modules/@rolldown/binding-win32-x64-msvc": {
"version": "1.0.0-rc.15", "version": "1.0.0-rc.16",
"resolved": "https://registry.npmmirror.com/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.15.tgz", "resolved": "https://registry.npmmirror.com/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.16.tgz",
"integrity": "sha512-3P2A8L+x75qavWLe/Dll3EYBJLQmtkJN8rfh+U/eR3MqMgL/h98PhYI+JFfXuDPgPeCB7iZAKiqii5vqOvnA0g==", "integrity": "sha512-PH5DRZT+F4f2PTXRXR8uJxnBq2po/xFtddyabTJVJs/ZYVHqXPEgNIr35IHTEa6bpa0Q8Awg+ymkTaGnKITw4g==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -1057,9 +1057,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/@tailwindcss/node": { "node_modules/@tailwindcss/node": {
"version": "4.2.2", "version": "4.2.4",
"resolved": "https://registry.npmmirror.com/@tailwindcss/node/-/node-4.2.2.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/node/-/node-4.2.4.tgz",
"integrity": "sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==", "integrity": "sha512-Ai7+yQPxz3ddrDQzFfBKdHEVBg0w3Zl83jnjuwxnZOsnH9pGn93QHQtpU0p/8rYWxvbFZHneni6p1BSLK4DkGA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@@ -1069,37 +1069,37 @@
"lightningcss": "1.32.0", "lightningcss": "1.32.0",
"magic-string": "^0.30.21", "magic-string": "^0.30.21",
"source-map-js": "^1.2.1", "source-map-js": "^1.2.1",
"tailwindcss": "4.2.2" "tailwindcss": "4.2.4"
} }
}, },
"node_modules/@tailwindcss/oxide": { "node_modules/@tailwindcss/oxide": {
"version": "4.2.2", "version": "4.2.4",
"resolved": "https://registry.npmmirror.com/@tailwindcss/oxide/-/oxide-4.2.2.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide/-/oxide-4.2.4.tgz",
"integrity": "sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==", "integrity": "sha512-9El/iI069DKDSXwTvB9J4BwdO5JhRrOweGaK25taBAvBXyXqJAX+Jqdvs8r8gKpsI/1m0LeJLyQYTf/WLrBT1Q==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">= 20" "node": ">= 20"
}, },
"optionalDependencies": { "optionalDependencies": {
"@tailwindcss/oxide-android-arm64": "4.2.2", "@tailwindcss/oxide-android-arm64": "4.2.4",
"@tailwindcss/oxide-darwin-arm64": "4.2.2", "@tailwindcss/oxide-darwin-arm64": "4.2.4",
"@tailwindcss/oxide-darwin-x64": "4.2.2", "@tailwindcss/oxide-darwin-x64": "4.2.4",
"@tailwindcss/oxide-freebsd-x64": "4.2.2", "@tailwindcss/oxide-freebsd-x64": "4.2.4",
"@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.2", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.4",
"@tailwindcss/oxide-linux-arm64-gnu": "4.2.2", "@tailwindcss/oxide-linux-arm64-gnu": "4.2.4",
"@tailwindcss/oxide-linux-arm64-musl": "4.2.2", "@tailwindcss/oxide-linux-arm64-musl": "4.2.4",
"@tailwindcss/oxide-linux-x64-gnu": "4.2.2", "@tailwindcss/oxide-linux-x64-gnu": "4.2.4",
"@tailwindcss/oxide-linux-x64-musl": "4.2.2", "@tailwindcss/oxide-linux-x64-musl": "4.2.4",
"@tailwindcss/oxide-wasm32-wasi": "4.2.2", "@tailwindcss/oxide-wasm32-wasi": "4.2.4",
"@tailwindcss/oxide-win32-arm64-msvc": "4.2.2", "@tailwindcss/oxide-win32-arm64-msvc": "4.2.4",
"@tailwindcss/oxide-win32-x64-msvc": "4.2.2" "@tailwindcss/oxide-win32-x64-msvc": "4.2.4"
} }
}, },
"node_modules/@tailwindcss/oxide-android-arm64": { "node_modules/@tailwindcss/oxide-android-arm64": {
"version": "4.2.2", "version": "4.2.4",
"resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.2.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.4.tgz",
"integrity": "sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==", "integrity": "sha512-e7MOr1SAn9U8KlZzPi1ZXGZHeC5anY36qjNwmZv9pOJ8E4Q6jmD1vyEHkQFmNOIN7twGPEMXRHmitN4zCMN03g==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -1114,9 +1114,9 @@
} }
}, },
"node_modules/@tailwindcss/oxide-darwin-arm64": { "node_modules/@tailwindcss/oxide-darwin-arm64": {
"version": "4.2.2", "version": "4.2.4",
"resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.2.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.4.tgz",
"integrity": "sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==", "integrity": "sha512-tSC/Kbqpz/5/o/C2sG7QvOxAKqyd10bq+ypZNf+9Fi2TvbVbv1zNpcEptcsU7DPROaSbVgUXmrzKhurFvo5eDg==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -1131,9 +1131,9 @@
} }
}, },
"node_modules/@tailwindcss/oxide-darwin-x64": { "node_modules/@tailwindcss/oxide-darwin-x64": {
"version": "4.2.2", "version": "4.2.4",
"resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.2.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.4.tgz",
"integrity": "sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==", "integrity": "sha512-yPyUXn3yO/ufR6+Kzv0t4fCg2qNr90jxXc5QqBpjlPNd0NqyDXcmQb/6weunH/MEDXW5dhyEi+agTDiqa3WsGg==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -1148,9 +1148,9 @@
} }
}, },
"node_modules/@tailwindcss/oxide-freebsd-x64": { "node_modules/@tailwindcss/oxide-freebsd-x64": {
"version": "4.2.2", "version": "4.2.4",
"resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.2.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.4.tgz",
"integrity": "sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==", "integrity": "sha512-BoMIB4vMQtZsXdGLVc2z+P9DbETkiopogfWZKbWwM8b/1Vinbs4YcUwo+kM/KeLkX3Ygrf4/PsRndKaYhS8Eiw==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -1165,9 +1165,9 @@
} }
}, },
"node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
"version": "4.2.2", "version": "4.2.4",
"resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.2.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.4.tgz",
"integrity": "sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==", "integrity": "sha512-7pIHBLTHYRAlS7V22JNuTh33yLH4VElwKtB3bwchK/UaKUPpQ0lPQiOWcbm4V3WP2I6fNIJ23vABIvoy2izdwA==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@@ -1182,9 +1182,9 @@
} }
}, },
"node_modules/@tailwindcss/oxide-linux-arm64-gnu": { "node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
"version": "4.2.2", "version": "4.2.4",
"resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.2.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.4.tgz",
"integrity": "sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==", "integrity": "sha512-+E4wxJ0ZGOzSH325reXTWB48l42i93kQqMvDyz5gqfRzRZ7faNhnmvlV4EPGJU3QJM/3Ab5jhJ5pCRUsKn6OQw==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -1202,9 +1202,9 @@
} }
}, },
"node_modules/@tailwindcss/oxide-linux-arm64-musl": { "node_modules/@tailwindcss/oxide-linux-arm64-musl": {
"version": "4.2.2", "version": "4.2.4",
"resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.2.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.4.tgz",
"integrity": "sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==", "integrity": "sha512-bBADEGAbo4ASnppIziaQJelekCxdMaxisrk+fB7Thit72IBnALp9K6ffA2G4ruj90G9XRS2VQ6q2bCKbfFV82g==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -1222,9 +1222,9 @@
} }
}, },
"node_modules/@tailwindcss/oxide-linux-x64-gnu": { "node_modules/@tailwindcss/oxide-linux-x64-gnu": {
"version": "4.2.2", "version": "4.2.4",
"resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.2.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.4.tgz",
"integrity": "sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==", "integrity": "sha512-7Mx25E4WTfnht0TVRTyC00j3i0M+EeFe7wguMDTlX4mRxafznw0CA8WJkFjWYH5BlgELd1kSjuU2JiPnNZbJDA==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -1242,9 +1242,9 @@
} }
}, },
"node_modules/@tailwindcss/oxide-linux-x64-musl": { "node_modules/@tailwindcss/oxide-linux-x64-musl": {
"version": "4.2.2", "version": "4.2.4",
"resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.2.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.4.tgz",
"integrity": "sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==", "integrity": "sha512-2wwJRF7nyhOR0hhHoChc04xngV3iS+akccHTGtz965FwF0up4b2lOdo6kI1EbDaEXKgvcrFBYcYQQ/rrnWFVfA==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -1262,9 +1262,9 @@
} }
}, },
"node_modules/@tailwindcss/oxide-wasm32-wasi": { "node_modules/@tailwindcss/oxide-wasm32-wasi": {
"version": "4.2.2", "version": "4.2.4",
"resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.2.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.4.tgz",
"integrity": "sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==", "integrity": "sha512-FQsqApeor8Fo6gUEklzmaa9994orJZZDBAlQpK2Mq+DslRKFJeD6AjHpBQ0kZFQohVr8o85PPh8eOy86VlSCmw==",
"bundleDependencies": [ "bundleDependencies": [
"@napi-rs/wasm-runtime", "@napi-rs/wasm-runtime",
"@emnapi/core", "@emnapi/core",
@@ -1292,9 +1292,9 @@
} }
}, },
"node_modules/@tailwindcss/oxide-win32-arm64-msvc": { "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
"version": "4.2.2", "version": "4.2.4",
"resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.2.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.4.tgz",
"integrity": "sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==", "integrity": "sha512-L9BXqxC4ToVgwMFqj3pmZRqyHEztulpUJzCxUtLjobMCzTPsGt1Fa9enKbOpY2iIyVtaHNeNvAK8ERP/64sqGQ==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -1309,9 +1309,9 @@
} }
}, },
"node_modules/@tailwindcss/oxide-win32-x64-msvc": { "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
"version": "4.2.2", "version": "4.2.4",
"resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.2.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.4.tgz",
"integrity": "sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==", "integrity": "sha512-ESlKG0EpVJQwRjXDDa9rLvhEAh0mhP1sF7sap9dNZT0yyl9SAG6T7gdP09EH0vIv0UNTlo6jPWyujD6559fZvw==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -1326,29 +1326,29 @@
} }
}, },
"node_modules/@tailwindcss/postcss": { "node_modules/@tailwindcss/postcss": {
"version": "4.2.2", "version": "4.2.4",
"resolved": "https://registry.npmmirror.com/@tailwindcss/postcss/-/postcss-4.2.2.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/postcss/-/postcss-4.2.4.tgz",
"integrity": "sha512-n4goKQbW8RVXIbNKRB/45LzyUqN451deQK0nzIeauVEqjlI49slUlgKYJM2QyUzap/PcpnS7kzSUmPb1sCRvYQ==", "integrity": "sha512-wgAVj6nUWAolAu8YFvzT2cTBIElWHkjZwFYovF+xsqKsW2ADxM/X2opxj5NsF/qVccAOjRNe8X2IdPzMsWyHTg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@alloc/quick-lru": "^5.2.0", "@alloc/quick-lru": "^5.2.0",
"@tailwindcss/node": "4.2.2", "@tailwindcss/node": "4.2.4",
"@tailwindcss/oxide": "4.2.2", "@tailwindcss/oxide": "4.2.4",
"postcss": "^8.5.6", "postcss": "^8.5.6",
"tailwindcss": "4.2.2" "tailwindcss": "4.2.4"
} }
}, },
"node_modules/@tailwindcss/vite": { "node_modules/@tailwindcss/vite": {
"version": "4.2.2", "version": "4.2.4",
"resolved": "https://registry.npmmirror.com/@tailwindcss/vite/-/vite-4.2.2.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/vite/-/vite-4.2.4.tgz",
"integrity": "sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==", "integrity": "sha512-pCvohwOCspk3ZFn6eJzrrX3g4n2JY73H6MmYC87XfGPyTty4YsCjYTMArRZm/zOI8dIt3+EcrLHAFPe5A4bgtw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@tailwindcss/node": "4.2.2", "@tailwindcss/node": "4.2.4",
"@tailwindcss/oxide": "4.2.2", "@tailwindcss/oxide": "4.2.4",
"tailwindcss": "4.2.2" "tailwindcss": "4.2.4"
}, },
"peerDependencies": { "peerDependencies": {
"vite": "^5.2.0 || ^6 || ^7 || ^8" "vite": "^5.2.0 || ^6 || ^7 || ^8"
@@ -1924,9 +1924,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/axios": { "node_modules/axios": {
"version": "1.15.1", "version": "1.15.2",
"resolved": "https://registry.npmmirror.com/axios/-/axios-1.15.1.tgz", "resolved": "https://registry.npmmirror.com/axios/-/axios-1.15.2.tgz",
"integrity": "sha512-WOG+Jj8ZOvR0a3rAn+Tuf1UQJRxw5venr6DgdbJzngJE3qG7X0kL83CZGpdHMxEm+ZK3seAbvFsw4FfOfP9vxg==", "integrity": "sha512-wLrXxPtcrPTsNlJmKjkPnNPK2Ihe0hn0wGSaTEiHRPxwjvJwT3hKmXF4dpqxmPO9SoNb2FsYXj/xEo0gHN+D5A==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"follow-redirects": "^1.15.11", "follow-redirects": "^1.15.11",
@@ -2615,9 +2615,9 @@
} }
}, },
"node_modules/eslint-plugin-vue": { "node_modules/eslint-plugin-vue": {
"version": "10.8.0", "version": "10.9.0",
"resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-10.8.0.tgz", "resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-10.9.0.tgz",
"integrity": "sha512-f1J/tcbnrpgC8suPN5AtdJ5MQjuXbSU9pGRSSYAuF3SHoiYCOdEX6O22pLaRyLHXvDcOe+O5ENgc1owQ587agA==", "integrity": "sha512-EFNNzu4HqtTRb5DJINpyd+u3bDdzETWDMpCzG+UBHz1tpsnMDCeOcf61u4Wy/cbXnMymK+MT9bjH7KcG1fItSw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@@ -4522,14 +4522,14 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/rolldown": { "node_modules/rolldown": {
"version": "1.0.0-rc.15", "version": "1.0.0-rc.16",
"resolved": "https://registry.npmmirror.com/rolldown/-/rolldown-1.0.0-rc.15.tgz", "resolved": "https://registry.npmmirror.com/rolldown/-/rolldown-1.0.0-rc.16.tgz",
"integrity": "sha512-Ff31guA5zT6WjnGp0SXw76X6hzGRk/OQq2hE+1lcDe+lJdHSgnSX6nK3erbONHyCbpSj9a9E+uX/OvytZoWp2g==", "integrity": "sha512-rzi5WqKzEZw3SooTt7cgm4eqIoujPIyGcJNGFL7iPEuajQw7vxMHUkXylu4/vhCkJGXsgRmxqMKXUpT6FEgl0g==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@oxc-project/types": "=0.124.0", "@oxc-project/types": "=0.126.0",
"@rolldown/pluginutils": "1.0.0-rc.15" "@rolldown/pluginutils": "1.0.0-rc.16"
}, },
"bin": { "bin": {
"rolldown": "bin/cli.mjs" "rolldown": "bin/cli.mjs"
@@ -4538,27 +4538,27 @@
"node": "^20.19.0 || >=22.12.0" "node": "^20.19.0 || >=22.12.0"
}, },
"optionalDependencies": { "optionalDependencies": {
"@rolldown/binding-android-arm64": "1.0.0-rc.15", "@rolldown/binding-android-arm64": "1.0.0-rc.16",
"@rolldown/binding-darwin-arm64": "1.0.0-rc.15", "@rolldown/binding-darwin-arm64": "1.0.0-rc.16",
"@rolldown/binding-darwin-x64": "1.0.0-rc.15", "@rolldown/binding-darwin-x64": "1.0.0-rc.16",
"@rolldown/binding-freebsd-x64": "1.0.0-rc.15", "@rolldown/binding-freebsd-x64": "1.0.0-rc.16",
"@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.15", "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.16",
"@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.15", "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.16",
"@rolldown/binding-linux-arm64-musl": "1.0.0-rc.15", "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.16",
"@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.15", "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.16",
"@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.15", "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.16",
"@rolldown/binding-linux-x64-gnu": "1.0.0-rc.15", "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.16",
"@rolldown/binding-linux-x64-musl": "1.0.0-rc.15", "@rolldown/binding-linux-x64-musl": "1.0.0-rc.16",
"@rolldown/binding-openharmony-arm64": "1.0.0-rc.15", "@rolldown/binding-openharmony-arm64": "1.0.0-rc.16",
"@rolldown/binding-wasm32-wasi": "1.0.0-rc.15", "@rolldown/binding-wasm32-wasi": "1.0.0-rc.16",
"@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.15", "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.16",
"@rolldown/binding-win32-x64-msvc": "1.0.0-rc.15" "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.16"
} }
}, },
"node_modules/rolldown/node_modules/@rolldown/pluginutils": { "node_modules/rolldown/node_modules/@rolldown/pluginutils": {
"version": "1.0.0-rc.15", "version": "1.0.0-rc.16",
"resolved": "https://registry.npmmirror.com/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.15.tgz", "resolved": "https://registry.npmmirror.com/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.16.tgz",
"integrity": "sha512-UromN0peaE53IaBRe9W7CjrZgXl90fqGpK+mIZbA3qSTeYqg3pqpROBdIPvOG3F5ereDHNwoHBI2e50n1BDr1g==", "integrity": "sha512-45+YtqxLYKDWQouLKCrpIZhke+nXxhsw+qAHVzHDVwttyBlHNBVs2K25rDXrZzhpTp9w1FlAlvweV1H++fdZoA==",
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
@@ -4931,16 +4931,16 @@
} }
}, },
"node_modules/tailwindcss": { "node_modules/tailwindcss": {
"version": "4.2.2", "version": "4.2.4",
"resolved": "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-4.2.2.tgz", "resolved": "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-4.2.4.tgz",
"integrity": "sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==", "integrity": "sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA==",
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/tapable": { "node_modules/tapable": {
"version": "2.3.0", "version": "2.3.3",
"resolved": "https://registry.npmmirror.com/tapable/-/tapable-2.3.0.tgz", "resolved": "https://registry.npmmirror.com/tapable/-/tapable-2.3.3.tgz",
"integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
@@ -4958,13 +4958,13 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/tinyglobby": { "node_modules/tinyglobby": {
"version": "0.2.15", "version": "0.2.16",
"resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.15.tgz", "resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.16.tgz",
"integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"fdir": "^6.5.0", "fdir": "^6.5.0",
"picomatch": "^4.0.3" "picomatch": "^4.0.4"
}, },
"engines": { "engines": {
"node": ">=12.0.0" "node": ">=12.0.0"
@@ -5120,17 +5120,17 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/vite": { "node_modules/vite": {
"version": "8.0.8", "version": "8.0.9",
"resolved": "https://registry.npmmirror.com/vite/-/vite-8.0.8.tgz", "resolved": "https://registry.npmmirror.com/vite/-/vite-8.0.9.tgz",
"integrity": "sha512-dbU7/iLVa8KZALJyLOBOQ88nOXtNG8vxKuOT4I2mD+Ya70KPceF4IAmDsmU0h1Qsn5bPrvsY9HJstCRh3hG6Uw==", "integrity": "sha512-t7g7GVRpMXjNpa67HaVWI/8BWtdVIQPCL2WoozXXA7LBGEFK4AkkKkHx2hAQf5x1GZSlcmEDPkVLSGahxnEEZw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"lightningcss": "^1.32.0", "lightningcss": "^1.32.0",
"picomatch": "^4.0.4", "picomatch": "^4.0.4",
"postcss": "^8.5.8", "postcss": "^8.5.10",
"rolldown": "1.0.0-rc.15", "rolldown": "1.0.0-rc.16",
"tinyglobby": "^0.2.15" "tinyglobby": "^0.2.16"
}, },
"bin": { "bin": {
"vite": "bin/vite.js" "vite": "bin/vite.js"

View File

@@ -16,7 +16,7 @@
"@tanstack/vue-query": "^5.99.2", "@tanstack/vue-query": "^5.99.2",
"@tinymce/tinymce-vue": "^6.3.0", "@tinymce/tinymce-vue": "^6.3.0",
"@vueuse/core": "^14.2.1", "@vueuse/core": "^14.2.1",
"axios": "^1.15.1", "axios": "^1.15.2",
"class-variance-authority": "^0.7.1", "class-variance-authority": "^0.7.1",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"dayjs": "^1.11.20", "dayjs": "^1.11.20",
@@ -40,8 +40,8 @@
"vuedraggable": "^2.24.3" "vuedraggable": "^2.24.3"
}, },
"devDependencies": { "devDependencies": {
"@tailwindcss/postcss": "^4.2.2", "@tailwindcss/postcss": "^4.2.4",
"@tailwindcss/vite": "^4.2.2", "@tailwindcss/vite": "^4.2.4",
"@types/lodash-es": "^4.17.12", "@types/lodash-es": "^4.17.12",
"@types/node": "^25.6.0", "@types/node": "^25.6.0",
"@types/nprogress": "^0.2.3", "@types/nprogress": "^0.2.3",
@@ -51,15 +51,15 @@
"@vue/babel-plugin-jsx": "^2.0.1", "@vue/babel-plugin-jsx": "^2.0.1",
"browserslist": "^4.28.2", "browserslist": "^4.28.2",
"eslint": "^10.2.1", "eslint": "^10.2.1",
"eslint-plugin-vue": "^10.8.0", "eslint-plugin-vue": "^10.9.0",
"less": "^4.6.4", "less": "^4.6.4",
"less-loader": "^12.3.2", "less-loader": "^12.3.2",
"postcss": "^8.5.10", "postcss": "^8.5.10",
"prettier": "^3.8.3", "prettier": "^3.8.3",
"rollup-plugin-visualizer": "^7.0.1", "rollup-plugin-visualizer": "^7.0.1",
"tailwindcss": "^4.2.2", "tailwindcss": "^4.2.4",
"typescript": "^6.0.3", "typescript": "^6.0.3",
"vite": "^8.0.8", "vite": "^8.0.9",
"vue-eslint-parser": "^10.4.0" "vue-eslint-parser": "^10.4.0"
} }
} }

View File

@@ -1,152 +1,160 @@
<template> <template>
<div class="chen-demand-list"> <div class="chen-demand-list">
<div class="arco-table arco-table-size-large arco-table-border arco-table-stripe arco-table-hover"> <div class="arco-table arco-table-size-large arco-table-border arco-table-stripe arco-table-hover">
<div class="arco-table-container"> <div class="arco-table-container">
<table class="arco-table-element" cellpadding="0" cellspacing="0"> <table class="arco-table-element" cellpadding="0" cellspacing="0">
<thead> <thead>
<tr class="arco-table-tr"> <tr class="arco-table-tr">
<th class="arco-table-th" :width="20"> <th class="arco-table-th" :width="20">
<span class="arco-table-cell arco-table-cell-align-center"> <span class="arco-table-cell arco-table-cell-align-center">
<a-tooltip content="添加步骤"> <a-tooltip content="添加步骤">
<a-button :tabindex="-1" type="primary" size="mini" shape="round" @click="addItem"> 新增步骤+ </a-button> <a-button :tabindex="-1" type="primary" size="mini" shape="round" @click="addItem"> 新增步骤+ </a-button>
</a-tooltip> </a-tooltip>
</span> </span>
</th> </th>
<th class="arco-table-th" :width="400"> <th class="arco-table-th" :width="18">
<span class="arco-table-cell arco-table-cell-align-center"> <span class="arco-table-cell arco-table-cell-align-center">
<span class="arco-table-th-title">操作</span> <span class="arco-table-th-title">序号</span>
</span> </span>
</th> </th>
<th class="arco-table-th" :width="310"> <th class="arco-table-th" :width="400">
<span class="arco-table-cell arco-table-cell-align-center"> <span class="arco-table-cell arco-table-cell-align-center">
<span class="arco-table-th-title">预期</span> <span class="arco-table-th-title">操作</span>
</span> </span>
</th> </th>
</tr> <th class="arco-table-th" :width="310">
</thead> <span class="arco-table-cell arco-table-cell-align-center">
<tbody> <span class="arco-table-th-title">预期</span>
<!-- 根据subStep渲染 --> </span>
<template v-if="modelValue && modelValue.length > 0" v-for="(stepItem, index) in modelValue" :key="index"> </th>
<tr class="arco-table-tr"> </tr>
<td class="arco-table-td"> </thead>
<span class="arco-table-cell justify-center gap-1.5"> <tbody>
<!-- 删除单项按钮 --> <!-- 根据subStep渲染 -->
<a-button <template v-if="modelValue && modelValue.length > 0" v-for="(stepItem, index) in modelValue" :key="index">
:tabindex="-1" <tr class="arco-table-tr">
type="primary" <td class="arco-table-td">
status="danger" <span class="arco-table-cell justify-center gap-1.5">
size="mini" <!-- 删除单项按钮 -->
shape="round" <a-button
@click="deleteItem(index)" :tabindex="-1"
:disabled="modelValue.length <= 1" type="primary"
> status="danger"
<template #icon><icon-close /></template> size="mini"
</a-button> shape="round"
<a-tooltip content="复制该项添加"> @click="deleteItem(index)"
<a-button :tabindex="-1" type="primary" status="warning" size="mini" shape="round" @click="copyItem(index)"> :disabled="modelValue.length <= 1"
<template #icon> >
<icon-copy /> <template #icon><icon-close /></template>
</template> </a-button>
</a-button> <a-tooltip content="复制该项添加">
</a-tooltip> <a-button :tabindex="-1" type="primary" status="warning" size="mini" shape="round" @click="copyItem(index)">
<a-button-group shape="round" size="mini"> <template #icon>
<a-button :tabindex="-1" type="primary" @click="moveUp(index)"> <icon-copy />
<icon-arrow-rise /> </template>
</a-button> </a-button>
<a-button :tabindex="-1" type="primary" @click="moveDown(index)"> </a-tooltip>
<icon-arrow-fall /> <a-button-group shape="round" size="mini">
</a-button> <a-button :tabindex="-1" type="primary" @click="moveUp(index)">
</a-button-group> <icon-arrow-rise />
</span> </a-button>
</td> <a-button :tabindex="-1" type="primary" @click="moveDown(index)">
<td class="arco-table-td"> <icon-arrow-fall />
<span class="arco-table-cell"> </a-button>
<a-textarea auto-size v-model="stepItem.operation"></a-textarea> </a-button-group>
</span> </span>
</td> </td>
<td class="arco-table-td"> <td class="arco-table-td text-center!">
<span class="arco-table-cell"> <a-badge class="mt-1" :count="index + 1" :dotStyle="{ background: '#E5E6EB', color: '#86909C' }" />
<a-textarea auto-size v-model="stepItem.expect"></a-textarea> </td>
</span> <td class="arco-table-td">
</td> <span class="arco-table-cell">
</tr> <a-textarea auto-size v-model="stepItem.operation"></a-textarea>
</template> </span>
<template v-else> </td>
<tr> <td class="arco-table-td">
<td colspan="3"> <span class="arco-table-cell">
<div class="flex justify-center items-center p-2 border"> <a-textarea auto-size v-model="stepItem.expect"></a-textarea>
<a-alert>暂无测试子项条目请添加</a-alert> </span>
</div> </td>
</td> </tr>
</tr> </template>
</template> <template v-else>
</tbody> <tr>
</table> <td colspan="3">
</div> <div class="flex justify-center items-center p-2 border">
</div> <a-alert>暂无测试子项条目请添加</a-alert>
</div> </div>
</template> </td>
</tr>
<script setup lang="ts"> </template>
import { type Ref, nextTick } from "vue" </tbody>
import { cloneDeep } from "lodash-es" </table>
</div>
// 辅助函数当modelValue不是列表时候 </div>
function handleIsNotArray() { </div>
if (Array.isArray(modelValue.value)) return </template>
modelValue.value = []
} <script setup lang="ts">
import { type Ref, nextTick } from "vue"
// 定义value数据 import { cloneDeep } from "lodash-es"
interface ISubStep {
operation: string // 辅助函数当modelValue不是列表时候
expect: string function handleIsNotArray() {
} if (Array.isArray(modelValue.value)) return
// 绑定外部数据预期是列表有operation、expect两个字段 modelValue.value = []
const modelValue = defineModel() as unknown as Ref<ISubStep[]> }
// 单纯新增 - modalValue新增一行 // 定义value数据
const addItem = async () => { interface ISubStep {
handleIsNotArray() operation: string
await nextTick() // 因为要等待modelValue值变化DOM渲染完毕 expect: string
modelValue.value.push({ operation: "", expect: "" }) }
} // 绑定外部数据预期是列表有operation、expect两个字段
const modelValue = defineModel() as unknown as Ref<ISubStep[]>
// 删除指定行
const deleteItem = (index: number) => { // 单纯新增 - modalValue新增一行
modelValue.value = modelValue.value.filter((_, idx) => idx !== index) const addItem = async () => {
} handleIsNotArray()
await nextTick() // 因为要等待modelValue值变化DOM渲染完毕
// 复制单项 modelValue.value.push({ operation: "", expect: "" })
const copyItem = (index: number) => { }
const newItem = cloneDeep(modelValue.value[index])
modelValue.value = [...modelValue.value, newItem] // 删除指定行
} const deleteItem = (index: number) => {
modelValue.value = modelValue.value.filter((_, idx) => idx !== index)
// 辅助函数交换列表两个元素 }
function swapItems(idx1: number, idx2: number) {
const arr = modelValue.value // 复制单项
;[arr[idx1], arr[idx2]] = [arr[idx2], arr[idx1]] const copyItem = (index: number) => {
} const newItem = cloneDeep(modelValue.value[index])
modelValue.value = [...modelValue.value, newItem]
// 向下移动 }
const moveDown = (index: number) => {
if (index === modelValue.value.length - 1) return // 辅助函数交换列表两个元素
swapItems(index, index + 1) function swapItems(idx1: number, idx2: number) {
} const arr = modelValue.value
;[arr[idx1], arr[idx2]] = [arr[idx2], arr[idx1]]
// 向上移动 }
const moveUp = (index: number) => {
if (index === 0) return // 向下移动
swapItems(index, index - 1) const moveDown = (index: number) => {
} if (index === modelValue.value.length - 1) return
</script> swapItems(index, index + 1)
}
<style lang="less" scoped>
:deep(.arco-form-item-content-flex) { // 向上移动
display: block; const moveUp = (index: number) => {
} if (index === 0) return
:deep(.arco-table-cell .arco-form-item) { swapItems(index, index - 1)
margin-bottom: 0; }
} </script>
</style>
<style lang="less" scoped>
:deep(.arco-form-item-content-flex) {
display: block;
}
:deep(.arco-table-cell .arco-form-item) {
margin-bottom: 0;
}
</style>

View File

@@ -12,10 +12,13 @@
<icon-menu-fold v-if="!topMenu && appStore.device === 'mobile'" style="font-size: 22px; cursor: pointer" @click="toggleDrawerMenu" /> <icon-menu-fold v-if="!topMenu && appStore.device === 'mobile'" style="font-size: 22px; cursor: pointer" @click="toggleDrawerMenu" />
</a-space> </a-space>
</div> </div>
<div class="center-side flex items-center justify-center font-bold text-lg"> <div class="center-side flex items-center font-bold text-lg justify-center">
<div class="fix-side" v-if="route.query.id">
<project-info-other />
</div>
<template v-if="title"> <template v-if="title">
<a-typography-title <a-typography-title
:style="{ margin: 0, fontSize: '1.2rem', fontWeight: 'bold' }" class="project-name"
:heading="3" :heading="3"
:ellipsis="{ :ellipsis="{
rows: 2 rows: 2
@@ -89,9 +92,6 @@
</a-dropdown> </a-dropdown>
</li> </li>
</ul> </ul>
<div class="fix-side" v-if="route.query.id">
<project-info-other />
</div>
</div> </div>
</template> </template>
@@ -158,12 +158,10 @@ const handleClickLogo = () => {
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
// 项目管理悬浮定位
.fix-side { .fix-side {
position: absolute; // 项目设置按钮
left: 16%; margin-left: 50px;
top: 50%; margin-top: 10px;
transform: translateY(-50%);
} }
.logo-container { .logo-container {
@@ -248,6 +246,26 @@ const handleClickLogo = () => {
animation: neon6 0.5s ease-in-out infinite alternate; animation: neon6 0.5s ease-in-out infinite alternate;
} }
} }
// 根据浏览器宽度调整
.project-name {
font-size: 1.2rem;
flex: 1;
text-align: center;
}
@media (max-width: 1024px) {
.project-name {
font-size: 0.8rem;
}
}
@media (max-width: 1280px) {
.project-name {
font-size: 1rem;
}
}
@keyframes neon6 { @keyframes neon6 {
from { from {
text-shadow: text-shadow:

View File

@@ -5,7 +5,7 @@
<span>题注</span> <span>题注</span>
<a-input v-model="fontnote" :style="{ width: '500px' }"></a-input> <a-input v-model="fontnote" :style="{ width: '500px' }"></a-input>
</a-space> </a-space>
<a-alert type="warning" class="mt-2">表格第一行为[表头]测评数据/硬件项表格会自动添加序号列而其他纯自定义表格动态环境描述软件概述不会添加序号列</a-alert> <a-alert type="warning" class="mt-2">表格第一行为[表头]自定义表格外例如软/硬件环境测评数据环境差异性分析会自动添加[序号]</a-alert>
</div> </div>
<div class="arco-table arco-table-size-large arco-table-border arco-table-stripe arco-table-hover"> <div class="arco-table arco-table-size-large arco-table-border arco-table-stripe arco-table-hover">
<div class="arco-table-container"> <div class="arco-table-container">

View File

@@ -1,68 +1,113 @@
<template> <template>
<button class="button"> <button class="button">
<svg xmlns="http://www.w3.org/2000/svg" width="20" viewBox="0 0 20 20" height="20" fill="none" class="svg-icon"> <svg xmlns="http://www.w3.org/2000/svg" width="20" viewBox="0 0 20 20" height="20" fill="none" class="svg-icon">
<g stroke-width="1.5" stroke-linecap="round" stroke="#5d41de"> <g stroke-width="1.5" stroke-linecap="round" stroke="#5d41de">
<circle r="2.5" cy="10" cx="10"></circle> <circle r="2.5" cy="10" cx="10"></circle>
<path <path
fill-rule="evenodd" fill-rule="evenodd"
d="m8.39079 2.80235c.53842-1.51424 2.67991-1.51424 3.21831-.00001.3392.95358 1.4284 1.40477 2.3425.97027 1.4514-.68995 2.9657.82427 2.2758 2.27575-.4345.91407.0166 2.00334.9702 2.34248 1.5143.53842 1.5143 2.67996 0 3.21836-.9536.3391-1.4047 1.4284-.9702 2.3425.6899 1.4514-.8244 2.9656-2.2758 2.2757-.9141-.4345-2.0033.0167-2.3425.9703-.5384 1.5142-2.67989 1.5142-3.21831 0-.33914-.9536-1.4284-1.4048-2.34247-.9703-1.45148.6899-2.96571-.8243-2.27575-2.2757.43449-.9141-.01669-2.0034-.97028-2.3425-1.51422-.5384-1.51422-2.67994.00001-3.21836.95358-.33914 1.40476-1.42841.97027-2.34248-.68996-1.45148.82427-2.9657 2.27575-2.27575.91407.4345 2.00333-.01669 2.34247-.97026z" d="m8.39079 2.80235c.53842-1.51424 2.67991-1.51424 3.21831-.00001.3392.95358 1.4284 1.40477 2.3425.97027 1.4514-.68995 2.9657.82427 2.2758 2.27575-.4345.91407.0166 2.00334.9702 2.34248 1.5143.53842 1.5143 2.67996 0 3.21836-.9536.3391-1.4047 1.4284-.9702 2.3425.6899 1.4514-.8244 2.9656-2.2758 2.2757-.9141-.4345-2.0033.0167-2.3425.9703-.5384 1.5142-2.67989 1.5142-3.21831 0-.33914-.9536-1.4284-1.4048-2.34247-.9703-1.45148.6899-2.96571-.8243-2.27575-2.2757.43449-.9141-.01669-2.0034-.97028-2.3425-1.51422-.5384-1.51422-2.67994.00001-3.21836.95358-.33914 1.40476-1.42841.97027-2.34248-.68996-1.45148.82427-2.9657 2.27575-2.27575.91407.4345 2.00333-.01669 2.34247-.97026z"
clip-rule="evenodd" clip-rule="evenodd"
></path> ></path>
</g> </g>
</svg> </svg>
<span class="lable">{{ label }}</span> <span class="lable">{{ label }}</span>
<slot></slot> <slot></slot>
</button> </button>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
const { label } = defineProps<{ const { label } = defineProps<{
label: string label: string
}>() }>()
defineOptions({ defineOptions({
name: "SettingButton" name: "SettingButton"
}) })
</script> </script>
<style scoped> <style scoped>
.button { .button {
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
padding: 6px 12px; padding: 6px 12px;
gap: 8px; gap: 8px;
height: 36px; height: 36px;
width: 200px; width: 200px;
border: none; border: none;
background: #5e41de33; background: #5e41de33;
border-radius: 20px; border-radius: 20px;
cursor: pointer; cursor: pointer;
} transition: all 0.2s ease;
}
.lable {
line-height: 20px; .lable {
font-size: 17px; line-height: 1.2;
color: #5d41de; font-size: 17px;
font-family: sans-serif; color: #5d41de;
letter-spacing: 1px; font-family: sans-serif;
} letter-spacing: 1px;
}
.button:hover {
background: #5e41de4d; .svg-icon {
} display: block;
width: 20px;
.button:hover .svg-icon { height: 20px;
animation: spin 2s linear infinite; }
}
.button:hover {
@keyframes spin { background: #5e41de4d;
0% { }
transform: rotate(0deg);
} .button:hover .svg-icon {
animation: spin 2s linear infinite;
100% { }
transform: rotate(360deg);
} @keyframes spin {
} 0% {
</style> transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
/* 屏幕宽度 ≤1280px 时适度缩小 */
@media (max-width: 1280px) {
.button {
width: 170px;
height: 32px;
padding: 5px 10px;
gap: 6px;
}
.lable {
font-size: 16px;
}
.svg-icon {
width: 18px;
height: 18px;
}
}
/* 屏幕宽度 ≤1024px 时进一步缩小 */
@media (max-width: 1024px) {
.button {
width: 150px;
height: 30px;
padding: 4px 8px;
gap: 5px;
}
.lable {
font-size: 15px;
letter-spacing: 0.5px;
}
.svg-icon {
width: 16px;
height: 16px;
}
}
</style>

View File

@@ -21,15 +21,7 @@
<Menu /> <Menu />
</div> </div>
</a-layout-sider> </a-layout-sider>
<a-drawer <a-drawer v-if="hideMenu" :visible="drawerVisible" placement="left" :footer="false" mask-closable :closable="false" @cancel="drawerCancel">
v-if="hideMenu"
:visible="drawerVisible"
placement="left"
:footer="false"
mask-closable
:closable="false"
@cancel="drawerCancel"
>
<Menu /> <Menu />
</a-drawer> </a-drawer>
<a-layout class="layout-content" :style="paddingStyle"> <a-layout class="layout-content" :style="paddingStyle">

View File

@@ -3,144 +3,142 @@
<div class="navbar layout-navbar"> <div class="navbar layout-navbar">
<NavBar :title="projectInfo.name" /> <NavBar :title="projectInfo.name" />
</div> </div>
<a-layout class="layout"> <a-layout class="layout layout-demo">
<a-layout class="layout layout-demo"> <a-layout-sider class="layout-sider" :resize-directions="['right']" :width="300">
<a-layout-sider class="layout-sider"> <div class="p-2 overflow-auto">
<div class="p-2 overflow-auto myhcalc"> <a-input-group class="mb-2 w-full flex items-center" size="mini">
<a-input-group class="mb-2 w-full flex items-center" size="mini"> <a-input style="height: 32px" v-model="searchKey" allow-clear></a-input>
<a-input style="height: 32px" v-model="searchKey" allow-clear></a-input> <a-button @click="handleSearchTreeDataClick">搜索</a-button>
<a-button @click="handleSearchTreeDataClick">搜索</a-button> </a-input-group>
</a-input-group> <div class="flex justify-between mb-2">
<div class="flex justify-between mb-2"> <a-button type="primary" @click="toggleExpanded" class="w-5/12">
<a-button type="primary" @click="toggleExpanded" class="w-5/12"> {{ expandedKeys?.length ? "全部收缩" : "全部展开" }}
{{ expandedKeys?.length ? "全部收缩" : "全部展开" }} </a-button>
<a-popconfirm type="warning" @ok="handleCopyNode" content="是否确定根据选中节点进行创建?">
<a-button type="outline" status="warning">
<template #icon> <icon-plus /></template>点击复制创建轮次
</a-button> </a-button>
<a-popconfirm type="warning" @ok="handleCopyNode" content="是否确定根据选中节点进行创建?"> </a-popconfirm>
<a-button type="outline" status="warning"> </div>
<template #icon> <icon-plus /></template>点击复制创建轮次 <a-tree
</a-button> class="h-10/12 select-none my-arco-wrap-class"
</a-popconfirm> :data="treeData"
</div> size="mini"
<a-tree showLine
class="h-10/12 select-none my-arco-wrap-class" checkable
:data="treeData" block-node
size="mini" draggable
showLine animation
checkable auto-expand-parent
block-node @select="pointNode"
draggable @drop="ondrop"
animation :allow-drop="allowdrop"
auto-expand-parent :load-more="loadMore"
@select="pointNode" v-model:expanded-keys="expandedKeys"
@drop="ondrop" v-model:selected-keys="selectedKeys"
:allow-drop="allowdrop" v-model:checked-keys="checkedKeys"
:load-more="loadMore" ref="treeRef"
v-model:expanded-keys="expandedKeys" border
v-model:selected-keys="selectedKeys" @contextmenu="displayRightMenu"
v-model:checked-keys="checkedKeys" :default-selected-keys="[currentNode ? currentNode : route.query.key]"
ref="treeRef" >
border <!-- 在轮次节点可以新增编辑删除复制 -->
@contextmenu="displayRightMenu" <template #extra="nodeData">
:default-selected-keys="[currentNode ? currentNode : route.query.key]" <template v-if="nodeData.level === '0'">
> <a-tooltip content="点击新增轮次">
<!-- 在轮次节点可以新增编辑删除复制 --> <IconPlus
<template #extra="nodeData"> style="position: absolute; right: 8px; font-size: 12px; top: 8px; color: #3370ff"
<template v-if="nodeData.level === '0'"> @click="() => handleRoundAddClick(nodeData)"
<a-tooltip content="点击新增轮次"> />
<IconPlus </a-tooltip>
style="position: absolute; right: 8px; font-size: 12px; top: 8px; color: #3370ff" <a-tooltip content="点击删除轮次">
@click="() => handleRoundAddClick(nodeData)" <a-popconfirm content="确定要删除该轮次吗?" position="bottom" @ok="handleRoundDelClick(nodeData)">
/> <icon-close style="position: absolute; right: 25px; font-size: 12px; top: 8px; color: #3370ff" />
</a-tooltip> </a-popconfirm>
<a-tooltip content="点击删除轮次"> </a-tooltip>
<a-popconfirm content="确定要删除该轮次吗?" position="bottom" @ok="handleRoundDelClick(nodeData)"> <a-tooltip content="点击编辑当前轮次"
<icon-close style="position: absolute; right: 25px; font-size: 12px; top: 8px; color: #3370ff" /> ><IconEdit
</a-popconfirm> style="position: absolute; right: 42px; font-size: 12px; top: 8px; color: #3370ff"
</a-tooltip> @click="() => handleRoundEditClick(nodeData)"
<a-tooltip content="点击编辑当前轮次" /></a-tooltip>
><IconEdit <a-tooltip content="综合阅览该轮次下问题单"
style="position: absolute; right: 42px; font-size: 12px; top: 8px; color: #3370ff" ><icon-bug
@click="() => handleRoundEditClick(nodeData)" style="position: absolute; right: 60px; font-size: 12px; top: 8px; color: #3370ff"
/></a-tooltip> @click="handleProblemShowClick"
<a-tooltip content="综合阅览该轮次下问题单" /></a-tooltip>
><icon-bug <a-tooltip content="轮次数据管理视图"
style="position: absolute; right: 60px; font-size: 12px; top: 8px; color: #3370ff" ><icon-storage
@click="handleProblemShowClick" style="position: absolute; right: 77px; font-size: 12px; top: 8px; color: #3370ff"
/></a-tooltip> :style="{
<a-tooltip content="轮次数据管理视图" color: isOpeSetsRoute && nodeData.key === route.query.key ? 'red' : '#3370ff'
><icon-storage }"
style="position: absolute; right: 77px; font-size: 12px; top: 8px; color: #3370ff" @click="
:style="{ () => {
color: isOpeSetsRoute && nodeData.key === route.query.key ? 'red' : '#3370ff' router.push({
}" name: 'opeSets',
@click=" query: {
() => { ...route.query,
router.push({ key: nodeData.key
name: 'opeSets', }
query: { })
...route.query, }
key: nodeData.key "
} /></a-tooltip>
}) <template v-if="nodeData.key !== '0'">
} <Influence :node-data="nodeData"></Influence>
"
/></a-tooltip>
<template v-if="nodeData.key !== '0'">
<Influence :node-data="nodeData"></Influence>
</template>
</template> </template>
</template> </template>
<!-- 设计节点的图标 --> </template>
<template #switcher-icon="_, { isLeaf }"> <!-- 设计节点的图标 -->
<div class="font-icon"> <template #switcher-icon="_, { isLeaf }">
<IconDownCircle v-if="!isLeaf" /> <div class="font-icon">
<IconFile v-if="isLeaf" /> <IconDownCircle v-if="!isLeaf" />
</div> <IconFile v-if="isLeaf" />
</template> </div>
<!-- 节点图标插槽 --> </template>
<template #icon="props"> <!-- 节点图标插槽 -->
<template v-if="props.node.level === '1'"> <span style="white-space: nowrap">[被测件]</span> </template> <template #icon="props">
<template v-if="props.node.level === '2'"> [] </template> <template v-if="props.node.level === '1'"> <span style="white-space: nowrap">[被测件]</span> </template>
<template v-if="props.node.level === '3'"> [] </template> <template v-if="props.node.level === '2'"> [] </template>
<template v-if="props.node.level === '4'"> <template v-if="props.node.level === '3'"> [] </template>
<template v-if="props.node.isRelatedProblem"> <template v-if="props.node.level === '4'">
<a-tooltip content="有问题单关联"> <template v-if="props.node.isRelatedProblem">
<button>[@]</button> <a-tooltip content="有问题单关联">
<button>[@]</button>
</a-tooltip>
</template>
<template v-else>
<template v-if="props.node.isNotPassed">
<a-tooltip content="该用例未通过,但是未关联问题单,请关联">
<button :style="{ color: 'red' }">[×]</button>
</a-tooltip> </a-tooltip>
</template> </template>
<template v-else> <template v-else>
<template v-if="props.node.isNotPassed"> <a-tooltip content="该用例未执行或已通过,未关联问题单">
<a-tooltip content="该用例未通过,但是未关联问题单,请关联"> <button>[>]</button>
<button :style="{ color: 'red' }">[×]</button> </a-tooltip>
</a-tooltip>
</template>
<template v-else>
<a-tooltip content="该用例未执行或已通过,未关联问题单">
<button>[>]</button>
</a-tooltip>
</template>
</template> </template>
</template> </template>
</template> </template>
<!-- 节点title插槽 --> </template>
<template #title="{ level, title }"> <!-- 节点title插槽 -->
<template v-if="level === '0' || level === '3'"> <template #title="{ level, title }">
{{ title }} <template v-if="level === '0' || level === '3'">
<span class="small-right-context-tip"> {{ title }}
<i>右键</i> <span class="small-right-context-tip">
</span> <i>右键</i>
</template> </span>
<template v-else>{{ title }}</template>
</template> </template>
</a-tree> <template v-else>{{ title }}</template>
</div> </template>
</a-layout-sider> </a-tree>
<a-layout class="layout-content myhcalc my-custom"> </div>
<!-- 右侧界面是该元素决定滚动条overflow-y:auto --> </a-layout-sider>
<a-layout-content class="work-area project-layout" id="basic-scroll-container"> <a-layout class="layout-content">
<PageLayout ref="routeViewRef" /> <!-- 右侧界面是该元素决定滚动条overflow-y:auto -->
</a-layout-content> <a-layout-content class="work-area project-layout" id="basic-scroll-container">
</a-layout> <PageLayout ref="routeViewRef" />
</a-layout-content>
</a-layout> </a-layout>
</a-layout> </a-layout>
</a-layout> </a-layout>
@@ -365,7 +363,8 @@ const { paoVisible, paoContainer, pao2Visible, pao2Container, ondrop, allowdrop,
display: flex; display: flex;
} }
.layout-demo :deep(.arco-layout-sider) { .layout-demo :deep(.arco-layout-sider) {
width: 300px !important; min-width: 300px;
max-width: 800px;
} }
.layout { .layout {
width: 100%; width: 100%;
@@ -382,12 +381,11 @@ const { paoVisible, paoContainer, pao2Visible, pao2Container, ondrop, allowdrop,
} }
.layout-sider { .layout-sider {
position: fixed; will-change: width; // 通知浏览器宽度会变化
top: 60px; transition: none !important; // 禁止transition防止延迟
left: 0; left: 0;
z-index: 99; z-index: 99;
height: 100%; height: 100%;
transition: all 0.2s cubic-bezier(0.34, 0.69, 0.1, 1);
&::after { &::after {
position: absolute; position: absolute;
top: 0; top: 0;
@@ -404,25 +402,17 @@ const { paoVisible, paoContainer, pao2Visible, pao2Container, ondrop, allowdrop,
} }
} }
.layout-demo { .layout-demo {
position: relative; display: flex; // 确保是 flex 容器Arco Layout 默认已是 flex
height: calc(100vh - 60px);
margin-top: 60px;
overflow: hidden; // 防止溢出
} }
.layout-content { .layout-content {
position: absolute; transition: none !important; // 禁止transition防止延迟
top: 60px; flex: 1;
left: 300px;
min-height: 100vh; min-height: 100vh;
width: 100% - 300px;
overflow-y: auto; overflow-y: auto;
background-color: var(--color-fill-2); background-color: var(--color-fill-2);
transition: padding 0.2s cubic-bezier(0.34, 0.69, 0.1, 1);
position: absolute;
}
.myhcalc {
height: calc(100% - 60px);
}
// 这里容易出错注意
.my-custom {
width: calc(100% - 300px);
} }
.my-arco-wrap-class :deep(.arco-tree-node-title-text) { .my-arco-wrap-class :deep(.arco-tree-node-title-text) {
white-space: nowrap; white-space: nowrap;

View File

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

View File

@@ -53,39 +53,86 @@ export default function (crudOrFormRef?: any) {
commonRules: [{ required: true, message: "需求类型是必填" }], commonRules: [{ required: true, message: "需求类型是必填" }],
validateTrigger: "blur-sm", validateTrigger: "blur-sm",
// 主要为了添加“接口”的4个字段 // 主要为了添加“接口”的4个字段
onControl: (value) => { onControl: (value: string, maFormObject: any) => {
const columnService = maFormObject.getColumnService()
if (value === "3") { if (value === "3") {
return { // 表明是接口设计需求
source: { display: true }, columnService.get("forward_source").setAttr("display", true)
to: { display: true }, columnService.get("forward_destination").setAttr("display", true)
type: { display: true }, columnService.get("forward_description").setAttr("display", true)
protocal: { display: true } columnService.get("type").setAttr("display", true)
} columnService.get("is_bidirectional").setAttr("display", true)
} else { } else {
return { columnService.get("forward_source").setAttr("display", false)
source: { display: false }, columnService.get("forward_destination").setAttr("display", false)
to: { display: false }, columnService.get("forward_description").setAttr("display", false)
type: { display: false }, columnService.get("type").setAttr("display", false)
protocal: { display: false } columnService.get("is_bidirectional").setAttr("display", false)
}
} }
} }
}, },
{ {
formType: "grid-tailwind", formType: "grid-tailwind",
customClass: [],
colNumber: 2, colNumber: 2,
customClass: ["ml-[5px]"],
cols: [ cols: [
{ {
formList: [ formList: [
{ {
title: "接口来源", title: "接口类型",
dataIndex: "source", dataIndex: "type",
hide: true hide: true,
}, placeholder: "请填写接口类型或协议例如UART"
}
]
},
{
formList: [
{ {
title: "目的地", // 新增:单项双向接口选择
dataIndex: "to", title: "是否双向",
dataIndex: "is_bidirectional",
formType: "switch",
hide: true,
onControl: (value: boolean, maFormObject: any) => {
const columnService = maFormObject.getColumnService()
// 如果is_bidirectional都被隐藏了那么reverse被隐藏不要执行后续代码
const shuangxiangDisplay = columnService.get("is_bidirectional").getAttr("display")
if (!shuangxiangDisplay) {
columnService.get("reverse_source").setAttr("display", false)
columnService.get("reverse_destination").setAttr("display", false)
columnService.get("reverse_description").setAttr("display", false)
return
}
if (value) {
return {
reverse_source: { display: true },
reverse_destination: { display: true },
reverse_description: { display: true }
}
} else {
return {
reverse_source: { display: false },
reverse_destination: { display: false },
reverse_description: { display: false }
}
}
}
}
]
}
]
},
{
formType: "grid-tailwind",
colNumber: 3,
customClass: ["ml-3"],
cols: [
{
formList: [
{
title: "正向来源",
dataIndex: "forward_source",
hide: true hide: true
} }
] ]
@@ -93,16 +140,52 @@ export default function (crudOrFormRef?: any) {
{ {
formList: [ formList: [
{ {
title: "接口类型", title: "正向去处",
dataIndex: "type", dataIndex: "forward_destination",
hide: true, hide: true
placeholder:"请填写接口类型或协议例如UART" }
}, ]
},
{
formList: [
{ {
title: "接口数据", title: "接口描述",
dataIndex: "protocal", dataIndex: "forward_description",
hide: true, hide: true
placeholder:"请填写接口的交互数据例如XX分级数据" }
]
}
]
},
{
formType: "grid-tailwind",
colNumber: 3,
customClass: ["ml-3"],
cols: [
{
formList: [
{
title: "反向来源",
dataIndex: "reverse_source",
hide: true
}
]
},
{
formList: [
{
title: "反向去处",
dataIndex: "reverse_destination",
hide: true
}
]
},
{
formList: [
{
title: "接口描述",
dataIndex: "reverse_description",
hide: true
} }
] ]
} }

View File

@@ -65,7 +65,7 @@
import { ref } from "vue" import { ref } from "vue"
import { useTreeDataStore } from "@/store" import { useTreeDataStore } from "@/store"
import useCrudOptions from "@/views/project/dut/hooks/useCrudOptions" import useCrudOptions from "@/views/project/dut/hooks/useCrudOptions"
import useColumns from "./hooks/useColumns" import useColumns from "@/views/project/dut/hooks/useColumns"
import { Message } from "@arco-design/web-vue" import { Message } from "@arco-design/web-vue"
import { useRoute } from "vue-router" import { useRoute } from "vue-router"
import dutApi from "@/api/project/dut" import dutApi from "@/api/project/dut"

View File

@@ -29,6 +29,7 @@ export default function (crudOrFormRef: any, problemFormRef?: any) {
editDefaultValue: "用例标识自动生成结构为YL_IO_XXXX_001", editDefaultValue: "用例标识自动生成结构为YL_IO_XXXX_001",
editDisabled: true, editDisabled: true,
search: true, search: true,
searchPlaceholder:"仅搜索标识字母不要搜索YL、SU、-、001等字样",
validateTrigger: "blur-sm" validateTrigger: "blur-sm"
}, },
{ {

View File

@@ -525,7 +525,7 @@ const useCrudInit = function () {
hide: true, hide: true,
formType: "radio", formType: "radio",
addDefaultValue: "1", addDefaultValue: "1",
addDisabled: true, addDisabled: false,
dict: { dict: {
name: "secret", name: "secret",
translation: true, translation: true,