This commit is contained in:
2024-06-20 19:12:13 +08:00
parent 12f0406a48
commit 4a6e6f4ac4
22 changed files with 509 additions and 204 deletions

View File

@@ -1,4 +1,4 @@
VITE_APP_TITLE = ChengduTestManagePlant VITE_APP_TITLE = TestManagePlant
VITE_APP_PORT = 3888 VITE_APP_PORT = 3888
VITE_APP_OPEN_PROXY = true VITE_APP_OPEN_PROXY = true
VITE_APP_BASE = / VITE_APP_BASE = /

317
cdTMP/package-lock.json generated
View File

@@ -28,7 +28,7 @@
"qs": "^6.11.2", "qs": "^6.11.2",
"sortablejs": "^1.15.0", "sortablejs": "^1.15.0",
"tinymce": "^6.8.3", "tinymce": "^6.8.3",
"vue": "^3.4.27", "vue": "^3.4.29",
"vue-clipboard3": "^2.0.0", "vue-clipboard3": "^2.0.0",
"vue-color-kit": "^1.0.5", "vue-color-kit": "^1.0.5",
"vue-echarts": "^6.5.5", "vue-echarts": "^6.5.5",
@@ -54,7 +54,7 @@
"postcss": "^8.4.38", "postcss": "^8.4.38",
"prettier": "^2.8.8", "prettier": "^2.8.8",
"tailwindcss": "^3.3.2", "tailwindcss": "^3.3.2",
"vite": "^5.2.12" "vite": "^5.3.1"
} }
}, },
"node_modules/@alloc/quick-lru": { "node_modules/@alloc/quick-lru": {
@@ -430,9 +430,9 @@
} }
}, },
"node_modules/@babel/parser": { "node_modules/@babel/parser": {
"version": "7.24.6", "version": "7.24.7",
"resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.24.6.tgz", "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.24.7.tgz",
"integrity": "sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==", "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==",
"bin": { "bin": {
"parser": "bin/babel-parser.js" "parser": "bin/babel-parser.js"
}, },
@@ -538,9 +538,9 @@
} }
}, },
"node_modules/@esbuild/aix-ppc64": { "node_modules/@esbuild/aix-ppc64": {
"version": "0.20.2", "version": "0.21.5",
"resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
"integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
"cpu": [ "cpu": [
"ppc64" "ppc64"
], ],
@@ -554,9 +554,9 @@
} }
}, },
"node_modules/@esbuild/android-arm": { "node_modules/@esbuild/android-arm": {
"version": "0.20.2", "version": "0.21.5",
"resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz", "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
"integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@@ -570,9 +570,9 @@
} }
}, },
"node_modules/@esbuild/android-arm64": { "node_modules/@esbuild/android-arm64": {
"version": "0.20.2", "version": "0.21.5",
"resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
"integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -586,9 +586,9 @@
} }
}, },
"node_modules/@esbuild/android-x64": { "node_modules/@esbuild/android-x64": {
"version": "0.20.2", "version": "0.21.5",
"resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz", "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
"integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -602,9 +602,9 @@
} }
}, },
"node_modules/@esbuild/darwin-arm64": { "node_modules/@esbuild/darwin-arm64": {
"version": "0.20.2", "version": "0.21.5",
"resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
"integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -618,9 +618,9 @@
} }
}, },
"node_modules/@esbuild/darwin-x64": { "node_modules/@esbuild/darwin-x64": {
"version": "0.20.2", "version": "0.21.5",
"resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
"integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -634,9 +634,9 @@
} }
}, },
"node_modules/@esbuild/freebsd-arm64": { "node_modules/@esbuild/freebsd-arm64": {
"version": "0.20.2", "version": "0.21.5",
"resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
"integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -650,9 +650,9 @@
} }
}, },
"node_modules/@esbuild/freebsd-x64": { "node_modules/@esbuild/freebsd-x64": {
"version": "0.20.2", "version": "0.21.5",
"resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
"integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -666,9 +666,9 @@
} }
}, },
"node_modules/@esbuild/linux-arm": { "node_modules/@esbuild/linux-arm": {
"version": "0.20.2", "version": "0.21.5",
"resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
"integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@@ -682,9 +682,9 @@
} }
}, },
"node_modules/@esbuild/linux-arm64": { "node_modules/@esbuild/linux-arm64": {
"version": "0.20.2", "version": "0.21.5",
"resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
"integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -698,9 +698,9 @@
} }
}, },
"node_modules/@esbuild/linux-ia32": { "node_modules/@esbuild/linux-ia32": {
"version": "0.20.2", "version": "0.21.5",
"resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
"integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
"cpu": [ "cpu": [
"ia32" "ia32"
], ],
@@ -714,9 +714,9 @@
} }
}, },
"node_modules/@esbuild/linux-loong64": { "node_modules/@esbuild/linux-loong64": {
"version": "0.20.2", "version": "0.21.5",
"resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
"integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
"cpu": [ "cpu": [
"loong64" "loong64"
], ],
@@ -730,9 +730,9 @@
} }
}, },
"node_modules/@esbuild/linux-mips64el": { "node_modules/@esbuild/linux-mips64el": {
"version": "0.20.2", "version": "0.21.5",
"resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
"integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
"cpu": [ "cpu": [
"mips64el" "mips64el"
], ],
@@ -746,9 +746,9 @@
} }
}, },
"node_modules/@esbuild/linux-ppc64": { "node_modules/@esbuild/linux-ppc64": {
"version": "0.20.2", "version": "0.21.5",
"resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
"integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
"cpu": [ "cpu": [
"ppc64" "ppc64"
], ],
@@ -762,9 +762,9 @@
} }
}, },
"node_modules/@esbuild/linux-riscv64": { "node_modules/@esbuild/linux-riscv64": {
"version": "0.20.2", "version": "0.21.5",
"resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
"integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
"cpu": [ "cpu": [
"riscv64" "riscv64"
], ],
@@ -778,9 +778,9 @@
} }
}, },
"node_modules/@esbuild/linux-s390x": { "node_modules/@esbuild/linux-s390x": {
"version": "0.20.2", "version": "0.21.5",
"resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
"integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
"cpu": [ "cpu": [
"s390x" "s390x"
], ],
@@ -794,9 +794,9 @@
} }
}, },
"node_modules/@esbuild/linux-x64": { "node_modules/@esbuild/linux-x64": {
"version": "0.20.2", "version": "0.21.5",
"resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
"integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -810,9 +810,9 @@
} }
}, },
"node_modules/@esbuild/netbsd-x64": { "node_modules/@esbuild/netbsd-x64": {
"version": "0.20.2", "version": "0.21.5",
"resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
"integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -826,9 +826,9 @@
} }
}, },
"node_modules/@esbuild/openbsd-x64": { "node_modules/@esbuild/openbsd-x64": {
"version": "0.20.2", "version": "0.21.5",
"resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
"integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -842,9 +842,9 @@
} }
}, },
"node_modules/@esbuild/sunos-x64": { "node_modules/@esbuild/sunos-x64": {
"version": "0.20.2", "version": "0.21.5",
"resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
"integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -858,9 +858,9 @@
} }
}, },
"node_modules/@esbuild/win32-arm64": { "node_modules/@esbuild/win32-arm64": {
"version": "0.20.2", "version": "0.21.5",
"resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
"integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -874,9 +874,9 @@
} }
}, },
"node_modules/@esbuild/win32-ia32": { "node_modules/@esbuild/win32-ia32": {
"version": "0.20.2", "version": "0.21.5",
"resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
"integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
"cpu": [ "cpu": [
"ia32" "ia32"
], ],
@@ -890,9 +890,9 @@
} }
}, },
"node_modules/@esbuild/win32-x64": { "node_modules/@esbuild/win32-x64": {
"version": "0.20.2", "version": "0.21.5",
"resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
"integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -1501,36 +1501,36 @@
} }
}, },
"node_modules/@vue/compiler-core": { "node_modules/@vue/compiler-core": {
"version": "3.4.27", "version": "3.4.29",
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.4.27.tgz", "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.4.29.tgz",
"integrity": "sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==", "integrity": "sha512-TFKiRkKKsRCKvg/jTSSKK7mYLJEQdUiUfykbG49rubC9SfDyvT2JrzTReopWlz2MxqeLyxh9UZhvxEIBgAhtrg==",
"dependencies": { "dependencies": {
"@babel/parser": "^7.24.4", "@babel/parser": "^7.24.7",
"@vue/shared": "3.4.27", "@vue/shared": "3.4.29",
"entities": "^4.5.0", "entities": "^4.5.0",
"estree-walker": "^2.0.2", "estree-walker": "^2.0.2",
"source-map-js": "^1.2.0" "source-map-js": "^1.2.0"
} }
}, },
"node_modules/@vue/compiler-dom": { "node_modules/@vue/compiler-dom": {
"version": "3.4.27", "version": "3.4.29",
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz", "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.4.29.tgz",
"integrity": "sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==", "integrity": "sha512-A6+iZ2fKIEGnfPJejdB7b1FlJzgiD+Y/sxxKwJWg1EbJu6ZPgzaPQQ51ESGNv0CP6jm6Z7/pO6Ia8Ze6IKrX7w==",
"dependencies": { "dependencies": {
"@vue/compiler-core": "3.4.27", "@vue/compiler-core": "3.4.29",
"@vue/shared": "3.4.27" "@vue/shared": "3.4.29"
} }
}, },
"node_modules/@vue/compiler-sfc": { "node_modules/@vue/compiler-sfc": {
"version": "3.4.27", "version": "3.4.29",
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.4.27.tgz", "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.4.29.tgz",
"integrity": "sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA==", "integrity": "sha512-zygDcEtn8ZimDlrEQyLUovoWgKQic6aEQqRXce2WXBvSeHbEbcAsXyCk9oG33ZkyWH4sl9D3tkYc1idoOkdqZQ==",
"dependencies": { "dependencies": {
"@babel/parser": "^7.24.4", "@babel/parser": "^7.24.7",
"@vue/compiler-core": "3.4.27", "@vue/compiler-core": "3.4.29",
"@vue/compiler-dom": "3.4.27", "@vue/compiler-dom": "3.4.29",
"@vue/compiler-ssr": "3.4.27", "@vue/compiler-ssr": "3.4.29",
"@vue/shared": "3.4.27", "@vue/shared": "3.4.29",
"estree-walker": "^2.0.2", "estree-walker": "^2.0.2",
"magic-string": "^0.30.10", "magic-string": "^0.30.10",
"postcss": "^8.4.38", "postcss": "^8.4.38",
@@ -1538,12 +1538,12 @@
} }
}, },
"node_modules/@vue/compiler-ssr": { "node_modules/@vue/compiler-ssr": {
"version": "3.4.27", "version": "3.4.29",
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.4.27.tgz", "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.4.29.tgz",
"integrity": "sha512-CVRzSJIltzMG5FcidsW0jKNQnNRYC8bT21VegyMMtHmhW3UOI7knmUehzswXLrExDLE6lQCZdrhD4ogI7c+vuw==", "integrity": "sha512-rFbwCmxJ16tDp3N8XCx5xSQzjhidYjXllvEcqX/lopkoznlNPz3jyy0WGJCyhAaVQK677WWFt3YO/WUEkMMUFQ==",
"dependencies": { "dependencies": {
"@vue/compiler-dom": "3.4.27", "@vue/compiler-dom": "3.4.29",
"@vue/shared": "3.4.27" "@vue/shared": "3.4.29"
} }
}, },
"node_modules/@vue/devtools-api": { "node_modules/@vue/devtools-api": {
@@ -1552,48 +1552,49 @@
"integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==" "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q=="
}, },
"node_modules/@vue/reactivity": { "node_modules/@vue/reactivity": {
"version": "3.4.27", "version": "3.4.29",
"resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.4.27.tgz", "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.4.29.tgz",
"integrity": "sha512-kK0g4NknW6JX2yySLpsm2jlunZJl2/RJGZ0H9ddHdfBVHcNzxmQ0sS0b09ipmBoQpY8JM2KmUw+a6sO8Zo+zIA==", "integrity": "sha512-w8+KV+mb1a8ornnGQitnMdLfE0kXmteaxLdccm2XwdFxXst4q/Z7SEboCV5SqJNpZbKFeaRBBJBhW24aJyGINg==",
"dependencies": { "dependencies": {
"@vue/shared": "3.4.27" "@vue/shared": "3.4.29"
} }
}, },
"node_modules/@vue/runtime-core": { "node_modules/@vue/runtime-core": {
"version": "3.4.27", "version": "3.4.29",
"resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.4.27.tgz", "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.4.29.tgz",
"integrity": "sha512-7aYA9GEbOOdviqVvcuweTLe5Za4qBZkUY7SvET6vE8kyypxVgaT1ixHLg4urtOlrApdgcdgHoTZCUuTGap/5WA==", "integrity": "sha512-s8fmX3YVR/Rk5ig0ic0NuzTNjK2M7iLuVSZyMmCzN/+Mjuqqif1JasCtEtmtoJWF32pAtUjyuT2ljNKNLeOmnQ==",
"dependencies": { "dependencies": {
"@vue/reactivity": "3.4.27", "@vue/reactivity": "3.4.29",
"@vue/shared": "3.4.27" "@vue/shared": "3.4.29"
} }
}, },
"node_modules/@vue/runtime-dom": { "node_modules/@vue/runtime-dom": {
"version": "3.4.27", "version": "3.4.29",
"resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.4.27.tgz", "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.4.29.tgz",
"integrity": "sha512-ScOmP70/3NPM+TW9hvVAz6VWWtZJqkbdf7w6ySsws+EsqtHvkhxaWLecrTorFxsawelM5Ys9FnDEMt6BPBDS0Q==", "integrity": "sha512-gI10atCrtOLf/2MPPMM+dpz3NGulo9ZZR9d1dWo4fYvm+xkfvRrw1ZmJ7mkWtiJVXSsdmPbcK1p5dZzOCKDN0g==",
"dependencies": { "dependencies": {
"@vue/runtime-core": "3.4.27", "@vue/reactivity": "3.4.29",
"@vue/shared": "3.4.27", "@vue/runtime-core": "3.4.29",
"@vue/shared": "3.4.29",
"csstype": "^3.1.3" "csstype": "^3.1.3"
} }
}, },
"node_modules/@vue/server-renderer": { "node_modules/@vue/server-renderer": {
"version": "3.4.27", "version": "3.4.29",
"resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.4.27.tgz", "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.4.29.tgz",
"integrity": "sha512-dlAMEuvmeA3rJsOMJ2J1kXU7o7pOxgsNHVr9K8hB3ImIkSuBrIdy0vF66h8gf8Tuinf1TK3mPAz2+2sqyf3KzA==", "integrity": "sha512-HMLCmPI2j/k8PVkSBysrA2RxcxC5DgBiCdj7n7H2QtR8bQQPqKAe8qoaxLcInzouBmzwJ+J0x20ygN/B5mYBng==",
"dependencies": { "dependencies": {
"@vue/compiler-ssr": "3.4.27", "@vue/compiler-ssr": "3.4.29",
"@vue/shared": "3.4.27" "@vue/shared": "3.4.29"
}, },
"peerDependencies": { "peerDependencies": {
"vue": "3.4.27" "vue": "3.4.29"
} }
}, },
"node_modules/@vue/shared": { "node_modules/@vue/shared": {
"version": "3.4.27", "version": "3.4.29",
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.4.27.tgz", "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.4.29.tgz",
"integrity": "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==" "integrity": "sha512-hQ2gAQcBO/CDpC82DCrinJNgOHI2v+FA7BDW4lMSPeBpQ7sRe2OLHWe5cph1s7D8DUQAwRt18dBDfJJ220APEA=="
}, },
"node_modules/@vueuse/core": { "node_modules/@vueuse/core": {
"version": "10.10.0", "version": "10.10.0",
@@ -2458,9 +2459,9 @@
"peer": true "peer": true
}, },
"node_modules/esbuild": { "node_modules/esbuild": {
"version": "0.20.2", "version": "0.21.5",
"resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.20.2.tgz", "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.21.5.tgz",
"integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
"dev": true, "dev": true,
"hasInstallScript": true, "hasInstallScript": true,
"bin": { "bin": {
@@ -2470,29 +2471,29 @@
"node": ">=12" "node": ">=12"
}, },
"optionalDependencies": { "optionalDependencies": {
"@esbuild/aix-ppc64": "0.20.2", "@esbuild/aix-ppc64": "0.21.5",
"@esbuild/android-arm": "0.20.2", "@esbuild/android-arm": "0.21.5",
"@esbuild/android-arm64": "0.20.2", "@esbuild/android-arm64": "0.21.5",
"@esbuild/android-x64": "0.20.2", "@esbuild/android-x64": "0.21.5",
"@esbuild/darwin-arm64": "0.20.2", "@esbuild/darwin-arm64": "0.21.5",
"@esbuild/darwin-x64": "0.20.2", "@esbuild/darwin-x64": "0.21.5",
"@esbuild/freebsd-arm64": "0.20.2", "@esbuild/freebsd-arm64": "0.21.5",
"@esbuild/freebsd-x64": "0.20.2", "@esbuild/freebsd-x64": "0.21.5",
"@esbuild/linux-arm": "0.20.2", "@esbuild/linux-arm": "0.21.5",
"@esbuild/linux-arm64": "0.20.2", "@esbuild/linux-arm64": "0.21.5",
"@esbuild/linux-ia32": "0.20.2", "@esbuild/linux-ia32": "0.21.5",
"@esbuild/linux-loong64": "0.20.2", "@esbuild/linux-loong64": "0.21.5",
"@esbuild/linux-mips64el": "0.20.2", "@esbuild/linux-mips64el": "0.21.5",
"@esbuild/linux-ppc64": "0.20.2", "@esbuild/linux-ppc64": "0.21.5",
"@esbuild/linux-riscv64": "0.20.2", "@esbuild/linux-riscv64": "0.21.5",
"@esbuild/linux-s390x": "0.20.2", "@esbuild/linux-s390x": "0.21.5",
"@esbuild/linux-x64": "0.20.2", "@esbuild/linux-x64": "0.21.5",
"@esbuild/netbsd-x64": "0.20.2", "@esbuild/netbsd-x64": "0.21.5",
"@esbuild/openbsd-x64": "0.20.2", "@esbuild/openbsd-x64": "0.21.5",
"@esbuild/sunos-x64": "0.20.2", "@esbuild/sunos-x64": "0.21.5",
"@esbuild/win32-arm64": "0.20.2", "@esbuild/win32-arm64": "0.21.5",
"@esbuild/win32-ia32": "0.20.2", "@esbuild/win32-ia32": "0.21.5",
"@esbuild/win32-x64": "0.20.2" "@esbuild/win32-x64": "0.21.5"
} }
}, },
"node_modules/escalade": { "node_modules/escalade": {
@@ -4851,12 +4852,12 @@
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
}, },
"node_modules/vite": { "node_modules/vite": {
"version": "5.2.12", "version": "5.3.1",
"resolved": "https://registry.npmmirror.com/vite/-/vite-5.2.12.tgz", "resolved": "https://registry.npmmirror.com/vite/-/vite-5.3.1.tgz",
"integrity": "sha512-/gC8GxzxMK5ntBwb48pR32GGhENnjtY30G4A0jemunsBkiEZFw60s8InGpN8gkhHEkjnRK1aSAxeQgwvFhUHAA==", "integrity": "sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"esbuild": "^0.20.1", "esbuild": "^0.21.3",
"postcss": "^8.4.38", "postcss": "^8.4.38",
"rollup": "^4.13.0" "rollup": "^4.13.0"
}, },
@@ -4906,15 +4907,15 @@
} }
}, },
"node_modules/vue": { "node_modules/vue": {
"version": "3.4.27", "version": "3.4.29",
"resolved": "https://registry.npmmirror.com/vue/-/vue-3.4.27.tgz", "resolved": "https://registry.npmmirror.com/vue/-/vue-3.4.29.tgz",
"integrity": "sha512-8s/56uK6r01r1icG/aEOHqyMVxd1bkYcSe9j8HcKtr/xTOFWvnzIVTehNW+5Yt89f+DLBe4A569pnZLS5HzAMA==", "integrity": "sha512-8QUYfRcYzNlYuzKPfge1UWC6nF9ym0lx7mpGVPJYNhddxEf3DD0+kU07NTL0sXuiT2HuJuKr/iEO8WvXvT0RSQ==",
"dependencies": { "dependencies": {
"@vue/compiler-dom": "3.4.27", "@vue/compiler-dom": "3.4.29",
"@vue/compiler-sfc": "3.4.27", "@vue/compiler-sfc": "3.4.29",
"@vue/runtime-dom": "3.4.27", "@vue/runtime-dom": "3.4.29",
"@vue/server-renderer": "3.4.27", "@vue/server-renderer": "3.4.29",
"@vue/shared": "3.4.27" "@vue/shared": "3.4.29"
}, },
"peerDependencies": { "peerDependencies": {
"typescript": "*" "typescript": "*"

View File

@@ -31,7 +31,7 @@
"qs": "^6.11.2", "qs": "^6.11.2",
"sortablejs": "^1.15.0", "sortablejs": "^1.15.0",
"tinymce": "^6.8.3", "tinymce": "^6.8.3",
"vue": "^3.4.27", "vue": "^3.4.29",
"vue-clipboard3": "^2.0.0", "vue-clipboard3": "^2.0.0",
"vue-color-kit": "^1.0.5", "vue-color-kit": "^1.0.5",
"vue-echarts": "^6.5.5", "vue-echarts": "^6.5.5",
@@ -57,6 +57,6 @@
"postcss": "^8.4.38", "postcss": "^8.4.38",
"prettier": "^2.8.8", "prettier": "^2.8.8",
"tailwindcss": "^3.3.2", "tailwindcss": "^3.3.2",
"vite": "^5.2.12" "vite": "^5.3.1"
} }
} }

