Crud表格的批量修改和替换

This commit is contained in:
2025-05-28 18:44:58 +08:00
parent aa0290b345
commit 8b2c34d70b
18 changed files with 628 additions and 274 deletions

418
cdTMP/package-lock.json generated
View File

@@ -10,9 +10,9 @@
"dependencies": {
"@arco-design/color": "^0.4.0",
"@arco-design/web-vue": "^2.57.0",
"@tanstack/vue-query": "^5.76.0",
"@tanstack/vue-query": "^5.77.2",
"@tinymce/tinymce-vue": "^6.1.0",
"@vueuse/core": "^13.2.0",
"@vueuse/core": "^13.3.0",
"axios": "^1.9.0",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
@@ -30,10 +30,10 @@
"tailwind-merge": "^3.3.0",
"tinymce": "^7.9.0",
"tw-animate-css": "^1.3.0",
"vue": "^3.5.14",
"vue": "^3.5.15",
"vue-clipboard3": "^2.0.0",
"vue-color-kit": "^1.0.6",
"vue-data-ui": "^2.6.51",
"vue-data-ui": "^2.7.6",
"vue-router": "^4.5.1",
"vuedraggable": "^2.24.3"
},
@@ -41,11 +41,11 @@
"@tailwindcss/postcss": "^4.1.7",
"@tailwindcss/vite": "^4.1.7",
"@types/lodash-es": "^4.17.12",
"@types/node": "^22.15.18",
"@types/node": "^22.15.23",
"@types/nprogress": "^0.2.3",
"@types/qs": "^6.14.0",
"@vitejs/plugin-vue": "^5.2.4",
"@vitejs/plugin-vue-jsx": "^4.1.2",
"@vitejs/plugin-vue-jsx": "^4.2.0",
"@vue/babel-plugin-jsx": "^1.4.0",
"browserslist": "^4.24.5",
"eslint": "^9.27.0",
@@ -54,7 +54,7 @@
"less-loader": "^12.3.0",
"postcss": "^8.5.3",
"prettier": "^3.5.3",
"rollup-plugin-visualizer": "^5.14.0",
"rollup-plugin-visualizer": "^6.0.1",
"tailwindcss": "^4.1.7",
"typescript": "^5.8.3",
"vite": "^6.3.5",
@@ -118,24 +118,24 @@
}
},
"node_modules/@babel/code-frame": {
"version": "7.26.2",
"resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.26.2.tgz",
"integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
"version": "7.27.1",
"resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.27.1.tgz",
"integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-validator-identifier": "^7.25.9",
"@babel/helper-validator-identifier": "^7.27.1",
"js-tokens": "^4.0.0",
"picocolors": "^1.0.0"
"picocolors": "^1.1.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/compat-data": {
"version": "7.26.8",
"resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.26.8.tgz",
"integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==",
"version": "7.27.2",
"resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.27.2.tgz",
"integrity": "sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -143,22 +143,22 @@
}
},
"node_modules/@babel/core": {
"version": "7.26.10",
"resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.26.10.tgz",
"integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==",
"version": "7.27.1",
"resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.27.1.tgz",
"integrity": "sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.26.2",
"@babel/generator": "^7.26.10",
"@babel/helper-compilation-targets": "^7.26.5",
"@babel/helper-module-transforms": "^7.26.0",
"@babel/helpers": "^7.26.10",
"@babel/parser": "^7.26.10",
"@babel/template": "^7.26.9",
"@babel/traverse": "^7.26.10",
"@babel/types": "^7.26.10",
"@babel/code-frame": "^7.27.1",
"@babel/generator": "^7.27.1",
"@babel/helper-compilation-targets": "^7.27.1",
"@babel/helper-module-transforms": "^7.27.1",
"@babel/helpers": "^7.27.1",
"@babel/parser": "^7.27.1",
"@babel/template": "^7.27.1",
"@babel/traverse": "^7.27.1",
"@babel/types": "^7.27.1",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -174,14 +174,14 @@
}
},
"node_modules/@babel/generator": {
"version": "7.26.10",
"resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.26.10.tgz",
"integrity": "sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==",
"version": "7.27.1",
"resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.27.1.tgz",
"integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.26.10",
"@babel/types": "^7.26.10",
"@babel/parser": "^7.27.1",
"@babel/types": "^7.27.1",
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^3.0.2"
@@ -191,27 +191,27 @@
}
},
"node_modules/@babel/helper-annotate-as-pure": {
"version": "7.25.9",
"resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz",
"integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==",
"version": "7.27.1",
"resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.1.tgz",
"integrity": "sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.25.9"
"@babel/types": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-compilation-targets": {
"version": "7.26.5",
"resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz",
"integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==",
"version": "7.27.2",
"resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
"integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/compat-data": "^7.26.5",
"@babel/helper-validator-option": "^7.25.9",
"@babel/compat-data": "^7.27.2",
"@babel/helper-validator-option": "^7.27.1",
"browserslist": "^4.24.0",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
@@ -221,18 +221,18 @@
}
},
"node_modules/@babel/helper-create-class-features-plugin": {
"version": "7.26.9",
"resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.26.9.tgz",
"integrity": "sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==",
"version": "7.27.1",
"resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz",
"integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.25.9",
"@babel/helper-member-expression-to-functions": "^7.25.9",
"@babel/helper-optimise-call-expression": "^7.25.9",
"@babel/helper-replace-supers": "^7.26.5",
"@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
"@babel/traverse": "^7.26.9",
"@babel/helper-annotate-as-pure": "^7.27.1",
"@babel/helper-member-expression-to-functions": "^7.27.1",
"@babel/helper-optimise-call-expression": "^7.27.1",
"@babel/helper-replace-supers": "^7.27.1",
"@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
"@babel/traverse": "^7.27.1",
"semver": "^6.3.1"
},
"engines": {
@@ -243,43 +243,43 @@
}
},
"node_modules/@babel/helper-member-expression-to-functions": {
"version": "7.25.9",
"resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz",
"integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==",
"version": "7.27.1",
"resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz",
"integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/traverse": "^7.25.9",
"@babel/types": "^7.25.9"
"@babel/traverse": "^7.27.1",
"@babel/types": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-imports": {
"version": "7.25.9",
"resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
"integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
"version": "7.27.1",
"resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
"integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/traverse": "^7.25.9",
"@babel/types": "^7.25.9"
"@babel/traverse": "^7.27.1",
"@babel/types": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
"version": "7.26.0",
"resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz",
"integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==",
"version": "7.27.1",
"resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz",
"integrity": "sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-module-imports": "^7.25.9",
"@babel/helper-validator-identifier": "^7.25.9",
"@babel/traverse": "^7.25.9"
"@babel/helper-module-imports": "^7.27.1",
"@babel/helper-validator-identifier": "^7.27.1",
"@babel/traverse": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -289,22 +289,22 @@
}
},
"node_modules/@babel/helper-optimise-call-expression": {
"version": "7.25.9",
"resolved": "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz",
"integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==",
"version": "7.27.1",
"resolved": "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz",
"integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.25.9"
"@babel/types": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-plugin-utils": {
"version": "7.26.5",
"resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz",
"integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==",
"version": "7.27.1",
"resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz",
"integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -312,15 +312,15 @@
}
},
"node_modules/@babel/helper-replace-supers": {
"version": "7.26.5",
"resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz",
"integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==",
"version": "7.27.1",
"resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz",
"integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-member-expression-to-functions": "^7.25.9",
"@babel/helper-optimise-call-expression": "^7.25.9",
"@babel/traverse": "^7.26.5"
"@babel/helper-member-expression-to-functions": "^7.27.1",
"@babel/helper-optimise-call-expression": "^7.27.1",
"@babel/traverse": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -330,14 +330,14 @@
}
},
"node_modules/@babel/helper-skip-transparent-expression-wrappers": {
"version": "7.25.9",
"resolved": "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz",
"integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==",
"version": "7.27.1",
"resolved": "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz",
"integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/traverse": "^7.25.9",
"@babel/types": "^7.25.9"
"@babel/traverse": "^7.27.1",
"@babel/types": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -362,9 +362,9 @@
}
},
"node_modules/@babel/helper-validator-option": {
"version": "7.25.9",
"resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz",
"integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==",
"version": "7.27.1",
"resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
"integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -372,14 +372,14 @@
}
},
"node_modules/@babel/helpers": {
"version": "7.26.10",
"resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.26.10.tgz",
"integrity": "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==",
"version": "7.27.1",
"resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.27.1.tgz",
"integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/template": "^7.26.9",
"@babel/types": "^7.26.10"
"@babel/template": "^7.27.1",
"@babel/types": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -417,13 +417,13 @@
}
},
"node_modules/@babel/plugin-syntax-typescript": {
"version": "7.25.9",
"resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz",
"integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==",
"version": "7.27.1",
"resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz",
"integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
"@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -433,17 +433,17 @@
}
},
"node_modules/@babel/plugin-transform-typescript": {
"version": "7.26.8",
"resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.8.tgz",
"integrity": "sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw==",
"version": "7.27.1",
"resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.1.tgz",
"integrity": "sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.25.9",
"@babel/helper-create-class-features-plugin": "^7.25.9",
"@babel/helper-plugin-utils": "^7.26.5",
"@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
"@babel/plugin-syntax-typescript": "^7.25.9"
"@babel/helper-annotate-as-pure": "^7.27.1",
"@babel/helper-create-class-features-plugin": "^7.27.1",
"@babel/helper-plugin-utils": "^7.27.1",
"@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
"@babel/plugin-syntax-typescript": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -453,32 +453,32 @@
}
},
"node_modules/@babel/template": {
"version": "7.26.9",
"resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.26.9.tgz",
"integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==",
"version": "7.27.2",
"resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.27.2.tgz",
"integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.26.2",
"@babel/parser": "^7.26.9",
"@babel/types": "^7.26.9"
"@babel/code-frame": "^7.27.1",
"@babel/parser": "^7.27.2",
"@babel/types": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
"version": "7.26.10",
"resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.26.10.tgz",
"integrity": "sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==",
"version": "7.27.1",
"resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.27.1.tgz",
"integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.26.2",
"@babel/generator": "^7.26.10",
"@babel/parser": "^7.26.10",
"@babel/template": "^7.26.9",
"@babel/types": "^7.26.10",
"@babel/code-frame": "^7.27.1",
"@babel/generator": "^7.27.1",
"@babel/parser": "^7.27.1",
"@babel/template": "^7.27.1",
"@babel/types": "^7.27.1",
"debug": "^4.3.1",
"globals": "^11.1.0"
},
@@ -1195,6 +1195,13 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
"node_modules/@rolldown/pluginutils": {
"version": "1.0.0-beta.9",
"resolved": "https://registry.npmmirror.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.9.tgz",
"integrity": "sha512-e9MeMtVWo186sgvFFJOPGy7/d2j2mZhLJIdVW0C/xDluuOvymEATqz6zKsP0ZmXGzQtqlyjz5sC1sYQUoJG98w==",
"dev": true,
"license": "MIT"
},
"node_modules/@rollup/rollup-android-arm-eabi": {
"version": "4.40.0",
"resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.0.tgz",
@@ -1783,9 +1790,9 @@
}
},
"node_modules/@tanstack/query-core": {
"version": "5.76.0",
"resolved": "https://registry.npmmirror.com/@tanstack/query-core/-/query-core-5.76.0.tgz",
"integrity": "sha512-FN375hb8ctzfNAlex5gHI6+WDXTNpe0nbxp/d2YJtnP+IBM6OUm7zcaoCW6T63BawGOYZBbKC0iPvr41TteNVg==",
"version": "5.77.2",
"resolved": "https://registry.npmmirror.com/@tanstack/query-core/-/query-core-5.77.2.tgz",
"integrity": "sha512-1lqJwPsR6GX6nZFw06erRt518O19tWU6Q+x0fJUygl4lxHCYF2nhzBPwLKk2NPjYOrpR0K567hxPc5K++xDe9Q==",
"license": "MIT",
"funding": {
"type": "github",
@@ -1793,13 +1800,13 @@
}
},
"node_modules/@tanstack/vue-query": {
"version": "5.76.0",
"resolved": "https://registry.npmmirror.com/@tanstack/vue-query/-/vue-query-5.76.0.tgz",
"integrity": "sha512-Ow1JPfAqjam/hH2WJj15Y+a7FT5LS/So2b4jMAI3lLKUcpIjVRLEOLQXdCYZ/29YbDrL66trwLPXjA9tYrHung==",
"version": "5.77.2",
"resolved": "https://registry.npmmirror.com/@tanstack/vue-query/-/vue-query-5.77.2.tgz",
"integrity": "sha512-Neon9wds87Wo6T5qr+YxOnHYmt618IGnlYE2r6dpWDvhb/mJwlvoBw9TS2KzLfmOQuadBc4nWcpUomuDR4otKg==",
"license": "MIT",
"dependencies": {
"@tanstack/match-sorter-utils": "^8.19.4",
"@tanstack/query-core": "5.76.0",
"@tanstack/query-core": "5.77.2",
"@vue/devtools-api": "^6.6.3",
"vue-demi": "^0.14.10"
},
@@ -1914,9 +1921,9 @@
}
},
"node_modules/@types/node": {
"version": "22.15.18",
"resolved": "https://registry.npmmirror.com/@types/node/-/node-22.15.18.tgz",
"integrity": "sha512-v1DKRfUdyW+jJhZNEI1PYy29S2YRxMV5AOO/x/SjKmW0acCIOqmbj6Haf9eHAhsPmrhlHSxEhv/1WszcLWV4cg==",
"version": "22.15.23",
"resolved": "https://registry.npmmirror.com/@types/node/-/node-22.15.23.tgz",
"integrity": "sha512-7Ec1zaFPF4RJ0eXu1YT/xgiebqwqoJz8rYPDi/O2BcZ++Wpt0Kq9cl0eg6NN6bYbPnR67ZLo7St5Q3UK0SnARw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1958,15 +1965,16 @@
}
},
"node_modules/@vitejs/plugin-vue-jsx": {
"version": "4.1.2",
"resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-4.1.2.tgz",
"integrity": "sha512-4Rk0GdE0QCdsIkuMmWeg11gmM4x8UmTnZR/LWPm7QJ7+BsK4tq08udrN0isrrWqz5heFy9HLV/7bOLgFS8hUjA==",
"version": "4.2.0",
"resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-4.2.0.tgz",
"integrity": "sha512-DSTrmrdLp+0LDNF77fqrKfx7X0ErRbOcUAgJL/HbSesqQwoUvUQ4uYQqaex+rovqgGcoPqVk+AwUh3v9CuiYIw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/core": "^7.26.7",
"@babel/plugin-transform-typescript": "^7.26.7",
"@vue/babel-plugin-jsx": "^1.2.5"
"@babel/core": "^7.27.1",
"@babel/plugin-transform-typescript": "^7.27.1",
"@rolldown/pluginutils": "^1.0.0-beta.9",
"@vue/babel-plugin-jsx": "^1.4.0"
},
"engines": {
"node": "^18.0.0 || >=20.0.0"
@@ -2030,39 +2038,39 @@
}
},
"node_modules/@vue/compiler-core": {
"version": "3.5.14",
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.14.tgz",
"integrity": "sha512-k7qMHMbKvoCXIxPhquKQVw3Twid3Kg4s7+oYURxLGRd56LiuHJVrvFKI4fm2AM3c8apqODPfVJGoh8nePbXMRA==",
"version": "3.5.15",
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.15.tgz",
"integrity": "sha512-nGRc6YJg/kxNqbv/7Tg4juirPnjHvuVdhcmDvQWVZXlLHjouq7VsKmV1hIxM/8yKM0VUfwT/Uzc0lO510ltZqw==",
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.27.2",
"@vue/shared": "3.5.14",
"@vue/shared": "3.5.15",
"entities": "^4.5.0",
"estree-walker": "^2.0.2",
"source-map-js": "^1.2.1"
}
},
"node_modules/@vue/compiler-dom": {
"version": "3.5.14",
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.14.tgz",
"integrity": "sha512-1aOCSqxGOea5I80U2hQJvXYpPm/aXo95xL/m/mMhgyPUsKe9jhjwWpziNAw7tYRnbz1I61rd9Mld4W9KmmRoug==",
"version": "3.5.15",
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.15.tgz",
"integrity": "sha512-ZelQd9n+O/UCBdL00rlwCrsArSak+YLZpBVuNDio1hN3+wrCshYZEDUO3khSLAzPbF1oQS2duEoMDUHScUlYjA==",
"license": "MIT",
"dependencies": {
"@vue/compiler-core": "3.5.14",
"@vue/shared": "3.5.14"
"@vue/compiler-core": "3.5.15",
"@vue/shared": "3.5.15"
}
},
"node_modules/@vue/compiler-sfc": {
"version": "3.5.14",
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.14.tgz",
"integrity": "sha512-9T6m/9mMr81Lj58JpzsiSIjBgv2LiVoWjIVa7kuXHICUi8LiDSIotMpPRXYJsXKqyARrzjT24NAwttrMnMaCXA==",
"version": "3.5.15",
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.15.tgz",
"integrity": "sha512-3zndKbxMsOU6afQWer75Zot/aydjtxNj0T2KLg033rAFaQUn2PGuE32ZRe4iMhflbTcAxL0yEYsRWFxtPro8RQ==",
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.27.2",
"@vue/compiler-core": "3.5.14",
"@vue/compiler-dom": "3.5.14",
"@vue/compiler-ssr": "3.5.14",
"@vue/shared": "3.5.14",
"@vue/compiler-core": "3.5.15",
"@vue/compiler-dom": "3.5.15",
"@vue/compiler-ssr": "3.5.15",
"@vue/shared": "3.5.15",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.17",
"postcss": "^8.5.3",
@@ -2070,13 +2078,13 @@
}
},
"node_modules/@vue/compiler-ssr": {
"version": "3.5.14",
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.14.tgz",
"integrity": "sha512-Y0G7PcBxr1yllnHuS/NxNCSPWnRGH4Ogrp0tsLA5QemDZuJLs99YjAKQ7KqkHE0vCg4QTKlQzXLKCMF7WPSl7Q==",
"version": "3.5.15",
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.15.tgz",
"integrity": "sha512-gShn8zRREZbrXqTtmLSCffgZXDWv8nHc/GhsW+mbwBfNZL5pI96e7IWcIq8XGQe1TLtVbu7EV9gFIVSmfyarPg==",
"license": "MIT",
"dependencies": {
"@vue/compiler-dom": "3.5.14",
"@vue/shared": "3.5.14"
"@vue/compiler-dom": "3.5.15",
"@vue/shared": "3.5.15"
}
},
"node_modules/@vue/devtools-api": {
@@ -2110,64 +2118,64 @@
}
},
"node_modules/@vue/reactivity": {
"version": "3.5.14",
"resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.14.tgz",
"integrity": "sha512-7cK1Hp343Fu/SUCCO52vCabjvsYu7ZkOqyYu7bXV9P2yyfjUMUXHZafEbq244sP7gf+EZEz+77QixBTuEqkQQw==",
"version": "3.5.15",
"resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.15.tgz",
"integrity": "sha512-GaA5VUm30YWobCwpvcs9nvFKf27EdSLKDo2jA0IXzGS344oNpFNbEQ9z+Pp5ESDaxyS8FcH0vFN/XSe95BZtHQ==",
"license": "MIT",
"dependencies": {
"@vue/shared": "3.5.14"
"@vue/shared": "3.5.15"
}
},
"node_modules/@vue/runtime-core": {
"version": "3.5.14",
"resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.14.tgz",
"integrity": "sha512-w9JWEANwHXNgieAhxPpEpJa+0V5G0hz3NmjAZwlOebtfKyp2hKxKF0+qSh0Xs6/PhfGihuSdqMprMVcQU/E6ag==",
"version": "3.5.15",
"resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.15.tgz",
"integrity": "sha512-CZAlIOQ93nj0OPpWWOx4+QDLCMzBNY85IQR4Voe6vIID149yF8g9WQaWnw042f/6JfvLttK7dnyWlC1EVCRK8Q==",
"license": "MIT",
"dependencies": {
"@vue/reactivity": "3.5.14",
"@vue/shared": "3.5.14"
"@vue/reactivity": "3.5.15",
"@vue/shared": "3.5.15"
}
},
"node_modules/@vue/runtime-dom": {
"version": "3.5.14",
"resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.14.tgz",
"integrity": "sha512-lCfR++IakeI35TVR80QgOelsUIdcKjd65rWAMfdSlCYnaEY5t3hYwru7vvcWaqmrK+LpI7ZDDYiGU5V3xjMacw==",
"version": "3.5.15",
"resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.15.tgz",
"integrity": "sha512-wFplHKzKO/v998up2iCW3RN9TNUeDMhdBcNYZgs5LOokHntrB48dyuZHspcahKZczKKh3v6i164gapMPxBTKNw==",
"license": "MIT",
"dependencies": {
"@vue/reactivity": "3.5.14",
"@vue/runtime-core": "3.5.14",
"@vue/shared": "3.5.14",
"@vue/reactivity": "3.5.15",
"@vue/runtime-core": "3.5.15",
"@vue/shared": "3.5.15",
"csstype": "^3.1.3"
}
},
"node_modules/@vue/server-renderer": {
"version": "3.5.14",
"resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.14.tgz",
"integrity": "sha512-Rf/ISLqokIvcySIYnv3tNWq40PLpNLDLSJwwVWzG6MNtyIhfbcrAxo5ZL9nARJhqjZyWWa40oRb2IDuejeuv6w==",
"version": "3.5.15",
"resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.15.tgz",
"integrity": "sha512-Gehc693kVTYkLt6QSYEjGvqvdK2zZ/gf/D5zkgmvBdeB30dNnVZS8yY7+IlBmHRd1rR/zwaqeu06Ij04ZxBscg==",
"license": "MIT",
"dependencies": {
"@vue/compiler-ssr": "3.5.14",
"@vue/shared": "3.5.14"
"@vue/compiler-ssr": "3.5.15",
"@vue/shared": "3.5.15"
},
"peerDependencies": {
"vue": "3.5.14"
"vue": "3.5.15"
}
},
"node_modules/@vue/shared": {
"version": "3.5.14",
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.14.tgz",
"integrity": "sha512-oXTwNxVfc9EtP1zzXAlSlgARLXNC84frFYkS0HHz0h3E4WZSP9sywqjqzGCP9Y34M8ipNmd380pVgmMuwELDyQ==",
"version": "3.5.15",
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.15.tgz",
"integrity": "sha512-bKvgFJJL1ZX9KxMCTQY6xD9Dhe3nusd1OhyOb1cJYGqvAr0Vg8FIjHPMOEVbJ9GDT9HG+Bjdn4oS8ohKP8EvoA==",
"license": "MIT"
},
"node_modules/@vueuse/core": {
"version": "13.2.0",
"resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-13.2.0.tgz",
"integrity": "sha512-n5TZoIAxbWAQ3PqdVPDzLgIRQOujFfMlatdI+f7ditSmoEeNpPBvp7h2zamzikCmrhFIePAwdEQB6ENccHr7Rg==",
"version": "13.3.0",
"resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-13.3.0.tgz",
"integrity": "sha512-uYRz5oEfebHCoRhK4moXFM3NSCd5vu2XMLOq/Riz5FdqZMy2RvBtazdtL3gEcmDyqkztDe9ZP/zymObMIbiYSg==",
"license": "MIT",
"dependencies": {
"@types/web-bluetooth": "^0.0.21",
"@vueuse/metadata": "13.2.0",
"@vueuse/shared": "13.2.0"
"@vueuse/metadata": "13.3.0",
"@vueuse/shared": "13.3.0"
},
"funding": {
"url": "https://github.com/sponsors/antfu"
@@ -2177,18 +2185,18 @@
}
},
"node_modules/@vueuse/metadata": {
"version": "13.2.0",
"resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-13.2.0.tgz",
"integrity": "sha512-kPpzuQCU0+D8DZCzK0iPpIcXI+6ufWSgwnjJ6//GNpEn+SHViaCtR+XurzORChSgvpHO9YC8gGM97Y1kB+UabA==",
"version": "13.3.0",
"resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-13.3.0.tgz",
"integrity": "sha512-42IzJIOYCKIb0Yjv1JfaKpx8JlCiTmtCWrPxt7Ja6Wzoq0h79+YVXmBV03N966KEmDEESTbp5R/qO3AB5BDnGw==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/antfu"
}
},
"node_modules/@vueuse/shared": {
"version": "13.2.0",
"resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-13.2.0.tgz",
"integrity": "sha512-vx9ZPDF5HcU9up3Jgt3G62dMUfZEdk6tLyBAHYAG4F4n73vpaA7J5hdncDI/lS9Vm7GA/FPlbOmh9TrDZROTpg==",
"version": "13.3.0",
"resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-13.3.0.tgz",
"integrity": "sha512-L1QKsF0Eg9tiZSFXTgodYnu0Rsa2P0En2LuLrIs/jgrkyiDuJSsPZK+tx+wU0mMsYHUYEjNsuE41uqqkuR8VhA==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/antfu"
@@ -5089,13 +5097,13 @@
}
},
"node_modules/rollup-plugin-visualizer": {
"version": "5.14.0",
"resolved": "https://registry.npmmirror.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.14.0.tgz",
"integrity": "sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA==",
"version": "6.0.1",
"resolved": "https://registry.npmmirror.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-6.0.1.tgz",
"integrity": "sha512-NjlGElvLXCSZSAi3gNRZbfX3qlQbQcJ9TW97c5JpqfVwMhttj9YwEdPwcvbKj91RnMX2PWAjonvSEv6UEYtnRQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"open": "^8.4.0",
"open": "^8.0.0",
"picomatch": "^4.0.2",
"source-map": "^0.7.4",
"yargs": "^17.5.1"
@@ -5776,16 +5784,16 @@
}
},
"node_modules/vue": {
"version": "3.5.14",
"resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.14.tgz",
"integrity": "sha512-LbOm50/vZFG6Mhy6KscQYXZMQ0LMCC/y40HDJPPvGFQ+i/lUH+PJHR6C3assgOQiXdl6tAfsXHbXYVBZZu65ew==",
"version": "3.5.15",
"resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.15.tgz",
"integrity": "sha512-aD9zK4rB43JAMK/5BmS4LdPiEp8Fdh8P1Ve/XNuMF5YRf78fCyPE6FUbQwcaWQ5oZ1R2CD9NKE0FFOVpMR7gEQ==",
"license": "MIT",
"dependencies": {
"@vue/compiler-dom": "3.5.14",
"@vue/compiler-sfc": "3.5.14",
"@vue/runtime-dom": "3.5.14",
"@vue/server-renderer": "3.5.14",
"@vue/shared": "3.5.14"
"@vue/compiler-dom": "3.5.15",
"@vue/compiler-sfc": "3.5.15",
"@vue/runtime-dom": "3.5.15",
"@vue/server-renderer": "3.5.15",
"@vue/shared": "3.5.15"
},
"peerDependencies": {
"typescript": "*"
@@ -5814,9 +5822,9 @@
}
},
"node_modules/vue-data-ui": {
"version": "2.6.51",
"resolved": "https://registry.npmmirror.com/vue-data-ui/-/vue-data-ui-2.6.51.tgz",
"integrity": "sha512-3fJBwQLDJVaUHuZydB4/+v55jVNjBX4Y8XYifsIr6i5Bd5Bh4x0G0TA+CtL333nr7AQPvx55QeiQiwfvV/+j9Q==",
"version": "2.7.6",
"resolved": "https://registry.npmmirror.com/vue-data-ui/-/vue-data-ui-2.7.6.tgz",
"integrity": "sha512-hkH+Avcp0B5aT6Xm6C7Gb0un10pD/PM2HKJhOLJrWlKaVRrbcMBDGWYWXApnmIVeoYRkw/M0QWfoA//lT4Deow==",
"license": "MIT",
"peerDependencies": {
"vue": ">=3.3.0"

View File

@@ -13,9 +13,9 @@
"dependencies": {
"@arco-design/color": "^0.4.0",
"@arco-design/web-vue": "^2.57.0",
"@tanstack/vue-query": "^5.76.0",
"@tanstack/vue-query": "^5.77.2",
"@tinymce/tinymce-vue": "^6.1.0",
"@vueuse/core": "^13.2.0",
"@vueuse/core": "^13.3.0",
"axios": "^1.9.0",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
@@ -33,10 +33,10 @@
"tailwind-merge": "^3.3.0",
"tinymce": "^7.9.0",
"tw-animate-css": "^1.3.0",
"vue": "^3.5.14",
"vue": "^3.5.15",
"vue-clipboard3": "^2.0.0",
"vue-color-kit": "^1.0.6",
"vue-data-ui": "^2.6.51",
"vue-data-ui": "^2.7.6",
"vue-router": "^4.5.1",
"vuedraggable": "^2.24.3"
},
@@ -44,11 +44,11 @@
"@tailwindcss/postcss": "^4.1.7",
"@tailwindcss/vite": "^4.1.7",
"@types/lodash-es": "^4.17.12",
"@types/node": "^22.15.18",
"@types/node": "^22.15.23",
"@types/nprogress": "^0.2.3",
"@types/qs": "^6.14.0",
"@vitejs/plugin-vue": "^5.2.4",
"@vitejs/plugin-vue-jsx": "^4.1.2",
"@vitejs/plugin-vue-jsx": "^4.2.0",
"@vue/babel-plugin-jsx": "^1.4.0",
"browserslist": "^4.24.5",
"eslint": "^9.27.0",
@@ -57,7 +57,7 @@
"less-loader": "^12.3.0",
"postcss": "^8.5.3",
"prettier": "^3.5.3",
"rollup-plugin-visualizer": "^5.14.0",
"rollup-plugin-visualizer": "^6.0.1",
"tailwindcss": "^4.1.7",
"typescript": "^5.8.3",
"vite": "^6.3.5",

View File

@@ -17,6 +17,7 @@ const storageEvent = function (e: StorageEvent) {
})
}
}
window.addEventListener("storage", storageEvent)
onUnmounted(() => {
window.removeEventListener("storage", storageEvent)

View File

@@ -119,5 +119,16 @@ export default {
method: "post",
data
})
},
/**
* 选择行后,批量修改“优先级”
* @returns
*/
priorityReplace(data = { selectRows: [], priority: "" }) {
return request({
url: "/project/testDemand/priorityReplace/",
method: "post",
data
})
}
}

