This commit is contained in:
2025-04-02 19:16:28 +08:00
parent 9d3945413a
commit e43f9230eb
31 changed files with 513 additions and 188 deletions

181
cdTMP/package-lock.json generated
View File

@@ -10,7 +10,7 @@
"dependencies": { "dependencies": {
"@arco-design/color": "^0.4.0", "@arco-design/color": "^0.4.0",
"@arco-design/web-vue": "^2.57.0", "@arco-design/web-vue": "^2.57.0",
"@tanstack/vue-query": "^5.69.0", "@tanstack/vue-query": "^5.71.1",
"@tinymce/tinymce-vue": "^6.1.0", "@tinymce/tinymce-vue": "^6.1.0",
"@vueuse/core": "^13.0.0", "@vueuse/core": "^13.0.0",
"axios": "^1.8.4", "axios": "^1.8.4",
@@ -28,15 +28,15 @@
"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-data-ui": "^2.6.24", "vue-data-ui": "^2.6.27",
"vue-router": "^4.5.0", "vue-router": "^4.5.0",
"vuedraggable": "^2.24.3" "vuedraggable": "^2.24.3"
}, },
"devDependencies": { "devDependencies": {
"@tailwindcss/postcss": "^4.0.15", "@tailwindcss/postcss": "^4.1.0",
"@tailwindcss/vite": "^4.0.15", "@tailwindcss/vite": "^4.1.0",
"@types/lodash-es": "^4.17.12", "@types/lodash-es": "^4.17.12",
"@types/node": "^22.13.13", "@types/node": "^22.13.17",
"@types/nprogress": "^0.2.3", "@types/nprogress": "^0.2.3",
"@types/qs": "^6.9.18", "@types/qs": "^6.9.18",
"@vitejs/plugin-vue": "^5.2.3", "@vitejs/plugin-vue": "^5.2.3",
@@ -50,9 +50,9 @@
"postcss": "^8.5.3", "postcss": "^8.5.3",
"prettier": "^3.5.3", "prettier": "^3.5.3",
"rollup-plugin-visualizer": "^5.14.0", "rollup-plugin-visualizer": "^5.14.0",
"tailwindcss": "^4.0.15", "tailwindcss": "^4.1.0",
"typescript": "^5.8.2", "typescript": "^5.8.2",
"vite": "^6.2.3", "vite": "^6.2.4",
"vue-eslint-parser": "^10.1.1" "vue-eslint-parser": "^10.1.1"
} }
}, },
@@ -1440,44 +1440,45 @@
] ]
}, },
"node_modules/@tailwindcss/node": { "node_modules/@tailwindcss/node": {
"version": "4.0.15", "version": "4.1.0",
"resolved": "https://registry.npmmirror.com/@tailwindcss/node/-/node-4.0.15.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/node/-/node-4.1.0.tgz",
"integrity": "sha512-IODaJjNmiasfZX3IoS+4Em3iu0fD2HS0/tgrnkYfW4hyUor01Smnr5eY3jc4rRgaTDrJlDmBTHbFO0ETTDaxWA==", "integrity": "sha512-mfgxGxFaxbsUbaGwKIAQXUSm7Qoojw53FftpoKwo4ANwr9wnDaByz4vi1gMti/xfJvmQ5lzA1DvPiX5yCHtBkQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"enhanced-resolve": "^5.18.1", "enhanced-resolve": "^5.18.1",
"jiti": "^2.4.2", "jiti": "^2.4.2",
"tailwindcss": "4.0.15" "lightningcss": "1.29.2",
"tailwindcss": "4.1.0"
} }
}, },
"node_modules/@tailwindcss/oxide": { "node_modules/@tailwindcss/oxide": {
"version": "4.0.15", "version": "4.1.0",
"resolved": "https://registry.npmmirror.com/@tailwindcss/oxide/-/oxide-4.0.15.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide/-/oxide-4.1.0.tgz",
"integrity": "sha512-e0uHrKfPu7JJGMfjwVNyt5M0u+OP8kUmhACwIRlM+JNBuReDVQ63yAD1NWe5DwJtdaHjugNBil76j+ks3zlk6g==", "integrity": "sha512-A33oyZKpPFH08d7xkl13Dc8OTsbPhsuls0z9gUCxIHvn8c1BsUACddQxL6HwaeJR1fSYyXZUw8bdWcD8bVawpQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">= 10" "node": ">= 10"
}, },
"optionalDependencies": { "optionalDependencies": {
"@tailwindcss/oxide-android-arm64": "4.0.15", "@tailwindcss/oxide-android-arm64": "4.1.0",
"@tailwindcss/oxide-darwin-arm64": "4.0.15", "@tailwindcss/oxide-darwin-arm64": "4.1.0",
"@tailwindcss/oxide-darwin-x64": "4.0.15", "@tailwindcss/oxide-darwin-x64": "4.1.0",
"@tailwindcss/oxide-freebsd-x64": "4.0.15", "@tailwindcss/oxide-freebsd-x64": "4.1.0",
"@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.15", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.0",
"@tailwindcss/oxide-linux-arm64-gnu": "4.0.15", "@tailwindcss/oxide-linux-arm64-gnu": "4.1.0",
"@tailwindcss/oxide-linux-arm64-musl": "4.0.15", "@tailwindcss/oxide-linux-arm64-musl": "4.1.0",
"@tailwindcss/oxide-linux-x64-gnu": "4.0.15", "@tailwindcss/oxide-linux-x64-gnu": "4.1.0",
"@tailwindcss/oxide-linux-x64-musl": "4.0.15", "@tailwindcss/oxide-linux-x64-musl": "4.1.0",
"@tailwindcss/oxide-win32-arm64-msvc": "4.0.15", "@tailwindcss/oxide-win32-arm64-msvc": "4.1.0",
"@tailwindcss/oxide-win32-x64-msvc": "4.0.15" "@tailwindcss/oxide-win32-x64-msvc": "4.1.0"
} }
}, },
"node_modules/@tailwindcss/oxide-android-arm64": { "node_modules/@tailwindcss/oxide-android-arm64": {
"version": "4.0.15", "version": "4.1.0",
"resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.0.15.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.0.tgz",
"integrity": "sha512-EBuyfSKkom7N+CB3A+7c0m4+qzKuiN0WCvzPvj5ZoRu4NlQadg/mthc1tl5k9b5ffRGsbDvP4k21azU4VwVk3Q==", "integrity": "sha512-UredFljuHey2Kh5qyYfQVBr0Xfq70ZE5Df6i5IubNYQGs2JXXT4VL0SIUjwzHx5W9T6t7dT7banunlV6lthGPQ==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -1492,9 +1493,9 @@
} }
}, },
"node_modules/@tailwindcss/oxide-darwin-arm64": { "node_modules/@tailwindcss/oxide-darwin-arm64": {
"version": "4.0.15", "version": "4.1.0",
"resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.0.15.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.0.tgz",
"integrity": "sha512-ObVAnEpLepMhV9VoO0JSit66jiN5C4YCqW3TflsE9boo2Z7FIjV80RFbgeL2opBhtxbaNEDa6D0/hq/EP03kgQ==", "integrity": "sha512-QHQ/46lRVwH9zEBNiRk8AJ3Af4pMq6DuZAI//q323qrPOXjsRdrhLsH9LUO3mqBfHr5EZNUxN3Am5vpO89sntw==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -1509,9 +1510,9 @@
} }
}, },
"node_modules/@tailwindcss/oxide-darwin-x64": { "node_modules/@tailwindcss/oxide-darwin-x64": {
"version": "4.0.15", "version": "4.1.0",
"resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.0.15.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.0.tgz",
"integrity": "sha512-IElwoFhUinOr9MyKmGTPNi1Rwdh68JReFgYWibPWTGuevkHkLWKEflZc2jtI5lWZ5U9JjUnUfnY43I4fEXrc4g==", "integrity": "sha512-lEMgYHCvQQ6x2KOZ4FwnPprwfnc+UnjzwXRqEYIhB/NlYvXQD1QMf7oKEDRqy94DiZaYox9ZRfG2YJOBgM0UkA==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -1526,9 +1527,9 @@
} }
}, },
"node_modules/@tailwindcss/oxide-freebsd-x64": { "node_modules/@tailwindcss/oxide-freebsd-x64": {
"version": "4.0.15", "version": "4.1.0",
"resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.0.15.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.0.tgz",
"integrity": "sha512-6BLLqyx7SIYRBOnTZ8wgfXANLJV5TQd3PevRJZp0vn42eO58A2LykRKdvL1qyPfdpmEVtF+uVOEZ4QTMqDRAWA==", "integrity": "sha512-9fdImTc+2lA5yHqJ61oeTXfCtzylNOzJVFhyWwVQAJESJJbVCPnj6f+b+Zf/AYAdKQfS6FCThbPEahkQrDCgLQ==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -1543,9 +1544,9 @@
} }
}, },
"node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
"version": "4.0.15", "version": "4.1.0",
"resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.0.15.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.0.tgz",
"integrity": "sha512-Zy63EVqO9241Pfg6G0IlRIWyY5vNcWrL5dd2WAKVJZRQVeolXEf1KfjkyeAAlErDj72cnyXObEZjMoPEKHpdNw==", "integrity": "sha512-HB0bTkUOuTLLSdadyRhKE9yps4/ZBjrojbHTPMSvvf/8yBLZRPpWb+A6IgW5R+2A2AL4KhVPgLwWfoXsErxJFg==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@@ -1560,9 +1561,9 @@
} }
}, },
"node_modules/@tailwindcss/oxide-linux-arm64-gnu": { "node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
"version": "4.0.15", "version": "4.1.0",
"resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.0.15.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.0.tgz",
"integrity": "sha512-2NemGQeaTbtIp1Z2wyerbVEJZTkAWhMDOhhR5z/zJ75yMNf8yLnE+sAlyf6yGDNr+1RqvWrRhhCFt7i0CIxe4Q==", "integrity": "sha512-+QtYCwvKLjC46h6RikKkpELJWrpiMMtgyK0aaqhwPLEx1icGgIhwz8dqrkAiqbFRE0KiRrE2aenhYoEkplyRmA==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -1577,9 +1578,9 @@
} }
}, },
"node_modules/@tailwindcss/oxide-linux-arm64-musl": { "node_modules/@tailwindcss/oxide-linux-arm64-musl": {
"version": "4.0.15", "version": "4.1.0",
"resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.0.15.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.0.tgz",
"integrity": "sha512-342GVnhH/6PkVgKtEzvNVuQ4D+Q7B7qplvuH20Cfz9qEtydG6IQczTZ5IT4JPlh931MG1NUCVxg+CIorr1WJyw==", "integrity": "sha512-nApadFKM9GauzuPZPlt6TKfELavMHqJ0gVd+GYkYBTwr2t9KhgCAb2sKiFDDIhs1a7gOjsU7P1lEauv3iKFp+Q==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -1594,9 +1595,9 @@
} }
}, },
"node_modules/@tailwindcss/oxide-linux-x64-gnu": { "node_modules/@tailwindcss/oxide-linux-x64-gnu": {
"version": "4.0.15", "version": "4.1.0",
"resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.0.15.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.0.tgz",
"integrity": "sha512-g76GxlKH124RuGqacCEFc2nbzRl7bBrlC8qDQMiUABkiifDRHOIUjgKbLNG4RuR9hQAD/MKsqZ7A8L08zsoBrw==", "integrity": "sha512-cp0Rf9Wit2kZHhrV8HIoDFD8dxU2+ZTCFCFbDj3a07pGyyPwLCJm5H5VipKXgYrBaLmlYu73ERidW0S5sdEXEg==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -1611,9 +1612,9 @@
} }
}, },
"node_modules/@tailwindcss/oxide-linux-x64-musl": { "node_modules/@tailwindcss/oxide-linux-x64-musl": {
"version": "4.0.15", "version": "4.1.0",
"resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.0.15.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.0.tgz",
"integrity": "sha512-Gg/Y1XrKEvKpq6WeNt2h8rMIKOBj/W3mNa5NMvkQgMC7iO0+UNLrYmt6zgZufht66HozNpn+tJMbbkZ5a3LczA==", "integrity": "sha512-4/wf42XWBJGXsOS6BhgPhdQbg/qyfdZ1nZvTL9sJoxYN+Ah+cfY5Dd7R0smzI8hmgCRt3TD1lYb72ChTyIA59w==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -1628,9 +1629,9 @@
} }
}, },
"node_modules/@tailwindcss/oxide-win32-arm64-msvc": { "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
"version": "4.0.15", "version": "4.1.0",
"resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.0.15.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.0.tgz",
"integrity": "sha512-7QtSSJwYZ7ZK1phVgcNZpuf7c7gaCj8Wb0xjliligT5qCGCp79OV2n3SJummVZdw4fbTNKUOYMO7m1GinppZyA==", "integrity": "sha512-caXJJ0G6NwGbcoxEYdH3MZYN84C3PldaMdAEPMU6bjJXURQlKdSlQ/Ecis7/nSgBkMkicZyhqWmb36Tw/BFSIw==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -1645,9 +1646,9 @@
} }
}, },
"node_modules/@tailwindcss/oxide-win32-x64-msvc": { "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
"version": "4.0.15", "version": "4.1.0",
"resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.0.15.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.0.tgz",
"integrity": "sha512-JQ5H+5MLhOjpgNp6KomouE0ZuKmk3hO5h7/ClMNAQ8gZI2zkli3IH8ZqLbd2DVfXDbdxN2xvooIEeIlkIoSCqw==", "integrity": "sha512-ZHXRXRxB7HBmkUE8U13nmkGGYfR1I2vsuhiYjeDDUFIYpk1BL6caU8hvzkSlL/X5CAQNdIUUJRGom5I0ZyfJOA==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -1662,31 +1663,29 @@
} }
}, },
"node_modules/@tailwindcss/postcss": { "node_modules/@tailwindcss/postcss": {
"version": "4.0.15", "version": "4.1.0",
"resolved": "https://registry.npmmirror.com/@tailwindcss/postcss/-/postcss-4.0.15.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/postcss/-/postcss-4.1.0.tgz",
"integrity": "sha512-qyrpoDKIO7wzkRbKCvGLo7gXRjT9/Njf7ZJiJhG4njrfZkvOhjwnaHpYbpxYeDysEg+9pB1R4jcd+vQ7ZUDsmQ==", "integrity": "sha512-b2NWFAFfLXY7960jLY5QkKbuYKrQUULx60XU3BCzyaUQpU/7lLf3n2CiHibZPdBq5CIXrUp10wdxhV0EI0Js2g==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@alloc/quick-lru": "^5.2.0", "@alloc/quick-lru": "^5.2.0",
"@tailwindcss/node": "4.0.15", "@tailwindcss/node": "4.1.0",
"@tailwindcss/oxide": "4.0.15", "@tailwindcss/oxide": "4.1.0",
"lightningcss": "1.29.2",
"postcss": "^8.4.41", "postcss": "^8.4.41",
"tailwindcss": "4.0.15" "tailwindcss": "4.1.0"
} }
}, },
"node_modules/@tailwindcss/vite": { "node_modules/@tailwindcss/vite": {
"version": "4.0.15", "version": "4.1.0",
"resolved": "https://registry.npmmirror.com/@tailwindcss/vite/-/vite-4.0.15.tgz", "resolved": "https://registry.npmmirror.com/@tailwindcss/vite/-/vite-4.1.0.tgz",
"integrity": "sha512-JRexava80NijI8cTcLXNM3nQL5A0ptTHI8oJLLe8z1MpNB6p5J4WCdJJP8RoyHu8/eB1JzEdbpH86eGfbuaezQ==", "integrity": "sha512-IszG0h/o8jOGheY0f7v41a9qyDymZ5eU8qm4koTypMKagBhaQA06Keip13wch6sz7rG3cvIG7A3/ytdfRh2BUw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@tailwindcss/node": "4.0.15", "@tailwindcss/node": "4.1.0",
"@tailwindcss/oxide": "4.0.15", "@tailwindcss/oxide": "4.1.0",
"lightningcss": "1.29.2", "tailwindcss": "4.1.0"
"tailwindcss": "4.0.15"
}, },
"peerDependencies": { "peerDependencies": {
"vite": "^5.2.0 || ^6" "vite": "^5.2.0 || ^6"
@@ -1709,9 +1708,9 @@
} }
}, },
"node_modules/@tanstack/query-core": { "node_modules/@tanstack/query-core": {
"version": "5.69.0", "version": "5.71.1",
"resolved": "https://registry.npmmirror.com/@tanstack/query-core/-/query-core-5.69.0.tgz", "resolved": "https://registry.npmmirror.com/@tanstack/query-core/-/query-core-5.71.1.tgz",
"integrity": "sha512-Kn410jq6vs1P8Nm+ZsRj9H+U3C0kjuEkYLxbiCyn3MDEiYor1j2DGVULqAz62SLZtUZ/e9Xt6xMXiJ3NJ65WyQ==", "integrity": "sha512-4+ZswCHOfJX+ikhXNoocamTUmJcHtB+Ljjz/oJkC7/eKB5IrzEwR4vEwZUENiPi+wISucJHR5TUbuuJ26w3kdQ==",
"license": "MIT", "license": "MIT",
"funding": { "funding": {
"type": "github", "type": "github",
@@ -1719,13 +1718,13 @@
} }
}, },
"node_modules/@tanstack/vue-query": { "node_modules/@tanstack/vue-query": {
"version": "5.69.0", "version": "5.71.1",
"resolved": "https://registry.npmmirror.com/@tanstack/vue-query/-/vue-query-5.69.0.tgz", "resolved": "https://registry.npmmirror.com/@tanstack/vue-query/-/vue-query-5.71.1.tgz",
"integrity": "sha512-JZecDd0b+hZChqV5O1wXBfKoxlEj3aGvRj7upuqWei+oGrT+ERuOU4uQn7/DDVA5TouIt88G3oMFBjE2wKO/6A==", "integrity": "sha512-vP8GLlI9ojjg3owElCk+IFdNtdvG5w+wsh/MLY2JlyY5JaoFQb4zP1aerMHPIKV5d8pX4USz4lMq3ele9QPb3g==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@tanstack/match-sorter-utils": "^8.19.4", "@tanstack/match-sorter-utils": "^8.19.4",
"@tanstack/query-core": "5.69.0", "@tanstack/query-core": "5.71.1",
"@vue/devtools-api": "^6.6.3", "@vue/devtools-api": "^6.6.3",
"vue-demi": "^0.14.10" "vue-demi": "^0.14.10"
}, },
@@ -1840,9 +1839,9 @@
} }
}, },
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "22.13.13", "version": "22.13.17",
"resolved": "https://registry.npmmirror.com/@types/node/-/node-22.13.13.tgz", "resolved": "https://registry.npmmirror.com/@types/node/-/node-22.13.17.tgz",
"integrity": "sha512-ClsL5nMwKaBRwPcCvH8E7+nU4GxHVx1axNvMZTFHMEfNI7oahimt26P5zjVCRrjiIWj6YFXfE1v3dEp94wLcGQ==", "integrity": "sha512-nAJuQXoyPj04uLgu+obZcSmsfOenUg6DxPKogeUy6yNCFwWaj5sBF8/G/pNo8EtBJjAfSVgfIlugR/BCOleO+g==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@@ -5287,9 +5286,9 @@
} }
}, },
"node_modules/tailwindcss": { "node_modules/tailwindcss": {
"version": "4.0.15", "version": "4.1.0",
"resolved": "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-4.0.15.tgz", "resolved": "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-4.1.0.tgz",
"integrity": "sha512-6ZMg+hHdMJpjpeCCFasX7K+U615U9D+7k5/cDK/iRwl6GptF24+I/AbKgOnXhVKePzrEyIXutLv36n4cRsq3Sg==", "integrity": "sha512-vBYstoFnvUZCDxaauNGQQEvJNQgCd1vSMDRYuZZMH1xRRcTboOk1rJrW5yFkEabU9X6Yx1C4LQ+QvPOvQj4Daw==",
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
@@ -5464,9 +5463,9 @@
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
}, },
"node_modules/vite": { "node_modules/vite": {
"version": "6.2.3", "version": "6.2.4",
"resolved": "https://registry.npmmirror.com/vite/-/vite-6.2.3.tgz", "resolved": "https://registry.npmmirror.com/vite/-/vite-6.2.4.tgz",
"integrity": "sha512-IzwM54g4y9JA/xAeBPNaDXiBF8Jsgl3VBQ2YQ/wOY6fyW3xMdSoltIV3Bo59DErdqdE6RxUfv8W69DvUorE4Eg==", "integrity": "sha512-veHMSew8CcRzhL5o8ONjy8gkfmFJAd5Ac16oxBUjlwgX3Gq2Wqr+qNC3TjPIpy7TPV/KporLga5GT9HqdrCizw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@@ -5574,9 +5573,9 @@
} }
}, },
"node_modules/vue-data-ui": { "node_modules/vue-data-ui": {
"version": "2.6.24", "version": "2.6.27",
"resolved": "https://registry.npmmirror.com/vue-data-ui/-/vue-data-ui-2.6.24.tgz", "resolved": "https://registry.npmmirror.com/vue-data-ui/-/vue-data-ui-2.6.27.tgz",
"integrity": "sha512-KL7EWsY3Zcuz13BNWfRMv1ancpeu12mTga2Fm+5SJYuz1BuNxUZEvTXgGKifvqZ5+GZ/H6YHZHwEB/mHedUcyQ==", "integrity": "sha512-GCg2cmyABpyttECRFcYXdzygdFk7S1k1MfuEkBgvsLvD2rJVkQKZbqK9jjvrYtzDSZ5bBAhIjyvTKJoKbt02bw==",
"license": "MIT", "license": "MIT",
"peerDependencies": { "peerDependencies": {
"vue": ">=3.3.0" "vue": ">=3.3.0"

View File

@@ -13,7 +13,7 @@
"dependencies": { "dependencies": {
"@arco-design/color": "^0.4.0", "@arco-design/color": "^0.4.0",
"@arco-design/web-vue": "^2.57.0", "@arco-design/web-vue": "^2.57.0",
"@tanstack/vue-query": "^5.69.0", "@tanstack/vue-query": "^5.71.1",
"@tinymce/tinymce-vue": "^6.1.0", "@tinymce/tinymce-vue": "^6.1.0",
"@vueuse/core": "^13.0.0", "@vueuse/core": "^13.0.0",
"axios": "^1.8.4", "axios": "^1.8.4",
@@ -31,15 +31,15 @@
"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-data-ui": "^2.6.24", "vue-data-ui": "^2.6.27",
"vue-router": "^4.5.0", "vue-router": "^4.5.0",
"vuedraggable": "^2.24.3" "vuedraggable": "^2.24.3"
}, },
"devDependencies": { "devDependencies": {
"@tailwindcss/postcss": "^4.0.15", "@tailwindcss/postcss": "^4.1.0",
"@tailwindcss/vite": "^4.0.15", "@tailwindcss/vite": "^4.1.0",
"@types/lodash-es": "^4.17.12", "@types/lodash-es": "^4.17.12",
"@types/node": "^22.13.13", "@types/node": "^22.13.17",
"@types/nprogress": "^0.2.3", "@types/nprogress": "^0.2.3",
"@types/qs": "^6.9.18", "@types/qs": "^6.9.18",
"@vitejs/plugin-vue": "^5.2.3", "@vitejs/plugin-vue": "^5.2.3",
@@ -53,9 +53,9 @@
"postcss": "^8.5.3", "postcss": "^8.5.3",
"prettier": "^3.5.3", "prettier": "^3.5.3",
"rollup-plugin-visualizer": "^5.14.0", "rollup-plugin-visualizer": "^5.14.0",
"tailwindcss": "^4.0.15", "tailwindcss": "^4.1.0",
"typescript": "^5.8.2", "typescript": "^5.8.2",
"vite": "^6.2.3", "vite": "^6.2.4",
"vue-eslint-parser": "^10.1.1" "vue-eslint-parser": "^10.1.1"
} }
} }

View File

@@ -68,7 +68,7 @@ export default {
}) })
}, },
/** /**
* 添加字典Item数据 * 添加dictItem数据
* @returns * @returns
*/ */
saveDictItem(data = {}) { saveDictItem(data = {}) {
@@ -99,5 +99,27 @@ export default {
method: "delete", method: "delete",
data data
}) })
},
/**
* 快速新增字典项(非字典)
* @returns 成功或失败
*/
createDictItemFast(data = {}) {
return request({
url: "system/dataDict/fastSave",
method: "post",
data
})
},
/**
* 快速新增依据标准字典项(非字典)
* @returns 成功或失败
*/
createDictItemStdFast(data = {}) {
return request({
url: "system/dataDict/saveStdItem",
method: "post",
data
})
} }
} }