View File

@@ -0,0 +1,25 @@
import { request } from "@/api/request"
export default {
/**
* 分页查询操作日志
* @returns 操作日志分页结果
*/
getLoginLogs(params = { pageSize: 10, page: 1 }) {
return request({
url: `/system/log/loginLogsList`,
method: "get",
params
})
},
/**
* 操作日志删除
* @returns 后台返回的删除信息
*/
loginLogsDelete(params = { day: 7 }) {
return request({
url: `/system/log/loginLogsDel`,
method: "get",
params
})
}
}

View File

@@ -0,0 +1,25 @@
import { request } from "@/api/request"
export default {
/**
* 分页查询操作日志
* @returns 操作日志分页结果
*/
getOperations(params = { pageSize: 10, page: 1 }) {
return request({
url: `/system/log/operationsPagination`,
method: "get",
params
})
},
/**
* 操作日志删除
* @returns 后台返回的删除信息
*/
operationsDelete(params = { day: 7 }) {
return request({
url: `/system/log/operationsDel`,
method: "get",
params
})
}
}

View File

@@ -123,5 +123,16 @@ export default {
method: "get", method: "get",
params params
}) })
},
/**
* 改变用户启用/停用状态
* @returns
*/
changeUserStatus(params = {}) {
return request({
url: "system/user/change_status",
method: "get",
params
})
} }
} }