View File

@@ -41,6 +41,11 @@
</a-space>
</div>
</a-form>
<a-divider
:style="{
margin: '8px 0'
}"
></a-divider>
</a-spin>
</template>

View File

@@ -279,7 +279,7 @@
<script setup>
import config from "@/config/crud"
import { ref, watch, provide, nextTick, onMounted, onUnmounted } from "vue"
import { ref, watch, provide, nextTick, onMounted, onUnmounted, computed } from "vue"
import defaultOptions from "./js/defaultOptions"
import { loadDict } from "@cps/ma-form/js/networkRequest.js"
import ColumnService from "@cps/ma-form/js/columnService"
@@ -728,6 +728,11 @@ const setSelecteds = (key) => {
selecteds.value = key
}
// 修改源码获取selected的值
const getSelecteds = () => {
return selecteds.value
}
const switchDataType = async () => {
isRecovery.value = !isRecovery.value
currentApi.value =
@@ -929,7 +934,8 @@ defineExpose({
crudSearchRef,
crudImportRef,
crudSettingRef,
setTableData
setTableData,
getSelecteds
})
</script>

View File

@@ -1,5 +1,5 @@
<template>
<a-modal v-model:visible="visible" width="1200px" :footer="false" :mask-closable="false" unmount-on-close>
<a-modal v-model:visible="visible" width="1200px" :footer="false" :mask-closable="false">
<template #title>{{ title }}</template>
<!-- crud组件 -->
<div class="lg:w-full w-full">
@@ -37,7 +37,7 @@
<script setup lang="jsx">
// 本组件位置1.在右键轮次问题单 2.用例界面关联问题单
import { ref } from "vue"
import { nextTick, ref } from "vue"
import problemApi from "@/api/project/problem"
import problemSingleApi from "@/api/project/singleProblem"
import { Message, Notification } from "@arco-design/web-vue"
@@ -102,25 +102,27 @@ const handleRelatedChange = async (record) => {
}
// 数据定义
const crudRef = ref()
const crudRef = ref(null)
const visible = ref(false)
const caseModalRef = ref()
const caseModalRef = ref(null)
// 定义open事件
const open = (row) => {
if (props.hasRelated === "roundProblem") {
const columnService = crudRef.value.getColumnService()
columnService.get("related").setAttr("hide", true)
crudRef.value.requestParams = { round_key: row }
crudRef.value.requestData() // 这里要变化请求的API变化
visible.value = true
}
if (props.hasRelated === "relatedProblem") {
crudRef.value.requestData() // 手动请求数据
visible.value = true
// 打开时赋值caseInfo
caseInfo.value = row
}
nextTick(() => {
if (props.hasRelated === "roundProblem") {
const columnService = crudRef.value.getColumnService()
columnService.get("related").setAttr("hide", true)
crudRef.value.requestParams = { round_key: row }
crudRef.value.requestData() // 这里要变化请求的API变化
visible.value = true
}
if (props.hasRelated === "relatedProblem") {
crudRef.value.requestData() // 手动请求数据
visible.value = true
// 打开时赋值caseInfo
caseInfo.value = row
}
})
}
// crudOptions设置
const crudOptions = ref({
@@ -505,6 +507,7 @@ const columns = ref([
// 暴露自己的open方法
defineExpose({ open })
</script>
<style lang="less" scoped>
.alert {
max-height: 32px;

View File

@@ -6,6 +6,7 @@
:options="crudOptions"
:columns="crudColumns"
ref="crudRef"
id="basic-table-demand-normal"
@beforeCancel="handleBeforeCancel"
:parent-key="route.query.key"
>
@@ -14,12 +15,18 @@
</template>
<!-- 表格前置扩展槽:添加关联按钮 -->
<template #tableAfterButtons>
<a-button type="outline" status="warning" @click="handleOpenRelationCSX">
<template #icon>
<icon-tags />
</template>
关联测试项
</a-button>
<a-space>
<a-button type="outline" status="warning" @click="handleOpenRelationCSX">
<template #icon>
<icon-tags />
</template>
关联测试项
</a-button>
<a-divider direction="vertical" type="double" />
<a-button type="outline" @click="handleReplaceClick">批量替换</a-button>
<a-divider direction="vertical" type="double" />
<a-button type="outline" @click="handleOpenReplacePriority">批量修改优先级</a-button>
</a-space>
</template>
<!-- 版本字段的插槽 -->
<template #inputPrepend-ident> XQ_XX_ </template>
@@ -44,6 +51,21 @@
v-model:model-value="relatedData"
/>
</a-modal>
<ReplaceModel
ref="replaceModal"
:api="demandApi.replace"
:columns="[
{ dataIndex: 'ident', title: '标识' },
{ dataIndex: 'name', title: '名称' },
{ dataIndex: 'testDesciption', title: '测试描述' },
{ dataIndex: 'testContent', title: '测试子项' }
]"
key="modal-demand-normal"
popup-key="demand-normal"
@replaceSuccess="replaceSuccessHandle"
/>
<!-- 批量修改优先级 -->
<ReplacePriority @modifySuccess="crudRef.refresh()" ref="replacePriorityRef" />
</div>
</template>
@@ -51,14 +73,36 @@
import { ref } from "vue"
import commonApi from "@/api/common"
import { useRoute } from "vue-router"
import { Message } from "@arco-design/web-vue"
// hooks
import useCrudOpMore from "./hooks/useCrudOpMore"
import useColumn from "./hooks/useColumns"
import useRalateDemand from "./hooks/useRalateDemand"
import demandApi from "@/api/project/testDemand"
import ReplaceModel from "@/views/project/opeSets/components/DesignTable/ReplaceModal.vue"
import ReplacePriority from "@/views/project/opeSets/components/DemandTable/ReplacePriority.vue"
// inits
const route = useRoute()
// refs
const crudRef = ref(null)
// 2025年5月新增
const replaceModal = ref()
const handleReplaceClick = () => {
replaceModal.value?.open(crudRef.value.getSelecteds) // 把获取选中行的函数给传递给替换组件
}
const replaceSuccessHandle = async (count) => {
Message.success(`批量更新成功,尝试更新行数:${count}`)
// 批量更新后刷新表格
crudRef.value.refresh()
}
// 2025-05新增-批量修改优先级
const replacePriorityRef = ref(null)
const handleOpenReplacePriority = () => {
replacePriorityRef.value?.open(crudRef.value.getSelecteds)
}
// 根据传参获取key分别为轮次、设计需求的key
const { projectId, crudOptions, handleBeforeCancel } = useCrudOpMore(crudRef)
const crudColumns = useColumn(crudRef)
@@ -97,4 +141,11 @@ defineOptions({
.ol-reset {
list-style: auto;
}
/* 下面让modal的蒙层不交互让用户可以复制table的文字 */
div:deep(.arco-modal-container) {
pointer-events: none;
}
:deep(.arco-modal.arco-modal-draggable) {
pointer-events: auto;
}
</style>

View File

@@ -2,17 +2,32 @@
<div class="ma-content-block lg:flex justify-between p-4">
<div class="lg:w-full w-full lg:ml-4 mt-5 lg:mt-0">
<!-- CRUD组件 -->
<ma-crud :options="crudOptions" :columns="crudColumns" ref="crudRef" :parent-key="route.query.key">
<ma-crud
id="basic-table-design-normal"
:options="crudOptions"
:columns="crudColumns"
ref="crudRef"
:parent-key="route.query.key"
>
<template #ident="{ record }">
{{ showType(record) }}
</template>
<template #tableAfterButtons>
<a-button status="success" type="outline" @click="handleAddFileInputDemand" v-if="isXQ === 'XQ'">
<template #icon>
<icon-plus />
</template>
上传需求规格说明快捷录入
</a-button>
<a-space>
<a-button
status="success"
type="outline"
@click="handleAddFileInputDemand"
v-if="isXQ === 'XQ'"
>
<template #icon>
<icon-plus />
</template>
上传需求规格说明快捷录入
</a-button>
<a-divider direction="vertical" type="double" />
<a-button type="outline" @click="handleReplaceClick">批量替换</a-button>
</a-space>
</template>
<!-- 字段的前缀后缀的插槽 -->
<!-- 版本字段的插槽 -->
@@ -20,6 +35,20 @@
</ma-crud>
</div>
<file-input-modal ref="fileInputRef" @enterFinish="crudRef.refresh()"></file-input-modal>
<!-- 批量替换组件 -->
<ReplaceModel
ref="replaceModal"
:api="designApi.replace"
:columns="[
{ dataIndex: 'ident', title: '标识' },
{ dataIndex: 'name', title: '名称' },
{ dataIndex: 'chapter', title: '章节号' },
{ dataIndex: 'description', title: '需求描述' }
]"
key="modal-design-normal"
popup-key="design-normal"
@replaceSuccess="replaceSuccessHandle"
/>
</div>
</template>
@@ -27,13 +56,31 @@
import { ref } from "vue"
import useCrudOptions from "@/views/project/dut/hooks/useCrudOptions"
import useColumns from "./hooks/useColumns"
import { Message } from "@arco-design/web-vue"
import { useRoute } from "vue-router"
import dutApi from "@/api/project/dut"
import designApi from "@/api/project/designDemand"
import commonApi from "@/api/common"
import FileInputModal from "./components/FileInputModal/index.vue"
import ReplaceModel from "@/views/project/opeSets/components/DesignTable/ReplaceModal.vue"
const route = useRoute()
const crudRef = ref()
const projectId = ref(route.query.id)
// 5月28日新增功能替换
const replaceModal = ref()
const handleReplaceClick = () => {
replaceModal.value?.open(crudRef.value.getSelecteds) // 把获取选中行的函数给传递给替换组件
}
const replaceSuccessHandle = async (count) => {
Message.success(`批量更新成功,尝试更新行数:${count}`)
// 批量更新后刷新表格
crudRef.value.refresh()
}
// 5月8日修改设计需求标识就按SJ-FT-设计需求标识来
const demandTypeDict = ref([])
;(function () {
@@ -62,6 +109,7 @@ const showType = (record) => {
// crud组件
const crudOptions = useCrudOptions(crudRef)
const crudColumns = useColumns(crudRef)
// ~~~大功能打开ma-form-modal~~~
const fileInputRef = ref(null)
const handleAddFileInputDemand = () => {
@@ -78,4 +126,12 @@ defineOptions({
})
</script>
<style lang="less" scoped></style>
<style lang="less" scoped>
/* 下面让modal的蒙层不交互让用户可以复制table的文字 */
div:deep(.arco-modal-container) {
pointer-events: none;
}
:deep(.arco-modal.arco-modal-draggable) {
pointer-events: auto;
}
</style>

View File

@@ -30,8 +30,13 @@ import caseApi from "@/api/project/case"
const visible = ref(false)
const formData = ref({})
const exetime = ref("")
const getSelectedsFunc = ref<any>(() => [])
// props
const { selectRows } = defineProps<{ selectRows: any }>()
const { selectRows } = defineProps<{ selectRows?: any }>()
// emits
const emit = defineEmits(["modifySuccess"])
// 2.异步执行替换操作返回boolean-true则关闭弹窗
const submitReplace = async () => {
@@ -40,13 +45,15 @@ const submitReplace = async () => {
Message.error("请选择时间后,进行替换操作")
return false
}
if (selectRows.length && selectRows.length > 0) {
const selecteds = selectRows || getSelectedsFunc.value() || []
if (selecteds.length && selecteds.length > 0) {
// 判断是否选择了行
// 请求后台执行
await caseApi.exetimeReplace({
selectRows: selectRows,
selectRows: selecteds,
exetime: exetime.value
})
emit("modifySuccess")
Message.success("批量替换成功...")
return true
}
@@ -55,7 +62,8 @@ const submitReplace = async () => {
}
// 其他打开modal
const open = () => {
const open = (getFunc: (() => number[]) | undefined) => {
if (getFunc) getSelectedsFunc.value = getFunc
exetime.value = ""
visible.value = true
}

View File

@@ -56,9 +56,14 @@ const formData = ref({})
const designPerson = ref("不替换")
const testPerson = ref("不替换")
const monitorPerson = ref("不替换")
const getSelectedsFunc = ref<any>(() => [])
// props
const { selectRows } = defineProps<{ selectRows: any }>()
// emits
const emit = defineEmits(["modifySuccess"])
// 1.在created时候直接请求后端项目人员信息
const persons = ref([])
async function fetchPersonByProject() {
@@ -74,15 +79,17 @@ const submitReplace = async () => {
Message.error("至少选择一项替换")
return false
}
if (selectRows.length && selectRows.length > 0) {
const selecteds = selectRows || getSelectedsFunc.value() || []
if (selecteds.length && selecteds.length > 0) {
// 判断是否选择了行
// 请求后台执行
await caseApi.personReplace({
selectRows: selectRows,
selectRows: selecteds,
designPerson: designPerson.value,
testPerson: testPerson.value,
monitorPerson: monitorPerson.value
})
emit("modifySuccess")
Message.success("批量替换成功...")
return true
}
@@ -91,7 +98,8 @@ const submitReplace = async () => {
}
// 其他打开modal
const open = () => {
const open = (getFunc: (() => number[]) | undefined) => {
if (getFunc) getSelectedsFunc.value = getFunc
designPerson.value = "不替换"
testPerson.value = "不替换"
monitorPerson.value = "不替换"

View File

@@ -18,8 +18,8 @@
<template #icon><icon-swap /></template>
</a-button>
<a-divider direction="vertical"></a-divider>
<a-button type="primary" @click="handlePerpleModal">批量修改人员</a-button>
<a-button type="primary" @click="handleExetimeModal">批量修改时间</a-button>
<a-button type="outline" @click="handlePerpleModal">批量修改人员</a-button>
<a-button type="outline" @click="handleExetimeModal">批量修改时间</a-button>
</a-space>
<a-space>
<a-space class="lg:mt-0 mt-2">
@@ -126,7 +126,7 @@
ref="replaceModal"
:selectRows="selecteds"
:api="caseApi.replace"
:columns="columns"
:columns="columns.filter((it) => it.dataIndex !== 'ident')"
key="modal-case"
popup-key="case"
@replaceSuccess="replaceSuccessHandle"
@@ -152,8 +152,8 @@ import useDelete from "@/views/project/opeSets/components/DesignTable/useDelete"
import { Message } from "@arco-design/web-vue"
import ReplaceModal from "@/views/project/opeSets/components/DesignTable/ReplaceModal.vue"
// case专属组件
import ReplacePerson from "./ReplacePerson.vue"
import ReplaceExetime from "./ReplaceExetime.vue"
import ReplacePerson from "@/views/project/opeSets/components/CaseTable/ReplacePerson.vue"
import ReplaceExetime from "@/views/project/opeSets/components/CaseTable/ReplaceExetime.vue"
const columns = ref([
{
@@ -224,7 +224,7 @@ const { deletesMultipleAction } = useDelete(caseApi.delete, fetchData, selecteds
// 7.2.批量替换相关
const replaceModal = ref<InstanceType<typeof ReplaceModal> | null>(null)
const handleOpenReplaceModal = () => {
replaceModal.value?.open()
replaceModal.value?.open(undefined)
}
const replaceSuccessHandle = async (count: number) => {
Message.success(`批量更新成功,尝试更新行数:${count}`)
@@ -242,13 +242,13 @@ const searchSubmit = (data: ISearchFormCase) => {
// 9.批量修改人员
const replacePersonModalRef = ref<InstanceType<typeof ReplacePerson>>()
const handlePerpleModal = () => {
replacePersonModalRef.value!.open()
replacePersonModalRef.value!.open(undefined)
}
// 10.批量修改事件
// 10.批量修改时间
const replaceExetimeModalRef = ref<InstanceType<typeof ReplacePerson>>()
const handleExetimeModal = () => {
replaceExetimeModalRef.value!.open()
replaceExetimeModalRef.value!.open(undefined)
}
</script>

View File

@@ -0,0 +1,91 @@
<template>
<div class="replace-priority-container">
<modalDom />
</div>
</template>
<script setup lang="tsx">
import { ref } from "vue"
import { Modal, Form, FormItem, Select, Option, Message } from "@arco-design/web-vue"
import demandApi from "@/api/project/testDemand"
// props
const { selectedRows = undefined } = defineProps<{
selectedRows?: number[]
}>()
// refs
const visible = ref(false)
const formData = ref({})
const priority = ref("")
const getSelectedsFunc = ref<() => number[]>(() => [])
// emits
const emit = defineEmits(["modifySuccess"])
// 异步提交修改
const submitReplace = async () => {
// 不再非受控验证,手动验证
if (priority.value === "") {
Message.error("请选择优先级后进行提交")
return false
}
const selecteds = selectedRows || getSelectedsFunc.value() || []
if (selecteds.length && selecteds.length > 0) {
// 判断是否选择了行
// 请求后台执行
await demandApi.priorityReplace({
selectRows: selecteds as any,
priority: priority.value
})
emit("modifySuccess")
Message.success("批量替换成功...")
return true
}
Message.error("请在表格中选择行...")
return false
}
// 弹窗主DOM
const modalDom = () => {
return (
<Modal
v-model={[visible.value, "visible"]}
width="40%"
cancel-text="关闭"
ok-text="确认修改"
unmount-on-close
draggable
on-before-ok={submitReplace}
>
{{
title: () => "批量修改优先级",
default: () => (
<div class="content-container">
<Form model={formData.value} scroll-to-first-error>
<FormItem field="priority" label="优先级">
<Select placeholder="请选择要修改成为的优先级" v-model={priority.value}>
<Option value="1"></Option>
<Option value="2"></Option>
<Option value="3"></Option>
</Select>
</FormItem>
</Form>
</div>
)
}}
</Modal>
)
}
// open expose
const open = (getFunc: (() => number[]) | undefined) => {
if (getFunc) getSelectedsFunc.value = getFunc
visible.value = true
}
defineExpose({ open })
// component options
defineOptions({ name: "ReplacePriority" })
</script>
<style lang="less" scoped></style>

View File

@@ -17,6 +17,8 @@
批量替换
<template #icon><icon-swap /></template>
</a-button>
<a-divider direction="vertical"></a-divider>
<a-button type="outline" @click="handleOpenReplacePriority">批量修改优先级</a-button>
</a-space>
<a-space>
<a-space class="lg:mt-0 mt-2">
@@ -136,11 +138,13 @@
ref="replaceModal"
:selectRows="selecteds"
:api="demandApi.replace"
:columns="columns"
:columns="columns.filter((it) => it.dataIndex !== 'priority' && it.dataIndex !== 'testType')"
key="modal-demand"
popup-key="demand"
@replaceSuccess="replaceSuccessHandle"
/>
<!-- 批量修改优先级 -->
<ReplacePriority ref="replacePriorityRef" @modifySuccess="fetchData()" :selected-rows="selecteds" />
</div>
</template>
@@ -157,6 +161,7 @@ import Trigger from "./Trigger.vue"
import Search from "@/views/project/opeSets/components/DesignTable/Search.vue"
import useDelete from "@/views/project/opeSets/components/DesignTable/useDelete"
import ReplaceModal from "@/views/project/opeSets/components/DesignTable/ReplaceModal.vue"
import ReplacePriority from "@/views/project/opeSets/components/DemandTable/ReplacePriority.vue"
import { Message } from "@arco-design/web-vue"
// 0.[不同]定义列字段
@@ -262,7 +267,7 @@ const { deletesMultipleAction } = useDelete(demandApi.delete, fetchData, selecte
// 7.2.批量替换相关
const replaceModal = ref<InstanceType<typeof ReplaceModal> | null>(null)
const handleOpenReplaceModal = () => {
replaceModal.value?.open()
replaceModal.value?.open(undefined)
}
const replaceSuccessHandle = async (count: number) => {
Message.success(`批量更新成功,尝试更新行数:${count}`)
@@ -276,6 +281,12 @@ const searchSubmit = (data: ISearchFormDemand) => {
searchParams.value = { ...data }
fetchData(true)
}
// 9.批量修改优先级-priority
const replacePriorityRef = ref<InstanceType<typeof ReplacePriority> | null>(null)
const handleOpenReplacePriority = () => {
replacePriorityRef.value?.open(undefined)
}
</script>
<style scoped lang="less">

View File

@@ -63,14 +63,21 @@ import { useRoute } from "vue-router"
// refs
const visible = ref(false)
const route = useRoute()
// 保存获取选择行的函数
const selectedGetFunc = ref<() => number[] | undefined>(() => [])
// ref
const formRef = ref<InstanceType<typeof Form>>(null)
const formRef = ref<InstanceType<typeof Form>>()
// props
/// 已选择的行数据的id列表
const { selectRows, columns, api, popupKey } = defineProps<{
selectRows: number[]
const {
selectRows = undefined,
columns,
api,
popupKey
} = defineProps<{
selectRows?: number[]
columns: any[]
api: Function
popupKey: string
@@ -94,18 +101,27 @@ const submitReplace = async () => {
// 验证表单
const validate = await formRef.value.validate()
if (!validate) {
// 判断使用selectedRows还是selectedOpenIn
let selecteds = selectRows || selectedGetFunc.value!() || []
// 进入这里表示验证通过,手动验证是否选择了行
if (selectRows.length < 1) {
if (selecteds.length < 1) {
// 提示用户需要先选择table的行
Message.error("请先在表格中选择行进行替换")
Message.error("您还未选择行...")
return false
}
// 都验证后提交给后端操作
try {
// 首先该组件两个地方使用需要处理key的问题
const round_key = {
key: route.query.key as string
}
if (round_key.key && round_key.key.split("-").length > 1) {
round_key.key = round_key.key.split("-")[0]
}
const res = await api({
project_id: route.query.id,
round_key: route.query.key,
selectRows,
round_key: round_key.key,
selectRows: selecteds,
...formData.value
})
// 批量修改成功放出信号给父组件更新表格
@@ -119,7 +135,11 @@ const submitReplace = async () => {
}
// expose functions
const open = () => {
const open = (selectedIdsGetFunc: (() => number[]) | undefined) => {
// 保存获取用户选择行的函数, 可能是undefined
if (selectedIdsGetFunc) {
selectedGetFunc.value = selectedIdsGetFunc
}
// 每次打开初始化表单数据
formData.value = {
...initialFormData

View File

@@ -214,7 +214,7 @@ const { deletesMultipleAction } = useDelete(designApi.delete, fetchData, selecte
// 7.2.批量替换相关
const replaceModal = ref<InstanceType<typeof ReplaceModal> | null>(null)
const handleOpenReplaceModal = () => {
replaceModal.value?.open()
replaceModal.value?.open(undefined)
}
const replaceSuccessHandle = async (count: number) => {
Message.success(`批量更新成功,尝试更新行数:${count}`)

View File

@@ -6,15 +6,50 @@
:options="crudOptions"
:columns="crudColumns"
ref="crudRef"
id="basic-table-case-normal"
@beforeCancel="handleBeforeCancel"
:parent-key="route.query.key"
>
<template #ident="{ record }">
{{ showType(record) }}
</template>
<!-- 表格前置扩展槽:添加关联按钮 -->
<template #tableAfterButtons>
<a-space>
<a-divider direction="vertical" type="double" />
<a-button type="outline" @click="handleReplaceClick">批量替换</a-button>
<a-divider direction="vertical" type="double" />
<a-button type="outline" @click="handlePerpleModal">批量修改人员</a-button>
<a-button type="outline" @click="handleExetimeModal">批量修改时间</a-button>
</a-space>
</template>
</ma-crud>
</div>
<problem-form ref="problemFormRef" :title="title"></problem-form>
<ReplaceModel
ref="replaceModal"
:api="caseApi.replace"
:columns="[
{ dataIndex: 'name', title: '名称' },
{ dataIndex: 'summarize', title: '用例综述' },
{ dataIndex: 'testStep', title: '测试步骤' }
]"
key="modal-case-normal"
popup-key="case-normal"
@replaceSuccess="replaceSuccessHandle"
/>
<!-- 批量替换人员组件 -->
<replace-person
:selectRows="undefined"
@modify-success="crudRef.refresh()"
ref="replacePersonModalRef"
/>
<!-- 批量替换时间 -->
<replace-exetime
:selectRows="undefined"
@modify-success="crudRef.refresh()"
ref="replaceExetimeModalRef"
/>
</div>
</template>
@@ -23,11 +58,43 @@ import { ref } from "vue"
import ProblemForm from "@/views/project/case/components/ProblemForm.vue"
import useCrudOpMore from "./hooks/useCrudOpMore"
import useColumn from "./hooks/useColumn"
import { Message } from "@arco-design/web-vue"
import caseApi from "@/api/project/case"
import { useRoute } from "vue-router"
import ReplaceModel from "@/views/project/opeSets/components/DesignTable/ReplaceModal.vue"
// 批量修改人员
import ReplacePerson from "@/views/project/opeSets/components/CaseTable/ReplacePerson.vue"
// 批量修改时间
import ReplaceExetime from "@/views/project/opeSets/components/CaseTable/ReplaceExetime.vue"
const route = useRoute()
const problemFormRef = ref(null)
const title = ref("问题单表单")
const crudRef = ref()
// 2025年5月新增
const replaceModal = ref()
const handleReplaceClick = () => {
replaceModal.value?.open(crudRef.value.getSelecteds) // 把获取选中行的函数给传递给替换组件
}
const replaceSuccessHandle = async (count) => {
Message.success(`批量更新成功,尝试更新行数:${count}`)
// 批量更新后刷新表格
crudRef.value.refresh()
}
// 批量修改人员
const replacePersonModalRef = ref()
const handlePerpleModal = () => {
replacePersonModalRef.value.open(crudRef.value.getSelecteds)
}
// 批量修改时间
const replaceExetimeModalRef = ref()
const handleExetimeModal = () => {
replaceExetimeModalRef.value.open(crudRef.value.getSelecteds)
}
// 标识重新定义
const showType = (record) => {
let key_string = parseInt(record.key.substring(record.key.lastIndexOf("-") + 1)) + 1
@@ -48,4 +115,12 @@ defineOptions({
})
</script>
<style lang="less" scoped></style>
<style lang="less" scoped>
/* 下面让modal的蒙层不交互让用户可以复制table的文字 */
div:deep(.arco-modal-container) {
pointer-events: none;
}
:deep(.arco-modal.arco-modal-draggable) {
pointer-events: auto;
}
</style>

View File

@@ -37,7 +37,7 @@ const useCrudInit = function () {
{
formType: "grid",
cols: [
{ span: 4, formList: [{ dataIndex: "ident" }] },
{ span: 8, formList: [{ dataIndex: "ident" }] },
{ span: 8, formList: [{ dataIndex: "name" }] }
]
},