代码提交_10_17_开发后台管理_开发首页
|
@ -8,12 +8,17 @@
|
|||
"name": "databoard",
|
||||
"version": "0.0.0",
|
||||
"dependencies": {
|
||||
"amfe-flexible": "^2.2.1",
|
||||
"axios": "^1.6.7",
|
||||
"echarts": "^5.5.0",
|
||||
"element-plus": "^2.5.6",
|
||||
"font-awesome": "^4.7.0",
|
||||
"jsencrypt": "^3.3.2",
|
||||
"less": "^4.2.0",
|
||||
"less-loader": "^12.2.0",
|
||||
"moment": "^2.30.1",
|
||||
"pinia": "^2.1.7",
|
||||
"postcss-pxtorem": "^6.1.0",
|
||||
"vue": "^3.4.15",
|
||||
"vue-router": "^4.2.5",
|
||||
"vue3-seamless-scroll": "^2.0.1"
|
||||
|
@ -597,7 +602,7 @@
|
|||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
|
||||
"integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@jridgewell/set-array": "^1.2.1",
|
||||
|
@ -612,7 +617,7 @@
|
|||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
|
||||
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
|
@ -622,7 +627,7 @@
|
|||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.2.1.tgz",
|
||||
"integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
|
@ -632,7 +637,7 @@
|
|||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.6.tgz",
|
||||
"integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@jridgewell/gen-mapping": "^0.3.5",
|
||||
|
@ -648,7 +653,7 @@
|
|||
"version": "0.3.25",
|
||||
"resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
|
||||
"integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@jridgewell/resolve-uri": "^3.1.0",
|
||||
|
@ -873,7 +878,7 @@
|
|||
"version": "8.56.5",
|
||||
"resolved": "https://registry.npmmirror.com/@types/eslint/-/eslint-8.56.5.tgz",
|
||||
"integrity": "sha512-u5/YPJHo1tvkSF2CE0USEkxon82Z5DBy2xR+qfyYNszpX9qcs4sT6uq2kBbj4BXY1+DBGDPnrhMZV3pKWGNukw==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@types/estree": "*",
|
||||
|
@ -884,7 +889,7 @@
|
|||
"version": "3.7.7",
|
||||
"resolved": "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
|
||||
"integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@types/eslint": "*",
|
||||
|
@ -895,13 +900,13 @@
|
|||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.5.tgz",
|
||||
"integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
|
||||
"dev": true
|
||||
"devOptional": true
|
||||
},
|
||||
"node_modules/@types/json-schema": {
|
||||
"version": "7.0.15",
|
||||
"resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz",
|
||||
"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
|
||||
"dev": true
|
||||
"devOptional": true
|
||||
},
|
||||
"node_modules/@types/json5": {
|
||||
"version": "0.0.29",
|
||||
|
@ -926,7 +931,7 @@
|
|||
"version": "20.11.26",
|
||||
"resolved": "https://registry.npmmirror.com/@types/node/-/node-20.11.26.tgz",
|
||||
"integrity": "sha512-YwOMmyhNnAWijOBQweOJnQPl068Oqd4K3OFbTc6AHJwzweUwwWG3GIFY74OKks2PJUDkQPeddOQES9mLn1CTEQ==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"undici-types": "~5.26.4"
|
||||
|
@ -1138,7 +1143,7 @@
|
|||
"version": "1.11.6",
|
||||
"resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.11.6.tgz",
|
||||
"integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@webassemblyjs/helper-numbers": "1.11.6",
|
||||
|
@ -1149,28 +1154,28 @@
|
|||
"version": "1.11.6",
|
||||
"resolved": "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz",
|
||||
"integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/@webassemblyjs/helper-api-error": {
|
||||
"version": "1.11.6",
|
||||
"resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz",
|
||||
"integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/@webassemblyjs/helper-buffer": {
|
||||
"version": "1.11.6",
|
||||
"resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz",
|
||||
"integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/@webassemblyjs/helper-numbers": {
|
||||
"version": "1.11.6",
|
||||
"resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz",
|
||||
"integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@webassemblyjs/floating-point-hex-parser": "1.11.6",
|
||||
|
@ -1182,14 +1187,14 @@
|
|||
"version": "1.11.6",
|
||||
"resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz",
|
||||
"integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/@webassemblyjs/helper-wasm-section": {
|
||||
"version": "1.11.6",
|
||||
"resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz",
|
||||
"integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@webassemblyjs/ast": "1.11.6",
|
||||
|
@ -1202,7 +1207,7 @@
|
|||
"version": "1.11.6",
|
||||
"resolved": "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz",
|
||||
"integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@xtuc/ieee754": "^1.2.0"
|
||||
|
@ -1212,7 +1217,7 @@
|
|||
"version": "1.11.6",
|
||||
"resolved": "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz",
|
||||
"integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@xtuc/long": "4.2.2"
|
||||
|
@ -1222,14 +1227,14 @@
|
|||
"version": "1.11.6",
|
||||
"resolved": "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz",
|
||||
"integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/@webassemblyjs/wasm-edit": {
|
||||
"version": "1.11.6",
|
||||
"resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz",
|
||||
"integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@webassemblyjs/ast": "1.11.6",
|
||||
|
@ -1246,7 +1251,7 @@
|
|||
"version": "1.11.6",
|
||||
"resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz",
|
||||
"integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@webassemblyjs/ast": "1.11.6",
|
||||
|
@ -1260,7 +1265,7 @@
|
|||
"version": "1.11.6",
|
||||
"resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz",
|
||||
"integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@webassemblyjs/ast": "1.11.6",
|
||||
|
@ -1273,7 +1278,7 @@
|
|||
"version": "1.11.6",
|
||||
"resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz",
|
||||
"integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@webassemblyjs/ast": "1.11.6",
|
||||
|
@ -1288,7 +1293,7 @@
|
|||
"version": "1.11.6",
|
||||
"resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz",
|
||||
"integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@webassemblyjs/ast": "1.11.6",
|
||||
|
@ -1299,21 +1304,21 @@
|
|||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
|
||||
"integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/@xtuc/long": {
|
||||
"version": "4.2.2",
|
||||
"resolved": "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz",
|
||||
"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/acorn": {
|
||||
"version": "8.11.3",
|
||||
"resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.11.3.tgz",
|
||||
"integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"bin": {
|
||||
"acorn": "bin/acorn"
|
||||
},
|
||||
|
@ -1325,7 +1330,7 @@
|
|||
"version": "1.9.0",
|
||||
"resolved": "https://registry.npmmirror.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz",
|
||||
"integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"peerDependencies": {
|
||||
"acorn": "^8"
|
||||
|
@ -1344,7 +1349,7 @@
|
|||
"version": "6.12.6",
|
||||
"resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz",
|
||||
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"dependencies": {
|
||||
"fast-deep-equal": "^3.1.1",
|
||||
"fast-json-stable-stringify": "^2.0.0",
|
||||
|
@ -1360,11 +1365,16 @@
|
|||
"version": "3.5.2",
|
||||
"resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
|
||||
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peerDependencies": {
|
||||
"ajv": "^6.9.1"
|
||||
}
|
||||
},
|
||||
"node_modules/amfe-flexible": {
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmmirror.com/amfe-flexible/-/amfe-flexible-2.2.1.tgz",
|
||||
"integrity": "sha512-L2VfvDzoETBjhRptg5u/IUuzHSuxm22JpSRb404p/TBGeRfwWmmNEbB+TFPIP/sS/+pbM18bCFH9QnMojLuPNw=="
|
||||
},
|
||||
"node_modules/ansi-regex": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||
|
@ -1639,7 +1649,7 @@
|
|||
"version": "4.23.0",
|
||||
"resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.23.0.tgz",
|
||||
"integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
|
@ -1672,7 +1682,7 @@
|
|||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz",
|
||||
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/builtin-modules": {
|
||||
|
@ -1743,7 +1753,7 @@
|
|||
"version": "1.0.30001597",
|
||||
"resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz",
|
||||
"integrity": "sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
|
@ -1816,7 +1826,7 @@
|
|||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
|
||||
"integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=6.0"
|
||||
|
@ -1855,7 +1865,7 @@
|
|||
"version": "2.20.3",
|
||||
"resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz",
|
||||
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/concat-map": {
|
||||
|
@ -1868,7 +1878,6 @@
|
|||
"version": "2.0.6",
|
||||
"resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz",
|
||||
"integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"is-what": "^3.14.1"
|
||||
},
|
||||
|
@ -2002,7 +2011,7 @@
|
|||
"version": "1.4.702",
|
||||
"resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.702.tgz",
|
||||
"integrity": "sha512-LYLXyEUsZ3nNSwiOWjI88N1PJUAMU2QphQSgGLVkFnb3FxZxNui2Vzi2PaKPgPWbsWbZstZnh6BMf/VQJamjiQ==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/element-plus": {
|
||||
|
@ -2043,7 +2052,7 @@
|
|||
"version": "5.16.0",
|
||||
"resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz",
|
||||
"integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"graceful-fs": "^4.2.4",
|
||||
|
@ -2068,7 +2077,6 @@
|
|||
"version": "0.1.8",
|
||||
"resolved": "https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz",
|
||||
"integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"prr": "~1.0.1"
|
||||
|
@ -2163,7 +2171,7 @@
|
|||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz",
|
||||
"integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/es-set-tostringtag": {
|
||||
|
@ -2248,7 +2256,7 @@
|
|||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.2.tgz",
|
||||
"integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
|
@ -2637,7 +2645,7 @@
|
|||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz",
|
||||
"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"dependencies": {
|
||||
"estraverse": "^5.2.0"
|
||||
},
|
||||
|
@ -2649,7 +2657,7 @@
|
|||
"version": "5.3.0",
|
||||
"resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz",
|
||||
"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"engines": {
|
||||
"node": ">=4.0"
|
||||
}
|
||||
|
@ -2672,7 +2680,7 @@
|
|||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz",
|
||||
"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=0.8.x"
|
||||
|
@ -2682,13 +2690,13 @@
|
|||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
|
||||
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
|
||||
"dev": true
|
||||
"devOptional": true
|
||||
},
|
||||
"node_modules/fast-json-stable-stringify": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
|
||||
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
|
||||
"dev": true
|
||||
"devOptional": true
|
||||
},
|
||||
"node_modules/fast-levenshtein": {
|
||||
"version": "2.0.6",
|
||||
|
@ -2970,7 +2978,7 @@
|
|||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
|
||||
"integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/globals": {
|
||||
|
@ -3019,7 +3027,7 @@
|
|||
"version": "4.2.11",
|
||||
"resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz",
|
||||
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
|
||||
"dev": true
|
||||
"devOptional": true
|
||||
},
|
||||
"node_modules/graphemer": {
|
||||
"version": "1.4.0",
|
||||
|
@ -3040,7 +3048,7 @@
|
|||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
|
||||
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
|
@ -3112,7 +3120,6 @@
|
|||
"version": "0.6.3",
|
||||
"resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz",
|
||||
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"safer-buffer": ">= 2.1.2 < 3.0.0"
|
||||
|
@ -3134,7 +3141,6 @@
|
|||
"version": "0.5.5",
|
||||
"resolved": "https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz",
|
||||
"integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"bin": {
|
||||
"image-size": "bin/image-size.js"
|
||||
|
@ -3465,8 +3471,7 @@
|
|||
"node_modules/is-what": {
|
||||
"version": "3.14.1",
|
||||
"resolved": "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz",
|
||||
"integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==",
|
||||
"dev": true
|
||||
"integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA=="
|
||||
},
|
||||
"node_modules/isarray": {
|
||||
"version": "2.0.5",
|
||||
|
@ -3484,7 +3489,7 @@
|
|||
"version": "27.5.1",
|
||||
"resolved": "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz",
|
||||
"integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@types/node": "*",
|
||||
|
@ -3499,7 +3504,7 @@
|
|||
"version": "8.1.1",
|
||||
"resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz",
|
||||
"integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"has-flag": "^4.0.0"
|
||||
|
@ -3538,14 +3543,14 @@
|
|||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
|
||||
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/json-schema-traverse": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
|
||||
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
|
||||
"dev": true
|
||||
"devOptional": true
|
||||
},
|
||||
"node_modules/json-stable-stringify-without-jsonify": {
|
||||
"version": "1.0.1",
|
||||
|
@ -3578,7 +3583,6 @@
|
|||
"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",
|
||||
"parse-node-version": "^1.0.1",
|
||||
|
@ -3600,6 +3604,31 @@
|
|||
"source-map": "~0.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/less-loader": {
|
||||
"version": "12.2.0",
|
||||
"resolved": "https://registry.npmmirror.com/less-loader/-/less-loader-12.2.0.tgz",
|
||||
"integrity": "sha512-MYUxjSQSBUQmowc0l5nPieOYwMzGPUaTzB6inNW/bdPEG9zOL3eAAD1Qw5ZxSPk7we5dMojHwNODYMV1hq4EVg==",
|
||||
"engines": {
|
||||
"node": ">= 18.12.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/webpack"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@rspack/core": "0.x || 1.x",
|
||||
"less": "^3.5.0 || ^4.0.0",
|
||||
"webpack": "^5.0.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@rspack/core": {
|
||||
"optional": true
|
||||
},
|
||||
"webpack": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/levn": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz",
|
||||
|
@ -3617,7 +3646,7 @@
|
|||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.0.tgz",
|
||||
"integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=6.11.5"
|
||||
|
@ -3717,7 +3746,6 @@
|
|||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz",
|
||||
"integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"pify": "^4.0.1",
|
||||
|
@ -3731,7 +3759,6 @@
|
|||
"version": "5.7.2",
|
||||
"resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz",
|
||||
"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"bin": {
|
||||
"semver": "bin/semver"
|
||||
|
@ -3746,14 +3773,13 @@
|
|||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz",
|
||||
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/mime": {
|
||||
"version": "1.6.0",
|
||||
"resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz",
|
||||
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"bin": {
|
||||
"mime": "cli.js"
|
||||
|
@ -3802,6 +3828,14 @@
|
|||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/moment": {
|
||||
"version": "2.30.1",
|
||||
"resolved": "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz",
|
||||
"integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
|
||||
"engines": {
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/ms": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
|
||||
|
@ -3835,7 +3869,6 @@
|
|||
"version": "3.3.1",
|
||||
"resolved": "https://registry.npmmirror.com/needle/-/needle-3.3.1.tgz",
|
||||
"integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"iconv-lite": "^0.6.3",
|
||||
|
@ -3852,13 +3885,13 @@
|
|||
"version": "2.6.2",
|
||||
"resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz",
|
||||
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
|
||||
"dev": true
|
||||
"devOptional": true
|
||||
},
|
||||
"node_modules/node-releases": {
|
||||
"version": "2.0.14",
|
||||
"resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.14.tgz",
|
||||
"integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/normalize-path": {
|
||||
|
@ -4042,7 +4075,6 @@
|
|||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/parse-node-version/-/parse-node-version-1.0.1.tgz",
|
||||
"integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">= 0.10"
|
||||
}
|
||||
|
@ -4101,7 +4133,6 @@
|
|||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz",
|
||||
"integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
|
@ -4193,6 +4224,14 @@
|
|||
"node": "^10 || ^12 || >=14"
|
||||
}
|
||||
},
|
||||
"node_modules/postcss-pxtorem": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/postcss-pxtorem/-/postcss-pxtorem-6.1.0.tgz",
|
||||
"integrity": "sha512-ROODSNci9ADal3zUcPHOF/K83TiCgNSPXQFSbwyPHNV8ioHIE4SaC+FPOufd8jsr5jV2uIz29v1Uqy1c4ov42g==",
|
||||
"peerDependencies": {
|
||||
"postcss": "^8.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/postcss-selector-parser": {
|
||||
"version": "6.0.15",
|
||||
"resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz",
|
||||
|
@ -4224,14 +4263,13 @@
|
|||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz",
|
||||
"integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"node_modules/punycode": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz",
|
||||
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
|
@ -4260,7 +4298,7 @@
|
|||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz",
|
||||
"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"safe-buffer": "^5.1.0"
|
||||
|
@ -4433,7 +4471,7 @@
|
|||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
|
@ -4471,7 +4509,6 @@
|
|||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"node_modules/sass": {
|
||||
|
@ -4530,14 +4567,13 @@
|
|||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmmirror.com/sax/-/sax-1.4.1.tgz",
|
||||
"integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"node_modules/schema-utils": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz",
|
||||
"integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"dependencies": {
|
||||
"@types/json-schema": "^7.0.8",
|
||||
"ajv": "^6.12.5",
|
||||
|
@ -4564,7 +4600,7 @@
|
|||
"version": "6.0.2",
|
||||
"resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
|
||||
"integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"randombytes": "^2.1.0"
|
||||
|
@ -4645,7 +4681,7 @@
|
|||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
|
||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
|
@ -4662,7 +4698,7 @@
|
|||
"version": "0.5.21",
|
||||
"resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz",
|
||||
"integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"buffer-from": "^1.0.0",
|
||||
|
@ -4775,7 +4811,7 @@
|
|||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmmirror.com/tapable/-/tapable-2.2.1.tgz",
|
||||
"integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
|
@ -4785,7 +4821,7 @@
|
|||
"version": "5.29.1",
|
||||
"resolved": "https://registry.npmmirror.com/terser/-/terser-5.29.1.tgz",
|
||||
"integrity": "sha512-lZQ/fyaIGxsbGxApKmoPTODIzELy3++mXhS5hOqaAWZjQtpq/hFHAc+rm29NND1rYRxRWKcjuARNwULNXa5RtQ==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@jridgewell/source-map": "^0.3.3",
|
||||
|
@ -4804,7 +4840,7 @@
|
|||
"version": "5.3.10",
|
||||
"resolved": "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz",
|
||||
"integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@jridgewell/trace-mapping": "^0.3.20",
|
||||
|
@ -5003,14 +5039,14 @@
|
|||
"version": "5.26.5",
|
||||
"resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz",
|
||||
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/update-browserslist-db": {
|
||||
"version": "1.0.13",
|
||||
"resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
|
||||
"integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
|
@ -5041,7 +5077,7 @@
|
|||
"version": "4.4.1",
|
||||
"resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz",
|
||||
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"dependencies": {
|
||||
"punycode": "^2.1.0"
|
||||
}
|
||||
|
@ -5192,7 +5228,7 @@
|
|||
"version": "2.4.0",
|
||||
"resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.0.tgz",
|
||||
"integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"glob-to-regexp": "^0.4.1",
|
||||
|
@ -5206,7 +5242,7 @@
|
|||
"version": "5.90.3",
|
||||
"resolved": "https://registry.npmmirror.com/webpack/-/webpack-5.90.3.tgz",
|
||||
"integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@types/eslint-scope": "^3.7.3",
|
||||
|
@ -5254,7 +5290,7 @@
|
|||
"version": "3.2.3",
|
||||
"resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz",
|
||||
"integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=10.13.0"
|
||||
|
@ -5264,7 +5300,7 @@
|
|||
"version": "5.1.1",
|
||||
"resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz",
|
||||
"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"esrecurse": "^4.3.0",
|
||||
|
@ -5278,7 +5314,7 @@
|
|||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz",
|
||||
"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
|
||||
"dev": true,
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=4.0"
|
||||
|
|
|
@ -18,7 +18,12 @@
|
|||
"pinia": "^2.1.7",
|
||||
"vue": "^3.4.15",
|
||||
"vue-router": "^4.2.5",
|
||||
"vue3-seamless-scroll": "^2.0.1"
|
||||
"vue3-seamless-scroll": "^2.0.1",
|
||||
"amfe-flexible": "^2.2.1",
|
||||
"less": "^4.2.0",
|
||||
"less-loader": "^12.2.0",
|
||||
"moment": "^2.30.1",
|
||||
"postcss-pxtorem": "^6.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vitejs/plugin-vue": "^5.0.3",
|
||||
|
|
Before Width: | Height: | Size: 111 KiB After Width: | Height: | Size: 111 KiB |
|
@ -2,7 +2,9 @@
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<div id="app">
|
||||
<router-view />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
import { get, post, download, uploadFile } from './request'
|
||||
// 导入业务统计接口
|
||||
export const ImportBusinessStatistics = (params) => {
|
||||
return uploadFile('/api/ImportBusinessStatistics', params)
|
||||
import { get, post, download, upload } from './request'
|
||||
//上传文件接口
|
||||
export const UploadTextFile = (url,params) => {
|
||||
return upload('/api/Upload'+url, params)
|
||||
}
|
||||
// 下载业务统计接口
|
||||
export const DownloadBusinessStatistics = (params) => {
|
||||
return download('/api/DownloadBusinessStatistics', params)
|
||||
export const DownloadText = (params) => {
|
||||
return download('/api/DownloadText', params)
|
||||
}
|
||||
// 获取表格分页接口
|
||||
export const GetBusinessStatisticsList = (params) => {
|
||||
return get('/api/GetBusinessStatisticsList', params)
|
||||
export const GetTextList = (params) => {
|
||||
return get('/api/GetTextList', params)
|
||||
}
|
||||
// 地图页获取业务统计接口
|
||||
export const GetBusinessStatistics = (params) => {
|
||||
|
@ -19,3 +19,20 @@ export const GetBusinessStatistics = (params) => {
|
|||
export const DownloadTemplate = (params) => {
|
||||
return download('/api/DownloadTemplate', params)
|
||||
}
|
||||
//新增文本
|
||||
export const AddText = (params) => {
|
||||
return post('/api/AddText', params)
|
||||
}
|
||||
//删除文本接口
|
||||
export const DeleteText = (params) => {
|
||||
return get('/api/DeleteText', params)
|
||||
}
|
||||
//获取单条文本数据
|
||||
export const GetTextDetails = (params) => {
|
||||
return get('/api/GetTextDetails', params)
|
||||
}
|
||||
|
||||
//编辑文本
|
||||
export const EditText = (params) => {
|
||||
return post('/api/EditText', params)
|
||||
}
|
|
@ -4,3 +4,8 @@ import { get, post, download, uploadFile } from './request'
|
|||
export const apiLogin = (params) => {
|
||||
return post('/api/Login', params)
|
||||
}
|
||||
|
||||
//修改密码
|
||||
export const ChangePassword = (params) => {
|
||||
return post('/api/ChangePassword', params)
|
||||
}
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
import { get, post, download, upload } from './request'
|
||||
// 获取人员管理分页接口
|
||||
export const GetPersonnelList = (params) => {
|
||||
return get('/api/GetPersonnelList', params)
|
||||
}
|
||||
|
||||
//新增人员接口
|
||||
export const AddPersonnel = (params) => {
|
||||
return post('/api/AddPersonnel', params)
|
||||
}
|
||||
//删除人员接口
|
||||
export const DeletePersonnel = (params) => {
|
||||
return get('/api/DeletePersonnel', params)
|
||||
}
|
||||
|
||||
//获取单条数据接口
|
||||
export const GetPersonnelDetails = (params) => {
|
||||
return get('/api/GetPersonnelDetails', params)
|
||||
}
|
||||
|
||||
//编辑人员接口
|
||||
export const EditPersonnel = (params) => {
|
||||
return post('/api/EditPersonnel', params)
|
||||
}
|
|
@ -1,9 +1,7 @@
|
|||
import axios from 'axios'
|
||||
// import { useRouter } from 'vue-router'
|
||||
|
||||
import { ElMessageBox, ElMessage } from "element-plus";
|
||||
// 带cookie请求
|
||||
axios.defaults.headers.post['Content-Type'] = 'application/json'
|
||||
|
||||
const http = axios.create({
|
||||
// baseURL: 'http://admin.umayle.com'
|
||||
baseURL: `${import.meta.env.VITE_BASE_URL}`
|
||||
|
@ -22,17 +20,27 @@ http.interceptors.request.use(
|
|||
return err
|
||||
}
|
||||
)
|
||||
// const router = useRouter()
|
||||
// // response 错误统一处理
|
||||
http.interceptors.response.use(
|
||||
res => {
|
||||
return res.data
|
||||
},
|
||||
err => {
|
||||
console.log('接口访问失败')
|
||||
if (err.response.status === 401) {
|
||||
ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
|
||||
confirmButtonText: '重新登录',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}
|
||||
).then(() => {
|
||||
window.parent.loginAgain()
|
||||
localStorage.clear();
|
||||
}).catch(() => {
|
||||
});
|
||||
}
|
||||
// localStorage.removeItem('token')
|
||||
// router.push('/Login')
|
||||
return err
|
||||
|
||||
// return err
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
import { get, post, download, upload } from './request'
|
||||
//查询排班列表接口
|
||||
export const GetSchedulingList = (params) => {
|
||||
return get('/api/GetSchedulingList', params)
|
||||
}
|
||||
|
||||
//获取人员数据接口
|
||||
export const GetPersonnel = (params) => {
|
||||
return get('/api/GetPersonnel', params)
|
||||
}
|
||||
|
||||
|
||||
//新增排版列表接口
|
||||
export const AddScheduling = (params) => {
|
||||
return post('/api/AddScheduling', params)
|
||||
}
|
||||
//删除排班接口
|
||||
export const DeleteScheduling = (params) => {
|
||||
return get('/api/DeleteScheduling', params)
|
||||
}
|
||||
//获取单条数据
|
||||
export const GetSchedulingDetails = (params) => {
|
||||
return get('/api/GetSchedulingDetails', params)
|
||||
}
|
||||
//修改排班列表接口
|
||||
|
||||
export const EditScheduling = (params) => {
|
||||
return post('/api/EditScheduling', params)
|
||||
}
|
||||
|
||||
//发布状态
|
||||
export const ReleaseScheduling = (params) => {
|
||||
return get('/api/ReleaseScheduling', params)
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
@font-face {
|
||||
font-family: "庞门正道";
|
||||
src: url('./font/庞门正道.ttf');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
@font-face {
|
||||
font-family: "PingFang SC";
|
||||
src: url('./font/PingFang Medium_1.ttf');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 8.7 KiB |
After Width: | Height: | Size: 416 B |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 6.8 KiB |
After Width: | Height: | Size: 5.8 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 524 B |
After Width: | Height: | Size: 7.4 KiB |
After Width: | Height: | Size: 496 B |
After Width: | Height: | Size: 486 B |
After Width: | Height: | Size: 44 KiB |
After Width: | Height: | Size: 192 KiB |
After Width: | Height: | Size: 134 KiB |
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 835 KiB |
After Width: | Height: | Size: 1.0 MiB |
|
@ -1,68 +1,66 @@
|
|||
<template lang="">
|
||||
<div class="tag-list">
|
||||
<el-tag v-for="(tag,index) in tagsList" :key="tag.name" closable :class="{'isActive':tagsActiveIndex===index}"
|
||||
@click="tagClick(tag,index)" @close="tagClose(index)">
|
||||
<div class="tag-list"> <el-tag v-for="(tag,index) in tagsList" :key="tag.name" closable
|
||||
:class="{'isActive':tagsActiveIndex===index}" @click="tagClick(tag,index)"
|
||||
@close="tagClose(index)">
|
||||
{{ tag.name }}
|
||||
</el-tag>
|
||||
</div>
|
||||
</el-tag> </div>
|
||||
</template>
|
||||
<script setup>
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import { watch, ref } from 'vue'
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
const tagsList = ref([])
|
||||
const tagsActiveIndex = ref(1)
|
||||
import { useRoute, useRouter } from "vue-router";
|
||||
import { watch, ref } from "vue";
|
||||
const route = useRoute();
|
||||
const router = useRouter();
|
||||
const tagsList = ref([]);
|
||||
const tagsActiveIndex = ref(1);
|
||||
|
||||
const tagClick = (item, index) => {
|
||||
router.push(item.path)
|
||||
tagsActiveIndex.value = index
|
||||
}
|
||||
router.push(item.path);
|
||||
tagsActiveIndex.value = index;
|
||||
};
|
||||
const tagClose = (index) => {
|
||||
const _path = tagsList.value[tagsActiveIndex.value].path
|
||||
tagsList.value.splice(index, 1)
|
||||
const _path = tagsList.value[tagsActiveIndex.value].path;
|
||||
tagsList.value.splice(index, 1);
|
||||
|
||||
if (tagsActiveIndex.value === index) {
|
||||
tagsActiveIndex.value = index > 0 ? index - 1 : 1
|
||||
router.push(tagsList.value[tagsActiveIndex.value].path)
|
||||
tagsActiveIndex.value = index > 0 ? index - 1 : 1;
|
||||
router.push(tagsList.value[tagsActiveIndex.value].path);
|
||||
} else {
|
||||
const hasIndex = tagsList.value.findIndex((v) => v.path === _path)
|
||||
tagsActiveIndex.value = hasIndex
|
||||
}
|
||||
const hasIndex = tagsList.value.findIndex((v) => v.path === _path);
|
||||
tagsActiveIndex.value = hasIndex;
|
||||
}
|
||||
};
|
||||
|
||||
watch(
|
||||
() => route,
|
||||
(newValue, oldValue) => {
|
||||
const hasIndex = tagsList.value.findIndex((v) => v.path === newValue.path)
|
||||
if (hasIndex < 0 && newValue.meta.title !== '') {
|
||||
const hasIndex = tagsList.value.findIndex((v) => v.path === newValue.path);
|
||||
if (hasIndex < 0 && newValue.meta.title !== "") {
|
||||
tagsList.value.push({
|
||||
name: newValue.meta.title,
|
||||
path: newValue.path
|
||||
})
|
||||
tagsActiveIndex.value = tagsList.value.length - 1
|
||||
path: newValue.path,
|
||||
});
|
||||
tagsActiveIndex.value = tagsList.value.length - 1;
|
||||
} else {
|
||||
// tagsActiveIndex.value = hasIndex;
|
||||
}
|
||||
},
|
||||
{ immediate: true, deep: true }
|
||||
)
|
||||
);
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.tag-list {
|
||||
.el-tag {
|
||||
background: rgba(69, 85, 82, 0.10);
|
||||
background: rgba(69, 85, 82, 0.1);
|
||||
color: rgba(69, 85, 82, 1);
|
||||
margin-right: 10px;
|
||||
cursor: pointer;
|
||||
&.isActive {
|
||||
background: rgba(69, 85, 82, 0.10);
|
||||
background: rgba(69, 85, 82, 0.1);
|
||||
color: rgba(69, 85, 82, 1);
|
||||
::v-deep {
|
||||
.el-icon {
|
||||
color: rgba(69, 85, 82, 1);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,34 +1,125 @@
|
|||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
import { ArrowDown } from '@element-plus/icons-vue'
|
||||
import { ElMessageBox } from 'element-plus'
|
||||
import mock from '@/router/menu/index.js'
|
||||
import Tab from './Tab.vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
const router = useRouter()
|
||||
|
||||
import { ref, computed, reactive, getCurrentInstance, onMounted } from "vue";
|
||||
import { ArrowDown } from "@element-plus/icons-vue";
|
||||
import { ElMessageBox, ElMessage } from "element-plus";
|
||||
import mock from "@/router/menu/index.js";
|
||||
import Tab from "./Tab.vue";
|
||||
import { useRouter, useRoute } from "vue-router";
|
||||
import { ChangePassword } from "@/api/index.js";
|
||||
import JSEncrypt from "jsencrypt";
|
||||
const router = useRouter();
|
||||
const route = useRoute();
|
||||
const { proxy } = getCurrentInstance();
|
||||
const activeMenu = computed(() => {
|
||||
const { meta, path } = route;
|
||||
// if set path, the sidebar will highlight the path you set
|
||||
if (meta.sort) {
|
||||
return meta.sort - 1;
|
||||
}
|
||||
return path;
|
||||
});
|
||||
// import useUserStore from '@/store/index.js'
|
||||
// const userStore = useUserStore()
|
||||
|
||||
// 侧边栏菜单
|
||||
const isCollapse = ref(false)
|
||||
const isCollapse = ref(false);
|
||||
//密码弹窗
|
||||
const form = reactive({});
|
||||
const dialogToLead = ref(false);
|
||||
const rules = reactive({
|
||||
LoginName: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入用户名",
|
||||
trigger: "change",
|
||||
},
|
||||
],
|
||||
OldPassword: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入旧密码",
|
||||
trigger: "change",
|
||||
},
|
||||
],
|
||||
NewPassword: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入新密码",
|
||||
trigger: "change",
|
||||
},
|
||||
],
|
||||
});
|
||||
const encryptor = ref(null);
|
||||
const handleOpen = (key, keyPath) => {
|
||||
console.log(key, keyPath)
|
||||
}
|
||||
console.log(key, keyPath);
|
||||
};
|
||||
const handleClose = (key, keyPath) => {
|
||||
console.log(key, keyPath)
|
||||
}
|
||||
console.log(key, keyPath);
|
||||
};
|
||||
|
||||
// 退出登录
|
||||
function loginOut() {
|
||||
ElMessageBox.confirm('确定注销并退出系统吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
ElMessageBox.confirm("确定注销并退出系统吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
}).then(() => {
|
||||
router.push('/Login')
|
||||
})
|
||||
localStorage.clear();
|
||||
router.push("/");
|
||||
});
|
||||
}
|
||||
function loginAgain() {
|
||||
router.push("/");
|
||||
}
|
||||
//修改密码
|
||||
function changePassword() {
|
||||
(form.LoginName = ""), (form.OldPassword = ""), (form.NewPassword = "");
|
||||
dialogToLead.value = true;
|
||||
}
|
||||
//取消
|
||||
function cancel() {
|
||||
(form.LoginName = ""), (form.OldPassword = ""), (form.NewPassword = "");
|
||||
dialogToLead.value = false;
|
||||
}
|
||||
function submitUpload() {
|
||||
let paramsData = {
|
||||
LoginName: form.LoginName,
|
||||
OldPassword: encryptor.value.encrypt(form.OldPassword),
|
||||
NewPassword: encryptor.value.encrypt(form.NewPassword),
|
||||
};
|
||||
proxy.$refs["formData"].validate((valid) => {
|
||||
if (valid) {
|
||||
ChangePassword(paramsData)
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
dialogToLead.value = false;
|
||||
ElMessage({
|
||||
message: "修改密码成功,请重新登录",
|
||||
type: "success",
|
||||
});
|
||||
router.push("/");
|
||||
} else {
|
||||
ElMessage({
|
||||
message: res.data,
|
||||
type: "warning",
|
||||
});
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
encryptor.value = new JSEncrypt(); // 创建加密对象实例
|
||||
const pubKey =
|
||||
"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmIZgs2im/ZaxPeQC1dvLGh8lBpmnknjpcjwk6G9zNVKHaVz/hKkcT+yquZjjcFD5Va8GpyrIBpA+EVSVN6pPwqqtmDNjiY9VTo3PPbhN5H43dyJDgm+h+/lAeoxe2r4NWveYNUNABp+nC0HWqc+cAt8EsjshpEbjI6mS9UubZoHrQWABw1Cm5PM4FaJreI1GduzUsfeFXC6TrsEEEjzWjjAUPh8XkCmlpyzXiCo+A3zbYRX2/Lu14jnsaQM6+y7KjdpH3pDEGpZyat3oFXX/KbSfnr4khUxy4jJH/lkqh6FcQWQbA43QVIgJ41ZSAGsjt2r0TicTYfRtI3HdCBcIVwIDAQAB";
|
||||
encryptor.value.setPublicKey(pubKey);
|
||||
window.loginAgain = loginAgain;
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
@ -36,8 +127,7 @@ function loginOut () {
|
|||
<el-container class="layout">
|
||||
<el-header>
|
||||
<el-header>
|
||||
<div class="img">
|
||||
</div>
|
||||
<div class="img"></div>
|
||||
<div class="Administrator">
|
||||
<el-dropdown trigger="click">
|
||||
<span class="el-dropdown-link">
|
||||
|
@ -46,6 +136,7 @@ function loginOut () {
|
|||
</span>
|
||||
<template #dropdown>
|
||||
<el-dropdown-menu>
|
||||
<el-dropdown-item @click="changePassword">修改密码</el-dropdown-item>
|
||||
<el-dropdown-item @click="loginOut">退出登录</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</template>
|
||||
|
@ -58,32 +149,41 @@ function loginOut () {
|
|||
<aside>
|
||||
<div class="Sidebar">
|
||||
<el-menu
|
||||
:default-active="activeMenu.toString()"
|
||||
class="el-menu-vertical-demo"
|
||||
:collapse="isCollapse"
|
||||
@open="handleOpen"
|
||||
@close="handleClose"
|
||||
>
|
||||
<template v-for="(firstItem, firstI) in mock" :key="firstI">
|
||||
<el-menu-item
|
||||
:index="String(firstI)"
|
||||
@click="$router.push(firstItem.path)"
|
||||
>
|
||||
<template #title>{{ firstItem.meta.title }}</template>
|
||||
</el-menu-item>
|
||||
</template>
|
||||
</el-menu>
|
||||
<!-- <el-menu
|
||||
default-active="0"
|
||||
class="el-menu-vertical-demo"
|
||||
:collapse="isCollapse"
|
||||
@open="handleOpen"
|
||||
@close="handleClose"
|
||||
>
|
||||
<!-- <el-menu-item :index="String(0)" @click="$router.push(mock[0].path)">
|
||||
<template #title>
|
||||
<i :class="['iconfont', mock[0].meta.icon]"></i>
|
||||
<span>{{ mock[0].meta.title }}</span>
|
||||
</template>
|
||||
</el-menu-item>
|
||||
|
||||
<el-menu-item :index="String(1)" @click="$router.push(mock[1].path)">
|
||||
<template #title>
|
||||
<i :class="['iconfont', mock[1].meta.icon]"></i>
|
||||
<span>{{ mock[1].meta.title }}</span>
|
||||
</template>
|
||||
</el-menu-item> -->
|
||||
</el-menu-item>
|
||||
<el-menu-item :index="String(0)" @click="$router.push(mock[0].path)">
|
||||
<template #title>
|
||||
<i :class="['iconfont', mock[0].meta.icon]"></i>
|
||||
<span>{{ mock[0].meta.title }}</span>
|
||||
</template>
|
||||
</el-menu-item>
|
||||
</el-menu>
|
||||
</el-menu> -->
|
||||
</div>
|
||||
</aside>
|
||||
</el-aside>
|
||||
|
@ -98,6 +198,23 @@ function loginOut () {
|
|||
</el-container>
|
||||
</el-container>
|
||||
</section>
|
||||
<el-dialog v-model="dialogToLead" title="修改密码" style="width: 25%; height: 35%">
|
||||
<el-form :model="form" :rules="rules" label-width="80px" ref="formData">
|
||||
<el-form-item label="用户名" prop="LoginName">
|
||||
<el-input v-model="form.LoginName" placeholder="请输入用户名" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item label="旧密码" prop="OldPassword">
|
||||
<el-input v-model="form.OldPassword" placeholder="请输入旧密码" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item label="新密码" prop="NewPassword">
|
||||
<el-input v-model="form.NewPassword" placeholder="请输入新密码" clearable />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitUpload">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<style scoped lang="scss">
|
||||
.common-layout {
|
||||
|
@ -155,7 +272,7 @@ function loginOut () {
|
|||
:deep(.el-tabs__item) {
|
||||
width: 88px;
|
||||
height: 24px;
|
||||
background-color: rgba(69, 85, 82, 0.10);
|
||||
background-color: rgba(69, 85, 82, 0.1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -167,7 +284,8 @@ function loginOut () {
|
|||
overflow: hidden;
|
||||
}
|
||||
.el-menu-item.is-active {
|
||||
color: #0D867F;
|
||||
color: rgb(0,122,252);
|
||||
background: rgb(236, 245, 255);
|
||||
}
|
||||
.iconfont {
|
||||
margin-right: 16px;
|
||||
|
|
37
src/main.js
|
@ -8,5 +8,40 @@ import './style/reset.css'
|
|||
import './assets/fonts/index.css'
|
||||
import store from '@/store'
|
||||
import vue3SeamlessScroll from 'vue3-seamless-scroll'
|
||||
import 'amfe-flexible'; // 引入 lib-flexible
|
||||
import "./assets/font.css"
|
||||
// 引入格式化时间工具
|
||||
import moment from 'moment';
|
||||
moment.locale('zh-cn');
|
||||
// // 动态调整根字体大小的函数
|
||||
const updateRootFontSize = () => {
|
||||
const baseSize = 16; // 基准字体大小
|
||||
// const minFontSize = 12; // 最小字体大小
|
||||
// const maxFontSize = 25; // 最大字体大小
|
||||
const designHeight = 1080; // 设计稿的宽度基准
|
||||
const clientHeight = document.documentElement.clientHeight; // 当前窗口的宽度
|
||||
const scale = clientHeight / designHeight; // 计算当前窗口宽度与设计稿宽度的比例
|
||||
let newSize = baseSize * scale * 12;
|
||||
// 限制字体大小在最小和最大范围内
|
||||
// if (newSize < minFontSize) {
|
||||
// newSize = minFontSize;
|
||||
// } else if (newSize > maxFontSize) {
|
||||
// newSize = maxFontSize;
|
||||
// }
|
||||
|
||||
createApp(App).use(router).use(store).use(vue3SeamlessScroll).use(ElementPlus, { locale: zhCN }).mount('#app')
|
||||
// 设置根元素的字体大小
|
||||
document.documentElement.style.fontSize = `${newSize}px`;
|
||||
};
|
||||
|
||||
// 监听窗口大小变化,并动态调整字体大小
|
||||
window.addEventListener('resize', updateRootFontSize);
|
||||
// 初始化时立即设置一次字体大小
|
||||
updateRootFontSize();
|
||||
const app = createApp(App);
|
||||
app.config.globalProperties.$moment = moment
|
||||
app.use(router)
|
||||
app.use(store)
|
||||
app.use(vue3SeamlessScroll)
|
||||
app.use(ElementPlus, { locale: zhCN })
|
||||
app.mount('#app')
|
||||
// createApp(App).use(router).use(store).use(vue3SeamlessScroll).use(ElementPlus, { locale: zhCN }).mount('#app')
|
||||
|
|
|
@ -1,16 +1,22 @@
|
|||
import { createRouter, createWebHashHistory } from 'vue-router'
|
||||
import Index from '../views/largeScreen/index.vue'
|
||||
// 引入其他组件...
|
||||
const routes = [
|
||||
{
|
||||
path: '/',
|
||||
name: '',
|
||||
redirect: '/TrainingManage'
|
||||
redirect: '/login'
|
||||
},
|
||||
{
|
||||
path: '/login',
|
||||
name: 'Login',
|
||||
component: () => import('@/views/login/index.vue')
|
||||
},
|
||||
{
|
||||
path: '/index',
|
||||
name: 'Index',
|
||||
component: Index
|
||||
},
|
||||
{
|
||||
path: '/TrainingManage',
|
||||
name: 'TrainingManage',
|
||||
|
@ -18,14 +24,30 @@ const routes = [
|
|||
redirect: '/TrainingManage',
|
||||
|
||||
children: [
|
||||
|
||||
{
|
||||
path: '/schedule',
|
||||
component: () => import('@/views/schedule/index.vue'),
|
||||
meta: { sort: 1, title: '排班表管理', icon: '' }
|
||||
},
|
||||
{
|
||||
path: '/cameraManagement',
|
||||
component: () => import('@/views/cameraManagement/index.vue'),
|
||||
meta: { sort: 2, title: '摄像头管理', icon: '' }
|
||||
},
|
||||
{
|
||||
path: '/TrainingManage',
|
||||
component: () => import('@/views/TrainingManage/index.vue'),
|
||||
meta: { sort: 5, title: '文本管理', icon: '' }
|
||||
}
|
||||
meta: { sort: 3, title: '文本管理', icon: '' }
|
||||
},
|
||||
{
|
||||
path: '/personnelManagement',
|
||||
component: () => import('@/views/personnelManagement/index.vue'),
|
||||
meta: { sort: 4, title: '人员管理', icon: '' }
|
||||
},
|
||||
|
||||
]
|
||||
}
|
||||
},
|
||||
]
|
||||
|
||||
const router = createRouter({
|
||||
|
|
|
@ -1,9 +1,20 @@
|
|||
// import {ref} from "vue";
|
||||
|
||||
export default [
|
||||
|
||||
{
|
||||
path: 'schedule',
|
||||
meta: { sort: 1, title: '排班表管理', icon: 'icon-chengji' }
|
||||
},
|
||||
{
|
||||
path: 'cameraManagement',
|
||||
meta: { sort: 2, title: '摄像头管理', icon: 'icon-chengji' }
|
||||
},
|
||||
{
|
||||
path: 'TrainingManage',
|
||||
meta: { sort: 1, title: '文本管理', icon: 'icon-chengji' }
|
||||
meta: { sort: 3, title: '文本管理', icon: 'icon-chengji' }
|
||||
},
|
||||
{
|
||||
path: 'personnelManagement',
|
||||
meta: { sort: 4, title: '人员管理', icon: 'icon-chengji' }
|
||||
}
|
||||
]
|
||||
|
|
|
@ -0,0 +1,78 @@
|
|||
:root {
|
||||
font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
|
||||
line-height: 1.5;
|
||||
font-weight: 400;
|
||||
|
||||
color-scheme: light dark;
|
||||
color: rgba(255, 255, 255, 0.87);
|
||||
background-color: #242424;
|
||||
|
||||
font-synthesis: none;
|
||||
text-rendering: optimizeLegibility;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
a {
|
||||
font-weight: 500;
|
||||
color: #646cff;
|
||||
text-decoration: inherit;
|
||||
}
|
||||
a:hover {
|
||||
color: #535bf2;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
display: flex;
|
||||
place-items: center;
|
||||
min-width: 320px;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 3.2em;
|
||||
line-height: 1.1;
|
||||
}
|
||||
|
||||
button {
|
||||
border-radius: 8px;
|
||||
border: 1px solid transparent;
|
||||
padding: 0.6em 1.2em;
|
||||
font-size: 1em;
|
||||
font-weight: 500;
|
||||
font-family: inherit;
|
||||
background-color: #1a1a1a;
|
||||
cursor: pointer;
|
||||
transition: border-color 0.25s;
|
||||
}
|
||||
button:hover {
|
||||
border-color: #646cff;
|
||||
}
|
||||
button:focus,
|
||||
button:focus-visible {
|
||||
outline: 4px auto -webkit-focus-ring-color;
|
||||
}
|
||||
|
||||
.card {
|
||||
padding: 2em;
|
||||
}
|
||||
|
||||
#app {
|
||||
width: 100vw; /* 视口宽度 */
|
||||
height: 100vh; /* 视口高度 */
|
||||
overflow: hidden; /* 防止内容溢出 */
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
:root {
|
||||
color: #213547;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
a:hover {
|
||||
color: #747bff;
|
||||
}
|
||||
button {
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
}
|
|
@ -107,13 +107,16 @@ section {
|
|||
display: block;
|
||||
}
|
||||
body {
|
||||
line-height: 1;
|
||||
line-height: 1.5;
|
||||
font-weight: 400;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
font-family: "Microsoft YaHei", "PingFangSC-Regular", "Helvetica Neue",
|
||||
"Helvetica", "Hiragino Sans GB", "SimSun", "sans-serif";
|
||||
font-size: 14px;
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
place-items: center;
|
||||
}
|
||||
ol,
|
||||
ul {
|
||||
|
@ -135,8 +138,21 @@ table {
|
|||
border-spacing: 0;
|
||||
}
|
||||
#app {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.dialog-footer{
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
/* padding-top: 80px; */
|
||||
top: 85%;
|
||||
position: absolute;
|
||||
right: 4%;
|
||||
}
|
||||
.el-table__body-wrapper{
|
||||
overflow: auto;
|
||||
position: relative;
|
||||
flex: none;
|
||||
height: 660px !important;
|
||||
}
|
||||
|
|
|
@ -3,13 +3,27 @@
|
|||
<div class="WebToolbar">
|
||||
<div class="FormComponent">
|
||||
<el-form :inline="true" :model="formInline" class="demo-form-inline">
|
||||
<el-form-item label="时间">
|
||||
<el-date-picker v-model="form.StatisticsTime" value-format="YYYY-MM-DD" type="date" placeholder="请选择时间" />
|
||||
<el-form-item label="文本名称">
|
||||
<el-input
|
||||
v-model="formInline.TextName"
|
||||
placeholder="请输入文本名称"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="上传时间">
|
||||
<el-date-picker
|
||||
v-model="formInline.time"
|
||||
value-format="YYYY-MM-DD"
|
||||
type="datetimerange"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="ButtonAssembly">
|
||||
<el-button style="color: #fff" @click="queryData()">
|
||||
<el-button style="color: #fff" @click="queryData">
|
||||
<img src="../../assets/menu/search.png" alt="" />
|
||||
<span>查询</span>
|
||||
</el-button>
|
||||
|
@ -23,32 +37,52 @@
|
|||
<div class="actionBar">
|
||||
<h1>文本列表</h1>
|
||||
<div class="Worktop">
|
||||
|
||||
<el-button class="BlueBack" @click="dialogToLead = true">
|
||||
<!-- <img src="../../../assets/menu/toLead.png" alt=""/> -->
|
||||
<span>新增</span>
|
||||
<el-button class="BlueBack" @click="addBtn" :icon="Plus">
|
||||
新增
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ExaminationForm">
|
||||
<el-table
|
||||
ref="multipleTableRef"
|
||||
:data="tableData"
|
||||
style="width: 100%"
|
||||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table-column type="selection" />
|
||||
<el-table-column label="序号" type="index" :index="indexMethod" width="60px"/>
|
||||
<el-table-column property="StatisticsTime" label="表时间" />
|
||||
<el-table-column property="CreateTime" label="创建时间" />
|
||||
<el-table-column property="" label="操作">
|
||||
<el-table ref="multipleTableRef" :data="tableData" style="width: 100%">
|
||||
<el-table-column
|
||||
label="序号"
|
||||
type="index"
|
||||
:index="indexMethod"
|
||||
width="80px"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column property="TextName" label="文本名称" align="center" />
|
||||
<el-table-column property="FounderName" label="创建人" align="center" />
|
||||
<el-table-column property="TextPath" label="文本链接" align="center" />
|
||||
<el-table-column property="UploadTime" label="上传时间" align="center" />
|
||||
<el-table-column property="" label="操作" align="center">
|
||||
<template v-slot="scope">
|
||||
<el-button @click="handleDown(scope.row)">下载</el-button>
|
||||
<el-button
|
||||
@click="handleDown(scope.row)"
|
||||
:icon="Download"
|
||||
size="mini"
|
||||
type="text"
|
||||
>下载</el-button
|
||||
>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
:icon="Edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
>编辑</el-button
|
||||
>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
:icon="Delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
>删除</el-button
|
||||
>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-pagination
|
||||
v-model:current-page="InlineForm.PageIndex"
|
||||
:current-page="InlineForm.PageIndex"
|
||||
:page-size="InlineForm.PageSize"
|
||||
:small="small"
|
||||
:disabled="disabled"
|
||||
|
@ -63,8 +97,13 @@
|
|||
</div>
|
||||
|
||||
<!-- 新增 -->
|
||||
<el-dialog v-model="dialogToLead" title="新增" style="width:30%;height:50%" >
|
||||
<el-form-item label="上传:" prop="SoftwareName">
|
||||
<el-dialog v-model="dialogToLead" :title="title" style="width: 25%; height: 35%">
|
||||
<el-form :model="form" :rules="rules" label-width="80px" ref="formData">
|
||||
<el-form-item label="文本名称" prop="TextName">
|
||||
<!-- <el-input v-model="form.TextName" placeholder="请输入文本名称" clearable /> -->
|
||||
<el-input v-model="form.TextName" placeholder="请输入文本名称" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item label="文本上传" prop="textFile">
|
||||
<el-upload
|
||||
ref="uploadRef"
|
||||
action="#"
|
||||
|
@ -74,223 +113,366 @@
|
|||
:limit="1"
|
||||
:on-exceed="handleExceed"
|
||||
:before-remove="handleRemove"
|
||||
:file-list="uploadFile"
|
||||
>
|
||||
<template #trigger>
|
||||
<el-button type="primary" >选择</el-button>
|
||||
<el-button type="primary">点击上传</el-button>
|
||||
</template>
|
||||
<el-button class="ml-3" type="success" @click="submitUpload"> 上传 </el-button>
|
||||
<!-- <el-button type="success" @click="submitUpload"> 点击上传 </el-button> -->
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitUpload">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, reactive, onMounted, nextTick, getCurrentInstance } from 'vue'
|
||||
import { ElTable, ElMessageBox, ElMessage } from 'element-plus'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { ref, reactive, onMounted, nextTick, getCurrentInstance } from "vue";
|
||||
import { ElTable, ElMessageBox, ElMessage } from "element-plus";
|
||||
import { Download, Delete, Edit, Search,Plus } from "@element-plus/icons-vue";
|
||||
import { useRouter } from "vue-router";
|
||||
import {
|
||||
ImportBusinessStatistics,
|
||||
DownloadBusinessStatistics,
|
||||
GetBusinessStatisticsList,
|
||||
DownloadTemplate
|
||||
|
||||
} from '@/api/file.js'
|
||||
UploadTextFile,
|
||||
DownloadText,
|
||||
GetTextList,
|
||||
DownloadTemplate,
|
||||
AddText,
|
||||
DeleteText,
|
||||
GetTextDetails,
|
||||
EditText,
|
||||
} from "@/api/file.js";
|
||||
|
||||
const formInline = reactive({
|
||||
// StatisticsId: '',
|
||||
StatisticsTime: '',
|
||||
PageIndex: 1,
|
||||
PageSize: 10
|
||||
})
|
||||
PageSize: 10,
|
||||
TextName: "",
|
||||
time: [],
|
||||
});
|
||||
const resetFormInline = () => {
|
||||
// formInline.StatisticsId = ''
|
||||
formInline.StatisticsTime = ''
|
||||
getTable()
|
||||
// for (const key in formInline) {
|
||||
// if ( key !== 'PageIndex' || key !== 'PageIndex' ) formInline[key] = ''
|
||||
// }
|
||||
}
|
||||
(formInline.PageIndex = 1),
|
||||
(formInline.PageSize = 10),
|
||||
(formInline.TextName = ""),
|
||||
(formInline.time = []);
|
||||
getTable();
|
||||
};
|
||||
// 多选框
|
||||
const indexMethod = (index) => {
|
||||
return index + 1
|
||||
}
|
||||
return index + 1;
|
||||
};
|
||||
|
||||
// 新增数据,弹框显示
|
||||
const formRef = ref(null)
|
||||
const dialogFormVisible = ref(false)
|
||||
const dialogFormVisible = ref(false);
|
||||
function handleCreate() {
|
||||
dialogFormVisible.value = true
|
||||
dialogFormVisible.value = true;
|
||||
}
|
||||
const formLabelWidth = '150px'
|
||||
const value1 = ref('')
|
||||
const value2 = ref('')
|
||||
const formLabelWidth = "150px";
|
||||
const state = reactive({
|
||||
rules: {},
|
||||
scenemList: [],
|
||||
platformAreaList: [],
|
||||
lineList: []
|
||||
})
|
||||
const form = reactive({
|
||||
EnterpriseName: '',
|
||||
DistrictCode: '',
|
||||
EnterpriseCode: '',
|
||||
ModelName: '',
|
||||
VersionNumber: '',
|
||||
MapLongitude: '',
|
||||
MapLatitude: '',
|
||||
TrainingSize: '',
|
||||
ModelResourcesPath: '',
|
||||
ModelResources: '',
|
||||
UpdateTime: ''
|
||||
})
|
||||
lineList: [],
|
||||
});
|
||||
const form = reactive({});
|
||||
|
||||
// 查询列表
|
||||
onMounted(() => {
|
||||
getTable()
|
||||
})
|
||||
getTable();
|
||||
});
|
||||
|
||||
// 考试列表
|
||||
const total = ref(0)
|
||||
const tableData = ref([])
|
||||
const total = ref(0);
|
||||
const tableData = ref([]);
|
||||
const rules = ref({
|
||||
TextName: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入文本名称",
|
||||
trigger: "change",
|
||||
},
|
||||
],
|
||||
});
|
||||
const queryData = () => {
|
||||
formInline.PageIndex = 1
|
||||
getTable()
|
||||
}
|
||||
formInline.PageIndex = 1;
|
||||
getTable();
|
||||
};
|
||||
const getTable = async () => {
|
||||
let formParams = {
|
||||
PageIndex: InlineForm.PageIndex,
|
||||
PageSize: InlineForm.PageSize,
|
||||
TextName: formInline.TextName,
|
||||
StartTime: formInline.time != null ? formInline.time[0] : "",
|
||||
EndTime: formInline.time != null ? formInline.time[1] : "",
|
||||
};
|
||||
try {
|
||||
const { code, data } = await GetBusinessStatisticsList({
|
||||
...formInline
|
||||
})
|
||||
const { code, data } = await GetTextList({
|
||||
...formParams,
|
||||
});
|
||||
|
||||
if (code === 0) {
|
||||
console.log('data', data)
|
||||
total.value = data.total
|
||||
tableData.value = data.list
|
||||
total.value = data.total;
|
||||
tableData.value = data.list;
|
||||
} else {
|
||||
total.value = 0
|
||||
tableData.value = []
|
||||
total.value = 0;
|
||||
tableData.value = [];
|
||||
}
|
||||
} catch (error) {}
|
||||
}
|
||||
// 下载模板
|
||||
// const handleDownloadUser = () => {
|
||||
// DownloadTemplate({ FileName: 'Upload/Excel/业务统计表模板.xlsx' }).then(res => {
|
||||
// // console.log(res, 'res--')
|
||||
// const b = new Blob([res])
|
||||
// const url = window.URL.createObjectURL(b)
|
||||
// const a = document.createElement('a')
|
||||
// a.href = url
|
||||
// a.download = '业务统计表模板.xlsx'
|
||||
// document.body.appendChild(a)
|
||||
// a.click()
|
||||
// window.URL.revokeObjectURL(url)
|
||||
// })
|
||||
// }
|
||||
|
||||
};
|
||||
// 新增
|
||||
const uploadRef = ref()
|
||||
const uploadRef = ref();
|
||||
const handleChange = (file, fileList) => {
|
||||
// uploadRef.value.clearFiles()
|
||||
console.log(uploadRef.value)
|
||||
}
|
||||
loadSize(file.raw);
|
||||
};
|
||||
const handleExceed = (files) => {
|
||||
uploadRef.value.clearFiles()
|
||||
nextTick(() => {
|
||||
uploadRef.value.handleStart(files[0])
|
||||
})
|
||||
}
|
||||
const uploadFile = ref({})
|
||||
uploadRef.value.clearFiles();
|
||||
uploadRef.value.handleStart(files[0]);
|
||||
});
|
||||
};
|
||||
const uploadFile = ref([]);
|
||||
const title = ref("");
|
||||
const submitUpload = () => {
|
||||
uploadRef.value.submit()
|
||||
}
|
||||
// 删除文件
|
||||
const { proxy } = getCurrentInstance()
|
||||
const handleRemove = (file, fileList) => {}
|
||||
const toUpload = async (param) => {
|
||||
// if (!uploadRef.value) return ElMessage.error('请先上传文件')
|
||||
const formData = new FormData()
|
||||
uploadFile.value = param.file
|
||||
console.log(param.file, ' param.file')
|
||||
formData.append('Files', param.file)
|
||||
console.log(formData, ' param')
|
||||
|
||||
await ImportBusinessStatistics(formData).then((res) => {
|
||||
if (res.code === 0) {
|
||||
proxy.$refs["formData"].validate((valid) => {
|
||||
// uploadRef.value.submit();
|
||||
if (valid) {
|
||||
if (title.value == "新增文本") {
|
||||
let paramsData = {
|
||||
TextName: form.TextName,
|
||||
TextPath: form.TextPath,
|
||||
FounderId:localStorage.getItem('ReviewerId'),
|
||||
FounderName:localStorage.getItem('Reviewer'),
|
||||
};
|
||||
AddText(paramsData)
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
dialogToLead.value = false;
|
||||
ElMessage({
|
||||
message: '上传成功',
|
||||
type: 'success'
|
||||
})
|
||||
// // 确保DOM已更新
|
||||
getTable()
|
||||
setTimeout(() => {
|
||||
dialogToLead.value = false
|
||||
proxy.$refs.uploadRef.handleRemove(param.file)
|
||||
}, 600)
|
||||
message: "新增成功",
|
||||
type: "success",
|
||||
});
|
||||
getTable();
|
||||
} else {
|
||||
ElMessage.error(res?.data || '操作失败')
|
||||
ElMessage({
|
||||
message: "新增失败",
|
||||
type: "warning",
|
||||
});
|
||||
}
|
||||
})
|
||||
}
|
||||
const multipleTableRef = ref()
|
||||
const multipleSelection = ref([])
|
||||
const handleSelectionChange = (val) => {
|
||||
if (val.length > 1) {
|
||||
multipleTableRef.value.clearSelection()
|
||||
multipleTableRef.value.toggleRowSelection(val.pop())
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
} else {
|
||||
// this.currentRow = val.pop();
|
||||
multipleSelection.value = val
|
||||
let paramsData = {
|
||||
TextId: form.TextId,
|
||||
TextName: form.TextName,
|
||||
TextPath: form.TextPath,
|
||||
};
|
||||
EditText(paramsData)
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
dialogToLead.value = false;
|
||||
getTable();
|
||||
ElMessage({
|
||||
message: "修改成功",
|
||||
type: "success",
|
||||
});
|
||||
} else {
|
||||
ElMessage({
|
||||
message: "修改失败",
|
||||
type: "warning",
|
||||
});
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
}
|
||||
}
|
||||
const textarea = ref('')
|
||||
const small = ref(false)
|
||||
const background = ref(false)
|
||||
const disabled = ref(false)
|
||||
});
|
||||
};
|
||||
const { proxy } = getCurrentInstance();
|
||||
const handleRemove = (file, fileList) => {};
|
||||
const toUpload = async (param) => {
|
||||
console.log(param, "文件参数");
|
||||
proxy.$refs.uploadRef.handleRemove(param.file);
|
||||
// if (!uploadRef.value) return ElMessage.error('请先上传文件')
|
||||
};
|
||||
const multipleTableRef = ref();
|
||||
|
||||
const small = ref(false);
|
||||
const background = ref(false);
|
||||
const disabled = ref(false);
|
||||
|
||||
// 分页
|
||||
const InlineForm = reactive({
|
||||
PageIndex: 1,
|
||||
PageSize: 10
|
||||
})
|
||||
PageSize: 10,
|
||||
});
|
||||
const handleSizeChange = (val) => {
|
||||
// console.log(`${val} items per page`)
|
||||
formInline.PageSize = val
|
||||
getTable()
|
||||
}
|
||||
const dialogToLead = ref(false)
|
||||
InlineForm.PageSize = val;
|
||||
getTable();
|
||||
};
|
||||
const dialogToLead = ref(false);
|
||||
const handleCurrentChange = (val) => {
|
||||
// console.log(`current page: ${val}`)
|
||||
formInline.PageIndex = val
|
||||
getTable()
|
||||
}
|
||||
const StatisticsId = ref('')
|
||||
InlineForm.PageIndex = val;
|
||||
getTable();
|
||||
};
|
||||
// 下载文件
|
||||
const handleDown = (row) => {
|
||||
// fileListFile.value = ref([])
|
||||
// const fileListFile1 = ref([])
|
||||
|
||||
DownloadBusinessStatistics({ StatisticsId: row.StatisticsId }).then(res => {
|
||||
// 正则表达式匹配最后一个文件名及其扩展名
|
||||
let fileExtension = row.TextPath.split("/").pop().split("~")[0];
|
||||
DownloadText({ TextId: row.TextId }).then((res) => {
|
||||
// console.log(res, 'res--')
|
||||
const bNE = new Blob([res])
|
||||
const urlNE = window.URL.createObjectURL(bNE)
|
||||
const aNE = document.createElement('a')
|
||||
aNE.href = urlNE
|
||||
aNE.download = '业务统计表.xlsx'
|
||||
document.body.appendChild(aNE)
|
||||
aNE.click()
|
||||
window.URL.revokeObjectURL(urlNE)
|
||||
const bNE = new Blob([res]);
|
||||
const urlNE = window.URL.createObjectURL(bNE);
|
||||
const aNE = document.createElement("a");
|
||||
aNE.href = urlNE;
|
||||
aNE.download = fileExtension;
|
||||
document.body.appendChild(aNE);
|
||||
aNE.click();
|
||||
window.URL.revokeObjectURL(urlNE);
|
||||
});
|
||||
};
|
||||
//删除文件
|
||||
function handleDelete(row) {
|
||||
let paramsData = {
|
||||
TextId: row.TextId,
|
||||
};
|
||||
ElMessageBox.confirm("确定要删除吗?", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
}).then(() => {
|
||||
DeleteText(paramsData)
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
ElMessage({
|
||||
message: "删除成功",
|
||||
type: "success",
|
||||
});
|
||||
getTable();
|
||||
} else {
|
||||
ElMessage.error(res?.data || "删除失败");
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
});
|
||||
}
|
||||
//新增
|
||||
function addBtn() {
|
||||
form.TextName = "";
|
||||
title.value = "新增文本";
|
||||
dialogToLead.value = true;
|
||||
nextTick(() => {
|
||||
if (proxy.$refs.uploadRef.clearFiles() != undefined ) {
|
||||
proxy.$refs.uploadRef.clearFiles();
|
||||
}
|
||||
});
|
||||
}
|
||||
//修改
|
||||
function handleUpdate(row) {
|
||||
uploadFile.value = [];
|
||||
let paramsData = {
|
||||
TextId: row.TextId,
|
||||
};
|
||||
title.value = "修改文本";
|
||||
GetTextDetails(paramsData)
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
let fileExtension = res.data.TextPath.split("/").pop().split("~")[0];
|
||||
form.TextName = res.data.TextName;
|
||||
form.TextId = res.data.TextId;
|
||||
form.TextPath = res.data.TextPath;
|
||||
uploadFile.value.push({ name: fileExtension });
|
||||
dialogToLead.value = true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
}
|
||||
|
||||
// 取消
|
||||
const closeDialog = () => {
|
||||
for (const key in form) {
|
||||
form[key] = ''
|
||||
}
|
||||
StatisticsId.value = ''
|
||||
dialogFormVisible.value = false
|
||||
function cancel() {
|
||||
form.TextName = "";
|
||||
// uploadFile.value = null;
|
||||
dialogToLead.value = false;
|
||||
}
|
||||
// 乱七八糟开始
|
||||
const S4 = () => {
|
||||
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
|
||||
};
|
||||
const guid = () => {
|
||||
return S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4();
|
||||
};
|
||||
//分片上传
|
||||
const loadSize = (file) => {
|
||||
const size = file.size; // 文件大小
|
||||
const maxZrea = 8; // 设置每个分区大小 MB
|
||||
const bufferSize = maxZrea * (1024 * 1024);
|
||||
|
||||
const fileStart = ref(0);
|
||||
const fileEnd = bufferSize;
|
||||
// 重新定义变量
|
||||
const fileStartValue = fileStart.value;
|
||||
const fileEndValue = fileEnd;
|
||||
console.log(fileStartValue, "fileStart");
|
||||
|
||||
const state = reactive({
|
||||
items: [],
|
||||
});
|
||||
const arrFile = ref([]);
|
||||
if (fileStartValue < size) {
|
||||
const fileInfo = reactive({
|
||||
File: file.slice(fileStartValue, fileEndValue),
|
||||
Start: fileStartValue,
|
||||
End: fileEndValue,
|
||||
});
|
||||
state.items.push(fileInfo);
|
||||
arrFile.value = state.items;
|
||||
const fileStart = fileEndValue;
|
||||
const fileEnd = fileStart + bufferSize;
|
||||
}
|
||||
const count = arrFile.value.length;
|
||||
const filename = file.name + "~" + guid();
|
||||
// const filename = file.name;
|
||||
const paramFilename = file.name; // 上传filename
|
||||
console.log(arrFile.value, "arrFile.value");
|
||||
getCover(count, filename, bufferSize, arrFile.value, size, paramFilename);
|
||||
};
|
||||
const getCover = async (count, filename, bufferSize, arrFile, size, paramFilename) => {
|
||||
console.log(count, "count");
|
||||
for (let i = 0; i < count; i++) {
|
||||
const formData = new FormData();
|
||||
formData.append("file", arrFile[i].File); // 将file属性添加到formData里
|
||||
const url =
|
||||
"?Name=" +
|
||||
filename +
|
||||
"&Number=" +
|
||||
i +
|
||||
"&BufferSize=" +
|
||||
bufferSize +
|
||||
"&Count=" +
|
||||
count +
|
||||
"&Start=" +
|
||||
arrFile[i].Start +
|
||||
"&End=" +
|
||||
arrFile[i].End +
|
||||
"&Size=" +
|
||||
size +
|
||||
"&FolderName=" +
|
||||
"File";
|
||||
await UploadTextFile(url, formData).then((res) => {
|
||||
form.TextPath = res;
|
||||
// form.CoverName = paramFilename;
|
||||
});
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
@ -323,7 +505,7 @@ const closeDialog = () => {
|
|||
.ButtonAssembly {
|
||||
.el-button {
|
||||
width: 84px;
|
||||
height: 32px;
|
||||
height: 40px;
|
||||
border: none;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
|
@ -335,7 +517,7 @@ const closeDialog = () => {
|
|||
}
|
||||
}
|
||||
.el-button:nth-child(1) {
|
||||
background-color: #0d867f;
|
||||
background-color: rgb(0,122,252);
|
||||
}
|
||||
.el-button:nth-child(2) {
|
||||
background-color: #f2f3f5;
|
||||
|
@ -361,16 +543,16 @@ const closeDialog = () => {
|
|||
}
|
||||
.Worktop {
|
||||
.el-button {
|
||||
border: 1px solid #0d867f;
|
||||
border: 1px solid rgb(0,122,252);
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
color: #0d867f;
|
||||
color: rgb(0,122,252);
|
||||
}
|
||||
.el-button:hover {
|
||||
background-color: transparent;
|
||||
}
|
||||
.BlueBack {
|
||||
background: #0d867f;
|
||||
background: rgb(0,122,252);
|
||||
border-radius: 2px 2px 2px 2px;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
|
@ -383,7 +565,7 @@ const closeDialog = () => {
|
|||
}
|
||||
}
|
||||
.BlueBack:hover {
|
||||
background-color: #0d867f;
|
||||
background-color: rgb(0,122,252);
|
||||
}
|
||||
.Delete {
|
||||
background: #f2f3f5;
|
||||
|
@ -423,12 +605,12 @@ const closeDialog = () => {
|
|||
margin-top: 18px;
|
||||
}
|
||||
:deep(.el-pager li.is-active) {
|
||||
background-color: #e7f9f8 !important;
|
||||
background-color: rgb(181,216,241) !important;
|
||||
font-weight: 400;
|
||||
color: #0d867f !important;
|
||||
color: rgb(0,122,252) !important;
|
||||
}
|
||||
:deep(.el-table--enable-row-hover .el-table__body tr:hover > td) {
|
||||
background-color: #e7f9f8 !important;
|
||||
background-color: rgb(181,216,241) !important;
|
||||
}
|
||||
|
||||
:deep(.el-select) {
|
||||
|
@ -454,7 +636,8 @@ const closeDialog = () => {
|
|||
:deep(.el-textarea__inner) {
|
||||
width: 280px !important;
|
||||
}
|
||||
.user-name,.register{
|
||||
.user-name,
|
||||
.register {
|
||||
cursor: pointer;
|
||||
}
|
||||
.functionalUnit {
|
||||
|
@ -462,7 +645,7 @@ const closeDialog = () => {
|
|||
display: flex;
|
||||
.el-button {
|
||||
width: 84px;
|
||||
height: 32px;
|
||||
height: 40px;
|
||||
border: none;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
|
@ -518,7 +701,8 @@ margin-left: -385px;
|
|||
margin-top: 25px;
|
||||
:deep(.horizontal-list ul .el-upload-list__item) {
|
||||
width: 33% !important;
|
||||
float: left; margin-top: 25px;
|
||||
float: left;
|
||||
margin-top: 25px;
|
||||
}
|
||||
:deep(.el-link__inner) {
|
||||
display: inline-flex;
|
||||
|
@ -527,5 +711,4 @@ margin-top: 25px;
|
|||
width: 200px;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
|
|
@ -0,0 +1,613 @@
|
|||
<template>
|
||||
<div class="PageContent">
|
||||
<div class="WebToolbar">
|
||||
<div class="FormComponent">
|
||||
<el-form :inline="true" :model="formInline" class="demo-form-inline">
|
||||
<el-form-item label="摄像头IP">
|
||||
<el-input
|
||||
v-model="formInline.PersonnelName"
|
||||
placeholder="请输入摄像头IP"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="摄像头分类">
|
||||
<el-select
|
||||
v-model="formInline.Department"
|
||||
placeholder="请选择摄像头分类"
|
||||
clearable
|
||||
>
|
||||
<el-option
|
||||
:label="v.label"
|
||||
:value="v.label"
|
||||
v-for="(v, i) in departmentList"
|
||||
:key="i"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="摄像头状态">
|
||||
<el-select
|
||||
v-model="formInline.Department"
|
||||
placeholder="请选择摄像头状态"
|
||||
clearable
|
||||
>
|
||||
<el-option
|
||||
:label="v.label"
|
||||
:value="v.label"
|
||||
v-for="(v, i) in departmentList"
|
||||
:key="i"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="ButtonAssembly">
|
||||
<el-button style="color: #fff" @click="queryData">
|
||||
<img src="../../assets/menu/search.png" alt="" />
|
||||
<span>查询</span>
|
||||
</el-button>
|
||||
<el-button style="color: #1d2129" @click="resetFormInline">
|
||||
<img src="../../assets/menu/reset.png" alt="" />
|
||||
<span>重置</span>
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="Tabulation">
|
||||
<div class="actionBar">
|
||||
<h1>排班列表</h1>
|
||||
<div class="Worktop">
|
||||
<el-button class="BlueBack" @click="addBtn" :icon="Plus"> 新增 </el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ExaminationForm">
|
||||
<el-table ref="multipleTableRef" :data="tableData" style="width: 100%">
|
||||
<el-table-column label="序号" type="index" width="80px" align="center" />
|
||||
<el-table-column property="Department" label="摄像头协议" align="center" />
|
||||
<el-table-column property="PersonnelName" label="摄像头类型" align="center" />
|
||||
<el-table-column property="CreateTime" label="摄像头IP" align="center" />
|
||||
<el-table-column property="CreateTime" label="摄像头端口" align="center" />
|
||||
<el-table-column property="CreateTime" label="状态" align="center" />
|
||||
<el-table-column property="CreateTime" label="创建人" align="center" />
|
||||
<el-table-column property="CreateTime" label="创建时间" align="center" />
|
||||
<el-table-column property="CreateTime" label="上架时间" align="center" />
|
||||
<el-table-column property="" label="操作" align="center">
|
||||
<template v-slot="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
:icon="Upload"
|
||||
:disabled="scope.row.Status == '已发布'"
|
||||
@click="handleRelease(scope.row)"
|
||||
>发布</el-button
|
||||
>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
:icon="Edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
>编辑</el-button
|
||||
>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
:icon="Delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
>删除</el-button
|
||||
>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-pagination
|
||||
:current-page="InlineForm.PageIndex"
|
||||
:page-size="InlineForm.PageSize"
|
||||
:small="small"
|
||||
layout="total, prev, pager, next"
|
||||
:total="total"
|
||||
@size-change="handleSizeChange"
|
||||
@current-change="handleCurrentChange"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 新增 -->
|
||||
<el-dialog v-model="dialogToLead" :title="title" style="width: 25%; height: 35%">
|
||||
<el-form :model="form" :rules="rules" label-width="80px" ref="formData">
|
||||
<el-form-item label="摄像头名称" prop="Department">
|
||||
<el-input
|
||||
v-model="formInline.PersonnelName"
|
||||
placeholder="请输入摄像头名称"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="摄像头协议" prop="Department">
|
||||
<el-input
|
||||
v-model="formInline.PersonnelName"
|
||||
placeholder="请输入摄像头协议"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="摄像头类型" prop="PersonnelName">
|
||||
<el-input
|
||||
v-model="formInline.PersonnelName"
|
||||
placeholder="请输入摄像头类型"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="摄像头IP" prop="PersonnelName">
|
||||
<el-input
|
||||
v-model="formInline.PersonnelName"
|
||||
placeholder="请输入摄像头IP"
|
||||
clearable
|
||||
/></el-form-item>
|
||||
<el-form-item label="摄像头端口" prop="PersonnelName">
|
||||
<el-input
|
||||
v-model="formInline.PersonnelName"
|
||||
placeholder="请输入摄像头端口"
|
||||
clearable
|
||||
/></el-form-item>
|
||||
<el-form-item label="所属合作方" prop="PersonnelName">
|
||||
<el-input
|
||||
v-model="formInline.PersonnelName"
|
||||
placeholder="请输入所属合作方"
|
||||
clearable
|
||||
/></el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitUpload">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted, reactive, getCurrentInstance } from "vue";
|
||||
import {
|
||||
GetPersonnelList,
|
||||
AddPersonnel,
|
||||
DeletePersonnel,
|
||||
GetPersonnelDetails,
|
||||
EditPersonnel,
|
||||
} from "@/api/personnelManagement.js";
|
||||
import { ElTable, ElMessageBox, ElMessage } from "element-plus";
|
||||
import { Download, Delete, Edit, Search, Plus } from "@element-plus/icons-vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
//搜索表单、
|
||||
const formInline = reactive({});
|
||||
// 分页
|
||||
const InlineForm = reactive({
|
||||
PageIndex: 1,
|
||||
PageSize: 10,
|
||||
});
|
||||
//总数
|
||||
const total = ref(0);
|
||||
//部门下拉
|
||||
const departmentList = ref([
|
||||
{
|
||||
label: "后勤部",
|
||||
},
|
||||
{
|
||||
label: "人事部",
|
||||
},
|
||||
{
|
||||
label: "财务部",
|
||||
},
|
||||
]);
|
||||
//表格数据
|
||||
const tableData = ref([]);
|
||||
//添加表格
|
||||
const form = reactive({});
|
||||
const rules = reactive({
|
||||
PersonnelName: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入人员名称",
|
||||
trigger: "change",
|
||||
},
|
||||
],
|
||||
Department: [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择部门",
|
||||
trigger: "change",
|
||||
},
|
||||
],
|
||||
});
|
||||
//表格弹窗
|
||||
const dialogToLead = ref(false);
|
||||
//弹窗标题
|
||||
const title = ref("");
|
||||
//搜索
|
||||
function queryData() {
|
||||
InlineForm.PageIndex = 1;
|
||||
getList();
|
||||
}
|
||||
//重置
|
||||
function resetFormInline() {
|
||||
(formInline.PageIndex = 1),
|
||||
(formInline.PageSize = 10),
|
||||
(formInline.Department = ""),
|
||||
(formInline.PersonnelName = "");
|
||||
getList();
|
||||
}
|
||||
//分页
|
||||
const handleSizeChange = (val) => {
|
||||
InlineForm.PageSize = val;
|
||||
getList();
|
||||
};
|
||||
const handleCurrentChange = (val) => {
|
||||
InlineForm.PageIndex = val;
|
||||
getList();
|
||||
};
|
||||
//查询表格
|
||||
function getList() {
|
||||
let formParams = {
|
||||
PageIndex: InlineForm.PageIndex,
|
||||
PageSize: InlineForm.PageSize,
|
||||
PersonnelName: formInline.PersonnelName,
|
||||
Department: formInline.Department,
|
||||
};
|
||||
GetPersonnelList(formParams)
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
tableData.value = res.data.list;
|
||||
total.value = res.data.total;
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
}
|
||||
//添加按钮
|
||||
function addBtn() {
|
||||
(form.PersonnelName = ""), (form.Department = "");
|
||||
title.value = "添加人员";
|
||||
dialogToLead.value = true;
|
||||
}
|
||||
//修改按钮
|
||||
function handleUpdate(row) {
|
||||
let paramsData = {
|
||||
PersonnelId: row.PersonnelId,
|
||||
};
|
||||
GetPersonnelDetails(paramsData)
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
form.PersonnelName = res.data.PersonnelName;
|
||||
form.Department = res.data.Department;
|
||||
form.PersonnelId = res.data.PersonnelId;
|
||||
title.value = "修改人员";
|
||||
dialogToLead.value = true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
}
|
||||
//发布按钮
|
||||
function handleRelease(row) {
|
||||
|
||||
}
|
||||
//提交新增
|
||||
function submitUpload() {
|
||||
proxy.$refs["formData"].validate((valid) => {
|
||||
if (valid) {
|
||||
if (title.value == "添加人员") {
|
||||
AddPersonnel(form)
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
dialogToLead.value = false;
|
||||
ElMessage({
|
||||
message: "新增成功",
|
||||
type: "success",
|
||||
});
|
||||
getList();
|
||||
} else {
|
||||
ElMessage({
|
||||
message: "新增失败",
|
||||
type: "warning",
|
||||
});
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
} else if (title.value == "修改人员") {
|
||||
EditPersonnel(form)
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
dialogToLead.value = false;
|
||||
ElMessage({
|
||||
message: "修改成功",
|
||||
type: "success",
|
||||
});
|
||||
getList();
|
||||
} else {
|
||||
ElMessage({
|
||||
message: "修改失败",
|
||||
type: "warning",
|
||||
});
|
||||
getList();
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
//删除文件
|
||||
function handleDelete(row) {
|
||||
let paramsData = {
|
||||
PersonnelId: row.PersonnelId,
|
||||
};
|
||||
ElMessageBox.confirm("确定要删除吗?", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
}).then(() => {
|
||||
DeletePersonnel(paramsData)
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
ElMessage({
|
||||
message: "删除成功",
|
||||
type: "success",
|
||||
});
|
||||
getList();
|
||||
} else {
|
||||
ElMessage.error(res?.data || "删除失败");
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
});
|
||||
}
|
||||
//弹窗取消
|
||||
function cancel() {
|
||||
(form.PersonnelName = ""), (form.Department = "");
|
||||
dialogToLead.value = false;
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
//表格数据查询
|
||||
getList();
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.PageContent {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.WebToolbar {
|
||||
width: 100%;
|
||||
height: 72px;
|
||||
background-color: #fff;
|
||||
padding: 20px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
:deep(.el-form-item__content) {
|
||||
width: 256px !important;
|
||||
height: 32px !important;
|
||||
}
|
||||
:deep(.el-input) {
|
||||
width: 256px !important;
|
||||
}
|
||||
:deep(.el-select) {
|
||||
width: 256px !important;
|
||||
}
|
||||
:deep(.el-form-item__label) {
|
||||
color: #666 !important;
|
||||
}
|
||||
}
|
||||
.ButtonAssembly {
|
||||
.el-button {
|
||||
width: 84px;
|
||||
height: 40px;
|
||||
border: none;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
border-radius: 2px 2px 2px 2px;
|
||||
img {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin-right: 8px;
|
||||
}
|
||||
}
|
||||
.el-button:nth-child(1) {
|
||||
background-color: rgb(0, 122, 252);
|
||||
}
|
||||
.el-button:nth-child(2) {
|
||||
background-color: #f2f3f5;
|
||||
}
|
||||
}
|
||||
|
||||
.Tabulation {
|
||||
width: 100%;
|
||||
height: calc(100% - 72px);
|
||||
background-color: #fff;
|
||||
margin-top: 14px;
|
||||
padding: 20px;
|
||||
.actionBar {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
h1 {
|
||||
font-weight: 500;
|
||||
font-size: 20px;
|
||||
color: #1d2129;
|
||||
line-height: 28px;
|
||||
font-family: Microsoft YaHei, Microsoft YaHei;
|
||||
}
|
||||
}
|
||||
.Worktop {
|
||||
.el-button {
|
||||
border: 1px solid rgb(0, 122, 252);
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
color: rgb(0, 122, 252);
|
||||
}
|
||||
.el-button:hover {
|
||||
background-color: transparent;
|
||||
}
|
||||
.BlueBack {
|
||||
background: rgb(0, 122, 252);
|
||||
border-radius: 2px 2px 2px 2px;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
color: #ffffff;
|
||||
line-height: 22px;
|
||||
img {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin-right: 8px;
|
||||
}
|
||||
}
|
||||
.BlueBack:hover {
|
||||
background-color: rgb(0, 122, 252);
|
||||
}
|
||||
.Delete {
|
||||
background: #f2f3f5;
|
||||
border-radius: 2px 2px 2px 2px;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
color: #1d2129;
|
||||
line-height: 22px;
|
||||
border: none;
|
||||
img {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin-right: 8px;
|
||||
}
|
||||
}
|
||||
.Delete:hover {
|
||||
background-color: #f2f3f5;
|
||||
}
|
||||
}
|
||||
.ExaminationForm {
|
||||
margin-top: 16px;
|
||||
background-color: #0077aa;
|
||||
}
|
||||
.el-table tr {
|
||||
height: 41px;
|
||||
}
|
||||
.el-table td {
|
||||
height: 41px;
|
||||
}
|
||||
:deep(th) {
|
||||
background-color: #e5e6eb;
|
||||
}
|
||||
}
|
||||
.el-pagination {
|
||||
float: right;
|
||||
background-color: #fff !important;
|
||||
margin-top: 18px;
|
||||
}
|
||||
:deep(.el-pager li.is-active) {
|
||||
background-color: rgb(181,216,241) !important;
|
||||
font-weight: 400;
|
||||
color: rgb(0, 122, 252) !important;
|
||||
}
|
||||
:deep(.el-table--enable-row-hover .el-table__body tr:hover > td) {
|
||||
background-color: rgb(181,216,241) !important;
|
||||
}
|
||||
|
||||
:deep(.el-select) {
|
||||
width: 280px !important;
|
||||
}
|
||||
:deep(.el-input) {
|
||||
width: 280px !important;
|
||||
}
|
||||
.example {
|
||||
margin-left: 20px;
|
||||
color: red;
|
||||
}
|
||||
.backInformation {
|
||||
:deep(.el-input) {
|
||||
width: 280px !important;
|
||||
height: 120px !important;
|
||||
}
|
||||
}
|
||||
.dialog-footer {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
:deep(.el-textarea__inner) {
|
||||
width: 280px !important;
|
||||
}
|
||||
.user-name,
|
||||
.register {
|
||||
cursor: pointer;
|
||||
}
|
||||
.functionalUnit {
|
||||
margin-left: 20px;
|
||||
display: flex;
|
||||
.el-button {
|
||||
width: 84px;
|
||||
height: 40px;
|
||||
border: none;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
border-radius: 2px 2px 2px 2px;
|
||||
color: #fff;
|
||||
img {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin-right: 8px;
|
||||
}
|
||||
}
|
||||
.el-button:nth-child(1) {
|
||||
background-color: #2192ba;
|
||||
}
|
||||
.el-button:nth-child(2) {
|
||||
background-color: #17c85f;
|
||||
}
|
||||
}
|
||||
.TabularTitle {
|
||||
font-size: 14px;
|
||||
color: #747272;
|
||||
font-weight: bold;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.pagination {
|
||||
width: 100%;
|
||||
height: 30px;
|
||||
:deep(.el-pagination) {
|
||||
margin-top: 9px !important;
|
||||
}
|
||||
}
|
||||
.addSlip {
|
||||
.el-button {
|
||||
border: none;
|
||||
background-color: #0077aa;
|
||||
margin-top: 8px;
|
||||
color: #fff;
|
||||
}
|
||||
:deep(.el-pagination) {
|
||||
margin-top: 8px !important;
|
||||
}
|
||||
}
|
||||
.ml-3 {
|
||||
margin-left: 20px;
|
||||
}
|
||||
.upload-file-uploader {
|
||||
width: 50%;
|
||||
}
|
||||
.el-upload-list .el-upload-list__item {
|
||||
width: 33% !important;
|
||||
float: left;
|
||||
margin-left: -385px;
|
||||
margin-top: 25px;
|
||||
:deep(.horizontal-list ul .el-upload-list__item) {
|
||||
width: 33% !important;
|
||||
float: left;
|
||||
margin-top: 25px;
|
||||
}
|
||||
:deep(.el-link__inner) {
|
||||
display: inline-flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 200px;
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,418 @@
|
|||
.main {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
font-size: 20px;
|
||||
background-color: #082C48;
|
||||
|
||||
.top {
|
||||
width: 100%;
|
||||
height: 108px;
|
||||
background: url("@/assets/imgs/title.png") no-repeat;
|
||||
background-size: 100% 100%;
|
||||
font-family: 庞门正道;
|
||||
font-size: 44px;
|
||||
color: #FFFFFF;
|
||||
line-height: 53px;
|
||||
letter-spacing: 2px;
|
||||
text-shadow: 0px 0px 10px #34D1FF, 0px 3px 0px #24649A;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
|
||||
.title {
|
||||
margin-top: 22px
|
||||
}
|
||||
}
|
||||
|
||||
.core {
|
||||
height: calc(100% - 108px - 27px);
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: flex-end;
|
||||
padding: 0 42px 27px 42px;
|
||||
box-sizing: border-box;
|
||||
|
||||
.left {
|
||||
width: 22.42%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
|
||||
.first {
|
||||
width: 100%;
|
||||
height: 38.7%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
|
||||
.content {
|
||||
width: 92.5%;
|
||||
height: 83%;
|
||||
background: url(@/assets/imgs/functionInfo.png) no-repeat;
|
||||
background-size: 100% 100%;
|
||||
padding: 0 16px;
|
||||
box-sizing: border-box;
|
||||
margin-left: 14px;
|
||||
|
||||
.second-level-title {
|
||||
font-family: 庞门正道;
|
||||
font-size: 20px;
|
||||
line-height: 24px;
|
||||
letter-spacing: 1px;
|
||||
text-align: left;
|
||||
background: -webkit-linear-gradient(top, #FFFFFF, #BDDCF8);
|
||||
background: linear-gradient(to bottom, #FFFFFF, #BDDCF8);
|
||||
-webkit-background-clip: text;
|
||||
background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
color: transparent;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
margin-top: 24px
|
||||
}
|
||||
|
||||
.functionInfo {
|
||||
font-family: PingFang SC;
|
||||
font-size: 16px;
|
||||
color: #E9F4FF;
|
||||
height: 61%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
margin-top: 46px;
|
||||
width: 100%;
|
||||
|
||||
.functionItem {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding: 0 10px 0 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.second {
|
||||
height: calc(100% - 41.7%);
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
|
||||
.content> :not(:first-child) {
|
||||
margin-top: 19px;
|
||||
}
|
||||
|
||||
.content::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.content {
|
||||
width: 92.5%;
|
||||
height: 89%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: flex-start;
|
||||
overflow: auto;
|
||||
margin-left: 14px;
|
||||
|
||||
.alarmItem {
|
||||
background: url("@/assets/imgs/alarm.png") no-repeat;
|
||||
background-size: 100% 100%;
|
||||
width: 100%;
|
||||
height: 108px;
|
||||
padding: 2.4% 7px 9px 9px;
|
||||
box-sizing: border-box;
|
||||
// margin-top: 10px;
|
||||
|
||||
.alarmTitle {
|
||||
margin-left: 12px;
|
||||
font-size: 16px;
|
||||
color: #FFFFFF;
|
||||
display: flex;
|
||||
height: 27px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.alarmInfo {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
margin-top: 15px;
|
||||
margin-left: 5px;
|
||||
|
||||
.alarmContent {
|
||||
display: flex;
|
||||
// flex-direction: column;
|
||||
flex-wrap: wrap;
|
||||
margin-left: 12px;
|
||||
}
|
||||
|
||||
.alarmContent1 {
|
||||
display: flex;
|
||||
// flex-direction: column;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.center {
|
||||
width: 53.1%;
|
||||
height: 857px;
|
||||
background: url("@/assets/imgs/topologyDiagram.png") no-repeat;
|
||||
background-size: 100% 100%;
|
||||
position: relative;
|
||||
|
||||
.cpu {
|
||||
width: 12.1%;
|
||||
height: 118px;
|
||||
background: url("@/assets/imgs/cpu.png") no-repeat;
|
||||
background-size: 100% 100%;
|
||||
position: absolute;
|
||||
top: 23%;
|
||||
left: 62.8%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-evenly;
|
||||
align-items: center;
|
||||
|
||||
.cpuItem {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
height: 34px;
|
||||
|
||||
.cpuName {
|
||||
font-family: PingFang SC;
|
||||
font-weight: 500;
|
||||
font-size: 12px;
|
||||
color: #E9F4FF;
|
||||
}
|
||||
|
||||
.cpuValue {
|
||||
font-family: PingFang SC;
|
||||
font-weight: 600;
|
||||
font-size: 24px;
|
||||
color: #00EDC5;
|
||||
padding: 5px;
|
||||
|
||||
|
||||
.cpuUnit {
|
||||
font-family: PingFang SC, PingFang SC;
|
||||
font-weight: 600;
|
||||
font-size: 16px;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.lineCount {
|
||||
background: url("@/assets/imgs/onlineCount.png") no-repeat;
|
||||
background-size: 100% 100%;
|
||||
width: 11.9%;
|
||||
height: 60px;
|
||||
position: absolute;
|
||||
top: 58%;
|
||||
left: 27.8%;
|
||||
padding: 8px 28px;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
|
||||
.count {
|
||||
font-family: PingFang SC;
|
||||
font-weight: 600;
|
||||
font-size: 24px;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.text {
|
||||
font-family: PingFang SC;
|
||||
font-weight: 500;
|
||||
font-size: 12px;
|
||||
color: #E9F4FF;
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
|
||||
.equipment {
|
||||
width: 77%;
|
||||
height: 0.3125rem;
|
||||
top: 89%;
|
||||
left: 18%;
|
||||
position: absolute;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
.equipment-lineCount {
|
||||
background: url("@/assets/imgs/onlineCount.png") no-repeat;
|
||||
background-size: 100% 100%;
|
||||
height: 100%;
|
||||
padding: 8px 28px;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
|
||||
.count {
|
||||
font-family: PingFang SC;
|
||||
font-weight: 600;
|
||||
font-size: 24px;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.text {
|
||||
font-family: PingFang SC;
|
||||
font-weight: 500;
|
||||
font-size: 12px;
|
||||
color: #E9F4FF;
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.right {
|
||||
width: 22.42%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-end;
|
||||
|
||||
.monitorBg {
|
||||
margin-top: 20px;
|
||||
background: url("@/assets/imgs/monitorBg.png") no-repeat;
|
||||
background-size: 100% 100%;
|
||||
height: 240px;
|
||||
width: 92.5%;
|
||||
padding: 12px;
|
||||
box-sizing: border-box;
|
||||
margin-right: 16px;
|
||||
}
|
||||
|
||||
.monitorStatus {
|
||||
margin-top: 41px;
|
||||
width: 92.5%;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
padding-right: 14px;
|
||||
|
||||
.online {
|
||||
font-size: 12px;
|
||||
color: #00DCB7;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
|
||||
.monitorList::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.monitorList {
|
||||
width: 92.5%;
|
||||
margin-right: 16px;
|
||||
height: 61%;
|
||||
display: grid;
|
||||
grid-template-columns: 31.6% 31.6% 31.6%;
|
||||
gap: 14.7px 10px;
|
||||
grid-auto-rows: 10%;
|
||||
margin-top: 14px;
|
||||
overflow: auto;
|
||||
|
||||
.monitorItem {
|
||||
background: url(@/assets/imgs/reignBg.png) no-repeat;
|
||||
background-size: 100% 100%;
|
||||
width: 100%;
|
||||
height: 60px;
|
||||
font-family: PingFang SC;
|
||||
font-size: 12px;
|
||||
color: #00EDC5;
|
||||
padding: 21px 17%;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.foot {
|
||||
width: 100%;
|
||||
height: 27px;
|
||||
background: url("@/assets/imgs/foot.png") no-repeat;
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.first-level-title {
|
||||
background: url("@/assets/imgs/firstLevelTitle.png") no-repeat;
|
||||
background-size: 100% 100%;
|
||||
width: 100%;
|
||||
height: 40px;
|
||||
font-family: 庞门正道;
|
||||
font-size: 26px;
|
||||
color: #fff;
|
||||
|
||||
span {
|
||||
margin-left: 56px;
|
||||
background: -webkit-linear-gradient(top, #FFFFFF, #BDDCF8);
|
||||
background: linear-gradient(to bottom, #FFFFFF, #BDDCF8);
|
||||
-webkit-background-clip: text;
|
||||
background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
color: transparent;
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
|
||||
.name {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.nameAndImg {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.label {
|
||||
color: #58AEF7;
|
||||
font-family: PingFang SC;
|
||||
font-size: 14px;
|
||||
margin-left: 6px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.value {
|
||||
font-family: PingFang SC;
|
||||
font-size: 14px;
|
||||
color: #BDDCF8;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.detail {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.monitorImg {
|
||||
width: 44px;
|
||||
height: 44px;
|
||||
}
|
||||
|
||||
.alarmDetail {
|
||||
width: 40%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.status {
|
||||
margin-left: 8px;
|
||||
}
|
|
@ -0,0 +1,318 @@
|
|||
<template>
|
||||
<div class="main">
|
||||
<div class="top">
|
||||
<span class="title">阜阳变电站大屏</span>
|
||||
</div>
|
||||
<div class="core">
|
||||
<div class="left">
|
||||
<div class="first">
|
||||
<div class="first-level-title" style="height: 11.3%">
|
||||
<span>站所运行信息</span>
|
||||
</div>
|
||||
<div class="content">
|
||||
<span class="second-level-title">交流220kV界首变</span>
|
||||
<div class="functionInfo">
|
||||
<div
|
||||
v-for="(item, index) in functionList"
|
||||
:key="index"
|
||||
class="functionItem"
|
||||
>
|
||||
<div class="nameAndImg">
|
||||
<img src="@/assets/imgs/dian.png" />
|
||||
<span class="name">{{ item.name }}:</span>
|
||||
</div>
|
||||
<span :style="{ color: item.name == '安全运行' ? '#00EDC5' : '' }"
|
||||
>{{ item.value }}
|
||||
<span v-if="item.name == '安全运行'" style="color: #e9f4ff">天</span>
|
||||
</span>
|
||||
<!-- <span class="value">{{ item.value }}</span> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="second">
|
||||
<div class="first-level-title" style="height: 7.6%">
|
||||
<span>报警列表</span>
|
||||
</div>
|
||||
<div class="content">
|
||||
<div v-for="(item, index) in alarmList" :key="index" class="alarmItem">
|
||||
<div class="alarmTitle">{{ item.typeName }}</div>
|
||||
<div class="alarmInfo" v-if="item.typeName == '区域入侵'">
|
||||
<img src="@/assets/imgs/monitor.png" class="monitorImg" />
|
||||
<div class="alarmContent">
|
||||
<span class="detail">
|
||||
<img src="@/assets/imgs/dian.png" />
|
||||
<span class="label"
|
||||
>位置:<span class="value">{{ item.position }}</span></span
|
||||
>
|
||||
</span>
|
||||
<span class="detail">
|
||||
<img src="@/assets/imgs/dian.png" />
|
||||
<span class="label"
|
||||
>时间:<span class="value">{{ item.time }}</span></span
|
||||
>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else class="alarmInfo">
|
||||
<div class="alarmContent1">
|
||||
<span class="alarmDetail">
|
||||
<img src="@/assets/imgs/dian.png" />
|
||||
<span class="label"
|
||||
>当前温度:<span class="value">{{
|
||||
item.currentTemperature
|
||||
}}</span></span
|
||||
>
|
||||
</span>
|
||||
<span class="alarmDetail">
|
||||
<img src="@/assets/imgs/dian.png" />
|
||||
<span class="label"
|
||||
>报警温度:<span class="value">{{
|
||||
item.alarmTemperature
|
||||
}}</span></span
|
||||
>
|
||||
</span>
|
||||
<span class="alarmDetail">
|
||||
<img src="@/assets/imgs/dian.png" />
|
||||
<span class="label"
|
||||
>位置:<span class="value">{{ item.position }}</span></span
|
||||
>
|
||||
</span>
|
||||
<span class="alarmDetail">
|
||||
<img src="@/assets/imgs/dian.png" />
|
||||
<span class="label"
|
||||
>时间:<span class="value">{{ item.time }}</span></span
|
||||
>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="center">
|
||||
<div class="cpu">
|
||||
<div v-for="(item, index) in cpuList" :key="index" class="cpuItem">
|
||||
<span class="cpuName">{{ item.name }}</span>
|
||||
<span class="cpuValue">{{ item.value }}<span class="cpuUnit">%</span></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="lineCount">
|
||||
<span class="count"> <span style="color: #00edc5">0 </span>/ 0 </span>
|
||||
<span class="text"> 在线 / 总数 </span>
|
||||
</div>
|
||||
<div class="equipment">
|
||||
<div class="equipment-lineCount" v-for="(item, index) in equipmentList" :key="index">
|
||||
<span class="count">
|
||||
<span style="color: #00edc5">{{ item.online }} </span>/ {{
|
||||
item.total
|
||||
}}
|
||||
</span>
|
||||
<span class="text"> 在线 / 总数 </span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="right">
|
||||
<div class="first-level-title" style="height: 4.4%">
|
||||
<span>红外监控摄像头</span>
|
||||
</div>
|
||||
<div class="monitorBg">
|
||||
<img src="@/assets/imgs/video.png" style="width: 100%; height: 100%" />
|
||||
</div>
|
||||
<div class="monitorStatus">
|
||||
<div class="online">
|
||||
<img src="@/assets/imgs/on-line.png" />
|
||||
<span class="status">在线</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="monitorList">
|
||||
<div v-for="(item, index) in monitorList" :key="index" class="monitorItem">
|
||||
<img src="@/assets/imgs/reign.png" style="width: 16px; height: 16px" />
|
||||
<span>{{ item.name }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="foot"></div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref } from "vue";
|
||||
|
||||
const functionList = ref([
|
||||
{
|
||||
name: "重要程度",
|
||||
value: "I类变电站",
|
||||
},
|
||||
{
|
||||
name: "投运时间",
|
||||
value: "2022-06-28",
|
||||
},
|
||||
{
|
||||
name: "运维班组",
|
||||
value: "阜阳运维3班",
|
||||
},
|
||||
{
|
||||
name: "安全运行",
|
||||
value: "2789",
|
||||
},
|
||||
]);
|
||||
|
||||
//报警列表
|
||||
const alarmList = ref([
|
||||
{
|
||||
typeName: "区域入侵",
|
||||
position: "东5区厂房西侧摄像头",
|
||||
time: "2022-07-18 12:02:56",
|
||||
},
|
||||
{
|
||||
typeName: "温湿度告警",
|
||||
currentTemperature: "28.5°C",
|
||||
alarmTemperature: "35°C",
|
||||
position: "西3区厂房",
|
||||
time: "2022-07-18 12:02:56",
|
||||
},
|
||||
{
|
||||
typeName: "紧急告警",
|
||||
currentTemperature: "28.5°C",
|
||||
alarmTemperature: "35°C",
|
||||
position: "西3区厂房",
|
||||
time: "2022-07-18 12:02:56",
|
||||
},
|
||||
{
|
||||
typeName: "紧急告警",
|
||||
currentTemperature: "28.5°C",
|
||||
alarmTemperature: "35°C",
|
||||
position: "西3区厂房",
|
||||
time: "2022-07-18 12:02:56",
|
||||
},
|
||||
{
|
||||
typeName: "紧急告警",
|
||||
currentTemperature: "28.5°C",
|
||||
alarmTemperature: "35°C",
|
||||
position: "西3区厂房",
|
||||
time: "2022-07-18 12:02:56",
|
||||
},
|
||||
]);
|
||||
//cpu数据
|
||||
const cpuList = ref([
|
||||
{
|
||||
name: "CPU占用",
|
||||
value: "60",
|
||||
},
|
||||
{
|
||||
name: "内存占用",
|
||||
value: "60",
|
||||
},
|
||||
{
|
||||
name: "硬盘空间",
|
||||
value: "60",
|
||||
},
|
||||
]);
|
||||
//设备在线数列表
|
||||
const equipmentList = ref([
|
||||
{
|
||||
online: 0,
|
||||
total: 0,
|
||||
},
|
||||
{
|
||||
online: 0,
|
||||
total: 0,
|
||||
},
|
||||
{
|
||||
online: 0,
|
||||
total: 0,
|
||||
},
|
||||
{
|
||||
online: 0,
|
||||
total: 0,
|
||||
},
|
||||
{
|
||||
online: 0,
|
||||
total: 0,
|
||||
},
|
||||
]);
|
||||
// 摄像头列表
|
||||
const monitorList = ref([
|
||||
{
|
||||
name: "1号摄像头",
|
||||
},
|
||||
{
|
||||
name: "2号摄像头",
|
||||
},
|
||||
{
|
||||
name: "3号摄像头",
|
||||
},
|
||||
{
|
||||
name: "4号摄像头",
|
||||
},
|
||||
{
|
||||
name: "5号摄像头",
|
||||
},
|
||||
{
|
||||
name: "6号摄像头",
|
||||
},
|
||||
{
|
||||
name: "7号摄像头",
|
||||
},
|
||||
{
|
||||
name: "8号摄像头",
|
||||
},
|
||||
{
|
||||
name: "9号摄像头",
|
||||
},
|
||||
{
|
||||
name: "10号摄像头",
|
||||
},
|
||||
{
|
||||
name: "11号摄像头",
|
||||
},
|
||||
{
|
||||
name: "12号摄像头",
|
||||
},
|
||||
{
|
||||
name: "13号摄像头",
|
||||
},
|
||||
{
|
||||
name: "14号摄像头",
|
||||
},
|
||||
{
|
||||
name: "15号摄像头",
|
||||
},
|
||||
{
|
||||
name: "16号摄像头",
|
||||
},
|
||||
{
|
||||
name: "17号摄像头",
|
||||
},
|
||||
{
|
||||
name: "18号摄像头",
|
||||
},
|
||||
{
|
||||
name: "19号摄像头",
|
||||
},
|
||||
{
|
||||
name: "20号摄像头",
|
||||
},
|
||||
{
|
||||
name: "21号摄像头",
|
||||
},
|
||||
{
|
||||
name: "22号摄像头",
|
||||
},
|
||||
{
|
||||
name: "23号摄像头",
|
||||
},
|
||||
{
|
||||
name: "24号摄像头",
|
||||
},
|
||||
{
|
||||
name: "25号摄像头",
|
||||
},
|
||||
]);
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
@import "./index.less";
|
||||
</style>
|
|
@ -44,71 +44,74 @@
|
|||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, reactive, onMounted } from 'vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { User, Lock } from '@element-plus/icons-vue'
|
||||
import { apiLogin } from '@/api/index.js'
|
||||
import JSEncrypt from 'jsencrypt'
|
||||
|
||||
import { ref, reactive, onMounted } from "vue";
|
||||
import { useRouter } from "vue-router";
|
||||
import { User, Lock } from "@element-plus/icons-vue";
|
||||
import { apiLogin } from "@/api/index.js";
|
||||
import JSEncrypt from "jsencrypt";
|
||||
import { ElMessageBox, ElMessage } from "element-plus";
|
||||
// 登录表单
|
||||
const formSize = ref('default')
|
||||
const ruleFormRef = ref()
|
||||
const formSize = ref("default");
|
||||
const ruleFormRef = ref();
|
||||
const ruleForm = reactive({
|
||||
login_name: '',
|
||||
password: ''
|
||||
})
|
||||
login_name: "",
|
||||
password: "",
|
||||
});
|
||||
|
||||
const encryptor = ref(null)
|
||||
const encryptor = ref(null);
|
||||
onMounted(() => {
|
||||
encryptor.value = new JSEncrypt() // 创建加密对象实例
|
||||
encryptor.value = new JSEncrypt(); // 创建加密对象实例
|
||||
const pubKey =
|
||||
'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2TEstfATFdDWntbJTCPer9FOdwTRe58Vjy9T238/uUQYyoTHClfQCCKnys4elHCE0D0B7D/k2hK9U+xu1hWv1v4lH+n+t5duNVGq3sa5+pOq8j1ztec3W+wlcFgplYJq78XBYGYDbyfhmu5KeDeImsiccwnq3WvigfZYPbTvGv2YsqXDpTp+/s0hQsrYeATr2MuhiBhQGynLUvKCEcWvd/GNByMxJdJwl0k+IZW+DiCDmNX9Qwj23HF7U+Om7jEZC+Li/j2MHA5C4eEtVzgVC4VZETVOIcLv/UDufnAlneTJK2Exo+4YFEg9S1shpqUz9shSBl8JF9DM2a3KKmxc4wIDAQAB'
|
||||
encryptor.value.setPublicKey(pubKey)
|
||||
})
|
||||
"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmIZgs2im/ZaxPeQC1dvLGh8lBpmnknjpcjwk6G9zNVKHaVz/hKkcT+yquZjjcFD5Va8GpyrIBpA+EVSVN6pPwqqtmDNjiY9VTo3PPbhN5H43dyJDgm+h+/lAeoxe2r4NWveYNUNABp+nC0HWqc+cAt8EsjshpEbjI6mS9UubZoHrQWABw1Cm5PM4FaJreI1GduzUsfeFXC6TrsEEEjzWjjAUPh8XkCmlpyzXiCo+A3zbYRX2/Lu14jnsaQM6+y7KjdpH3pDEGpZyat3oFXX/KbSfnr4khUxy4jJH/lkqh6FcQWQbA43QVIgJ41ZSAGsjt2r0TicTYfRtI3HdCBcIVwIDAQAB";
|
||||
encryptor.value.setPublicKey(pubKey);
|
||||
});
|
||||
|
||||
const router = useRouter()
|
||||
const router = useRouter();
|
||||
const handleLogin = async () => {
|
||||
const rsaPassWord = encryptor.value.encrypt(ruleForm.password) // 对内容进行加密
|
||||
const rsaPassWord = encryptor.value.encrypt(ruleForm.password); // 对内容进行加密
|
||||
try {
|
||||
const response = await apiLogin({
|
||||
login_name: ruleForm.login_name,
|
||||
password: rsaPassWord
|
||||
})
|
||||
password: rsaPassWord,
|
||||
});
|
||||
if (response.code === 0) {
|
||||
console.log(response.data, 'response.data')
|
||||
ElMessage({
|
||||
message: "登录成功",
|
||||
type: "success",
|
||||
});
|
||||
console.log(response.data, "response.data");
|
||||
// 登录成功,保存 token 并跳转到指定路由
|
||||
localStorage.setItem('token', response.data.token)
|
||||
localStorage.setItem('ReviewerId', response.data.user_id)
|
||||
localStorage.setItem('Reviewer', response.data.real_name)
|
||||
await router.push('/ExaminationManagement')
|
||||
localStorage.setItem("token", response.data.token);
|
||||
localStorage.setItem("ReviewerId", response.data.user_id);
|
||||
localStorage.setItem("Reviewer", response.data.real_name);
|
||||
await router.push("/schedule");
|
||||
} else {
|
||||
// 弹出包含错误信息的提示框
|
||||
alert('密码错误')
|
||||
alert("密码错误");
|
||||
}
|
||||
} catch (error) {
|
||||
// 处理异常情况,比如网络错误等
|
||||
alert('请求失败')
|
||||
alert("请求失败");
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
const validatePass = (rule, value, callback) => {
|
||||
if (value === '') {
|
||||
callback(new Error('请输入密码'))
|
||||
if (value === "") {
|
||||
callback(new Error("请输入密码"));
|
||||
} else {
|
||||
const passLength = value.length
|
||||
const passLength = value.length;
|
||||
if (passLength < 5 || passLength > 20) {
|
||||
callback(new Error('密码长度为5-20'))
|
||||
callback(new Error("密码长度为5-20"));
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
callback();
|
||||
}
|
||||
}
|
||||
};
|
||||
const rules = reactive({
|
||||
password: [
|
||||
{ required: true, trigger: 'blur', message: '请输入密码' },
|
||||
{ validator: validatePass, trigger: 'blur' }
|
||||
]
|
||||
})
|
||||
{ required: true, trigger: "blur", message: "请输入密码" },
|
||||
{ validator: validatePass, trigger: "blur" },
|
||||
],
|
||||
});
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
@ -141,7 +144,7 @@ const rules = reactive({
|
|||
font-family: DouyinSansBold;
|
||||
font-weight: 700;
|
||||
font-size: 38px;
|
||||
color: #0d867f;
|
||||
color: rgb(0,122,252);
|
||||
margin-top: 11px;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
|
@ -167,7 +170,7 @@ const rules = reactive({
|
|||
.el-button {
|
||||
width: 380px;
|
||||
height: 50px;
|
||||
background: #0d867f;
|
||||
background: rgb(0,122,252);
|
||||
border: none;
|
||||
border-radius: 2px 2px 2px 2px;
|
||||
font-weight: 400;
|
||||
|
@ -179,7 +182,7 @@ const rules = reactive({
|
|||
.login_from {
|
||||
.el-input {
|
||||
height: 50px;
|
||||
border: 1px solid rgba(13, 134, 127, 1);
|
||||
border: 1px solid rgba(0,122,252);
|
||||
}
|
||||
.el-form-item--default {
|
||||
margin-bottom: 30px;
|
||||
|
|
|
@ -0,0 +1,554 @@
|
|||
<template>
|
||||
<div class="PageContent">
|
||||
<div class="WebToolbar">
|
||||
<div class="FormComponent">
|
||||
<el-form :inline="true" :model="formInline" class="demo-form-inline">
|
||||
<el-form-item label="部门">
|
||||
<el-select v-model="formInline.Department" placeholder="请选择部门" clearable>
|
||||
<el-option
|
||||
:label="v.label"
|
||||
:value="v.label"
|
||||
v-for="(v, i) in departmentList"
|
||||
:key="i"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="人员名称">
|
||||
<el-input
|
||||
v-model="formInline.PersonnelName"
|
||||
placeholder="请输入人员名称"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="ButtonAssembly">
|
||||
<el-button style="color: #fff" @click="queryData">
|
||||
<img src="../../assets/menu/search.png" alt="" />
|
||||
<span>查询</span>
|
||||
</el-button>
|
||||
<el-button style="color: #1d2129" @click="resetFormInline">
|
||||
<img src="../../assets/menu/reset.png" alt="" />
|
||||
<span>重置</span>
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="Tabulation">
|
||||
<div class="actionBar">
|
||||
<h1>人员列表</h1>
|
||||
<div class="Worktop">
|
||||
<el-button class="BlueBack" @click="addBtn" :icon="Plus">
|
||||
新增
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ExaminationForm">
|
||||
<el-table ref="multipleTableRef" :data="tableData" style="width: 100%">
|
||||
<el-table-column label="序号" type="index" width="80px" align="center" />
|
||||
<el-table-column property="Department" label="部门" align="center" />
|
||||
<el-table-column property="PersonnelName" label="人员名称" align="center" />
|
||||
<el-table-column property="CreateTime" label="创建时间" align="center" />
|
||||
<el-table-column property="" label="操作" align="center">
|
||||
<template v-slot="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
:icon="Edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
>编辑</el-button
|
||||
>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
:icon="Delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
>删除</el-button
|
||||
>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-pagination
|
||||
:current-page="InlineForm.PageIndex"
|
||||
:page-size="InlineForm.PageSize"
|
||||
:small="small"
|
||||
layout="total, prev, pager, next"
|
||||
:total="total"
|
||||
@size-change="handleSizeChange"
|
||||
@current-change="handleCurrentChange"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 新增 -->
|
||||
<el-dialog v-model="dialogToLead" :title="title" style="width: 25%; height: 35%">
|
||||
<el-form :model="form" :rules="rules" label-width="80px" ref="formData">
|
||||
<el-form-item label="部门" prop="Department">
|
||||
<el-select v-model="form.Department" placeholder="请选择部门" clearable>
|
||||
<el-option
|
||||
:label="v.label"
|
||||
:value="v.label"
|
||||
v-for="(v, i) in departmentList"
|
||||
:key="i"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="人员名称" prop="PersonnelName">
|
||||
<el-input v-model="form.PersonnelName" placeholder="请输入人员名称" clearable />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitUpload">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted, reactive, getCurrentInstance } from "vue";
|
||||
import {
|
||||
GetPersonnelList,
|
||||
AddPersonnel,
|
||||
DeletePersonnel,
|
||||
GetPersonnelDetails,
|
||||
EditPersonnel,
|
||||
} from "@/api/personnelManagement.js";
|
||||
import { ElTable, ElMessageBox, ElMessage } from "element-plus";
|
||||
import { Download, Delete, Edit, Search,Plus } from "@element-plus/icons-vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
//搜索表单、
|
||||
const formInline = reactive({});
|
||||
// 分页
|
||||
const InlineForm = reactive({
|
||||
PageIndex: 1,
|
||||
PageSize: 10,
|
||||
});
|
||||
//总数
|
||||
const total = ref(0);
|
||||
//部门下拉
|
||||
const departmentList = ref([
|
||||
{
|
||||
label: "后勤部",
|
||||
},
|
||||
{
|
||||
label: "人事部",
|
||||
},
|
||||
{
|
||||
label: "财务部",
|
||||
},
|
||||
]);
|
||||
//表格数据
|
||||
const tableData = ref([]);
|
||||
//添加表格
|
||||
const form = reactive({});
|
||||
const rules = ref({
|
||||
PersonnelName: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入人员名称",
|
||||
trigger: "change",
|
||||
},
|
||||
],
|
||||
Department: [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择部门",
|
||||
trigger: "change",
|
||||
},
|
||||
],
|
||||
});
|
||||
//表格弹窗
|
||||
const dialogToLead = ref(false);
|
||||
//弹窗标题
|
||||
const title = ref("");
|
||||
//搜索
|
||||
function queryData() {
|
||||
InlineForm.PageIndex = 1;
|
||||
getList();
|
||||
}
|
||||
//重置
|
||||
function resetFormInline() {
|
||||
(formInline.PageIndex = 1),
|
||||
(formInline.PageSize = 10),
|
||||
(formInline.Department = ""),
|
||||
(formInline.PersonnelName = "");
|
||||
getList();
|
||||
}
|
||||
//分页
|
||||
const handleSizeChange = (val) => {
|
||||
InlineForm.PageSize = val;
|
||||
getList();
|
||||
};
|
||||
const handleCurrentChange = (val) => {
|
||||
InlineForm.PageIndex = val;
|
||||
getList();
|
||||
};
|
||||
//查询表格
|
||||
function getList() {
|
||||
let formParams = {
|
||||
PageIndex: InlineForm.PageIndex,
|
||||
PageSize: InlineForm.PageSize,
|
||||
PersonnelName: formInline.PersonnelName,
|
||||
Department: formInline.Department,
|
||||
};
|
||||
GetPersonnelList(formParams)
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
tableData.value = res.data.list;
|
||||
total.value = res.data.total;
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
}
|
||||
//添加按钮
|
||||
function addBtn() {
|
||||
(form.PersonnelName = ""), (form.Department = "");
|
||||
title.value = "添加人员";
|
||||
dialogToLead.value = true;
|
||||
}
|
||||
//修改按钮
|
||||
function handleUpdate(row) {
|
||||
let paramsData = {
|
||||
PersonnelId: row.PersonnelId,
|
||||
};
|
||||
GetPersonnelDetails(paramsData)
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
form.PersonnelName = res.data.PersonnelName;
|
||||
form.Department = res.data.Department;
|
||||
form.PersonnelId = res.data.PersonnelId;
|
||||
title.value = "修改人员";
|
||||
dialogToLead.value = true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
}
|
||||
//提交新增
|
||||
function submitUpload() {
|
||||
proxy.$refs["formData"].validate((valid) => {
|
||||
if (valid) {
|
||||
if (title.value == "添加人员") {
|
||||
AddPersonnel(form)
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
dialogToLead.value = false;
|
||||
ElMessage({
|
||||
message: "新增成功",
|
||||
type: "success",
|
||||
});
|
||||
getList();
|
||||
} else {
|
||||
ElMessage({
|
||||
message: "新增失败",
|
||||
type: "warning",
|
||||
});
|
||||
getList();
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
} else if (title.value == "修改人员") {
|
||||
EditPersonnel(form)
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
dialogToLead.value = false;
|
||||
ElMessage({
|
||||
message: "修改成功",
|
||||
type: "success",
|
||||
});
|
||||
getList();
|
||||
} else {
|
||||
ElMessage({
|
||||
message: "修改失败",
|
||||
type: "warning",
|
||||
});
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
//删除文件
|
||||
function handleDelete(row) {
|
||||
let paramsData = {
|
||||
PersonnelId: row.PersonnelId,
|
||||
};
|
||||
ElMessageBox.confirm("确定要删除吗?", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
}).then(() => {
|
||||
DeletePersonnel(paramsData)
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
ElMessage({
|
||||
message: "删除成功",
|
||||
type: "success",
|
||||
});
|
||||
getList();
|
||||
} else {
|
||||
ElMessage.error(res?.data || "删除失败");
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
});
|
||||
}
|
||||
//弹窗取消
|
||||
function cancel() {
|
||||
(form.PersonnelName = ""), (form.Department = "");
|
||||
dialogToLead.value = false;
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
//表格数据查询
|
||||
getList();
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.PageContent {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.WebToolbar {
|
||||
width: 100%;
|
||||
height: 72px;
|
||||
background-color: #fff;
|
||||
padding: 20px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
:deep(.el-form-item__content) {
|
||||
width: 256px !important;
|
||||
height: 32px !important;
|
||||
}
|
||||
:deep(.el-input) {
|
||||
width: 256px !important;
|
||||
}
|
||||
:deep(.el-select) {
|
||||
width: 256px !important;
|
||||
}
|
||||
:deep(.el-form-item__label) {
|
||||
color: #666 !important;
|
||||
}
|
||||
}
|
||||
.ButtonAssembly {
|
||||
.el-button {
|
||||
width: 84px;
|
||||
height: 40px;
|
||||
border: none;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
border-radius: 2px 2px 2px 2px;
|
||||
img {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin-right: 8px;
|
||||
}
|
||||
}
|
||||
.el-button:nth-child(1) {
|
||||
background-color: rgb(0,122,252);
|
||||
}
|
||||
.el-button:nth-child(2) {
|
||||
background-color: #f2f3f5;
|
||||
}
|
||||
}
|
||||
|
||||
.Tabulation {
|
||||
width: 100%;
|
||||
height: calc(100% - 72px);
|
||||
background-color: #fff;
|
||||
margin-top: 14px;
|
||||
padding: 20px;
|
||||
.actionBar {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
h1 {
|
||||
font-weight: 500;
|
||||
font-size: 20px;
|
||||
color: #1d2129;
|
||||
line-height: 28px;
|
||||
font-family: Microsoft YaHei, Microsoft YaHei;
|
||||
}
|
||||
}
|
||||
.Worktop {
|
||||
.el-button {
|
||||
border: 1px solid rgb(0,122,252);
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
color: rgb(0,122,252);
|
||||
}
|
||||
.el-button:hover {
|
||||
background-color: transparent;
|
||||
}
|
||||
.BlueBack {
|
||||
background: rgb(0,122,252);
|
||||
border-radius: 2px 2px 2px 2px;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
color: #ffffff;
|
||||
line-height: 22px;
|
||||
img {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin-right: 8px;
|
||||
}
|
||||
}
|
||||
.BlueBack:hover {
|
||||
background-color: rgb(0,122,252);
|
||||
}
|
||||
.Delete {
|
||||
background: #f2f3f5;
|
||||
border-radius: 2px 2px 2px 2px;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
color: #1d2129;
|
||||
line-height: 22px;
|
||||
border: none;
|
||||
img {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin-right: 8px;
|
||||
}
|
||||
}
|
||||
.Delete:hover {
|
||||
background-color: #f2f3f5;
|
||||
}
|
||||
}
|
||||
.ExaminationForm {
|
||||
margin-top: 16px;
|
||||
background-color: #0077aa;
|
||||
}
|
||||
.el-table tr {
|
||||
height: 41px;
|
||||
}
|
||||
.el-table td {
|
||||
height: 41px;
|
||||
}
|
||||
:deep(th) {
|
||||
background-color: #e5e6eb;
|
||||
}
|
||||
}
|
||||
.el-pagination {
|
||||
float: right;
|
||||
background-color: #fff !important;
|
||||
margin-top: 18px;
|
||||
}
|
||||
:deep(.el-pager li.is-active) {
|
||||
background-color: rgb(181,216,241) !important;
|
||||
font-weight: 400;
|
||||
color: rgb(0,122,252) !important;
|
||||
}
|
||||
:deep(.el-table--enable-row-hover .el-table__body tr:hover > td) {
|
||||
background-color: rgb(181,216,241) !important;
|
||||
}
|
||||
|
||||
:deep(.el-select) {
|
||||
width: 280px !important;
|
||||
}
|
||||
:deep(.el-input) {
|
||||
width: 280px !important;
|
||||
}
|
||||
.example {
|
||||
margin-left: 20px;
|
||||
color: red;
|
||||
}
|
||||
.backInformation {
|
||||
:deep(.el-input) {
|
||||
width: 280px !important;
|
||||
height: 120px !important;
|
||||
}
|
||||
}
|
||||
.dialog-footer {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
:deep(.el-textarea__inner) {
|
||||
width: 280px !important;
|
||||
}
|
||||
.user-name,
|
||||
.register {
|
||||
cursor: pointer;
|
||||
}
|
||||
.functionalUnit {
|
||||
margin-left: 20px;
|
||||
display: flex;
|
||||
.el-button {
|
||||
width: 84px;
|
||||
height: 40px;
|
||||
border: none;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
border-radius: 2px 2px 2px 2px;
|
||||
color: #fff;
|
||||
img {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin-right: 8px;
|
||||
}
|
||||
}
|
||||
.el-button:nth-child(1) {
|
||||
background-color: #2192ba;
|
||||
}
|
||||
.el-button:nth-child(2) {
|
||||
background-color: #17c85f;
|
||||
}
|
||||
}
|
||||
.TabularTitle {
|
||||
font-size: 14px;
|
||||
color: #747272;
|
||||
font-weight: bold;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.pagination {
|
||||
width: 100%;
|
||||
height: 30px;
|
||||
:deep(.el-pagination) {
|
||||
margin-top: 9px !important;
|
||||
}
|
||||
}
|
||||
.addSlip {
|
||||
.el-button {
|
||||
border: none;
|
||||
background-color: #0077aa;
|
||||
margin-top: 8px;
|
||||
color: #fff;
|
||||
}
|
||||
:deep(.el-pagination) {
|
||||
margin-top: 8px !important;
|
||||
}
|
||||
}
|
||||
.ml-3 {
|
||||
margin-left: 20px;
|
||||
}
|
||||
.upload-file-uploader {
|
||||
width: 50%;
|
||||
}
|
||||
.el-upload-list .el-upload-list__item {
|
||||
width: 33% !important;
|
||||
float: left;
|
||||
margin-left: -385px;
|
||||
margin-top: 25px;
|
||||
:deep(.horizontal-list ul .el-upload-list__item) {
|
||||
width: 33% !important;
|
||||
float: left;
|
||||
margin-top: 25px;
|
||||
}
|
||||
:deep(.el-link__inner) {
|
||||
display: inline-flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 200px;
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,657 @@
|
|||
<template>
|
||||
<div class="PageContent">
|
||||
<div class="WebToolbar">
|
||||
<div class="FormComponent">
|
||||
<el-form :inline="true" :model="formInline" class="demo-form-inline">
|
||||
<el-form-item label="排班日期">
|
||||
<el-date-picker
|
||||
v-model="formInline.SchedulingDate"
|
||||
value-format="YYYY-MM-DD 00:00:00"
|
||||
type="date"
|
||||
placeholder="排班日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="排班分类">
|
||||
<el-select
|
||||
v-model="formInline.SchedulingClass"
|
||||
placeholder="请选择排班分类"
|
||||
clearable
|
||||
>
|
||||
<el-option
|
||||
:label="v.label"
|
||||
:value="v.label"
|
||||
v-for="(v, i) in schedulingList"
|
||||
:key="i"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="ButtonAssembly">
|
||||
<el-button style="color: #fff" @click="queryData">
|
||||
<img src="../../assets/menu/search.png" alt="" />
|
||||
<span>查询</span>
|
||||
</el-button>
|
||||
<el-button style="color: #1d2129" @click="resetFormInline">
|
||||
<img src="../../assets/menu/reset.png" alt="" />
|
||||
<span>重置</span>
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="Tabulation">
|
||||
<div class="actionBar">
|
||||
<h1>排班列表</h1>
|
||||
<div class="Worktop">
|
||||
<el-button class="BlueBack" @click="addBtn" :icon="Plus"> 新增 </el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ExaminationForm">
|
||||
<el-table ref="multipleTableRef" :data="tableData" style="width: 100%">
|
||||
<el-table-column label="序号" type="index" width="80px" align="center" />
|
||||
<el-table-column property="SchedulingDate" label="排版日期" align="center" >
|
||||
<template v-slot="scope">
|
||||
{{ this.$moment(scope.row.SchedulingDate).format('YYYY-MM-DD') }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column property="SchedulingUserName" label="排班人" align="center" />
|
||||
<el-table-column property="SchedulingClass" label="排班分类" align="center" />
|
||||
<el-table-column property="MembersName" label="人员组成" align="center" />
|
||||
<el-table-column property="Status" label="排版状态" align="center" />
|
||||
<el-table-column property="CreateTime" label="发布时间" align="center" />
|
||||
<el-table-column property="" label="操作" align="center">
|
||||
<template v-slot="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
:icon="Upload"
|
||||
:disabled="scope.row.Status == '已发布'"
|
||||
@click="handleRelease(scope.row)"
|
||||
>发布</el-button
|
||||
>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
:icon="Edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
>编辑</el-button
|
||||
>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
:icon="Delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
>删除</el-button
|
||||
>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-pagination
|
||||
:current-page="InlineForm.PageIndex"
|
||||
:page-size="InlineForm.PageSize"
|
||||
:small="small"
|
||||
layout="total, prev, pager, next"
|
||||
:total="total"
|
||||
@size-change="handleSizeChange"
|
||||
@current-change="handleCurrentChange"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 新增 -->
|
||||
<el-dialog v-model="dialogToLead" :title="title" style="width: 25%; height: 35%">
|
||||
<el-form :model="form" :rules="rules" label-width="80px" ref="formData">
|
||||
<el-form-item label="排班分类" prop="SchedulingClass">
|
||||
<el-select v-model="form.SchedulingClass" placeholder="请选择排班分类" clearable>
|
||||
<el-option
|
||||
:label="v.label"
|
||||
:value="v.label"
|
||||
v-for="(v, i) in schedulingList"
|
||||
:key="i"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="排班日期" prop="SchedulingDate">
|
||||
<el-date-picker
|
||||
v-model="form.SchedulingDate"
|
||||
value-format="YYYY-MM-DD 00:00:00"
|
||||
type="date"
|
||||
placeholder="请选择排班日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="人员选择" prop="MembersName">
|
||||
<el-select
|
||||
v-model="form.MembersInfo"
|
||||
filterable
|
||||
placeholder="请选择人员"
|
||||
clearable
|
||||
multiple
|
||||
>
|
||||
<el-option
|
||||
:label="v.PersonnelName"
|
||||
:value="{ value: v.PersonnelId, label: v.PersonnelName }"
|
||||
v-for="(v, i) in membersNameList"
|
||||
:key="i"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitUpload">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted, reactive, getCurrentInstance } from "vue";
|
||||
import {
|
||||
GetSchedulingList,
|
||||
GetPersonnel,
|
||||
AddScheduling,
|
||||
DeleteScheduling,
|
||||
EditScheduling,
|
||||
GetSchedulingDetails,
|
||||
ReleaseScheduling,
|
||||
} from "@/api/schedule.js";
|
||||
import { ElTable, ElMessageBox, ElMessage } from "element-plus";
|
||||
import { Download, Delete, Edit, Search, Plus, Upload } from "@element-plus/icons-vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
//搜索表单、
|
||||
const formInline = reactive({});
|
||||
// 分页
|
||||
const InlineForm = reactive({
|
||||
PageIndex: 1,
|
||||
PageSize: 10,
|
||||
});
|
||||
//总数
|
||||
const total = ref(0);
|
||||
//部门下拉
|
||||
const schedulingList = ref([
|
||||
{
|
||||
label: "早班",
|
||||
},
|
||||
{
|
||||
label: "中班",
|
||||
},
|
||||
{
|
||||
label: "晚班",
|
||||
},
|
||||
]);
|
||||
//人员下拉
|
||||
const membersNameList = ref([]);
|
||||
//表格数据
|
||||
const tableData = ref([]);
|
||||
//添加表格
|
||||
const form = reactive({});
|
||||
const rules = reactive({
|
||||
PersonnelName: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入人员名称",
|
||||
trigger: "change",
|
||||
},
|
||||
],
|
||||
SchedulingClass: [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择部门",
|
||||
trigger: "change",
|
||||
},
|
||||
],
|
||||
});
|
||||
//表格弹窗
|
||||
const dialogToLead = ref(false);
|
||||
//弹窗标题
|
||||
const title = ref("");
|
||||
//搜索
|
||||
function queryData() {
|
||||
InlineForm.PageIndex = 1;
|
||||
getList();
|
||||
}
|
||||
//重置
|
||||
function resetFormInline() {
|
||||
(formInline.PageIndex = 1),
|
||||
(formInline.PageSize = 10),
|
||||
(formInline.SchedulingDate = ""),
|
||||
(formInline.SchedulingClass = "");
|
||||
getList();
|
||||
}
|
||||
//分页
|
||||
const handleSizeChange = (val) => {
|
||||
InlineForm.PageSize = val;
|
||||
getList();
|
||||
};
|
||||
const handleCurrentChange = (val) => {
|
||||
InlineForm.PageIndex = val;
|
||||
getList();
|
||||
};
|
||||
//查询表格
|
||||
function getList() {
|
||||
let formParams = {
|
||||
PageIndex: InlineForm.PageIndex,
|
||||
PageSize: InlineForm.PageSize,
|
||||
SchedulingDate: formInline.SchedulingDate,
|
||||
SchedulingClass: formInline.SchedulingClass,
|
||||
};
|
||||
GetSchedulingList(formParams)
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
tableData.value = res.data.list;
|
||||
total.value = res.data.total;
|
||||
getUserInfoList();
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
}
|
||||
//查询人员数据
|
||||
function getUserInfoList() {
|
||||
GetPersonnel()
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
membersNameList.value = res.data;
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
}
|
||||
//添加按钮
|
||||
function addBtn() {
|
||||
(form.PersonnelName = ""), (form.SchedulingClass = "");
|
||||
title.value = "添加排班";
|
||||
dialogToLead.value = true;
|
||||
}
|
||||
//修改按钮
|
||||
function handleUpdate(row) {
|
||||
let paramsData = {
|
||||
SchedulingId: row.SchedulingId,
|
||||
};
|
||||
GetSchedulingDetails(paramsData)
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
// 将字符串分割成数组
|
||||
let labels = res.data.MembersName.split(",");
|
||||
let values = res.data.MembersId.split(",");
|
||||
form.SchedulingId = res.data.SchedulingId;
|
||||
form.SchedulingClass = res.data.SchedulingClass;
|
||||
form.SchedulingDate = res.data.SchedulingDate;
|
||||
form.MembersInfo = labels.map((label, index) => {
|
||||
return { label: label, value: values[index] };
|
||||
});
|
||||
title.value = "修改排班";
|
||||
dialogToLead.value = true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
}
|
||||
//发布排班
|
||||
function handleRelease(row) {
|
||||
let params = {
|
||||
SchedulingId: row.SchedulingId,
|
||||
};
|
||||
ReleaseScheduling(params)
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
ElMessage({
|
||||
message: res.data,
|
||||
type: "success",
|
||||
});
|
||||
getList();
|
||||
} else {
|
||||
ElMessage({
|
||||
message: res.data,
|
||||
type: "warning",
|
||||
});
|
||||
getList();
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
}
|
||||
//提交新增
|
||||
function submitUpload() {
|
||||
proxy.$refs["formData"].validate((valid) => {
|
||||
if (valid) {
|
||||
if (title.value == "添加排班") {
|
||||
let params = {
|
||||
SchedulingDate: form.SchedulingDate,
|
||||
SchedulingUserName: localStorage.getItem("Reviewer"),
|
||||
SchedulingUserId: localStorage.getItem("ReviewerId"),
|
||||
SchedulingClass: form.SchedulingClass,
|
||||
MembersId: form.MembersInfo.map((item) => item.value).join(","),
|
||||
MembersName: form.MembersInfo.map((item) => item.label).join(","),
|
||||
};
|
||||
AddScheduling(params)
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
dialogToLead.value = false;
|
||||
ElMessage({
|
||||
message: "新增成功",
|
||||
type: "success",
|
||||
});
|
||||
getList();
|
||||
} else {
|
||||
ElMessage({
|
||||
message: "新增失败",
|
||||
type: "warning",
|
||||
});
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
} else if (title.value == "修改排班") {
|
||||
let params = {
|
||||
SchedulingDate: form.SchedulingDate,
|
||||
SchedulingUserName: localStorage.getItem("Reviewer"),
|
||||
SchedulingUserId: localStorage.getItem("ReviewerId"),
|
||||
SchedulingClass: form.SchedulingClass,
|
||||
MembersId: form.MembersInfo.map((item) => item.value).join(","),
|
||||
MembersName: form.MembersInfo.map((item) => item.label).join(","),
|
||||
SchedulingId: form.SchedulingId,
|
||||
};
|
||||
EditScheduling(params)
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
dialogToLead.value = false;
|
||||
ElMessage({
|
||||
message: "修改成功",
|
||||
type: "success",
|
||||
});
|
||||
getList();
|
||||
} else {
|
||||
ElMessage({
|
||||
message: "修改失败",
|
||||
type: "warning",
|
||||
});
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
//删除文件
|
||||
function handleDelete(row) {
|
||||
let paramsData = {
|
||||
SchedulingId: row.SchedulingId,
|
||||
};
|
||||
ElMessageBox.confirm("确定要删除吗?", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
}).then(() => {
|
||||
DeleteScheduling(paramsData)
|
||||
.then((res) => {
|
||||
if (res.code == 0) {
|
||||
ElMessage({
|
||||
message: "删除成功",
|
||||
type: "success",
|
||||
});
|
||||
getList();
|
||||
} else {
|
||||
ElMessage.error(res?.data || "删除失败");
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
});
|
||||
}
|
||||
//弹窗取消
|
||||
function cancel() {
|
||||
(form.PersonnelName = ""), (form.SchedulingClass = "");
|
||||
dialogToLead.value = false;
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
//表格数据查询
|
||||
getList();
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.PageContent {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.WebToolbar {
|
||||
width: 100%;
|
||||
height: 72px;
|
||||
background-color: #fff;
|
||||
padding: 20px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
:deep(.el-form-item__content) {
|
||||
width: 256px !important;
|
||||
height: 32px !important;
|
||||
}
|
||||
:deep(.el-input) {
|
||||
width: 256px !important;
|
||||
}
|
||||
:deep(.el-select) {
|
||||
width: 256px !important;
|
||||
}
|
||||
:deep(.el-form-item__label) {
|
||||
color: #666 !important;
|
||||
}
|
||||
}
|
||||
.ButtonAssembly {
|
||||
.el-button {
|
||||
width: 84px;
|
||||
height: 40px;
|
||||
border: none;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
border-radius: 2px 2px 2px 2px;
|
||||
img {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin-right: 8px;
|
||||
}
|
||||
}
|
||||
.el-button:nth-child(1) {
|
||||
background-color: rgb(0, 122, 252);
|
||||
}
|
||||
.el-button:nth-child(2) {
|
||||
background-color: #f2f3f5;
|
||||
}
|
||||
}
|
||||
|
||||
.Tabulation {
|
||||
width: 100%;
|
||||
height: calc(100% - 72px);
|
||||
background-color: #fff;
|
||||
margin-top: 14px;
|
||||
padding: 20px;
|
||||
.actionBar {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
h1 {
|
||||
font-weight: 500;
|
||||
font-size: 20px;
|
||||
color: #1d2129;
|
||||
line-height: 28px;
|
||||
font-family: Microsoft YaHei, Microsoft YaHei;
|
||||
}
|
||||
}
|
||||
.Worktop {
|
||||
.el-button {
|
||||
border: 1px solid rgb(0, 122, 252);
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
color: rgb(0, 122, 252);
|
||||
}
|
||||
.el-button:hover {
|
||||
background-color: transparent;
|
||||
}
|
||||
.BlueBack {
|
||||
background: rgb(0, 122, 252);
|
||||
border-radius: 2px 2px 2px 2px;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
color: #ffffff;
|
||||
line-height: 22px;
|
||||
img {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin-right: 8px;
|
||||
}
|
||||
}
|
||||
.BlueBack:hover {
|
||||
background-color: rgb(0, 122, 252);
|
||||
}
|
||||
.Delete {
|
||||
background: #f2f3f5;
|
||||
border-radius: 2px 2px 2px 2px;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
color: #1d2129;
|
||||
line-height: 22px;
|
||||
border: none;
|
||||
img {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin-right: 8px;
|
||||
}
|
||||
}
|
||||
.Delete:hover {
|
||||
background-color: #f2f3f5;
|
||||
}
|
||||
}
|
||||
.ExaminationForm {
|
||||
margin-top: 16px;
|
||||
background-color: #0077aa;
|
||||
}
|
||||
.el-table tr {
|
||||
height: 41px;
|
||||
}
|
||||
.el-table td {
|
||||
height: 41px;
|
||||
}
|
||||
:deep(th) {
|
||||
background-color: #e5e6eb;
|
||||
}
|
||||
}
|
||||
.el-pagination {
|
||||
float: right;
|
||||
background-color: #fff !important;
|
||||
margin-top: 18px;
|
||||
}
|
||||
:deep(.el-pager li.is-active) {
|
||||
background-color: rgb(181, 216, 241) !important;
|
||||
font-weight: 400;
|
||||
color: rgb(0, 122, 252) !important;
|
||||
}
|
||||
:deep(.el-table--enable-row-hover .el-table__body tr:hover > td) {
|
||||
background-color: rgb(181, 216, 241) !important;
|
||||
}
|
||||
|
||||
:deep(.el-select) {
|
||||
width: 280px !important;
|
||||
}
|
||||
:deep(.el-input) {
|
||||
width: 280px !important;
|
||||
}
|
||||
.example {
|
||||
margin-left: 20px;
|
||||
color: red;
|
||||
}
|
||||
.backInformation {
|
||||
:deep(.el-input) {
|
||||
width: 280px !important;
|
||||
height: 120px !important;
|
||||
}
|
||||
}
|
||||
.dialog-footer {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
:deep(.el-textarea__inner) {
|
||||
width: 280px !important;
|
||||
}
|
||||
.user-name,
|
||||
.register {
|
||||
cursor: pointer;
|
||||
}
|
||||
.functionalUnit {
|
||||
margin-left: 20px;
|
||||
display: flex;
|
||||
.el-button {
|
||||
width: 84px;
|
||||
height: 40px;
|
||||
border: none;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
border-radius: 2px 2px 2px 2px;
|
||||
color: #fff;
|
||||
img {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin-right: 8px;
|
||||
}
|
||||
}
|
||||
.el-button:nth-child(1) {
|
||||
background-color: #2192ba;
|
||||
}
|
||||
.el-button:nth-child(2) {
|
||||
background-color: #17c85f;
|
||||
}
|
||||
}
|
||||
.TabularTitle {
|
||||
font-size: 14px;
|
||||
color: #747272;
|
||||
font-weight: bold;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.pagination {
|
||||
width: 100%;
|
||||
height: 30px;
|
||||
:deep(.el-pagination) {
|
||||
margin-top: 9px !important;
|
||||
}
|
||||
}
|
||||
.addSlip {
|
||||
.el-button {
|
||||
border: none;
|
||||
background-color: #0077aa;
|
||||
margin-top: 8px;
|
||||
color: #fff;
|
||||
}
|
||||
:deep(.el-pagination) {
|
||||
margin-top: 8px !important;
|
||||
}
|
||||
}
|
||||
.ml-3 {
|
||||
margin-left: 20px;
|
||||
}
|
||||
.upload-file-uploader {
|
||||
width: 50%;
|
||||
}
|
||||
.el-upload-list .el-upload-list__item {
|
||||
width: 33% !important;
|
||||
float: left;
|
||||
margin-left: -385px;
|
||||
margin-top: 25px;
|
||||
:deep(.horizontal-list ul .el-upload-list__item) {
|
||||
width: 33% !important;
|
||||
float: left;
|
||||
margin-top: 25px;
|
||||
}
|
||||
:deep(.el-link__inner) {
|
||||
display: inline-flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 200px;
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -1,7 +1,7 @@
|
|||
import { defineConfig } from 'vite'
|
||||
import { fileURLToPath, URL } from 'node:url'
|
||||
import vue from '@vitejs/plugin-vue'
|
||||
|
||||
import pxtorem from "postcss-pxtorem";
|
||||
// https://vitejs.dev/config/
|
||||
export default defineConfig({
|
||||
plugins: [vue()],
|
||||
|
@ -17,10 +17,35 @@ export default defineConfig({
|
|||
cors: true,
|
||||
proxy: {
|
||||
'/api': {
|
||||
target: 'http://172.16.1.253:4000',
|
||||
changeOrigin: true
|
||||
target: 'http://172.16.1.253:5000',
|
||||
changeOrigin: true,
|
||||
// rewrite: (path) => path.replace(/^\/api/, '')
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
css: {
|
||||
preprocessorOptions: {
|
||||
less: {
|
||||
math: "always", // 括号内才使用数学计算
|
||||
globalVars: {
|
||||
// 全局变量
|
||||
mainColor: "red",
|
||||
},
|
||||
},
|
||||
},
|
||||
postcss: {
|
||||
plugins: [
|
||||
pxtorem({
|
||||
rootValue: 192, // 这里写设计稿的宽度/10即可,例如设计稿宽度是750px就写75
|
||||
// vant默认是37.5,如果是使用了vant的话可以像下面这样写
|
||||
// rootValue(res) {
|
||||
// return res.file.indexOf("vant") !== -1 ? 37.5 : 75;
|
||||
// },
|
||||
propList: ['*'], // 需要转换的属性,默认转换所有属性
|
||||
selectorBlackList: [], // CSS选择器黑名单,防止部分选择器被转换
|
||||
exclude: /\/node_modules\//i, // 忽略包文件转换rem
|
||||
})
|
||||
]
|
||||
}
|
||||
},
|
||||
})
|
||||
|
|