View File

@@ -142,7 +142,6 @@ const initConfig = reactive({
cleanStyles(element) cleanStyles(element)
removeUnwantedSpansAndMore(element) removeUnwantedSpansAndMore(element)
removeCommentNodes(element) removeCommentNodes(element)
console.log(element)
}) })
// 将处理后的fragment转换回HTML字符串 // 将处理后的fragment转换回HTML字符串
args.content = doc.body.innerHTML args.content = doc.body.innerHTML

View File

@@ -3,7 +3,7 @@
<template v-if="!Component"> <template v-if="!Component">
<Empty class="full-empty" /> <Empty class="full-empty" />
</template> </template>
<transition name="ma-fade" mode="out-in" appear> <transition name="ma-slide-down" mode="out-in" appear>
<!-- 这里主要在路由定义是否缓存页面 --> <!-- 这里主要在路由定义是否缓存页面 -->
<component :is="Component" v-if="route.meta.ignoreCache" :key="route.fullPath" /> <component :is="Component" v-if="route.meta.ignoreCache" :key="route.fullPath" />
<keep-alive v-else :include="cacheList"> <keep-alive v-else :include="cacheList">

View File

@@ -42,4 +42,4 @@ app.config.globalProperties.$url = import.meta.env.VITE_APP_BASE
app.mount("#app") app.mount("#app")
// 无用的东西:下面就打印一个东西 // 无用的东西:下面就打印一个东西
tool.capsule("ChengduTestManagePlant", `v${packageJson.version} debug`) tool.capsule("TestManagePlant", `v${packageJson.version} debug`)

