000
This commit is contained in:
@@ -1,53 +0,0 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"id": "db3fdebd-b7cd-4a83-9f52-2b01691dfcbd",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"ename": "TypeError",
|
||||
"evalue": "ord() expected a character, but string of length 2 found",
|
||||
"output_type": "error",
|
||||
"traceback": [
|
||||
"\u001b[1;31m---------------------------------------\u001b[0m",
|
||||
"\u001b[1;31mTypeError\u001b[0mTraceback (most recent call last)",
|
||||
"Cell \u001b[1;32mIn[4], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;28;43mord\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m12\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m)\n",
|
||||
"\u001b[1;31mTypeError\u001b[0m: ord() expected a character, but string of length 2 found"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "7a1670a0-01da-495a-a2b7-9dd635238477",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3 (ipykernel)",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.8.10"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 5
|
||||
}
|
||||
258
cdTMP/package-lock.json
generated
258
cdTMP/package-lock.json
generated
@@ -9,7 +9,7 @@
|
||||
"version": "0.0.1",
|
||||
"dependencies": {
|
||||
"@arco-design/color": "^0.4.0",
|
||||
"@arco-design/web-vue": "^2.55.2",
|
||||
"@arco-design/web-vue": "^2.55.3",
|
||||
"@tinymce/tinymce-vue": "^5.1.1",
|
||||
"@vueuse/core": "^10.1.2",
|
||||
"axios": "^1.4.0",
|
||||
@@ -47,11 +47,11 @@
|
||||
"autoprefixer": "^10.4.14",
|
||||
"browserslist": "^4.23.0",
|
||||
"caniuse-lite": "^1.0.30001591",
|
||||
"eslint": "^8.42.0",
|
||||
"eslint-plugin-vue": "^9.14.1",
|
||||
"less": "^4.1.3",
|
||||
"eslint": "^8.57.0",
|
||||
"eslint-plugin-vue": "^9.26.0",
|
||||
"less": "^4.2.0",
|
||||
"less-loader": "^11.1.2",
|
||||
"postcss": "^8.4.24",
|
||||
"postcss": "^8.4.38",
|
||||
"prettier": "^2.8.8",
|
||||
"tailwindcss": "^3.3.2",
|
||||
"vite": "^5.2.12"
|
||||
@@ -88,9 +88,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@arco-design/web-vue": {
|
||||
"version": "2.55.2",
|
||||
"resolved": "https://registry.npmmirror.com/@arco-design/web-vue/-/web-vue-2.55.2.tgz",
|
||||
"integrity": "sha512-aEuX0a7u1Qif5VYuCM/NFfbFfKA4GiOl3nOoaZEH/W6jhJh/RTmEVAYxJv8j6AYhPySj7ULfel4USVngP31E0Q==",
|
||||
"version": "2.55.3",
|
||||
"resolved": "https://registry.npmmirror.com/@arco-design/web-vue/-/web-vue-2.55.3.tgz",
|
||||
"integrity": "sha512-gOyEPD0XdaeGIOD7+dypY7+vCE18Y2cG+6R1e56oNGPTk3q+Wj1X6iMpBXVAGiKykvH3BpsCEBFxMtJmKXCR5A==",
|
||||
"dependencies": {
|
||||
"@arco-design/color": "^0.4.0",
|
||||
"b-tween": "^0.3.3",
|
||||
@@ -921,23 +921,23 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint-community/regexpp": {
|
||||
"version": "4.5.1",
|
||||
"resolved": "https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz",
|
||||
"integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==",
|
||||
"version": "4.10.1",
|
||||
"resolved": "https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.10.1.tgz",
|
||||
"integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/eslintrc": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-2.0.3.tgz",
|
||||
"integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==",
|
||||
"version": "2.1.4",
|
||||
"resolved": "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
|
||||
"integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"ajv": "^6.12.4",
|
||||
"debug": "^4.3.2",
|
||||
"espree": "^9.5.2",
|
||||
"espree": "^9.6.0",
|
||||
"globals": "^13.19.0",
|
||||
"ignore": "^5.2.0",
|
||||
"import-fresh": "^3.2.1",
|
||||
@@ -947,37 +947,43 @@
|
||||
},
|
||||
"engines": {
|
||||
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/eslint"
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/eslintrc/node_modules/globals": {
|
||||
"version": "13.20.0",
|
||||
"resolved": "https://registry.npmmirror.com/globals/-/globals-13.20.0.tgz",
|
||||
"integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
|
||||
"version": "13.24.0",
|
||||
"resolved": "https://registry.npmmirror.com/globals/-/globals-13.24.0.tgz",
|
||||
"integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"type-fest": "^0.20.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/js": {
|
||||
"version": "8.42.0",
|
||||
"resolved": "https://registry.npmmirror.com/@eslint/js/-/js-8.42.0.tgz",
|
||||
"integrity": "sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==",
|
||||
"version": "8.57.0",
|
||||
"resolved": "https://registry.npmmirror.com/@eslint/js/-/js-8.57.0.tgz",
|
||||
"integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@humanwhocodes/config-array": {
|
||||
"version": "0.11.10",
|
||||
"resolved": "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz",
|
||||
"integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==",
|
||||
"version": "0.11.14",
|
||||
"resolved": "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
|
||||
"integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@humanwhocodes/object-schema": "^1.2.1",
|
||||
"debug": "^4.1.1",
|
||||
"@humanwhocodes/object-schema": "^2.0.2",
|
||||
"debug": "^4.3.1",
|
||||
"minimatch": "^3.0.5"
|
||||
},
|
||||
"engines": {
|
||||
@@ -994,9 +1000,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@humanwhocodes/object-schema": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
|
||||
"integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
|
||||
"integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@jridgewell/gen-mapping": {
|
||||
@@ -1384,6 +1390,12 @@
|
||||
"resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz",
|
||||
"integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow=="
|
||||
},
|
||||
"node_modules/@ungap/structured-clone": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmmirror.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
|
||||
"integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@vitejs/plugin-vue": {
|
||||
"version": "5.0.4",
|
||||
"resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz",
|
||||
@@ -1850,9 +1862,9 @@
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/acorn": {
|
||||
"version": "8.8.2",
|
||||
"resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.8.2.tgz",
|
||||
"integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
|
||||
"version": "8.11.3",
|
||||
"resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.11.3.tgz",
|
||||
"integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"acorn": "bin/acorn"
|
||||
@@ -2502,27 +2514,28 @@
|
||||
}
|
||||
},
|
||||
"node_modules/eslint": {
|
||||
"version": "8.42.0",
|
||||
"resolved": "https://registry.npmmirror.com/eslint/-/eslint-8.42.0.tgz",
|
||||
"integrity": "sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==",
|
||||
"version": "8.57.0",
|
||||
"resolved": "https://registry.npmmirror.com/eslint/-/eslint-8.57.0.tgz",
|
||||
"integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@eslint-community/eslint-utils": "^4.2.0",
|
||||
"@eslint-community/regexpp": "^4.4.0",
|
||||
"@eslint/eslintrc": "^2.0.3",
|
||||
"@eslint/js": "8.42.0",
|
||||
"@humanwhocodes/config-array": "^0.11.10",
|
||||
"@eslint-community/regexpp": "^4.6.1",
|
||||
"@eslint/eslintrc": "^2.1.4",
|
||||
"@eslint/js": "8.57.0",
|
||||
"@humanwhocodes/config-array": "^0.11.14",
|
||||
"@humanwhocodes/module-importer": "^1.0.1",
|
||||
"@nodelib/fs.walk": "^1.2.8",
|
||||
"ajv": "^6.10.0",
|
||||
"@ungap/structured-clone": "^1.2.0",
|
||||
"ajv": "^6.12.4",
|
||||
"chalk": "^4.0.0",
|
||||
"cross-spawn": "^7.0.2",
|
||||
"debug": "^4.3.2",
|
||||
"doctrine": "^3.0.0",
|
||||
"escape-string-regexp": "^4.0.0",
|
||||
"eslint-scope": "^7.2.0",
|
||||
"eslint-visitor-keys": "^3.4.1",
|
||||
"espree": "^9.5.2",
|
||||
"eslint-scope": "^7.2.2",
|
||||
"eslint-visitor-keys": "^3.4.3",
|
||||
"espree": "^9.6.1",
|
||||
"esquery": "^1.4.2",
|
||||
"esutils": "^2.0.2",
|
||||
"fast-deep-equal": "^3.1.3",
|
||||
@@ -2532,7 +2545,6 @@
|
||||
"globals": "^13.19.0",
|
||||
"graphemer": "^1.4.0",
|
||||
"ignore": "^5.2.0",
|
||||
"import-fresh": "^3.0.0",
|
||||
"imurmurhash": "^0.1.4",
|
||||
"is-glob": "^4.0.0",
|
||||
"is-path-inside": "^3.0.3",
|
||||
@@ -2542,9 +2554,8 @@
|
||||
"lodash.merge": "^4.6.2",
|
||||
"minimatch": "^3.1.2",
|
||||
"natural-compare": "^1.4.0",
|
||||
"optionator": "^0.9.1",
|
||||
"optionator": "^0.9.3",
|
||||
"strip-ansi": "^6.0.1",
|
||||
"strip-json-comments": "^3.1.0",
|
||||
"text-table": "^0.2.0"
|
||||
},
|
||||
"bin": {
|
||||
@@ -2552,49 +2563,53 @@
|
||||
},
|
||||
"engines": {
|
||||
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/eslint"
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-plugin-vue": {
|
||||
"version": "9.14.1",
|
||||
"resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-9.14.1.tgz",
|
||||
"integrity": "sha512-LQazDB1qkNEKejLe/b5a9VfEbtbczcOaui5lQ4Qw0tbRBbQYREyxxOV5BQgNDTqGPs9pxqiEpbMi9ywuIaF7vw==",
|
||||
"version": "9.26.0",
|
||||
"resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-9.26.0.tgz",
|
||||
"integrity": "sha512-eTvlxXgd4ijE1cdur850G6KalZqk65k1JKoOI2d1kT3hr8sPD07j1q98FRFdNnpxBELGPWxZmInxeHGF/GxtqQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@eslint-community/eslint-utils": "^4.3.0",
|
||||
"@eslint-community/eslint-utils": "^4.4.0",
|
||||
"globals": "^13.24.0",
|
||||
"natural-compare": "^1.4.0",
|
||||
"nth-check": "^2.0.1",
|
||||
"postcss-selector-parser": "^6.0.9",
|
||||
"semver": "^7.3.5",
|
||||
"vue-eslint-parser": "^9.3.0",
|
||||
"nth-check": "^2.1.1",
|
||||
"postcss-selector-parser": "^6.0.15",
|
||||
"semver": "^7.6.0",
|
||||
"vue-eslint-parser": "^9.4.2",
|
||||
"xml-name-validator": "^4.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^14.17.0 || >=16.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"eslint": "^6.2.0 || ^7.0.0 || ^8.0.0"
|
||||
"eslint": "^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-plugin-vue/node_modules/lru-cache": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
|
||||
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
|
||||
"node_modules/eslint-plugin-vue/node_modules/globals": {
|
||||
"version": "13.24.0",
|
||||
"resolved": "https://registry.npmmirror.com/globals/-/globals-13.24.0.tgz",
|
||||
"integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"yallist": "^4.0.0"
|
||||
"type-fest": "^0.20.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
"node": ">=8"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-plugin-vue/node_modules/semver": {
|
||||
"version": "7.5.1",
|
||||
"resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.1.tgz",
|
||||
"integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
|
||||
"version": "7.6.2",
|
||||
"resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.2.tgz",
|
||||
"integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"lru-cache": "^6.0.0"
|
||||
},
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
},
|
||||
@@ -2602,16 +2617,10 @@
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-plugin-vue/node_modules/yallist": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
|
||||
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/eslint-scope": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.2.0.tgz",
|
||||
"integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==",
|
||||
"version": "7.2.2",
|
||||
"resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.2.2.tgz",
|
||||
"integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"esrecurse": "^4.3.0",
|
||||
@@ -2619,15 +2628,21 @@
|
||||
},
|
||||
"engines": {
|
||||
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/eslint"
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-visitor-keys": {
|
||||
"version": "3.4.1",
|
||||
"resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz",
|
||||
"integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==",
|
||||
"version": "3.4.3",
|
||||
"resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
|
||||
"integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/eslint"
|
||||
}
|
||||
},
|
||||
"node_modules/eslint/node_modules/ansi-styles": {
|
||||
@@ -2716,17 +2731,20 @@
|
||||
}
|
||||
},
|
||||
"node_modules/espree": {
|
||||
"version": "9.5.2",
|
||||
"resolved": "https://registry.npmmirror.com/espree/-/espree-9.5.2.tgz",
|
||||
"integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==",
|
||||
"version": "9.6.1",
|
||||
"resolved": "https://registry.npmmirror.com/espree/-/espree-9.6.1.tgz",
|
||||
"integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"acorn": "^8.8.0",
|
||||
"acorn": "^8.9.0",
|
||||
"acorn-jsx": "^5.3.2",
|
||||
"eslint-visitor-keys": "^3.4.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/eslint"
|
||||
}
|
||||
},
|
||||
"node_modules/esquery": {
|
||||
@@ -3110,9 +3128,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/ignore": {
|
||||
"version": "5.2.4",
|
||||
"resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.2.4.tgz",
|
||||
"integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
|
||||
"version": "5.3.1",
|
||||
"resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.3.1.tgz",
|
||||
"integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">= 4"
|
||||
@@ -3147,6 +3165,9 @@
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/imurmurhash": {
|
||||
@@ -3383,9 +3404,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/less": {
|
||||
"version": "4.1.3",
|
||||
"resolved": "https://registry.npmmirror.com/less/-/less-4.1.3.tgz",
|
||||
"integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==",
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmmirror.com/less/-/less-4.2.0.tgz",
|
||||
"integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"copy-anything": "^2.0.1",
|
||||
@@ -3819,9 +3840,9 @@
|
||||
"integrity": "sha512-pkEqbDyl8ou5cpq+VsnQbe/WlEy5qS7xPzMS1U55OCG9KPvwFD46zDbxQIj3egJSFc3D+XhYOPUzz49zQAVy7A=="
|
||||
},
|
||||
"node_modules/optionator": {
|
||||
"version": "0.9.1",
|
||||
"resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.9.1.tgz",
|
||||
"integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
|
||||
"version": "0.9.4",
|
||||
"resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.9.4.tgz",
|
||||
"integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"deep-is": "^0.1.3",
|
||||
@@ -3829,7 +3850,7 @@
|
||||
"levn": "^0.4.1",
|
||||
"prelude-ls": "^1.2.1",
|
||||
"type-check": "^0.4.0",
|
||||
"word-wrap": "^1.2.3"
|
||||
"word-wrap": "^1.2.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.8.0"
|
||||
@@ -4097,9 +4118,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/postcss-selector-parser": {
|
||||
"version": "6.0.13",
|
||||
"resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
|
||||
"integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz",
|
||||
"integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"cssesc": "^3.0.0",
|
||||
@@ -4523,6 +4544,9 @@
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/sucrase": {
|
||||
@@ -4960,9 +4984,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/vue-eslint-parser": {
|
||||
"version": "9.3.0",
|
||||
"resolved": "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-9.3.0.tgz",
|
||||
"integrity": "sha512-48IxT9d0+wArT1+3wNIy0tascRoywqSUe2E1YalIC1L8jsUGe5aJQItWfRok7DVFGz3UYvzEI7n5wiTXsCMAcQ==",
|
||||
"version": "9.4.3",
|
||||
"resolved": "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz",
|
||||
"integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"debug": "^4.3.4",
|
||||
@@ -4976,30 +5000,18 @@
|
||||
"engines": {
|
||||
"node": "^14.17.0 || >=16.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/mysticatea"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"eslint": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/vue-eslint-parser/node_modules/lru-cache": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
|
||||
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"yallist": "^4.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/vue-eslint-parser/node_modules/semver": {
|
||||
"version": "7.5.1",
|
||||
"resolved": "https://registry.npmmirror.com/semver/-/semver-7.5.1.tgz",
|
||||
"integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
|
||||
"version": "7.6.2",
|
||||
"resolved": "https://registry.npmmirror.com/semver/-/semver-7.6.2.tgz",
|
||||
"integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"lru-cache": "^6.0.0"
|
||||
},
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
},
|
||||
@@ -5007,12 +5019,6 @@
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/vue-eslint-parser/node_modules/yallist": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
|
||||
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/vue-router": {
|
||||
"version": "4.2.2",
|
||||
"resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.2.2.tgz",
|
||||
@@ -5145,9 +5151,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/word-wrap": {
|
||||
"version": "1.2.3",
|
||||
"resolved": "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.3.tgz",
|
||||
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
|
||||
"version": "1.2.5",
|
||||
"resolved": "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.5.tgz",
|
||||
"integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@arco-design/color": "^0.4.0",
|
||||
"@arco-design/web-vue": "^2.55.2",
|
||||
"@arco-design/web-vue": "^2.55.3",
|
||||
"@tinymce/tinymce-vue": "^5.1.1",
|
||||
"@vueuse/core": "^10.1.2",
|
||||
"axios": "^1.4.0",
|
||||
@@ -50,11 +50,11 @@
|
||||
"autoprefixer": "^10.4.14",
|
||||
"browserslist": "^4.23.0",
|
||||
"caniuse-lite": "^1.0.30001591",
|
||||
"eslint": "^8.42.0",
|
||||
"eslint-plugin-vue": "^9.14.1",
|
||||
"less": "^4.1.3",
|
||||
"eslint": "^8.57.0",
|
||||
"eslint-plugin-vue": "^9.26.0",
|
||||
"less": "^4.2.0",
|
||||
"less-loader": "^11.1.2",
|
||||
"postcss": "^8.4.24",
|
||||
"postcss": "^8.4.38",
|
||||
"prettier": "^2.8.8",
|
||||
"tailwindcss": "^3.3.2",
|
||||
"vite": "^5.2.12"
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
<script setup></script>
|
||||
|
||||
<template>
|
||||
<a-config-provider>
|
||||
<router-view />
|
||||
</a-config-provider>
|
||||
</template>
|
||||
<script setup></script>
|
||||
|
||||
<style scoped></style>
|
||||
|
||||
@@ -71,4 +71,17 @@ export default {
|
||||
}
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 根据项目id查询项目->看板的所有信息
|
||||
* @returns 返回看板所有信息
|
||||
*/
|
||||
getBoardInfo(projectId) {
|
||||
return request({
|
||||
url: `/testmanage/project/board`,
|
||||
method: "get",
|
||||
params: {
|
||||
id: projectId
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
5
cdTMP/src/assets/funcImg/loading.svg
Normal file
5
cdTMP/src/assets/funcImg/loading.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="50px" height="50px" viewBox="0 0 50 50" style="enable-background:new 0 0 50 50" xml:space="preserve">
|
||||
<path fill="#409eff" d="M43.935,25.145c0-10.318-8.364-18.683-18.683-18.683c-10.318,0-18.683,8.365-18.683,18.683h4.068c0-8.071,6.543-14.615,14.615-14.615c8.072,0,14.615,6.543,14.615,14.615H43.935z" transform="rotate(275.098 25 25)">
|
||||
<animateTransform attributeType="xml" attributeName="transform" type="rotate" from="0 25 25" to="360 25 25" dur=".8s" repeatCount="indefinite"></animateTransform>
|
||||
</path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 617 B |
@@ -1,12 +1,3 @@
|
||||
<!--
|
||||
- MineAdmin is committed to providing solutions for quickly building web applications
|
||||
- Please view the LICENSE file that was distributed with this source code,
|
||||
- For the full copyright and license information.
|
||||
- Thank you very much for using MineAdmin.
|
||||
-
|
||||
- @Author X.Mo<root@imoi.cn>
|
||||
- @Link https://gitee.com/xmo/mineadmin-vue
|
||||
-->
|
||||
<template>
|
||||
<component
|
||||
:is="componentName"
|
||||
@@ -16,6 +7,7 @@
|
||||
ok-text="保存"
|
||||
cancel-text="关闭"
|
||||
draggable
|
||||
:mask-closable="options.formOption.mask"
|
||||
:width="options.formOption.width"
|
||||
:fullscreen="options.formOption.isFull || false"
|
||||
unmount-on-close
|
||||
|
||||
@@ -5,13 +5,20 @@
|
||||
unmount-on-close
|
||||
@cancel="modal.cancel"
|
||||
:width="width"
|
||||
draggable
|
||||
:on-before-cancel="modal.customCancel"
|
||||
v-bind="$attrs"
|
||||
>
|
||||
<template #title>
|
||||
{{ prop.title }}
|
||||
</template>
|
||||
<slot name="body"></slot>
|
||||
<ma-form ref="maFormRef" :columns="prop.column" v-model="form" :options="{ ...options, showButtons: false }" />
|
||||
<ma-form
|
||||
ref="maFormRef"
|
||||
:columns="prop.column"
|
||||
v-model="form"
|
||||
:options="{ ...options, showButtons: false }"
|
||||
></ma-form>
|
||||
</a-modal>
|
||||
</template>
|
||||
|
||||
@@ -60,7 +67,7 @@ const modal = reactive({
|
||||
return prop.submit(form._rawValue)
|
||||
},
|
||||
customCancel() {
|
||||
if(prop.customCancel){
|
||||
if (prop.customCancel) {
|
||||
return prop.customCancel()
|
||||
}
|
||||
return true
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
import auth from "./auth/index"
|
||||
import role from "./role/index"
|
||||
import copy from "./copy/index"
|
||||
import loading from "./loading/index"
|
||||
|
||||
export default {
|
||||
install(Vue) {
|
||||
Vue.directive("auth", auth)
|
||||
Vue.directive("role", role)
|
||||
Vue.directive("copy", copy)
|
||||
Vue.directive("loading", loading)
|
||||
}
|
||||
}
|
||||
|
||||
34
cdTMP/src/directives/loading/index.js
Normal file
34
cdTMP/src/directives/loading/index.js
Normal file
@@ -0,0 +1,34 @@
|
||||
// 用于远程加载数据时候显示加载中
|
||||
import imgUrl from "@/assets/funcImg/loading.svg"
|
||||
import styles from "./loading.module.less"
|
||||
|
||||
// 创建img元素
|
||||
function createImg() {
|
||||
const imgEle = document.createElement("img")
|
||||
// 给个html自定义属性
|
||||
imgEle.dataset.role = "loading"
|
||||
imgEle.src = imgUrl
|
||||
imgEle.classList.add(styles.img)
|
||||
imgEle.title = "loading element"
|
||||
return imgEle
|
||||
}
|
||||
|
||||
// 通过el找到img元素-在update钩子的时候,在update时已经创建了img元素了
|
||||
function getImgElement(element) {
|
||||
return element.querySelector("img[data-role=loading]")
|
||||
}
|
||||
|
||||
export default function (el, binding) {
|
||||
const img = getImgElement(el)
|
||||
if (binding.value) {
|
||||
// 这里要判断是否有元素,否则在update钩子会创建多个!!!
|
||||
if (!img) {
|
||||
const img = createImg()
|
||||
el.appendChild(img)
|
||||
}
|
||||
} else {
|
||||
if (img) {
|
||||
img.remove()
|
||||
}
|
||||
}
|
||||
}
|
||||
6
cdTMP/src/directives/loading/loading.module.less
Normal file
6
cdTMP/src/directives/loading/loading.module.less
Normal file
@@ -0,0 +1,6 @@
|
||||
.img {
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
23
cdTMP/src/hooks/fetchData.js
Normal file
23
cdTMP/src/hooks/fetchData.js
Normal file
@@ -0,0 +1,23 @@
|
||||
import { ref } from "vue"
|
||||
|
||||
/**
|
||||
* 该hook传入一个远程数据储存默认值,以及请求远程数据的函数
|
||||
*/
|
||||
const useFetchData = (defaultValue = {}, fetDataFunc) => {
|
||||
const loadingData = ref(defaultValue) // 远程请求的数据
|
||||
const isDataLoading = ref(false)
|
||||
// 该hook需要组件里面提供 -> fetchData的函数,返回远程请求数据的东西
|
||||
/// 相当于created
|
||||
async function fetchOrigin() {
|
||||
isDataLoading.value = true
|
||||
const res = await fetDataFunc()
|
||||
loadingData.value = res.data
|
||||
isDataLoading.value = false
|
||||
}
|
||||
fetchOrigin()
|
||||
return {
|
||||
loadingData,
|
||||
isDataLoading
|
||||
}
|
||||
}
|
||||
export default useFetchData
|
||||
@@ -146,7 +146,9 @@ const paddingStyle = computed(() => {
|
||||
overflow-y: hidden;
|
||||
}
|
||||
}
|
||||
|
||||
.work-area {
|
||||
position: relative; // 注意这个是改变v-loading这些东西
|
||||
}
|
||||
.menu-wrapper {
|
||||
height: 100%;
|
||||
overflow: auto;
|
||||
|
||||
@@ -134,7 +134,8 @@
|
||||
:options="roundOption"
|
||||
width="800px"
|
||||
:submit="handleRoundSubmit"
|
||||
></ma-form-modal>
|
||||
>
|
||||
</ma-form-modal>
|
||||
<!-- 如果没有第一轮的SO_dut则弹窗 -->
|
||||
<ma-form-modal
|
||||
ref="soDutFormRef"
|
||||
@@ -143,7 +144,12 @@
|
||||
width="800px"
|
||||
:submit="handleSoDutSubmit"
|
||||
:custom-cancel="handleSoDutCancel"
|
||||
></ma-form-modal>
|
||||
cancelText="返回项目页面"
|
||||
:cancel-button-props="{ status: 'warning' }"
|
||||
:closable="false"
|
||||
:mask-closable="false"
|
||||
>
|
||||
</ma-form-modal>
|
||||
<Progress
|
||||
:visible="visible"
|
||||
:isComplete="isComplete"
|
||||
@@ -158,15 +164,6 @@
|
||||
alignPoint
|
||||
:style="{ display: 'block' }"
|
||||
>
|
||||
<div
|
||||
:style="{
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
height: '300px',
|
||||
backgroundColor: 'var(--color-fill-2)'
|
||||
}"
|
||||
></div>
|
||||
<template #content>
|
||||
<a-dgroup title="执行操作">
|
||||
<a-doption @click="handleDoptionClickGreateCases">
|
||||
@@ -369,8 +366,8 @@ const handleSoDutSubmit = async (data) => {
|
||||
}
|
||||
// ~~~~定义弹出a-form-modal的cancel方法-返回false则无法关闭弹窗~~~~
|
||||
const handleSoDutCancel = () => {
|
||||
Notification.error("必须按要求添加源代码信息,无法关闭!")
|
||||
return false
|
||||
Notification.error("必须按要求添加源代码信息,返回项目列表页面!")
|
||||
router.replace({ name: "Projmanage" })
|
||||
}
|
||||
// 初始化树状数据
|
||||
// so_dut弹窗ref对象
|
||||
@@ -686,7 +683,6 @@ const roundColumn = ref([
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
formType: "card",
|
||||
title: "极端工况信息",
|
||||
@@ -775,7 +771,9 @@ const soDutColumn = ref([
|
||||
{
|
||||
title: "用户标识",
|
||||
dataIndex: "userRef",
|
||||
placeholder: "请输入用户标识"
|
||||
placeholder: "请输入用户标识",
|
||||
help: "客户使用的标识",
|
||||
rules: [{ required: true, message: "用户标识为客户的标识,必填,可随意填写后面再修改" }]
|
||||
},
|
||||
{
|
||||
title: "单位",
|
||||
@@ -866,7 +864,7 @@ const handleProblemShowClick = () => {
|
||||
const handleDoptionClickGreateCases = async () => {
|
||||
// 将project_id加入参数
|
||||
rightClickNode.project_id = projectId.value
|
||||
const res = await caseApi.createByDemand(rightClickNode)
|
||||
await caseApi.createByDemand(rightClickNode)
|
||||
routeViewRef.value.refresh()
|
||||
}
|
||||
/// 复制modal级联选择器的选项
|
||||
|
||||
@@ -24,7 +24,8 @@ app.use(ArcoVueIcon)
|
||||
app.use(router)
|
||||
app.use(pinia)
|
||||
app.use(globalComponents)
|
||||
// app.use(directive)
|
||||
import directives from "@/directives"
|
||||
app.use(directives)
|
||||
|
||||
// 注册ma-icon图标
|
||||
const modules = import.meta.glob("./assets/ma-icons/*.vue", { eager: true })
|
||||
|
||||
@@ -98,10 +98,9 @@ const router = createRouter({
|
||||
locale: "问题单详情",
|
||||
icon: "icon-arrow-right"
|
||||
}
|
||||
},
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
// 后台管理的路由以及404和重定向路由
|
||||
...appRoutes,
|
||||
REDIRECT_MAIN,
|
||||
|
||||
@@ -21,6 +21,21 @@ const TESTMANAGE = {
|
||||
locale: "项目管理",
|
||||
icon: "icon-folder"
|
||||
}
|
||||
},
|
||||
// 二级路由(非三级路由,但是想办法把左侧菜单删除)
|
||||
{
|
||||
path: "/projBoard/:projectId",
|
||||
name: "projBoard",
|
||||
component: () => import("@/views/testmanage/projBoard/index.vue"),
|
||||
meta: {
|
||||
requiresAuth: true,
|
||||
roles: ["*"],
|
||||
locale: "项目看板",
|
||||
icon: "icon-folder",
|
||||
hideInMenu: true,
|
||||
ignoreCache: false,
|
||||
noAffix: true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<a-modal v-model:visible="visible" fullscreen :footer="false">
|
||||
<template #title>维护数据字典 →【{{ currentRow.name }}】</template>
|
||||
<!-- crud组件 -->
|
||||
<div class="lg:w-full w-full lg:ml-4 mt-5 lg:mt-0">
|
||||
<div class="lg:w-full w-full lg:mt-0">
|
||||
<ma-crud :options="crudOptions" :columns="columns" ref="crudRef">
|
||||
<!-- 排序列 -->
|
||||
<template #sort="{ record }">
|
||||
@@ -93,6 +93,7 @@ const crudOptions = ref({
|
||||
operationColumn: true,
|
||||
operationWidth: 160,
|
||||
operationColumnAlign: "center",
|
||||
showTools: false,
|
||||
beforeAdd: (form) => {
|
||||
form.id = currentRow.value?.id
|
||||
},
|
||||
@@ -183,7 +184,7 @@ const columns = ref([
|
||||
dataIndex: "source",
|
||||
align: "center",
|
||||
search: false,
|
||||
placeholder: "如果不是标准则不填",
|
||||
placeholder: "如果不是标准则不填"
|
||||
}
|
||||
])
|
||||
|
||||
|
||||
@@ -60,7 +60,8 @@ const crudOptions = ref({
|
||||
rowSelection: { showCheckedAll: true },
|
||||
searchColNumber: 4,
|
||||
tablePagination: false,
|
||||
operationColumn: true
|
||||
operationColumn: true,
|
||||
showTools:false,
|
||||
})
|
||||
|
||||
const crudColumns = ref([
|
||||
|
||||
@@ -79,7 +79,7 @@ const crudOptions = ref({
|
||||
${td[round_key].title} > ${td[round_key].children[dut_key].title} >
|
||||
${td[round_key].children[dut_key].children[design_key].title} >
|
||||
${td[round_key].children[dut_key].children[design_key].children[test_key].title} >
|
||||
${td[round_key].children[dut_key].children[design_key].children[test_key].children[case_key].title} > 用例-`
|
||||
${td[round_key].children[dut_key].children[design_key].children[test_key].children[case_key].title} > 问题单-`
|
||||
return true
|
||||
},
|
||||
beforeOpenEdit: function (record) {
|
||||
|
||||
@@ -249,11 +249,12 @@ const crudColumns = ref([
|
||||
align: "center",
|
||||
formType: "select",
|
||||
sortable: { sortDirections: ["ascend", "descend"] },
|
||||
addDefaultValue: "3",
|
||||
addDefaultValue: "4",
|
||||
maxLength: 200,
|
||||
commonRules: [{ required: true, message: "测试类型必选" }],
|
||||
dict: { name: "testType", translation: true, props: { label: "title", value: "key" } },
|
||||
extra: "请保证测试类型选择正确",
|
||||
// 这是arco的属性,所以在ma-crud和ma-form可以直接使用arco属性和事件(事件+onXXX)
|
||||
filterOption: function (inputValue, selectedOption) {
|
||||
if (inputValue) {
|
||||
let matchRes = PinYinMatch.match(selectedOption.label, inputValue)
|
||||
@@ -261,7 +262,7 @@ const crudColumns = ref([
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
title: "测试手段",
|
||||
@@ -299,7 +300,9 @@ const crudColumns = ref([
|
||||
const subItemFormData = crudRef.value.getFormData().testContent
|
||||
// 取出充分性条件字段字符串
|
||||
const mapRes = subItemFormData.map((subItem) => subItem.subName)
|
||||
crudRef.value.getFormData().adequacy = `测试用例覆盖${mapRes.join('、')}子项要求的全部内容。\n所有用例执行完毕,对于未执行的用例说明未执行原因。`
|
||||
crudRef.value.getFormData().adequacy = `测试用例覆盖${mapRes.join(
|
||||
"、"
|
||||
)}子项要求的全部内容。\n所有用例执行完毕,对于未执行的用例说明未执行原因。`
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
@@ -130,17 +130,17 @@ const crudColumns = ref([
|
||||
width: 120,
|
||||
dataIndex: "ident",
|
||||
search: true,
|
||||
commonRules: [{ required: true, message: "标识是必填" }],
|
||||
validateTrigger: "blur",
|
||||
placeholder: "请输入文档中设计需求的标识"
|
||||
placeholder: "请输入文档中设计需求的标识",
|
||||
help:'若不知道则填"无"或不填'
|
||||
},
|
||||
{
|
||||
title: "需求名称",
|
||||
title: "设需名称",
|
||||
align: "center",
|
||||
width: 150,
|
||||
dataIndex: "name",
|
||||
search: true,
|
||||
commonRules: [{ required: true, message: "需求名称是必填" }],
|
||||
commonRules: [{ required: true, message: "设计需求名称是必填" }],
|
||||
validateTrigger: "blur"
|
||||
},
|
||||
{
|
||||
@@ -148,7 +148,8 @@ const crudColumns = ref([
|
||||
align: "center",
|
||||
width: 150,
|
||||
dataIndex: "chapter",
|
||||
search: true
|
||||
search: true,
|
||||
help:'若为隐含需求则填"/"'
|
||||
},
|
||||
{
|
||||
title: "需求类型",
|
||||
|
||||
@@ -71,7 +71,8 @@ const crudOptions = ref({
|
||||
operationColumnAlign: "center",
|
||||
formOption: {
|
||||
viewType: "drawer",
|
||||
width: 600
|
||||
width: 600,
|
||||
mask: false
|
||||
}
|
||||
})
|
||||
|
||||
@@ -118,7 +119,8 @@ const crudColumns = ref([
|
||||
comment_line: { display: true },
|
||||
total_code_line: { display: true },
|
||||
total_line: { display: true },
|
||||
comment_percent: { display: true }
|
||||
comment_percent: { display: true },
|
||||
release_date: { display: false }
|
||||
}
|
||||
} else {
|
||||
// 其他数据清除
|
||||
@@ -129,7 +131,8 @@ const crudColumns = ref([
|
||||
comment_line: { display: false },
|
||||
total_code_line: { display: false },
|
||||
total_line: { display: false },
|
||||
comment_percent: { display: false }
|
||||
comment_percent: { display: false },
|
||||
release_date: { display: true }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -140,7 +143,7 @@ const crudColumns = ref([
|
||||
align: "center",
|
||||
dataIndex: "name",
|
||||
search: true,
|
||||
commonRules: [{ required: true, message: "需求名称是必填" }],
|
||||
commonRules: [{ required: true, message: "被测件名称必填" }],
|
||||
validateTrigger: "blur"
|
||||
},
|
||||
{
|
||||
@@ -157,7 +160,8 @@ const crudColumns = ref([
|
||||
dataIndex: "ref",
|
||||
search: true,
|
||||
commonRules: [{ required: true, message: "用户标识或编号必填" }],
|
||||
validateTrigger: "blur"
|
||||
validateTrigger: "blur",
|
||||
help: "客户使用的标识"
|
||||
},
|
||||
{
|
||||
title: "单位",
|
||||
@@ -181,7 +185,8 @@ const crudColumns = ref([
|
||||
align: "center",
|
||||
dataIndex: "black_line",
|
||||
formType: "input-number",
|
||||
commonRules: [{ required: true, message: "空行数必填" }]
|
||||
commonRules: [{ required: true, message: "空行数必填" }],
|
||||
min: 0
|
||||
},
|
||||
{
|
||||
title: "纯代码行",
|
||||
@@ -189,7 +194,8 @@ const crudColumns = ref([
|
||||
align: "center",
|
||||
dataIndex: "code_line",
|
||||
formType: "input-number",
|
||||
commonRules: [{ required: true, message: "纯代码行数必填" }]
|
||||
commonRules: [{ required: true, message: "纯代码行数必填" }],
|
||||
min: 0
|
||||
},
|
||||
{
|
||||
title: "纯注释行",
|
||||
@@ -197,7 +203,8 @@ const crudColumns = ref([
|
||||
align: "center",
|
||||
dataIndex: "comment_line",
|
||||
formType: "input-number",
|
||||
commonRules: [{ required: true, message: "纯注释行数必填" }]
|
||||
commonRules: [{ required: true, message: "纯注释行数必填" }],
|
||||
min: 0
|
||||
},
|
||||
{
|
||||
title: "混合行",
|
||||
@@ -205,7 +212,9 @@ const crudColumns = ref([
|
||||
align: "center",
|
||||
dataIndex: "mix_line",
|
||||
formType: "input-number",
|
||||
commonRules: [{ required: true, message: "混合行数必填" }]
|
||||
help: "混合行是指:代码中一行即包含代码也包含注释",
|
||||
commonRules: [{ required: true, message: "混合行数必填" }],
|
||||
min: 0
|
||||
},
|
||||
{
|
||||
title: "注释率 %",
|
||||
@@ -248,7 +257,7 @@ const crudColumns = ref([
|
||||
)
|
||||
}
|
||||
},
|
||||
// 注意这个是个创新点
|
||||
// 字段交互控制
|
||||
control(value, data) {
|
||||
data.comment_percent = (
|
||||
(parseFloat(data.comment_line) + parseFloat(data.mix_line)) /
|
||||
|
||||
105
cdTMP/src/views/testmanage/projBoard/cpns/RoundInfo.vue
Normal file
105
cdTMP/src/views/testmanage/projBoard/cpns/RoundInfo.vue
Normal file
@@ -0,0 +1,105 @@
|
||||
<template>
|
||||
<div class="round-info-container">
|
||||
<div class="ma-content-block rounded-sm flex-column justify-between w-full p-3 bg-color">
|
||||
<div class="title">{{ props.data.name }}信息</div>
|
||||
<div class="info-list">
|
||||
<a-list :gridProps="{ gutter: 0, span: 6 }" class="list-container">
|
||||
<template #header><div class="header">设计需求下面测试项/用例统计信息</div></template>
|
||||
<a-list-item v-for="(item, index) in props.data.desings" :key="index">
|
||||
<a-list-item-meta class="meta" :title="`${item.name}`"></a-list-item-meta>
|
||||
<div class="item-count">
|
||||
测试项数 : <span class="count">{{ item.demand_count }}</span>
|
||||
</div>
|
||||
<div class="item-count">
|
||||
用例数 : <span class="count">{{ item.case_count }}</span>
|
||||
</div>
|
||||
</a-list-item>
|
||||
</a-list>
|
||||
<a-list class="list-container">
|
||||
<template #header><div class="header">测试类型统计信息</div></template>
|
||||
<a-table
|
||||
:bordered="false"
|
||||
:data="resolveData"
|
||||
:columns="columns"
|
||||
size="small"
|
||||
:pagination="false"
|
||||
></a-table>
|
||||
</a-list>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { computed } from "vue"
|
||||
import columns from "./tableColumn.js"
|
||||
const props = defineProps({
|
||||
data: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
})
|
||||
const resolveData = computed(() => {
|
||||
let resData = []
|
||||
let res = props.data.method_demand
|
||||
Object.keys(res).forEach((key) => {
|
||||
const value = res[key]
|
||||
resData.push({
|
||||
name: key,
|
||||
demand_count: value,
|
||||
case_count: 0
|
||||
})
|
||||
})
|
||||
let res2 = props.data.method_case
|
||||
Object.keys(res2).forEach((key) => {
|
||||
const value = res2[key]
|
||||
resData.forEach((item) => {
|
||||
if (item.name === key) {
|
||||
item.case_count = value
|
||||
}
|
||||
})
|
||||
})
|
||||
return resData
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.round-info-container {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.title {
|
||||
margin: 10px;
|
||||
font-weight: 700;
|
||||
font-size: 1rem;
|
||||
}
|
||||
.count {
|
||||
font-weight: 700;
|
||||
}
|
||||
.meta {
|
||||
font-size: 15px;
|
||||
width: 80%;
|
||||
border-bottom: 1px dashed var(--color-text-4);
|
||||
margin-bottom: 2px;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
word-break: break-all;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.list-container {
|
||||
transition: all 0.3s;
|
||||
&:hover {
|
||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
}
|
||||
.info-list {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 5px;
|
||||
}
|
||||
.header {
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
color: var(--color-text-3);
|
||||
}
|
||||
</style>
|
||||
67
cdTMP/src/views/testmanage/projBoard/cpns/TimeLine.vue
Normal file
67
cdTMP/src/views/testmanage/projBoard/cpns/TimeLine.vue
Normal file
@@ -0,0 +1,67 @@
|
||||
<template>
|
||||
<div class="time-line-container">
|
||||
<div class="ma-content-block rounded-sm flex-column justify-between w-full p-3 bg-color">
|
||||
<div class="title">填写的项目时间轴</div>
|
||||
<a-timeline direction="horizontal" class="timeline" mode="alternate">
|
||||
<a-timeline-item :label="pInfo.time_line.start_time">
|
||||
<a-row :style="{ display: 'inline-flex', alignItems: 'center' }">
|
||||
<div>开始时间</div>
|
||||
</a-row>
|
||||
</a-timeline-item>
|
||||
<a-timeline-item
|
||||
v-for="(item, index) in pInfo.time_line.round_time"
|
||||
:key="index"
|
||||
:label="`结束时间 : ${item.end}`"
|
||||
>
|
||||
<a-col>
|
||||
<div>{{ item.name }}</div>
|
||||
<div class="a-col-title">开始时间 : {{ item.start }}</div>
|
||||
</a-col>
|
||||
</a-timeline-item>
|
||||
<a-timeline-item :label="pInfo.time_line.end_time">
|
||||
<a-row :style="{ display: 'inline-flex', alignItems: 'center' }">
|
||||
<div>结束时间</div>
|
||||
</a-row>
|
||||
</a-timeline-item>
|
||||
<div class="info">
|
||||
<a-alert>测试人员填写的项目开始时间、结束时间、轮次时间均会影响生成文档的时间!</a-alert>
|
||||
</div>
|
||||
</a-timeline>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
// 1.定义props
|
||||
const props = defineProps({
|
||||
pInfo: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.title {
|
||||
margin: 10px;
|
||||
font-weight: 700;
|
||||
font-size: 1rem;
|
||||
}
|
||||
.timeline {
|
||||
position: relative;
|
||||
padding: 50px;
|
||||
width: 100%;
|
||||
.info {
|
||||
width: 180px;
|
||||
position: absolute;
|
||||
right: 30px;
|
||||
top: 1rem;
|
||||
}
|
||||
}
|
||||
.a-col-title {
|
||||
font-size: 12px;
|
||||
margin-bottom: -5px;
|
||||
margin-top: 5px;
|
||||
color: var(--color-text-3);
|
||||
}
|
||||
</style>
|
||||
89
cdTMP/src/views/testmanage/projBoard/cpns/Title.vue
Normal file
89
cdTMP/src/views/testmanage/projBoard/cpns/Title.vue
Normal file
@@ -0,0 +1,89 @@
|
||||
<template>
|
||||
<div class="title-container">
|
||||
<div class="ma-content-block rounded-sm flex-col justify-between w-full p-3 bg-color">
|
||||
<a-page-header
|
||||
@back="handleBackClick"
|
||||
:style="{ background: 'var(--color-bg-2)' }"
|
||||
:title="props.pInfo.ident"
|
||||
>
|
||||
<template #subtitle>
|
||||
<a-space>
|
||||
<span>{{ props.pInfo.name }}</span>
|
||||
<a-tag color="red" size="small">{{ props.pInfo.step }}</a-tag>
|
||||
</a-space>
|
||||
</template>
|
||||
</a-page-header>
|
||||
<div class="title">基本信息</div>
|
||||
<div class="item-container">
|
||||
<a-card
|
||||
class="item"
|
||||
v-for="(val, key) in pInfo.title_info"
|
||||
:style="{ width: '360px' }"
|
||||
:title="key"
|
||||
:key="key"
|
||||
hoverable
|
||||
>
|
||||
<ul class="li-container">
|
||||
<li v-for="(v, k) in val" :key="k">
|
||||
<div class="key">{{ k }}:</div>
|
||||
<div class="value">{{ v }}</div>
|
||||
</li>
|
||||
</ul>
|
||||
</a-card>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { useRoute, useRouter } from "vue-router"
|
||||
const router = useRouter()
|
||||
|
||||
// 1.头部-点击返回
|
||||
const handleBackClick = () => {
|
||||
router.go(-1)
|
||||
}
|
||||
// 2.定义props
|
||||
const props = defineProps({
|
||||
pInfo: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
:deep(.arco-page-header-main) {
|
||||
align-items: center;
|
||||
}
|
||||
.item-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-around;
|
||||
.item {
|
||||
height: 11rem;
|
||||
.li-container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 5px;
|
||||
li {
|
||||
display: flex;
|
||||
line-height: 1.5;
|
||||
gap: 5px;
|
||||
.value {
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
word-break: break-all;
|
||||
white-space: nowrap;
|
||||
font-weight: 700;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.title {
|
||||
margin: 10px;
|
||||
font-weight: 700;
|
||||
font-size: 1rem;
|
||||
}
|
||||
</style>
|
||||
18
cdTMP/src/views/testmanage/projBoard/cpns/tableColumn.js
Normal file
18
cdTMP/src/views/testmanage/projBoard/cpns/tableColumn.js
Normal file
@@ -0,0 +1,18 @@
|
||||
export default [
|
||||
{
|
||||
title: "测试类型",
|
||||
dataIndex: "name",
|
||||
ellipsis: true,
|
||||
align: "center"
|
||||
},
|
||||
{
|
||||
title: "测试项数量",
|
||||
dataIndex: "demand_count",
|
||||
align: "center"
|
||||
},
|
||||
{
|
||||
title: "用例数量",
|
||||
dataIndex: "case_count",
|
||||
align: "center"
|
||||
}
|
||||
]
|
||||
33
cdTMP/src/views/testmanage/projBoard/index.vue
Normal file
33
cdTMP/src/views/testmanage/projBoard/index.vue
Normal file
@@ -0,0 +1,33 @@
|
||||
<template>
|
||||
<div class="proj-board-container" v-loading="isDataLoading">
|
||||
<a-layout-content class="flex flex-col gap-2" v-if="!isDataLoading">
|
||||
<!-- 返回前面一页的按钮,以及项目整体情况 -->
|
||||
<Title :pInfo="loadingData"></Title>
|
||||
<!-- 时间线显示项目情况 -->
|
||||
<time-line :pInfo="loadingData"></time-line>
|
||||
<!-- 以轮次为合集展示需求下面的测试项数、用例数,测试类型下面测试项和用例数量 -->
|
||||
<round-info v-for="item in loadingData.statistics" :data="item"></round-info>
|
||||
</a-layout-content>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import Title from "./cpns/Title.vue"
|
||||
import TimeLine from "./cpns/TimeLine.vue"
|
||||
import projectApi from "@/api/project/project"
|
||||
import { useRoute } from "vue-router"
|
||||
import RoundInfo from "./cpns/RoundInfo.vue"
|
||||
const route = useRoute()
|
||||
// hooks
|
||||
import useFetchData from "@/hooks/fetchData"
|
||||
const fetchData = async () => {
|
||||
return projectApi.getBoardInfo(route.params.projectId)
|
||||
}
|
||||
const { loadingData, isDataLoading } = useFetchData({}, fetchData)
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
:deep(.ma-content-block) {
|
||||
box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
</style>
|
||||
@@ -2,7 +2,13 @@
|
||||
<!-- 描述列表组件 -->
|
||||
<a-modal width="1000px" v-model:visible="visible" :footer="false">
|
||||
<template #title>项目名称:{{ previewRecord.name }}</template>
|
||||
<ma-info :columns="props.columns" :data="previewRecord" :column="1" size="mini"></ma-info>
|
||||
<ma-info
|
||||
class="my-custom-class"
|
||||
:columns="props.columns"
|
||||
:data="previewRecord"
|
||||
:column="1"
|
||||
size="mini"
|
||||
></ma-info>
|
||||
</a-modal>
|
||||
</template>
|
||||
|
||||
@@ -26,4 +32,13 @@ defineExpose({ open })
|
||||
// MA-INFO的columns
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
<style lang="less" scoped>
|
||||
.my-custom-class {
|
||||
:deep(.arco-space-horizontal) {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
:deep(.arco-space-item){
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -93,6 +93,7 @@
|
||||
工作区
|
||||
</a-button>
|
||||
<a-link @click="previewRef.open(record)"><icon-eye />预览</a-link>
|
||||
<a-link @click="handleBoardClick(record)"><icon-dashboard />项目看板</a-link>
|
||||
</template>
|
||||
</ma-crud>
|
||||
</div>
|
||||
@@ -328,6 +329,15 @@ const createWtdItem = async (record) => {
|
||||
}
|
||||
|
||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// 1.跳转到项目看板页面
|
||||
const handleBoardClick = (record) => {
|
||||
router.push({
|
||||
name: "projBoard",
|
||||
params: {
|
||||
projectId: record.id
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// CRUD-OPTIONS
|
||||
const crudRef = ref()
|
||||
@@ -343,7 +353,7 @@ const crudOptions = ref({
|
||||
operationWidth: 500,
|
||||
showIndex: false,
|
||||
showTools: false,
|
||||
operationColumnWidth: 220, // 操作列宽度
|
||||
operationColumnWidth: 280, // 操作列宽度
|
||||
operationColumnAlign: "center", // 操作列对齐方式
|
||||
// 处理弹窗的title
|
||||
beforeOpenAdd: function () {
|
||||
@@ -386,30 +396,27 @@ const crudOptions = ref({
|
||||
{ span: 12, formList: [{ dataIndex: "member" }] },
|
||||
{ span: 6, formList: [{ dataIndex: "soft_type" }] },
|
||||
{ span: 6, formList: [{ dataIndex: "devplant" }] },
|
||||
{ span: 24, formList: [{ dataIndex: "abbreviation" }] },
|
||||
{ span: 8, formList: [{ dataIndex: "quality_person" }] },
|
||||
{ span: 8, formList: [{ dataIndex: "vise_person" }] },
|
||||
{ span: 8, formList: [{ dataIndex: "config_person" }] }
|
||||
{ span: 6, formList: [{ dataIndex: "abbreviation" }] },
|
||||
{ span: 6, formList: [{ dataIndex: "quality_person" }] },
|
||||
{ span: 6, formList: [{ dataIndex: "vise_person" }] },
|
||||
{ span: 6, formList: [{ dataIndex: "config_person" }] }
|
||||
]
|
||||
},
|
||||
{
|
||||
formType: "grid",
|
||||
cols: [{ span: 24, formList: [{ dataIndex: "security_level" }] }]
|
||||
},
|
||||
{
|
||||
formType: "grid",
|
||||
cols: [
|
||||
{ span: 12, formList: [{ dataIndex: "test_level" }] },
|
||||
{ span: 6, formList: [{ dataIndex: "security_level" }] },
|
||||
{ span: 6, formList: [{ dataIndex: "language" }] },
|
||||
{ span: 12, formList: [{ dataIndex: "plant_type" }] }
|
||||
]
|
||||
},
|
||||
{
|
||||
formType: "grid",
|
||||
cols: [{ span: 24, formList: [{ dataIndex: "report_type" }] }]
|
||||
cols: [{ span: 24, formList: [{ dataIndex: "test_level" }] }]
|
||||
},
|
||||
{
|
||||
formType: "grid",
|
||||
cols: [{ span: 24, formList: [{ dataIndex: "language" }] }]
|
||||
cols: [{ span: 24, formList: [{ dataIndex: "report_type" }] }]
|
||||
},
|
||||
{
|
||||
formType: "grid",
|
||||
@@ -484,6 +491,7 @@ const crudColumns = ref([
|
||||
},
|
||||
{
|
||||
title: "项目名称",
|
||||
width: 110,
|
||||
dataIndex: "name",
|
||||
search: true,
|
||||
commonRules: [{ required: true, message: "名称是必填" }]
|
||||
@@ -491,7 +499,7 @@ const crudColumns = ref([
|
||||
{ title: "工程型号", dataIndex: "engin_model", hide: true },
|
||||
{ title: "分系统", dataIndex: "section_system", hide: true },
|
||||
{ title: "子系统", dataIndex: "sub_system", hide: true },
|
||||
{ title: "设备", dataIndex: "device", hide: true },
|
||||
{ title: "设备名称", dataIndex: "device", hide: true },
|
||||
{
|
||||
title: "开始日期",
|
||||
dataIndex: "beginTime",
|
||||
@@ -502,7 +510,7 @@ const crudColumns = ref([
|
||||
title: "结束时间",
|
||||
dataIndex: "endTime",
|
||||
formType: "date",
|
||||
extra: "注意:开始时间和结束时间影响大纲、报告多个时间,谨慎填写",
|
||||
extra: "注意:结束时间需要晚于最后一轮结束时间",
|
||||
commonRules: [
|
||||
{
|
||||
required: true,
|
||||
@@ -626,7 +634,7 @@ const crudColumns = ref([
|
||||
title: "测试级别",
|
||||
dataIndex: "test_level",
|
||||
commonRules: [{ required: true, message: "请至少选择一个测试级别" }],
|
||||
addDefaultValue: ["6"],
|
||||
addDefaultValue: ["4"],
|
||||
hide: true,
|
||||
formType: "checkbox",
|
||||
dict: { name: "test_level", props: { label: "title", value: "key" } }
|
||||
@@ -643,7 +651,7 @@ const crudColumns = ref([
|
||||
{
|
||||
title: "报告类型",
|
||||
dataIndex: "report_type",
|
||||
addDefaultValue: "1",
|
||||
addDefaultValue: "9",
|
||||
search: true,
|
||||
commonRules: [{ required: true, message: "报告类型必填" }],
|
||||
// 字典-report_type
|
||||
@@ -656,16 +664,18 @@ const crudColumns = ref([
|
||||
addDefaultValue: ["1"],
|
||||
commonRules: [{ required: true, message: "请至少选择一个" }],
|
||||
hide: true,
|
||||
formType: "checkbox",
|
||||
formType: "select",
|
||||
multiple: true,
|
||||
dict: { name: "language", props: { label: "title", value: "key" } }
|
||||
},
|
||||
{
|
||||
title: "依据标准",
|
||||
dataIndex: "standard",
|
||||
addDefaultValue: ["1"],
|
||||
addDefaultValue: ["1", "2", "3", "4", "9"],
|
||||
commonRules: [{ required: true, message: "请至少选择一个" }],
|
||||
hide: true,
|
||||
formType: "checkbox",
|
||||
multiple: true,
|
||||
formType: "select",
|
||||
dict: { name: "standard", props: { label: "title", value: "key" } }
|
||||
},
|
||||
{
|
||||
@@ -681,21 +691,27 @@ const crudColumns = ref([
|
||||
title: "联系人",
|
||||
dataIndex: "entrust_contact",
|
||||
hide: true,
|
||||
rules: [{ required: true, message: "联系人必填" }]
|
||||
commonRules: [{ required: true, message: "联系人必填" }]
|
||||
},
|
||||
{
|
||||
formType: "input",
|
||||
title: "联系电话",
|
||||
maxLength: 11,
|
||||
dataIndex: "entrust_contact_phone",
|
||||
hide: true,
|
||||
rules: [{ required: true, message: "联系电话必填" }]
|
||||
commonRules: [
|
||||
{ required: true, message: "联系电话必填" },
|
||||
{
|
||||
match: /^1[3456789]\d{9}$/,
|
||||
message: "电话号码格式错误"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
formType: "input",
|
||||
title: "电子邮箱",
|
||||
dataIndex: "entrust_email",
|
||||
hide: true,
|
||||
rules: [{ required: true, message: "电子邮箱必填" }]
|
||||
hide: true
|
||||
},
|
||||
{
|
||||
title: "单位",
|
||||
@@ -710,21 +726,27 @@ const crudColumns = ref([
|
||||
title: "联系人",
|
||||
dataIndex: "dev_contact",
|
||||
hide: true,
|
||||
rules: [{ required: true, message: "联系人必填" }]
|
||||
commonRules: [{ required: true, message: "联系人必填" }]
|
||||
},
|
||||
{
|
||||
formType: "input",
|
||||
title: "联系电话",
|
||||
maxLength: 11,
|
||||
dataIndex: "dev_contact_phone",
|
||||
hide: true,
|
||||
rules: [{ required: true, message: "联系电话必填" }]
|
||||
commonRules: [
|
||||
{ required: true, message: "联系电话必填" },
|
||||
{
|
||||
match: /^1[3456789]\d{9}$/,
|
||||
message: "电话号码格式错误"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
formType: "input",
|
||||
title: "电子邮箱",
|
||||
dataIndex: "dev_email",
|
||||
hide: true,
|
||||
rules: [{ required: true, message: "电子邮箱必填" }]
|
||||
hide: true
|
||||
},
|
||||
{
|
||||
title: "单位",
|
||||
@@ -739,21 +761,27 @@ const crudColumns = ref([
|
||||
title: "联系人",
|
||||
dataIndex: "test_contact",
|
||||
hide: true,
|
||||
rules: [{ required: true, message: "联系人必填" }]
|
||||
commonRules: [{ required: true, message: "联系人必填" }]
|
||||
},
|
||||
{
|
||||
formType: "input",
|
||||
title: "联系电话",
|
||||
dataIndex: "test_contact_phone",
|
||||
hide: true,
|
||||
rules: [{ required: true, message: "联系电话必填" }]
|
||||
maxLength: 11,
|
||||
commonRules: [
|
||||
{ required: true, message: "联系电话必填" },
|
||||
{
|
||||
match: /^1[3456789]\d{9}$/,
|
||||
message: "电话号码格式错误"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
formType: "input",
|
||||
title: "电子邮箱",
|
||||
dataIndex: "test_email",
|
||||
hide: true,
|
||||
rules: [{ required: true, message: "电子邮箱必填" }]
|
||||
hide: true
|
||||
},
|
||||
{
|
||||
title: "状态",
|
||||
|
||||
@@ -25,7 +25,6 @@ export default ({ mode }) => {
|
||||
chunkSizeWarningLimit: 3000
|
||||
// assetsPublicPath: "./"
|
||||
},
|
||||
|
||||
server: {
|
||||
host: "0.0.0.0",
|
||||
port: env.VITE_APP_PORT || process.env.port,
|
||||
|
||||
Reference in New Issue
Block a user