双击打开详情修复
This commit is contained in:
205
cdTMP/package-lock.json
generated
205
cdTMP/package-lock.json
generated
@@ -1,21 +1,20 @@
|
|||||||
{
|
{
|
||||||
"name": "cdtmp",
|
"name": "cdtmp",
|
||||||
"version": "0.0.3",
|
"version": "0.0.4",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "cdtmp",
|
"name": "cdtmp",
|
||||||
"version": "0.0.3",
|
"version": "0.0.4",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@arco-design/color": "^0.4.0",
|
"@arco-design/color": "^0.4.0",
|
||||||
"@arco-design/web-vue": "^2.56.3",
|
"@arco-design/web-vue": "^2.56.3",
|
||||||
"@tanstack/vue-query": "^5.62.2",
|
"@tanstack/vue-query": "^5.62.9",
|
||||||
"@tinymce/tinymce-vue": "^6.1.0",
|
"@tinymce/tinymce-vue": "^6.1.0",
|
||||||
"@vueuse/core": "^12.0.0",
|
"@vueuse/core": "^12.2.0",
|
||||||
"axios": "^1.7.9",
|
"axios": "^1.7.9",
|
||||||
"dayjs": "^1.11.13",
|
"dayjs": "^1.11.13",
|
||||||
"echarts": "^5.5.1",
|
|
||||||
"file2md5": "^1.3.0",
|
"file2md5": "^1.3.0",
|
||||||
"lodash-es": "^4.17.21",
|
"lodash-es": "^4.17.21",
|
||||||
"mammoth": "^1.8.0",
|
"mammoth": "^1.8.0",
|
||||||
@@ -25,34 +24,34 @@
|
|||||||
"pinyin-match": "^1.2.6",
|
"pinyin-match": "^1.2.6",
|
||||||
"postcss-import": "^16.1.0",
|
"postcss-import": "^16.1.0",
|
||||||
"qs": "^6.13.1",
|
"qs": "^6.13.1",
|
||||||
"tinymce": "^7.5.1",
|
"tinymce": "^7.6.0",
|
||||||
"vue": "^3.5.13",
|
"vue": "^3.5.13",
|
||||||
"vue-clipboard3": "^2.0.0",
|
"vue-clipboard3": "^2.0.0",
|
||||||
"vue-color-kit": "^1.0.6",
|
"vue-color-kit": "^1.0.6",
|
||||||
"vue-echarts": "^7.0.3",
|
"vue-data-ui": "^2.4.50",
|
||||||
"vue-router": "^4.5.0",
|
"vue-router": "^4.5.0",
|
||||||
"vuedraggable": "^2.24.3"
|
"vuedraggable": "^2.24.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/lodash-es": "^4.17.12",
|
"@types/lodash-es": "^4.17.12",
|
||||||
"@types/node": "^22.10.1",
|
"@types/node": "^22.10.2",
|
||||||
"@types/nprogress": "^0.2.3",
|
"@types/nprogress": "^0.2.3",
|
||||||
"@types/qs": "^6.9.17",
|
"@types/qs": "^6.9.17",
|
||||||
"@vitejs/plugin-vue": "^5.2.1",
|
"@vitejs/plugin-vue": "^5.2.1",
|
||||||
"@vitejs/plugin-vue-jsx": "^4.1.1",
|
"@vitejs/plugin-vue-jsx": "^4.1.1",
|
||||||
"@vue/babel-plugin-jsx": "^1.2.5",
|
"@vue/babel-plugin-jsx": "^1.2.5",
|
||||||
"autoprefixer": "^10.4.20",
|
"autoprefixer": "^10.4.20",
|
||||||
"browserslist": "^4.24.2",
|
"browserslist": "^4.24.3",
|
||||||
"eslint": "^9.16.0",
|
"eslint": "^9.17.0",
|
||||||
"eslint-plugin-vue": "^9.32.0",
|
"eslint-plugin-vue": "^9.32.0",
|
||||||
"less": "^4.2.1",
|
"less": "^4.2.1",
|
||||||
"less-loader": "^12.2.0",
|
"less-loader": "^12.2.0",
|
||||||
"postcss": "^8.4.49",
|
"postcss": "^8.4.49",
|
||||||
"prettier": "^3.4.2",
|
"prettier": "^3.4.2",
|
||||||
"rollup-plugin-visualizer": "^5.12.0",
|
"rollup-plugin-visualizer": "^5.12.0",
|
||||||
"tailwindcss": "^3.4.16",
|
"tailwindcss": "^3.4.17",
|
||||||
"typescript": "^5.7.2",
|
"typescript": "^5.7.2",
|
||||||
"vite": "^6.0.3"
|
"vite": "^6.0.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@alloc/quick-lru": {
|
"node_modules/@alloc/quick-lru": {
|
||||||
@@ -81,6 +80,7 @@
|
|||||||
"version": "0.4.0",
|
"version": "0.4.0",
|
||||||
"resolved": "https://registry.npmmirror.com/@arco-design/color/-/color-0.4.0.tgz",
|
"resolved": "https://registry.npmmirror.com/@arco-design/color/-/color-0.4.0.tgz",
|
||||||
"integrity": "sha512-s7p9MSwJgHeL8DwcATaXvWT3m2SigKpxx4JA1BGPHL4gfvaQsmQfrLBDpjOJFJuJ2jG2dMt3R3P8Pm9E65q18g==",
|
"integrity": "sha512-s7p9MSwJgHeL8DwcATaXvWT3m2SigKpxx4JA1BGPHL4gfvaQsmQfrLBDpjOJFJuJ2jG2dMt3R3P8Pm9E65q18g==",
|
||||||
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"color": "^3.1.3"
|
"color": "^3.1.3"
|
||||||
}
|
}
|
||||||
@@ -1013,9 +1013,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@eslint/js": {
|
"node_modules/@eslint/js": {
|
||||||
"version": "9.16.0",
|
"version": "9.17.0",
|
||||||
"resolved": "https://registry.npmmirror.com/@eslint/js/-/js-9.16.0.tgz",
|
"resolved": "https://registry.npmmirror.com/@eslint/js/-/js-9.17.0.tgz",
|
||||||
"integrity": "sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==",
|
"integrity": "sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -1584,9 +1584,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@tanstack/query-core": {
|
"node_modules/@tanstack/query-core": {
|
||||||
"version": "5.62.2",
|
"version": "5.62.9",
|
||||||
"resolved": "https://registry.npmmirror.com/@tanstack/query-core/-/query-core-5.62.2.tgz",
|
"resolved": "https://registry.npmmirror.com/@tanstack/query-core/-/query-core-5.62.9.tgz",
|
||||||
"integrity": "sha512-LcwVcC5qpsDpHcqlXUUL5o9SaOBwhNkGeV+B06s0GBoyBr8FqXPuXT29XzYXR36lchhnerp6XO+CWc84/vh7Zg==",
|
"integrity": "sha512-lwePd8hNYhyQ4nM/iRQ+Wz2cDtspGeZZHFZmCzHJ7mfKXt+9S301fULiY2IR2byJYY6Z03T427E5PoVfMexHjw==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"funding": {
|
"funding": {
|
||||||
"type": "github",
|
"type": "github",
|
||||||
@@ -1594,13 +1594,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@tanstack/vue-query": {
|
"node_modules/@tanstack/vue-query": {
|
||||||
"version": "5.62.2",
|
"version": "5.62.9",
|
||||||
"resolved": "https://registry.npmmirror.com/@tanstack/vue-query/-/vue-query-5.62.2.tgz",
|
"resolved": "https://registry.npmmirror.com/@tanstack/vue-query/-/vue-query-5.62.9.tgz",
|
||||||
"integrity": "sha512-osmptKF+Ung+UFNgKDhOrQxmlZsRp0zATCz8ARTbcay20CCnv6rvBR/+LJlb/M9YGQU/chrt/nPIi1Ax+j0SUw==",
|
"integrity": "sha512-L6soXGCGlMT5Xc/ToUNt7AGJjr6C8mc3gkASe1tDhPRyo4VoMcmnha+qf3yP4Uwd38bmZmohZwnBbuT3O3TvQA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@tanstack/match-sorter-utils": "^8.19.4",
|
"@tanstack/match-sorter-utils": "^8.19.4",
|
||||||
"@tanstack/query-core": "5.62.2",
|
"@tanstack/query-core": "5.62.9",
|
||||||
"@vue/devtools-api": "^6.6.3",
|
"@vue/devtools-api": "^6.6.3",
|
||||||
"vue-demi": "^0.14.10"
|
"vue-demi": "^0.14.10"
|
||||||
},
|
},
|
||||||
@@ -1715,9 +1715,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/node": {
|
"node_modules/@types/node": {
|
||||||
"version": "22.10.1",
|
"version": "22.10.2",
|
||||||
"resolved": "https://registry.npmmirror.com/@types/node/-/node-22.10.1.tgz",
|
"resolved": "https://registry.npmmirror.com/@types/node/-/node-22.10.2.tgz",
|
||||||
"integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==",
|
"integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -1934,14 +1934,14 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@vueuse/core": {
|
"node_modules/@vueuse/core": {
|
||||||
"version": "12.0.0",
|
"version": "12.2.0",
|
||||||
"resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-12.0.0.tgz",
|
"resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-12.2.0.tgz",
|
||||||
"integrity": "sha512-C12RukhXiJCbx4MGhjmd/gH52TjJsc3G0E0kQj/kb19H3Nt6n1CA4DRWuTdWWcaFRdlTe0npWDS942mvacvNBw==",
|
"integrity": "sha512-jksyNu+5EGwggNkRWd6xX+8qBkYbmrwdFQMgCABsz+wq8bKF6w3soPFLB8vocFp3wFIzn0OYkSPM9JP+AFKwsg==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/web-bluetooth": "^0.0.20",
|
"@types/web-bluetooth": "^0.0.20",
|
||||||
"@vueuse/metadata": "12.0.0",
|
"@vueuse/metadata": "12.2.0",
|
||||||
"@vueuse/shared": "12.0.0",
|
"@vueuse/shared": "12.2.0",
|
||||||
"vue": "^3.5.13"
|
"vue": "^3.5.13"
|
||||||
},
|
},
|
||||||
"funding": {
|
"funding": {
|
||||||
@@ -1949,18 +1949,18 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vueuse/metadata": {
|
"node_modules/@vueuse/metadata": {
|
||||||
"version": "12.0.0",
|
"version": "12.2.0",
|
||||||
"resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-12.0.0.tgz",
|
"resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-12.2.0.tgz",
|
||||||
"integrity": "sha512-Yzimd1D3sjxTDOlF05HekU5aSGdKjxhuhRFHA7gDWLn57PRbBIh+SF5NmjhJ0WRgF3my7T8LBucyxdFJjIfRJQ==",
|
"integrity": "sha512-x6zynZtTh1l52m0y8d/EgzpshnMjg8cNZ2KWoncJ62Z5qPSGoc4FUunmMVrrRM/I/5542rTEY89CGftngZvrkQ==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://github.com/sponsors/antfu"
|
"url": "https://github.com/sponsors/antfu"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vueuse/shared": {
|
"node_modules/@vueuse/shared": {
|
||||||
"version": "12.0.0",
|
"version": "12.2.0",
|
||||||
"resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-12.0.0.tgz",
|
"resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-12.2.0.tgz",
|
||||||
"integrity": "sha512-3i6qtcq2PIio5i/vVYidkkcgvmTjCqrf26u+Fd4LhnbBmIT6FN8y6q/GJERp8lfcB9zVEfjdV0Br0443qZuJpw==",
|
"integrity": "sha512-SRr4AZwv/giS+EmyA1ZIzn3/iALjjnWAGaBNmoDTMEob9JwQaevAocuaMDnPAvU7Z35Y5g3CFRusCWgp1gVJ3Q==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"vue": "^3.5.13"
|
"vue": "^3.5.13"
|
||||||
@@ -2428,9 +2428,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/browserslist": {
|
"node_modules/browserslist": {
|
||||||
"version": "4.24.2",
|
"version": "4.24.3",
|
||||||
"resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.24.2.tgz",
|
"resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.24.3.tgz",
|
||||||
"integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==",
|
"integrity": "sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -2448,9 +2448,9 @@
|
|||||||
],
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"caniuse-lite": "^1.0.30001669",
|
"caniuse-lite": "^1.0.30001688",
|
||||||
"electron-to-chromium": "^1.5.41",
|
"electron-to-chromium": "^1.5.73",
|
||||||
"node-releases": "^2.0.18",
|
"node-releases": "^2.0.19",
|
||||||
"update-browserslist-db": "^1.1.1"
|
"update-browserslist-db": "^1.1.1"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
@@ -2507,9 +2507,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/caniuse-lite": {
|
"node_modules/caniuse-lite": {
|
||||||
"version": "1.0.30001684",
|
"version": "1.0.30001688",
|
||||||
"resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001684.tgz",
|
"resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001688.tgz",
|
||||||
"integrity": "sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==",
|
"integrity": "sha512-Nmqpru91cuABu/DTCXbM2NSRHzM2uVHfPnhJ/1zEAJx/ILBRVmz3pzH4N7DZqbdG0gWClsCC05Oj0mJ/1AWMbA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -2686,9 +2686,9 @@
|
|||||||
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
|
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
|
||||||
},
|
},
|
||||||
"node_modules/cross-spawn": {
|
"node_modules/cross-spawn": {
|
||||||
"version": "7.0.5",
|
"version": "7.0.6",
|
||||||
"resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.5.tgz",
|
"resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz",
|
||||||
"integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==",
|
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -2819,20 +2819,10 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/echarts": {
|
|
||||||
"version": "5.5.1",
|
|
||||||
"resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.5.1.tgz",
|
|
||||||
"integrity": "sha512-Fce8upazaAXUVUVsjgV6mBnGuqgO+JNDlcgF79Dksy4+wgGpQB2lmYoO4TSweFg/mZITdpGHomw/cNBJZj1icA==",
|
|
||||||
"license": "Apache-2.0",
|
|
||||||
"dependencies": {
|
|
||||||
"tslib": "2.3.0",
|
|
||||||
"zrender": "5.6.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/electron-to-chromium": {
|
"node_modules/electron-to-chromium": {
|
||||||
"version": "1.5.41",
|
"version": "1.5.73",
|
||||||
"resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.41.tgz",
|
"resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.73.tgz",
|
||||||
"integrity": "sha512-dfdv/2xNjX0P8Vzme4cfzHqnPm5xsZXwsolTYr0eyW18IUmNyG08vL+fttvinTfhKfIKdRoqkDIC9e9iWQCNYQ==",
|
"integrity": "sha512-8wGNxG9tAG5KhGd3eeA0o6ixhiNdgr0DcHWm85XPCphwZgD1lIEoi6t3VERayWao7SF7AAZTw6oARGJeVjH8Kg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "ISC"
|
"license": "ISC"
|
||||||
},
|
},
|
||||||
@@ -2963,9 +2953,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint": {
|
"node_modules/eslint": {
|
||||||
"version": "9.16.0",
|
"version": "9.17.0",
|
||||||
"resolved": "https://registry.npmmirror.com/eslint/-/eslint-9.16.0.tgz",
|
"resolved": "https://registry.npmmirror.com/eslint/-/eslint-9.17.0.tgz",
|
||||||
"integrity": "sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA==",
|
"integrity": "sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -2974,7 +2964,7 @@
|
|||||||
"@eslint/config-array": "^0.19.0",
|
"@eslint/config-array": "^0.19.0",
|
||||||
"@eslint/core": "^0.9.0",
|
"@eslint/core": "^0.9.0",
|
||||||
"@eslint/eslintrc": "^3.2.0",
|
"@eslint/eslintrc": "^3.2.0",
|
||||||
"@eslint/js": "9.16.0",
|
"@eslint/js": "9.17.0",
|
||||||
"@eslint/plugin-kit": "^0.2.3",
|
"@eslint/plugin-kit": "^0.2.3",
|
||||||
"@humanfs/node": "^0.16.6",
|
"@humanfs/node": "^0.16.6",
|
||||||
"@humanwhocodes/module-importer": "^1.0.1",
|
"@humanwhocodes/module-importer": "^1.0.1",
|
||||||
@@ -2983,7 +2973,7 @@
|
|||||||
"@types/json-schema": "^7.0.15",
|
"@types/json-schema": "^7.0.15",
|
||||||
"ajv": "^6.12.4",
|
"ajv": "^6.12.4",
|
||||||
"chalk": "^4.0.0",
|
"chalk": "^4.0.0",
|
||||||
"cross-spawn": "^7.0.5",
|
"cross-spawn": "^7.0.6",
|
||||||
"debug": "^4.3.2",
|
"debug": "^4.3.2",
|
||||||
"escape-string-regexp": "^4.0.0",
|
"escape-string-regexp": "^4.0.0",
|
||||||
"eslint-scope": "^8.2.0",
|
"eslint-scope": "^8.2.0",
|
||||||
@@ -4429,9 +4419,9 @@
|
|||||||
"peer": true
|
"peer": true
|
||||||
},
|
},
|
||||||
"node_modules/node-releases": {
|
"node_modules/node-releases": {
|
||||||
"version": "2.0.18",
|
"version": "2.0.19",
|
||||||
"resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.18.tgz",
|
"resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.19.tgz",
|
||||||
"integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==",
|
"integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
@@ -5476,9 +5466,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/tailwindcss": {
|
"node_modules/tailwindcss": {
|
||||||
"version": "3.4.16",
|
"version": "3.4.17",
|
||||||
"resolved": "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-3.4.16.tgz",
|
"resolved": "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-3.4.17.tgz",
|
||||||
"integrity": "sha512-TI4Cyx7gDiZ6r44ewaJmt0o6BrMCT5aK5e0rmJ/G9Xq3w7CX/5VXl/zIPEJZFUK5VEqwByyhqNPycPlvcK4ZNw==",
|
"integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -5631,9 +5621,9 @@
|
|||||||
"integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q=="
|
"integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q=="
|
||||||
},
|
},
|
||||||
"node_modules/tinymce": {
|
"node_modules/tinymce": {
|
||||||
"version": "7.5.1",
|
"version": "7.6.0",
|
||||||
"resolved": "https://registry.npmmirror.com/tinymce/-/tinymce-7.5.1.tgz",
|
"resolved": "https://registry.npmmirror.com/tinymce/-/tinymce-7.6.0.tgz",
|
||||||
"integrity": "sha512-GRXJUB0BEIOUHUEC+q9IjsgWGIAQ4Tn5t5hfpB/YR7No3oPgKHG03v1d3nbov9aqdyVW7Be+UD4I3ZerQG30VQ==",
|
"integrity": "sha512-kUrklnD7H8JbpSDEGRh51GKK6Mrf+pR9neSDzUHvXKV+2oRtMB7sqfAtEOnM0/WKdstwaX0qoNCZNo2H1Y0EFA==",
|
||||||
"license": "GPL-2.0-or-later"
|
"license": "GPL-2.0-or-later"
|
||||||
},
|
},
|
||||||
"node_modules/to-regex-range": {
|
"node_modules/to-regex-range": {
|
||||||
@@ -5659,7 +5649,8 @@
|
|||||||
"node_modules/tslib": {
|
"node_modules/tslib": {
|
||||||
"version": "2.3.0",
|
"version": "2.3.0",
|
||||||
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
|
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
|
||||||
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
|
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/type-check": {
|
"node_modules/type-check": {
|
||||||
"version": "0.4.0",
|
"version": "0.4.0",
|
||||||
@@ -5754,13 +5745,13 @@
|
|||||||
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
|
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
|
||||||
},
|
},
|
||||||
"node_modules/vite": {
|
"node_modules/vite": {
|
||||||
"version": "6.0.3",
|
"version": "6.0.5",
|
||||||
"resolved": "https://registry.npmmirror.com/vite/-/vite-6.0.3.tgz",
|
"resolved": "https://registry.npmmirror.com/vite/-/vite-6.0.5.tgz",
|
||||||
"integrity": "sha512-Cmuo5P0ENTN6HxLSo6IHsjCLn/81Vgrp81oaiFFMRa8gGDj5xEjIcEpf2ZymZtZR8oU0P2JX5WuUp/rlXcHkAw==",
|
"integrity": "sha512-akD5IAH/ID5imgue2DYhzsEwCi0/4VKY31uhMLEYJwPP4TiUp8pL5PIK+Wo7H8qT8JY9i+pVfPydcFPYD1EL7g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"esbuild": "^0.24.0",
|
"esbuild": "0.24.0",
|
||||||
"postcss": "^8.4.49",
|
"postcss": "^8.4.49",
|
||||||
"rollup": "^4.23.0"
|
"rollup": "^4.23.0"
|
||||||
},
|
},
|
||||||
@@ -5863,46 +5854,11 @@
|
|||||||
"vue": "^3.0.5"
|
"vue": "^3.0.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/vue-echarts": {
|
"node_modules/vue-data-ui": {
|
||||||
"version": "7.0.3",
|
"version": "2.4.50",
|
||||||
"resolved": "https://registry.npmmirror.com/vue-echarts/-/vue-echarts-7.0.3.tgz",
|
"resolved": "https://registry.npmmirror.com/vue-data-ui/-/vue-data-ui-2.4.50.tgz",
|
||||||
"integrity": "sha512-/jSxNwOsw5+dYAUcwSfkLwKPuzTQ0Cepz1LxCOpj2QcHrrmUa/Ql0eQqMmc1rTPQVrh2JQ29n2dhq75ZcHvRDw==",
|
"integrity": "sha512-6QMApKXfLIaaYCAsWIcWrfdoHb8yv12iEEzpeNmcN8+puXEL3MzFvBzwdkItdImCJ6b1sdlR6UDGUwmmwza9Pw==",
|
||||||
"license": "MIT",
|
"license": "MIT"
|
||||||
"dependencies": {
|
|
||||||
"vue-demi": "^0.13.11"
|
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"@vue/runtime-core": "^3.0.0",
|
|
||||||
"echarts": "^5.5.1",
|
|
||||||
"vue": "^2.7.0 || ^3.1.1"
|
|
||||||
},
|
|
||||||
"peerDependenciesMeta": {
|
|
||||||
"@vue/runtime-core": {
|
|
||||||
"optional": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/vue-echarts/node_modules/vue-demi": {
|
|
||||||
"version": "0.13.11",
|
|
||||||
"resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz",
|
|
||||||
"integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==",
|
|
||||||
"hasInstallScript": true,
|
|
||||||
"bin": {
|
|
||||||
"vue-demi-fix": "bin/vue-demi-fix.js",
|
|
||||||
"vue-demi-switch": "bin/vue-demi-switch.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=12"
|
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"@vue/composition-api": "^1.0.0-rc.1",
|
|
||||||
"vue": "^3.0.0-0 || ^2.6.0"
|
|
||||||
},
|
|
||||||
"peerDependenciesMeta": {
|
|
||||||
"@vue/composition-api": {
|
|
||||||
"optional": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"node_modules/vue-eslint-parser": {
|
"node_modules/vue-eslint-parser": {
|
||||||
"version": "9.4.3",
|
"version": "9.4.3",
|
||||||
@@ -6210,15 +6166,6 @@
|
|||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=10"
|
"node": ">=10"
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"node_modules/zrender": {
|
|
||||||
"version": "5.6.0",
|
|
||||||
"resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.0.tgz",
|
|
||||||
"integrity": "sha512-uzgraf4njmmHAbEUxMJ8Oxg+P3fT04O+9p7gY+wJRVxo8Ge+KmYv0WJev945EH4wFuc4OY2NLXz46FZrWS9xJg==",
|
|
||||||
"license": "BSD-3-Clause",
|
|
||||||
"dependencies": {
|
|
||||||
"tslib": "2.3.0"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "cdtmp",
|
"name": "cdtmp",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.3",
|
"version": "0.0.4",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
@@ -13,12 +13,11 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@arco-design/color": "^0.4.0",
|
"@arco-design/color": "^0.4.0",
|
||||||
"@arco-design/web-vue": "^2.56.3",
|
"@arco-design/web-vue": "^2.56.3",
|
||||||
"@tanstack/vue-query": "^5.62.2",
|
"@tanstack/vue-query": "^5.62.9",
|
||||||
"@tinymce/tinymce-vue": "^6.1.0",
|
"@tinymce/tinymce-vue": "^6.1.0",
|
||||||
"@vueuse/core": "^12.0.0",
|
"@vueuse/core": "^12.2.0",
|
||||||
"axios": "^1.7.9",
|
"axios": "^1.7.9",
|
||||||
"dayjs": "^1.11.13",
|
"dayjs": "^1.11.13",
|
||||||
"echarts": "^5.5.1",
|
|
||||||
"file2md5": "^1.3.0",
|
"file2md5": "^1.3.0",
|
||||||
"lodash-es": "^4.17.21",
|
"lodash-es": "^4.17.21",
|
||||||
"mammoth": "^1.8.0",
|
"mammoth": "^1.8.0",
|
||||||
@@ -28,33 +27,33 @@
|
|||||||
"pinyin-match": "^1.2.6",
|
"pinyin-match": "^1.2.6",
|
||||||
"postcss-import": "^16.1.0",
|
"postcss-import": "^16.1.0",
|
||||||
"qs": "^6.13.1",
|
"qs": "^6.13.1",
|
||||||
"tinymce": "^7.5.1",
|
"tinymce": "^7.6.0",
|
||||||
"vue": "^3.5.13",
|
"vue": "^3.5.13",
|
||||||
"vue-clipboard3": "^2.0.0",
|
"vue-clipboard3": "^2.0.0",
|
||||||
"vue-color-kit": "^1.0.6",
|
"vue-color-kit": "^1.0.6",
|
||||||
"vue-echarts": "^7.0.3",
|
"vue-data-ui": "^2.4.50",
|
||||||
"vue-router": "^4.5.0",
|
"vue-router": "^4.5.0",
|
||||||
"vuedraggable": "^2.24.3"
|
"vuedraggable": "^2.24.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/lodash-es": "^4.17.12",
|
"@types/lodash-es": "^4.17.12",
|
||||||
"@types/node": "^22.10.1",
|
"@types/node": "^22.10.2",
|
||||||
"@types/nprogress": "^0.2.3",
|
"@types/nprogress": "^0.2.3",
|
||||||
"@types/qs": "^6.9.17",
|
"@types/qs": "^6.9.17",
|
||||||
"@vitejs/plugin-vue": "^5.2.1",
|
"@vitejs/plugin-vue": "^5.2.1",
|
||||||
"@vitejs/plugin-vue-jsx": "^4.1.1",
|
"@vitejs/plugin-vue-jsx": "^4.1.1",
|
||||||
"@vue/babel-plugin-jsx": "^1.2.5",
|
"@vue/babel-plugin-jsx": "^1.2.5",
|
||||||
"autoprefixer": "^10.4.20",
|
"autoprefixer": "^10.4.20",
|
||||||
"browserslist": "^4.24.2",
|
"browserslist": "^4.24.3",
|
||||||
"eslint": "^9.16.0",
|
"eslint": "^9.17.0",
|
||||||
"eslint-plugin-vue": "^9.32.0",
|
"eslint-plugin-vue": "^9.32.0",
|
||||||
"less": "^4.2.1",
|
"less": "^4.2.1",
|
||||||
"less-loader": "^12.2.0",
|
"less-loader": "^12.2.0",
|
||||||
"postcss": "^8.4.49",
|
"postcss": "^8.4.49",
|
||||||
"prettier": "^3.4.2",
|
"prettier": "^3.4.2",
|
||||||
"rollup-plugin-visualizer": "^5.12.0",
|
"rollup-plugin-visualizer": "^5.12.0",
|
||||||
"tailwindcss": "^3.4.16",
|
"tailwindcss": "^3.4.17",
|
||||||
"typescript": "^5.7.2",
|
"typescript": "^5.7.2",
|
||||||
"vite": "^6.0.3"
|
"vite": "^6.0.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -200,11 +200,22 @@ export default {
|
|||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @returns 生成测评大纲-测试总体要求
|
* @returns 生成测评大纲-测试级别和测试类型
|
||||||
*/
|
*/
|
||||||
createRequirement(params = {}) {
|
createLevelAndType(params = {}) {
|
||||||
return request({
|
return request({
|
||||||
url: `/generate/create/requirement`,
|
url: `/generate/create/levelAndType`,
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @returns 生成测评大纲-测试策略
|
||||||
|
*/
|
||||||
|
createStrategy(params = {}) {
|
||||||
|
return request({
|
||||||
|
url: `/generate/create/strategy`,
|
||||||
method: "get",
|
method: "get",
|
||||||
params
|
params
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -12,6 +12,17 @@ export default {
|
|||||||
params
|
params
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
/**
|
||||||
|
* 根据项目id、round信息,请求dut
|
||||||
|
* @returns dut数据
|
||||||
|
*/
|
||||||
|
getDutOne(params = {}) {
|
||||||
|
return request({
|
||||||
|
url: `/project/getDutOne`,
|
||||||
|
method: "get",
|
||||||
|
params
|
||||||
|
})
|
||||||
|
},
|
||||||
/**
|
/**
|
||||||
* 添加被测件
|
* 添加被测件
|
||||||
* @returns
|
* @returns
|
||||||
|
|||||||
@@ -1,21 +1,7 @@
|
|||||||
/**
|
|
||||||
* 所属产品文档名称的enum
|
|
||||||
*/
|
|
||||||
export enum FragBelongDoc {
|
|
||||||
dg = "大纲",
|
|
||||||
sm = "说明",
|
|
||||||
jl = "记录",
|
|
||||||
hsm = "回归说明",
|
|
||||||
hjl = "回归记录",
|
|
||||||
bg = "报告",
|
|
||||||
wtd = "问题单"
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 接口:文档片段查询条件
|
* 接口:文档片段查询条件
|
||||||
*/
|
*/
|
||||||
export interface IFragSearchCondition {
|
export interface IFragSearchCondition {
|
||||||
belongDocName?: FragBelongDoc
|
|
||||||
name?: string
|
name?: string
|
||||||
is_main?: boolean
|
is_main?: boolean
|
||||||
projectId?: string
|
projectId?: string
|
||||||
|
|||||||
1
cdTMP/src/assets/img/ErrorLoad.svg
Normal file
1
cdTMP/src/assets/img/ErrorLoad.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 20 KiB |
@@ -1,17 +1,5 @@
|
|||||||
import { use } from "echarts/core"
|
|
||||||
import { CanvasRenderer } from "echarts/renderers"
|
|
||||||
import { BarChart, LineChart, PieChart, RadarChart, GaugeChart } from "echarts/charts"
|
|
||||||
import {
|
|
||||||
GridComponent,
|
|
||||||
TooltipComponent,
|
|
||||||
LegendComponent,
|
|
||||||
DataZoomComponent,
|
|
||||||
GraphicComponent
|
|
||||||
} from "echarts/components"
|
|
||||||
|
|
||||||
import MaCrud from "./ma-crud/index.vue"
|
import MaCrud from "./ma-crud/index.vue"
|
||||||
import MaForm from "./ma-form/index.vue"
|
import MaForm from "./ma-form/index.vue"
|
||||||
import MaChart from "./ma-charts/index.vue"
|
|
||||||
import MaUpload from "./ma-upload/index.vue"
|
import MaUpload from "./ma-upload/index.vue"
|
||||||
import MaTreeSlider from "./ma-treeSlider/index.vue"
|
import MaTreeSlider from "./ma-treeSlider/index.vue"
|
||||||
import MaResource from "./ma-resource/index.vue"
|
import MaResource from "./ma-resource/index.vue"
|
||||||
@@ -20,27 +8,11 @@ import MaUser from "./ma-user/index.vue"
|
|||||||
import MaEditor from "./ma-editor/index.vue"
|
import MaEditor from "./ma-editor/index.vue"
|
||||||
import MaIcon from "./ma-icon/index.vue"
|
import MaIcon from "./ma-icon/index.vue"
|
||||||
import MaUserInfo from "./ma-userInfo/index.vue"
|
import MaUserInfo from "./ma-userInfo/index.vue"
|
||||||
import "echarts/dist/echarts.esm.min.mjs"
|
|
||||||
// 后续增加的全局组件
|
// 后续增加的全局组件
|
||||||
import Empty from "./Empty/index.vue"
|
import Empty from "./Empty/index.vue"
|
||||||
|
|
||||||
use([
|
|
||||||
CanvasRenderer,
|
|
||||||
BarChart,
|
|
||||||
LineChart,
|
|
||||||
PieChart,
|
|
||||||
RadarChart,
|
|
||||||
GaugeChart,
|
|
||||||
GridComponent,
|
|
||||||
TooltipComponent,
|
|
||||||
LegendComponent,
|
|
||||||
DataZoomComponent,
|
|
||||||
GraphicComponent
|
|
||||||
])
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
install(Vue) {
|
install(Vue) {
|
||||||
Vue.component("MaChart", MaChart)
|
|
||||||
Vue.component("MaCrud", MaCrud)
|
Vue.component("MaCrud", MaCrud)
|
||||||
Vue.component("MaForm", MaForm)
|
Vue.component("MaForm", MaForm)
|
||||||
Vue.component("MaUpload", MaUpload)
|
Vue.component("MaUpload", MaUpload)
|
||||||
|
|||||||
@@ -1,48 +0,0 @@
|
|||||||
<!--
|
|
||||||
- @Author XXX
|
|
||||||
- @Link XXX
|
|
||||||
-->
|
|
||||||
<template>
|
|
||||||
<v-charts v-if="renderChart" :option="options" :autoresize="autoresize" :style="{ width, height }" />
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup>
|
|
||||||
import { ref, computed, nextTick } from "vue"
|
|
||||||
import VCharts from "vue-echarts"
|
|
||||||
import { useAppStore } from "@/store"
|
|
||||||
|
|
||||||
const props = defineProps({
|
|
||||||
options: {
|
|
||||||
type: Object,
|
|
||||||
default() {
|
|
||||||
return {}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
autoresize: {
|
|
||||||
type: Boolean,
|
|
||||||
default: true
|
|
||||||
},
|
|
||||||
width: {
|
|
||||||
type: String,
|
|
||||||
default: "100%"
|
|
||||||
},
|
|
||||||
height: {
|
|
||||||
type: String,
|
|
||||||
default: "100%"
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
const appStore = useAppStore()
|
|
||||||
|
|
||||||
let mode = computed(() => {
|
|
||||||
return appStore.mode === "dark" ? "dark" : "auto"
|
|
||||||
})
|
|
||||||
|
|
||||||
const renderChart = ref(false)
|
|
||||||
|
|
||||||
nextTick(() => {
|
|
||||||
renderChart.value = true
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped lang="less"></style>
|
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
>
|
>
|
||||||
测试管理平台
|
测试管理平台
|
||||||
</a-typography-title>
|
</a-typography-title>
|
||||||
<a-typography-title :heading="6" class="version">V0.0.3</a-typography-title>
|
<a-typography-title :heading="6" class="version">V0.0.4</a-typography-title>
|
||||||
<icon-menu-fold
|
<icon-menu-fold
|
||||||
v-if="!topMenu && appStore.device === 'mobile'"
|
v-if="!topMenu && appStore.device === 'mobile'"
|
||||||
style="font-size: 22px; cursor: pointer"
|
style="font-size: 22px; cursor: pointer"
|
||||||
|
|||||||
@@ -20,14 +20,13 @@ import Empty from "@/components/Empty/index.vue"
|
|||||||
// 获取缓存列表
|
// 获取缓存列表
|
||||||
const tabBarStore = useTabBarStore()
|
const tabBarStore = useTabBarStore()
|
||||||
const cacheList = computed(() => tabBarStore.getCacheList)
|
const cacheList = computed(() => tabBarStore.getCacheList)
|
||||||
// 调用router-view组件的刷新方法
|
// 调用router-view组件的刷新方法 - 并暴露给子节点
|
||||||
const viewChildRef = ref()
|
const viewChildRef = ref(null)
|
||||||
const refresh = () => {
|
const refresh = () => {
|
||||||
try {
|
try {
|
||||||
viewChildRef.value.refreshCrudTable()
|
viewChildRef.value.refreshCrudTable()
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log("无法找到router-view动态组件的刷新函数")
|
console.log("无法找到router-view动态组件的刷新函数")
|
||||||
} finally {
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
defineExpose({ refresh })
|
defineExpose({ refresh })
|
||||||
|
|||||||
@@ -231,6 +231,8 @@
|
|||||||
></roundRight>
|
></roundRight>
|
||||||
<!-- w2:轮次的问题单ma-crud,这里要传参2个,首先是请求另外一个接口,然后取消是否关联字段 -->
|
<!-- w2:轮次的问题单ma-crud,这里要传参2个,首先是请求另外一个接口,然后取消是否关联字段 -->
|
||||||
<problem-choose ref="problemRoundRef" hasRelated="roundProblem" :title="problemTitle"></problem-choose>
|
<problem-choose ref="problemRoundRef" hasRelated="roundProblem" :title="problemTitle"></problem-choose>
|
||||||
|
<!-- 下面都是对应被测件、设计需求、测试项、测试用例、问题单的SubForm -->
|
||||||
|
<DutSubForm ref="dutSubFormRef"></DutSubForm>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
@@ -246,6 +248,8 @@ import { useRoute } from "vue-router"
|
|||||||
import { useTreeDataStore } from "@/store"
|
import { useTreeDataStore } from "@/store"
|
||||||
import { storeToRefs } from "pinia"
|
import { storeToRefs } from "pinia"
|
||||||
import Progress from "@/views/testmanage/projmanage/cpns/progress.vue"
|
import Progress from "@/views/testmanage/projmanage/cpns/progress.vue"
|
||||||
|
// 导入单独节点类型单独对应的Modal组件
|
||||||
|
import DutSubForm from "@/views/project/round/DutSubForm"
|
||||||
// hooks模块化
|
// hooks模块化
|
||||||
import useTreeDrag from "@/layout/treeHooks/treeDrag.js"
|
import useTreeDrag from "@/layout/treeHooks/treeDrag.js"
|
||||||
import { useRightClick } from "./treeHooks/rightClick"
|
import { useRightClick } from "./treeHooks/rightClick"
|
||||||
@@ -258,6 +262,7 @@ import useLoadTreeNode from "./treeHooks/useLoadTreeNodes"
|
|||||||
import useRoundMaForm from "./treeHooks/useRoundMaForm"
|
import useRoundMaForm from "./treeHooks/useRoundMaForm"
|
||||||
// router-view里面组件的ref -> 多个hook使用
|
// router-view里面组件的ref -> 多个hook使用
|
||||||
const routeViewRef = ref()
|
const routeViewRef = ref()
|
||||||
|
provide("rightViewRef", routeViewRef)
|
||||||
const treeDataStore = useTreeDataStore()
|
const treeDataStore = useTreeDataStore()
|
||||||
const { treeData, currentNode } = storeToRefs(treeDataStore)
|
const { treeData, currentNode } = storeToRefs(treeDataStore)
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -291,7 +296,7 @@ const {
|
|||||||
const { expandedKeys, toggleExpanded } = useNodeExpand()
|
const { expandedKeys, toggleExpanded } = useNodeExpand()
|
||||||
|
|
||||||
//~~~~~~大功能:单击/双击节点逻辑~~~~~~
|
//~~~~~~大功能:单击/双击节点逻辑~~~~~~
|
||||||
const { selectedKeys, pointNode } = useNodeClick(expandedKeys)
|
const { selectedKeys, pointNode, dutSubFormRef } = useNodeClick(expandedKeys)
|
||||||
|
|
||||||
//~~~~~~大功能:动态加载a-tree节点函数~~~~~~
|
//~~~~~~大功能:动态加载a-tree节点函数~~~~~~
|
||||||
const { loadMore } = useLoadTreeNode()
|
const { loadMore } = useLoadTreeNode()
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ export default function useTreeDrag(projectId, routeViewRef) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// a-tree是否运行拖拽
|
// a-tree是否允许拖拽节点
|
||||||
const allowdrop = (options) => {
|
const allowdrop = (options) => {
|
||||||
if (options.dropNode.level === "4" || options.dropNode.level === "3") {
|
if (options.dropNode.level === "4" || options.dropNode.level === "3") {
|
||||||
return true
|
return true
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ export default function useLoadTreeNode() {
|
|||||||
// global
|
// global
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const projectInfo = ref({ ...route.query })
|
const projectInfo = ref({ ...route.query })
|
||||||
|
|
||||||
// Events
|
// Events
|
||||||
const loadMore = (nodeData) => {
|
const loadMore = (nodeData) => {
|
||||||
if (nodeData.level == "0") {
|
if (nodeData.level == "0") {
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import { useRoute } from "vue-router"
|
|||||||
import { useTreeDataStore } from "@/store"
|
import { useTreeDataStore } from "@/store"
|
||||||
import { storeToRefs } from "pinia"
|
import { storeToRefs } from "pinia"
|
||||||
import { useRouter } from "vue-router"
|
import { useRouter } from "vue-router"
|
||||||
|
// 导入组件用于类型
|
||||||
|
import type { DutSubFormInstance } from "@/views/project/round/DutSubForm"
|
||||||
export default function useNodeClick(expandedKeys: Ref<string[]>) {
|
export default function useNodeClick(expandedKeys: Ref<string[]>) {
|
||||||
// global
|
// global
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -17,8 +19,10 @@ export default function useNodeClick(expandedKeys: Ref<string[]>) {
|
|||||||
// refs
|
// refs
|
||||||
const selectedKeys = ref<any>([]) // 中间变量用于判断
|
const selectedKeys = ref<any>([]) // 中间变量用于判断
|
||||||
const previousKey = ref<any>() // 上一次点击
|
const previousKey = ref<any>() // 上一次点击
|
||||||
// 点击事件
|
// SubFormRefs
|
||||||
const pointNode = (value, data) => {
|
const dutSubFormRef = ref<DutSubFormInstance | null>(null)
|
||||||
|
// 点击节点事件
|
||||||
|
const pointNode = (value: any, data: any) => {
|
||||||
// 获取处理单击不选中,双击选中的变量
|
// 获取处理单击不选中,双击选中的变量
|
||||||
let catch_selected_key = selectedKeys.value
|
let catch_selected_key = selectedKeys.value
|
||||||
selectedKeys.value = previousKey.value
|
selectedKeys.value = previousKey.value
|
||||||
@@ -39,28 +43,12 @@ export default function useNodeClick(expandedKeys: Ref<string[]>) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
if (data.node.level == "1") {
|
if (data.node.level == "1") {
|
||||||
projectApi.getDemandInfo(projectInfo.value.id, data.node.key, data.node.level).then((res) => {
|
// 打开弹窗
|
||||||
data.node.children = res.data
|
dutSubFormRef.value!.open(data.node)
|
||||||
if (!expandedKeys.value.includes(value[0])) {
|
|
||||||
expandedKeys.value.push(value[0])
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
if (data.node.level == "2") {
|
if (data.node.level == "2") {
|
||||||
projectApi.getTestInfo(projectInfo.value.id, data.node.key, data.node.level).then((res) => {
|
|
||||||
data.node.children = res.data
|
|
||||||
if (!expandedKeys.value.includes(value[0])) {
|
|
||||||
expandedKeys.value.push(value[0])
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
if (data.node.level == "3") {
|
if (data.node.level == "3") {
|
||||||
projectApi.getCaseInfo(projectInfo.value.id, data.node.key, data.node.level).then((res) => {
|
|
||||||
data.node.children = res.data
|
|
||||||
if (!expandedKeys.value.includes(value[0])) {
|
|
||||||
expandedKeys.value.push(value[0])
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
count = 0
|
count = 0
|
||||||
if (timerId) clearTimeout(timerId)
|
if (timerId) clearTimeout(timerId)
|
||||||
@@ -98,6 +86,7 @@ export default function useNodeClick(expandedKeys: Ref<string[]>) {
|
|||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
selectedKeys,
|
selectedKeys,
|
||||||
pointNode
|
pointNode,
|
||||||
|
dutSubFormRef
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,18 +5,19 @@ import globalComponents from "@/components"
|
|||||||
import App from "./App.vue"
|
import App from "./App.vue"
|
||||||
import router from "./router"
|
import router from "./router"
|
||||||
import pinia from "@/store"
|
import pinia from "@/store"
|
||||||
// arcodesign的样式全局引入
|
|
||||||
import "@arco-design/web-vue/dist/arco.css"
|
|
||||||
|
|
||||||
// 导入全局样式
|
// 导入全局样式
|
||||||
import "@/style/skin.less"
|
import "@/style/skin.less"
|
||||||
import "@/style/index.css"
|
import "@/style/index.css"
|
||||||
import "@/style/global.less"
|
import "@/style/global.less"
|
||||||
|
// 导入vue-data-ui样式
|
||||||
|
import "vue-data-ui/style.css"
|
||||||
|
|
||||||
// 读取package.json打印个软件名称和版本
|
// 读取package.json打印个软件名称和版本
|
||||||
import tool from "@/utils/tool"
|
import tool from "@/utils/tool"
|
||||||
import packageJson from "../package.json"
|
import packageJson from "../package.json"
|
||||||
// 启动app之前
|
|
||||||
|
// Before App Started
|
||||||
const app = createApp(App)
|
const app = createApp(App)
|
||||||
app.use(ArcoVue, {})
|
app.use(ArcoVue, {})
|
||||||
app.use(ArcoVueIcon)
|
app.use(ArcoVueIcon)
|
||||||
@@ -29,7 +30,7 @@ app.use(VueQueryPlugin)
|
|||||||
import directives from "@/directives"
|
import directives from "@/directives"
|
||||||
app.use(directives)
|
app.use(directives)
|
||||||
|
|
||||||
// 注册ma-icon图标
|
// 注册ma图标
|
||||||
const modules = import.meta.glob("./assets/ma-icons/*.vue", { eager: true })
|
const modules = import.meta.glob("./assets/ma-icons/*.vue", { eager: true })
|
||||||
for (const path in modules) {
|
for (const path in modules) {
|
||||||
const name = path.match(/([A-Za-z0-9_-]+)/g)![2]
|
const name = path.match(/([A-Za-z0-9_-]+)/g)![2]
|
||||||
@@ -43,5 +44,5 @@ app.config.globalProperties.$title = import.meta.env.VITE_APP_TITLE
|
|||||||
app.config.globalProperties.$url = import.meta.env.VITE_APP_BASE
|
app.config.globalProperties.$url = import.meta.env.VITE_APP_BASE
|
||||||
app.mount("#app")
|
app.mount("#app")
|
||||||
|
|
||||||
// 无用的东西:下面就打印一个东西
|
// show version tag in console
|
||||||
tool.capsule("TestManagePlant", `v${packageJson.version} debug`)
|
tool.capsule("TestManagePlant", `v${packageJson.version} debug`)
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ const useTreeDataStore = defineStore("treeDataStore", {
|
|||||||
temp.pop(-1)
|
temp.pop(-1)
|
||||||
let roundKey = temp[0]
|
let roundKey = temp[0]
|
||||||
const nodeKey = temp.join("-")
|
const nodeKey = temp.join("-")
|
||||||
const res = await projectApi.getDutInfo(projrctId, nodeKey, "0")
|
const res = await projectApi.getDutInfo(projrctId, nodeKey, "0") // nodeKey:'0'
|
||||||
this.treeData[roundKey].children = res.data
|
this.treeData[roundKey].children = res.data
|
||||||
},
|
},
|
||||||
// 新增删除designDemand后tree显示-注意传的是测试项的key
|
// 新增删除designDemand后tree显示-注意传的是测试项的key
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
|
// 先导入arco的样式-里面有变量
|
||||||
|
@import "@arco-design/web-vue/dist/arco.css";
|
||||||
@import "dark.less";
|
@import "dark.less";
|
||||||
@import "animation.less";
|
@import "animation.less";
|
||||||
// 导入自己的样式覆盖
|
// 导入自己的样式覆盖原有的变量
|
||||||
@import "warp.less";
|
@import "warp.less";
|
||||||
|
|
||||||
|
|
||||||
@@ -8,6 +10,7 @@ html,
|
|||||||
body {
|
body {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.arco-layout-sider-children {
|
.arco-layout-sider-children {
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
}
|
}
|
||||||
@@ -15,6 +18,7 @@ body {
|
|||||||
.arco-switch {
|
.arco-switch {
|
||||||
background-color: var(--color-fill-4);
|
background-color: var(--color-fill-4);
|
||||||
}
|
}
|
||||||
|
|
||||||
.arco-switch-checked {
|
.arco-switch-checked {
|
||||||
background-color: rgb(var(--primary-6));
|
background-color: rgb(var(--primary-6));
|
||||||
}
|
}
|
||||||
@@ -51,6 +55,7 @@ body {
|
|||||||
.layout-columns-right-panel {
|
.layout-columns-right-panel {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
background-color: var(--color-neutral-2);
|
background-color: var(--color-neutral-2);
|
||||||
|
|
||||||
.layout-header {
|
.layout-header {
|
||||||
background-color: var(--color-bg-2);
|
background-color: var(--color-bg-2);
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@@ -62,6 +67,7 @@ body {
|
|||||||
height: 52px;
|
height: 52px;
|
||||||
border-bottom: 1px solid var(--color-border-1);
|
border-bottom: 1px solid var(--color-border-1);
|
||||||
background-color: var(--color-bg-2);
|
background-color: var(--color-bg-2);
|
||||||
|
|
||||||
.logo {
|
.logo {
|
||||||
width: 220px;
|
width: 220px;
|
||||||
padding-bottom: 1px;
|
padding-bottom: 1px;
|
||||||
@@ -87,12 +93,14 @@ body {
|
|||||||
.banner-menus li:hover {
|
.banner-menus li:hover {
|
||||||
background-color: var(--color-neutral-2);
|
background-color: var(--color-neutral-2);
|
||||||
}
|
}
|
||||||
|
|
||||||
.banner-menus li.active {
|
.banner-menus li.active {
|
||||||
background-color: rgb(var(--primary-4));
|
background-color: rgb(var(--primary-4));
|
||||||
color: var(--color-white);
|
color: var(--color-white);
|
||||||
fill: var(--color-white);
|
fill: var(--color-white);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.layout-banner-content {
|
.layout-banner-content {
|
||||||
.tags {
|
.tags {
|
||||||
border-top: 0;
|
border-top: 0;
|
||||||
@@ -102,6 +110,7 @@ body {
|
|||||||
.layout-classic-sider {
|
.layout-classic-sider {
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.layout-classic-header {
|
.layout-classic-header {
|
||||||
.layout-classic-header-container {
|
.layout-classic-header-container {
|
||||||
background-color: var(--color-bg-2);
|
background-color: var(--color-bg-2);
|
||||||
@@ -113,7 +122,8 @@ body {
|
|||||||
.backend-setting .arco-drawer-body::-webkit-scrollbar,
|
.backend-setting .arco-drawer-body::-webkit-scrollbar,
|
||||||
.arco-list::-webkit-scrollbar,
|
.arco-list::-webkit-scrollbar,
|
||||||
.customer-scrollbar::-webkit-scrollbar {
|
.customer-scrollbar::-webkit-scrollbar {
|
||||||
width: 6px; /*高宽分别对应横竖滚动条的尺寸*/
|
width: 6px;
|
||||||
|
/*高宽分别对应横竖滚动条的尺寸*/
|
||||||
height: 7px;
|
height: 7px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -124,6 +134,7 @@ body {
|
|||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
background: var(--color-text-4);
|
background: var(--color-text-4);
|
||||||
}
|
}
|
||||||
|
|
||||||
.ma-menu .arco-menu-inner::-webkit-scrollbar-thumb:hover,
|
.ma-menu .arco-menu-inner::-webkit-scrollbar-thumb:hover,
|
||||||
.backend-setting .arco-drawer-body::-webkit-scrollbar-thumb:hover,
|
.backend-setting .arco-drawer-body::-webkit-scrollbar-thumb:hover,
|
||||||
.arco-list::-webkit-scrollbar-thumb:hover,
|
.arco-list::-webkit-scrollbar-thumb:hover,
|
||||||
@@ -131,6 +142,7 @@ body {
|
|||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
background: var(--color-text-3);
|
background: var(--color-text-3);
|
||||||
}
|
}
|
||||||
|
|
||||||
.ma-menu .arco-menu-inner::-webkit-scrollbar-track,
|
.ma-menu .arco-menu-inner::-webkit-scrollbar-track,
|
||||||
.backend-setting .arco-drawer-body::-webkit-scrollbar-track,
|
.backend-setting .arco-drawer-body::-webkit-scrollbar-track,
|
||||||
.arco-list::-webkit-scrollbar-track,
|
.arco-list::-webkit-scrollbar-track,
|
||||||
@@ -142,6 +154,7 @@ body {
|
|||||||
.tags-container {
|
.tags-container {
|
||||||
background-color: var(--color-bg-2);
|
background-color: var(--color-bg-2);
|
||||||
border-top: 1px solid var(--color-border-1);
|
border-top: 1px solid var(--color-border-1);
|
||||||
|
|
||||||
.tags {
|
.tags {
|
||||||
border-bottom: 1px solid var(--color-border-1);
|
border-bottom: 1px solid var(--color-border-1);
|
||||||
background-color: var(--color-bg-2);
|
background-color: var(--color-bg-2);
|
||||||
@@ -151,6 +164,7 @@ body {
|
|||||||
display: flex;
|
display: flex;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
||||||
a {
|
a {
|
||||||
background: var(--color-fill-3);
|
background: var(--color-fill-3);
|
||||||
color: var(--color-text-2);
|
color: var(--color-text-2);
|
||||||
@@ -185,9 +199,11 @@ body {
|
|||||||
a.active {
|
a.active {
|
||||||
background: rgb(var(--primary-6));
|
background: rgb(var(--primary-6));
|
||||||
color: var(--color-white);
|
color: var(--color-white);
|
||||||
|
|
||||||
.tag-icon {
|
.tag-icon {
|
||||||
color: var(--color-white);
|
color: var(--color-white);
|
||||||
}
|
}
|
||||||
|
|
||||||
.tag-icon:hover {
|
.tag-icon:hover {
|
||||||
color: rgb(var(--primary-4));
|
color: rgb(var(--primary-4));
|
||||||
background-color: var(--color-bg-2);
|
background-color: var(--color-bg-2);
|
||||||
@@ -217,10 +233,12 @@ body {
|
|||||||
color: var(--color-text-2);
|
color: var(--color-text-2);
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
}
|
}
|
||||||
|
|
||||||
li:hover {
|
li:hover {
|
||||||
background-color: rgb(var(--primary-1));
|
background-color: rgb(var(--primary-1));
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
li.disabled {
|
li.disabled {
|
||||||
color: var(--color-text-4);
|
color: var(--color-text-4);
|
||||||
cursor: no-drop;
|
cursor: no-drop;
|
||||||
@@ -233,6 +251,7 @@ body {
|
|||||||
color: var(--color-text-2);
|
color: var(--color-text-2);
|
||||||
height: 100%;
|
height: 100%;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
|
||||||
.content-block-title {
|
.content-block-title {
|
||||||
color: var(--color-text-1);
|
color: var(--color-text-1);
|
||||||
font-size: 1.3em;
|
font-size: 1.3em;
|
||||||
@@ -249,6 +268,7 @@ body {
|
|||||||
bottom: 30px;
|
bottom: 30px;
|
||||||
left: 20px;
|
left: 20px;
|
||||||
z-index: 100;
|
z-index: 100;
|
||||||
|
|
||||||
.button-trigger {
|
.button-trigger {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@@ -260,13 +280,16 @@ body {
|
|||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
transition: all 0.1s;
|
transition: all 0.1s;
|
||||||
|
|
||||||
:deep(.icon) {
|
:deep(.icon) {
|
||||||
margin-left: 1px !important;
|
margin-left: 1px !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.button-trigger:nth-child(1) {
|
.button-trigger:nth-child(1) {
|
||||||
background-color: var(--color-primary-light-4);
|
background-color: var(--color-primary-light-4);
|
||||||
}
|
}
|
||||||
|
|
||||||
.button-trigger:nth-child(1).button-trigger-active {
|
.button-trigger:nth-child(1).button-trigger-active {
|
||||||
background-color: rgb(var(--primary-6));
|
background-color: rgb(var(--primary-6));
|
||||||
}
|
}
|
||||||
@@ -276,6 +299,7 @@ body {
|
|||||||
.max-size-exit {
|
.max-size-exit {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ma-ui-slider,
|
.ma-ui-slider,
|
||||||
.ma-ui-header,
|
.ma-ui-header,
|
||||||
.ma-ui-menu,
|
.ma-ui-menu,
|
||||||
@@ -303,6 +327,7 @@ body {
|
|||||||
background: rgba(0, 0, 0, 0.2);
|
background: rgba(0, 0, 0, 0.2);
|
||||||
transition: all 0.3s;
|
transition: all 0.3s;
|
||||||
}
|
}
|
||||||
|
|
||||||
.max-size-exit:hover {
|
.max-size-exit:hover {
|
||||||
top: 0px;
|
top: 0px;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,3 +5,11 @@
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 覆盖arco的圆角设置,原来设置是0、2px、4px、6px
|
||||||
|
body {
|
||||||
|
--border-radius-none: 0;
|
||||||
|
--border-radius-small: 0px;
|
||||||
|
--border-radius-medium: 0px;
|
||||||
|
--border-radius-large: 0px;
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
/**
|
|
||||||
* 文档片段所属的enum
|
|
||||||
*/
|
|
||||||
export enum ProductFileEnum {
|
|
||||||
dg = "测评大纲",
|
|
||||||
sm = "测试说明",
|
|
||||||
jl = "测试记录",
|
|
||||||
hsm = "回归说明",
|
|
||||||
hjl = "回归记录",
|
|
||||||
bg = "测评报告",
|
|
||||||
wtd = "问题单"
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 常规tag颜色
|
|
||||||
*/
|
|
||||||
export enum TagColorEnum {
|
|
||||||
normal = "green",
|
|
||||||
warn = "orange",
|
|
||||||
sub = "magenta"
|
|
||||||
}
|
|
||||||
@@ -60,4 +60,16 @@ tool.local = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 辅助函数,删除旧属性,生成新属性 crudColumn -> formColumn
|
||||||
|
*/
|
||||||
|
const renameKeyInArray = (arr, oldKey, newKey) => {
|
||||||
|
return arr.map((obj) => {
|
||||||
|
let { [oldKey]: value, ...rest } = obj
|
||||||
|
return { ...rest, [newKey]: value }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
tool.renameKeyInArray = renameKeyInArray
|
||||||
|
|
||||||
export default tool
|
export default tool
|
||||||
|
|||||||
@@ -0,0 +1,177 @@
|
|||||||
|
import { Ref, ref, watch, computed } from "vue"
|
||||||
|
import { VueUiXyConfig, VueUiXyDatasetItem } from "vue-data-ui"
|
||||||
|
|
||||||
|
// 单个每月项目数量对象格式
|
||||||
|
interface IData {
|
||||||
|
mouth: string
|
||||||
|
count: number
|
||||||
|
}
|
||||||
|
// 响应.data的数据格式
|
||||||
|
interface ResData {
|
||||||
|
data: IData[]
|
||||||
|
}
|
||||||
|
|
||||||
|
function useVueDataUI(data: Ref<ResData>) {
|
||||||
|
const initialData = [
|
||||||
|
{
|
||||||
|
name: "项目数量",
|
||||||
|
series: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||||
|
type: "line",
|
||||||
|
color: "rgb(95,139,238)",
|
||||||
|
scaleSteps: 10,
|
||||||
|
suffix: "个",
|
||||||
|
smooth: true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
const chartData = computed<any[]>(() => {
|
||||||
|
if (data.value) {
|
||||||
|
const countData = data.value.data.map((it) => it.count)
|
||||||
|
initialData[0].series = countData
|
||||||
|
}
|
||||||
|
return initialData
|
||||||
|
})
|
||||||
|
const initialConfig = {
|
||||||
|
theme: "",
|
||||||
|
responsive: false,
|
||||||
|
customPalette: [],
|
||||||
|
downsample: { threshold: 500 },
|
||||||
|
chart: {
|
||||||
|
fontFamily: "inherit",
|
||||||
|
backgroundColor: "#FFFFFFff",
|
||||||
|
color: "#1A1A1Aff",
|
||||||
|
height: 300,
|
||||||
|
width: 1200,
|
||||||
|
padding: { top: 36, right: 24, bottom: 48, left: 48 },
|
||||||
|
highlighter: { color: "#1A1A1Aff", opacity: 5, useLine: false, lineDasharray: 2, lineWidth: 1 },
|
||||||
|
grid: {
|
||||||
|
stroke: "#e1e5e8ff",
|
||||||
|
showVerticalLines: false,
|
||||||
|
showHorizontalLines: false,
|
||||||
|
position: "middle",
|
||||||
|
frame: {
|
||||||
|
show: false,
|
||||||
|
stroke: "#E1E5E8ff",
|
||||||
|
strokeWidth: 2,
|
||||||
|
strokeLinecap: "round",
|
||||||
|
strokeLinejoin: "round",
|
||||||
|
strokeDasharray: 0
|
||||||
|
},
|
||||||
|
labels: {
|
||||||
|
show: true,
|
||||||
|
color: "#1A1A1Aff",
|
||||||
|
fontSize: 12,
|
||||||
|
axis: { yLabel: "", yLabelOffsetX: 0, xLabel: "", xLabelOffsetY: 14, fontSize: 12 },
|
||||||
|
zeroLine: { show: true },
|
||||||
|
xAxis: { showBaseline: true },
|
||||||
|
yAxis: {
|
||||||
|
showBaseline: true,
|
||||||
|
commonScaleSteps: 1,
|
||||||
|
useIndividualScale: false,
|
||||||
|
stacked: false,
|
||||||
|
gap: 12,
|
||||||
|
labelWidth: 40,
|
||||||
|
formatter: null,
|
||||||
|
scaleMin: 0,
|
||||||
|
scaleMax: 20
|
||||||
|
},
|
||||||
|
xAxisLabels: {
|
||||||
|
color: "#1A1A1Aff",
|
||||||
|
show: true,
|
||||||
|
values: [
|
||||||
|
"一月",
|
||||||
|
"二月",
|
||||||
|
"三月",
|
||||||
|
"四月",
|
||||||
|
"五月",
|
||||||
|
"六月",
|
||||||
|
"七月",
|
||||||
|
"八月",
|
||||||
|
"九月",
|
||||||
|
"十月",
|
||||||
|
"十一月",
|
||||||
|
"十二月"
|
||||||
|
],
|
||||||
|
fontSize: 12,
|
||||||
|
showOnlyFirstAndLast: false,
|
||||||
|
showOnlyAtModulo: false,
|
||||||
|
modulo: 12,
|
||||||
|
yOffset: 8,
|
||||||
|
rotation: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
comments: { show: true, showInTooltip: true, width: 200, offsetX: 0, offsetY: 0 },
|
||||||
|
labels: { fontSize: 10, prefix: "", suffix: "" },
|
||||||
|
legend: { color: "#1A1A1Aff", show: false, fontSize: 16 },
|
||||||
|
title: {
|
||||||
|
text: "项目每月统计",
|
||||||
|
color: "#1A1A1Aff",
|
||||||
|
fontSize: 18,
|
||||||
|
bold: true,
|
||||||
|
textAlign: "left",
|
||||||
|
paddingLeft: 0,
|
||||||
|
paddingRight: 0,
|
||||||
|
subtitle: { color: "#CCCCCCff", text: "", fontSize: 16, bold: false },
|
||||||
|
show: true
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
show: true,
|
||||||
|
color: "#1A1A1Aff",
|
||||||
|
backgroundColor: "#FFFFFFff",
|
||||||
|
fontSize: 14,
|
||||||
|
customFormat: null,
|
||||||
|
borderRadius: 4,
|
||||||
|
borderColor: "#e1e5e8",
|
||||||
|
borderWidth: 1,
|
||||||
|
backgroundOpacity: 30,
|
||||||
|
position: "center",
|
||||||
|
offsetY: 24,
|
||||||
|
showValue: true,
|
||||||
|
showPercentage: false,
|
||||||
|
roundingValue: 0,
|
||||||
|
roundingPercentage: 0
|
||||||
|
},
|
||||||
|
userOptions: {
|
||||||
|
show: true,
|
||||||
|
position: "right",
|
||||||
|
buttons: {
|
||||||
|
tooltip: true,
|
||||||
|
pdf: true,
|
||||||
|
csv: true,
|
||||||
|
img: true,
|
||||||
|
table: false,
|
||||||
|
labels: false,
|
||||||
|
fullscreen: true,
|
||||||
|
sort: false,
|
||||||
|
stack: true,
|
||||||
|
animation: false,
|
||||||
|
annotator: false
|
||||||
|
},
|
||||||
|
buttonTitles: {
|
||||||
|
open: "打开选项",
|
||||||
|
close: "关闭选项",
|
||||||
|
tooltip: "切换提示开关",
|
||||||
|
pdf: "下载为PDF",
|
||||||
|
csv: "下载为CSV",
|
||||||
|
img: "下载为PNG",
|
||||||
|
table: "表格显示/隐藏",
|
||||||
|
labels: "标签显示/隐藏",
|
||||||
|
fullscreen: "切换全屏",
|
||||||
|
stack: "切换stack模式"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
zoom: { show: false }
|
||||||
|
},
|
||||||
|
showTable: false
|
||||||
|
}
|
||||||
|
const chartConfig = computed(() => {
|
||||||
|
if (data.value) {
|
||||||
|
const countData = data.value.data.map((it) => it.count)
|
||||||
|
initialConfig.chart.grid.labels.yAxis.scaleMax = Math.max(...countData)
|
||||||
|
}
|
||||||
|
return initialConfig
|
||||||
|
})
|
||||||
|
return { chartData, chartConfig }
|
||||||
|
}
|
||||||
|
|
||||||
|
export default useVueDataUI
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
</a>
|
</a>
|
||||||
</a-card>
|
</a-card>
|
||||||
<div class="mt-2">管理平台版本</div>
|
<div class="mt-2">管理平台版本</div>
|
||||||
<a-tag class="mt-2 w-fit" color="#0fc6c2">TestPlant V0.0.3</a-tag>
|
<a-tag class="mt-2 w-fit" color="#0fc6c2">TestPlant V0.0.4</a-tag>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -1,179 +1,31 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="ma-content-block p-3 mt-3 bg-white">
|
<div class="ma-content-block p-3 mt-3 bg-white">
|
||||||
<a-spin class="chartContainer" :loading="isDataLoading" tip="图标数据加载中...">
|
<a-spin class="chartContainer" :loading="isPending" tip="图标数据加载中...">
|
||||||
<ma-chart height="300px" :option="loginChartOptions" v-if="!isDataLoading" />
|
<div class="flex justify-center items-center" v-if="!isPending">
|
||||||
|
<template v-if="isError">
|
||||||
|
<img class="w-[200px] h-[300px]" src="@/assets/img/ErrorLoad.svg" alt="" />
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
<VueUiXy :dataset="chartData" :config="chartConfig" />
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
</a-spin>
|
</a-spin>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { computed, ref } from "vue"
|
|
||||||
import { graphic } from "echarts"
|
|
||||||
import fetchData from "@/hooks/fetchData"
|
|
||||||
import commonApi from "@/api/common"
|
import commonApi from "@/api/common"
|
||||||
// 传给hook的远程请求数据函数
|
import { VueUiXy } from "vue-data-ui"
|
||||||
async function fetchDataFunc() {
|
import useVueDataUI from "@/views/dashboard/workplace/components/cpns/hooks/vueDataUI"
|
||||||
return await commonApi.getChartData()
|
import { useQuery } from "@tanstack/vue-query"
|
||||||
}
|
// vue-query请求图表接口
|
||||||
const { loadingData, isDataLoading } = fetchData(
|
const { isPending, data, isError } = useQuery({
|
||||||
[
|
queryKey: ["chart"],
|
||||||
{ month: "1", count: 2 },
|
queryFn: commonApi.getChartData,
|
||||||
{ month: "2", count: 10 }
|
refetchOnWindowFocus: false
|
||||||
],
|
|
||||||
fetchDataFunc
|
|
||||||
)
|
|
||||||
// 计算属性:将loadingData转为xAxis
|
|
||||||
const xAxisData = computed(() => {
|
|
||||||
return loadingData.value.map((item) => {
|
|
||||||
return item.month + "月"
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
const yAxisData = computed(() => {
|
// vue-data-ui图表
|
||||||
return loadingData.value.map((item) => {
|
const { chartData, chartConfig } = useVueDataUI(data)
|
||||||
return item.count
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
function graphicFactory(side) {
|
|
||||||
return {
|
|
||||||
type: "text",
|
|
||||||
bottom: "8",
|
|
||||||
...side,
|
|
||||||
style: {
|
|
||||||
text: "",
|
|
||||||
textAlign: "center",
|
|
||||||
fill: "#4E5969",
|
|
||||||
fontSize: 12
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const graphicElements = ref([graphicFactory({ left: "3%" }), graphicFactory({ right: 0 })])
|
|
||||||
|
|
||||||
const loginChartOptions = computed(() => ({
|
|
||||||
title: {
|
|
||||||
text: `项目每月统计-${new Date().getFullYear()}年份`
|
|
||||||
},
|
|
||||||
grid: {
|
|
||||||
left: "3%",
|
|
||||||
right: "3%",
|
|
||||||
top: "50",
|
|
||||||
bottom: "30"
|
|
||||||
},
|
|
||||||
xAxis: {
|
|
||||||
type: "category",
|
|
||||||
offset: 2,
|
|
||||||
data: xAxisData.value,
|
|
||||||
boundaryGap: true,
|
|
||||||
axisLabel: {
|
|
||||||
color: "#4E5969",
|
|
||||||
formatter(value, idx) {
|
|
||||||
return `${value}`
|
|
||||||
}
|
|
||||||
},
|
|
||||||
axisLine: {
|
|
||||||
show: false
|
|
||||||
},
|
|
||||||
axisTick: {
|
|
||||||
show: false
|
|
||||||
},
|
|
||||||
splitLine: {
|
|
||||||
show: true,
|
|
||||||
interval: (idx) => {
|
|
||||||
if (idx === xAxisData.value.length - 1) return false
|
|
||||||
return true
|
|
||||||
},
|
|
||||||
lineStyle: {
|
|
||||||
color: "#E5E8EF"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
axisPointer: {
|
|
||||||
show: true,
|
|
||||||
lineStyle: {
|
|
||||||
color: "#23ADFF",
|
|
||||||
width: 2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
yAxis: {
|
|
||||||
type: "value",
|
|
||||||
axisLine: {
|
|
||||||
show: false
|
|
||||||
},
|
|
||||||
axisLabel: {
|
|
||||||
formatter(value, idx) {
|
|
||||||
if (idx === 0) return value
|
|
||||||
return `${value}`
|
|
||||||
}
|
|
||||||
},
|
|
||||||
splitLine: {
|
|
||||||
show: true,
|
|
||||||
lineStyle: {
|
|
||||||
type: "dashed",
|
|
||||||
color: "#E5E8EF"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
tooltip: {
|
|
||||||
trigger: "axis",
|
|
||||||
formatter(params) {
|
|
||||||
return `<div class="login-chart">
|
|
||||||
<p class="tooltip-title">${params[0].axisValueLabel}</p>
|
|
||||||
<div class="content-panel"><span>项目数量</span><span class="tooltip-value">${Number(
|
|
||||||
params[0].value
|
|
||||||
).toLocaleString()}</span></div>
|
|
||||||
</div>`
|
|
||||||
}
|
|
||||||
},
|
|
||||||
graphic: {
|
|
||||||
elements: graphicElements.value
|
|
||||||
},
|
|
||||||
series: [
|
|
||||||
{
|
|
||||||
data: yAxisData.value,
|
|
||||||
type: "line",
|
|
||||||
smooth: true,
|
|
||||||
symbolSize: 14,
|
|
||||||
emphasis: {
|
|
||||||
focus: "series",
|
|
||||||
itemStyle: {
|
|
||||||
borderWidth: 2
|
|
||||||
}
|
|
||||||
},
|
|
||||||
lineStyle: {
|
|
||||||
width: 3,
|
|
||||||
color: new graphic.LinearGradient(0, 0, 1, 0, [
|
|
||||||
{
|
|
||||||
offset: 0,
|
|
||||||
color: "rgba(30, 231, 255, 1)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
offset: 0.5,
|
|
||||||
color: "rgba(36, 154, 255, 1)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
offset: 1,
|
|
||||||
color: "rgba(111, 66, 251, 1)"
|
|
||||||
}
|
|
||||||
])
|
|
||||||
},
|
|
||||||
showSymbol: false,
|
|
||||||
areaStyle: {
|
|
||||||
opacity: 0.8,
|
|
||||||
color: new graphic.LinearGradient(0, 0, 0, 1, [
|
|
||||||
{
|
|
||||||
offset: 0,
|
|
||||||
color: "rgba(17, 126, 255, 0.16)"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
offset: 1,
|
|
||||||
color: "rgba(17, 128, 255, 0)"
|
|
||||||
}
|
|
||||||
])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}))
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="less" scoped>
|
<style lang="less" scoped>
|
||||||
|
|||||||
@@ -180,7 +180,7 @@ const handleSubmit = async ({ values, errors }) => {
|
|||||||
position: relative;
|
position: relative;
|
||||||
top: 50%;
|
top: 50%;
|
||||||
margin-top: -255px;
|
margin-top: -255px;
|
||||||
border-radius: 2px;
|
border-radius: var(--border-radius-small);
|
||||||
}
|
}
|
||||||
|
|
||||||
.left-panel {
|
.left-panel {
|
||||||
|
|||||||
@@ -431,6 +431,13 @@ const crudColumns = ref([
|
|||||||
}
|
}
|
||||||
])
|
])
|
||||||
|
|
||||||
|
// 暴露给route-view的刷新表格函数
|
||||||
|
const refreshCrudTable = () => {
|
||||||
|
crudRef.value.refresh()
|
||||||
|
}
|
||||||
|
|
||||||
|
defineExpose({ refreshCrudTable })
|
||||||
|
|
||||||
defineOptions({
|
defineOptions({
|
||||||
name: "case"
|
name: "case"
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -238,6 +238,11 @@ const handleAddFileInputDemand = () => {
|
|||||||
fileInputRef.value.open()
|
fileInputRef.value.open()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const refreshCrudTable = () => {
|
||||||
|
crudRef.value.refresh()
|
||||||
|
}
|
||||||
|
defineExpose({ refreshCrudTable })
|
||||||
|
|
||||||
defineOptions({
|
defineOptions({
|
||||||
name: "dut"
|
name: "dut"
|
||||||
})
|
})
|
||||||
|
|||||||
95
cdTMP/src/views/project/round/DutSubForm/index.tsx
Normal file
95
cdTMP/src/views/project/round/DutSubForm/index.tsx
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
import { defineComponent, inject, ref } from "vue"
|
||||||
|
import { TreeNodeData } from "@arco-design/web-vue"
|
||||||
|
import { useRoute } from "vue-router"
|
||||||
|
import { Message } from "@arco-design/web-vue"
|
||||||
|
import { useTreeDataStore } from "@/store"
|
||||||
|
import dutAPI from "@/api/project/dut"
|
||||||
|
import useOptions from "./useOptions"
|
||||||
|
import MaForm from "@/components/ma-form/index.vue"
|
||||||
|
|
||||||
|
const DutSubForm = defineComponent({
|
||||||
|
name: "DutSubForm",
|
||||||
|
setup(props, { expose }) {
|
||||||
|
// globals
|
||||||
|
const route = useRoute()
|
||||||
|
const project_id = route.query.id
|
||||||
|
const treeDataStore = useTreeDataStore()
|
||||||
|
const rightViewRef = inject("rightViewRef")
|
||||||
|
// refs
|
||||||
|
const visible = ref(false)
|
||||||
|
const formRef = ref<InstanceType<typeof MaForm> | null>(null)
|
||||||
|
const formData = ref<any>({})
|
||||||
|
// hooks
|
||||||
|
const { options, columnOptions } = useOptions(formRef)
|
||||||
|
// 标题
|
||||||
|
const title = ref("被测件详情")
|
||||||
|
// 双击打开回调
|
||||||
|
const open = async (nodeData: TreeNodeData) => {
|
||||||
|
// 请求数据
|
||||||
|
try {
|
||||||
|
const key = nodeData.key
|
||||||
|
// 设置表单名称
|
||||||
|
title.value = nodeData.title!
|
||||||
|
const res = await dutAPI.getDutOne({ project_id, key })
|
||||||
|
// 更新表单
|
||||||
|
formData.value = res.data
|
||||||
|
formData.value.round = key
|
||||||
|
visible.value = true
|
||||||
|
} catch (e) {
|
||||||
|
visible.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 异步确认按钮点击
|
||||||
|
const handleBeforeOk = async () => {
|
||||||
|
const isValidated = await formRef.value!.validateForm()
|
||||||
|
if (isValidated) {
|
||||||
|
// 失败
|
||||||
|
return false
|
||||||
|
} else {
|
||||||
|
// 成功
|
||||||
|
const res = await dutAPI.update(formData.value.id, { project_id, ...formData.value })
|
||||||
|
treeDataStore.updateDutTreeData(res.data, project_id) // 刷新树节点信息
|
||||||
|
!(rightViewRef as any).value.refresh()
|
||||||
|
Message.success("修改成功")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// out use
|
||||||
|
expose({ open })
|
||||||
|
|
||||||
|
// Dom
|
||||||
|
return () => (
|
||||||
|
<a-modal
|
||||||
|
v-model:visible={visible.value}
|
||||||
|
width={"40%"}
|
||||||
|
draggable
|
||||||
|
unmount-on-close
|
||||||
|
ok-text="保存"
|
||||||
|
cancel-text="关闭"
|
||||||
|
on-before-ok={handleBeforeOk}
|
||||||
|
>
|
||||||
|
{{
|
||||||
|
title: () => <span>[被测件]-{title.value}</span>,
|
||||||
|
default: () => (
|
||||||
|
<ma-form
|
||||||
|
ref={formRef}
|
||||||
|
v-model={formData.value}
|
||||||
|
options={options.value}
|
||||||
|
columns={columnOptions.value}
|
||||||
|
>
|
||||||
|
{{
|
||||||
|
"inputPrepend-version": () => <span>V</span>
|
||||||
|
}}
|
||||||
|
</ma-form>
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
</a-modal>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
export default DutSubForm
|
||||||
|
// 组件类型导出
|
||||||
|
type DutSubFormOrigin = InstanceType<typeof DutSubForm>
|
||||||
|
export interface DutSubFormInstance extends DutSubFormOrigin {
|
||||||
|
open(nodeData: TreeNodeData): void
|
||||||
|
}
|
||||||
15
cdTMP/src/views/project/round/DutSubForm/useOptions.ts
Normal file
15
cdTMP/src/views/project/round/DutSubForm/useOptions.ts
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
import { ref, computed } from "vue"
|
||||||
|
import useCrudRef from "@/views/project/round/hooks/useCrudRef"
|
||||||
|
import tool from "@/utils/tool"
|
||||||
|
|
||||||
|
export default function useOptions(formRef: any) {
|
||||||
|
const options = ref({
|
||||||
|
showButtons: false,
|
||||||
|
labelAlign: "center"
|
||||||
|
})
|
||||||
|
const { crudColumns } = useCrudRef(undefined, formRef)
|
||||||
|
const columnOptions = computed(() => {
|
||||||
|
return tool.renameKeyInArray(crudColumns.value, "commonRules", "rules")
|
||||||
|
})
|
||||||
|
return { options, columnOptions }
|
||||||
|
}
|
||||||
15
cdTMP/src/views/project/round/beiceType.ts
Normal file
15
cdTMP/src/views/project/round/beiceType.ts
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
import { IDictData } from "@/utils/types/CommonType"
|
||||||
|
|
||||||
|
type BeiceTypeT = {
|
||||||
|
[K in keyof IDictData<string>]: string
|
||||||
|
}
|
||||||
|
|
||||||
|
const beiceType: BeiceTypeT[] = [
|
||||||
|
{ label: "源代码", value: "SO" },
|
||||||
|
{ label: "设计说明", value: "SJ" },
|
||||||
|
{ label: "需求文档", value: "XQ" },
|
||||||
|
{ label: "通信协议", value: "XY" },
|
||||||
|
{ label: "研制总要求", value: "YZ" }
|
||||||
|
]
|
||||||
|
|
||||||
|
export default beiceType
|
||||||
261
cdTMP/src/views/project/round/hooks/useCrudRef.ts
Normal file
261
cdTMP/src/views/project/round/hooks/useCrudRef.ts
Normal file
@@ -0,0 +1,261 @@
|
|||||||
|
import { ref } from "vue"
|
||||||
|
import dutApi from "@/api/project/dut"
|
||||||
|
import { useRoute } from "vue-router"
|
||||||
|
import { useTreeDataStore } from "@/store"
|
||||||
|
import beiceType from "@/views/project/round/beiceType"
|
||||||
|
/**
|
||||||
|
* 传入组件Ref返回其options和columnOptions
|
||||||
|
* @param crudRef crud组件的Ref,注意不存在传递undefined
|
||||||
|
* @param formRef ma-form组件Ref
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export default function useCrudRef(crudRef?, formRef?) {
|
||||||
|
// globals
|
||||||
|
const route = useRoute()
|
||||||
|
const projectId = ref(route.query.id)
|
||||||
|
const treeDataStore = useTreeDataStore()
|
||||||
|
const roundNumber = (route.query.key as any).split("-")[0]
|
||||||
|
// 计算注释率计算crud/form的数据,判断
|
||||||
|
const calcPercent = () => {
|
||||||
|
if (crudRef) {
|
||||||
|
const formData = crudRef.value.getFormData()
|
||||||
|
const total_line = +formData.black_line + +formData.code_line + +formData.comment_line + +formData.mix_line
|
||||||
|
const comment_total = +formData.comment_line + +formData.mix_line
|
||||||
|
formData.comment_percent = `${(comment_total / total_line).toFixed(2).toString()}%`
|
||||||
|
} else if (formRef) {
|
||||||
|
const formData = formRef.value.getFormData()
|
||||||
|
const { code_line, comment_line, mix_line, black_line } = formData
|
||||||
|
const total_line = +black_line + +code_line + +comment_line + +mix_line
|
||||||
|
const comment_total = +comment_line + +mix_line
|
||||||
|
formData.comment_percent = `${(comment_total / total_line).toFixed(2).toString()}%`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// refs
|
||||||
|
const crudOptions = ref({
|
||||||
|
api: dutApi.getDutList,
|
||||||
|
add: { show: true, api: dutApi.save, text: "新增被测件" },
|
||||||
|
edit: { show: true, api: dutApi.update, text: "编辑被测件" },
|
||||||
|
delete: { show: true, api: dutApi.delete },
|
||||||
|
// 处理添加后函数
|
||||||
|
beforeOpenAdd: function () {
|
||||||
|
let round_str = parseInt(route.query.key as any) + 1
|
||||||
|
crudRef.value.crudFormRef.actionTitle = `${route.query.ident}>第${round_str}轮>被测件-`
|
||||||
|
return true
|
||||||
|
},
|
||||||
|
beforeOpenEdit: function (record) {
|
||||||
|
let round_str = parseInt(route.query.key as any) + 1
|
||||||
|
crudRef.value.crudFormRef.actionTitle = `${route.query.ident}>第${round_str}轮>被测件[${record.name}]-`
|
||||||
|
return true
|
||||||
|
},
|
||||||
|
afterAdd: (res) => {
|
||||||
|
let id = projectId.value
|
||||||
|
treeDataStore.updateDutTreeData(res.data, id)
|
||||||
|
},
|
||||||
|
afterEdit: (res) => {
|
||||||
|
let id = projectId.value
|
||||||
|
treeDataStore.updateDutTreeData(res.data, id)
|
||||||
|
},
|
||||||
|
afterDelete: (res, record) => {
|
||||||
|
let id = projectId.value
|
||||||
|
if (!record) {
|
||||||
|
record = { key: route.query.key + "-X" }
|
||||||
|
}
|
||||||
|
treeDataStore.updateDutTreeData(record, id)
|
||||||
|
// 清空行选择器
|
||||||
|
crudRef.value.tableRef.selectAll(false)
|
||||||
|
},
|
||||||
|
|
||||||
|
// 新增、编辑、删除均携带下面
|
||||||
|
parameters: {
|
||||||
|
projectId: route.query.id,
|
||||||
|
round: roundNumber
|
||||||
|
},
|
||||||
|
operationWidth: 500,
|
||||||
|
showIndex: false,
|
||||||
|
showTools: false,
|
||||||
|
rowSelection: { showCheckedAll: true },
|
||||||
|
searchColNumber: 3,
|
||||||
|
tablePagination: false,
|
||||||
|
operationColumnWidth: 200, // 操作列宽度
|
||||||
|
operationColumn: true,
|
||||||
|
operationColumnAlign: "center",
|
||||||
|
formOption: {
|
||||||
|
viewType: "drawer",
|
||||||
|
width: 600,
|
||||||
|
mask: false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const crudColumns = ref([
|
||||||
|
{
|
||||||
|
title: "ID",
|
||||||
|
width: 50,
|
||||||
|
align: "center",
|
||||||
|
hide: true,
|
||||||
|
dataIndex: "id",
|
||||||
|
commonRules: [{ required: true, message: "ID是必填" }],
|
||||||
|
validateTrigger: "blur",
|
||||||
|
display: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "测件标识",
|
||||||
|
width: 150,
|
||||||
|
sortable: { sortDirections: ["ascend"] },
|
||||||
|
align: "center",
|
||||||
|
dataIndex: "ident",
|
||||||
|
search: true,
|
||||||
|
// 这里做的标识预填
|
||||||
|
addDefaultValue: route.query.ident + "-R" + (parseInt(route.query.key as any) + 1) + "-UT",
|
||||||
|
addDisabled: true,
|
||||||
|
editDisabled: true,
|
||||||
|
validateTrigger: "blur",
|
||||||
|
disabled: true,
|
||||||
|
placeholder: "被测件标识未空,请检查"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "被测类型",
|
||||||
|
align: "center",
|
||||||
|
dataIndex: "type",
|
||||||
|
search: true,
|
||||||
|
formType: "radio",
|
||||||
|
addDefaultValue: "SO",
|
||||||
|
dict: {
|
||||||
|
data: beiceType,
|
||||||
|
translation: true,
|
||||||
|
tagColors: { XQ: "blue", SO: "green", SJ: "orangered", XY: "pinkpurple", YZ: "red" }
|
||||||
|
},
|
||||||
|
onControl: (value) => {
|
||||||
|
if (value === "SO") {
|
||||||
|
return {
|
||||||
|
black_line: { display: true },
|
||||||
|
code_line: { display: true },
|
||||||
|
mix_line: { display: true },
|
||||||
|
comment_line: { display: true },
|
||||||
|
total_code_line: { display: true },
|
||||||
|
total_line: { display: true },
|
||||||
|
comment_percent: { display: true },
|
||||||
|
release_date: { display: false }
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 其他数据清除
|
||||||
|
return {
|
||||||
|
black_line: { display: false },
|
||||||
|
code_line: { display: false },
|
||||||
|
mix_line: { display: false },
|
||||||
|
comment_line: { display: false },
|
||||||
|
total_code_line: { display: false },
|
||||||
|
total_line: { display: false },
|
||||||
|
comment_percent: { display: false },
|
||||||
|
release_date: { display: true }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "被测件名",
|
||||||
|
width: 120,
|
||||||
|
align: "center",
|
||||||
|
dataIndex: "name",
|
||||||
|
search: true,
|
||||||
|
commonRules: [{ required: true, message: "被测件名称必填" }],
|
||||||
|
validateTrigger: "blur"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "版本",
|
||||||
|
align: "center",
|
||||||
|
dataIndex: "version",
|
||||||
|
search: true,
|
||||||
|
commonRules: [{ required: true, message: "版本必填" }],
|
||||||
|
validateTrigger: "blur",
|
||||||
|
help: "填写不带V字符",
|
||||||
|
openPrepend: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "用户标识",
|
||||||
|
align: "center",
|
||||||
|
dataIndex: "ref",
|
||||||
|
search: true,
|
||||||
|
commonRules: [{ required: true, message: "用户标识必填" }],
|
||||||
|
validateTrigger: "blur",
|
||||||
|
help: "客户使用的标识"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "单位",
|
||||||
|
align: "center",
|
||||||
|
dataIndex: "release_union",
|
||||||
|
search: true,
|
||||||
|
commonRules: [{ required: true, message: "单位必选" }],
|
||||||
|
formType: "select",
|
||||||
|
dict: { url: "system/contact/index", props: { label: "name", value: "name" }, translation: true }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "发布时间",
|
||||||
|
dataIndex: "release_date",
|
||||||
|
hide: true,
|
||||||
|
commonRules: [{ required: true, message: "时间必填" }],
|
||||||
|
formType: "date"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "空行",
|
||||||
|
hide: true,
|
||||||
|
align: "center",
|
||||||
|
dataIndex: "black_line",
|
||||||
|
formType: "input-number",
|
||||||
|
commonRules: [{ required: true, message: "空行数必填" }],
|
||||||
|
min: 0,
|
||||||
|
onControl: () => {
|
||||||
|
calcPercent()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "纯代码行",
|
||||||
|
hide: true,
|
||||||
|
align: "center",
|
||||||
|
dataIndex: "code_line",
|
||||||
|
formType: "input-number",
|
||||||
|
commonRules: [{ required: true, message: "纯代码行数必填" }],
|
||||||
|
min: 0,
|
||||||
|
onControl: () => {
|
||||||
|
calcPercent()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "纯注释行",
|
||||||
|
hide: true,
|
||||||
|
align: "center",
|
||||||
|
dataIndex: "comment_line",
|
||||||
|
formType: "input-number",
|
||||||
|
commonRules: [{ required: true, message: "纯注释行数必填" }],
|
||||||
|
min: 0,
|
||||||
|
onControl: () => {
|
||||||
|
calcPercent()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "混合行",
|
||||||
|
hide: true,
|
||||||
|
align: "center",
|
||||||
|
dataIndex: "mix_line",
|
||||||
|
formType: "input-number",
|
||||||
|
help: "混合行是指:代码中一行即包含代码也包含注释",
|
||||||
|
commonRules: [{ required: true, message: "混合行数必填" }],
|
||||||
|
min: 0,
|
||||||
|
onControl: () => {
|
||||||
|
calcPercent()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "注释率 %",
|
||||||
|
align: "center",
|
||||||
|
dataIndex: "comment_percent",
|
||||||
|
placeholder: "计算注释率",
|
||||||
|
hide: true,
|
||||||
|
addDisabled: true,
|
||||||
|
editDisabled: true
|
||||||
|
}
|
||||||
|
])
|
||||||
|
return {
|
||||||
|
crudOptions,
|
||||||
|
crudColumns
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -12,251 +12,15 @@
|
|||||||
|
|
||||||
<script setup lang="jsx">
|
<script setup lang="jsx">
|
||||||
import { ref } from "vue"
|
import { ref } from "vue"
|
||||||
import { useRoute, useRouter } from "vue-router"
|
import useCrudRef from "@/views/project/round/hooks/useCrudRef"
|
||||||
import dutApi from "@/api/project/dut"
|
|
||||||
import { useTreeDataStore } from "@/store"
|
|
||||||
const treeDataStore = useTreeDataStore()
|
|
||||||
const route = useRoute()
|
|
||||||
const roundNumber = route.query.key.split("-")[0]
|
|
||||||
const projectId = ref(route.query.id)
|
|
||||||
const crudRef = ref()
|
const crudRef = ref()
|
||||||
|
|
||||||
let beiceType = [
|
|
||||||
{ label: "源代码", value: "SO" },
|
|
||||||
{ label: "设计说明", value: "SJ" },
|
|
||||||
{ label: "需求文档", value: "XQ" },
|
|
||||||
{ label: "通信协议", value: "XY" },
|
|
||||||
{ label: "研制总要求", value: "YZ" }
|
|
||||||
]
|
|
||||||
// crud组件
|
// crud组件
|
||||||
const crudOptions = ref({
|
const { crudOptions, crudColumns } = useCrudRef(crudRef)
|
||||||
api: dutApi.getDutList,
|
|
||||||
add: { show: true, api: dutApi.save, text: "新增被测件" },
|
|
||||||
edit: { show: true, api: dutApi.update, text: "编辑被测件" },
|
|
||||||
delete: { show: true, api: dutApi.delete },
|
|
||||||
// 处理添加后函数
|
|
||||||
beforeOpenAdd: function () {
|
|
||||||
let round_str = parseInt(route.query.key) + 1
|
|
||||||
crudRef.value.crudFormRef.actionTitle = `${route.query.ident}>第${round_str}轮>被测件-`
|
|
||||||
return true
|
|
||||||
},
|
|
||||||
beforeOpenEdit: function (record) {
|
|
||||||
let round_str = parseInt(route.query.key) + 1
|
|
||||||
crudRef.value.crudFormRef.actionTitle = `${route.query.ident}>第${round_str}轮>被测件[${record.name}]-`
|
|
||||||
return true
|
|
||||||
},
|
|
||||||
afterAdd: (res) => {
|
|
||||||
let id = projectId.value
|
|
||||||
treeDataStore.updateDutTreeData(res.data, id)
|
|
||||||
},
|
|
||||||
afterEdit: (res) => {
|
|
||||||
let id = projectId.value
|
|
||||||
treeDataStore.updateDutTreeData(res.data, id)
|
|
||||||
},
|
|
||||||
afterDelete: (res, record) => {
|
|
||||||
let id = projectId.value
|
|
||||||
if (!record) {
|
|
||||||
record = { key: route.query.key + "-X" }
|
|
||||||
}
|
|
||||||
treeDataStore.updateDutTreeData(record, id)
|
|
||||||
// 清空行选择器
|
|
||||||
crudRef.value.tableRef.selectAll(false)
|
|
||||||
},
|
|
||||||
|
|
||||||
// 新增、编辑、删除均携带下面
|
const refreshCrudTable = () => {
|
||||||
parameters: {
|
crudRef.value.refresh()
|
||||||
projectId: route.query.id,
|
|
||||||
round: roundNumber
|
|
||||||
},
|
|
||||||
operationWidth: 500,
|
|
||||||
showIndex: false,
|
|
||||||
showTools: false,
|
|
||||||
rowSelection: { showCheckedAll: true },
|
|
||||||
searchColNumber: 3,
|
|
||||||
tablePagination: false,
|
|
||||||
operationColumnWidth: 200, // 操作列宽度
|
|
||||||
operationColumn: true,
|
|
||||||
operationColumnAlign: "center",
|
|
||||||
formOption: {
|
|
||||||
viewType: "drawer",
|
|
||||||
width: 600,
|
|
||||||
mask: false
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
// 1.计算注释率函数 -> 用于字段交互
|
|
||||||
const calcPercent = () => {
|
|
||||||
const formData = crudRef.value.getFormData()
|
|
||||||
const total_line = +formData.black_line + +formData.code_line + +formData.comment_line + +formData.mix_line
|
|
||||||
const comment_total = +formData.comment_line + +formData.mix_line
|
|
||||||
formData.comment_percent = `${(comment_total / total_line).toFixed(2).toString()}%`
|
|
||||||
}
|
}
|
||||||
|
defineExpose({ refreshCrudTable })
|
||||||
const crudColumns = ref([
|
|
||||||
{
|
|
||||||
title: "ID",
|
|
||||||
width: 50,
|
|
||||||
align: "center",
|
|
||||||
hide: true,
|
|
||||||
dataIndex: "id",
|
|
||||||
commonRules: [{ required: true, message: "ID是必填" }],
|
|
||||||
validateTrigger: "blur"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "测件标识",
|
|
||||||
width: 150,
|
|
||||||
sortable: { sortDirections: ["ascend"] },
|
|
||||||
align: "center",
|
|
||||||
dataIndex: "ident",
|
|
||||||
search: true,
|
|
||||||
// 这里做的标识预填
|
|
||||||
addDefaultValue: route.query.ident + "-R" + (parseInt(route.query.key) + 1) + "-UT",
|
|
||||||
addDisabled: true,
|
|
||||||
editDisabled: true,
|
|
||||||
validateTrigger: "blur"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "被测类型",
|
|
||||||
align: "center",
|
|
||||||
dataIndex: "type",
|
|
||||||
search: true,
|
|
||||||
formType: "radio",
|
|
||||||
addDefaultValue: "SO",
|
|
||||||
dict: {
|
|
||||||
data: beiceType,
|
|
||||||
translation: true,
|
|
||||||
tagColors: { XQ: "blue", SO: "green", SJ: "orangered", XY: "pinkpurple", YZ: "red" }
|
|
||||||
},
|
|
||||||
onControl: (value) => {
|
|
||||||
if (value === "SO") {
|
|
||||||
return {
|
|
||||||
black_line: { display: true },
|
|
||||||
code_line: { display: true },
|
|
||||||
mix_line: { display: true },
|
|
||||||
comment_line: { display: true },
|
|
||||||
total_code_line: { display: true },
|
|
||||||
total_line: { display: true },
|
|
||||||
comment_percent: { display: true },
|
|
||||||
release_date: { display: false }
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// 其他数据清除
|
|
||||||
return {
|
|
||||||
black_line: { display: false },
|
|
||||||
code_line: { display: false },
|
|
||||||
mix_line: { display: false },
|
|
||||||
comment_line: { display: false },
|
|
||||||
total_code_line: { display: false },
|
|
||||||
total_line: { display: false },
|
|
||||||
comment_percent: { display: false },
|
|
||||||
release_date: { display: true }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "被测件名",
|
|
||||||
width: 120,
|
|
||||||
align: "center",
|
|
||||||
dataIndex: "name",
|
|
||||||
search: true,
|
|
||||||
commonRules: [{ required: true, message: "被测件名称必填" }],
|
|
||||||
validateTrigger: "blur"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "版本",
|
|
||||||
align: "center",
|
|
||||||
dataIndex: "version",
|
|
||||||
search: true,
|
|
||||||
commonRules: [{ required: true, message: "版本必填" }],
|
|
||||||
validateTrigger: "blur",
|
|
||||||
help: "填写不带V字符",
|
|
||||||
openPrepend: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "用户标识",
|
|
||||||
align: "center",
|
|
||||||
dataIndex: "ref",
|
|
||||||
search: true,
|
|
||||||
commonRules: [{ required: true, message: "用户标识必填" }],
|
|
||||||
validateTrigger: "blur",
|
|
||||||
help: "客户使用的标识"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "单位",
|
|
||||||
align: "center",
|
|
||||||
dataIndex: "release_union",
|
|
||||||
search: true,
|
|
||||||
commonRules: [{ required: true, message: "单位必选" }],
|
|
||||||
formType: "select",
|
|
||||||
dict: { url: "system/contact/index", props: { label: "name", value: "name" }, translation: true }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "发布时间",
|
|
||||||
dataIndex: "release_date",
|
|
||||||
hide: true,
|
|
||||||
commonRules: [{ required: true, message: "时间必填" }],
|
|
||||||
formType: "date"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "空行",
|
|
||||||
hide: true,
|
|
||||||
align: "center",
|
|
||||||
dataIndex: "black_line",
|
|
||||||
formType: "input-number",
|
|
||||||
commonRules: [{ required: true, message: "空行数必填" }],
|
|
||||||
min: 0,
|
|
||||||
onControl: () => {
|
|
||||||
calcPercent()
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "纯代码行",
|
|
||||||
hide: true,
|
|
||||||
align: "center",
|
|
||||||
dataIndex: "code_line",
|
|
||||||
formType: "input-number",
|
|
||||||
commonRules: [{ required: true, message: "纯代码行数必填" }],
|
|
||||||
min: 0,
|
|
||||||
onControl: () => {
|
|
||||||
calcPercent()
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "纯注释行",
|
|
||||||
hide: true,
|
|
||||||
align: "center",
|
|
||||||
dataIndex: "comment_line",
|
|
||||||
formType: "input-number",
|
|
||||||
commonRules: [{ required: true, message: "纯注释行数必填" }],
|
|
||||||
min: 0,
|
|
||||||
onControl: () => {
|
|
||||||
calcPercent()
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "混合行",
|
|
||||||
hide: true,
|
|
||||||
align: "center",
|
|
||||||
dataIndex: "mix_line",
|
|
||||||
formType: "input-number",
|
|
||||||
help: "混合行是指:代码中一行即包含代码也包含注释",
|
|
||||||
commonRules: [{ required: true, message: "混合行数必填" }],
|
|
||||||
min: 0,
|
|
||||||
onControl: () => {
|
|
||||||
calcPercent()
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "注释率 %",
|
|
||||||
align: "center",
|
|
||||||
dataIndex: "comment_percent",
|
|
||||||
placeholder: "计算注释率",
|
|
||||||
hide: true,
|
|
||||||
addDisabled: true,
|
|
||||||
editDisabled: true
|
|
||||||
}
|
|
||||||
])
|
|
||||||
|
|
||||||
defineOptions({
|
defineOptions({
|
||||||
name: "round"
|
name: "round"
|
||||||
|
|||||||
@@ -1,20 +1,13 @@
|
|||||||
import { useRoute } from "vue-router"
|
import { useRoute } from "vue-router"
|
||||||
import { ref } from "vue"
|
import { ref } from "vue"
|
||||||
import { FragApi } from "@/api/system/fragment"
|
import { FragApi } from "@/api/system/fragment"
|
||||||
import { ProductFileEnum } from "@/utils/enums/productTypes"
|
|
||||||
import type { IDictData } from "@/utils/types/CommonType"
|
|
||||||
import { IFragSearchCondition } from "@/api/system/types/fragmentTypes"
|
import { IFragSearchCondition } from "@/api/system/types/fragmentTypes"
|
||||||
|
|
||||||
const useCrudOption = () => {
|
const useCrudOption = () => {
|
||||||
// global
|
// global
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const crudRef = ref()
|
const crudRef = ref()
|
||||||
// 产品文档类型写死7种
|
// crud-options
|
||||||
const productFileType: IDictData<ProductFileEnum>[] = Object.keys(ProductFileEnum).map((it, index) => ({
|
|
||||||
label: ProductFileEnum[it],
|
|
||||||
value: index + 1
|
|
||||||
}))
|
|
||||||
// crud-option
|
|
||||||
const crudOptions = ref<object>({
|
const crudOptions = ref<object>({
|
||||||
api: FragApi.getFragList,
|
api: FragApi.getFragList,
|
||||||
add: { show: true, api: FragApi.add },
|
add: { show: true, api: FragApi.add },
|
||||||
@@ -45,10 +38,7 @@ const useCrudOption = () => {
|
|||||||
layout: [
|
layout: [
|
||||||
{
|
{
|
||||||
formType: "grid",
|
formType: "grid",
|
||||||
cols: [
|
cols: [{ span: 12, formList: [{ dataIndex: "name" }] }]
|
||||||
{ span: 12, formList: [{ dataIndex: "name" }] },
|
|
||||||
{ span: 12, formList: [{ dataIndex: "belong_doc" }] }
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -72,16 +62,6 @@ const useCrudOption = () => {
|
|||||||
commonRules: [{ required: true, message: "片段名称必填" }],
|
commonRules: [{ required: true, message: "片段名称必填" }],
|
||||||
validateTrigger: "blur"
|
validateTrigger: "blur"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
title: "所属文档",
|
|
||||||
align: "center",
|
|
||||||
width: 100,
|
|
||||||
dataIndex: "belong_doc",
|
|
||||||
formType: "select",
|
|
||||||
search: true,
|
|
||||||
commonRules: [{ required: true, message: "所属文档必选" }],
|
|
||||||
dict: { data: productFileType, translation: true }
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
title: "替换片段",
|
title: "替换片段",
|
||||||
width: 100,
|
width: 100,
|
||||||
|
|||||||
@@ -82,7 +82,8 @@ const useGenerateSecond = function () {
|
|||||||
dgGenerateApi.createInterface({ id }), // 生成-被测软件接口
|
dgGenerateApi.createInterface({ id }), // 生成-被测软件接口
|
||||||
dgGenerateApi.createPerformance({ id }), // 生成-被测软件性能
|
dgGenerateApi.createPerformance({ id }), // 生成-被测软件性能
|
||||||
dgGenerateApi.createBaseInformation({ id }), // 生成-被测软件基本信息
|
dgGenerateApi.createBaseInformation({ id }), // 生成-被测软件基本信息
|
||||||
dgGenerateApi.createRequirement({ id }), // 生成-测试总体要求
|
dgGenerateApi.createLevelAndType({ id }), // 生成-测试级别和测试类型 -【修改】
|
||||||
|
dgGenerateApi.createStrategy({ id }), // 生成-测试级别和测试类型 -【新增】
|
||||||
dgGenerateApi.createYzComparison({ id }), // 生成-研总-测试项对照表
|
dgGenerateApi.createYzComparison({ id }), // 生成-研总-测试项对照表
|
||||||
dgGenerateApi.createXqComparison({ id }), // 生成-需求规格说明-测试项对照表
|
dgGenerateApi.createXqComparison({ id }), // 生成-需求规格说明-测试项对照表
|
||||||
dgGenerateApi.createFanXqComparison({ id }), // 生成-反向测试项-需求规格说明对照表
|
dgGenerateApi.createFanXqComparison({ id }), // 生成-反向测试项-需求规格说明对照表
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
const colors = require("tailwindcss/colors")
|
import colors from "tailwindcss/colors"
|
||||||
module.exports = {
|
export const content = ["./src/**/*.{js,jxs,vue}"]
|
||||||
content: ["./src/**/*.{js,jxs,vue}"],
|
export const darkMode = "media"
|
||||||
darkMode: "media", // or 'media' or 'class'
|
export const theme = {
|
||||||
theme: {
|
|
||||||
fontFamily: {
|
fontFamily: {
|
||||||
sans: ["Graphik", "sans-serif"],
|
sans: ["Graphik", "sans-serif"],
|
||||||
serif: ["Merriweather", "serif"]
|
serif: ["Merriweather", "serif"]
|
||||||
@@ -16,12 +15,11 @@ module.exports = {
|
|||||||
"4xl": "2rem"
|
"4xl": "2rem"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
variants: {
|
export const variants = {
|
||||||
extend: {
|
extend: {
|
||||||
borderColor: ["focus-visible"],
|
borderColor: ["focus-visible"],
|
||||||
opacity: ["disabled"]
|
opacity: ["disabled"]
|
||||||
}
|
}
|
||||||
},
|
|
||||||
plugins: []
|
|
||||||
}
|
}
|
||||||
|
export const plugins = []
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -14,7 +14,7 @@ export default ({ mode }) => {
|
|||||||
vueJsx(),
|
vueJsx(),
|
||||||
visualizer({
|
visualizer({
|
||||||
open: true,
|
open: true,
|
||||||
filename: "visualizer.html" //分析图生成的文件名
|
filename: "visualizer.html" // 分析图生成的文件名
|
||||||
})
|
})
|
||||||
],
|
],
|
||||||
resolve: {
|
resolve: {
|
||||||
@@ -35,7 +35,6 @@ export default ({ mode }) => {
|
|||||||
rollupOptions: {
|
rollupOptions: {
|
||||||
output: {
|
output: {
|
||||||
manualChunks: (id) => {
|
manualChunks: (id) => {
|
||||||
if (id.includes("echarts")) return "echarts"
|
|
||||||
if (id.includes("tinymce")) return "tinymce"
|
if (id.includes("tinymce")) return "tinymce"
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user