View File

@@ -1,7 +1,3 @@
<!--
- @Author XXX
- @Link XXX
-->
<template> <template>
<a-spin :loading="searchLoading" :tip="options.searchLoadingText" v-if="showSearch"> <a-spin :loading="searchLoading" :tip="options.searchLoadingText" v-if="showSearch">
<a-form <a-form
@@ -28,7 +24,7 @@
</a-form-item> </a-form-item>
</template> </template>
</div> </div>
<div class="text-center mt-5 w-full" v-if="searchColumns.length > 0"> <div class="text-center mt-2 w-full" v-if="searchColumns.length > 0">
<a-space size="medium"> <a-space size="medium">
<slot name="searchBeforeButtons" /> <slot name="searchBeforeButtons" />
<slot name="searchButtons"> <slot name="searchButtons">

View File

@@ -25,9 +25,9 @@
</a-space> </a-space>
<a-alert type="warning" class="mt-2" <a-alert type="warning" class="mt-2"
>排序本页是指当前页排序服务器是指后台排序若自定义服务器排序可用 >排序本页是指当前页排序服务器是指后台排序后台排序暂无
<a-tag>@sorterChange</a-tag> 事件来实现</a-alert <!-- <a-tag>@sorterChange</a-tag> 事件来实现 -->
> </a-alert>
<a-table <a-table
:data="allowShowColumns" :data="allowShowColumns"
:pagination="false" :pagination="false"