View File

@@ -1,12 +1,18 @@
import { setRouteEmitter } from "@/utils/route-listener" import { setRouteEmitter } from "@/utils/route-listener"
import setupUserLoginInfoGuard from "./userLoginInfo" import setupUserLoginInfoGuard from "./userLoginInfo"
import setupPermissionGuard from "@/router/guard/permisstion" import setupPermissionGuard from "@/router/guard/permisstion"
// 导入设置title的工具
import { setRouteTitle } from "@/utils/title"
function setupPageGuard(router) { function setupPageGuard(router) {
router.beforeEach(async (to) => { router.beforeEach(async (to) => {
// 发出路由改变的事件 // 发出路由改变的事件
setRouteEmitter(to) setRouteEmitter(to)
}) })
// 设置站点document.title
router.afterEach((to, from) => {
setRouteTitle(to.meta.title)
})
} }
export default function createRouteGuard(router) { export default function createRouteGuard(router) {

View File

@@ -8,7 +8,8 @@ const DASHBOARD = {
requiresAuth: true, requiresAuth: true,
icon: "icon-home", icon: "icon-home",
order: 99, order: 99,
locale: "首页" locale: "首页",
title: "首页"
}, },
children: [ children: [
{ {
@@ -19,7 +20,8 @@ const DASHBOARD = {
requiresAuth: true, requiresAuth: true,
roles: ["*"], roles: ["*"],
locale: "工作台", locale: "工作台",
icon: "icon-dashboard" icon: "icon-dashboard",
title: "工作台"
} }
}, },
{ {
@@ -30,7 +32,8 @@ const DASHBOARD = {
requiresAuth: true, requiresAuth: true,
roles: ["*"], roles: ["*"],
locale: "用户中心", locale: "用户中心",
icon: "icon-user" icon: "icon-user",
title: "用户中心"
} }
}, },
{ {
@@ -41,9 +44,10 @@ const DASHBOARD = {
requiresAuth: true, requiresAuth: true,
roles: ["*"], roles: ["*"],
locale: "用户管理", locale: "用户管理",
icon: "icon-user-group" icon: "icon-user-group",
title: "用户管理"
} }
}, }
] ]
} }

