更新图表
|
|
@ -1,5 +1,5 @@
|
|||
# 页面标题
|
||||
VITE_APP_TITLE = 若依管理系统
|
||||
VITE_APP_TITLE = 区间测速
|
||||
|
||||
# 开发环境配置
|
||||
VITE_APP_ENV = 'development'
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# 页面标题
|
||||
VITE_APP_TITLE = 若依管理系统
|
||||
VITE_APP_TITLE = 区间测速
|
||||
|
||||
# 生产环境配置
|
||||
VITE_APP_ENV = 'production'
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
.DS_Store
|
||||
node_modules/
|
||||
dist/
|
||||
.history/
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
|
@ -8,6 +9,7 @@ yarn-error.log*
|
|||
|
||||
tests/**/coverage/
|
||||
tests/e2e/reports
|
||||
|
||||
selenium-debug.log
|
||||
|
||||
# Editor directories and files
|
||||
|
|
@ -19,5 +21,6 @@ selenium-debug.log
|
|||
*.sln
|
||||
*.local
|
||||
|
||||
|
||||
package-lock.json
|
||||
yarn.lock
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
<meta name="renderer" content="webkit">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||
<link rel="icon" href="/favicon.ico">
|
||||
<title>若依管理系统</title>
|
||||
<title>区间测速</title>
|
||||
<!--[if lt IE 11]><script>window.location.href='/html/ie.html';</script><![endif]-->
|
||||
<style>
|
||||
html,
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@
|
|||
"@vueuse/core": "13.3.0",
|
||||
"axios": "1.9.0",
|
||||
"clipboard": "2.0.11",
|
||||
"dayjs": "^1.11.18",
|
||||
"echarts": "5.6.0",
|
||||
"element-plus": "2.10.7",
|
||||
"file-saver": "2.0.5",
|
||||
|
|
@ -31,6 +32,8 @@
|
|||
"nprogress": "0.2.0",
|
||||
"pinia": "3.0.2",
|
||||
"splitpanes": "4.0.4",
|
||||
"video.js": "^8.23.4",
|
||||
"videojs-contrib-hls": "^5.15.0",
|
||||
"vue": "3.5.16",
|
||||
"vue-cropper": "1.1.1",
|
||||
"vue-router": "4.5.1",
|
||||
|
|
|
|||
361
pnpm-lock.yaml
|
|
@ -23,6 +23,9 @@ importers:
|
|||
clipboard:
|
||||
specifier: 2.0.11
|
||||
version: 2.0.11
|
||||
dayjs:
|
||||
specifier: ^1.11.18
|
||||
version: 1.11.18
|
||||
echarts:
|
||||
specifier: 5.6.0
|
||||
version: 5.6.0
|
||||
|
|
@ -53,6 +56,12 @@ importers:
|
|||
splitpanes:
|
||||
specifier: 4.0.4
|
||||
version: 4.0.4(vue@3.5.16)
|
||||
video.js:
|
||||
specifier: ^8.23.4
|
||||
version: 8.23.4
|
||||
videojs-contrib-hls:
|
||||
specifier: ^5.15.0
|
||||
version: 5.15.0
|
||||
vue:
|
||||
specifier: 3.5.16
|
||||
version: 3.5.16
|
||||
|
|
@ -106,6 +115,10 @@ packages:
|
|||
engines: {node: '>=6.0.0'}
|
||||
hasBin: true
|
||||
|
||||
'@babel/runtime@7.28.4':
|
||||
resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
'@babel/types@7.28.2':
|
||||
resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
|
@ -461,6 +474,19 @@ packages:
|
|||
'@types/web-bluetooth@0.0.21':
|
||||
resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==}
|
||||
|
||||
'@videojs/http-streaming@3.17.2':
|
||||
resolution: {integrity: sha512-VBQ3W4wnKnVKb/limLdtSD2rAd5cmHN70xoMf4OmuDd0t2kfJX04G+sfw6u2j8oOm2BXYM9E1f4acHruqKnM1g==}
|
||||
engines: {node: '>=8', npm: '>=5'}
|
||||
peerDependencies:
|
||||
video.js: ^8.19.0
|
||||
|
||||
'@videojs/vhs-utils@4.1.1':
|
||||
resolution: {integrity: sha512-5iLX6sR2ownbv4Mtejw6Ax+naosGvoT9kY+gcuHzANyUZZ+4NpeNdKMUhb6ag0acYej1Y7cmr/F2+4PrggMiVA==}
|
||||
engines: {node: '>=8', npm: '>=5'}
|
||||
|
||||
'@videojs/xhr@2.7.0':
|
||||
resolution: {integrity: sha512-giab+EVRanChIupZK7gXjHy90y3nncA2phIOyG3Ne5fvpiMJzvqYwiTOnEVW2S4CoYcuKJkomat7bMXA/UoUZQ==}
|
||||
|
||||
'@vitejs/plugin-vue@5.2.4':
|
||||
resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==}
|
||||
engines: {node: ^18.0.0 || >=20.0.0}
|
||||
|
|
@ -551,6 +577,10 @@ packages:
|
|||
'@vueuse/shared@9.13.0':
|
||||
resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==}
|
||||
|
||||
'@xmldom/xmldom@0.8.11':
|
||||
resolution: {integrity: sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==}
|
||||
engines: {node: '>=10.0.0'}
|
||||
|
||||
abbrev@2.0.0:
|
||||
resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==}
|
||||
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
|
||||
|
|
@ -560,6 +590,12 @@ packages:
|
|||
engines: {node: '>=0.4.0'}
|
||||
hasBin: true
|
||||
|
||||
aes-decrypter@1.0.3:
|
||||
resolution: {integrity: sha512-rsx8pfx7wJsn+ziYbpJ8XA5c93hKAtBCrfydxJqJCMT+qfjipd/B5wC2xHtBcoxyvlqJcpeAo3K55t0lXOn9yQ==}
|
||||
|
||||
aes-decrypter@4.0.2:
|
||||
resolution: {integrity: sha512-lc+/9s6iJvuaRe5qDlMTpCFjnwpkeOXp8qP3oiZ5jsj1MRg+SBVUmmICrhxHvc8OELSmc+fEyyxAuppY6hrWzw==}
|
||||
|
||||
ansi-regex@2.1.1:
|
||||
resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
|
@ -634,6 +670,9 @@ packages:
|
|||
axios@1.9.0:
|
||||
resolution: {integrity: sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==}
|
||||
|
||||
babel-runtime@6.26.0:
|
||||
resolution: {integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==}
|
||||
|
||||
balanced-match@1.0.2:
|
||||
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
|
||||
|
||||
|
|
@ -748,6 +787,10 @@ packages:
|
|||
resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
core-js@2.6.12:
|
||||
resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==}
|
||||
deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.
|
||||
|
||||
cors@2.8.5:
|
||||
resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
|
||||
engines: {node: '>= 0.10'}
|
||||
|
|
@ -786,8 +829,8 @@ packages:
|
|||
resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
dayjs@1.11.14:
|
||||
resolution: {integrity: sha512-E8fIdSxUlyqSA8XYGnNa3IkIzxtEmFjI+JU/6ic0P1zmSqyL6HyG5jHnpPjRguDNiaHLpfvHKWFiohNsJLqcJQ==}
|
||||
dayjs@1.11.18:
|
||||
resolution: {integrity: sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==}
|
||||
|
||||
debug@2.6.9:
|
||||
resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
|
||||
|
|
@ -847,6 +890,9 @@ packages:
|
|||
dom-serializer@1.4.1:
|
||||
resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==}
|
||||
|
||||
dom-walk@0.1.2:
|
||||
resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==}
|
||||
|
||||
domelementtype@1.3.1:
|
||||
resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==}
|
||||
|
||||
|
|
@ -930,6 +976,10 @@ packages:
|
|||
resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
es5-shim@4.6.7:
|
||||
resolution: {integrity: sha512-jg21/dmlrNQI7JyyA2w7n+yifSxBng0ZralnSfVZjoCawgNTCnS+yBCyVM9DL5itm7SUnDGgv7hcq2XCZX4iRQ==}
|
||||
engines: {node: '>=0.4.0'}
|
||||
|
||||
esbuild@0.25.9:
|
||||
resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==}
|
||||
engines: {node: '>=18'}
|
||||
|
|
@ -1090,6 +1140,12 @@ packages:
|
|||
resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
|
||||
hasBin: true
|
||||
|
||||
global@4.3.2:
|
||||
resolution: {integrity: sha512-/4AybdwIDU4HkCUbJkZdWpe4P6vuw/CUtu+0I1YlLIPe7OlUO7KNJ+q/rO70CW2/NW6Jc6I62++Hzsf5Alu6rQ==}
|
||||
|
||||
global@4.4.0:
|
||||
resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==}
|
||||
|
||||
globalthis@1.0.4:
|
||||
resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
|
@ -1173,6 +1229,9 @@ packages:
|
|||
immutable@5.1.3:
|
||||
resolution: {integrity: sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==}
|
||||
|
||||
individual@2.0.0:
|
||||
resolution: {integrity: sha512-pWt8hBCqJsUWI/HtcfWod7+N9SgAqyPEaF7JQjwzjn5vGrpg6aQ5qeAFQ7dx//UH4J1O+7xqew+gCeeFt6xN/g==}
|
||||
|
||||
inherits@2.0.4:
|
||||
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
|
||||
|
||||
|
|
@ -1254,6 +1313,9 @@ packages:
|
|||
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
is-function@1.0.2:
|
||||
resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==}
|
||||
|
||||
is-generator-function@1.1.0:
|
||||
resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
|
@ -1430,6 +1492,12 @@ packages:
|
|||
lru-cache@10.4.3:
|
||||
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
|
||||
|
||||
m3u8-parser@2.1.0:
|
||||
resolution: {integrity: sha512-WbEpQ2FUaNGbJ0YanSeyj9D9ruu4FUvz+ZvebIzI2bSME+PUwcPXO1kKXZkjcPUAFruDikoOI5fWQNIA6JCCOQ==}
|
||||
|
||||
m3u8-parser@7.2.0:
|
||||
resolution: {integrity: sha512-CRatFqpjVtMiMaKXxNvuI3I++vUumIXVVT/JpCpdU/FynV/ceVw1qpPyyBNindL+JlPMSesx+WX1QJaZEJSaMQ==}
|
||||
|
||||
magic-string@0.26.7:
|
||||
resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==}
|
||||
engines: {node: '>=12'}
|
||||
|
|
@ -1479,6 +1547,9 @@ packages:
|
|||
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
|
||||
engines: {node: '>= 0.6'}
|
||||
|
||||
min-document@2.19.0:
|
||||
resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==}
|
||||
|
||||
minimatch@9.0.1:
|
||||
resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==}
|
||||
engines: {node: '>=16 || 14 >=14.17'}
|
||||
|
|
@ -1504,12 +1575,24 @@ packages:
|
|||
mlly@1.8.0:
|
||||
resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
|
||||
|
||||
mpd-parser@1.3.1:
|
||||
resolution: {integrity: sha512-1FuyEWI5k2HcmhS1HkKnUAQV7yFPfXPht2DnRRGtoiiAAW+ESTbtEXIDpRkwdU+XyrQuwrIym7UkoPKsZ0SyFw==}
|
||||
hasBin: true
|
||||
|
||||
ms@2.0.0:
|
||||
resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
|
||||
|
||||
ms@2.1.3:
|
||||
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
|
||||
|
||||
mux.js@4.3.2:
|
||||
resolution: {integrity: sha512-g0q6DPdvb3yYcoK7ElBGobdSSrhY/RjPt19U7uUc733aqvc5bCS/aCvL9z+448y+IoCZnYDwyZfQBBXMSmGOaQ==}
|
||||
|
||||
mux.js@7.1.0:
|
||||
resolution: {integrity: sha512-NTxawK/BBELJrYsZThEulyUMDVlLizKdxyAsMuzoCD1eFj97BVaA8D/CvKsKu6FOLYkFojN5CbM9h++ZTZtknA==}
|
||||
engines: {node: '>=8', npm: '>=5'}
|
||||
hasBin: true
|
||||
|
||||
nanoid@3.3.11:
|
||||
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
|
||||
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
|
||||
|
|
@ -1575,6 +1658,9 @@ packages:
|
|||
parchment@1.1.4:
|
||||
resolution: {integrity: sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==}
|
||||
|
||||
parse-headers@2.0.6:
|
||||
resolution: {integrity: sha512-Tz11t3uKztEW5FEVZnj1ox8GKblWn+PvHY9TmJV5Mll2uHEwRdR/5Li1OlXoECjLYkApdhWy44ocONwXLiKO5A==}
|
||||
|
||||
pascalcase@0.1.1:
|
||||
resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
|
@ -1616,6 +1702,15 @@ packages:
|
|||
typescript:
|
||||
optional: true
|
||||
|
||||
pkcs7@0.2.3:
|
||||
resolution: {integrity: sha512-kJRwmADEQUg+qJyRgWLtpEL9q9cFjZschejTEK3GRjKvnsU9G5WWoe/wKqRgbBoqWdVSeTUKP6vIA3Y72M3rWA==}
|
||||
engines: {node: ^0.10, npm: ^1.4.6}
|
||||
hasBin: true
|
||||
|
||||
pkcs7@1.0.4:
|
||||
resolution: {integrity: sha512-afRERtHn54AlwaF2/+LFszyAANTCggGilmcmILUzEjvs3XgFZT+xE6+QWQcAGmu4xajy+Xtj7acLOPdx5/eXWQ==}
|
||||
hasBin: true
|
||||
|
||||
pkg-types@1.3.1:
|
||||
resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
|
||||
|
||||
|
|
@ -1660,6 +1755,14 @@ packages:
|
|||
resolution: {integrity: sha512-spBB5sgC4cv2YcW03f/IAUN1pgDJWNWD8FzkyY4mArLUMJW+KlQhlmUdKAHQuPfb00Jl5xIfImeOsf6YL8QK7Q==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
process@0.11.10:
|
||||
resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
|
||||
engines: {node: '>= 0.6.0'}
|
||||
|
||||
process@0.5.2:
|
||||
resolution: {integrity: sha512-oNpcutj+nYX2FjdEW7PGltWhXulAnFlM0My/k48L90hARCOJtvBbQXc/6itV2jDvU5xAAtonP+r6wmQgCcbAUA==}
|
||||
engines: {node: '>= 0.6.0'}
|
||||
|
||||
proto-list@1.2.4:
|
||||
resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
|
||||
|
||||
|
|
@ -1694,6 +1797,9 @@ packages:
|
|||
resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
regenerator-runtime@0.11.1:
|
||||
resolution: {integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==}
|
||||
|
||||
regex-not@1.0.2:
|
||||
resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
|
@ -1733,6 +1839,9 @@ packages:
|
|||
run-parallel@1.2.0:
|
||||
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
|
||||
|
||||
rust-result@1.0.0:
|
||||
resolution: {integrity: sha512-6cJzSBU+J/RJCF063onnQf0cDUOHs9uZI1oroSGnHOph+CQTIJ5Pp2hK5kEQq1+7yE/EEWfulSNXAQ2jikPthA==}
|
||||
|
||||
rxjs@7.8.2:
|
||||
resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
|
||||
|
||||
|
|
@ -1743,6 +1852,9 @@ packages:
|
|||
safe-buffer@5.2.1:
|
||||
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
|
||||
|
||||
safe-json-parse@4.0.0:
|
||||
resolution: {integrity: sha512-RjZPPHugjK0TOzFrLZ8inw44s9bKox99/0AZW9o/BEQVrJfhI+fIHMErnPyRa89/yRXUUr93q+tiN6zhoVV4wQ==}
|
||||
|
||||
safe-push-apply@1.0.0:
|
||||
resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
|
@ -2085,6 +2197,10 @@ packages:
|
|||
tslib@2.8.1:
|
||||
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
|
||||
|
||||
tsml@1.0.1:
|
||||
resolution: {integrity: sha512-3KmepnH9SUsoOVtg013CRrL7c+AK7ECaquAsJdvu4288EDJuraqBlP4PDXT/rLEJ9YDn4jqLAzRJsnFPx+V6lg==}
|
||||
deprecated: no longer maintained
|
||||
|
||||
typed-array-buffer@1.0.3:
|
||||
resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
|
@ -2153,6 +2269,9 @@ packages:
|
|||
resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==}
|
||||
deprecated: Please see https://github.com/lydell/urix#deprecated
|
||||
|
||||
url-toolkit@2.2.5:
|
||||
resolution: {integrity: sha512-mtN6xk+Nac+oyJ/PrI7tzfmomRVNFIWKUbG8jdYFt52hxbiReFAXIjYskvu64/dvuW71IcB7lV8l0HvZMac6Jg==}
|
||||
|
||||
use@3.1.1:
|
||||
resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
|
@ -2167,6 +2286,40 @@ packages:
|
|||
resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
|
||||
engines: {node: '>= 0.8'}
|
||||
|
||||
video.js@6.13.0:
|
||||
resolution: {integrity: sha512-36/JR/GhPQSZj0o+GNbhcEYv/b0SkV9SQsjlodAnzMQYN0TA7VhmqrKPYMCi1NGRYu7S9W3OaFCFoUxkYfSVlg==}
|
||||
|
||||
video.js@8.23.4:
|
||||
resolution: {integrity: sha512-qI0VTlYmKzEqRsz1Nppdfcaww4RSxZAq77z2oNSl3cNg2h6do5C8Ffl0KqWQ1OpD8desWXsCrde7tKJ9gGTEyQ==}
|
||||
|
||||
videojs-contrib-hls@5.15.0:
|
||||
resolution: {integrity: sha512-18zbMYZ0XRBKTPEayA9bFTWWrqhT9b4G8+zf0czJLD7Epe5PcK1I/3dflTHQeQ5rwlWir+/XnFU3sMg/B2MMcw==}
|
||||
engines: {node: '>= 0.10.12'}
|
||||
|
||||
videojs-contrib-media-sources@4.7.2:
|
||||
resolution: {integrity: sha512-e6iCHWBFuV05EGo7v+pS9iepObXnJ9joms467gzi8ZjpKVb3ifha9M0Ja24Rd8JfvYpzjltsgDVtGFDvIg4hQQ==}
|
||||
|
||||
videojs-contrib-quality-levels@4.1.0:
|
||||
resolution: {integrity: sha512-TfrXJJg1Bv4t6TOCMEVMwF/CoS8iENYsWNKip8zfhB5kTcegiFYezEA0eHAJPU64ZC8NQbxQgOwAsYU8VXbOWA==}
|
||||
engines: {node: '>=16', npm: '>=8'}
|
||||
peerDependencies:
|
||||
video.js: ^8
|
||||
|
||||
videojs-font@2.1.0:
|
||||
resolution: {integrity: sha512-zFqWpLrXf1q8NtYx5qtZhMC6SLUFScDmR6j+UGPogobxR21lvXShhnzcNNMdOxJUuFLiToJ/BPpFUQwX4xhpvA==}
|
||||
|
||||
videojs-font@4.2.0:
|
||||
resolution: {integrity: sha512-YPq+wiKoGy2/M7ccjmlvwi58z2xsykkkfNMyIg4xb7EZQQNwB71hcSsB3o75CqQV7/y5lXkXhI/rsGAS7jfEmQ==}
|
||||
|
||||
videojs-ie8@1.1.2:
|
||||
resolution: {integrity: sha512-0Zb2T4MLkpfZbeGMK/Z93b8Lrepr+rLFoHgQV1CoDeFqXvH7b+Vsd/VHoILGxQrgCSHFQ7mAODR6oyMjuiD4/g==}
|
||||
|
||||
videojs-vtt.js@0.12.6:
|
||||
resolution: {integrity: sha512-XFXeGBQiljnElMhwCcZst0RDbZn2n8LU7ZScXryd3a00OaZsHAjdZu/7/RdSr7Z1jHphd45FnOvOQkGK4YrWCQ==}
|
||||
|
||||
videojs-vtt.js@0.15.5:
|
||||
resolution: {integrity: sha512-yZbBxvA7QMYn15Lr/ZfhhLPrNpI/RmCSCqgIff57GC2gIrV5YfyzLfLyZMj0NnZSAz8syB4N0nHXpZg9MyrMOQ==}
|
||||
|
||||
vite-plugin-compression@0.5.1:
|
||||
resolution: {integrity: sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==}
|
||||
peerDependencies:
|
||||
|
|
@ -2252,6 +2405,9 @@ packages:
|
|||
webpack-virtual-modules@0.6.2:
|
||||
resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
|
||||
|
||||
webwackify@0.1.6:
|
||||
resolution: {integrity: sha512-pGcw1T3HpNnM/UTRQqqRkkkzythSLts05mB+7Gr00B+0VbL0m39dFL5g20rSIEUt9Wrpw+/8k+snxRlUFHhcqA==}
|
||||
|
||||
which-boxed-primitive@1.1.1:
|
||||
resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
|
@ -2281,6 +2437,13 @@ packages:
|
|||
resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
xhr@2.4.0:
|
||||
resolution: {integrity: sha512-TUbBsdAuJbX8olk9hsDwGK8P1ri1XlV+PdEWkYw+HQQbpkiBR8PLgD1F3kQDPBs9l4Px34hP9rCYAZOCCAENbw==}
|
||||
|
||||
xtend@4.0.2:
|
||||
resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
|
||||
engines: {node: '>=0.4'}
|
||||
|
||||
zrender@5.6.1:
|
||||
resolution: {integrity: sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==}
|
||||
|
||||
|
|
@ -2296,6 +2459,8 @@ snapshots:
|
|||
dependencies:
|
||||
'@babel/types': 7.28.2
|
||||
|
||||
'@babel/runtime@7.28.4': {}
|
||||
|
||||
'@babel/types@7.28.2':
|
||||
dependencies:
|
||||
'@babel/helper-string-parser': 7.27.1
|
||||
|
|
@ -2518,6 +2683,28 @@ snapshots:
|
|||
|
||||
'@types/web-bluetooth@0.0.21': {}
|
||||
|
||||
'@videojs/http-streaming@3.17.2(video.js@8.23.4)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.28.4
|
||||
'@videojs/vhs-utils': 4.1.1
|
||||
aes-decrypter: 4.0.2
|
||||
global: 4.4.0
|
||||
m3u8-parser: 7.2.0
|
||||
mpd-parser: 1.3.1
|
||||
mux.js: 7.1.0
|
||||
video.js: 8.23.4
|
||||
|
||||
'@videojs/vhs-utils@4.1.1':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.28.4
|
||||
global: 4.4.0
|
||||
|
||||
'@videojs/xhr@2.7.0':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.28.4
|
||||
global: 4.4.0
|
||||
is-function: 1.0.2
|
||||
|
||||
'@vitejs/plugin-vue@5.2.4(vite@6.3.5(@types/node@24.3.0)(sass-embedded@1.89.1))(vue@3.5.16)':
|
||||
dependencies:
|
||||
vite: 6.3.5(@types/node@24.3.0)(sass-embedded@1.89.1)
|
||||
|
|
@ -2667,10 +2854,23 @@ snapshots:
|
|||
- '@vue/composition-api'
|
||||
- vue
|
||||
|
||||
'@xmldom/xmldom@0.8.11': {}
|
||||
|
||||
abbrev@2.0.0: {}
|
||||
|
||||
acorn@8.15.0: {}
|
||||
|
||||
aes-decrypter@1.0.3:
|
||||
dependencies:
|
||||
pkcs7: 0.2.3
|
||||
|
||||
aes-decrypter@4.0.2:
|
||||
dependencies:
|
||||
'@babel/runtime': 7.28.4
|
||||
'@videojs/vhs-utils': 4.1.1
|
||||
global: 4.4.0
|
||||
pkcs7: 1.0.4
|
||||
|
||||
ansi-regex@2.1.1: {}
|
||||
|
||||
ansi-regex@5.0.1: {}
|
||||
|
|
@ -2730,6 +2930,11 @@ snapshots:
|
|||
transitivePeerDependencies:
|
||||
- debug
|
||||
|
||||
babel-runtime@6.26.0:
|
||||
dependencies:
|
||||
core-js: 2.6.12
|
||||
regenerator-runtime: 0.11.1
|
||||
|
||||
balanced-match@1.0.2: {}
|
||||
|
||||
base@0.11.2:
|
||||
|
|
@ -2870,6 +3075,8 @@ snapshots:
|
|||
|
||||
copy-descriptor@0.1.1: {}
|
||||
|
||||
core-js@2.6.12: {}
|
||||
|
||||
cors@2.8.5:
|
||||
dependencies:
|
||||
object-assign: 4.1.1
|
||||
|
|
@ -2920,7 +3127,7 @@ snapshots:
|
|||
es-errors: 1.3.0
|
||||
is-data-view: 1.0.2
|
||||
|
||||
dayjs@1.11.14: {}
|
||||
dayjs@1.11.18: {}
|
||||
|
||||
debug@2.6.9:
|
||||
dependencies:
|
||||
|
|
@ -2981,6 +3188,8 @@ snapshots:
|
|||
domhandler: 4.3.1
|
||||
entities: 2.2.0
|
||||
|
||||
dom-walk@0.1.2: {}
|
||||
|
||||
domelementtype@1.3.1: {}
|
||||
|
||||
domelementtype@2.3.0: {}
|
||||
|
|
@ -3034,7 +3243,7 @@ snapshots:
|
|||
'@types/lodash-es': 4.17.12
|
||||
'@vueuse/core': 9.13.0(vue@3.5.16)
|
||||
async-validator: 4.2.5
|
||||
dayjs: 1.11.14
|
||||
dayjs: 1.11.18
|
||||
escape-html: 1.0.3
|
||||
lodash: 4.17.21
|
||||
lodash-es: 4.17.21
|
||||
|
|
@ -3135,6 +3344,8 @@ snapshots:
|
|||
is-date-object: 1.1.0
|
||||
is-symbol: 1.1.1
|
||||
|
||||
es5-shim@4.6.7: {}
|
||||
|
||||
esbuild@0.25.9:
|
||||
optionalDependencies:
|
||||
'@esbuild/aix-ppc64': 0.25.9
|
||||
|
|
@ -3339,6 +3550,16 @@ snapshots:
|
|||
package-json-from-dist: 1.0.1
|
||||
path-scurry: 1.11.1
|
||||
|
||||
global@4.3.2:
|
||||
dependencies:
|
||||
min-document: 2.19.0
|
||||
process: 0.5.2
|
||||
|
||||
global@4.4.0:
|
||||
dependencies:
|
||||
min-document: 2.19.0
|
||||
process: 0.11.10
|
||||
|
||||
globalthis@1.0.4:
|
||||
dependencies:
|
||||
define-properties: 1.2.1
|
||||
|
|
@ -3416,6 +3637,8 @@ snapshots:
|
|||
|
||||
immutable@5.1.3: {}
|
||||
|
||||
individual@2.0.0: {}
|
||||
|
||||
inherits@2.0.4: {}
|
||||
|
||||
ini@1.3.8: {}
|
||||
|
|
@ -3501,6 +3724,8 @@ snapshots:
|
|||
|
||||
is-fullwidth-code-point@3.0.0: {}
|
||||
|
||||
is-function@1.0.2: {}
|
||||
|
||||
is-generator-function@1.1.0:
|
||||
dependencies:
|
||||
call-bound: 1.0.4
|
||||
|
|
@ -3664,6 +3889,14 @@ snapshots:
|
|||
|
||||
lru-cache@10.4.3: {}
|
||||
|
||||
m3u8-parser@2.1.0: {}
|
||||
|
||||
m3u8-parser@7.2.0:
|
||||
dependencies:
|
||||
'@babel/runtime': 7.28.4
|
||||
'@videojs/vhs-utils': 4.1.1
|
||||
global: 4.4.0
|
||||
|
||||
magic-string@0.26.7:
|
||||
dependencies:
|
||||
sourcemap-codec: 1.4.8
|
||||
|
|
@ -3719,6 +3952,10 @@ snapshots:
|
|||
dependencies:
|
||||
mime-db: 1.52.0
|
||||
|
||||
min-document@2.19.0:
|
||||
dependencies:
|
||||
dom-walk: 0.1.2
|
||||
|
||||
minimatch@9.0.1:
|
||||
dependencies:
|
||||
brace-expansion: 2.0.2
|
||||
|
|
@ -3745,10 +3982,24 @@ snapshots:
|
|||
pkg-types: 1.3.1
|
||||
ufo: 1.6.1
|
||||
|
||||
mpd-parser@1.3.1:
|
||||
dependencies:
|
||||
'@babel/runtime': 7.28.4
|
||||
'@videojs/vhs-utils': 4.1.1
|
||||
'@xmldom/xmldom': 0.8.11
|
||||
global: 4.4.0
|
||||
|
||||
ms@2.0.0: {}
|
||||
|
||||
ms@2.1.3: {}
|
||||
|
||||
mux.js@4.3.2: {}
|
||||
|
||||
mux.js@7.1.0:
|
||||
dependencies:
|
||||
'@babel/runtime': 7.28.4
|
||||
global: 4.4.0
|
||||
|
||||
nanoid@3.3.11: {}
|
||||
|
||||
nanomatch@1.2.13:
|
||||
|
|
@ -3823,6 +4074,8 @@ snapshots:
|
|||
|
||||
parchment@1.1.4: {}
|
||||
|
||||
parse-headers@2.0.6: {}
|
||||
|
||||
pascalcase@0.1.1: {}
|
||||
|
||||
path-key@3.1.1: {}
|
||||
|
|
@ -3849,6 +4102,12 @@ snapshots:
|
|||
'@vue/devtools-api': 7.7.7
|
||||
vue: 3.5.16
|
||||
|
||||
pkcs7@0.2.3: {}
|
||||
|
||||
pkcs7@1.0.4:
|
||||
dependencies:
|
||||
'@babel/runtime': 7.28.4
|
||||
|
||||
pkg-types@1.3.1:
|
||||
dependencies:
|
||||
confbox: 0.1.8
|
||||
|
|
@ -3905,6 +4164,10 @@ snapshots:
|
|||
posthtml-parser: 0.2.1
|
||||
posthtml-render: 1.4.0
|
||||
|
||||
process@0.11.10: {}
|
||||
|
||||
process@0.5.2: {}
|
||||
|
||||
proto-list@1.2.4: {}
|
||||
|
||||
proxy-from-env@1.1.0: {}
|
||||
|
|
@ -3956,6 +4219,8 @@ snapshots:
|
|||
get-proto: 1.0.1
|
||||
which-builtin-type: 1.2.1
|
||||
|
||||
regenerator-runtime@0.11.1: {}
|
||||
|
||||
regex-not@1.0.2:
|
||||
dependencies:
|
||||
extend-shallow: 3.0.2
|
||||
|
|
@ -4012,6 +4277,10 @@ snapshots:
|
|||
dependencies:
|
||||
queue-microtask: 1.2.3
|
||||
|
||||
rust-result@1.0.0:
|
||||
dependencies:
|
||||
individual: 2.0.0
|
||||
|
||||
rxjs@7.8.2:
|
||||
dependencies:
|
||||
tslib: 2.8.1
|
||||
|
|
@ -4026,6 +4295,10 @@ snapshots:
|
|||
|
||||
safe-buffer@5.2.1: {}
|
||||
|
||||
safe-json-parse@4.0.0:
|
||||
dependencies:
|
||||
rust-result: 1.0.0
|
||||
|
||||
safe-push-apply@1.0.0:
|
||||
dependencies:
|
||||
es-errors: 1.3.0
|
||||
|
|
@ -4399,6 +4672,8 @@ snapshots:
|
|||
|
||||
tslib@2.8.1: {}
|
||||
|
||||
tsml@1.0.1: {}
|
||||
|
||||
typed-array-buffer@1.0.3:
|
||||
dependencies:
|
||||
call-bound: 1.0.4
|
||||
|
|
@ -4515,6 +4790,8 @@ snapshots:
|
|||
|
||||
urix@0.1.0: {}
|
||||
|
||||
url-toolkit@2.2.5: {}
|
||||
|
||||
use@3.1.1: {}
|
||||
|
||||
util-deprecate@1.0.2: {}
|
||||
|
|
@ -4523,6 +4800,71 @@ snapshots:
|
|||
|
||||
vary@1.1.2: {}
|
||||
|
||||
video.js@6.13.0:
|
||||
dependencies:
|
||||
babel-runtime: 6.26.0
|
||||
global: 4.3.2
|
||||
safe-json-parse: 4.0.0
|
||||
tsml: 1.0.1
|
||||
videojs-font: 2.1.0
|
||||
videojs-ie8: 1.1.2
|
||||
videojs-vtt.js: 0.12.6
|
||||
xhr: 2.4.0
|
||||
|
||||
video.js@8.23.4:
|
||||
dependencies:
|
||||
'@babel/runtime': 7.28.4
|
||||
'@videojs/http-streaming': 3.17.2(video.js@8.23.4)
|
||||
'@videojs/vhs-utils': 4.1.1
|
||||
'@videojs/xhr': 2.7.0
|
||||
aes-decrypter: 4.0.2
|
||||
global: 4.4.0
|
||||
m3u8-parser: 7.2.0
|
||||
mpd-parser: 1.3.1
|
||||
mux.js: 7.1.0
|
||||
videojs-contrib-quality-levels: 4.1.0(video.js@8.23.4)
|
||||
videojs-font: 4.2.0
|
||||
videojs-vtt.js: 0.15.5
|
||||
|
||||
videojs-contrib-hls@5.15.0:
|
||||
dependencies:
|
||||
aes-decrypter: 1.0.3
|
||||
global: 4.4.0
|
||||
m3u8-parser: 2.1.0
|
||||
mux.js: 4.3.2
|
||||
url-toolkit: 2.2.5
|
||||
video.js: 6.13.0
|
||||
videojs-contrib-media-sources: 4.7.2
|
||||
webwackify: 0.1.6
|
||||
|
||||
videojs-contrib-media-sources@4.7.2:
|
||||
dependencies:
|
||||
global: 4.4.0
|
||||
mux.js: 4.3.2
|
||||
video.js: 6.13.0
|
||||
webwackify: 0.1.6
|
||||
|
||||
videojs-contrib-quality-levels@4.1.0(video.js@8.23.4):
|
||||
dependencies:
|
||||
global: 4.4.0
|
||||
video.js: 8.23.4
|
||||
|
||||
videojs-font@2.1.0: {}
|
||||
|
||||
videojs-font@4.2.0: {}
|
||||
|
||||
videojs-ie8@1.1.2:
|
||||
dependencies:
|
||||
es5-shim: 4.6.7
|
||||
|
||||
videojs-vtt.js@0.12.6:
|
||||
dependencies:
|
||||
global: 4.4.0
|
||||
|
||||
videojs-vtt.js@0.15.5:
|
||||
dependencies:
|
||||
global: 4.4.0
|
||||
|
||||
vite-plugin-compression@0.5.1(vite@6.3.5(@types/node@24.3.0)(sass-embedded@1.89.1)):
|
||||
dependencies:
|
||||
chalk: 4.1.2
|
||||
|
|
@ -4585,6 +4927,8 @@ snapshots:
|
|||
|
||||
webpack-virtual-modules@0.6.2: {}
|
||||
|
||||
webwackify@0.1.6: {}
|
||||
|
||||
which-boxed-primitive@1.1.1:
|
||||
dependencies:
|
||||
is-bigint: 1.1.0
|
||||
|
|
@ -4642,6 +4986,15 @@ snapshots:
|
|||
string-width: 5.1.2
|
||||
strip-ansi: 7.1.0
|
||||
|
||||
xhr@2.4.0:
|
||||
dependencies:
|
||||
global: 4.3.2
|
||||
is-function: 1.0.2
|
||||
parse-headers: 2.0.6
|
||||
xtend: 4.0.2
|
||||
|
||||
xtend@4.0.2: {}
|
||||
|
||||
zrender@5.6.1:
|
||||
dependencies:
|
||||
tslib: 2.3.0
|
||||
|
|
|
|||
|
|
@ -0,0 +1,44 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
// 查询APP版本发布列表
|
||||
export function listAppVersionRelease(query) {
|
||||
return request({
|
||||
url: '/system/AppVersionRelease/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 查询APP版本发布详细
|
||||
export function getAppVersionRelease(id) {
|
||||
return request({
|
||||
url: '/system/AppVersionRelease/' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 新增APP版本发布
|
||||
export function addAppVersionRelease(data) {
|
||||
return request({
|
||||
url: '/system/AppVersionRelease',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 修改APP版本发布
|
||||
export function updateAppVersionRelease(data) {
|
||||
return request({
|
||||
url: '/system/AppVersionRelease',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 删除APP版本发布
|
||||
export function delAppVersionRelease(id) {
|
||||
return request({
|
||||
url: '/system/AppVersionRelease/' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
// 部门查询
|
||||
export function deptList() {
|
||||
return request({
|
||||
url: '/system/statistics/deptList',
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 大屏统计
|
||||
export function dashboard(data) {
|
||||
return request({
|
||||
url: '/system/statistics/dashboard',
|
||||
method: 'get',
|
||||
data: data,
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
// 大屏统计
|
||||
export function dailyTable(data) {
|
||||
return request({
|
||||
url: '/system/statistics/dailyTable',
|
||||
method: 'get',
|
||||
data: data,
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
After Width: | Height: | Size: 902 KiB |
|
After Width: | Height: | Size: 905 B |
|
After Width: | Height: | Size: 791 B |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 6.2 KiB |
|
After Width: | Height: | Size: 70 KiB |
|
|
@ -0,0 +1,77 @@
|
|||
|
||||
|
||||
.el-breadcrumb__inner,
|
||||
.el-breadcrumb__inner a {
|
||||
font-weight: 400 !important;
|
||||
}
|
||||
|
||||
.el-upload input[type="file"] {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.el-upload__input {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.cell .el-tag {
|
||||
margin-right: 0px;
|
||||
}
|
||||
|
||||
.small-padding .cell {
|
||||
padding-left: 5px;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
.fixed-width .el-button--mini {
|
||||
padding: 7px 10px;
|
||||
width: 60px;
|
||||
}
|
||||
|
||||
.status-col .cell {
|
||||
padding: 0 10px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.status-col .cell .el-tag {
|
||||
margin-right: 0px;
|
||||
}
|
||||
|
||||
.el-dialog {
|
||||
transform: none;
|
||||
left: 0;
|
||||
position: relative;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.upload-container .el-upload {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.upload-container .el-upload .el-upload-dragger {
|
||||
width: 100%;
|
||||
height: 200px;
|
||||
}
|
||||
|
||||
.el-dropdown-menu a {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.el-range-editor.el-input__inner {
|
||||
display: inline-flex !important;
|
||||
}
|
||||
|
||||
.el-range-separator {
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
.el-menu--collapse
|
||||
> div
|
||||
> .el-submenu
|
||||
> .el-submenu__title
|
||||
.el-submenu__icon-arrow {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.el-dropdown .el-dropdown-link {
|
||||
color: var(--el-color-primary) !important;
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"sources":["element-ui.scss","element-ui.css"],"names":[],"mappings":"AACA;EACE,2BAAA;ACAF;;ADKA;;EAEE,2BAAA;ACFF;;ADME;EACE,wBAAA;ACHJ;;ADOA;EACE,aAAA;ACJF;;ADQE;EACE,iBAAA;ACLJ;;ADUE;EACE,iBAAA;EACA,kBAAA;ACPJ;;ADYE;EACE,iBAAA;EACA,WAAA;ACTJ;;ADcE;EACE,eAAA;EACA,kBAAA;ACXJ;ADaI;EACE,iBAAA;ACXN;;ADiBA;EACE,eAAA;EACA,OAAA;EACA,kBAAA;EACA,cAAA;ACdF;;ADmBE;EACE,WAAA;AChBJ;ADkBI;EACE,WAAA;EACA,aAAA;AChBN;;ADuBE;EACE,cAAA;ACpBJ;;ADyBA;EACE,+BAAA;ACtBF;;AD0BA;EACE,uBAAA;ACvBF;;AD0BA;EAKE,aAAA;AC3BF;;AD8BA;EACE,yCAAA;AC3BF","file":"element-ui.css"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
:root{--el-color-primary:#4D7BFF}.el-breadcrumb__inner,.el-breadcrumb__inner a{font-weight:400 !important}.el-upload input[type="file"]{display:none !important}.el-upload__input{display:none}.cell .el-tag{margin-right:0px}.small-padding .cell{padding-left:5px;padding-right:5px}.fixed-width .el-button--mini{padding:7px 10px;width:60px}.status-col .cell{padding:0 10px;text-align:center}.status-col .cell .el-tag{margin-right:0px}.el-dialog{transform:none;left:0;position:relative;margin:0 auto}.upload-container .el-upload{width:100%}.upload-container .el-upload .el-upload-dragger{width:100%;height:200px}.el-dropdown-menu a{display:block}.el-range-editor.el-input__inner{display:inline-flex !important}.el-range-separator{box-sizing:content-box}.el-menu--collapse>div>.el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}.el-dropdown .el-dropdown-link{color:var(--el-color-primary) !important}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"sources":["element-ui.scss"],"names":[],"mappings":"AACA,MACE,2BAAA,CAKF,8CAEE,0BAAA,CAIA,4BACE,uBAAA,CAIJ,kBACE,YAAA,CAIA,cACE,gBAAA,CAKF,qBACE,gBAAA,CACA,iBAAA,CAKF,8BACE,gBAAA,CACA,UAAA,CAKF,kBACE,cAAA,CACA,iBAAA,CAEA,0BACE,gBAAA,CAMN,WACE,cAAA,CACA,MAAA,CACA,iBAAA,CACA,aAAA,CAKA,6BACE,UAAA,CAEA,gDACE,UAAA,CACA,YAAA,CAOJ,oBACE,aAAA,CAKJ,iCACE,8BAAA,CAIF,oBACE,sBAAA,CAGF,8EAKE,YAAA,CAGF,+BACE,wCAAA","file":"element-ui.min.css"}
|
||||
|
|
@ -1,4 +1,9 @@
|
|||
// cover some element-ui styles
|
||||
:root {
|
||||
--el-color-primary:#4D7BFF
|
||||
}
|
||||
|
||||
|
||||
|
||||
.el-breadcrumb__inner,
|
||||
.el-breadcrumb__inner a {
|
||||
|
|
|
|||
|
|
@ -177,3 +177,10 @@ aside {
|
|||
margin-bottom: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
:root {
|
||||
--el-color-primary: #4D7BFF !important;
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -296,4 +296,22 @@
|
|||
.splitpanes.default-theme .splitpanes__pane {
|
||||
background-color: var(--splitpanes-default-bg) !important;
|
||||
}
|
||||
|
||||
.el-dialog__header {
|
||||
background: #F6F6F6;
|
||||
padding: 10px 15px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
.el-dialog__header .el-dialog__title {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.el-dialog {
|
||||
padding: 0px;
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
|
||||
.el-dialog__body {
|
||||
padding: 15px 25px;
|
||||
}
|
||||
/*# sourceMappingURL=ruoyi.css.map */
|
||||
|
|
@ -1 +1 @@
|
|||
{"version":3,"sources":["ruoyi.css","ruoyi.scss"],"names":[],"mappings":"AAAA,gBAAgB;ACAhB;;;EAAA;AAKA,WAAA;AACA;EACE,gBAAA;ADCF;;ACCA;EACE,kBAAA;ADEF;;ACAA;EACE,mBAAA;ADGF;;ACDA;EACE,eAAA;ADIF;;ACFA;EACE,iBAAA;ADKF;;ACHA;EACE,kBAAA;ADMF;;ACJA;EACE,kBAAA;ADOF;;ACLA;EACE,gBAAA;ADQF;;ACNA;EACE,gBAAA;ADSF;;ACPA;EACE,kBAAA;ADUF;;ACRA;EACE,mBAAA;ADWF;;ACTA;EACE,iBAAA;ADYF;;ACVA;EACE,gBAAA;ADaF;;ACXA;EACE,kBAAA;ADcF;;ACZA;EACE,mBAAA;ADeF;;ACbA;EACE,iBAAA;ADgBF;;ACbA;EACE,oBAAA;EACA,gBAAA;EACA,gBAAA;EACA,cAAA;ADgBF;;ACbA;EACE,gBAAA;ADgBF;;ACdA;EACE,0BAAA;ADiBF;;ACfA;EACE,uBAAA;ADkBF;;ACfA;EACE,cAAA;EACA,kBAAA;EACA,gBAAA;EACA,oBAAA;ADkBF;;ACbI;EACE,sBAAA;EACA,oCAAA;EACA,cAAA;EACA,uBAAA;EACA,eAAA;ADgBN;ACZI;EACE,gBAAA;ADcN;;ACTA,WAAA;AACA;EACE,eAAA;EACA,cAAA;EACA,6BAAA;EACA,0BAAA;EACA,mBAAA;ADYF;;ACTA,WAAA;AACA;EACE,aAAA;EACA,yBAAA;EACA,gBAAA;EACA,wCAAA;ADYF;;ACTA,YAAA;AACA;EACE,2BAAA;EACA,kBAAA;EACA,qBAAA;ADYF;ACVE;EACE,gBAAA;ADYJ;;ACRA,UAAA;AACA;EAGM;IACE,wBAAA;EDSN;ECPI;IACE,wBAAA;EDSN;AACF;ACJA,gBAAA;AACA;EACE,eAAA;EACA,uDAAA;EACA,4CAAA;EACA,kBAAA;EACA,WAAA;ADMF;;ACHA;EACE,eAAA;EACA,gBAAA;EACA,cAAA;ADMF;;ACHA,gBAAA;AACA;EACE,eAAA;EACA,cAAA;EACA,iBAAA;ADMF;;ACHA;EACE,eAAA;ADMF;;ACHA;EACE,iBAAA;ADMF;;ACHA;EACE,cAAA;EACA,eAAA;EACA,gBAAA;EACA,eAAA;EACA,gBAAA;ADMF;;ACHA;EACE,iBAAA;EACA,gBAAA;ADMF;;ACHA;EACE,gCAAA;EACA,6BAAA;EACA,mBAAA;EACA,iBAAA;EACA,eAAA;ADMF;;ACHA;EACE,uBAAA;ADMF;;ACHA;EACE,iCAAA;EACA,gBAAA;ADMF;;ACHA;EACE,uCAAA;ADMF;;ACHA;EACE,mBAAA;ADMF;;ACHA,iBAAA;AACA;;EAEE,mBAAA;EACA,qBAAA;EACA,cAAA;ADMF;;ACHA;;EAEE,mBAAA;EACA,qBAAA;EACA,cAAA;ADMF;;ACHA;EACE,yBAAA;EACA,qBAAA;EACA,cAAA;ADMF;;ACHA,eAAA;AACA;EACE,cAAA;ADMF;;ACHA;EACE,cAAA;ADMF;;ACHA;EACE,cAAA;ADMF;;ACHA;EACE,cAAA;ADMF;;ACHA;EACE,cAAA;ADMF;;ACHA;EACE,cAAA;ADMF;;ACHA;EACE,cAAA;ADMF;;ACHA,UAAA;AACA;EACE,kBAAA;ADMF;;ACHA;EACE,YAAA;EACA,aAAA;ADMF;;ACHA;EACE,kBAAA;EACA,QAAA;EACA,+BAAA;EACA,YAAA;EACA,aAAA;EACA,kBAAA;EACA,wBAAA;EACA,gBAAA;ADMF;;ACHA,UAAA;AACA;EACE,YAAA;EACA,sBAAA;EACA,8BAAA;ADMF;;ACHA,cAAA;AACA;EACE,iBAAA;ADMF;;ACHA,WAAA;AACA;EACE,yDAAA;ADMF","file":"ruoyi.css"}
|
||||
{"version":3,"sources":["ruoyi.css","ruoyi.scss"],"names":[],"mappings":"AAAA,gBAAgB;ACAhB;;;EAAA;AAKA,WAAA;AACA;EACE,gBAAA;ADCF;;ACCA;EACE,kBAAA;ADEF;;ACAA;EACE,mBAAA;ADGF;;ACDA;EACE,eAAA;ADIF;;ACFA;EACE,iBAAA;ADKF;;ACHA;EACE,kBAAA;ADMF;;ACJA;EACE,kBAAA;ADOF;;ACLA;EACE,gBAAA;ADQF;;ACNA;EACE,gBAAA;ADSF;;ACPA;EACE,kBAAA;ADUF;;ACRA;EACE,mBAAA;ADWF;;ACTA;EACE,iBAAA;ADYF;;ACVA;EACE,gBAAA;ADaF;;ACXA;EACE,kBAAA;ADcF;;ACZA;EACE,mBAAA;ADeF;;ACbA;EACE,iBAAA;ADgBF;;ACbA;EACE,oBAAA;EACA,gBAAA;EACA,gBAAA;EACA,cAAA;ADgBF;;ACbA;EACE,gBAAA;ADgBF;;ACdA;EACE,0BAAA;ADiBF;;ACfA;EACE,uBAAA;ADkBF;;ACfA;EACE,cAAA;EACA,kBAAA;EACA,gBAAA;EACA,oBAAA;ADkBF;;ACbI;EACE,sBAAA;EACA,oCAAA;EACA,cAAA;EACA,uBAAA;EACA,eAAA;ADgBN;ACZI;EACE,gBAAA;ADcN;;ACTA,WAAA;AACA;EACE,eAAA;EACA,cAAA;EACA,6BAAA;EACA,0BAAA;EACA,mBAAA;ADYF;;ACTA,WAAA;AACA;EACE,aAAA;EACA,yBAAA;EACA,gBAAA;EACA,wCAAA;ADYF;;ACTA,YAAA;AACA;EACE,2BAAA;EACA,kBAAA;EACA,qBAAA;ADYF;ACVE;EACE,gBAAA;ADYJ;;ACRA,UAAA;AACA;EAGM;IACE,wBAAA;EDSN;ECPI;IACE,wBAAA;EDSN;AACF;ACJA,gBAAA;AACA;EACE,eAAA;EACA,uDAAA;EACA,4CAAA;EACA,kBAAA;EACA,WAAA;ADMF;;ACHA;EACE,eAAA;EACA,gBAAA;EACA,cAAA;ADMF;;ACHA,gBAAA;AACA;EACE,eAAA;EACA,cAAA;EACA,iBAAA;ADMF;;ACHA;EACE,eAAA;ADMF;;ACHA;EACE,iBAAA;ADMF;;ACHA;EACE,cAAA;EACA,eAAA;EACA,gBAAA;EACA,eAAA;EACA,gBAAA;ADMF;;ACHA;EACE,iBAAA;EACA,gBAAA;ADMF;;ACHA;EACE,gCAAA;EACA,6BAAA;EACA,mBAAA;EACA,iBAAA;EACA,eAAA;ADMF;;ACHA;EACE,uBAAA;ADMF;;ACHA;EACE,iCAAA;EACA,gBAAA;ADMF;;ACHA;EACE,uCAAA;ADMF;;ACHA;EACE,mBAAA;ADMF;;ACHA,iBAAA;AACA;;EAEE,mBAAA;EACA,qBAAA;EACA,cAAA;ADMF;;ACHA;;EAEE,mBAAA;EACA,qBAAA;EACA,cAAA;ADMF;;ACHA;EACE,yBAAA;EACA,qBAAA;EACA,cAAA;ADMF;;ACHA,eAAA;AACA;EACE,cAAA;ADMF;;ACHA;EACE,cAAA;ADMF;;ACHA;EACE,cAAA;ADMF;;ACHA;EACE,cAAA;ADMF;;ACHA;EACE,cAAA;ADMF;;ACHA;EACE,cAAA;ADMF;;ACHA;EACE,cAAA;ADMF;;ACHA,UAAA;AACA;EACE,kBAAA;ADMF;;ACHA;EACE,YAAA;EACA,aAAA;ADMF;;ACHA;EACE,kBAAA;EACA,QAAA;EACA,+BAAA;EACA,YAAA;EACA,aAAA;EACA,kBAAA;EACA,wBAAA;EACA,gBAAA;ADMF;;ACHA,UAAA;AACA;EACE,YAAA;EACA,sBAAA;EACA,8BAAA;ADMF;;ACHA,cAAA;AACA;EACE,iBAAA;ADMF;;ACHA,WAAA;AACA;EACE,yDAAA;ADMF;;ACJA;EACC,mBAAA;EACA,kBAAA;EACA,kBAAA;ADOD;ACNC;EACC,eAAA;ADQF;;ACLA;EACE,YAAA;EACA,oBAAA;ADQF;;ACNA;EACE,kBAAA;ADSF","file":"ruoyi.css"}
|
||||
|
|
@ -1,2 +1,2 @@
|
|||
.pt5{padding-top:5px}.pr5{padding-right:5px}.pb5{padding-bottom:5px}.mt5{margin-top:5px}.mr5{margin-right:5px}.mb5{margin-bottom:5px}.mb8{margin-bottom:8px}.ml5{margin-left:5px}.mt10{margin-top:10px}.mr10{margin-right:10px}.mb10{margin-bottom:10px}.ml10{margin-left:10px}.mt20{margin-top:20px}.mr20{margin-right:20px}.mb20{margin-bottom:20px}.ml20{margin-left:20px}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.el-form .el-form-item__label{font-weight:700}.el-dialog:not(.is-fullscreen){margin-top:6vh !important}.el-dialog.is-align-center{margin:auto !important}.el-dialog.scrollbar .el-dialog__body{overflow:auto;overflow-x:hidden;max-height:70vh;padding:10px 20px 0}.el-table .el-table__header-wrapper th,.el-table .el-table__fixed-header-wrapper th{word-break:break-word;background-color:#f8f8f9 !important;color:#515a6e;height:40px !important;font-size:13px}.el-table .el-table__body-wrapper .el-button [class*=el-icon-]+span{margin-left:1px}.form-header{font-size:15px;color:#6379bb;border-bottom:1px solid #ddd;margin:8px 10px 25px 10px;padding-bottom:5px}.pagination-container{display:flex;justify-content:flex-end;margin-top:20px;background-color:rgba(0,0,0,0) !important}.el-dialog .pagination-container{position:static !important;margin:10px 0 0 0;padding:0 !important}.el-dialog .pagination-container .el-pagination{position:static}@media(max-width: 768px){.pagination-container .el-pagination>.el-pagination__jump{display:none !important}.pagination-container .el-pagination>.el-pagination__sizes{display:none !important}}.tree-border{margin-top:5px;border:1px solid var(--el-border-color-light, #e5e6e7);background:var(--el-bg-color, #FFFFFF) none;border-radius:4px;width:100%}.el-table .fixed-width .el-button--small{padding-left:0;padding-right:0;width:inherit}.el-table .el-dropdown-link{cursor:pointer;color:#409eff;margin-left:10px}.el-table .el-dropdown,.el-icon-arrow-down{font-size:12px}.el-tree-node__content>.el-checkbox{margin-right:8px}.list-group-striped>.list-group-item{border-left:0;border-right:0;border-radius:0;padding-left:0;padding-right:0}.list-group{padding-left:0px;list-style:none}.list-group-item{border-bottom:1px solid #e7eaec;border-top:1px solid #e7eaec;margin-bottom:-1px;padding:11px 0px;font-size:13px}.pull-right{float:right !important}.el-card__header{padding:14px 15px 7px !important;min-height:40px}.el-card__body{padding:15px 20px 20px 20px !important}.card-box{margin-bottom:10px}.el-button--cyan.is-active,.el-button--cyan:active{background:#20b2aa;border-color:#20b2aa;color:#fff}.el-button--cyan:focus,.el-button--cyan:hover{background:#48d1cc;border-color:#48d1cc;color:#fff}.el-button--cyan{background-color:#20b2aa;border-color:#20b2aa;color:#fff}.text-navy{color:#1ab394}.text-primary{color:inherit}.text-success{color:#1c84c6}.text-info{color:#23c6c8}.text-warning{color:#f8ac59}.text-danger{color:#ed5565}.text-muted{color:#888}.img-circle{border-radius:50%}.img-lg{width:120px;height:120px}.avatar-upload-preview{position:absolute;top:50%;transform:translate(50%, -50%);width:200px;height:200px;border-radius:50%;box-shadow:0 0 4px #ccc;overflow:hidden}.sortable-ghost{opacity:.8;color:#fff !important;background:#42b983 !important}.top-right-btn{margin-left:auto}.splitpanes.default-theme .splitpanes__pane{background-color:var(--splitpanes-default-bg) !important}
|
||||
.pt5{padding-top:5px}.pr5{padding-right:5px}.pb5{padding-bottom:5px}.mt5{margin-top:5px}.mr5{margin-right:5px}.mb5{margin-bottom:5px}.mb8{margin-bottom:8px}.ml5{margin-left:5px}.mt10{margin-top:10px}.mr10{margin-right:10px}.mb10{margin-bottom:10px}.ml10{margin-left:10px}.mt20{margin-top:20px}.mr20{margin-right:20px}.mb20{margin-bottom:20px}.ml20{margin-left:20px}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.el-form .el-form-item__label{font-weight:700}.el-dialog:not(.is-fullscreen){margin-top:6vh !important}.el-dialog.is-align-center{margin:auto !important}.el-dialog.scrollbar .el-dialog__body{overflow:auto;overflow-x:hidden;max-height:70vh;padding:10px 20px 0}.el-table .el-table__header-wrapper th,.el-table .el-table__fixed-header-wrapper th{word-break:break-word;background-color:#f8f8f9 !important;color:#515a6e;height:40px !important;font-size:13px}.el-table .el-table__body-wrapper .el-button [class*=el-icon-]+span{margin-left:1px}.form-header{font-size:15px;color:#6379bb;border-bottom:1px solid #ddd;margin:8px 10px 25px 10px;padding-bottom:5px}.pagination-container{display:flex;justify-content:flex-end;margin-top:20px;background-color:rgba(0,0,0,0) !important}.el-dialog .pagination-container{position:static !important;margin:10px 0 0 0;padding:0 !important}.el-dialog .pagination-container .el-pagination{position:static}@media(max-width: 768px){.pagination-container .el-pagination>.el-pagination__jump{display:none !important}.pagination-container .el-pagination>.el-pagination__sizes{display:none !important}}.tree-border{margin-top:5px;border:1px solid var(--el-border-color-light, #e5e6e7);background:var(--el-bg-color, #FFFFFF) none;border-radius:4px;width:100%}.el-table .fixed-width .el-button--small{padding-left:0;padding-right:0;width:inherit}.el-table .el-dropdown-link{cursor:pointer;color:#409eff;margin-left:10px}.el-table .el-dropdown,.el-icon-arrow-down{font-size:12px}.el-tree-node__content>.el-checkbox{margin-right:8px}.list-group-striped>.list-group-item{border-left:0;border-right:0;border-radius:0;padding-left:0;padding-right:0}.list-group{padding-left:0px;list-style:none}.list-group-item{border-bottom:1px solid #e7eaec;border-top:1px solid #e7eaec;margin-bottom:-1px;padding:11px 0px;font-size:13px}.pull-right{float:right !important}.el-card__header{padding:14px 15px 7px !important;min-height:40px}.el-card__body{padding:15px 20px 20px 20px !important}.card-box{margin-bottom:10px}.el-button--cyan.is-active,.el-button--cyan:active{background:#20b2aa;border-color:#20b2aa;color:#fff}.el-button--cyan:focus,.el-button--cyan:hover{background:#48d1cc;border-color:#48d1cc;color:#fff}.el-button--cyan{background-color:#20b2aa;border-color:#20b2aa;color:#fff}.text-navy{color:#1ab394}.text-primary{color:inherit}.text-success{color:#1c84c6}.text-info{color:#23c6c8}.text-warning{color:#f8ac59}.text-danger{color:#ed5565}.text-muted{color:#888}.img-circle{border-radius:50%}.img-lg{width:120px;height:120px}.avatar-upload-preview{position:absolute;top:50%;transform:translate(50%, -50%);width:200px;height:200px;border-radius:50%;box-shadow:0 0 4px #ccc;overflow:hidden}.sortable-ghost{opacity:.8;color:#fff !important;background:#42b983 !important}.top-right-btn{margin-left:auto}.splitpanes.default-theme .splitpanes__pane{background-color:var(--splitpanes-default-bg) !important}.el-dialog__header{background:#f6f6f6;padding:10px 15px;border-radius:5px}.el-dialog__header .el-dialog__title{font-size:16px}.el-dialog{padding:0px;padding-bottom:15px}.el-dialog__body{padding:15px 25px}
|
||||
/*# sourceMappingURL=ruoyi.min.css.map */
|
||||
|
|
@ -1 +1 @@
|
|||
{"version":3,"sources":["ruoyi.scss"],"names":[],"mappings":"AAMA,KACE,eAAA,CAEF,KACE,iBAAA,CAEF,KACE,kBAAA,CAEF,KACE,cAAA,CAEF,KACE,gBAAA,CAEF,KACE,iBAAA,CAEF,KACE,iBAAA,CAEF,KACE,eAAA,CAEF,MACE,eAAA,CAEF,MACE,iBAAA,CAEF,MACE,kBAAA,CAEF,MACE,gBAAA,CAEF,MACE,eAAA,CAEF,MACE,iBAAA,CAEF,MACE,kBAAA,CAEF,MACE,gBAAA,CAGF,0CACE,mBAAA,CACA,eAAA,CACA,eAAA,CACA,aAAA,CAGF,8BACE,eAAA,CAEF,+BACE,yBAAA,CAEF,2BACE,sBAAA,CAGF,sCACE,aAAA,CACA,iBAAA,CACA,eAAA,CACA,mBAAA,CAKE,oFACE,qBAAA,CACA,mCAAA,CACA,aAAA,CACA,sBAAA,CACA,cAAA,CAIF,oEACE,eAAA,CAMN,aACE,cAAA,CACA,aAAA,CACA,4BAAA,CACA,yBAAA,CACA,kBAAA,CAIF,sBACE,YAAA,CACA,wBAAA,CACA,eAAA,CACA,yCAAA,CAIF,iCACE,0BAAA,CACA,iBAAA,CACA,oBAAA,CAEA,gDACE,eAAA,CAKJ,yBAGM,0DACE,uBAAA,CAEF,2DACE,uBAAA,CAAA,CAOR,aACE,cAAA,CACA,sDAAA,CACA,2CAAA,CACA,iBAAA,CACA,UAAA,CAGF,yCACE,cAAA,CACA,eAAA,CACA,aAAA,CAIF,4BACE,cAAA,CACA,aAAA,CACA,gBAAA,CAGF,2CACE,cAAA,CAGF,oCACE,gBAAA,CAGF,qCACE,aAAA,CACA,cAAA,CACA,eAAA,CACA,cAAA,CACA,eAAA,CAGF,YACE,gBAAA,CACA,eAAA,CAGF,iBACE,+BAAA,CACA,4BAAA,CACA,kBAAA,CACA,gBAAA,CACA,cAAA,CAGF,YACE,sBAAA,CAGF,iBACE,gCAAA,CACA,eAAA,CAGF,eACE,sCAAA,CAGF,UACE,kBAAA,CAIF,mDAEE,kBAAA,CACA,oBAAA,CACA,UAAA,CAGF,8CAEE,kBAAA,CACA,oBAAA,CACA,UAAA,CAGF,iBACE,wBAAA,CACA,oBAAA,CACA,UAAA,CAIF,WACE,aAAA,CAGF,cACE,aAAA,CAGF,cACE,aAAA,CAGF,WACE,aAAA,CAGF,cACE,aAAA,CAGF,aACE,aAAA,CAGF,YACE,UAAA,CAIF,YACE,iBAAA,CAGF,QACE,WAAA,CACA,YAAA,CAGF,uBACE,iBAAA,CACA,OAAA,CACA,8BAAA,CACA,WAAA,CACA,YAAA,CACA,iBAAA,CACA,uBAAA,CACA,eAAA,CAIF,gBACE,UAAA,CACA,qBAAA,CACA,6BAAA,CAIF,eACE,gBAAA,CAIF,4CACE,wDAAA","file":"ruoyi.min.css"}
|
||||
{"version":3,"sources":["ruoyi.scss"],"names":[],"mappings":"AAMA,KACE,eAAA,CAEF,KACE,iBAAA,CAEF,KACE,kBAAA,CAEF,KACE,cAAA,CAEF,KACE,gBAAA,CAEF,KACE,iBAAA,CAEF,KACE,iBAAA,CAEF,KACE,eAAA,CAEF,MACE,eAAA,CAEF,MACE,iBAAA,CAEF,MACE,kBAAA,CAEF,MACE,gBAAA,CAEF,MACE,eAAA,CAEF,MACE,iBAAA,CAEF,MACE,kBAAA,CAEF,MACE,gBAAA,CAGF,0CACE,mBAAA,CACA,eAAA,CACA,eAAA,CACA,aAAA,CAGF,8BACE,eAAA,CAEF,+BACE,yBAAA,CAEF,2BACE,sBAAA,CAGF,sCACE,aAAA,CACA,iBAAA,CACA,eAAA,CACA,mBAAA,CAKE,oFACE,qBAAA,CACA,mCAAA,CACA,aAAA,CACA,sBAAA,CACA,cAAA,CAIF,oEACE,eAAA,CAMN,aACE,cAAA,CACA,aAAA,CACA,4BAAA,CACA,yBAAA,CACA,kBAAA,CAIF,sBACE,YAAA,CACA,wBAAA,CACA,eAAA,CACA,yCAAA,CAIF,iCACE,0BAAA,CACA,iBAAA,CACA,oBAAA,CAEA,gDACE,eAAA,CAKJ,yBAGM,0DACE,uBAAA,CAEF,2DACE,uBAAA,CAAA,CAOR,aACE,cAAA,CACA,sDAAA,CACA,2CAAA,CACA,iBAAA,CACA,UAAA,CAGF,yCACE,cAAA,CACA,eAAA,CACA,aAAA,CAIF,4BACE,cAAA,CACA,aAAA,CACA,gBAAA,CAGF,2CACE,cAAA,CAGF,oCACE,gBAAA,CAGF,qCACE,aAAA,CACA,cAAA,CACA,eAAA,CACA,cAAA,CACA,eAAA,CAGF,YACE,gBAAA,CACA,eAAA,CAGF,iBACE,+BAAA,CACA,4BAAA,CACA,kBAAA,CACA,gBAAA,CACA,cAAA,CAGF,YACE,sBAAA,CAGF,iBACE,gCAAA,CACA,eAAA,CAGF,eACE,sCAAA,CAGF,UACE,kBAAA,CAIF,mDAEE,kBAAA,CACA,oBAAA,CACA,UAAA,CAGF,8CAEE,kBAAA,CACA,oBAAA,CACA,UAAA,CAGF,iBACE,wBAAA,CACA,oBAAA,CACA,UAAA,CAIF,WACE,aAAA,CAGF,cACE,aAAA,CAGF,cACE,aAAA,CAGF,WACE,aAAA,CAGF,cACE,aAAA,CAGF,aACE,aAAA,CAGF,YACE,UAAA,CAIF,YACE,iBAAA,CAGF,QACE,WAAA,CACA,YAAA,CAGF,uBACE,iBAAA,CACA,OAAA,CACA,8BAAA,CACA,WAAA,CACA,YAAA,CACA,iBAAA,CACA,uBAAA,CACA,eAAA,CAIF,gBACE,UAAA,CACA,qBAAA,CACA,6BAAA,CAIF,eACE,gBAAA,CAIF,4CACE,wDAAA,CAEF,mBACC,kBAAA,CACA,iBAAA,CACA,iBAAA,CACA,qCACC,cAAA,CAGF,WACE,WAAA,CACA,mBAAA,CAEF,iBACE,iBAAA","file":"ruoyi.min.css"}
|
||||
|
|
@ -291,3 +291,18 @@
|
|||
.splitpanes.default-theme .splitpanes__pane {
|
||||
background-color: var(--splitpanes-default-bg) !important;
|
||||
}
|
||||
.el-dialog__header{
|
||||
background: #F6F6F6;
|
||||
padding:10px 15px;
|
||||
border-radius: 5px;
|
||||
.el-dialog__title{
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
.el-dialog{
|
||||
padding: 0px;
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
.el-dialog__body{
|
||||
padding: 15px 25px;
|
||||
}
|
||||
|
|
@ -0,0 +1,299 @@
|
|||
@charset "UTF-8";
|
||||
:export {
|
||||
menuText: #bfcbd9;
|
||||
menuActiveText: #409eff;
|
||||
menuBg: #222653;
|
||||
menuHover: #222653;
|
||||
menuLightBg: #ffffff;
|
||||
menuLightHover: #f0f1f5;
|
||||
menuLightText: #303133;
|
||||
menuLightActiveText: #409EFF;
|
||||
sideBarWidth: 200px;
|
||||
blue: #324157;
|
||||
lightBlue: #333c46;
|
||||
red: #C03639;
|
||||
pink: #E65D6E;
|
||||
green: #30B08F;
|
||||
tiffany: #4AB7BD;
|
||||
yellow: #FEC171;
|
||||
panGreen: #30B08F;
|
||||
colorPrimary: #409EFF;
|
||||
colorSuccess: #67C23A;
|
||||
colorWarning: #E6A23C;
|
||||
colorDanger: #F56C6C;
|
||||
colorInfo: #909399;
|
||||
}
|
||||
|
||||
:root {
|
||||
/* 亮色模式变量 */
|
||||
--sidebar-bg: #222653;
|
||||
--sidebar-text: #bfcbd9;
|
||||
--menu-hover: #222653;
|
||||
--navbar-bg: #ffffff;
|
||||
--navbar-text: #303133;
|
||||
/* splitpanes default-theme 变量 */
|
||||
--splitpanes-default-bg: #ffffff;
|
||||
}
|
||||
|
||||
html.dark {
|
||||
/* 默认通用 */
|
||||
--el-bg-color: #141414;
|
||||
--el-bg-color-overlay: #1d1e1f;
|
||||
--el-text-color-primary: #ffffff;
|
||||
--el-text-color-regular: #d0d0d0;
|
||||
--el-border-color: #434343;
|
||||
--el-border-color-light: #434343;
|
||||
/* 侧边栏 */
|
||||
--sidebar-bg: #141414;
|
||||
--sidebar-text: #ffffff;
|
||||
--menu-hover: #2d2d2d;
|
||||
--menu-active-text: #409eff;
|
||||
/* 顶部导航栏 */
|
||||
--navbar-bg: #141414;
|
||||
--navbar-text: #ffffff;
|
||||
--navbar-hover: #141414;
|
||||
/* 标签栏 */
|
||||
--tags-bg: #141414;
|
||||
--tags-item-bg: #1d1e1f;
|
||||
--tags-item-border: #303030;
|
||||
--tags-item-text: #d0d0d0;
|
||||
--tags-item-hover: #2d2d2d;
|
||||
--tags-close-hover: #64666a;
|
||||
/* splitpanes 组件暗黑模式变量 */
|
||||
--splitpanes-bg: #141414;
|
||||
--splitpanes-border: #303030;
|
||||
--splitpanes-splitter-bg: #1d1e1f;
|
||||
--splitpanes-splitter-hover-bg: #2d2d2d;
|
||||
/* blockquote 暗黑模式变量 */
|
||||
--blockquote-bg: #1d1e1f;
|
||||
--blockquote-border: #303030;
|
||||
--blockquote-text: #d0d0d0;
|
||||
/* Cron 时间表达式 模式变量 */
|
||||
--cron-border: #303030;
|
||||
/* splitpanes default-theme 暗黑模式变量 */
|
||||
--splitpanes-default-bg: #141414;
|
||||
/* 侧边栏菜单覆盖 */
|
||||
/* 顶部栏栏菜单覆盖 */
|
||||
/* 分割窗格覆盖 */
|
||||
/* 表格样式覆盖 */
|
||||
/* 树组件高亮样式覆盖 */
|
||||
/* 下拉菜单样式覆盖 */
|
||||
/* blockquote样式覆盖 */
|
||||
/* 时间表达式标题样式覆盖 */
|
||||
}
|
||||
html.dark .sidebar-container .el-menu-item, html.dark .sidebar-container .menu-title {
|
||||
color: var(--el-text-color-regular);
|
||||
}
|
||||
html.dark .sidebar-container .theme-dark .nest-menu .el-sub-menu > .el-sub-menu__title, html.dark .sidebar-container .theme-dark .el-sub-menu .el-menu-item {
|
||||
background-color: var(--el-bg-color) !important;
|
||||
}
|
||||
html.dark .el-menu--horizontal .el-menu-item:not(.is-disabled):hover, html.dark .el-menu--horizontal .el-menu-item:not(.is-disabled):focus {
|
||||
background-color: var(--navbar-hover) !important;
|
||||
}
|
||||
html.dark .splitpanes {
|
||||
background-color: var(--splitpanes-bg);
|
||||
}
|
||||
html.dark .splitpanes .splitpanes__pane {
|
||||
background-color: var(--splitpanes-bg);
|
||||
border-color: var(--splitpanes-border);
|
||||
}
|
||||
html.dark .splitpanes .splitpanes__splitter {
|
||||
background-color: var(--splitpanes-splitter-bg);
|
||||
border-color: var(--splitpanes-border);
|
||||
}
|
||||
html.dark .splitpanes .splitpanes__splitter:hover {
|
||||
background-color: var(--splitpanes-splitter-hover-bg);
|
||||
}
|
||||
html.dark .splitpanes .splitpanes__splitter:before, html.dark .splitpanes .splitpanes__splitter:after {
|
||||
background-color: var(--splitpanes-border);
|
||||
}
|
||||
html.dark .el-table {
|
||||
--el-table-header-bg-color: var(--el-bg-color-overlay) !important;
|
||||
--el-table-header-text-color: var(--el-text-color-regular) !important;
|
||||
--el-table-border-color: var(--el-border-color-light) !important;
|
||||
--el-table-row-hover-bg-color: var(--el-bg-color-overlay) !important;
|
||||
}
|
||||
html.dark .el-table .el-table__header-wrapper th, html.dark .el-table .el-table__fixed-header-wrapper th {
|
||||
background-color: var(--el-bg-color-overlay, #f8f8f9) !important;
|
||||
color: var(--el-text-color-regular, #515a6e);
|
||||
}
|
||||
html.dark .el-tree .el-tree-node.is-current > .el-tree-node__content {
|
||||
background-color: var(--el-bg-color-overlay) !important;
|
||||
color: var(--el-color-primary);
|
||||
}
|
||||
html.dark .el-tree .el-tree-node__content:hover {
|
||||
background-color: var(--el-bg-color-overlay);
|
||||
}
|
||||
html.dark .el-dropdown-menu__item:not(.is-disabled):focus, html.dark .el-dropdown-menu__item:not(.is-disabled):hover {
|
||||
background-color: var(--navbar-hover) !important;
|
||||
}
|
||||
html.dark blockquote {
|
||||
background-color: var(--blockquote-bg) !important;
|
||||
border-left-color: var(--blockquote-border) !important;
|
||||
color: var(--blockquote-text) !important;
|
||||
}
|
||||
html.dark .popup-result .title {
|
||||
background: var(--cron-border);
|
||||
}
|
||||
|
||||
#app .main-container {
|
||||
min-height: 100%;
|
||||
transition: margin-left 0.28s;
|
||||
margin-left: 200px;
|
||||
position: relative;
|
||||
}
|
||||
#app .sidebarHide {
|
||||
margin-left: 0 !important;
|
||||
}
|
||||
#app .sidebar-container {
|
||||
transition: width 0.28s;
|
||||
width: 200px !important;
|
||||
height: 100%;
|
||||
position: fixed;
|
||||
font-size: 0px;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
z-index: 1001;
|
||||
overflow: hidden;
|
||||
box-shadow: 0px 0px 8px 0px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
#app .sidebar-container .horizontal-collapse-transition {
|
||||
transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out;
|
||||
}
|
||||
#app .sidebar-container .scrollbar-wrapper {
|
||||
overflow-x: hidden !important;
|
||||
}
|
||||
#app .sidebar-container .el-scrollbar__bar.is-vertical {
|
||||
right: 0px;
|
||||
}
|
||||
#app .sidebar-container .el-scrollbar {
|
||||
height: 100%;
|
||||
}
|
||||
#app .sidebar-container.has-logo .el-scrollbar {
|
||||
height: calc(100% - 50px);
|
||||
}
|
||||
#app .sidebar-container .is-horizontal {
|
||||
display: none;
|
||||
}
|
||||
#app .sidebar-container a {
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
#app .sidebar-container .svg-icon {
|
||||
margin-right: 16px;
|
||||
}
|
||||
#app .sidebar-container .el-menu {
|
||||
border: none;
|
||||
height: 100%;
|
||||
width: 100% !important;
|
||||
}
|
||||
#app .sidebar-container .el-menu-item, #app .sidebar-container .menu-title {
|
||||
overflow: hidden !important;
|
||||
text-overflow: ellipsis !important;
|
||||
white-space: nowrap !important;
|
||||
}
|
||||
#app .sidebar-container .el-menu-item .el-menu-tooltip__trigger {
|
||||
display: inline-block !important;
|
||||
}
|
||||
#app .sidebar-container .sub-menu-title-noDropdown:hover,
|
||||
#app .sidebar-container .el-sub-menu__title:hover {
|
||||
background-color: rgba(0, 0, 0, 0.06) !important;
|
||||
}
|
||||
#app .sidebar-container .theme-dark .is-active > .el-sub-menu__title {
|
||||
color: #f4f4f5 !important;
|
||||
}
|
||||
#app .sidebar-container .nest-menu .el-sub-menu > .el-sub-menu__title, #app .sidebar-container .el-sub-menu .el-menu-item {
|
||||
min-width: 200px !important;
|
||||
}
|
||||
#app .sidebar-container .nest-menu .el-sub-menu > .el-sub-menu__title:hover, #app .sidebar-container .el-sub-menu .el-menu-item:hover {
|
||||
background-color: rgba(0, 0, 0, 0.06) !important;
|
||||
}
|
||||
#app .sidebar-container .theme-dark .nest-menu .el-sub-menu > .el-sub-menu__title, #app .sidebar-container .theme-dark .el-sub-menu .el-menu-item {
|
||||
background-color: #222653;
|
||||
}
|
||||
#app .sidebar-container .theme-dark .nest-menu .el-sub-menu > .el-sub-menu__title:hover, #app .sidebar-container .theme-dark .el-sub-menu .el-menu-item:hover {
|
||||
background-color: #222653 !important;
|
||||
}
|
||||
#app .hideSidebar .sidebar-container {
|
||||
width: 54px !important;
|
||||
}
|
||||
#app .hideSidebar .main-container {
|
||||
margin-left: 54px;
|
||||
}
|
||||
#app .hideSidebar .sub-menu-title-noDropdown {
|
||||
padding: 0 !important;
|
||||
position: relative;
|
||||
}
|
||||
#app .hideSidebar .sub-menu-title-noDropdown .el-tooltip {
|
||||
padding: 0 !important;
|
||||
}
|
||||
#app .hideSidebar .sub-menu-title-noDropdown .el-tooltip .svg-icon {
|
||||
margin-left: 20px;
|
||||
}
|
||||
#app .hideSidebar .el-sub-menu {
|
||||
overflow: hidden;
|
||||
}
|
||||
#app .hideSidebar .el-sub-menu > .el-sub-menu__title {
|
||||
padding: 0 !important;
|
||||
}
|
||||
#app .hideSidebar .el-sub-menu > .el-sub-menu__title .svg-icon {
|
||||
margin-left: 20px;
|
||||
}
|
||||
#app .hideSidebar .el-menu--collapse .el-sub-menu > .el-sub-menu__title > span {
|
||||
height: 0;
|
||||
width: 0;
|
||||
overflow: hidden;
|
||||
visibility: hidden;
|
||||
display: inline-block;
|
||||
}
|
||||
#app .hideSidebar .el-menu--collapse .el-sub-menu > .el-sub-menu__title > i {
|
||||
height: 0;
|
||||
width: 0;
|
||||
overflow: hidden;
|
||||
visibility: hidden;
|
||||
display: inline-block;
|
||||
}
|
||||
#app .el-menu--collapse .el-menu .el-sub-menu {
|
||||
min-width: 200px !important;
|
||||
}
|
||||
#app .mobile .main-container {
|
||||
margin-left: 0px;
|
||||
}
|
||||
#app .mobile .sidebar-container {
|
||||
transition: transform 0.28s;
|
||||
width: 200px !important;
|
||||
}
|
||||
#app .mobile.hideSidebar .sidebar-container {
|
||||
pointer-events: none;
|
||||
transition-duration: 0.3s;
|
||||
transform: translate3d(-200px, 0, 0);
|
||||
}
|
||||
#app .withoutAnimation .main-container,
|
||||
#app .withoutAnimation .sidebar-container {
|
||||
transition: none;
|
||||
}
|
||||
|
||||
.el-menu--vertical > .el-menu .svg-icon {
|
||||
margin-right: 16px;
|
||||
}
|
||||
.el-menu--vertical .nest-menu .el-sub-menu > .el-sub-menu__title:hover,
|
||||
.el-menu--vertical .el-menu-item:hover {
|
||||
background-color: rgba(0, 0, 0, 0.06) !important;
|
||||
}
|
||||
.el-menu--vertical > .el-menu--popup {
|
||||
max-height: 100vh;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.el-menu--vertical > .el-menu--popup::-webkit-scrollbar-track-piece {
|
||||
background: #d3dce6;
|
||||
}
|
||||
.el-menu--vertical > .el-menu--popup::-webkit-scrollbar {
|
||||
width: 6px;
|
||||
}
|
||||
.el-menu--vertical > .el-menu--popup::-webkit-scrollbar-thumb {
|
||||
background: #99a9bf;
|
||||
border-radius: 20px;
|
||||
}
|
||||
/*# sourceMappingURL=sidebar.css.map */
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"sources":["sidebar.css","variables.module.scss","sidebar.scss"],"names":[],"mappings":"AAAA,gBAAgB;ACwChB;EACE,iBA9BS;EA+BT,uBA9Be;EA+Bf,eA9BO;EA+BP,kBA9BU;EA+BV,oBA5BY;EA6BZ,uBA5Be;EA6Bf,sBA5Bc;EA6Bd,4BA5BoB;EA6BpB,mBAzBa;EA2Bb,aAlDK;EAmDL,kBAlDW;EAmDX,YAlDI;EAmDJ,aAlDK;EAmDL,cAlDM;EAmDN,gBAlDQ;EAmDR,eAlDO;EAmDP,iBAlDS;EAoDT,qBA1BgB;EA2BhB,qBA1BgB;EA2BhB,qBA1BgB;EA2BhB,oBA1Be;EA2Bf,kBA1Ba;ADdf;;AC4CA;EACE,WAAA;EACA,qBAAA;EACA,uBAAA;EACA,qBAAA;EAEA,oBAAA;EACA,sBAAA;EAEA,gCAAA;EACA,gCAAA;AD3CF;;ACgDA;EACE,SAAA;EACA,sBAAA;EACA,8BAAA;EACA,gCAAA;EACA,gCAAA;EACA,0BAAA;EACA,gCAAA;EAEA,QAAA;EACA,qBAAA;EACA,uBAAA;EACA,qBAAA;EACA,2BAAA;EAEA,UAAA;EACA,oBAAA;EACA,sBAAA;EACA,uBAAA;EAEA,QAAA;EACA,kBAAA;EACA,uBAAA;EACA,2BAAA;EACA,yBAAA;EACA,0BAAA;EACA,2BAAA;EAEA,wBAAA;EACA,wBAAA;EACA,4BAAA;EACA,iCAAA;EACA,uCAAA;EAEA,sBAAA;EACA,wBAAA;EACA,4BAAA;EACA,0BAAA;EAEA,oBAAA;EACA,sBAAA;EAEA,oCAAA;EACA,gCAAA;EAEA,YAAA;EAWA,aAAA;EAYA,WAAA;EAwBA,WAAA;EAeA,cAAA;EAYA,aAAA;EAKA,mBAAA;EAOA,gBAAA;ADpIF;ACgDI;EACE,mCAAA;AD9CN;ACgDI;EAEE,+CAAA;AD/CN;ACuDQ;EAEE,gDAAA;ADtDV;AC6DE;EACE,sCAAA;AD3DJ;AC6DI;EACE,sCAAA;EACA,sCAAA;AD3DN;AC8DI;EACE,+CAAA;EACA,sCAAA;AD5DN;AC8DM;EACE,qDAAA;AD5DR;AC+DM;EAEE,0CAAA;AD9DR;ACoEE;EACE,iEAAA;EACA,qEAAA;EACA,gEAAA;EACA,oEAAA;ADlEJ;ACqEM;EACE,gEAAA;EACA,4CAAA;ADnER;AC0EI;EACE,uDAAA;EACA,8BAAA;ADxEN;AC2EI;EACE,4CAAA;ADzEN;AC8EE;EACE,gDAAA;AD5EJ;ACgFE;EACE,iDAAA;EACA,sDAAA;EACA,wCAAA;AD9EJ;ACkFE;EACE,8BAAA;ADhFJ;;AEpIE;EACE,gBAAA;EACA,6BAAA;EACA,kBDgBiB;ECfjB,kBAAA;AFuIJ;AEpIE;EACE,yBAAA;AFsIJ;AEnIE;EACE,uBAAA;EACA,uBAAA;EACA,YAAA;EACA,eAAA;EACA,cAAA;EACA,MAAA;EACA,SAAA;EACA,OAAA;EACA,aAAA;EACA,gBAAA;EAEA,8CAAA;AFqIJ;AElII;EACE,2FAAA;AFoIN;AEjII;EACE,6BAAA;AFmIN;AEhII;EACE,UAAA;AFkIN;AE/HI;EACE,YAAA;AFiIN;AE7HM;EACE,yBAAA;AF+HR;AE3HI;EACE,aAAA;AF6HN;AE1HI;EACE,qBAAA;EACA,WAAA;EACA,gBAAA;AF4HN;AEzHI;EACE,kBAAA;AF2HN;AExHI;EACE,YAAA;EACA,YAAA;EACA,sBAAA;AF0HN;AEvHI;EACE,2BAAA;EACA,kCAAA;EACA,8BAAA;AFyHN;AEtHI;EACE,gCAAA;AFwHN;AElHM;;EACE,gDAAA;AFqHR;AEjHI;EACE,yBAAA;AFmHN;AEhHI;EAEE,2BAAA;AFiHN;AE/GM;EACE,gDAAA;AFiHR;AE7GI;EAEE,yBD3EqB;ADyL3B;AE5GM;EACE,oCAAA;AF8GR;AExGI;EACE,sBAAA;AF0GN;AEvGI;EACE,iBAAA;AFyGN;AEtGI;EACE,qBAAA;EACA,kBAAA;AFwGN;AEtGM;EACE,qBAAA;AFwGR;AEtGQ;EACE,iBAAA;AFwGV;AEnGI;EACE,gBAAA;AFqGN;AEnGM;EACE,qBAAA;AFqGR;AEnGQ;EACE,iBAAA;AFqGV;AE5FU;EACE,SAAA;EACA,QAAA;EACA,gBAAA;EACA,kBAAA;EACA,qBAAA;AF8FZ;AE5FU;EACE,SAAA;EACA,QAAA;EACA,gBAAA;EACA,kBAAA;EACA,qBAAA;AF8FZ;AEvFE;EACE,2BAAA;AFyFJ;AEpFI;EACE,gBAAA;AFsFN;AEnFI;EACE,2BAAA;EACA,uBAAA;AFqFN;AEjFM;EACE,oBAAA;EACA,yBAAA;EACA,oCAAA;AFmFR;AE5EI;;EAEE,gBAAA;AF8EN;;AEtEI;EACE,kBAAA;AFyEN;AEnEI;;EAEE,gDAAA;AFqEN;AEhEE;EACE,iBAAA;EACA,gBAAA;AFkEJ;AEhEI;EACE,mBAAA;AFkEN;AE/DI;EACE,UAAA;AFiEN;AE9DI;EACE,mBAAA;EACA,mBAAA;AFgEN","file":"sidebar.css"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"sources":["variables.module.scss","sidebar.scss"],"names":[],"mappings":"AAwCA,QACE,gBA9BS,CA+BT,sBA9Be,CA+Bf,cA9BO,CA+BP,iBA9BU,CA+BV,gBA5BY,CA6BZ,sBA5Be,CA6Bf,qBA5Bc,CA6Bd,2BA5BoB,CA6BpB,kBAzBa,CA2Bb,YAlDK,CAmDL,iBAlDW,CAmDX,WAlDI,CAmDJ,YAlDK,CAmDL,aAlDM,CAmDN,eAlDQ,CAmDR,cAlDO,CAmDP,gBAlDS,CAoDT,oBA1BgB,CA2BhB,oBA1BgB,CA2BhB,oBA1BgB,CA2BhB,mBA1Be,CA2Bf,iBA1Ba,CA8Bf,MAEE,qBAAA,CACA,uBAAA,CACA,qBAAA,CAEA,oBAAA,CACA,sBAAA,CAGA,gCAAA,CAKF,UAEE,sBAAA,CACA,8BAAA,CACA,gCAAA,CACA,gCAAA,CACA,0BAAA,CACA,gCAAA,CAGA,qBAAA,CACA,uBAAA,CACA,qBAAA,CACA,2BAAA,CAGA,oBAAA,CACA,sBAAA,CACA,uBAAA,CAGA,kBAAA,CACA,uBAAA,CACA,2BAAA,CACA,yBAAA,CACA,0BAAA,CACA,2BAAA,CAGA,wBAAA,CACA,4BAAA,CACA,iCAAA,CACA,uCAAA,CAGA,wBAAA,CACA,4BAAA,CACA,0BAAA,CAGA,sBAAA,CAGA,gCAAA,CAIE,oFACE,kCAAA,CAEF,yJAEE,8CAAA,CAQE,0IAEE,+CAAA,CAOR,sBACE,qCAAA,CAEA,wCACE,qCAAA,CACA,qCAAA,CAGF,4CACE,8CAAA,CACA,qCAAA,CAEA,kDACE,oDAAA,CAGF,qGAEE,yCAAA,CAMN,oBACE,iEAAA,CACA,qEAAA,CACA,gEAAA,CACA,oEAAA,CAGE,wGACE,+DAAA,CACA,2CAAA,CAOJ,mEACE,sDAAA,CACA,6BAAA,CAGF,gDACE,2CAAA,CAKJ,oHACE,+CAAA,CAIF,qBACE,gDAAA,CACA,qDAAA,CACA,uCAAA,CAIF,+BACE,6BAAA,CCpNF,qBACE,eAAA,CACA,2BAAA,CACA,iBDgBiB,CCfjB,iBAAA,CAGF,kBACE,wBAAA,CAGF,wBACE,qBAAA,CACA,sBAAA,CACA,WAAA,CACA,cAAA,CACA,aAAA,CACA,KAAA,CACA,QAAA,CACA,MAAA,CACA,YAAA,CACA,eAAA,CAEA,yCAAA,CAGA,wDACE,wFAAA,CAGF,2CACE,4BAAA,CAGF,uDACE,SAAA,CAGF,sCACE,WAAA,CAIA,+CACE,wBAAA,CAIJ,uCACE,YAAA,CAGF,0BACE,oBAAA,CACA,UAAA,CACA,eAAA,CAGF,kCACE,iBAAA,CAGF,iCACE,WAAA,CACA,WAAA,CACA,qBAAA,CAGF,0EACE,0BAAA,CACA,iCAAA,CACA,6BAAA,CAGF,gEACE,+BAAA,CAMA,2GACE,2CAAA,CAIJ,mEACE,wBAAA,CAGF,uHAEE,0BAAA,CAEA,mIACE,2CAAA,CAIJ,+IAEE,wBD3EqB,CC6ErB,2JACE,mCAAA,CAMJ,qCACE,qBAAA,CAGF,kCACE,gBAAA,CAGF,6CACE,oBAAA,CACA,iBAAA,CAEA,yDACE,oBAAA,CAEA,mEACE,gBAAA,CAKN,+BACE,eAAA,CAEA,mDACE,oBAAA,CAEA,6DACE,gBAAA,CASA,2EACE,QAAA,CACA,OAAA,CACA,eAAA,CACA,iBAAA,CACA,oBAAA,CAEF,wEACE,QAAA,CACA,OAAA,CACA,eAAA,CACA,iBAAA,CACA,oBAAA,CAOV,8CACE,0BAAA,CAKA,6BACE,eAAA,CAGF,gCACE,yBAAA,CACA,sBAAA,CAIA,4CACE,mBAAA,CACA,uBAAA,CACA,mCAAA,CAOJ,iFAEE,eAAA,CAQF,sCACE,iBAAA,CAMF,4GAEE,2CAAA,CAKJ,mCACE,gBAAA,CACA,eAAA,CAEA,kEACE,kBAAA,CAGF,sDACE,SAAA,CAGF,4DACE,kBAAA,CACA,kBAAA","file":"sidebar.min.css"}
|
||||
|
|
@ -0,0 +1,138 @@
|
|||
@charset "UTF-8";
|
||||
:export {
|
||||
menuText: #bfcbd9;
|
||||
menuActiveText: #409eff;
|
||||
menuBg: #222653;
|
||||
menuHover: #222653;
|
||||
menuLightBg: #ffffff;
|
||||
menuLightHover: #f0f1f5;
|
||||
menuLightText: #303133;
|
||||
menuLightActiveText: #409EFF;
|
||||
sideBarWidth: 200px;
|
||||
blue: #324157;
|
||||
lightBlue: #333c46;
|
||||
red: #C03639;
|
||||
pink: #E65D6E;
|
||||
green: #30B08F;
|
||||
tiffany: #4AB7BD;
|
||||
yellow: #FEC171;
|
||||
panGreen: #30B08F;
|
||||
colorPrimary: #409EFF;
|
||||
colorSuccess: #67C23A;
|
||||
colorWarning: #E6A23C;
|
||||
colorDanger: #F56C6C;
|
||||
colorInfo: #909399;
|
||||
}
|
||||
|
||||
:root {
|
||||
/* 亮色模式变量 */
|
||||
--sidebar-bg: #222653;
|
||||
--sidebar-text: #bfcbd9;
|
||||
--menu-hover: #222653;
|
||||
--navbar-bg: #ffffff;
|
||||
--navbar-text: #303133;
|
||||
/* splitpanes default-theme 变量 */
|
||||
--splitpanes-default-bg: #ffffff;
|
||||
}
|
||||
|
||||
html.dark {
|
||||
/* 默认通用 */
|
||||
--el-bg-color: #141414;
|
||||
--el-bg-color-overlay: #1d1e1f;
|
||||
--el-text-color-primary: #ffffff;
|
||||
--el-text-color-regular: #d0d0d0;
|
||||
--el-border-color: #434343;
|
||||
--el-border-color-light: #434343;
|
||||
/* 侧边栏 */
|
||||
--sidebar-bg: #141414;
|
||||
--sidebar-text: #ffffff;
|
||||
--menu-hover: #2d2d2d;
|
||||
--menu-active-text: #409eff;
|
||||
/* 顶部导航栏 */
|
||||
--navbar-bg: #141414;
|
||||
--navbar-text: #ffffff;
|
||||
--navbar-hover: #141414;
|
||||
/* 标签栏 */
|
||||
--tags-bg: #141414;
|
||||
--tags-item-bg: #1d1e1f;
|
||||
--tags-item-border: #303030;
|
||||
--tags-item-text: #d0d0d0;
|
||||
--tags-item-hover: #2d2d2d;
|
||||
--tags-close-hover: #64666a;
|
||||
/* splitpanes 组件暗黑模式变量 */
|
||||
--splitpanes-bg: #141414;
|
||||
--splitpanes-border: #303030;
|
||||
--splitpanes-splitter-bg: #1d1e1f;
|
||||
--splitpanes-splitter-hover-bg: #2d2d2d;
|
||||
/* blockquote 暗黑模式变量 */
|
||||
--blockquote-bg: #1d1e1f;
|
||||
--blockquote-border: #303030;
|
||||
--blockquote-text: #d0d0d0;
|
||||
/* Cron 时间表达式 模式变量 */
|
||||
--cron-border: #303030;
|
||||
/* splitpanes default-theme 暗黑模式变量 */
|
||||
--splitpanes-default-bg: #141414;
|
||||
/* 侧边栏菜单覆盖 */
|
||||
/* 顶部栏栏菜单覆盖 */
|
||||
/* 分割窗格覆盖 */
|
||||
/* 表格样式覆盖 */
|
||||
/* 树组件高亮样式覆盖 */
|
||||
/* 下拉菜单样式覆盖 */
|
||||
/* blockquote样式覆盖 */
|
||||
/* 时间表达式标题样式覆盖 */
|
||||
}
|
||||
html.dark .sidebar-container .el-menu-item, html.dark .sidebar-container .menu-title {
|
||||
color: var(--el-text-color-regular);
|
||||
}
|
||||
html.dark .sidebar-container .theme-dark .nest-menu .el-sub-menu > .el-sub-menu__title, html.dark .sidebar-container .theme-dark .el-sub-menu .el-menu-item {
|
||||
background-color: var(--el-bg-color) !important;
|
||||
}
|
||||
html.dark .el-menu--horizontal .el-menu-item:not(.is-disabled):hover, html.dark .el-menu--horizontal .el-menu-item:not(.is-disabled):focus {
|
||||
background-color: var(--navbar-hover) !important;
|
||||
}
|
||||
html.dark .splitpanes {
|
||||
background-color: var(--splitpanes-bg);
|
||||
}
|
||||
html.dark .splitpanes .splitpanes__pane {
|
||||
background-color: var(--splitpanes-bg);
|
||||
border-color: var(--splitpanes-border);
|
||||
}
|
||||
html.dark .splitpanes .splitpanes__splitter {
|
||||
background-color: var(--splitpanes-splitter-bg);
|
||||
border-color: var(--splitpanes-border);
|
||||
}
|
||||
html.dark .splitpanes .splitpanes__splitter:hover {
|
||||
background-color: var(--splitpanes-splitter-hover-bg);
|
||||
}
|
||||
html.dark .splitpanes .splitpanes__splitter:before, html.dark .splitpanes .splitpanes__splitter:after {
|
||||
background-color: var(--splitpanes-border);
|
||||
}
|
||||
html.dark .el-table {
|
||||
--el-table-header-bg-color: var(--el-bg-color-overlay) !important;
|
||||
--el-table-header-text-color: var(--el-text-color-regular) !important;
|
||||
--el-table-border-color: var(--el-border-color-light) !important;
|
||||
--el-table-row-hover-bg-color: var(--el-bg-color-overlay) !important;
|
||||
}
|
||||
html.dark .el-table .el-table__header-wrapper th, html.dark .el-table .el-table__fixed-header-wrapper th {
|
||||
background-color: var(--el-bg-color-overlay, #f8f8f9) !important;
|
||||
color: var(--el-text-color-regular, #515a6e);
|
||||
}
|
||||
html.dark .el-tree .el-tree-node.is-current > .el-tree-node__content {
|
||||
background-color: var(--el-bg-color-overlay) !important;
|
||||
color: var(--el-color-primary);
|
||||
}
|
||||
html.dark .el-tree .el-tree-node__content:hover {
|
||||
background-color: var(--el-bg-color-overlay);
|
||||
}
|
||||
html.dark .el-dropdown-menu__item:not(.is-disabled):focus, html.dark .el-dropdown-menu__item:not(.is-disabled):hover {
|
||||
background-color: var(--navbar-hover) !important;
|
||||
}
|
||||
html.dark blockquote {
|
||||
background-color: var(--blockquote-bg) !important;
|
||||
border-left-color: var(--blockquote-border) !important;
|
||||
color: var(--blockquote-text) !important;
|
||||
}
|
||||
html.dark .popup-result .title {
|
||||
background: var(--cron-border);
|
||||
}
|
||||
/*# sourceMappingURL=variables.module.css.map */
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"sources":["variables.module.css","variables.module.scss"],"names":[],"mappings":"AAAA,gBAAgB;ACwChB;EACE,iBA9BS;EA+BT,uBA9Be;EA+Bf,eA9BO;EA+BP,kBA9BU;EA+BV,oBA5BY;EA6BZ,uBA5Be;EA6Bf,sBA5Bc;EA6Bd,4BA5BoB;EA6BpB,mBAzBa;EA2Bb,aAlDK;EAmDL,kBAlDW;EAmDX,YAlDI;EAmDJ,aAlDK;EAmDL,cAlDM;EAmDN,gBAlDQ;EAmDR,eAlDO;EAmDP,iBAlDS;EAoDT,qBA1BgB;EA2BhB,qBA1BgB;EA2BhB,qBA1BgB;EA2BhB,oBA1Be;EA2Bf,kBA1Ba;ADdf;;AC4CA;EACE,WAAA;EACA,qBAAA;EACA,uBAAA;EACA,qBAAA;EAEA,oBAAA;EACA,sBAAA;EAEA,gCAAA;EACA,gCAAA;AD3CF;;ACgDA;EACE,SAAA;EACA,sBAAA;EACA,8BAAA;EACA,gCAAA;EACA,gCAAA;EACA,0BAAA;EACA,gCAAA;EAEA,QAAA;EACA,qBAAA;EACA,uBAAA;EACA,qBAAA;EACA,2BAAA;EAEA,UAAA;EACA,oBAAA;EACA,sBAAA;EACA,uBAAA;EAEA,QAAA;EACA,kBAAA;EACA,uBAAA;EACA,2BAAA;EACA,yBAAA;EACA,0BAAA;EACA,2BAAA;EAEA,wBAAA;EACA,wBAAA;EACA,4BAAA;EACA,iCAAA;EACA,uCAAA;EAEA,sBAAA;EACA,wBAAA;EACA,4BAAA;EACA,0BAAA;EAEA,oBAAA;EACA,sBAAA;EAEA,oCAAA;EACA,gCAAA;EAEA,YAAA;EAWA,aAAA;EAYA,WAAA;EAwBA,WAAA;EAeA,cAAA;EAYA,aAAA;EAKA,mBAAA;EAOA,gBAAA;ADpIF;ACgDI;EACE,mCAAA;AD9CN;ACgDI;EAEE,+CAAA;AD/CN;ACuDQ;EAEE,gDAAA;ADtDV;AC6DE;EACE,sCAAA;AD3DJ;AC6DI;EACE,sCAAA;EACA,sCAAA;AD3DN;AC8DI;EACE,+CAAA;EACA,sCAAA;AD5DN;AC8DM;EACE,qDAAA;AD5DR;AC+DM;EAEE,0CAAA;AD9DR;ACoEE;EACE,iEAAA;EACA,qEAAA;EACA,gEAAA;EACA,oEAAA;ADlEJ;ACqEM;EACE,gEAAA;EACA,4CAAA;ADnER;AC0EI;EACE,uDAAA;EACA,8BAAA;ADxEN;AC2EI;EACE,4CAAA;ADzEN;AC8EE;EACE,gDAAA;AD5EJ;ACgFE;EACE,iDAAA;EACA,sDAAA;EACA,wCAAA;AD9EJ;ACkFE;EACE,8BAAA;ADhFJ","file":"variables.module.css"}
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
:export{menuText:#bfcbd9;menuActiveText:#409eff;menuBg:#222653;menuHover:#222653;menuLightBg:#fff;menuLightHover:#f0f1f5;menuLightText:#303133;menuLightActiveText:#409eff;sideBarWidth:200px;blue:#324157;lightBlue:#333c46;red:#c03639;pink:#e65d6e;green:#30b08f;tiffany:#4ab7bd;yellow:#fec171;panGreen:#30b08f;colorPrimary:#409eff;colorSuccess:#67c23a;colorWarning:#e6a23c;colorDanger:#f56c6c;colorInfo:#909399}:root{--sidebar-bg: #222653;--sidebar-text: #bfcbd9;--menu-hover: #222653;--navbar-bg: #ffffff;--navbar-text: #303133;--splitpanes-default-bg: #ffffff}html.dark{--el-bg-color: #141414;--el-bg-color-overlay: #1d1e1f;--el-text-color-primary: #ffffff;--el-text-color-regular: #d0d0d0;--el-border-color: #434343;--el-border-color-light: #434343;--sidebar-bg: #141414;--sidebar-text: #ffffff;--menu-hover: #2d2d2d;--menu-active-text: #409eff;--navbar-bg: #141414;--navbar-text: #ffffff;--navbar-hover: #141414;--tags-bg: #141414;--tags-item-bg: #1d1e1f;--tags-item-border: #303030;--tags-item-text: #d0d0d0;--tags-item-hover: #2d2d2d;--tags-close-hover: #64666a;--splitpanes-bg: #141414;--splitpanes-border: #303030;--splitpanes-splitter-bg: #1d1e1f;--splitpanes-splitter-hover-bg: #2d2d2d;--blockquote-bg: #1d1e1f;--blockquote-border: #303030;--blockquote-text: #d0d0d0;--cron-border: #303030;--splitpanes-default-bg: #141414}html.dark .sidebar-container .el-menu-item,html.dark .sidebar-container .menu-title{color:var(--el-text-color-regular)}html.dark .sidebar-container .theme-dark .nest-menu .el-sub-menu>.el-sub-menu__title,html.dark .sidebar-container .theme-dark .el-sub-menu .el-menu-item{background-color:var(--el-bg-color) !important}html.dark .el-menu--horizontal .el-menu-item:not(.is-disabled):hover,html.dark .el-menu--horizontal .el-menu-item:not(.is-disabled):focus{background-color:var(--navbar-hover) !important}html.dark .splitpanes{background-color:var(--splitpanes-bg)}html.dark .splitpanes .splitpanes__pane{background-color:var(--splitpanes-bg);border-color:var(--splitpanes-border)}html.dark .splitpanes .splitpanes__splitter{background-color:var(--splitpanes-splitter-bg);border-color:var(--splitpanes-border)}html.dark .splitpanes .splitpanes__splitter:hover{background-color:var(--splitpanes-splitter-hover-bg)}html.dark .splitpanes .splitpanes__splitter:before,html.dark .splitpanes .splitpanes__splitter:after{background-color:var(--splitpanes-border)}html.dark .el-table{--el-table-header-bg-color: var(--el-bg-color-overlay) !important;--el-table-header-text-color: var(--el-text-color-regular) !important;--el-table-border-color: var(--el-border-color-light) !important;--el-table-row-hover-bg-color: var(--el-bg-color-overlay) !important}html.dark .el-table .el-table__header-wrapper th,html.dark .el-table .el-table__fixed-header-wrapper th{background-color:var(--el-bg-color-overlay, #f8f8f9) !important;color:var(--el-text-color-regular, #515a6e)}html.dark .el-tree .el-tree-node.is-current>.el-tree-node__content{background-color:var(--el-bg-color-overlay) !important;color:var(--el-color-primary)}html.dark .el-tree .el-tree-node__content:hover{background-color:var(--el-bg-color-overlay)}html.dark .el-dropdown-menu__item:not(.is-disabled):focus,html.dark .el-dropdown-menu__item:not(.is-disabled):hover{background-color:var(--navbar-hover) !important}html.dark blockquote{background-color:var(--blockquote-bg) !important;border-left-color:var(--blockquote-border) !important;color:var(--blockquote-text) !important}html.dark .popup-result .title{background:var(--cron-border)}
|
||||
/*# sourceMappingURL=variables.module.min.css.map */
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"sources":["variables.module.scss"],"names":[],"mappings":"AAwCA,QACE,gBA9BS,CA+BT,sBA9Be,CA+Bf,cA9BO,CA+BP,iBA9BU,CA+BV,gBA5BY,CA6BZ,sBA5Be,CA6Bf,qBA5Bc,CA6Bd,2BA5BoB,CA6BpB,kBAzBa,CA2Bb,YAlDK,CAmDL,iBAlDW,CAmDX,WAlDI,CAmDJ,YAlDK,CAmDL,aAlDM,CAmDN,eAlDQ,CAmDR,cAlDO,CAmDP,gBAlDS,CAoDT,oBA1BgB,CA2BhB,oBA1BgB,CA2BhB,oBA1BgB,CA2BhB,mBA1Be,CA2Bf,iBA1Ba,CA8Bf,MAEE,qBAAA,CACA,uBAAA,CACA,qBAAA,CAEA,oBAAA,CACA,sBAAA,CAGA,gCAAA,CAKF,UAEE,sBAAA,CACA,8BAAA,CACA,gCAAA,CACA,gCAAA,CACA,0BAAA,CACA,gCAAA,CAGA,qBAAA,CACA,uBAAA,CACA,qBAAA,CACA,2BAAA,CAGA,oBAAA,CACA,sBAAA,CACA,uBAAA,CAGA,kBAAA,CACA,uBAAA,CACA,2BAAA,CACA,yBAAA,CACA,0BAAA,CACA,2BAAA,CAGA,wBAAA,CACA,4BAAA,CACA,iCAAA,CACA,uCAAA,CAGA,wBAAA,CACA,4BAAA,CACA,0BAAA,CAGA,sBAAA,CAGA,gCAAA,CAIE,oFACE,kCAAA,CAEF,yJAEE,8CAAA,CAQE,0IAEE,+CAAA,CAOR,sBACE,qCAAA,CAEA,wCACE,qCAAA,CACA,qCAAA,CAGF,4CACE,8CAAA,CACA,qCAAA,CAEA,kDACE,oDAAA,CAGF,qGAEE,yCAAA,CAMN,oBACE,iEAAA,CACA,qEAAA,CACA,gEAAA,CACA,oEAAA,CAGE,wGACE,+DAAA,CACA,2CAAA,CAOJ,mEACE,sDAAA,CACA,6BAAA,CAGF,gDACE,2CAAA,CAKJ,oHACE,+CAAA,CAIF,qBACE,gDAAA,CACA,qDAAA,CACA,uCAAA,CAIF,+BACE,6BAAA","file":"variables.module.min.css"}
|
||||
|
|
@ -11,8 +11,8 @@ $panGreen: #30B08F;
|
|||
// 默认主题变量
|
||||
$menuText: #bfcbd9;
|
||||
$menuActiveText: #409eff;
|
||||
$menuBg: #304156;
|
||||
$menuHover: #263445;
|
||||
$menuBg: #222653;
|
||||
$menuHover: #222653;
|
||||
|
||||
// 浅色主题theme-light
|
||||
$menuLightBg: #ffffff;
|
||||
|
|
@ -27,9 +27,9 @@ $sideBarWidth: 200px;
|
|||
// 菜单暗色变量
|
||||
$base-menu-color: #bfcbd9;
|
||||
$base-menu-color-active: #f4f4f5;
|
||||
$base-menu-background: #304156;
|
||||
$base-sub-menu-background: #1f2d3d;
|
||||
$base-sub-menu-hover: #001528;
|
||||
$base-menu-background: #222653;
|
||||
$base-sub-menu-background: #222653;
|
||||
$base-sub-menu-hover: #222653;
|
||||
|
||||
// 组件变量
|
||||
$--color-primary: #409EFF;
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ function getBreadcrumb() {
|
|||
}
|
||||
// 判断是否为首页
|
||||
if (!isDashboard(matched[0])) {
|
||||
matched = [{ path: "/index", meta: { title: "首页" } }].concat(matched)
|
||||
// matched = [{ path: "/index", meta: { title: "首页" } }].concat(matched)
|
||||
}
|
||||
levelList.value = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,9 +2,18 @@
|
|||
<section class="app-main">
|
||||
<router-view v-slot="{ Component, route }">
|
||||
<transition name="fade-transform" mode="out-in">
|
||||
<keep-alive :include="tagsViewStore.cachedViews">
|
||||
<component v-if="!route.meta.link" :is="Component" :key="route.path"/>
|
||||
</keep-alive>
|
||||
<el-scrollbar height="calc(100vh - 50px)" >
|
||||
<keep-alive
|
||||
:include="tagsViewStore.cachedViews"
|
||||
class="appmancontainer"
|
||||
>
|
||||
<component
|
||||
v-if="!route.meta.link"
|
||||
:is="Component"
|
||||
:key="route.path"
|
||||
/>
|
||||
</keep-alive>
|
||||
</el-scrollbar>
|
||||
</transition>
|
||||
</router-view>
|
||||
<iframe-toggle />
|
||||
|
|
@ -13,24 +22,24 @@
|
|||
</template>
|
||||
|
||||
<script setup>
|
||||
import copyright from "./Copyright/index"
|
||||
import iframeToggle from "./IframeToggle/index"
|
||||
import useTagsViewStore from '@/store/modules/tagsView'
|
||||
import copyright from "./Copyright/index";
|
||||
import iframeToggle from "./IframeToggle/index";
|
||||
import useTagsViewStore from "@/store/modules/tagsView";
|
||||
|
||||
const route = useRoute()
|
||||
const tagsViewStore = useTagsViewStore()
|
||||
const route = useRoute();
|
||||
const tagsViewStore = useTagsViewStore();
|
||||
|
||||
onMounted(() => {
|
||||
addIframe()
|
||||
})
|
||||
addIframe();
|
||||
});
|
||||
|
||||
watchEffect(() => {
|
||||
addIframe()
|
||||
})
|
||||
addIframe();
|
||||
});
|
||||
|
||||
function addIframe() {
|
||||
if (route.meta.link) {
|
||||
useTagsViewStore().addIframeView(route)
|
||||
useTagsViewStore().addIframeView(route);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -38,12 +47,15 @@ function addIframe() {
|
|||
<style lang="scss" scoped>
|
||||
.app-main {
|
||||
/* 50= navbar 50 */
|
||||
min-height: calc(100vh - 50px);
|
||||
|
||||
width: 100%;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
}
|
||||
.appmancontainer {
|
||||
min-width: 1000px;
|
||||
}
|
||||
.app-main:has(.copyright) {
|
||||
padding-bottom: 36px;
|
||||
}
|
||||
|
|
@ -55,7 +67,7 @@ function addIframe() {
|
|||
.hasTagsView {
|
||||
.app-main {
|
||||
/* 84 = navbar + tags-view = 50 + 34 */
|
||||
min-height: calc(100vh - 84px);
|
||||
min-height: calc(100vh - 50px);
|
||||
}
|
||||
|
||||
.fixed-header + .app-main {
|
||||
|
|
@ -86,4 +98,3 @@ function addIframe() {
|
|||
border-radius: 3px;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,21 +1,46 @@
|
|||
<template>
|
||||
<div class="navbar">
|
||||
<hamburger id="hamburger-container" :is-active="appStore.sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" />
|
||||
<breadcrumb v-if="!settingsStore.topNav" id="breadcrumb-container" class="breadcrumb-container" />
|
||||
<top-nav v-if="settingsStore.topNav" id="topmenu-container" class="topmenu-container" />
|
||||
<hamburger
|
||||
id="hamburger-container"
|
||||
:is-active="appStore.sidebar.opened"
|
||||
class="hamburger-container"
|
||||
@toggleClick="toggleSideBar"
|
||||
/>
|
||||
<breadcrumb
|
||||
v-if="!settingsStore.topNav"
|
||||
id="breadcrumb-container"
|
||||
class="breadcrumb-container"
|
||||
/>
|
||||
<top-nav
|
||||
v-if="settingsStore.topNav"
|
||||
id="topmenu-container"
|
||||
class="topmenu-container"
|
||||
/>
|
||||
|
||||
<div class="right-menu">
|
||||
<template v-if="appStore.device !== 'mobile'">
|
||||
<header-search id="header-search" class="right-menu-item" />
|
||||
<div class="right">
|
||||
<div class="user">
|
||||
<div style="text-align: right;">
|
||||
|
||||
<span class="user-nickname"> {{ userStore.nickName }} </span>
|
||||
<span class="typename">{{ deptName }}</span>
|
||||
</div>
|
||||
<img :src="userStore.avatar" class="user-avatar" />
|
||||
</div>
|
||||
<div class="signOut" @click="logout">退出登录</div>
|
||||
</div>
|
||||
|
||||
<el-tooltip content="源码地址" effect="dark" placement="bottom">
|
||||
<!-- <template v-if="appStore.device !== 'mobile'"> -->
|
||||
<!-- <header-search id="header-search" class="right-menu-item" /> -->
|
||||
|
||||
<!-- <el-tooltip content="源码地址" effect="dark" placement="bottom">
|
||||
<ruo-yi-git id="ruoyi-git" class="right-menu-item hover-effect" />
|
||||
</el-tooltip>
|
||||
|
||||
<el-tooltip content="文档地址" effect="dark" placement="bottom">
|
||||
<ruo-yi-doc id="ruoyi-doc" class="right-menu-item hover-effect" />
|
||||
</el-tooltip>
|
||||
|
||||
</el-tooltip> -->
|
||||
<!--
|
||||
<screenfull id="screenfull" class="right-menu-item hover-effect" />
|
||||
|
||||
<el-tooltip content="主题模式" effect="dark" placement="bottom">
|
||||
|
|
@ -27,10 +52,14 @@
|
|||
|
||||
<el-tooltip content="布局大小" effect="dark" placement="bottom">
|
||||
<size-select id="size-select" class="right-menu-item hover-effect" />
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-tooltip> -->
|
||||
<!-- </template> -->
|
||||
|
||||
<el-dropdown @command="handleCommand" class="avatar-container right-menu-item hover-effect" trigger="hover">
|
||||
<!-- <el-dropdown
|
||||
@command="handleCommand"
|
||||
class="avatar-container right-menu-item hover-effect"
|
||||
trigger="hover"
|
||||
>
|
||||
<div class="avatar-wrapper">
|
||||
<img :src="userStore.avatar" class="user-avatar" />
|
||||
<span class="user-nickname"> {{ userStore.nickName }} </span>
|
||||
|
|
@ -46,71 +75,80 @@
|
|||
</el-dropdown-menu>
|
||||
</template>
|
||||
</el-dropdown>
|
||||
<div class="right-menu-item hover-effect setting" @click="setLayout" v-if="settingsStore.showSettings">
|
||||
<div
|
||||
class="right-menu-item hover-effect setting"
|
||||
@click="setLayout"
|
||||
v-if="settingsStore.showSettings"
|
||||
>
|
||||
<svg-icon icon-class="more-up" />
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ElMessageBox } from 'element-plus'
|
||||
import Breadcrumb from '@/components/Breadcrumb'
|
||||
import TopNav from '@/components/TopNav'
|
||||
import Hamburger from '@/components/Hamburger'
|
||||
import Screenfull from '@/components/Screenfull'
|
||||
import SizeSelect from '@/components/SizeSelect'
|
||||
import HeaderSearch from '@/components/HeaderSearch'
|
||||
import RuoYiGit from '@/components/RuoYi/Git'
|
||||
import RuoYiDoc from '@/components/RuoYi/Doc'
|
||||
import useAppStore from '@/store/modules/app'
|
||||
import useUserStore from '@/store/modules/user'
|
||||
import useSettingsStore from '@/store/modules/settings'
|
||||
|
||||
const appStore = useAppStore()
|
||||
const userStore = useUserStore()
|
||||
const settingsStore = useSettingsStore()
|
||||
import { ElMessageBox } from "element-plus";
|
||||
import Breadcrumb from "@/components/Breadcrumb";
|
||||
import TopNav from "@/components/TopNav";
|
||||
import Hamburger from "@/components/Hamburger";
|
||||
import Screenfull from "@/components/Screenfull";
|
||||
import SizeSelect from "@/components/SizeSelect";
|
||||
import HeaderSearch from "@/components/HeaderSearch";
|
||||
import RuoYiGit from "@/components/RuoYi/Git";
|
||||
import RuoYiDoc from "@/components/RuoYi/Doc";
|
||||
import useAppStore from "@/store/modules/app";
|
||||
import useUserStore from "@/store/modules/user";
|
||||
import useSettingsStore from "@/store/modules/settings";
|
||||
|
||||
const appStore = useAppStore();
|
||||
const userStore = useUserStore();
|
||||
const settingsStore = useSettingsStore();
|
||||
const deptName=ref("")
|
||||
userStore.getInfo().then(r=>{
|
||||
deptName.value=r.deptName;
|
||||
})
|
||||
function toggleSideBar() {
|
||||
appStore.toggleSideBar()
|
||||
appStore.toggleSideBar();
|
||||
}
|
||||
|
||||
function handleCommand(command) {
|
||||
switch (command) {
|
||||
case "setLayout":
|
||||
setLayout()
|
||||
break
|
||||
setLayout();
|
||||
break;
|
||||
case "logout":
|
||||
logout()
|
||||
break
|
||||
logout();
|
||||
break;
|
||||
default:
|
||||
break
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function logout() {
|
||||
ElMessageBox.confirm('确定注销并退出系统吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
userStore.logOut().then(() => {
|
||||
location.href = '/index'
|
||||
ElMessageBox.confirm("确定注销并退出系统吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
})
|
||||
.then(() => {
|
||||
userStore.logOut().then(() => {
|
||||
location.href = "/index";
|
||||
});
|
||||
})
|
||||
}).catch(() => { })
|
||||
.catch(() => {});
|
||||
}
|
||||
|
||||
const emits = defineEmits(['setLayout'])
|
||||
const emits = defineEmits(["setLayout"]);
|
||||
function setLayout() {
|
||||
emits('setLayout')
|
||||
emits("setLayout");
|
||||
}
|
||||
|
||||
function toggleTheme() {
|
||||
settingsStore.toggleTheme()
|
||||
settingsStore.toggleTheme();
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang='scss' scoped>
|
||||
<style lang="scss" scoped>
|
||||
.navbar {
|
||||
height: 50px;
|
||||
overflow: hidden;
|
||||
|
|
@ -144,11 +182,47 @@ function toggleTheme() {
|
|||
display: inline-block;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.right {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
height: 100%;
|
||||
margin-right: 15px;
|
||||
.signOut {
|
||||
cursor: pointer;
|
||||
font-size: 14px;
|
||||
color:#1C4FAB ;
|
||||
}
|
||||
.user {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
border-right: 1px solid rgba(0, 0, 0, 0.1);
|
||||
margin-right: 15px;
|
||||
height: 100%;
|
||||
img {
|
||||
width: 35px;
|
||||
height: 35px;
|
||||
object-fit: cover;
|
||||
border-radius: 38px;
|
||||
margin: 0px 15px;
|
||||
}
|
||||
div {
|
||||
color: #163171;
|
||||
.user-nickname {
|
||||
font-weight: 800;
|
||||
font-size: 12px;
|
||||
display: block;
|
||||
}
|
||||
.typename {
|
||||
font-size: 12px;
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.right-menu {
|
||||
float: right;
|
||||
height: 100%;
|
||||
line-height: 50px;
|
||||
// line-height: 50px;
|
||||
display: flex;
|
||||
|
||||
&:focus {
|
||||
|
|
@ -178,7 +252,7 @@ function toggleTheme() {
|
|||
|
||||
svg {
|
||||
transition: transform 0.3s;
|
||||
|
||||
|
||||
&:hover {
|
||||
transform: scale(1.15);
|
||||
}
|
||||
|
|
@ -202,7 +276,7 @@ function toggleTheme() {
|
|||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.user-nickname{
|
||||
.user-nickname {
|
||||
position: relative;
|
||||
left: 5px;
|
||||
bottom: 10px;
|
||||
|
|
|
|||
|
|
@ -2,12 +2,12 @@
|
|||
<div class="sidebar-logo-container" :class="{ 'collapse': collapse }">
|
||||
<transition name="sidebarLogoFade">
|
||||
<router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/">
|
||||
<img v-if="logo" :src="logo" class="sidebar-logo" />
|
||||
<h1 v-else class="sidebar-title">{{ title }}</h1>
|
||||
<img v-if="logo" :src="logo1" class="sidebar-logo" />
|
||||
<!-- <h1 v-else class="sidebar-title">{{ title }}</h1> -->
|
||||
</router-link>
|
||||
<router-link v-else key="expand" class="sidebar-logo-link" to="/">
|
||||
<img v-if="logo" :src="logo" class="sidebar-logo" />
|
||||
<h1 class="sidebar-title">{{ title }}</h1>
|
||||
<img v-if="logo" :src="logo" class="sidebar-logo sidebar-logoall" />
|
||||
<!-- <h1 class="sidebar-title">{{ title }}</h1> -->
|
||||
</router-link>
|
||||
</transition>
|
||||
</div>
|
||||
|
|
@ -15,6 +15,7 @@
|
|||
|
||||
<script setup>
|
||||
import logo from '@/assets/logo/logo.png'
|
||||
import logo1 from '@/assets/logo/logo1.png'
|
||||
import useSettingsStore from '@/store/modules/settings'
|
||||
import variables from '@/assets/styles/variables.module.scss'
|
||||
|
||||
|
|
@ -59,11 +60,12 @@ const getLogoTextColor = computed(() => {
|
|||
.sidebar-logo-container {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 50px;
|
||||
line-height: 50px;
|
||||
// height: 50px;
|
||||
|
||||
background: v-bind(getLogoBackground);
|
||||
text-align: center;
|
||||
overflow: hidden;
|
||||
padding: 25px 0;
|
||||
|
||||
& .sidebar-logo-link {
|
||||
height: 100%;
|
||||
|
|
@ -75,7 +77,10 @@ const getLogoTextColor = computed(() => {
|
|||
vertical-align: middle;
|
||||
margin-right: 12px;
|
||||
}
|
||||
.sidebar-logoall{
|
||||
width: auto;
|
||||
|
||||
}
|
||||
& .sidebar-title {
|
||||
display: inline-block;
|
||||
margin: 0;
|
||||
|
|
@ -92,6 +97,7 @@ const getLogoTextColor = computed(() => {
|
|||
.sidebar-logo {
|
||||
margin-right: 0px;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -70,20 +70,29 @@ const activeMenu = computed(() => {
|
|||
|
||||
<style lang="scss" scoped>
|
||||
.sidebar-container {
|
||||
background-color: v-bind(getMenuBackground);
|
||||
background-color: #222653;
|
||||
|
||||
|
||||
.scrollbar-wrapper {
|
||||
background-color: v-bind(getMenuBackground);
|
||||
background-color: #222653;
|
||||
|
||||
}
|
||||
|
||||
.el-menu {
|
||||
:deep(.el-menu) {
|
||||
border: none;
|
||||
height: 100%;
|
||||
width: 100% !important;
|
||||
text-align: center;
|
||||
|
||||
.el-menu-item, .el-sub-menu__title {
|
||||
text-align: center;
|
||||
// justify-content: center;
|
||||
padding-left: 40px;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
|
||||
&:hover {
|
||||
background-color: var(--menu-hover, rgba(0, 0, 0, 0.06)) !important;
|
||||
background-color: #4D7BFF !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -91,8 +100,8 @@ const activeMenu = computed(() => {
|
|||
color: v-bind(getMenuTextColor);
|
||||
|
||||
&.is-active {
|
||||
color: var(--menu-active-text, #409eff);
|
||||
background-color: var(--menu-hover, rgba(0, 0, 0, 0.06)) !important;
|
||||
color: #fff;
|
||||
background-color: #4D7BFF !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -61,6 +61,7 @@ const route = useRoute()
|
|||
const router = useRouter()
|
||||
|
||||
const visitedViews = computed(() => useTagsViewStore().visitedViews)
|
||||
|
||||
const routes = computed(() => usePermissionStore().routes)
|
||||
const theme = computed(() => useSettingsStore().theme)
|
||||
const tagsIcon = computed(() => useSettingsStore().tagsIcon)
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
<div :class="{ hasTagsView: needTagsView, sidebarHide: sidebar.hide }" class="main-container">
|
||||
<div :class="{ 'fixed-header': fixedHeader }">
|
||||
<navbar @setLayout="setLayout" />
|
||||
<tags-view v-if="needTagsView" />
|
||||
<!-- <tags-view v-if="needTagsView" /> -->
|
||||
</div>
|
||||
<app-main />
|
||||
<settings ref="settingRef" />
|
||||
|
|
@ -109,4 +109,5 @@ function setLayout() {
|
|||
.mobile .fixed-header {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
|
@ -40,7 +40,18 @@ router.beforeEach((to, from, next) => {
|
|||
router.addRoute(route) // 动态添加可访问路由表
|
||||
}
|
||||
})
|
||||
next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
|
||||
if(to.path=="/index"){
|
||||
if(accessRoutes[0].path=="/"){
|
||||
next({path:accessRoutes[0].path+accessRoutes[0].children[0].path , replace: true })
|
||||
}else{
|
||||
next({path:accessRoutes[0].path+"/"+accessRoutes[0].children[0].path , replace: true })
|
||||
}
|
||||
|
||||
}else{
|
||||
next({ ...to, replace: true }) // 确保addRoutes已完成hack方法
|
||||
}
|
||||
|
||||
|
||||
})
|
||||
}).catch(err => {
|
||||
useUserStore().logOut().then(() => {
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import Layout from '@/layout'
|
|||
|
||||
// 公共路由
|
||||
export const constantRoutes = [
|
||||
|
||||
{
|
||||
path: '/redirect',
|
||||
component: Layout,
|
||||
|
|
@ -71,6 +72,7 @@ export const constantRoutes = [
|
|||
path: '/index',
|
||||
component: () => import('@/views/index'),
|
||||
name: 'Index',
|
||||
hidden: true,
|
||||
meta: { title: '首页', icon: 'dashboard', affix: true }
|
||||
}
|
||||
]
|
||||
|
|
|
|||
|
|
@ -49,6 +49,9 @@ const usePermissionStore = defineStore(
|
|||
this.setDefaultRoutes(sidebarRoutes)
|
||||
this.setTopbarRoutes(defaultRoutes)
|
||||
resolve(rewriteRoutes)
|
||||
|
||||
|
||||
|
||||
})
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ const useTagsViewStore = defineStore(
|
|||
}),
|
||||
actions: {
|
||||
addView(view) {
|
||||
console.log(view)
|
||||
this.addVisitedView(view)
|
||||
this.addCachedView(view)
|
||||
},
|
||||
|
|
|
|||
|
|
@ -54,11 +54,11 @@ const useUserStore = defineStore(
|
|||
this.nickName = user.nickName
|
||||
this.avatar = avatar
|
||||
/* 初始密码提示 */
|
||||
if(res.isDefaultModifyPwd) {
|
||||
ElMessageBox.confirm('您的密码还是初始密码,请修改密码!', '安全提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => {
|
||||
router.push({ name: 'Profile', params: { activeTab: 'resetPwd' } })
|
||||
}).catch(() => {})
|
||||
}
|
||||
// if(res.isDefaultModifyPwd) {
|
||||
// ElMessageBox.confirm('您的密码还是初始密码,请修改密码!', '安全提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => {
|
||||
// router.push({ name: 'Profile', params: { activeTab: 'resetPwd' } })
|
||||
// }).catch(() => {})
|
||||
// }
|
||||
/* 过期密码提示 */
|
||||
if(!res.isDefaultModifyPwd && res.isPasswordExpired) {
|
||||
ElMessageBox.confirm('您的密码已过期,请尽快修改密码!', '安全提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => {
|
||||
|
|
|
|||
1122
src/views/index.vue
|
|
@ -1,67 +1,70 @@
|
|||
<template>
|
||||
<div class="login">
|
||||
<el-form ref="loginRef" :model="loginForm" :rules="loginRules" class="login-form">
|
||||
<div class="title">
|
||||
<img src="@/assets/images/loginbjtitle.png" />
|
||||
<p class="desc">欢迎登录!很高兴再次见到你</p>
|
||||
</div>
|
||||
|
||||
<el-form-item prop="username">
|
||||
<el-input
|
||||
v-model="loginForm.username"
|
||||
type="text"
|
||||
|
||||
auto-complete="off"
|
||||
placeholder="账号"
|
||||
>
|
||||
<template #prefix><svg-icon icon-class="user" class="el-input__icon input-icon" /></template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="password">
|
||||
<el-input
|
||||
v-model="loginForm.password"
|
||||
type="password"
|
||||
|
||||
auto-complete="off"
|
||||
placeholder="密码"
|
||||
@keyup.enter="handleLogin"
|
||||
>
|
||||
<template #prefix><svg-icon icon-class="password" class="el-input__icon input-icon" /></template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="code" v-if="captchaEnabled" >
|
||||
<el-input
|
||||
v-model="loginForm.code"
|
||||
size="large"
|
||||
auto-complete="off"
|
||||
placeholder="验证码"
|
||||
style="width: calc(100% - 160px)"
|
||||
@keyup.enter="handleLogin"
|
||||
>
|
||||
<template #prefix><svg-icon icon-class="validCode" class="el-input__icon input-icon" /></template>
|
||||
</el-input>
|
||||
<div class="login-code">
|
||||
<img :src="codeUrl" @click="getCode" class="login-code-img"/>
|
||||
<div class="appbody">
|
||||
<div class="login">
|
||||
<img src="@/assets/images/login.png" class="left" />
|
||||
<el-form ref="loginRef" :model="loginForm" :rules="loginRules" class="login-form">
|
||||
<div class="title">
|
||||
<img src="@/assets/images/loginbjtitle.png" />
|
||||
<p class="desc">欢迎登录!很高兴再次见到你</p>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">记住密码</el-checkbox>
|
||||
<el-form-item style="width:100%;">
|
||||
<el-button
|
||||
:loading="loading"
|
||||
size="large"
|
||||
type="primary"
|
||||
style="width:100%;"
|
||||
@click.prevent="handleLogin"
|
||||
>
|
||||
<span v-if="!loading">登 录</span>
|
||||
<span v-else>登 录 中...</span>
|
||||
</el-button>
|
||||
<div style="float: right;" v-if="register">
|
||||
<router-link class="link-type" :to="'/register'">立即注册</router-link>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
|
||||
<el-form-item prop="username">
|
||||
<el-input
|
||||
v-model="loginForm.username"
|
||||
type="text"
|
||||
|
||||
auto-complete="off"
|
||||
placeholder="账号"
|
||||
>
|
||||
<template #prefix><svg-icon icon-class="user" class="el-input__icon input-icon" /></template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="password">
|
||||
<el-input
|
||||
v-model="loginForm.password"
|
||||
type="password"
|
||||
|
||||
auto-complete="off"
|
||||
placeholder="密码"
|
||||
@keyup.enter="handleLogin"
|
||||
>
|
||||
<template #prefix><svg-icon icon-class="password" class="el-input__icon input-icon" /></template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="code" v-if="captchaEnabled" >
|
||||
<el-input
|
||||
v-model="loginForm.code"
|
||||
size="large"
|
||||
auto-complete="off"
|
||||
placeholder="验证码"
|
||||
style="width: calc(100% - 160px)"
|
||||
@keyup.enter="handleLogin"
|
||||
>
|
||||
<template #prefix><svg-icon icon-class="validCode" class="el-input__icon input-icon" /></template>
|
||||
</el-input>
|
||||
<div class="login-code">
|
||||
<img :src="codeUrl" @click="getCode" class="login-code-img"/>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">记住密码</el-checkbox>
|
||||
<el-form-item style="width:100%;">
|
||||
<el-button
|
||||
:loading="loading"
|
||||
size="large"
|
||||
type="primary"
|
||||
style="width:100%;"
|
||||
@click.prevent="handleLogin"
|
||||
>
|
||||
<span v-if="!loading">登 录</span>
|
||||
<span v-else>登 录 中...</span>
|
||||
</el-button>
|
||||
<div style="float: right;" v-if="register">
|
||||
<router-link class="link-type" :to="'/register'">立即注册</router-link>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
|
@ -165,11 +168,26 @@ getCookie()
|
|||
</script>
|
||||
|
||||
<style lang='scss' scoped>
|
||||
.appbody{
|
||||
background: #F1F5FD;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
.login {
|
||||
|
||||
height: 100%;
|
||||
background-image: url("../assets/images/loginbj.png");
|
||||
background-size: 100% 100%;
|
||||
width: 85%;
|
||||
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
.left{
|
||||
width:calc(100% - 600px);
|
||||
height: 700px;
|
||||
object-fit: contain;
|
||||
}
|
||||
}
|
||||
.title {
|
||||
margin: 0px auto 30px auto;
|
||||
|
|
@ -183,10 +201,7 @@ getCookie()
|
|||
width: 600px;
|
||||
padding: 60px 100px;
|
||||
z-index: 1;
|
||||
position: fixed;
|
||||
right: 5%;
|
||||
top: 50%;
|
||||
transform: translate(-50%,-50%);
|
||||
|
||||
.title{
|
||||
text-align: center;
|
||||
img{
|
||||
|
|
|
|||
|
|
@ -0,0 +1,338 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<!-- <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="版本号(数字,用于比大小,如10010)" prop="versionCode">
|
||||
<el-input
|
||||
v-model="queryParams.versionCode"
|
||||
placeholder="请输入版本号(数字,用于比大小,如10010)"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="版本名(展示用,如1.0.10)" prop="versionName">
|
||||
<el-input
|
||||
v-model="queryParams.versionName"
|
||||
placeholder="请输入版本名(展示用,如1.0.10)"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否强制更新:0-否 1-是" prop="forceUpdate">
|
||||
<el-input
|
||||
v-model="queryParams.forceUpdate"
|
||||
placeholder="请输入是否强制更新:0-否 1-是"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="发布时间" prop="releaseTime">
|
||||
<el-date-picker clearable
|
||||
v-model="queryParams.releaseTime"
|
||||
type="date"
|
||||
value-format="YYYY-MM-DD"
|
||||
placeholder="请选择发布时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form> -->
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="Plus"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['system:AppVersionRelease:add']"
|
||||
>新增</el-button>
|
||||
</el-col>
|
||||
<!-- <el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="Edit"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['system:AppVersionRelease:edit']"
|
||||
>修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="Delete"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['system:AppVersionRelease:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="Download"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['system:AppVersionRelease:export']"
|
||||
>导出</el-button>
|
||||
</el-col> -->
|
||||
<!-- <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> -->
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="AppVersionReleaseList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<!-- <el-table-column label="主键" align="center" prop="id" /> -->
|
||||
<!-- <el-table-column label="APP类型(android/ios/other)" align="center" prop="appType" /> -->
|
||||
<!-- <el-table-column label="版本号" align="center" prop="versionCode" /> -->
|
||||
<el-table-column label="版本名" align="center" prop="versionName" />
|
||||
<el-table-column label="升级类型" align="center" prop="type" >
|
||||
<template #default="{row,$index}">
|
||||
{{ row.type==1?'整包更新':"资源更新" }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column label="版本更新描述(支持多行)" align="center" prop="description" /> -->
|
||||
<!-- <el-table-column label="资源地址(下载/拉取地址)" align="center" prop="resourceUrl" /> -->
|
||||
<!-- <el-table-column label="是否强制更新:0-否 1-是" align="center" prop="forceUpdate" /> -->
|
||||
<!-- <el-table-column label="状态:1-已发布 0-未发布/下架" align="center" prop="status" /> -->
|
||||
<el-table-column label="发布时间" align="center" prop="releaseTime" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.releaseTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column label="备注" align="center" prop="remark" /> -->
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:AppVersionRelease:edit']">修改</el-button>
|
||||
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:AppVersionRelease:remove']">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNum"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
<!-- 添加或修改APP版本发布对话框 -->
|
||||
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
|
||||
<el-form ref="AppVersionReleaseRef" :model="form" :rules="rules" >
|
||||
<!-- <el-form-item label="版本号" prop="versionCode">
|
||||
<el-input v-model="form.versionCode" placeholder="请输入版本号(数字,用于比大小,如10010)" />
|
||||
</el-form-item> -->
|
||||
<el-form-item label="版本名" prop="versionName">
|
||||
<el-input v-model="form.versionName" :limit="1" placeholder="请输入版本名(展示用,如1.0.10)" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="升级类型" prop="type">
|
||||
<el-radio-group v-model="form.type" @change="form.resourceUrl=''">
|
||||
<el-radio :value="1"> APK整包更新</el-radio>
|
||||
<el-radio :value="2">WGT资源包更新</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="资源地址" prop="resourceUrl" >
|
||||
<file-upload v-model="form.resourceUrl" :fileSize="50" :fileType="form.type==1?['apk']:['wgt']"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="更新内容" prop="description">
|
||||
<el-input v-model="form.description" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<!-- <el-form-item label="是否强制更新:0-否 1-是" prop="forceUpdate">
|
||||
<el-input v-model="form.forceUpdate" placeholder="请输入是否强制更新:0-否 1-是" />
|
||||
</el-form-item> -->
|
||||
<!-- <el-form-item label="发布时间" prop="releaseTime">
|
||||
<el-date-picker clearable
|
||||
v-model="form.releaseTime"
|
||||
type="date"
|
||||
value-format="YYYY-MM-DD"
|
||||
placeholder="请选择发布时间">
|
||||
</el-date-picker>
|
||||
</el-form-item> -->
|
||||
<!-- <el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="form.remark" placeholder="请输入备注" />
|
||||
</el-form-item> -->
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup name="AppVersionRelease">
|
||||
import { listAppVersionRelease, getAppVersionRelease, delAppVersionRelease, addAppVersionRelease, updateAppVersionRelease } from "@/api/system/AppVersionRelease"
|
||||
|
||||
const { proxy } = getCurrentInstance()
|
||||
|
||||
const AppVersionReleaseList = ref([])
|
||||
const open = ref(false)
|
||||
const loading = ref(true)
|
||||
const showSearch = ref(true)
|
||||
const ids = ref([])
|
||||
const single = ref(true)
|
||||
const multiple = ref(true)
|
||||
const total = ref(0)
|
||||
const title = ref("")
|
||||
|
||||
const data = reactive({
|
||||
form: {},
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
appType: null,
|
||||
versionCode: null,
|
||||
// versionName: '1.1.1',
|
||||
// type: 1,
|
||||
description: null,
|
||||
resourceUrl: null,
|
||||
forceUpdate: null,
|
||||
status: null,
|
||||
releaseTime: null,
|
||||
},
|
||||
rules: {
|
||||
appType: [
|
||||
{ required: true, message: "APP类型(android/ios/other)不能为空", trigger: "change" }
|
||||
],
|
||||
// versionCode: [
|
||||
// { required: true, message: "版本号(数字,用于比大小,如10010)不能为空", trigger: "blur" }
|
||||
// ],
|
||||
versionName: [
|
||||
{ required: true, message: "版本名(展示用,如1.0.10)不能为空", trigger: "blur" }
|
||||
],
|
||||
type: [
|
||||
{ required: true, message: "升级类型:1-整包 2-热更新", trigger: "change" }
|
||||
],
|
||||
resourceUrl: [
|
||||
{ required: true, message: "资源地址(下载/拉取地址)不能为空", trigger: "blur" }
|
||||
],
|
||||
forceUpdate: [
|
||||
{ required: true, message: "是否强制更新:0-否 1-是不能为空", trigger: "blur" }
|
||||
],
|
||||
status: [
|
||||
{ required: true, message: "状态:1-已发布 0-未发布/下架不能为空", trigger: "change" }
|
||||
],
|
||||
}
|
||||
})
|
||||
|
||||
const { queryParams, form, rules } = toRefs(data)
|
||||
|
||||
/** 查询APP版本发布列表 */
|
||||
function getList() {
|
||||
loading.value = true
|
||||
listAppVersionRelease(queryParams.value).then(response => {
|
||||
AppVersionReleaseList.value = response.rows
|
||||
total.value = response.total
|
||||
loading.value = false
|
||||
})
|
||||
}
|
||||
|
||||
// 取消按钮
|
||||
function cancel() {
|
||||
open.value = false
|
||||
reset()
|
||||
}
|
||||
|
||||
// 表单重置
|
||||
function reset() {
|
||||
form.value = {
|
||||
id: null,
|
||||
appType: null,
|
||||
versionCode: "0",
|
||||
versionName: null,
|
||||
type: null,
|
||||
description: null,
|
||||
resourceUrl: null,
|
||||
forceUpdate: null,
|
||||
status: null,
|
||||
releaseTime: null,
|
||||
remark: null
|
||||
}
|
||||
proxy.resetForm("AppVersionReleaseRef")
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
function handleQuery() {
|
||||
queryParams.value.pageNum = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
function resetQuery() {
|
||||
proxy.resetForm("queryRef")
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
// 多选框选中数据
|
||||
function handleSelectionChange(selection) {
|
||||
ids.value = selection.map(item => item.id)
|
||||
single.value = selection.length != 1
|
||||
multiple.value = !selection.length
|
||||
}
|
||||
|
||||
/** 新增按钮操作 */
|
||||
function handleAdd() {
|
||||
reset()
|
||||
open.value = true
|
||||
title.value = "添加APP版本发布"
|
||||
}
|
||||
|
||||
/** 修改按钮操作 */
|
||||
function handleUpdate(row) {
|
||||
reset()
|
||||
const _id = row.id || ids.value
|
||||
getAppVersionRelease(_id).then(response => {
|
||||
form.value = response.data
|
||||
open.value = true
|
||||
title.value = "修改APP版本发布"
|
||||
})
|
||||
}
|
||||
|
||||
/** 提交按钮 */
|
||||
function submitForm() {
|
||||
proxy.$refs["AppVersionReleaseRef"].validate(valid => {
|
||||
if (valid) {
|
||||
if (form.value.id != null) {
|
||||
updateAppVersionRelease(form.value).then(response => {
|
||||
proxy.$modal.msgSuccess("修改成功")
|
||||
open.value = false
|
||||
getList()
|
||||
})
|
||||
} else {
|
||||
addAppVersionRelease(form.value).then(response => {
|
||||
proxy.$modal.msgSuccess("新增成功")
|
||||
open.value = false
|
||||
getList()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
function handleDelete(row) {
|
||||
const _ids = row.id || ids.value
|
||||
proxy.$modal.confirm('是否确认删除APP版本发布编号为"' + _ids + '"的数据项?').then(function() {
|
||||
return delAppVersionRelease(_ids)
|
||||
}).then(() => {
|
||||
getList()
|
||||
proxy.$modal.msgSuccess("删除成功")
|
||||
}).catch(() => {})
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
function handleExport() {
|
||||
proxy.download('system/AppVersionRelease/export', {
|
||||
...queryParams.value
|
||||
}, `AppVersionRelease_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
|
||||
getList()
|
||||
</script>
|
||||
|
||||
|
|
@ -1,219 +1,243 @@
|
|||
<template>
|
||||
<div>
|
||||
<div class="app-container">
|
||||
<el-card>
|
||||
<div class="cardbox">
|
||||
<div class="top">
|
||||
<div class="l">成员</div>
|
||||
<div class="r">
|
||||
<el-input
|
||||
style="width: 240px"
|
||||
placeholder="输入姓名/电话"
|
||||
:suffix-icon="Search"
|
||||
v-model="queryParams.userName"
|
||||
@clear="listSearch"
|
||||
@keydown="listSearch"
|
||||
clearable
|
||||
/>
|
||||
<el-date-picker
|
||||
v-model="dateRange"
|
||||
type="daterange"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
@clear="listSearch"
|
||||
@change="listSearch"
|
||||
show-confirm="true"
|
||||
/>
|
||||
<el-button type="primary" @click="handleAdd" :icon="CirclePlus"
|
||||
>添加成员</el-button
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<splitpanes
|
||||
:horizontal="appStore.device === 'mobile'"
|
||||
class="container default-theme"
|
||||
>
|
||||
<pane size="16">
|
||||
<div class="l">
|
||||
<el-tree
|
||||
:data="data"
|
||||
:props="defaultProps"
|
||||
class="tree"
|
||||
:check-on-click-leaf="false"
|
||||
:default-expand-all="true"
|
||||
>
|
||||
<template #default="{ node, data }">
|
||||
<div class="treeitem">
|
||||
<div
|
||||
class="icon"
|
||||
v-if="data.children && data.children.length"
|
||||
>
|
||||
<el-icon :size="10" class="iocnPlus"><Plus /></el-icon>
|
||||
<el-icon :size="10" class="iocnMinus"><Minus /></el-icon>
|
||||
</div>
|
||||
<div
|
||||
class="title"
|
||||
:class="{
|
||||
on: queryParams.deptId == data.deptId,
|
||||
}"
|
||||
@click.stop="screen(data)"
|
||||
>
|
||||
{{ node.label }}
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-tree>
|
||||
</div>
|
||||
</pane>
|
||||
<pane size="84">
|
||||
<div class="app-container">
|
||||
<el-card>
|
||||
<div class="cardbox">
|
||||
<div class="top">
|
||||
<div class="l">成员</div>
|
||||
<div class="r">
|
||||
<el-table
|
||||
:data="tableData"
|
||||
class="table"
|
||||
border
|
||||
v-loading="loading"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="120"
|
||||
align="center"
|
||||
>
|
||||
<template #default="{ row, $index }">
|
||||
{{
|
||||
(queryParams.pageNum - 1) * queryParams.pageSize +
|
||||
$index +
|
||||
1
|
||||
}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="用户编号"
|
||||
align="center"
|
||||
key="userId"
|
||||
prop="userId"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="userName"
|
||||
label="账号"
|
||||
width="120"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column prop="nickName" label="姓名" />
|
||||
<el-table-column prop="dept.deptName" label="部门名称" />
|
||||
<!-- <el-table-column prop="dept.deptName" label="角色" /> -->
|
||||
<el-table-column prop="remark" label="备注" />
|
||||
<el-table-column
|
||||
prop="createTime"
|
||||
label="添加时间"
|
||||
sortable
|
||||
align="center"
|
||||
width="180"
|
||||
/>
|
||||
<el-table-column
|
||||
fixed="right"
|
||||
label="操作"
|
||||
width="120"
|
||||
align="center"
|
||||
>
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
size="small"
|
||||
@click="handleUpdate(scope.row)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
size="small"
|
||||
@click="handleDelete(scope.row)"
|
||||
>删除</el-button
|
||||
>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNum"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getusertlist"
|
||||
<el-input
|
||||
style="width: 240px"
|
||||
placeholder="输入姓名/电话"
|
||||
:suffix-icon="Search"
|
||||
v-model="queryParams.userName"
|
||||
@clear="listSearch"
|
||||
@keydown="listSearch"
|
||||
clearable
|
||||
/>
|
||||
<el-date-picker
|
||||
v-model="dateRange"
|
||||
type="daterange"
|
||||
value-format="YYYY-MM-DD"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
@clear="listSearch"
|
||||
@change="listSearch"
|
||||
show-confirm="true"
|
||||
/>
|
||||
<el-button type="primary" @click="handleAdd" :icon="CirclePlus"
|
||||
>添加成员</el-button
|
||||
>
|
||||
</div>
|
||||
</pane>
|
||||
</splitpanes>
|
||||
</div>
|
||||
</el-card>
|
||||
</div>
|
||||
<!-- 添加弹框 -->
|
||||
<el-dialog
|
||||
v-model="dialogVisible"
|
||||
width="500"
|
||||
:title="form.id ? '编辑部门' : '添加部门'"
|
||||
header-class="dialogheader"
|
||||
:align-center="true"
|
||||
center
|
||||
>
|
||||
<el-form :model="form" ref="formEl" label-width="auto" :rules="rules">
|
||||
<el-form-item label="成员姓名" prop="nickName">
|
||||
<el-input v-model="form.nickName" />
|
||||
</el-form-item>
|
||||
<el-form-item label="成员账号" prop="userName">
|
||||
<el-input v-model="form.userName" autocomplete="off" />
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-if="form.userId == undefined"
|
||||
label="用户密码"
|
||||
prop="password"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.password"
|
||||
autocomplete="off"
|
||||
placeholder="请输入用户密码"
|
||||
type="password"
|
||||
maxlength="20"
|
||||
show-password
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="选择部门" prop="deptId">
|
||||
<el-tree-select
|
||||
v-model="form.deptId"
|
||||
:data="data"
|
||||
:props="{ value: 'deptId', label: 'deptName', children: 'children' }"
|
||||
value-key="id"
|
||||
placeholder="请选择归属部门"
|
||||
clearable
|
||||
check-strictly
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="选择角色" prop="roleIds">
|
||||
<el-radio-group v-model="form.roleIds">
|
||||
<el-radio
|
||||
:key="item.roleId"
|
||||
:value="item.roleId"
|
||||
:disabled="item.status == 1"
|
||||
v-for="item in roleOptions"
|
||||
>{{ item.roleName }}</el-radio
|
||||
</div>
|
||||
<splitpanes
|
||||
:horizontal="appStore.device === 'mobile'"
|
||||
class="container default-theme"
|
||||
>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="form.remark" type="textarea" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<pane size="16">
|
||||
<div class="l">
|
||||
<el-tree
|
||||
:data="data"
|
||||
:props="defaultProps"
|
||||
class="tree"
|
||||
:check-on-click-leaf="false"
|
||||
:default-expand-all="true"
|
||||
>
|
||||
<template #default="{ node, data }">
|
||||
<div class="treeitem">
|
||||
<div
|
||||
class="icon"
|
||||
v-if="data.children && data.children.length"
|
||||
>
|
||||
<el-icon :size="10" class="iocnPlus"><Plus /></el-icon>
|
||||
<el-icon :size="10" class="iocnMinus"
|
||||
><Minus
|
||||
/></el-icon>
|
||||
</div>
|
||||
<div
|
||||
class="title"
|
||||
:class="{
|
||||
on: queryParams.deptId == data.deptId,
|
||||
}"
|
||||
@click.stop="screen(data)"
|
||||
>
|
||||
{{ node.label }}
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-tree>
|
||||
</div>
|
||||
</pane>
|
||||
<pane size="84">
|
||||
<div class="r">
|
||||
<el-table
|
||||
:data="tableData"
|
||||
class="table"
|
||||
border
|
||||
v-loading="loading"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
width="120"
|
||||
align="center"
|
||||
>
|
||||
<template #default="{ row, $index }">
|
||||
{{
|
||||
(queryParams.pageNum - 1) * queryParams.pageSize +
|
||||
$index +
|
||||
1
|
||||
}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="用户编号"
|
||||
align="center"
|
||||
key="userId"
|
||||
prop="userId"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="userName"
|
||||
label="账号"
|
||||
width="120"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column prop="nickName" label="姓名" />
|
||||
<el-table-column prop="dept.deptName" label="部门名称" />
|
||||
<!-- <el-table-column prop="dept.deptName" label="角色" /> -->
|
||||
<el-table-column prop="remark" label="备注" />
|
||||
<el-table-column
|
||||
prop="createTime"
|
||||
label="添加时间"
|
||||
sortable
|
||||
align="center"
|
||||
width="180"
|
||||
/>
|
||||
<el-table-column
|
||||
fixed="right"
|
||||
label="操作"
|
||||
width="120"
|
||||
align="center"
|
||||
>
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
size="small"
|
||||
@click="handleUpdate(scope.row)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
size="small"
|
||||
@click="remove(scope.row)"
|
||||
>删除</el-button
|
||||
>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNum"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getusertlist"
|
||||
/>
|
||||
</div>
|
||||
</pane>
|
||||
</splitpanes>
|
||||
</div>
|
||||
</el-card>
|
||||
</div>
|
||||
<!-- 添加弹框 -->
|
||||
<el-dialog
|
||||
v-model="dialogVisible"
|
||||
width="664"
|
||||
:title="form.id ? '编辑部门' : '添加部门'"
|
||||
header-class="dialogheader"
|
||||
:align-center="true"
|
||||
@close="resetForm(formEl)"
|
||||
center
|
||||
>
|
||||
<el-form :model="form" ref="formEl" label-width="auto" :rules="rules">
|
||||
<el-form-item label="成员姓名" prop="nickName">
|
||||
<el-input v-model="form.nickName" placeholder="请填写成员姓名" />
|
||||
</el-form-item>
|
||||
<el-form-item label="成员账号" prop="userName">
|
||||
<el-input
|
||||
v-model="form.userName"
|
||||
autocomplete="off"
|
||||
placeholder="请填写成员成员账号"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-if="form.userId == undefined"
|
||||
label="用户密码"
|
||||
prop="password"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.password"
|
||||
autocomplete="off"
|
||||
placeholder="请输入用户密码"
|
||||
type="password"
|
||||
maxlength="20"
|
||||
show-password
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="选择部门" prop="deptId">
|
||||
<el-tree-select
|
||||
v-model="form.deptId"
|
||||
:data="data"
|
||||
:props="{
|
||||
value: 'deptId',
|
||||
label: 'deptName',
|
||||
children: 'children',
|
||||
}"
|
||||
value-key="id"
|
||||
placeholder="请选择归属部门"
|
||||
clearable
|
||||
check-strictly
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="选择角色" prop="roleIds">
|
||||
<el-radio-group v-model="form.roleIds">
|
||||
<el-radio
|
||||
:key="item.roleId"
|
||||
:value="item.roleId"
|
||||
:disabled="item.status == 1"
|
||||
v-for="item in roleOptions"
|
||||
>{{ item.roleName }}</el-radio
|
||||
>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input
|
||||
v-model="form.remark"
|
||||
type="textarea"
|
||||
placeholder="请填写备注"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button @click="resetForm(formEl)">取消</el-button>
|
||||
<el-button type="primary" @click="submitForm(formEl)"> 确认 </el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button @click="resetForm(formEl)" style="width: 100px"
|
||||
>取消</el-button
|
||||
>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="submitForm(formEl)"
|
||||
style="width: 100px"
|
||||
>
|
||||
确认
|
||||
</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
|
@ -230,9 +254,8 @@ import {
|
|||
import { CirclePlus, Search, Plus, Minus } from "@element-plus/icons-vue";
|
||||
import { ref } from "vue";
|
||||
|
||||
|
||||
import { Splitpanes, Pane } from "splitpanes";
|
||||
import "splitpanes/dist/splitpanes.css"
|
||||
import "splitpanes/dist/splitpanes.css";
|
||||
import { ElMessageBox } from "element-plus";
|
||||
import useAppStore from "@/store/modules/app";
|
||||
const appStore = useAppStore();
|
||||
|
|
@ -354,16 +377,16 @@ const submitForm = async (formEl) => {
|
|||
}
|
||||
});
|
||||
};
|
||||
function remove(item) {
|
||||
ElMessageBox.confirm("确定删除该部门?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
})
|
||||
function remove(row) {
|
||||
const userIds = row.userId || ids.value;
|
||||
proxy.$modal
|
||||
.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?')
|
||||
.then(function () {
|
||||
return delUser(userIds);
|
||||
})
|
||||
.then(() => {
|
||||
delDept(item.deptId).then((r) => {
|
||||
getthreedata(false);
|
||||
});
|
||||
getthreedata(false);
|
||||
proxy.$modal.msgSuccess("删除成功");
|
||||
})
|
||||
.catch(() => {});
|
||||
}
|
||||
|
|
@ -385,8 +408,8 @@ function getusertlist() {
|
|||
loading.value = true;
|
||||
listUser(proxy.addDateRange(queryParams.value, dateRange.value)).then(
|
||||
(res) => {
|
||||
|
||||
loading.value = false;
|
||||
|
||||
tableData.value = res.rows;
|
||||
total.value = res.total;
|
||||
}
|
||||
|
|
@ -416,11 +439,10 @@ function filterDisabledDept(deptList) {
|
|||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** 新增按钮操作 */
|
||||
function handleAdd() {
|
||||
reset();
|
||||
|
||||
getUser().then((response) => {
|
||||
postOptions.value = response.posts;
|
||||
roleOptions.value = response.roles;
|
||||
|
|
@ -476,13 +498,9 @@ function handleDelete(row) {
|
|||
proxy.$modal
|
||||
.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?')
|
||||
.then(function () {
|
||||
return delUser(userIds);
|
||||
})
|
||||
.then(() => {
|
||||
getList();
|
||||
getusertlist();
|
||||
proxy.$modal.msgSuccess("删除成功");
|
||||
})
|
||||
.catch(() => {});
|
||||
});
|
||||
}
|
||||
onMounted(() => {
|
||||
getDeptTree();
|
||||
|
|
@ -493,6 +511,12 @@ onMounted(() => {
|
|||
});
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.app-container {
|
||||
background: #f6f6f6;
|
||||
}
|
||||
.app-container :deep(.el-card) {
|
||||
box-shadow: initial !important;
|
||||
}
|
||||
.top {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
|
@ -509,14 +533,13 @@ onMounted(() => {
|
|||
}
|
||||
}
|
||||
.cardbox {
|
||||
height: calc(100vh - 84px - 30px - 30px - 30px);
|
||||
height: calc(100vh - 128px);
|
||||
}
|
||||
|
||||
.container {
|
||||
border-top: 1px solid #eee;
|
||||
height: calc(100% - 47px);
|
||||
|
||||
|
||||
.l {
|
||||
width: 100%;
|
||||
padding: 15px;
|
||||
|
|
@ -527,7 +550,7 @@ onMounted(() => {
|
|||
--el-tree-node-content-height: 35px;
|
||||
height: 100%;
|
||||
overflow: auto;
|
||||
.el-tree-node.is-current > .el-tree-node__content{
|
||||
.el-tree-node.is-current > .el-tree-node__content {
|
||||
color: inherit;
|
||||
background-color: inherit !important;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -64,6 +64,7 @@
|
|||
<el-table
|
||||
:data="tableData"
|
||||
class="table"
|
||||
v-loading="loading"
|
||||
border
|
||||
style="width: 100%"
|
||||
>
|
||||
|
|
@ -134,17 +135,18 @@
|
|||
<!-- 添加弹框 -->
|
||||
<el-dialog
|
||||
v-model="dialogVisible"
|
||||
width="500"
|
||||
width="620"
|
||||
:title="form.id ? '编辑部门' : '添加部门'"
|
||||
header-class="dialogheader"
|
||||
:align-center="true"
|
||||
@close="resetForm(formEl)"
|
||||
center
|
||||
>
|
||||
<el-form :model="form" ref="formEl" label-width="auto" :rules="rules">
|
||||
<el-form-item label="输入部门" prop="deptName">
|
||||
<el-input v-model="form.deptName" placeholder="输入部门名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="选择部门类型" prop="deptLevel">
|
||||
<el-form-item label="选择部门类型" prop="deptLevel" v-if="!form.id">
|
||||
<el-radio-group v-model="form.deptLevel" @change="elradiogroup">
|
||||
<el-radio :value="1">总队</el-radio>
|
||||
<el-radio :value="2">支队</el-radio>
|
||||
|
|
@ -161,6 +163,7 @@
|
|||
<el-option
|
||||
:label="item.deptName"
|
||||
:value="item.deptId"
|
||||
|
||||
v-for="item in Options"
|
||||
/>
|
||||
</el-select>
|
||||
|
|
@ -175,8 +178,8 @@
|
|||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button @click="resetForm(formEl)">取消</el-button>
|
||||
<el-button type="primary" @click="submitForm(formEl)"> 确认 </el-button>
|
||||
<el-button @click="resetForm(formEl)" style="width:100px ;">取消</el-button>
|
||||
<el-button type="primary" @click="submitForm(formEl)" style="width:100px ;"> 确认 </el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
|
@ -203,9 +206,10 @@ const appStore = useAppStore();
|
|||
const formEl = ref();
|
||||
const total = ref(0);
|
||||
const pageNum = ref(1);
|
||||
const pageSize = ref(18);
|
||||
const pageSize = ref(20);
|
||||
const name = ref("");
|
||||
const serchKey = ref("");
|
||||
const loading=ref(false)
|
||||
const form = ref({
|
||||
deptId: "",
|
||||
parentId: "",
|
||||
|
|
@ -244,6 +248,7 @@ function screen(item) {
|
|||
}
|
||||
|
||||
const resetForm = (formEl) => {
|
||||
|
||||
if (!formEl) return;
|
||||
dialogVisible.value = false;
|
||||
formEl.resetFields();
|
||||
|
|
@ -292,7 +297,7 @@ function remove(item) {
|
|||
// 左边数据
|
||||
function getthreedata(type = true) {
|
||||
listDepttree().then((res) => {
|
||||
data.value = res.data;
|
||||
data.value = res.data;
|
||||
if (res.data.length && type) {
|
||||
deptId.value = 0;
|
||||
name.value = res.data[0].deptName;
|
||||
|
|
@ -304,6 +309,7 @@ getthreedata();
|
|||
|
||||
// 获取列表数据
|
||||
function getDeptlist() {
|
||||
loading.value=true;
|
||||
getDept(deptId.value, {
|
||||
pageNum: pageNum.value,
|
||||
pageSize: pageSize.value,
|
||||
|
|
@ -311,6 +317,7 @@ function getDeptlist() {
|
|||
}).then((res) => {
|
||||
tableData.value = res.rows;
|
||||
total.value = res.total;
|
||||
loading.value=false;
|
||||
});
|
||||
}
|
||||
// 编辑数据
|
||||
|
|
@ -347,6 +354,13 @@ function listSearch(e) {
|
|||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.app-container{
|
||||
background: #F6F6F6;
|
||||
}
|
||||
.app-container :deep(.el-card){
|
||||
box-shadow: initial !important;
|
||||
|
||||
}
|
||||
.top {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
|
@ -363,7 +377,7 @@ function listSearch(e) {
|
|||
}
|
||||
}
|
||||
.cardbox {
|
||||
height: calc(100vh - 84px - 30px - 30px - 30px);
|
||||
height: calc(100vh - 127px);
|
||||
}
|
||||
|
||||
.container {
|
||||
|
|
|
|||
|
|
@ -1,245 +1,385 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-card>
|
||||
<div class="cardbox">
|
||||
<div class="top">
|
||||
<div class="l">设备列表</div>
|
||||
<div class="r">
|
||||
<el-input
|
||||
v-model="name"
|
||||
style="width: 240px"
|
||||
placeholder="输入部门名称/ID"
|
||||
:suffix-icon="Search"
|
||||
/>
|
||||
<el-date-picker
|
||||
v-model="value1"
|
||||
type="daterange"
|
||||
range-separator="To"
|
||||
start-placeholder="Start date"
|
||||
end-placeholder="End date"
|
||||
/>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="dialogVisible = true"
|
||||
:icon="CirclePlus"
|
||||
>添加设备</el-button
|
||||
>
|
||||
<div>
|
||||
<div class="app-container">
|
||||
<el-card>
|
||||
<div class="cardbox">
|
||||
<div class="top">
|
||||
<div class="l">设备列表</div>
|
||||
<div class="r">
|
||||
<el-input
|
||||
v-model="fname"
|
||||
style="width: 240px"
|
||||
placeholder="输入部门名称/ID"
|
||||
:suffix-icon="Search"
|
||||
clearable
|
||||
@clear="listSearch"
|
||||
@keydown="listSearch"
|
||||
/>
|
||||
<el-date-picker
|
||||
v-model="dateRange"
|
||||
type="daterange"
|
||||
value-format="YYYY-MM-DD"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
@clear="listSearch"
|
||||
@change="listSearch"
|
||||
show-confirm="true"
|
||||
/>
|
||||
<el-button type="primary" @click="addequipment" :icon="CirclePlus"
|
||||
>添加设备</el-button
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
<el-table
|
||||
:data="tableData"
|
||||
class="table"
|
||||
border
|
||||
style="width: 100%"
|
||||
:preserve-expanded-content="true"
|
||||
>
|
||||
<el-table-column type="expand" align="center">
|
||||
<template #default="props">
|
||||
<div class="expandbox">
|
||||
<div class="box">
|
||||
<div class="ul">
|
||||
<div>布控球ID</div>
|
||||
<div>状态</div>
|
||||
<div>在线时长(小时)</div>
|
||||
<div>过车次数</div>
|
||||
</div>
|
||||
<div class="ul">
|
||||
<div>001</div>
|
||||
<div>在线</div>
|
||||
<div>16</div>
|
||||
<div>999</div>
|
||||
</div>
|
||||
<div class="ul">
|
||||
<div>001</div>
|
||||
<div>在线</div>
|
||||
<div>16</div>
|
||||
<div>999</div>
|
||||
<div class="container">
|
||||
<el-table
|
||||
:data="tableData"
|
||||
class="table"
|
||||
border
|
||||
v-loading="loading"
|
||||
style="width: 100%"
|
||||
:preserve-expanded-content="true"
|
||||
>
|
||||
<el-table-column type="expand" align="center">
|
||||
<template #default="props">
|
||||
<div class="expandbox">
|
||||
<div class="box">
|
||||
<div class="ul">
|
||||
<div>布控球ID</div>
|
||||
<div>状态</div>
|
||||
<div>在线时长(小时)</div>
|
||||
<div>过车次数</div>
|
||||
</div>
|
||||
<div
|
||||
class="ul"
|
||||
v-for="value in props.row.processedDeviceList"
|
||||
>
|
||||
<div>{{ value.encoding }}</div>
|
||||
<div>{{ value.status == 2 ? "在线" : "离线" }}</div>
|
||||
<div>{{ value.onlivetime || 0 }}</div>
|
||||
<div>{{ value.number || 0 }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="name"
|
||||
sortable
|
||||
label="序号"
|
||||
width="120"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column prop="address" label="关联部门" />
|
||||
<el-table-column
|
||||
prop="name"
|
||||
label="设备数量"
|
||||
width="120"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="name"
|
||||
label="云音响imei"
|
||||
width="120"
|
||||
align="center"
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="name"
|
||||
label="联系人"
|
||||
align="center"
|
||||
width="120"
|
||||
type="index"
|
||||
label="序号"
|
||||
width="120"
|
||||
align="center"
|
||||
>
|
||||
<template #default="{ row, $index }">
|
||||
{{ (pageNum - 1) * pageSize + $index + 1 }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="fname" label="关联部门" />
|
||||
<el-table-column
|
||||
prop="numberDevices"
|
||||
label="设备数量"
|
||||
width="120"
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="audio"
|
||||
label="云音响imei"
|
||||
|
||||
align="center"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="contactName"
|
||||
label="联系人"
|
||||
align="center"
|
||||
width="120"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="contactPhone"
|
||||
label="联系电话"
|
||||
align="center"
|
||||
width="120"
|
||||
/>
|
||||
|
||||
<el-table-column
|
||||
prop="creatData"
|
||||
label="添加时间"
|
||||
align="center"
|
||||
width="140"
|
||||
/>
|
||||
<el-table-column
|
||||
fixed="right"
|
||||
label="操作"
|
||||
width="120"
|
||||
align="center"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
size="small"
|
||||
@click="edit(row)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
size="small"
|
||||
@click="remove(row)"
|
||||
>删除</el-button
|
||||
>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
:total="total"
|
||||
v-model:page="pageNum"
|
||||
v-model:limit="pageSize"
|
||||
/>
|
||||
|
||||
<el-table-column
|
||||
prop="date"
|
||||
label="添加时间"
|
||||
align="center"
|
||||
width="140"
|
||||
/>
|
||||
<el-table-column
|
||||
fixed="right"
|
||||
label="操作"
|
||||
width="120"
|
||||
align="center"
|
||||
>
|
||||
<template #default>
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
size="small"
|
||||
@click="handleClick"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button link type="primary" size="small" @click="remove()"
|
||||
>删除</el-button
|
||||
>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
:total="total"
|
||||
v-model:page="pageNum"
|
||||
v-model:limit="pageSize"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-card>
|
||||
</div>
|
||||
<!-- 添加弹框 -->
|
||||
<el-dialog
|
||||
v-model="dialogVisible"
|
||||
width="620"
|
||||
:title="form.fid?'编辑设备':'添加设备'"
|
||||
header-class="dialogheader"
|
||||
:align-center="true"
|
||||
@close="resetForm(formEl)"
|
||||
center
|
||||
>
|
||||
<el-form :model="form" ref="formEl" label-width="auto" :rules="rules">
|
||||
<el-form-item label="关联部门" prop="fid">
|
||||
<el-tree-select
|
||||
v-model="form.fid"
|
||||
:data="data"
|
||||
:props="{
|
||||
value: 'deptId',
|
||||
label: 'deptName',
|
||||
children: 'children',
|
||||
}"
|
||||
value-key="id"
|
||||
placeholder="选择部门"
|
||||
clearable
|
||||
|
||||
check-strictly
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="联系人" prop="contactName" >
|
||||
<el-input v-model="form.contactName" placeholder="填写联系人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="联系电话" prop="contactPhone" >
|
||||
<el-input v-model="form.contactPhone" placeholder="填写联系电话" />
|
||||
</el-form-item>
|
||||
<el-form-item label="布控球1 ID:" prop="startDeviceId" >
|
||||
<el-input v-model="form.startDeviceId" placeholder="填写布控球1 ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="布控球2 ID:" prop="endDeviceId" >
|
||||
<el-input v-model="form.endDeviceId" placeholder="填写布控球2 ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="云音响imei:" prop="audio" >
|
||||
<el-input v-model="form.audio" placeholder="填写云音响imei" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button @click="resetForm(formEl)" style="width:100px ;">取消</el-button>
|
||||
<el-button type="primary" @click="submitForm(formEl)" style="width:100px ;">
|
||||
确认
|
||||
</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<!-- 添加弹框 -->
|
||||
<el-dialog
|
||||
v-model="dialogVisible"
|
||||
width="500"
|
||||
title="添加部门"
|
||||
header-class="dialogheader"
|
||||
:align-center="true"
|
||||
center
|
||||
>
|
||||
<el-form :model="form" ref="formEl" label-width="auto" :rules="rules">
|
||||
<el-form-item label="关联部门">
|
||||
<el-select v-model="form.region" placeholder="please select your zone">
|
||||
<el-option label="Zone one" value="shanghai" />
|
||||
<el-option label="Zone two" value="beijing" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="联系人" prop="name">
|
||||
<el-input v-model="form.name" />
|
||||
</el-form-item>
|
||||
<el-form-item label="联系电话" prop="name">
|
||||
<el-input v-model="form.name" />
|
||||
</el-form-item>
|
||||
<el-form-item label="布控球1 ID:" prop="name">
|
||||
<el-input v-model="form.name" />
|
||||
</el-form-item>
|
||||
<el-form-item label="布控球2 ID:" prop="name">
|
||||
<el-input v-model="form.name" />
|
||||
</el-form-item>
|
||||
<el-form-item label="云音响imei:" prop="name">
|
||||
<el-input v-model="form.name" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button @click="resetForm(formEl)">取消</el-button>
|
||||
<el-button type="primary" @click="submitForm(formEl)"> 确认 </el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { CirclePlus, Search, Plus, Minus } from "@element-plus/icons-vue";
|
||||
import { ref } from "vue";
|
||||
|
||||
|
||||
import { listDepttree, delDept } from "@/api/system/SysSpeedingDept.js";
|
||||
import { ElMessageBox } from "element-plus";
|
||||
|
||||
import {
|
||||
listSpeedingAlertSettings,
|
||||
addSpeedingAlertSettings,
|
||||
delSpeedingAlertSettings,
|
||||
updateSpeedingAlertSettings
|
||||
} from "@/api/system/SpeedingAlertSettings.js";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const formEl = ref();
|
||||
const total = ref(90);
|
||||
const pageNum = ref(10);
|
||||
const pageSize = ref(1);
|
||||
const total = ref(0);
|
||||
const pageNum = ref(1);
|
||||
const pageSize = ref(20);
|
||||
const fname=ref("")
|
||||
const name = ref("");
|
||||
const form = ref({});
|
||||
const dateRange = ref([]);
|
||||
const form = ref({
|
||||
contactName: "",
|
||||
contactPhone: "",
|
||||
startDeviceId: "",
|
||||
endDeviceId: "",
|
||||
audio: "",
|
||||
fid: "",
|
||||
});
|
||||
const data = ref([]);
|
||||
const dialogVisible = ref(false);
|
||||
|
||||
const tableData = [
|
||||
{
|
||||
date: "2016-05-03",
|
||||
name: "Tom",
|
||||
address: "No. 189, Grove St, Los Angeles",
|
||||
},
|
||||
{
|
||||
date: "2016-05-02",
|
||||
name: "Tom",
|
||||
address: "No. 189, Grove St, Los Angeles",
|
||||
},
|
||||
{
|
||||
date: "2016-05-04",
|
||||
name: "Tom",
|
||||
address: "No. 189, Grove St, Los Angeles",
|
||||
},
|
||||
{
|
||||
date: "2016-05-01",
|
||||
name: "Tom",
|
||||
address: "No. 189, Grove St, Los Angeles",
|
||||
},
|
||||
];
|
||||
const loading = ref(false);
|
||||
const tableData = ref([]);
|
||||
const rules = {
|
||||
name: {
|
||||
fid: {
|
||||
required: true,
|
||||
message: "Please select Activity zone",
|
||||
message: "请选择部门",
|
||||
trigger: "change",
|
||||
},
|
||||
contactName: {
|
||||
required: true,
|
||||
message: "请填写联系人",
|
||||
trigger: "change",
|
||||
},
|
||||
contactPhone: {
|
||||
required: true,
|
||||
message: "请填写联系电话",
|
||||
trigger: "change",
|
||||
},
|
||||
startDeviceId: {
|
||||
required: true,
|
||||
message: "请填写布控球1ID",
|
||||
trigger: "change",
|
||||
},
|
||||
endDeviceId: {
|
||||
required: true,
|
||||
message: "请填写布控球2ID",
|
||||
trigger: "change",
|
||||
},
|
||||
audio: {
|
||||
required: true,
|
||||
message: "请填写云音响imei",
|
||||
trigger: "change",
|
||||
},
|
||||
};
|
||||
const resetForm = (formEl) => {
|
||||
if (!formEl) return;
|
||||
reset()
|
||||
dialogVisible.value = false;
|
||||
formEl.resetFields();
|
||||
|
||||
};
|
||||
const submitForm = async (formEl) => {
|
||||
if (!formEl) return;
|
||||
await formEl.validate((valid, fields) => {
|
||||
if (valid) {
|
||||
if (form.value.id) {
|
||||
updateSpeedingAlertSettings(form.value).then((r) => {
|
||||
dialogVisible.value = false;
|
||||
reset();
|
||||
formEl.resetFields();
|
||||
getusertlist();
|
||||
});
|
||||
} else {
|
||||
addSpeedingAlertSettings(form.value).then((r) => {
|
||||
dialogVisible.value = false;
|
||||
fname.value="";
|
||||
dateRange.value="";
|
||||
|
||||
reset();
|
||||
formEl.resetFields();
|
||||
getusertlist();
|
||||
});
|
||||
}
|
||||
|
||||
console.log("submit!");
|
||||
} else {
|
||||
console.log("error submit!", fields);
|
||||
}
|
||||
});
|
||||
};
|
||||
function remove() {
|
||||
ElMessageBox.confirm("确定删除该部门?", "提示", {
|
||||
function remove(item) {
|
||||
ElMessageBox.confirm("确定删除该套设备?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
})
|
||||
.then(() => {
|
||||
userStore.logOut().then(() => {
|
||||
location.href = "/index";
|
||||
delSpeedingAlertSettings(item.id).then((r) => {
|
||||
getusertlist();
|
||||
proxy.$modal.msgSuccess("删除成功");
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
}
|
||||
|
||||
function reset() {
|
||||
form.value = {
|
||||
contactName: "",
|
||||
contactPhone: "",
|
||||
startDeviceId: "",
|
||||
endDeviceId: "",
|
||||
audio: "",
|
||||
fid: "",
|
||||
};
|
||||
}
|
||||
// 获取部门数据
|
||||
|
||||
function getthreedata(type = true) {
|
||||
listDepttree().then((res) => {
|
||||
data.value = res.data;
|
||||
});
|
||||
}
|
||||
// 搜索
|
||||
function listSearch(e) {
|
||||
if ((e && e.keyCode && e.keyCode == 13) || !e || e.length) {
|
||||
pageNum.value = 1;
|
||||
getusertlist();
|
||||
}
|
||||
}
|
||||
|
||||
function edit(item) {
|
||||
dialogVisible.value = true;
|
||||
getthreedata();
|
||||
form.value = {
|
||||
id: item.id,
|
||||
contactName: item.contactName,
|
||||
contactPhone: item.contactPhone,
|
||||
startDeviceId: item.startDeviceId,
|
||||
endDeviceId: item.endDeviceId,
|
||||
audio: item.audio,
|
||||
fid: item.fid,
|
||||
};
|
||||
}
|
||||
|
||||
function addequipment() {
|
||||
dialogVisible.value = true;
|
||||
getthreedata();
|
||||
}
|
||||
/** 查询用户列表 */
|
||||
function getusertlist() {
|
||||
loading.value = true;
|
||||
let _dat={
|
||||
pageNum:pageNum.value,
|
||||
pageSize:pageSize.value,
|
||||
fname:fname.value
|
||||
}
|
||||
listSpeedingAlertSettings(proxy.addDateRange(_dat, dateRange.value)).then((res) => {
|
||||
loading.value = false;
|
||||
tableData.value = res.rows;
|
||||
total.value = res.total;
|
||||
});
|
||||
}
|
||||
getusertlist();
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.app-container{
|
||||
background: #F6F6F6;
|
||||
}
|
||||
.app-container :deep(.el-card){
|
||||
box-shadow: initial !important;
|
||||
|
||||
}
|
||||
.top {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
|
@ -256,7 +396,7 @@ function remove() {
|
|||
}
|
||||
}
|
||||
.cardbox {
|
||||
height: calc(100vh - 84px - 30px - 30px - 30px);
|
||||
height: calc(100vh - 128px);
|
||||
}
|
||||
|
||||
.container {
|
||||
|
|
@ -275,26 +415,24 @@ function remove() {
|
|||
height: 17px;
|
||||
}
|
||||
.expandbox {
|
||||
background: #f2f6ff;
|
||||
margin: -8px 0;
|
||||
.box{
|
||||
margin: 0px 120px 0 48px;
|
||||
border-left: 1px solid #E6E6E6;
|
||||
border-right: 1px solid #E6E6E6;
|
||||
.ul{
|
||||
background: #f2f6ff;
|
||||
margin: -8px 0;
|
||||
.box {
|
||||
// margin: 0px 120px 0 48px;
|
||||
border-left: 1px solid #e6e6e6;
|
||||
border-right: 1px solid #e6e6e6;
|
||||
.ul {
|
||||
text-align: center;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding: 10px 15px;
|
||||
border-bottom: 1px solid #E6E6E6;
|
||||
div{
|
||||
border-bottom: 1px solid #e6e6e6;
|
||||
div {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<div>
|
||||
<div class="body">
|
||||
<div class="head">
|
||||
<div class="left">{{ time }}</div>
|
||||
<div class="center">
|
||||
|
|
@ -15,9 +15,9 @@
|
|||
</div>
|
||||
<div class="right">
|
||||
<div class="user">
|
||||
<div>
|
||||
<div style="text-align: right;">
|
||||
<span class="user-nickname"> {{ userStore.nickName }} </span>
|
||||
<span class="typename">{{ userStore.nickName }}</span>
|
||||
<span class="typename">{{ deptName }}</span>
|
||||
</div>
|
||||
<img :src="userStore.avatar" class="user-avatar" />
|
||||
</div>
|
||||
|
|
@ -28,10 +28,24 @@
|
|||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import { useFullscreen } from '@vueuse/core'
|
||||
|
||||
const { isFullscreen, enter, exit, toggle } = useFullscreen()
|
||||
|
||||
|
||||
|
||||
import statisticalTable from "../statisticalTable/index.vue";
|
||||
import useUserStore from "@/store/modules/user";
|
||||
const userStore = useUserStore();
|
||||
import { ElMessageBox } from "element-plus";
|
||||
|
||||
const deptName=ref("")
|
||||
userStore.getInfo().then(r=>{
|
||||
deptName.value=r.deptName;
|
||||
})
|
||||
// if(!isFullscreen){
|
||||
// document.querySelector("body").requestFullscreen()
|
||||
// }
|
||||
function logout() {
|
||||
ElMessageBox.confirm("确定注销并退出系统吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
|
|
@ -64,6 +78,11 @@ function formatTime() {
|
|||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.body{
|
||||
background: #F6F6F6;
|
||||
min-width: 1500px;
|
||||
overflow: auto;
|
||||
}
|
||||
.head {
|
||||
background: linear-gradient(#4f8aff 0%, #1235ca 100%);
|
||||
display: flex;
|
||||
|
|
@ -71,12 +90,13 @@ function formatTime() {
|
|||
padding: 0px 15px;
|
||||
justify-content: space-between;
|
||||
height: 60px;
|
||||
margin-bottom: 50px;
|
||||
margin-bottom: 10px;
|
||||
color: #fff;
|
||||
.center {
|
||||
position: relative;
|
||||
& > img {
|
||||
height: 130px;
|
||||
height: 100px;
|
||||
// width: 556px;
|
||||
}
|
||||
div {
|
||||
position: absolute;
|
||||
|
|
@ -86,10 +106,15 @@ function formatTime() {
|
|||
color: #fff;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
white-space: nowrap;
|
||||
img{
|
||||
width: 30px;
|
||||
}
|
||||
p {
|
||||
margin: 0px 15px;
|
||||
font-weight: 500;
|
||||
font-size: 28px;
|
||||
font-size: 29px;
|
||||
letter-spacing: 4px;
|
||||
color: #ffffff;
|
||||
}
|
||||
}
|
||||
|
|
@ -100,11 +125,13 @@ function formatTime() {
|
|||
height: 100%;
|
||||
.signOut {
|
||||
cursor: pointer;
|
||||
font-size: 14px;
|
||||
|
||||
}
|
||||
.user {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
border-right: 1px solid #d8d8d8;
|
||||
border-right: 1px solid rgba(255,255,255,0.4);
|
||||
margin-right: 15px;
|
||||
height: 100%;
|
||||
img {
|
||||
|
|
@ -115,6 +142,7 @@ function formatTime() {
|
|||
margin: 0px 15px;
|
||||
}
|
||||
div {
|
||||
|
||||
.user-nickname {
|
||||
font-weight: 800;
|
||||
font-size: 12px;
|
||||
|
|
|
|||
|
|
@ -3,52 +3,60 @@
|
|||
<el-form :model="queryParams" ref="queryRef" :inline="true" class="form">
|
||||
<div class="left">
|
||||
<el-form-item label="部门" prop="ipaddr">
|
||||
<el-select
|
||||
v-model="queryParams.ipaddr"
|
||||
placeholder="青选择部门"
|
||||
style="width: 320px"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in 3"
|
||||
:key="item"
|
||||
:label="item"
|
||||
:value="item"
|
||||
/>
|
||||
</el-select>
|
||||
<el-tree-select
|
||||
style="width: 250px"
|
||||
v-model="form.deptId"
|
||||
:data="departmentlist"
|
||||
@change="change"
|
||||
:props="{
|
||||
value: 'deptId',
|
||||
label: 'deptName',
|
||||
children: 'children',
|
||||
}"
|
||||
value-key="deptId"
|
||||
placeholder="请选择归属部门"
|
||||
clearable
|
||||
check-strictly
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="时间范围" prop="userName">
|
||||
<el-date-picker
|
||||
style="width: 320px"
|
||||
v-model="value2"
|
||||
type="month"
|
||||
style="width: 250px"
|
||||
v-model="form.value"
|
||||
type="daterange"
|
||||
value-format="YYYY-MM-DD"
|
||||
placeholder="请选择时间"
|
||||
range-separator="⇀"
|
||||
start-placeholder="开始时间"
|
||||
end-placeholder="结束时间"
|
||||
:disabled-date="disabledDate"
|
||||
:shortcuts="shortcuts"
|
||||
@change="change"
|
||||
:size="size"
|
||||
/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="right">
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery"
|
||||
<el-form-item style="margin-right: 0px">
|
||||
<el-button type="primary" icon="Search" @click="change"
|
||||
>搜索</el-button
|
||||
>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</el-form>
|
||||
<el-row :gutter="10" class="rowbox">
|
||||
<el-row :gutter="10" v-loading="loadingecharts" class="rowbox">
|
||||
<el-col :span="6">
|
||||
<el-card class="quantity">
|
||||
<div class="num">32</div>
|
||||
<div class="title">设备总套数</div>
|
||||
<div class="num">{{ datainfo.device?.total || 0 }}</div>
|
||||
<div class="title">设备总个数</div>
|
||||
<div class="ul">
|
||||
<div class="item">
|
||||
<p>64</p>
|
||||
<p>{{ datainfo.device?.online || 0 }}</p>
|
||||
<span>在线</span>
|
||||
</div>
|
||||
<div class="item">
|
||||
<p>0</p>
|
||||
<p>{{ datainfo.device?.offline || 0 }}</p>
|
||||
<span>离线</span>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -56,15 +64,33 @@
|
|||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-card class="quantity">
|
||||
<div class="num">32</div>
|
||||
<div class="num">{{ datainfo.traffic?.passCount || 0 }}</div>
|
||||
<div class="title">过车数量</div>
|
||||
<div class="ul">
|
||||
<div class="item">
|
||||
<p>64</p>
|
||||
<p>
|
||||
{{ datainfo.device?.yoy || 0 }}
|
||||
<template v-if="datainfo.device?.yoytype != 0">
|
||||
<img
|
||||
v-if="datainfo.device?.yoytype > 0"
|
||||
src="@/assets/images/upper.png"
|
||||
/>
|
||||
<img v-else src="@/assets/images/lower.png" />
|
||||
</template>
|
||||
</p>
|
||||
<span>同比</span>
|
||||
</div>
|
||||
<div class="item">
|
||||
<p>0</p>
|
||||
<p>
|
||||
{{ datainfo.device?.mom || 0 }}
|
||||
<template v-if="datainfo.device?.momtype != 0">
|
||||
<img
|
||||
v-if="datainfo.device?.momtype > 0"
|
||||
src="@/assets/images/upper.png"
|
||||
/>
|
||||
<img v-else src="@/assets/images/lower.png" />
|
||||
</template>
|
||||
</p>
|
||||
<span>环比</span>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -75,14 +101,18 @@
|
|||
<div class="earlyWarning">
|
||||
<div class="lfet">
|
||||
<div class="item">
|
||||
<h3>1290</h3>
|
||||
<h3>{{ datainfo.warning?.alertCount || 0 }}</h3>
|
||||
<p>预警数量</p>
|
||||
<div>预警比:<span>16%</span></div>
|
||||
<div>
|
||||
预警比:<span>{{ datainfo.warning?.warningRatio || 0 }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<h3>1290</h3>
|
||||
<p>预警数量</p>
|
||||
<div>预警比:<span>16%</span></div>
|
||||
<h3>{{ datainfo.warning?.seizureCount || 0 }}</h3>
|
||||
<p>查扣车辆</p>
|
||||
<div>
|
||||
查扣比:<span>{{ datainfo.warning?.seizureRatio || 0 }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="echarts1" ref="echarts1"></div>
|
||||
|
|
@ -90,10 +120,10 @@
|
|||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="10" class="rowbox">
|
||||
<el-row :gutter="10" v-loading="loadingecharts" class="rowbox">
|
||||
<el-col :span="6">
|
||||
<el-card class="cardtime">
|
||||
<div class="title">最近7天执法时长统计</div>
|
||||
<div class="title">执法时长统计</div>
|
||||
<div id="echarts2" ref="echarts2"></div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
|
|
@ -107,19 +137,19 @@
|
|||
<div class="right">
|
||||
<div class="item">
|
||||
<div class="title">超速10%以下</div>
|
||||
<div class="num">629</div>
|
||||
<div class="num">{{ datainfo.overspeed?.under10 || 0 }}</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="title">超速10%-20%</div>
|
||||
<div class="num">629</div>
|
||||
<div class="num">{{ datainfo.overspeed?.sto20 || 0 }}</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="title">超速20%-50%</div>
|
||||
<div class="num">629</div>
|
||||
<div class="num">{{ datainfo.overspeed?.eto50 || 0 }}</div>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="title">超速50%以上</div>
|
||||
<div class="num">629</div>
|
||||
<div class="num">{{ datainfo.overspeed?.over50 || 0 }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -127,7 +157,7 @@
|
|||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-card class="speeding">
|
||||
<div class="title">最近7天车辆超速情况统计</div>
|
||||
<div class="title">车辆超速情况统计</div>
|
||||
<div id="echarts4" ref="echarts4"></div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
|
|
@ -135,111 +165,307 @@
|
|||
<el-card class="bottomdata">
|
||||
<div class="top">
|
||||
<div class="left">
|
||||
<div class="on">大队设备使用情况</div>
|
||||
<div>中队设备使用情况</div>
|
||||
<!-- class="on" -->
|
||||
<!-- <template v-if="userStore.deptLevel == 0">
|
||||
<div>支队设备使用情况</div>
|
||||
<div>大队设备使用情况</div>
|
||||
<div>中队设备使用情况</div>
|
||||
</template> -->
|
||||
|
||||
<template v-if="user.deptLevel == 1 || user.deptLevel == 0">
|
||||
<div @click="settype(1)" :class="{ on: form2.deptLevel == 1 }">
|
||||
支队设备使用情况
|
||||
</div>
|
||||
<div @click="settype(2)" :class="{ on: form2.deptLevel == 2 }">
|
||||
大队设备使用情况
|
||||
</div>
|
||||
<div @click="settype(3)" :class="{ on: form2.deptLevel == 3 }">
|
||||
中队设备使用情况
|
||||
</div>
|
||||
</template>
|
||||
<template v-if="user.deptLevel == 2">
|
||||
<div @click="settype(2)" :class="{ on: form2.deptLevel == 2 }">
|
||||
大队设备使用情况
|
||||
</div>
|
||||
<div @click="settype(3)" :class="{ on: form2.deptLevel == 3 }">
|
||||
中队设备使用情况
|
||||
</div>
|
||||
</template>
|
||||
<!-- <template v-if="user.deptLevel == 3">
|
||||
<div>中队设备使用情况</div>
|
||||
</template> -->
|
||||
</div>
|
||||
<div class="right">
|
||||
<div class="day">
|
||||
<div class="title">时间范围:</div>
|
||||
<div class="day">
|
||||
<div class="title">时间范围:</div>
|
||||
<el-date-picker
|
||||
style="width: 320px"
|
||||
v-model="value2"
|
||||
type="month"
|
||||
style="width: 250px"
|
||||
v-model="form2.value"
|
||||
type="daterange"
|
||||
placeholder="请选择时间"
|
||||
value-format="YYYY-MM-DD"
|
||||
range-separator="⇀"
|
||||
start-placeholder="开始时间"
|
||||
end-placeholder="结束时间"
|
||||
:disabled-date="disabledDate"
|
||||
:shortcuts="shortcuts"
|
||||
:size="size"
|
||||
@change="change2"
|
||||
/>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<el-input
|
||||
v-model="input2"
|
||||
style="width: 240px"
|
||||
placeholder="Please Input"
|
||||
:suffix-icon="Search"
|
||||
/>
|
||||
|
||||
</div>
|
||||
|
||||
<el-button type="primary" plain>导出Ecxle表格</el-button>
|
||||
<div class="day">
|
||||
<div class="title">部门:</div>
|
||||
<el-tree-select
|
||||
style="width: 250px"
|
||||
v-model="form2.deptId"
|
||||
:data="departmentlist"
|
||||
@change="change2"
|
||||
:props="{
|
||||
value: 'deptId',
|
||||
label: 'deptName',
|
||||
children: 'children',
|
||||
}"
|
||||
value-key="deptId"
|
||||
placeholder="请选择归属部门"
|
||||
clearable
|
||||
check-strictly
|
||||
/>
|
||||
</div>
|
||||
|
||||
<el-button type="primary" plain @click="handleExport"
|
||||
>导出Ecxle表格</el-button
|
||||
>
|
||||
<el-button type="primary" @click="change2">查询</el-button>
|
||||
<el-button plain @click="recharge">重置</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<el-table :data="tableData" border style="width: 100%">
|
||||
<el-table-column sortable prop="date" label="Date" width="180" />
|
||||
<el-table-column prop="name" label="Name" width="180" />
|
||||
<el-table-column prop="address" label="Address" />
|
||||
<el-table
|
||||
v-loading="loading"
|
||||
:data="Tableinfo"
|
||||
border
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-table-column type="index" label="序号" width="120" align="center">
|
||||
<template #default="{ row, $index }">
|
||||
{{ $index + 1 }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="deptName" align="center" label="部门名称" />
|
||||
<el-table-column
|
||||
prop="deviceTotal"
|
||||
align="center"
|
||||
sortable
|
||||
label="设备总个数"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="deviceHours"
|
||||
align="center"
|
||||
sortable
|
||||
label="设备使用总时长(小时)"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="passTotal"
|
||||
align="center"
|
||||
sortable
|
||||
label="筛查过车数量"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="alertTotal"
|
||||
align="center"
|
||||
sortable
|
||||
label="预警数量"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="under10"
|
||||
align="center"
|
||||
sortable
|
||||
label="超速10%以下"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="sto20"
|
||||
align="center"
|
||||
sortable
|
||||
label="超速10%-20%"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="eto50"
|
||||
align="center"
|
||||
sortable
|
||||
label="超速20%-50%"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="over50"
|
||||
align="center"
|
||||
sortable
|
||||
label="超速50%以上"
|
||||
/>
|
||||
|
||||
<el-table-column
|
||||
prop="enforceTotal"
|
||||
align="center"
|
||||
label="执法数量"
|
||||
sortable
|
||||
/>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import useUserStore from "@/store/modules/user";
|
||||
const userStore = useUserStore();
|
||||
const { proxy } = getCurrentInstance();
|
||||
import dayjs from 'dayjs';
|
||||
import * as echarts from "echarts";
|
||||
import { Right, Search } from "@element-plus/icons-vue";
|
||||
import { ref } from "vue";
|
||||
|
||||
import { deptList, dashboard, dailyTable } from "@/api/system/largeScreen.js";
|
||||
const queryParams = ref({
|
||||
ipaddr: "",
|
||||
userName: "",
|
||||
});
|
||||
const user = ref({});
|
||||
const loading = ref(false);
|
||||
const loadingecharts = ref(false);
|
||||
userStore.getInfo().then((r) => {
|
||||
console.log(r, 8888);
|
||||
user.value = r;
|
||||
});
|
||||
let drawechar1;
|
||||
let drawechar2;
|
||||
let drawechar3;
|
||||
let drawechar4;
|
||||
|
||||
const yesterday = dayjs().subtract(1, 'day').format('YYYY-MM-DD');
|
||||
const form = ref({
|
||||
deptId: "",
|
||||
value: [yesterday,yesterday],
|
||||
});
|
||||
const form2 = ref({
|
||||
deptId: "",
|
||||
deptLevel: "",
|
||||
value: [yesterday, yesterday],
|
||||
});
|
||||
const echarts1 = ref("");
|
||||
const echarts2 = ref("");
|
||||
const echarts3 = ref("");
|
||||
const echarts4 = ref("");
|
||||
function resetQuery() {}
|
||||
function handleQuery() {}
|
||||
const departmentlist = ref([]);
|
||||
const datainfo = ref({});
|
||||
const Tableinfo = ref([]);
|
||||
function resetQuery() {
|
||||
form.value = {
|
||||
deptId: "",
|
||||
value: [],
|
||||
};
|
||||
change();
|
||||
}
|
||||
function settype(type) {
|
||||
if (form2.value.deptLevel != type) {
|
||||
form2.value.deptLevel = type;
|
||||
} else {
|
||||
form2.value.deptLevel = "";
|
||||
}
|
||||
change2();
|
||||
}
|
||||
/** 导出按钮操作 */
|
||||
function handleExport() {
|
||||
let _data = {
|
||||
deptId: form2.value.deptId,
|
||||
startDate: form2.value.value[0] || "",
|
||||
endDate: form2.value.value[1] || "",
|
||||
deptLevel: form2.value.deptLevel,
|
||||
};
|
||||
proxy.download(
|
||||
"/system/statistics/dailyTable/export",
|
||||
_data,
|
||||
`AppVersionRelease_${new Date().getTime()}.xlsx`
|
||||
);
|
||||
}
|
||||
const disabledDate = (time) => {
|
||||
return time.getTime() > Date.now();
|
||||
};
|
||||
const tableData = [
|
||||
{
|
||||
date: "2016-05-03",
|
||||
name: "Tom",
|
||||
address: "No. 189, Grove St, Los Angeles",
|
||||
},
|
||||
{
|
||||
date: "2016-05-02",
|
||||
name: "Tom",
|
||||
address: "No. 189, Grove St, Los Angeles",
|
||||
},
|
||||
{
|
||||
date: "2016-05-04",
|
||||
name: "Tom",
|
||||
address: "No. 189, Grove St, Los Angeles",
|
||||
},
|
||||
{
|
||||
date: "2016-05-01",
|
||||
name: "Tom",
|
||||
address: "No. 189, Grove St, Los Angeles",
|
||||
},
|
||||
];
|
||||
|
||||
const shortcuts = [
|
||||
{
|
||||
text: "昨天",
|
||||
value: new Date(),
|
||||
value: () => {
|
||||
|
||||
return [ dayjs().subtract(1, 'day').format('YYYY-MM-DD'), dayjs().subtract(1, 'day').format('YYYY-MM-DD')];
|
||||
},
|
||||
},
|
||||
{
|
||||
text: "最近7天",
|
||||
value: () => {
|
||||
const date = new Date();
|
||||
date.setTime(date.getTime() - 3600 * 1000 * 24);
|
||||
return date;
|
||||
|
||||
return [dayjs().subtract(8, 'day').format('YYYY-MM-DD'), dayjs().subtract(1, 'day').format('YYYY-MM-DD')];
|
||||
},
|
||||
},
|
||||
{
|
||||
text: "最近30天",
|
||||
value: () => {
|
||||
const date = new Date();
|
||||
date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
|
||||
return date;
|
||||
return [dayjs().subtract(31, 'day').format('YYYY-MM-DD'), dayjs().subtract(1, 'day').format('YYYY-MM-DD')];
|
||||
},
|
||||
},
|
||||
{
|
||||
text: "最近90天",
|
||||
value: () => {
|
||||
return [dayjs().subtract(91, 'day').format('YYYY-MM-DD'), dayjs().subtract(1, 'day').format('YYYY-MM-DD')];
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
function change() {
|
||||
getdata();
|
||||
}
|
||||
|
||||
function getdata() {
|
||||
loadingecharts.value = true;
|
||||
let _data = {
|
||||
deptId: form.value.deptId,
|
||||
startDate: form.value.value[0] || "",
|
||||
endDate: form.value.value[1] || "",
|
||||
};
|
||||
dashboard(_data).then((r) => {
|
||||
datainfo.value = r.data;
|
||||
loadingecharts.value = false;
|
||||
init();
|
||||
});
|
||||
}
|
||||
|
||||
function recharge() {
|
||||
form2.value = {
|
||||
deptId: "",
|
||||
value: [],
|
||||
deptLevel: "",
|
||||
};
|
||||
change2();
|
||||
}
|
||||
function change2() {
|
||||
gettable();
|
||||
}
|
||||
|
||||
function gettable() {
|
||||
loading.value = true;
|
||||
|
||||
let _data = {
|
||||
deptId: form2.value.deptId,
|
||||
startDate: form2.value.value[0] || "",
|
||||
endDate: form2.value.value[1] || "",
|
||||
deptLevel: form2.value.deptLevel,
|
||||
};
|
||||
dailyTable(_data).then((r) => {
|
||||
Tableinfo.value = r.data;
|
||||
loading.value = false;
|
||||
});
|
||||
}
|
||||
// const usedmemoryInstance = echarts.init(usedmemory.value, "macarons");
|
||||
|
||||
function init() {
|
||||
const drawechar1 = echarts.init(echarts1.value, "macarons");
|
||||
drawechar1 = echarts.init(echarts1.value, "macarons");
|
||||
|
||||
drawechar1.setOption({
|
||||
tooltip: {
|
||||
trigger: "axis",
|
||||
|
|
@ -269,15 +495,16 @@ function init() {
|
|||
{
|
||||
type: "bar",
|
||||
barWidth: 24,
|
||||
|
||||
data: [
|
||||
{
|
||||
value: 200,
|
||||
value: datainfo.value?.warning?.alertCount || 0,
|
||||
itemStyle: {
|
||||
color: "#FF8606",
|
||||
},
|
||||
},
|
||||
{
|
||||
value: 500,
|
||||
value: datainfo.value?.warning?.seizureCount || 0,
|
||||
itemStyle: {
|
||||
color: "#C307B6",
|
||||
},
|
||||
|
|
@ -287,12 +514,19 @@ function init() {
|
|||
],
|
||||
});
|
||||
|
||||
const drawechar2 = echarts.init(echarts2.value, "macarons");
|
||||
drawechar2 = echarts.init(echarts2.value, "macarons");
|
||||
drawechar2.setOption({
|
||||
tooltip: {
|
||||
trigger: "axis",
|
||||
formatter: "{c}小时 ",
|
||||
axisPointer: {
|
||||
type: "shadow",
|
||||
},
|
||||
},
|
||||
color: ["#4D7BFF"],
|
||||
xAxis: {
|
||||
type: "category",
|
||||
data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
|
||||
data: datainfo.value.durationTrend?.map((r) => r.date) || [],
|
||||
},
|
||||
yAxis: {
|
||||
type: "value",
|
||||
|
|
@ -301,36 +535,47 @@ function init() {
|
|||
show: false,
|
||||
},
|
||||
dataZoom: [
|
||||
{
|
||||
type: "inside",
|
||||
},
|
||||
{
|
||||
type: "slider",
|
||||
zoomLock: true,
|
||||
minValueSpan: datainfo.value.durationTrend[0]?.date || 0,
|
||||
maxValueSpan: datainfo.value.durationTrend[6]?.date || 0,
|
||||
brushSelect: false,
|
||||
show: datainfo.value.durationTrend.length > 6 ? true : false,
|
||||
height: 15,
|
||||
bottom: 0,
|
||||
},
|
||||
],
|
||||
grid: {
|
||||
top: 40,
|
||||
right: 0,
|
||||
bottom: 15,
|
||||
right: 10,
|
||||
bottom: datainfo.value.durationTrend.length > 6 ? 15 : 0,
|
||||
left: 0,
|
||||
containLabel: true,
|
||||
},
|
||||
series: [
|
||||
{
|
||||
barWidth: 24,
|
||||
data: [120, 200, 150, 80, 70, 110, 130],
|
||||
barWidth: 20,
|
||||
barGap: "50%",
|
||||
barCategoryGap: "50%",
|
||||
data: datainfo.value.durationTrend?.map((r) => r.hours) || [],
|
||||
type: "bar",
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
const drawechar3 = echarts.init(echarts3.value, "macarons");
|
||||
drawechar3 = echarts.init(echarts3.value, "macarons");
|
||||
drawechar3.setOption({
|
||||
color: ["#4D7BFF", "#FF8606", "#FF2A06", "#C307B6"],
|
||||
legend: {
|
||||
show: false,
|
||||
},
|
||||
tooltip: {
|
||||
trigger: "item",
|
||||
formatter: "{b}: {c} ",
|
||||
},
|
||||
grid: {
|
||||
right: 0,
|
||||
right: 10,
|
||||
left: 0,
|
||||
},
|
||||
series: [
|
||||
|
|
@ -347,23 +592,21 @@ function init() {
|
|||
position: "center",
|
||||
},
|
||||
data: [
|
||||
{ value: 1048, name: "Search Engine" },
|
||||
{ value: 735, name: "Direct" },
|
||||
{ value: 580, name: "Email" },
|
||||
{ value: 484, name: "Union Ads" },
|
||||
{ value: 300, name: "Video Ads" },
|
||||
{ value: datainfo.value.overspeed.under10, name: "超速10%以下" },
|
||||
{ value: datainfo.value.overspeed.sto20, name: "超速10%-20%" },
|
||||
{ value: datainfo.value.overspeed.eto50, name: "超速20%-50%" },
|
||||
{ value: datainfo.value.overspeed.over50, name: "超速50%以上" },
|
||||
],
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
const drawechar4 = echarts.init(echarts4.value, "macarons");
|
||||
drawechar4 = echarts.init(echarts4.value, "macarons");
|
||||
drawechar4.setOption({
|
||||
color: ["#4D7BFF", "#FF8606", "#FF2A06", "#C307B6"],
|
||||
|
||||
xAxis: {
|
||||
type: "category",
|
||||
data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
|
||||
data: datainfo.value.overspeedTrend.map((r) => r.date),
|
||||
},
|
||||
yAxis: {
|
||||
type: "value",
|
||||
|
|
@ -378,61 +621,86 @@ function init() {
|
|||
},
|
||||
},
|
||||
dataZoom: [
|
||||
{
|
||||
type: "inside",
|
||||
},
|
||||
{
|
||||
type: "slider",
|
||||
zoomLock: true,
|
||||
minValueSpan: datainfo.value.overspeedTrend[0]?.date || 0,
|
||||
maxValueSpan: datainfo.value.overspeedTrend[6]?.date || 0,
|
||||
brushSelect: false,
|
||||
show: datainfo.value.overspeedTrend.length > 6 ? true : false,
|
||||
height: 15,
|
||||
bottom: 0,
|
||||
},
|
||||
],
|
||||
grid: {
|
||||
top: 40,
|
||||
right: 0,
|
||||
bottom: 15,
|
||||
bottom: datainfo.value.overspeedTrend.length > 6 ? 15 : 0,
|
||||
left: 0,
|
||||
containLabel: true,
|
||||
},
|
||||
series: [
|
||||
{
|
||||
barWidth: 15,
|
||||
barWidth: 18,
|
||||
name: "超速10%以下",
|
||||
data: [120, 200, 150, 80, 70, 110, 130],
|
||||
data: datainfo.value.overspeedTrend.map((r) => r.under10),
|
||||
type: "bar",
|
||||
},
|
||||
{
|
||||
name: "超速10%-20%",
|
||||
barWidth: 15,
|
||||
data: [120, 200, 150, 80, 70, 110, 130],
|
||||
barWidth: 18,
|
||||
data: datainfo.value.overspeedTrend.map((r) => r.sto20),
|
||||
type: "bar",
|
||||
},
|
||||
{
|
||||
name: "超速20%-50%",
|
||||
barWidth: 15,
|
||||
data: [120, 200, 150, 80, 70, 110, 130],
|
||||
barWidth: 18,
|
||||
data: datainfo.value.overspeedTrend.map((r) => r.eto50),
|
||||
type: "bar",
|
||||
},
|
||||
{
|
||||
name: "超速50%以上",
|
||||
barWidth: 15,
|
||||
data: [120, 200, 150, 80, 70, 110, 130],
|
||||
barWidth: 18,
|
||||
data: datainfo.value.overspeedTrend.map((r) => r.over50),
|
||||
type: "bar",
|
||||
},
|
||||
],
|
||||
});
|
||||
}
|
||||
nextTick(() => {
|
||||
init();
|
||||
// init();
|
||||
change2();
|
||||
change();
|
||||
});
|
||||
function resize() {
|
||||
// commandstatsIntance.resize()
|
||||
// usedmemoryInstance.resize()
|
||||
drawechar1.resize();
|
||||
drawechar2.resize();
|
||||
drawechar3.resize();
|
||||
drawechar4.resize();
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
deptList().then((r) => {
|
||||
departmentlist.value = r.data;
|
||||
});
|
||||
getdata();
|
||||
});
|
||||
window.addEventListener("resize", () => {
|
||||
resize();
|
||||
// resize();
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.app-container {
|
||||
background: #f6f6f6;
|
||||
min-width: 1500px;
|
||||
}
|
||||
.app-container :deep(.el-card) {
|
||||
box-shadow: initial !important;
|
||||
.el-card__body {
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
.rowbox {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
|
@ -465,6 +733,14 @@ window.addEventListener("resize", () => {
|
|||
font-size: 22px;
|
||||
margin: 0px;
|
||||
margin-bottom: 5px;
|
||||
position: relative;
|
||||
img {
|
||||
width: 12px;
|
||||
height: 16px;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
transform: translate(50%, -50%);
|
||||
}
|
||||
}
|
||||
span {
|
||||
font-size: 14px;
|
||||
|
|
@ -519,6 +795,7 @@ window.addEventListener("resize", () => {
|
|||
}
|
||||
}
|
||||
.cardtime {
|
||||
height: 100%;
|
||||
.title {
|
||||
font-weight: 600;
|
||||
font-size: 16px;
|
||||
|
|
@ -526,7 +803,7 @@ window.addEventListener("resize", () => {
|
|||
}
|
||||
#echarts2 {
|
||||
width: 100%;
|
||||
height: 300px;
|
||||
height: calc(100% - 20px);
|
||||
}
|
||||
}
|
||||
.cardtype {
|
||||
|
|
@ -540,7 +817,7 @@ window.addEventListener("resize", () => {
|
|||
color: #333333;
|
||||
}
|
||||
#echarts3 {
|
||||
height: 290px;
|
||||
height: calc(100% - 20px);
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
|
@ -603,6 +880,7 @@ window.addEventListener("resize", () => {
|
|||
}
|
||||
.speeding {
|
||||
position: relative;
|
||||
height: 100%;
|
||||
.title {
|
||||
font-weight: 600;
|
||||
font-size: 16px;
|
||||
|
|
@ -611,15 +889,19 @@ window.addEventListener("resize", () => {
|
|||
}
|
||||
#echarts4 {
|
||||
width: 100%;
|
||||
height: 320px;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.bottomdata {
|
||||
.top {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding-bottom: 15px;
|
||||
:deep(.el-button) {
|
||||
margin-left: 0px;
|
||||
}
|
||||
.left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
|
@ -627,7 +909,13 @@ window.addEventListener("resize", () => {
|
|||
border-radius: 3px;
|
||||
overflow: hidden;
|
||||
div {
|
||||
padding: 10px 15px;
|
||||
padding: 7px 15px;
|
||||
font-size: 13px;
|
||||
border-left: 1px solid #d5d5d5;
|
||||
cursor: pointer;
|
||||
&:nth-of-type(1) {
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
.on {
|
||||
background: #4d7bff;
|
||||
|
|
@ -638,7 +926,7 @@ window.addEventListener("resize", () => {
|
|||
display: flex;
|
||||
gap: 15px;
|
||||
align-items: center;
|
||||
.day{
|
||||
.day {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import { defineConfig, loadEnv } from 'vite'
|
||||
import path from 'path'
|
||||
import createVitePlugins from './vite/plugins'
|
||||
const baseUrl = 'http://192.168.1.6:8566' // 后端接口
|
||||
const baseUrl = 'http://192.168.1.7:9005' // 后端接口
|
||||
// const baseUrl = 'https://api.huafurenjia.cn'
|
||||
// https://vitejs.dev/config/
|
||||
export default defineConfig(({ mode, command }) => {
|
||||
|
|
@ -41,7 +41,7 @@ export default defineConfig(({ mode, command }) => {
|
|||
},
|
||||
// vite 相关配置
|
||||
server: {
|
||||
port: 80,
|
||||
port: 8080,
|
||||
host: true,
|
||||
open: true,
|
||||
proxy: {
|
||||
|
|
|
|||