View File

@@ -1,6 +1,6 @@
<template> <template>
<a-layout-content class="flex flex-col lg:h-full relative w-full"> <a-layout-content class="flex flex-col lg:h-full relative w-full">
<div class="_crud-header flex flex-col mb-2" ref="crudHeaderRef"> <div class="_crud-header flex flex-col mb-1" ref="crudHeaderRef">
<a-tabs <a-tabs
v-if="isArray(options.tabs.data) && options.tabs.data.length > 0" v-if="isArray(options.tabs.data) && options.tabs.data.length > 0"
v-model:active-key="options.tabs.defaultKey" v-model:active-key="options.tabs.defaultKey"

View File

@@ -1,7 +1,3 @@
<!--
- @Author XXX
- @Link XXX
-->
<template> <template>
<ma-form-item <ma-form-item
v-if="typeof props.component.display == 'undefined' || props.component.display === true" v-if="typeof props.component.display == 'undefined' || props.component.display === true"
@@ -130,6 +126,87 @@
</a-pagination> </a-pagination>
</div> </div>
</template> </template>
<!-- 改动1、2、3下面template都是改动内容 -->
<template #footer v-else-if="component.allowCreate">
<div style="padding: 6px 0; text-align: center">
<!-- 新增columns属性onCreate -->
<a-popover
:title="component.createInfo ? component.createInfo.title : '无标题'"
trigger="click"
>
<a-button size="small" type="primary">点击新增</a-button>
<template #content>
<a-row :wrap="false">
<a-input
:style="{ width: '320px' }"
:placeholder="`请输入新增的${component.createInfo.title}`"
allow-clear
v-model="createItem"
/>
<a-button
type="primary"
@click="handleCreteSubmit(component.onCreate)"
:loading="createLoading"
>提交</a-button
>
</a-row>
</template>
</a-popover>
</div>
</template>
<template #footer v-else-if="component.allowNew && !component.allowCreate">
<div style="padding: 6px 0; text-align: center">
<a-popover :title="component.newInfo ? component.newInfo.title : '无标题'" trigger="click">
<a-button size="small" type="primary">快速新增</a-button>
<template #content>
<ma-form
@submit="handleContactFormSubmit"
v-model="contactFormData"
:columns="contactFormOptions"
ref="contactForm"
></ma-form>
</template>
</a-popover>
</div>
</template>
<template #footer v-else-if="component.allowAbbrNew && !component.allowCreate && !component.allowNew">
<div style="padding: 6px 0; text-align: center">
<a-popover
:title="component.abbrNewInfo ? component.abbrNewInfo.title : '无标题'"
trigger="click"
>
<a-button size="small" type="primary">快速新增缩略语</a-button>
<template #content>
<ma-form
@submit="handleAbbrFormSubmit"
v-model="abbrFormData"
:columns="abbrFormOptions"
ref="abbrForm"
></ma-form>
</template>
</a-popover>
</div>
</template>
<template
#footer
v-else-if="
component.allowStd && !component.allowAbbrNew && !component.allowCreate && !component.allowNew
"
>
<div style="padding: 6px 0; text-align: center">
<a-popover :title="component.stdInfo ? component.stdInfo.title : '无标题'" trigger="click">
<a-button size="small" type="primary">快速新增依据标准</a-button>
<template #content>
<ma-form
@submit="handleStdFormSubmit"
v-model="stdFormData"
:columns="stdFormOptions"
ref="stdForm"
></ma-form>
</template>
</a-popover>
</div>
</template>
</a-select> </a-select>
</slot> </slot>
</ma-form-item> </ma-form-item>
@@ -141,6 +218,138 @@ import MaFormItem from "./form-item.vue"
import { get, isUndefined, set, xor, isObject, isBoolean } from "lodash-es" import { get, isUndefined, set, xor, isObject, isBoolean } from "lodash-es"
import { runEvent } from "../js/event.js" import { runEvent } from "../js/event.js"
import { handlerCascader, loadDict } from "../js/networkRequest.js" import { handlerCascader, loadDict } from "../js/networkRequest.js"
import { Message, Notification } from "@arco-design/web-vue"
// 改动2快速新增联系单位信息[耦合内容] - start
import { columnsOptions as contactColumnOption } from "@/views/datamanage/projContact/crudColumns"
import { columnsOptions as abbrColumnOption } from "@/views/datamanage/abbreviation/columnsOptions"
import useDictItemCrud from "@/views/datamanage/dictmanage/DataList/useCrudRef.ts"
import tool from "@/utils/tool"
import contactApi from "@/api/system/contact"
import abbrApi from "@/api/system/abbreviation"
import dictApi from "@/api/system/dict"
//// 1. 处理快速新增单位
const contactFormOptions = ref(
tool.renameKeyInArray(
contactColumnOption.filter((it) => it.dataIndex !== "id"),
"commonRules",
"rules"
)
)
const contactFormData = ref({})
const handleContactFormSubmit = async (data, done) => {
done(true)
try {
const res = await contactApi.save(data)
// 更新当前select的选项
const newInfo = {
label: res.data.name,
value: res.data.name,
disabled: false,
indeterminate: false
}
dictList.value["entrust_unit"].push(newInfo)
dictList.value["test_unit"].push(newInfo)
dictList.value["dev_unit"].push(newInfo)
// 清空当前数据
contactFormData.value = {}
Notification.success("添加成功,请回到输入框进行选择")
} catch (err) {
Notification.error("请求错误,请重试或在数据管理页面添加")
} finally {
done(false)
}
}
//// 2. 处理快速新增缩略语
const abbrFormOptions = ref(
tool.renameKeyInArray(
abbrColumnOption.filter((it) => it.dataIndex !== "id"),
"commonRules",
"rules"
)
)
const abbrFormData = ref({})
const handleAbbrFormSubmit = async (data, done) => {
done(true)
try {
const res = await abbrApi.save(data)
// 更新当前select的选项
const newInfo = {
label: res.data.title,
value: res.data.title,
disabled: false,
indeterminate: false
}
dictList.value["abbreviation"].push(newInfo)
// 清空当前数据
abbrFormData.value = {}
Notification.success("添加成功,请回到输入框进行选择")
} catch (err) {
Notification.error("请求错误,请重试或在数据管理页面添加")
} finally {
done(false)
}
}
//// 3. 处理快速依据标准
const { columns: dictColumnOptions } = useDictItemCrud()
const initStdFormData = {
status: "1",
code: "standard",
sort: 1
}
const stdFormData = ref(initStdFormData)
const stdFormOptions = computed(() => {
const options = tool.renameKeyInArray(
dictColumnOptions.value.filter(
(it) => it.dataIndex !== "id" && it.dataIndex !== "update_datetime" && it.dataIndex !== "key"
),
"commonRules",
"rules"
)
return options.map((it) => {
if (it.dataIndex === "doc_name") {
return {
...it,
rules: [{ required: true, message: "文档名称必填" }]
}
}
if (it.dataIndex === "publish_date") {
return {
...it,
rules: [{ required: true, message: "发布日期必填" }]
}
}
if (it.dataIndex === "source") {
return {
...it,
rules: [{ required: true, message: "来源机构必填" }]
}
}
return it
})
})
const handleStdFormSubmit = async (data, done) => {
done(true)
try {
const res = await dictApi.createDictItemStdFast(data)
// 更新当前select的选项
const newInfo = {
label: res.data.doc_name,
value: res.data.key,
disabled: false,
indeterminate: false
}
dictList.value["standard"].push(newInfo)
// 清空当前数据
stdFormData.value = initStdFormData
Notification.success("添加成功,请回到输入框进行选择")
} catch (err) {
Notification.error("请求错误,请重试或在数据管理页面添加")
} finally {
done(false)
}
}
// 改动2结束 - end
const props = defineProps({ const props = defineProps({
component: Object, component: Object,
@@ -159,8 +368,9 @@ const dictList = inject("dictList")
const formLoading = inject("formLoading") const formLoading = inject("formLoading")
const columns = inject("columns") const columns = inject("columns")
const getColumnService = inject("getColumnService") const getColumnService = inject("getColumnService")
const rv = async (ev, value = "") => const rv = async (ev, value = "") => {
await runEvent(props.component, ev, { formModel, getColumnService, columns }, value) await runEvent(props.component, ev, { formModel, getColumnService, columns }, value)
}
const index = props.customField ?? props.component.dataIndex const index = props.customField ?? props.component.dataIndex
const dictIndex = index.match(/^(\w+\.)\d+\./) const dictIndex = index.match(/^(\w+\.)\d+\./)
@@ -172,6 +382,38 @@ const loading = ref(false)
const optionMap = ref({}) const optionMap = ref({})
const keyword = ref("") const keyword = ref("")
// 改动1新增按钮处理
const createItem = ref("") // 新增string
const createLoading = ref(false) // 新增loading状态
const handleCreteSubmit = async (onCreate) => {
// 判断是否为空
if (!createItem.value.trim()) {
Message.error("请填写新增内容")
return
}
createLoading.value = true
try {
const code = await onCreate(createItem.value)
// 处理回显内容-更新当前select的选项
const optionList = dictList.value[code]
const new_dict_item = {
label: createItem.value,
value: (optionList.length + 1).toString(),
disabled: false,
indeterminate: false
}
optionList.push(new_dict_item)
} catch (err) {
// 弹出错误
Message.error("新增出错")
} finally {
createItem.value = ""
createLoading.value = false
Notification.success("新增成功,请重新选择新增内容")
}
}
// 改动1结束
watch( watch(
() => get(formModel.value, index), () => get(formModel.value, index),
(vl) => (value.value = vl) (vl) => (value.value = vl)
@@ -271,6 +513,7 @@ const handlePage = async (page) => {
loading.value = false loading.value = false
} }
// 搜索当前字典内容
const handlerFallback = (key) => { const handlerFallback = (key) => {
return optionMap.value[key] || key return optionMap.value[key] || key
} }

View File

@@ -11,7 +11,7 @@
:allow-clear="props.component.allowClear ?? true" :allow-clear="props.component.allowClear ?? true"
:disabled="props.component.disabled" :disabled="props.component.disabled"
:readonly="props.component.readonly" :readonly="props.component.readonly"
:auto-size="props.component.autoSize" :auto-size="props.component.autoSize || true"
:error="props.component.error" :error="props.component.error"
:placeholder="props.component.placeholder ?? `请输入${props.component.title}`" :placeholder="props.component.placeholder ?? `请输入${props.component.title}`"
:max-length="props.component.maxLength" :max-length="props.component.maxLength"

View File

@@ -24,6 +24,7 @@ app.use(ArcoVueIcon)
app.use(router) app.use(router)
app.use(pinia) app.use(pinia)
app.use(globalComponents) app.use(globalComponents)
// 使用服务端请求数据管理库 // 使用服务端请求数据管理库
import { VueQueryPlugin } from "@tanstack/vue-query" import { VueQueryPlugin } from "@tanstack/vue-query"
app.use(VueQueryPlugin) app.use(VueQueryPlugin)

View File

@@ -13,3 +13,22 @@ body {
--border-radius-medium: 0px; --border-radius-medium: 0px;
--border-radius-large: 0px; --border-radius-large: 0px;
} }
// 覆盖arco表单行间距为3px原来为20px
.arco-form-item {
display: flex;
align-items: flex-start;
justify-content: flex-start;
width: 100%;
margin-bottom: 5px;
}
// 覆盖card组件actions的margin-top原来为20px
.arco-card-actions{
margin-top: 0px !important;
}
// 覆盖card组件padding原来为16px
.arco-card-body{
padding: 8px !important;
}

View File

@@ -105,4 +105,7 @@ defineOptions({
.top-box { .top-box {
font-size: 2rem; font-size: 2rem;
} }
:deep(.arco-form-item) {
margin-bottom: 20px; /* 覆盖默认样式 */
}
</style> </style>

View File

@@ -51,7 +51,6 @@ const crudOptions = reactive({
// 是否显示操作列 // 是否显示操作列
operationColumn: true, operationColumn: true,
operationWidth: 200, operationWidth: 200,
showTools: false,
// 设置列表数据API // 设置列表数据API
api: userApi.getPageList, api: userApi.getPageList,
// 设置新增接口-show为true则显示按钮 // 设置新增接口-show为true则显示按钮

View File

@@ -0,0 +1,19 @@
export const columnsOptions = [
{ title: "ID", dataIndex: "id", addDisplay: false, editDisplay: false, width: 50, hide: true },
{
title: "缩略语",
align: "center",
width: 200,
dataIndex: "title",
search: true,
commonRules: [{ required: true, message: "缩略语必填" }]
},
{
title: "全称",
align: "center",
dataIndex: "des",
search: true,
ellipsis: true,
commonRules: [{ required: true, message: "全称和描述必填" }]
}
]

View File

@@ -10,6 +10,7 @@
<script lang="jsx" setup> <script lang="jsx" setup>
import { ref } from "vue" import { ref } from "vue"
import abbreviationApi from "@/api/system/abbreviation" import abbreviationApi from "@/api/system/abbreviation"
import { columnsOptions } from "./columnsOptions.ts"
const crudRef = ref() const crudRef = ref()
const crudOptions = ref({ const crudOptions = ref({
@@ -29,25 +30,7 @@ const crudOptions = ref({
crudRef.value.tableRef.selectAll(false) crudRef.value.tableRef.selectAll(false)
} }
}) })
const crudColumns = ref([ const crudColumns = ref(columnsOptions)
{ title: "ID", dataIndex: "id", addDisplay: false, editDisplay: false, width: 50, hide: true },
{
title: "缩略语",
align: "center",
width: 200,
dataIndex: "title",
search: true,
commonRules: [{ required: true, message: "缩略语必填" }]
},
{
title: "全称",
align: "center",
dataIndex: "des",
search: true,
ellipsis: true,
commonRules: [{ required: true, message: "全称和描述必填" }]
}
])
defineOptions({ defineOptions({
name: "abbreviation" name: "abbreviation"

View File

@@ -14,7 +14,6 @@ export default function useCrudRef(currentRow: Ref<{ id: number | string; name:
operationColumn: true, operationColumn: true,
operationWidth: 160, operationWidth: 160,
operationColumnAlign: "center", operationColumnAlign: "center",
showTools: false,
beforeAdd: (form: any) => { beforeAdd: (form: any) => {
form.id = currentRow.value?.id form.id = currentRow.value?.id
return true return true
@@ -95,21 +94,22 @@ export default function useCrudRef(currentRow: Ref<{ id: number | string; name:
dataIndex: "doc_name", dataIndex: "doc_name",
align: "center", align: "center",
search: false, search: false,
placeholder: "如果不是标准则不填" placeholder: "不是标准则不填"
}, },
{ {
title: "发布日期", title: "发布日期",
dataIndex: "publish_date", dataIndex: "publish_date",
align: "center", align: "center",
search: false, search: false,
placeholder: "如果不是标准则不填" placeholder: "不是标准则不填,该文档发布日期",
formType: "date"
}, },
{ {
title: "标准来源", title: "标准来源",
dataIndex: "source", dataIndex: "source",
align: "center", align: "center",
search: false, search: false,
placeholder: "如果不是标准则不填" placeholder: "不是标准则不填,文档发布机构"
} }
]) ])

View File

@@ -28,7 +28,6 @@ export default function useDictCrud() {
searchColNumber: 4, searchColNumber: 4,
tablePagination: false, tablePagination: false,
operationColumn: true, operationColumn: true,
showTools: false,
afterDelete() { afterDelete() {
crudRef.value.tableRef.selectAll(false) crudRef.value.tableRef.selectAll(false)
} }

View File

@@ -0,0 +1,34 @@
export const columnsOptions = [
{ title: "ID", dataIndex: "id", addDisplay: false, editDisplay: false, width: 50, hide: true },
{ title: "公司编号", align: "center", dataIndex: "key", search: true, width: 70, formType: "input-number" },
{
title: "名称",
align: "center",
dataIndex: "name",
search: true,
commonRules: [{ required: true, message: "名称必填" }]
},
{
title: "简称",
align: "center",
dataIndex: "refer_name",
width: 200,
search: true,
commonRules: [{ required: true, message: "简称必填" }]
},
{
title: "法人",
align: "center",
dataIndex: "entrust_person",
search: true,
width: 90,
commonRules: [{ required: true, message: "法人必填" }]
},
{
title: "地址",
align: "center",
dataIndex: "addr",
search: true,
commonRules: [{ required: true, message: "公司地址必填" }]
}
]

View File

@@ -10,6 +10,7 @@
<script setup> <script setup>
import { ref } from "vue" import { ref } from "vue"
import contactApi from "@/api/system/contact" import contactApi from "@/api/system/contact"
import { columnsOptions } from "./crudColumns"
const crudRef = ref() const crudRef = ref()
const crudOptions = ref({ const crudOptions = ref({
@@ -25,45 +26,11 @@ const crudOptions = ref({
searchColNumber: 3, searchColNumber: 3,
tablePagination: false, tablePagination: false,
rowSelection: { showCheckedAll: true }, rowSelection: { showCheckedAll: true },
showTools: false,
afterDelete() { afterDelete() {
crudRef.value.tableRef.selectAll(false) crudRef.value.tableRef.selectAll(false)
} }
}) })
const crudColumns = ref([ const crudColumns = ref(columnsOptions)
{ title: "ID", dataIndex: "id", addDisplay: false, editDisplay: false, width: 50, hide: true },
{ title: "公司编号", align: "center", dataIndex: "key", search: true, width: 70, formType: "input-number" },
{
title: "名称",
align: "center",
dataIndex: "name",
search: true,
commonRules: [{ required: true, message: "名称必填" }]
},
{
title: "简称",
align: "center",
dataIndex: "refer_name",
width: 200,
search: true,
commonRules: [{ required: true, message: "简称必填" }]
},
{
title: "法人",
align: "center",
dataIndex: "entrust_person",
search: true,
width: 90,
commonRules: [{ required: true, message: "法人必填" }]
},
{
title: "地址",
align: "center",
dataIndex: "addr",
search: true,
commonRules: [{ required: true, message: "公司地址必填" }]
}
])
</script> </script>
<style lang="less" scoped></style> <style lang="less" scoped></style>

View File

@@ -8,7 +8,10 @@
<img src="@/assets/img/wxwx-logo.svg" width="45" /><span>{{ $title }}</span> <img src="@/assets/img/wxwx-logo.svg" width="45" /><span>{{ $title }}</span>
</div> </div>
<div class="slogan flex justify-end"> <div class="slogan flex justify-end">
<span class="font-extrabold bg-clip-text text-transparent bg-gradient-to-r from-blue-500 to-purple-600">---- 为测评服务打造测评高地</span> <span
class="font-extrabold bg-clip-text text-transparent bg-gradient-to-r from-blue-500 to-purple-600"
>---- 为测评服务打造测评高地</span
>
</div> </div>
</div> </div>
@@ -228,4 +231,8 @@ const handleSubmit = async ({ values, errors }) => {
background: #f3ce2b; background: #f3ce2b;
} }
} }
:deep(.arco-form-item) {
margin-bottom: 20px; /* 覆盖默认样式 */
}
</style> </style>

View File

@@ -53,7 +53,6 @@ const crudOptions = ref({
api: logApi.getLoginLogs, api: logApi.getLoginLogs,
edit: { api: editClick, text: "查看操作日志信息", show: false }, edit: { api: editClick, text: "查看操作日志信息", show: false },
showIndex: false, showIndex: false,
showTools: false,
pageLayout: "fixed", pageLayout: "fixed",
tablePagination: false, tablePagination: false,
operationColumn: true, operationColumn: true,

View File

@@ -29,7 +29,6 @@ const crudOptions = reactive({
api: operationApi.getOperationsLogs, api: operationApi.getOperationsLogs,
showIndex: false, showIndex: false,
pageLayout: "fixed", pageLayout: "fixed",
showTools: false,
tablePagination: false, tablePagination: false,
bordered: { wrapper: true, cell: true }, bordered: { wrapper: true, cell: true },
afterDelete(response) { afterDelete(response) {

View File

@@ -53,7 +53,6 @@ const crudOptions = ref({
api: logApi.getOperations, api: logApi.getOperations,
edit: { api: editClick, text: "查看操作日志信息", show: false }, edit: { api: editClick, text: "查看操作日志信息", show: false },
showIndex: false, showIndex: false,
showTools: false,
pageLayout: "fixed", pageLayout: "fixed",
tablePagination: false, tablePagination: false,
operationColumn: true, operationColumn: true,

View File

@@ -137,7 +137,6 @@ const crudOptions = ref({
projectId: route.query.id, projectId: route.query.id,
key: route.query.key key: route.query.key
}, },
showTools: false, // 不显示工具栏
operationColumn: true, operationColumn: true,
operationColumnAlign: "center", // 操作列居中 operationColumnAlign: "center", // 操作列居中
isDbClickEdit: false, // 双击不编辑当前列 isDbClickEdit: false, // 双击不编辑当前列

View File

@@ -124,7 +124,6 @@ const crudOptions = ref({
return tableData return tableData
}, },
showIndex: false, showIndex: false,
showTools: false,
operationColumnAlign: "center", operationColumnAlign: "center",
rowSelection: { showCheckedAll: true }, rowSelection: { showCheckedAll: true },
searchColNumber: 3, searchColNumber: 3,

View File

@@ -48,7 +48,6 @@ export default function (crudRef: Ref<InstanceType<typeof MaCrud>>) {
add: { show: true, api: testDemandApi.save, text: "新增测试项" }, add: { show: true, api: testDemandApi.save, text: "新增测试项" },
edit: { show: true, api: testDemandApi.update, text: "修改测试项" }, edit: { show: true, api: testDemandApi.update, text: "修改测试项" },
delete: { show: true, api: testDemandApi.delete }, delete: { show: true, api: testDemandApi.delete },
showTools: false,
beforeOpenAdd: function () { beforeOpenAdd: function () {
// 1.新增则将form的content数据变为undifined以便判断 // 1.新增则将form的content数据变为undifined以便判断
beforeFormContent = undefined beforeFormContent = undefined

View File

@@ -68,7 +68,6 @@ export default function (crudRef: Ref<InstanceType<typeof MaCrud>>) {
formOption: { formOption: {
width: 1200 width: 1200
}, },
showTools: false
}) })
return crudOptions return crudOptions
} }

View File

@@ -54,7 +54,6 @@ export default function (crudRef: Ref<InstanceType<typeof MaCrud>>) {
}, },
operationWidth: 500, operationWidth: 500,
showIndex: false, showIndex: false,
showTools: false,
rowSelection: { showCheckedAll: true }, rowSelection: { showCheckedAll: true },
searchColNumber: 3, searchColNumber: 3,
tablePagination: false, tablePagination: false,

View File

@@ -106,7 +106,6 @@ export default function (crudRef: Ref<InstanceType<typeof MaCrud>>) {
testDemand: testDemandNumber testDemand: testDemandNumber
}, },
showIndex: false, showIndex: false,
showTools: false,
rowSelection: { showCheckedAll: true }, rowSelection: { showCheckedAll: true },
searchColNumber: 3, searchColNumber: 3,
tablePagination: false, tablePagination: false,

View File

@@ -98,7 +98,6 @@ const useCrudOption = () => {
afterDelete(response: any) { afterDelete(response: any) {
crudRef.value.tableRef.selectAll(false) crudRef.value.tableRef.selectAll(false)
}, },
showTools: false,
operationColumn: true, operationColumn: true,
operationColumnWidth: 180, operationColumnWidth: 180,
operationColumnAlign: "center", operationColumnAlign: "center",

View File

@@ -2,6 +2,7 @@ import { ref } from "vue"
import { validateBlank, validateWindowFileNameInput } from "@/utils/extensions/arcoValidator" import { validateBlank, validateWindowFileNameInput } from "@/utils/extensions/arcoValidator"
import textInfo from "@/config/textInfo" import textInfo from "@/config/textInfo"
import projectApi from "@/api/testmanage/project" import projectApi from "@/api/testmanage/project"
import dictApi from "@/api/system/dict"
const useCrudInit = function () { const useCrudInit = function () {
const crudRef = ref() const crudRef = ref()
@@ -16,7 +17,6 @@ const useCrudInit = function () {
operationColumn: true, operationColumn: true,
operationWidth: 500, operationWidth: 500,
showIndex: false, showIndex: false,
showTools: false,
operationColumnWidth: 280, // 操作列宽度 operationColumnWidth: 280, // 操作列宽度
operationColumnAlign: "center", // 操作列对齐方式 operationColumnAlign: "center", // 操作列对齐方式
afterDelete(response: any) { afterDelete(response: any) {
@@ -225,6 +225,14 @@ const useCrudInit = function () {
hide: true, hide: true,
search: false, search: false,
formType: "select", formType: "select",
allowCreate: true,
createInfo: {
title: "运行环境"
},
onCreate: async (value: any) => {
await dictApi.createDictItemFast({ code: "runtime", title: value })
return "runtime"
},
dict: { name: "runtime", props: { label: "title", value: "key" } } dict: { name: "runtime", props: { label: "title", value: "key" } }
}, },
{ {
@@ -233,6 +241,8 @@ const useCrudInit = function () {
hide: true, hide: true,
search: true, search: true,
formType: "select", formType: "select",
// 多选最大标签数量
maxTagCount: 7,
multiple: true, multiple: true,
dict: { url: "system/user/list", props: { label: "name", value: "name" }, translation: true }, dict: { url: "system/user/list", props: { label: "name", value: "name" }, translation: true },
commonRules: [{ required: true, message: "成员至少选择一个" }] commonRules: [{ required: true, message: "成员至少选择一个" }]
@@ -261,12 +271,24 @@ const useCrudInit = function () {
search: false, search: false,
formType: "select", formType: "select",
allowCreate: true, allowCreate: true,
createInfo: {
title: "开发环境"
},
onCreate: async (value: any) => {
await dictApi.createDictItemFast({ code: "devplant", title: value })
return "devplant"
},
dict: { name: "devplant", props: { label: "title", value: "key" } } dict: { name: "devplant", props: { label: "title", value: "key" } }
}, },
{ {
title: "缩略语", title: "缩略语",
dataIndex: "abbreviation", dataIndex: "abbreviation",
hide: true, hide: true,
// 快速新增缩略语内容
allowAbbrNew: true,
abbrNewInfo: {
title: "新增缩略语"
},
search: false, search: false,
formType: "select", formType: "select",
multiple: true, multiple: true,
@@ -339,6 +361,7 @@ const useCrudInit = function () {
title: "编程语言", title: "编程语言",
dataIndex: "language", dataIndex: "language",
addDefaultValue: ["1"], addDefaultValue: ["1"],
maxTagCount: 4,
commonRules: [{ required: true, message: "请至少选择一个" }], commonRules: [{ required: true, message: "请至少选择一个" }],
hide: true, hide: true,
formType: "select", formType: "select",
@@ -349,16 +372,27 @@ const useCrudInit = function () {
title: "依据标准", title: "依据标准",
dataIndex: "standard", dataIndex: "standard",
addDefaultValue: ["1", "2", "3", "4", "9"], addDefaultValue: ["1", "2", "3", "4", "9"],
maxTagCount: 20,
commonRules: [{ required: true, message: "请至少选择一个" }], commonRules: [{ required: true, message: "请至少选择一个" }],
hide: true, hide: true,
multiple: true, multiple: true,
formType: "select", formType: "select",
dict: { name: "standard", props: { label: "title", value: "key" } } dict: { name: "standard", props: { label: "title", value: "key" } },
// 新增select选项
allowStd: true,
stdInfo: {
title: "新增标准"
}
}, },
{ {
title: "单位", title: "单位",
dataIndex: "entrust_unit", dataIndex: "entrust_unit",
hide: true, hide: true,
// 快速新增单位内容
allowNew: true,
newInfo: {
title: "新增单位信息"
},
commonRules: [{ required: true, message: "单位必选" }], commonRules: [{ required: true, message: "单位必选" }],
formType: "select", formType: "select",
dict: { url: "system/contact/index", props: { label: "name", value: "name" }, translation: true } dict: { url: "system/contact/index", props: { label: "name", value: "name" }, translation: true }
@@ -393,6 +427,11 @@ const useCrudInit = function () {
{ {
title: "单位", title: "单位",
dataIndex: "dev_unit", dataIndex: "dev_unit",
// 快速新增单位内容
allowNew: true,
newInfo: {
title: "新增单位信息"
},
hide: true, hide: true,
commonRules: [{ required: true, message: "单位必选" }], commonRules: [{ required: true, message: "单位必选" }],
formType: "select", formType: "select",
@@ -429,6 +468,11 @@ const useCrudInit = function () {
title: "单位", title: "单位",
dataIndex: "test_unit", dataIndex: "test_unit",
hide: true, hide: true,
// 快速新增单位内容
allowNew: true,
newInfo: {
title: "新增单位信息"
},
addDefaultValue: textInfo.testUnitAddDefaultText, addDefaultValue: textInfo.testUnitAddDefaultText,
commonRules: [{ required: true, message: "单位必选" }], commonRules: [{ required: true, message: "单位必选" }],
formType: "select", formType: "select",

View File

@@ -109,7 +109,7 @@
</div> </div>
</template> </template>
<script lang="jsx" setup> <script setup lang="jsx">
import { ref } from "vue" import { ref } from "vue"
import { useRouter } from "vue-router" import { useRouter } from "vue-router"
import preview from "./cpns/preview.vue" import preview from "./cpns/preview.vue"