View File

@@ -8,7 +8,8 @@ const DATAMANAGE = {
requiresAuth: true, requiresAuth: true,
icon: "icon-storage", icon: "icon-storage",
order: 99, order: 99,
locale: "数据管理" locale: "数据管理",
title: "数据管理"
}, },
children: [ children: [
{ {
@@ -19,7 +20,8 @@ const DATAMANAGE = {
requiresAuth: true, requiresAuth: true,
roles: ["*"], roles: ["*"],
locale: "字典管理", locale: "字典管理",
icon: "icon-book" icon: "icon-book",
title: "字典管理"
} }
}, },
{ {
@@ -30,7 +32,8 @@ const DATAMANAGE = {
requiresAuth: true, requiresAuth: true,
roles: ["*"], roles: ["*"],
locale: "项目联系信息", locale: "项目联系信息",
icon: "icon-phone" icon: "icon-phone",
title: "项目联系信息"
} }
}, },
{ {
@@ -41,7 +44,8 @@ const DATAMANAGE = {
requiresAuth: true, requiresAuth: true,
roles: ["*"], roles: ["*"],
locale: "缩略语", locale: "缩略语",
icon: "icon-scissor" icon: "icon-scissor",
title: "缩略语"
} }
} }
] ]

View File

@@ -8,18 +8,44 @@ const TESTMANAGE = {
requiresAuth: true, requiresAuth: true,
icon: "icon-desktop", icon: "icon-desktop",
order: 1, order: 1,
locale: "监控" locale: "日志监控",
title: "日志监控"
}, },
children: [ children: [
{ {
path: "operationLog", path: "operationLog",
name: "OperationLog", name: "operationLog",
component: () => import("@/views/monitor/operationLog/index.vue"), component: () => import("@/views/monitor/operationLog/index.vue"),
meta: { meta: {
requiresAuth: true, requiresAuth: true,
roles: ["*"], roles: ["*"],
locale: "操作日志", locale: "数据操作日志",
icon: "icon-robot" icon: "icon-file",
title: "数据操作日志"
}
},
{
path: "operations",
name: "operations",
component: () => import("@/views/monitor/operations/index.vue"),
meta: {
requiresAuth: true,
roles: ["*"],
locale: "接口操作日志",
icon: "icon-file",
title: "接口操作日志"
}
},
{
path: "loginLog",
name: "loginLog",
component: () => import("@/views/monitor/loginLog/index.vue"),
meta: {
requiresAuth: true,
roles: ["*"],
locale: "登录日志",
icon: "icon-file",
title: "登录日志"
} }
} }
] ]

View File

@@ -8,7 +8,8 @@ const TESTMANAGE = {
requiresAuth: true, requiresAuth: true,
icon: "icon-apps", icon: "icon-apps",
order: 98, order: 98,
locale: "测试管理" locale: "测试管理",
title: "测试管理"
}, },
children: [ children: [
{ {
@@ -19,7 +20,8 @@ const TESTMANAGE = {
requiresAuth: true, requiresAuth: true,
roles: ["*"], roles: ["*"],
locale: "项目管理", locale: "项目管理",
icon: "icon-folder" icon: "icon-folder",
title: "项目管理"
} }
}, },
// 二级路由(非三级路由,但是想办法把左侧菜单删除) // 二级路由(非三级路由,但是想办法把左侧菜单删除)
@@ -34,7 +36,8 @@ const TESTMANAGE = {
icon: "icon-folder", icon: "icon-folder",
hideInMenu: true, hideInMenu: true,
ignoreCache: false, ignoreCache: false,
noAffix: true noAffix: true,
title: "项目看板"
} }
} }
] ]

16
cdTMP/src/utils/title.js Normal file
View File

@@ -0,0 +1,16 @@
let routeTitle = ""
let siteTitle = "测试管理平台"
function setTitle() {
if (routeTitle) {
document.title = routeTitle + " - " + siteTitle
return
} else {
document.title = siteTitle
}
}
export function setRouteTitle(title) {
routeTitle = title
setTitle()
}

View File

@@ -1,13 +1,11 @@
<template> <template>
<div class="block"> <div class="block">
<div class="user-header rounded-sm text-center"> <div class="user-header rounded-sm text-center">
<div class="pt-3 mx-auto avatar-box"> <div class="pt-6 mx-auto avatar-box top-box">
<ma-upload rounded></ma-upload> {{ userStore.name }}
</div> </div>
<div> <div>
<a-tag size="large" class="mt-3 rounded-full" color="#de53ff"> <a-tag size="large" class="mt-3 rounded-full" color="#de53ff"> 账号{{ userStore.username }} </a-tag>
{{ userStore.role }}
</a-tag>
</div> </div>
</div> </div>
<a-layout-content class="block lg:flex lg:justify-between"> <a-layout-content class="block lg:flex lg:justify-between">
@@ -41,9 +39,10 @@
v-for="(item, idx) in operationLogList" v-for="(item, idx) in operationLogList"
:key="idx" :key="idx"
> >
您于 {{ item.create_datetime }} 请求了 {{ item.request_path }}状态码{{ 您于 {{ item.create_datetime }} 请求了 {{ item.request_path }}<span
item.response_code :class="{ nostatus: item.response_code === '200' ? false : true }"
}} >状态码{{ item.response_code }}</span
>
</a-timeline-item> </a-timeline-item>
</a-timeline> </a-timeline>
</a-tab-pane> </a-tab-pane>
@@ -91,8 +90,14 @@ const operationLogList = computed(() => {
} }
.user-header { .user-header {
width: 100%; width: 100%;
height: 200px; height: 150px;
background: url("@/assets/userBanner.jpg") no-repeat; background: url("@/assets/userBanner.jpg") no-repeat;
background-size: cover; background-size: cover;
} }
.nostatus {
color: red;
}
.top-box {
font-size: 2rem;
}
</style> </style>

View File

@@ -22,9 +22,11 @@ import userApi from "@/api/system/user"
import user from "@/api/system/user" import user from "@/api/system/user"
import { Message } from "@arco-design/web-vue" import { Message } from "@arco-design/web-vue"
// 切换状态按钮 // 切换状态按钮
const changeStatus = (e, id) => { const changeStatus = async (e, id) => {
console.log("当前值:", e) const res = await userApi.changeUserStatus({ user_status: e, userId: id })
console.log("当前ID", id) if (res.data) {
Message.success(res.data === "1" ? "启用成功" : "禁用成功")
}
} }
// crud组件 // crud组件
const crudRef = ref() const crudRef = ref()
@@ -67,6 +69,7 @@ const crudOptions = reactive({
viewType: "modal" viewType: "modal"
// isFull: true // isFull: true
}, },
operationColumnAlign: "center",
// 用户点击编辑/删除前的hook // 用户点击编辑/删除前的hook
beforeOpenEdit: (record) => { beforeOpenEdit: (record) => {
if (record.id === 1) { if (record.id === 1) {
@@ -93,7 +96,7 @@ const crudColumns = reactive([
width: 80, width: 80,
commonRules: [{ required: true, message: "名称必填" }] commonRules: [{ required: true, message: "名称必填" }]
}, },
{ title: "用户名", dataIndex: "username", search: true }, { title: "用户名", dataIndex: "username", search: true, align: "center" },
{ {
title: "电话", title: "电话",
align: "center", align: "center",

View File

@@ -23,7 +23,7 @@
</a> </a>
</a-card> </a-card>
<div class="mt-2">管理平台版本</div> <div class="mt-2">管理平台版本</div>
<a-tag class="mt-2" color="#0fc6c2">cdTestPlant V0.0.1</a-tag> <a-tag class="mt-2" color="#0fc6c2">TestManagePlant V0.0.1</a-tag>
</div> </div>
</div> </div>
</template> </template>

View File

@@ -25,11 +25,12 @@ const crudOptions = ref({
showIndex: false, showIndex: false,
searchColNumber: 3, searchColNumber: 3,
tablePagination: false, tablePagination: false,
rowSelection: { showCheckedAll: true } rowSelection: { showCheckedAll: true },
showTools: false
}) })
const crudColumns = ref([ const crudColumns = ref([
{ title: "ID", dataIndex: "id", addDisplay: false, editDisplay: false, width: 50, hide: true }, { title: "ID", dataIndex: "id", addDisplay: false, editDisplay: false, width: 50, hide: true },
{ title: "公司编号", align: "center", dataIndex: "key", search: true, width: 220 }, { title: "公司编号", align: "center", dataIndex: "key", search: true, width: 220, formType: "input-number" },
{ {
title: "名称", title: "名称",
align: "center", align: "center",
@@ -47,11 +48,11 @@ const crudColumns = ref([
commonRules: [{ required: true, message: "法人必填" }] commonRules: [{ required: true, message: "法人必填" }]
}, },
{ {
title:'地址', title: "地址",
align:'center', align: "center",
dataIndex:'addr', dataIndex: "addr",
search:true, search: true,
width:200, width: 200,
commonRules: [{ required: true, message: "公司地址必填" }] commonRules: [{ required: true, message: "公司地址必填" }]
} }
]) ])

View File

@@ -0,0 +1,86 @@
<template>
<div class="ma-content-block lg:flex justify-between p-4">
<div class="lg:w-full w-full lg:ml-4 mt-5 lg:mt-0">
<ma-crud :options="crudOptions" :columns="crudColumns" ref="crudRef">
<template #create_datetime="{ record }">
{{ record.create_datetime.split(".")[0].replace("T", " ") }}
</template>
<template #tableBeforeButtons>
<a-button type="primary" status="warning" @click="handleDeleteLogButton">
<template #icon> <icon-delete /> </template>删除7天前数据
</a-button>
<a-button type="primary" status="danger" @click="handleDeleteAllLogButton">
<template #icon> <icon-delete /> </template>删除全部日志
</a-button>
</template>
<!-- 操作列 -->
<template #operationCell="{ record }">
<a-button size="mini" type="primary" status="success" @click="handleSee(record)"
><icon-eye
/></a-button>
</template>
</ma-crud>
</div>
</div>
</template>
<script setup>
import { ref } from "vue"
import logApi from "@/api/monitor/loginLog"
import { Message, Notification } from "@arco-design/web-vue"
const crudRef = ref({})
// 删除日志按钮事件处理函数
const handleDeleteLogButton = async () => {
const res = await logApi.loginLogsDelete({ day: 7 }) // 参数:{day:4}保留4天内的日志
Message.success(res.message)
}
const handleDeleteAllLogButton = async () => {
const res = await logApi.loginLogsDelete({ day: 0 }) // 0表示删除全部日志
crudRef.value.refresh()
Message.success(res.message)
}
// 点击操作:查看【思路打开编辑窗口】
const handleSee = (record) => {
crudRef.value.editAction(record)
// 设置表单标题
crudRef.value.crudFormRef.actionTitle = "详情"
}
// 设置api
async function editClick() {
Notification.error("该详情只能查看")
}
const crudOptions = ref({
api: logApi.getLoginLogs,
edit: { api: editClick, text: "查看操作日志信息", show: false },
showIndex: false,
showTools: false,
pageLayout: "fixed",
tablePagination: false,
operationColumn: true,
operationColumnAlign: "center",
bordered: { wrapper: true, cell: true },
isDbClickEdit: false,
formOption: {
viewType: "drawer",
width: 600
}
})
const crudColumns = ref([
{ title: "ID", dataIndex: "id", addDisplay: false, editDisplay: false, width: 50, hide: true },
{ title: "登录用户", dataIndex: "username", search: true, align: "center" },
{ title: "IP", dataIndex: "ip", align: "center" },
{ title: "客户端信息", width: 215, dataIndex: "agent", align: "center" },
{ title: "操作系统", dataIndex: "os", align: "center" },
{ title: "浏览器", width: 110, dataIndex: "browser", align: "center" },
{
title: "创建时间",
dataIndex: "create_datetime",
align: "center",
width: 150,
addDisplay: false,
editDisplay: false
}
])
</script>
<style lang="less" scoped></style>

View File

@@ -4,7 +4,7 @@
<!-- crud组件 --> <!-- crud组件 -->
<ma-crud :options="crudOptions" :columns="crudColumns" ref="crudRef"> <ma-crud :options="crudOptions" :columns="crudColumns" ref="crudRef">
<template #create_datetime="{ record }"> <template #create_datetime="{ record }">
{{ record.create_datetime.replace("T", " ") }} {{ record.create_datetime.split(".")[0].replace("T", " ") }}
</template> </template>
<template #tableBeforeButtons> <template #tableBeforeButtons>
<a-button type="primary" status="warning" @click="handleDeleteLogButton" <a-button type="primary" status="warning" @click="handleDeleteLogButton"
@@ -29,9 +29,9 @@ const crudOptions = reactive({
api: operationApi.getOperationsLogs, api: operationApi.getOperationsLogs,
showIndex: false, showIndex: false,
pageLayout: "fixed", pageLayout: "fixed",
rowSelection: { showCheckedAll: true },
showTools: false, showTools: false,
tablePagination: false tablePagination: false,
bordered: { wrapper: true, cell: true }
}) })
const crudColumns = reactive([ const crudColumns = reactive([
{ title: "ID", dataIndex: "id", addDisplay: false, editDisplay: false, width: 50, hide: true }, { title: "ID", dataIndex: "id", addDisplay: false, editDisplay: false, width: 50, hide: true },

View File

@@ -0,0 +1,90 @@
<template>
<div class="ma-content-block lg:flex justify-between p-4">
<div class="lg:w-full w-full lg:ml-4 mt-5 lg:mt-0">
<ma-crud :options="crudOptions" :columns="crudColumns" ref="crudRef">
<template #create_datetime="{ record }">
{{ record.create_datetime.split(".")[0].replace("T", " ") }}
</template>
<template #tableBeforeButtons>
<a-button type="primary" status="warning" @click="handleDeleteLogButton">
<template #icon> <icon-delete /> </template>删除7天前数据
</a-button>
<a-button type="primary" status="danger" @click="handleDeleteAllLogButton">
<template #icon> <icon-delete /> </template>删除全部日志
</a-button>
</template>
<!-- 操作列 -->
<template #operationCell="{ record }">
<a-button size="mini" type="primary" status="success" @click="handleSee(record)"
><icon-eye
/></a-button>
</template>
</ma-crud>
</div>
</div>
</template>
<script setup>
import { ref } from "vue"
import logApi from "@/api/monitor/operations"
import { Message, Notification } from "@arco-design/web-vue"
const crudRef = ref({})
// 删除日志按钮事件处理函数
const handleDeleteLogButton = async () => {
const res = await logApi.operationsDelete({ day: 7 }) // 参数:{day:4}保留4天内的日志
Message.success(res.message)
}
const handleDeleteAllLogButton = async () => {
const res = await logApi.operationsDelete({ day: 0 }) // 0表示删除全部日志
crudRef.value.refresh()
Message.success(res.message)
}
// 点击操作:查看【思路打开编辑窗口】
const handleSee = (record) => {
crudRef.value.editAction(record)
// 设置表单标题
crudRef.value.crudFormRef.actionTitle = "详情"
}
// 设置api
async function editClick() {
Notification.error("该详情只能查看")
}
const crudOptions = ref({
api: logApi.getOperations,
edit: { api: editClick, text: "查看操作日志信息", show: false },
showIndex: false,
showTools: false,
pageLayout: "fixed",
tablePagination: false,
operationColumn: true,
operationColumnAlign: "center",
bordered: { wrapper: true, cell: true },
isDbClickEdit: false,
formOption: {
viewType: "drawer",
width: 600
}
})
const crudColumns = ref([
{ title: "ID", dataIndex: "id", addDisplay: false, editDisplay: false, width: 50, hide: true },
{ title: "操作用户", dataIndex: "request_username", search: true, align: "center" },
{ title: "请求方式", dataIndex: "request_method", align: "center" },
{ title: "IP", dataIndex: "request_ip", align: "center" },
{ title: "浏览器", dataIndex: "request_browser", align: "center" },
{ title: "响应状态码", dataIndex: "response_code", align: "center" },
{ title: "操作系统", dataIndex: "request_os", align: "center" },
{
title: "创建时间",
dataIndex: "create_datetime",
align: "center",
width: 150,
addDisplay: false,
editDisplay: false
},
{ title: "请求地址", dataIndex: "request_path", hide: true },
{ title: "请求参数", dataIndex: "request_body", hide: true, formType: "textarea" },
{ title: "返回信息", dataIndex: "json_result", hide: true, formType: "textarea" }
])
</script>
<style lang="less" scoped></style>