Compare commits

...

2 Commits

Author SHA1 Message Date
BianLzhaoMin a7b5eb355f 冲突合并 2025-04-14 16:19:28 +08:00
BianLzhaoMin 73cfe3908f 解决启动时warning 增加感知设备管理模块 2025-04-14 16:17:04 +08:00
16 changed files with 1817 additions and 1457 deletions

View File

@ -1,10 +1,10 @@
# 页面标题 # 页面标题
VUE_APP_TITLE = 博诺思管理系统 VUE_APP_TITLE = 智慧工地
# 开发环境配置 # 开发环境配置
ENV = 'development' ENV = 'development'
# 博诺思管理系统/开发环境 # 智慧工地/开发环境
VUE_APP_BASE_API = '/dev-api' VUE_APP_BASE_API = '/dev-api'
# 路由懒加载 # 路由懒加载

View File

@ -1,8 +1,8 @@
# 页面标题 # 页面标题
VUE_APP_TITLE = 博诺思管理系统 VUE_APP_TITLE = 智慧工地
# 生产环境配置 # 生产环境配置
ENV = 'production' ENV = 'production'
# 博诺思管理系统/生产环境 # 智慧工地/生产环境
VUE_APP_BASE_API = '/prod-api' VUE_APP_BASE_API = '/prod-api'

View File

@ -1,10 +1,10 @@
# 页面标题 # 页面标题
VUE_APP_TITLE = 博诺思管理系统 VUE_APP_TITLE = 智慧工地
NODE_ENV = production NODE_ENV = production
# 测试环境配置 # 测试环境配置
ENV = 'staging' ENV = 'staging'
# 博诺思管理系统/测试环境 # 智慧工地/测试环境
VUE_APP_BASE_API = '/stage-api' VUE_APP_BASE_API = '/stage-api'

85
package-lock.json generated
View File

@ -5407,9 +5407,10 @@
}, },
"node_modules/core-js": { "node_modules/core-js": {
"version": "3.25.3", "version": "3.25.3",
"resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.25.3.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/core-js/-/core-js-3.25.3.tgz",
"integrity": "sha512-y1hvKXmPHvm5B7w4ln1S4uc9eV/O5+iFExSRUimnvIph11uaizFR8LFMdONN8hG3P2pipUfX4Y/fR8rAEtcHcQ==", "integrity": "sha512-y1hvKXmPHvm5B7w4ln1S4uc9eV/O5+iFExSRUimnvIph11uaizFR8LFMdONN8hG3P2pipUfX4Y/fR8rAEtcHcQ==",
"hasInstallScript": true, "hasInstallScript": true,
"license": "MIT",
"funding": { "funding": {
"type": "opencollective", "type": "opencollective",
"url": "https://opencollective.com/core-js" "url": "https://opencollective.com/core-js"
@ -5913,8 +5914,9 @@
}, },
"node_modules/decompress-response": { "node_modules/decompress-response": {
"version": "6.0.0", "version": "6.0.0",
"resolved": "https://registry.npmmirror.com/decompress-response/-/decompress-response-6.0.0.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/decompress-response/-/decompress-response-6.0.0.tgz",
"integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
"license": "MIT",
"dependencies": { "dependencies": {
"mimic-response": "^3.1.0" "mimic-response": "^3.1.0"
}, },
@ -6844,8 +6846,9 @@
}, },
"node_modules/es6-promise": { "node_modules/es6-promise": {
"version": "4.2.8", "version": "4.2.8",
"resolved": "https://registry.npmmirror.com/es6-promise/-/es6-promise-4.2.8.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/es6-promise/-/es6-promise-4.2.8.tgz",
"integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==",
"license": "MIT"
}, },
"node_modules/escalade": { "node_modules/escalade": {
"version": "3.2.0", "version": "3.2.0",
@ -7880,8 +7883,9 @@
}, },
"node_modules/flv.js": { "node_modules/flv.js": {
"version": "1.6.2", "version": "1.6.2",
"resolved": "https://registry.npmmirror.com/flv.js/-/flv.js-1.6.2.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/flv.js/-/flv.js-1.6.2.tgz",
"integrity": "sha512-xre4gUbX1MPtgQRKj2pxJENp/RnaHaxYvy3YToVVCrSmAWUu85b9mug6pTXF6zakUjNP2lFWZ1rkSX7gxhB/2A==", "integrity": "sha512-xre4gUbX1MPtgQRKj2pxJENp/RnaHaxYvy3YToVVCrSmAWUu85b9mug6pTXF6zakUjNP2lFWZ1rkSX7gxhB/2A==",
"license": "Apache-2.0",
"dependencies": { "dependencies": {
"es6-promise": "^4.2.8", "es6-promise": "^4.2.8",
"webworkify-webpack": "^2.1.5" "webworkify-webpack": "^2.1.5"
@ -9960,8 +9964,9 @@
}, },
"node_modules/js-binary-schema-parser": { "node_modules/js-binary-schema-parser": {
"version": "2.0.3", "version": "2.0.3",
"resolved": "https://registry.npmmirror.com/js-binary-schema-parser/-/js-binary-schema-parser-2.0.3.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/js-binary-schema-parser/-/js-binary-schema-parser-2.0.3.tgz",
"integrity": "sha512-xezGJmOb4lk/M1ZZLTR/jaBHQ4gG/lqQnJqdIv4721DMggsa1bDVlHXNeHYogaIEHD9vCRv0fcL4hMA+Coarkg==" "integrity": "sha512-xezGJmOb4lk/M1ZZLTR/jaBHQ4gG/lqQnJqdIv4721DMggsa1bDVlHXNeHYogaIEHD9vCRv0fcL4hMA+Coarkg==",
"license": "MIT"
}, },
"node_modules/js-cookie": { "node_modules/js-cookie": {
"version": "3.0.1", "version": "3.0.1",
@ -10946,8 +10951,9 @@
}, },
"node_modules/mimic-response": { "node_modules/mimic-response": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmmirror.com/mimic-response/-/mimic-response-3.1.0.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/mimic-response/-/mimic-response-3.1.0.tgz",
"integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
"license": "MIT",
"engines": { "engines": {
"node": ">=10" "node": ">=10"
}, },
@ -12135,8 +12141,9 @@
}, },
"node_modules/parenthesis": { "node_modules/parenthesis": {
"version": "3.1.8", "version": "3.1.8",
"resolved": "https://registry.npmmirror.com/parenthesis/-/parenthesis-3.1.8.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/parenthesis/-/parenthesis-3.1.8.tgz",
"integrity": "sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw==" "integrity": "sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw==",
"license": "MIT"
}, },
"node_modules/parse-asn1": { "node_modules/parse-asn1": {
"version": "5.1.7", "version": "5.1.7",
@ -14849,7 +14856,7 @@
}, },
"node_modules/simple-concat": { "node_modules/simple-concat": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmmirror.com/simple-concat/-/simple-concat-1.0.1.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/simple-concat/-/simple-concat-1.0.1.tgz",
"integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
"funding": [ "funding": [
{ {
@ -14864,11 +14871,12 @@
"type": "consulting", "type": "consulting",
"url": "https://feross.org/support" "url": "https://feross.org/support"
} }
] ],
"license": "MIT"
}, },
"node_modules/simple-get": { "node_modules/simple-get": {
"version": "4.0.1", "version": "4.0.1",
"resolved": "https://registry.npmmirror.com/simple-get/-/simple-get-4.0.1.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/simple-get/-/simple-get-4.0.1.tgz",
"integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
"funding": [ "funding": [
{ {
@ -14884,6 +14892,7 @@
"url": "https://feross.org/support" "url": "https://feross.org/support"
} }
], ],
"license": "MIT",
"dependencies": { "dependencies": {
"decompress-response": "^6.0.0", "decompress-response": "^6.0.0",
"once": "^1.3.1", "once": "^1.3.1",
@ -15461,8 +15470,9 @@
}, },
"node_modules/string-split-by": { "node_modules/string-split-by": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmmirror.com/string-split-by/-/string-split-by-1.0.0.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/string-split-by/-/string-split-by-1.0.0.tgz",
"integrity": "sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A==", "integrity": "sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A==",
"license": "MIT",
"dependencies": { "dependencies": {
"parenthesis": "^3.1.5" "parenthesis": "^3.1.5"
} }
@ -17535,8 +17545,9 @@
}, },
"node_modules/vue-qr": { "node_modules/vue-qr": {
"version": "4.0.9", "version": "4.0.9",
"resolved": "https://registry.npmmirror.com/vue-qr/-/vue-qr-4.0.9.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/vue-qr/-/vue-qr-4.0.9.tgz",
"integrity": "sha512-pAISV94T0MNEYA3NGjykUpsXRE2QfaNxlu9ZhEL6CERgqNc21hJYuP3hRVzAWfBQlgO18DPmZTbrFerJC3+Ikw==", "integrity": "sha512-pAISV94T0MNEYA3NGjykUpsXRE2QfaNxlu9ZhEL6CERgqNc21hJYuP3hRVzAWfBQlgO18DPmZTbrFerJC3+Ikw==",
"license": "MIT",
"dependencies": { "dependencies": {
"glob": "^8.0.1", "glob": "^8.0.1",
"js-binary-schema-parser": "^2.0.2", "js-binary-schema-parser": "^2.0.2",
@ -17546,17 +17557,19 @@
}, },
"node_modules/vue-qr/node_modules/brace-expansion": { "node_modules/vue-qr/node_modules/brace-expansion": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"license": "MIT",
"dependencies": { "dependencies": {
"balanced-match": "^1.0.0" "balanced-match": "^1.0.0"
} }
}, },
"node_modules/vue-qr/node_modules/glob": { "node_modules/vue-qr/node_modules/glob": {
"version": "8.1.0", "version": "8.1.0",
"resolved": "https://registry.npmmirror.com/glob/-/glob-8.1.0.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/glob/-/glob-8.1.0.tgz",
"integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
"deprecated": "Glob versions prior to v9 are no longer supported", "deprecated": "Glob versions prior to v9 are no longer supported",
"license": "ISC",
"dependencies": { "dependencies": {
"fs.realpath": "^1.0.0", "fs.realpath": "^1.0.0",
"inflight": "^1.0.4", "inflight": "^1.0.4",
@ -17573,8 +17586,9 @@
}, },
"node_modules/vue-qr/node_modules/minimatch": { "node_modules/vue-qr/node_modules/minimatch": {
"version": "5.1.6", "version": "5.1.6",
"resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/minimatch/-/minimatch-5.1.6.tgz",
"integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
"license": "ISC",
"dependencies": { "dependencies": {
"brace-expansion": "^2.0.1" "brace-expansion": "^2.0.1"
}, },
@ -18759,8 +18773,9 @@
}, },
"node_modules/webworkify-webpack": { "node_modules/webworkify-webpack": {
"version": "2.1.5", "version": "2.1.5",
"resolved": "https://registry.npmmirror.com/webworkify-webpack/-/webworkify-webpack-2.1.5.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/webworkify-webpack/-/webworkify-webpack-2.1.5.tgz",
"integrity": "sha512-2akF8FIyUvbiBBdD+RoHpoTbHMQF2HwjcxfDvgztAX5YwbZNyrtfUMgvfgFVsgDhDPVTlkbb5vyasqDHfIDPQw==" "integrity": "sha512-2akF8FIyUvbiBBdD+RoHpoTbHMQF2HwjcxfDvgztAX5YwbZNyrtfUMgvfgFVsgDhDPVTlkbb5vyasqDHfIDPQw==",
"license": "MIT"
}, },
"node_modules/which": { "node_modules/which": {
"version": "2.0.2", "version": "2.0.2",
@ -23227,7 +23242,7 @@
}, },
"core-js": { "core-js": {
"version": "3.25.3", "version": "3.25.3",
"resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.25.3.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/core-js/-/core-js-3.25.3.tgz",
"integrity": "sha512-y1hvKXmPHvm5B7w4ln1S4uc9eV/O5+iFExSRUimnvIph11uaizFR8LFMdONN8hG3P2pipUfX4Y/fR8rAEtcHcQ==" "integrity": "sha512-y1hvKXmPHvm5B7w4ln1S4uc9eV/O5+iFExSRUimnvIph11uaizFR8LFMdONN8hG3P2pipUfX4Y/fR8rAEtcHcQ=="
}, },
"core-js-compat": { "core-js-compat": {
@ -23619,7 +23634,7 @@
}, },
"decompress-response": { "decompress-response": {
"version": "6.0.0", "version": "6.0.0",
"resolved": "https://registry.npmmirror.com/decompress-response/-/decompress-response-6.0.0.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/decompress-response/-/decompress-response-6.0.0.tgz",
"integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
"requires": { "requires": {
"mimic-response": "^3.1.0" "mimic-response": "^3.1.0"
@ -24379,7 +24394,7 @@
}, },
"es6-promise": { "es6-promise": {
"version": "4.2.8", "version": "4.2.8",
"resolved": "https://registry.npmmirror.com/es6-promise/-/es6-promise-4.2.8.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/es6-promise/-/es6-promise-4.2.8.tgz",
"integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w=="
}, },
"escalade": { "escalade": {
@ -25190,7 +25205,7 @@
}, },
"flv.js": { "flv.js": {
"version": "1.6.2", "version": "1.6.2",
"resolved": "https://registry.npmmirror.com/flv.js/-/flv.js-1.6.2.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/flv.js/-/flv.js-1.6.2.tgz",
"integrity": "sha512-xre4gUbX1MPtgQRKj2pxJENp/RnaHaxYvy3YToVVCrSmAWUu85b9mug6pTXF6zakUjNP2lFWZ1rkSX7gxhB/2A==", "integrity": "sha512-xre4gUbX1MPtgQRKj2pxJENp/RnaHaxYvy3YToVVCrSmAWUu85b9mug6pTXF6zakUjNP2lFWZ1rkSX7gxhB/2A==",
"requires": { "requires": {
"es6-promise": "^4.2.8", "es6-promise": "^4.2.8",
@ -26721,7 +26736,7 @@
}, },
"js-binary-schema-parser": { "js-binary-schema-parser": {
"version": "2.0.3", "version": "2.0.3",
"resolved": "https://registry.npmmirror.com/js-binary-schema-parser/-/js-binary-schema-parser-2.0.3.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/js-binary-schema-parser/-/js-binary-schema-parser-2.0.3.tgz",
"integrity": "sha512-xezGJmOb4lk/M1ZZLTR/jaBHQ4gG/lqQnJqdIv4721DMggsa1bDVlHXNeHYogaIEHD9vCRv0fcL4hMA+Coarkg==" "integrity": "sha512-xezGJmOb4lk/M1ZZLTR/jaBHQ4gG/lqQnJqdIv4721DMggsa1bDVlHXNeHYogaIEHD9vCRv0fcL4hMA+Coarkg=="
}, },
"js-cookie": { "js-cookie": {
@ -27498,7 +27513,7 @@
}, },
"mimic-response": { "mimic-response": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmmirror.com/mimic-response/-/mimic-response-3.1.0.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/mimic-response/-/mimic-response-3.1.0.tgz",
"integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="
}, },
"mini-css-extract-plugin": { "mini-css-extract-plugin": {
@ -28436,7 +28451,7 @@
}, },
"parenthesis": { "parenthesis": {
"version": "3.1.8", "version": "3.1.8",
"resolved": "https://registry.npmmirror.com/parenthesis/-/parenthesis-3.1.8.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/parenthesis/-/parenthesis-3.1.8.tgz",
"integrity": "sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw==" "integrity": "sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw=="
}, },
"parse-asn1": { "parse-asn1": {
@ -30651,12 +30666,12 @@
}, },
"simple-concat": { "simple-concat": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmmirror.com/simple-concat/-/simple-concat-1.0.1.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/simple-concat/-/simple-concat-1.0.1.tgz",
"integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q=="
}, },
"simple-get": { "simple-get": {
"version": "4.0.1", "version": "4.0.1",
"resolved": "https://registry.npmmirror.com/simple-get/-/simple-get-4.0.1.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/simple-get/-/simple-get-4.0.1.tgz",
"integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
"requires": { "requires": {
"decompress-response": "^6.0.0", "decompress-response": "^6.0.0",
@ -31158,7 +31173,7 @@
}, },
"string-split-by": { "string-split-by": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmmirror.com/string-split-by/-/string-split-by-1.0.0.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/string-split-by/-/string-split-by-1.0.0.tgz",
"integrity": "sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A==", "integrity": "sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A==",
"requires": { "requires": {
"parenthesis": "^3.1.5" "parenthesis": "^3.1.5"
@ -32793,7 +32808,7 @@
}, },
"vue-qr": { "vue-qr": {
"version": "4.0.9", "version": "4.0.9",
"resolved": "https://registry.npmmirror.com/vue-qr/-/vue-qr-4.0.9.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/vue-qr/-/vue-qr-4.0.9.tgz",
"integrity": "sha512-pAISV94T0MNEYA3NGjykUpsXRE2QfaNxlu9ZhEL6CERgqNc21hJYuP3hRVzAWfBQlgO18DPmZTbrFerJC3+Ikw==", "integrity": "sha512-pAISV94T0MNEYA3NGjykUpsXRE2QfaNxlu9ZhEL6CERgqNc21hJYuP3hRVzAWfBQlgO18DPmZTbrFerJC3+Ikw==",
"requires": { "requires": {
"glob": "^8.0.1", "glob": "^8.0.1",
@ -32804,7 +32819,7 @@
"dependencies": { "dependencies": {
"brace-expansion": { "brace-expansion": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"requires": { "requires": {
"balanced-match": "^1.0.0" "balanced-match": "^1.0.0"
@ -32812,7 +32827,7 @@
}, },
"glob": { "glob": {
"version": "8.1.0", "version": "8.1.0",
"resolved": "https://registry.npmmirror.com/glob/-/glob-8.1.0.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/glob/-/glob-8.1.0.tgz",
"integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
"requires": { "requires": {
"fs.realpath": "^1.0.0", "fs.realpath": "^1.0.0",
@ -32824,7 +32839,7 @@
}, },
"minimatch": { "minimatch": {
"version": "5.1.6", "version": "5.1.6",
"resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/minimatch/-/minimatch-5.1.6.tgz",
"integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
"requires": { "requires": {
"brace-expansion": "^2.0.1" "brace-expansion": "^2.0.1"
@ -33790,7 +33805,7 @@
}, },
"webworkify-webpack": { "webworkify-webpack": {
"version": "2.1.5", "version": "2.1.5",
"resolved": "https://registry.npmmirror.com/webworkify-webpack/-/webworkify-webpack-2.1.5.tgz", "resolved": "https://repo.huaweicloud.com/repository/npm/webworkify-webpack/-/webworkify-webpack-2.1.5.tgz",
"integrity": "sha512-2akF8FIyUvbiBBdD+RoHpoTbHMQF2HwjcxfDvgztAX5YwbZNyrtfUMgvfgFVsgDhDPVTlkbb5vyasqDHfIDPQw==" "integrity": "sha512-2akF8FIyUvbiBBdD+RoHpoTbHMQF2HwjcxfDvgztAX5YwbZNyrtfUMgvfgFVsgDhDPVTlkbb5vyasqDHfIDPQw=="
}, },
"which": { "which": {

View File

@ -1,95 +1,95 @@
{ {
"name": "bonus", "name": "bonus",
"version": "3.6.4", "version": "3.6.4",
"description": "博诺思管理系统", "description": "智慧工地",
"author": "博诺思", "author": "博诺思",
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {
"dev": "vue-cli-service serve", "dev": "vue-cli-service serve",
"build:prod": "vue-cli-service build", "build:prod": "vue-cli-service build",
"build:stage": "vue-cli-service build --mode staging", "build:stage": "vue-cli-service build --mode staging",
"preview": "node build/index.js --preview", "preview": "node build/index.js --preview",
"lint": "eslint --ext .js,.vue src" "lint": "eslint --ext .js,.vue src"
}, },
"husky": { "husky": {
"hooks": { "hooks": {
"pre-commit": "lint-staged" "pre-commit": "lint-staged"
} }
}, },
"lint-staged": { "lint-staged": {
"src/**/*.{js,vue}": [ "src/**/*.{js,vue}": [
"eslint --fix", "eslint --fix",
"git add" "git add"
]
},
"keywords": [
"vue",
"admin",
"dashboard",
"element-ui",
"boilerplate",
"admin-template",
"management-system"
],
"repository": {
"type": "git",
"url": "http://192.168.0.56:3000/bonus/Bonus-Cloud.git"
},
"dependencies": {
"@riophae/vue-treeselect": "0.4.0",
"axios": "0.24.0",
"clipboard": "2.0.8",
"core-js": "3.25.3",
"crypto-js": "^4.2.0",
"echarts": "5.4.0",
"element-ui": "2.15.14",
"file-saver": "2.0.5",
"flv.js": "^1.6.2",
"fuse.js": "6.4.3",
"highlight.js": "9.18.5",
"js-beautify": "1.13.0",
"js-cookie": "3.0.1",
"jsencrypt": "3.0.0-rc.1",
"nprogress": "0.2.0",
"quill": "1.3.7",
"screenfull": "5.0.2",
"sm-crypto": "^0.3.13",
"sortablejs": "1.10.2",
"vue": "2.6.12",
"vue-count-to": "1.0.13",
"vue-cropper": "0.5.5",
"vue-meta": "2.4.0",
"vue-qr": "^4.0.9",
"vue-router": "3.4.9",
"vuedraggable": "2.24.3",
"vuex": "3.6.0",
"webstomp-client": "^1.2.6"
},
"devDependencies": {
"@vue/cli-plugin-babel": "4.4.6",
"@vue/cli-plugin-eslint": "4.4.6",
"@vue/cli-service": "4.4.6",
"babel-eslint": "10.1.0",
"babel-plugin-dynamic-import-node": "2.3.3",
"chalk": "4.1.0",
"compression-webpack-plugin": "6.1.2",
"connect": "3.6.6",
"eslint": "7.15.0",
"eslint-plugin-vue": "7.2.0",
"lint-staged": "10.5.3",
"runjs": "4.4.2",
"sass": "1.32.13",
"sass-loader": "10.1.1",
"script-ext-html-webpack-plugin": "2.1.5",
"svg-sprite-loader": "5.1.1",
"vue-template-compiler": "2.6.12"
},
"engines": {
"node": ">=8.9",
"npm": ">= 3.0.0"
},
"browserslist": [
"> 1%",
"last 2 versions"
] ]
},
"keywords": [
"vue",
"admin",
"dashboard",
"element-ui",
"boilerplate",
"admin-template",
"management-system"
],
"repository": {
"type": "git",
"url": "http://192.168.0.56:3000/bonus/Bonus-Cloud.git"
},
"dependencies": {
"@riophae/vue-treeselect": "0.4.0",
"axios": "0.24.0",
"clipboard": "2.0.8",
"core-js": "3.25.3",
"crypto-js": "^4.2.0",
"echarts": "5.4.0",
"element-ui": "2.15.14",
"file-saver": "2.0.5",
"flv.js": "^1.6.2",
"fuse.js": "6.4.3",
"highlight.js": "9.18.5",
"js-beautify": "1.13.0",
"js-cookie": "3.0.1",
"jsencrypt": "3.0.0-rc.1",
"nprogress": "0.2.0",
"quill": "1.3.7",
"screenfull": "5.0.2",
"sm-crypto": "^0.3.13",
"sortablejs": "1.10.2",
"vue": "2.6.12",
"vue-count-to": "1.0.13",
"vue-cropper": "0.5.5",
"vue-meta": "2.4.0",
"vue-qr": "^4.0.9",
"vue-router": "3.4.9",
"vuedraggable": "2.24.3",
"vuex": "3.6.0",
"webstomp-client": "^1.2.6"
},
"devDependencies": {
"@vue/cli-plugin-babel": "4.4.6",
"@vue/cli-plugin-eslint": "4.4.6",
"@vue/cli-service": "4.4.6",
"babel-eslint": "10.1.0",
"babel-plugin-dynamic-import-node": "2.3.3",
"chalk": "4.1.0",
"compression-webpack-plugin": "6.1.2",
"connect": "3.6.6",
"eslint": "7.15.0",
"eslint-plugin-vue": "7.2.0",
"lint-staged": "10.5.3",
"runjs": "4.4.2",
"sass": "1.32.13",
"sass-loader": "10.1.1",
"script-ext-html-webpack-plugin": "2.1.5",
"svg-sprite-loader": "5.1.1",
"vue-template-compiler": "2.6.12"
},
"engines": {
"node": ">=8.9",
"npm": ">= 3.0.0"
},
"browserslist": [
"> 1%",
"last 2 versions"
]
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@ -33,12 +33,7 @@
style="width: 240px" style="width: 240px"
:placeholder="`请选择${item.f_label}`" :placeholder="`请选择${item.f_label}`"
> >
<el-option <el-option v-for="(sel, v) in item.f_selList" :key="v" :label="sel.label" :value="sel.value" />
v-for="(sel, v) in item.f_selList"
:key="v"
:label="sel.label"
:value="sel.value"
/>
</el-select> </el-select>
<el-cascader <el-cascader
v-if="item.f_type === 'selCasAdd'" v-if="item.f_type === 'selCasAdd'"
@ -47,14 +42,7 @@
:props="item.optionProps" :props="item.optionProps"
:show-all-levels="false" :show-all-levels="false"
clearable clearable
@change=" @change="handleCasAdd($event, item.f_model, cascaderFunc, extraTableProp)"
handleCasAdd(
$event,
item.f_model,
cascaderFunc,
extraTableProp,
)
"
style="width: 240px" style="width: 240px"
/> />
<el-cascader <el-cascader
@ -93,29 +81,13 @@
></el-input-number> ></el-input-number>
</el-form-item> </el-form-item>
<el-form-item v-if="showBtnCrews"> <el-form-item v-if="showBtnCrews">
<el-button <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery" v-if="showSearchBtn"
type="primary"
icon="el-icon-search"
size="mini"
@click="handleQuery"
v-if="showSearchBtn"
>查询</el-button >查询</el-button
> >
<el-button <el-button type="success" icon="el-icon-edit" size="mini" @click="handleFill" v-if="!showSearchBtn"
type="success"
icon="el-icon-edit"
size="mini"
@click="handleFill"
v-if="!showSearchBtn"
>填充</el-button >填充</el-button
> >
<el-button <el-button type="warning" icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
type="warning"
icon="el-icon-refresh"
size="mini"
@click="resetQuery"
>重置</el-button
>
</el-form-item> </el-form-item>
</el-form> </el-form>
<!-- 按钮集群 --> <!-- 按钮集群 -->
@ -145,21 +117,13 @@
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
> >
> >
<el-table-column <el-table-column type="selection" width="45" align="center" v-if="showSel" :selectable="selectable" />
type="selection"
width="45"
align="center"
v-if="showSel"
:selectable="selectable"
/>
<el-table-column <el-table-column
width="55" width="55"
align="center" align="center"
label="序号" label="序号"
type="index" type="index"
:index=" :index="indexContinuation(queryParams.pageNum, queryParams.pageSize)"
indexContinuation(queryParams.pageNum, queryParams.pageSize)
"
v-if="showIndex" v-if="showIndex"
/> />
<el-table-column <el-table-column
@ -184,8 +148,9 @@
<el-table-column <el-table-column
align="center" align="center"
label="操作" label="操作"
v-if="handleShow && showOperation"
:min-width="dynamicWidth" :min-width="dynamicWidth"
:show-overflow-tooltip="false"
v-if="handleShow && showOperation"
> >
<template slot-scope="{ row }"> <template slot-scope="{ row }">
<div class="optionDivRef"> <div class="optionDivRef">
@ -491,8 +456,7 @@ export default {
}, },
/** 动态设置操作列的列宽 */ /** 动态设置操作列的列宽 */
getOperatorWidth() { getOperatorWidth() {
const operatorColumn = const operatorColumn = document.getElementsByClassName('optionDivRef')
document.getElementsByClassName('optionDivRef')
// //
let width = 100 let width = 100
@ -507,12 +471,9 @@ export default {
width = width > item.offsetWidth ? width : item.offsetWidth width = width > item.offsetWidth ? width : item.offsetWidth
const buttons = item.getElementsByClassName('el-button') const buttons = item.getElementsByClassName('el-button')
buttonCount = buttons.length buttonCount = buttons.length
buttonCount = buttonCount = buttonCount > buttons.length ? buttonCount : buttons.length
buttonCount > buttons.length
? buttonCount
: buttons.length
}) })
return width return width + 10
} }
}, },

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,9 @@
<template>
<div class="app-container"> 属性配置 </div>
</template>
<script>
export default {}
</script>
<style></style>

View File

@ -0,0 +1,182 @@
<template>
<!-- 新增修改弹框 -->
<div>
<el-form label-width="auto" :model="addOrEditForm" :rules="addOrEditFormRef" ref="addOrEditFormRef">
<!-- <TitleTip :titleText="`基本信息`" /> -->
<el-form-item label="所属工程:" prop="projectName">
<el-input v-model="addOrEditForm.projectName" clearable />
</el-form-item>
<el-form-item label="设备类型:" prop="ownerUnit">
<!-- <el-input v-model="addOrEditForm.ownerUnit" clearable /> -->
<el-select v-model="addOrEditForm.ownerUnit" clearable filterable>
<el-option v-for="type in typeList" :key="type.id" :label="type.label" :value="type.id" />
</el-select>
</el-form-item>
<!-- <el-form-item label="计划开工日期:" prop="planStartTime">
<el-date-picker
type="date"
style="width: 100%"
placeholder="选择日期"
value-format="yyyy-MM-dd"
v-model="addOrEditForm.planStartTime"
/>
</el-form-item>
<el-form-item label="计划竣工日期:" prop="planEndTime">
<el-date-picker
type="date"
style="width: 100%"
placeholder="选择日期"
value-format="yyyy-MM-dd"
v-model="addOrEditForm.planEndTime"
/>
</el-form-item> -->
<!-- <TitleTip :titleText="`其他信息`" /> -->
<el-form-item label="设备名称:">
<el-input v-model="addOrEditForm.address" clearable />
</el-form-item>
<el-form-item label="设备编码:">
<el-input v-model="addOrEditForm.projectAmount" clearable />
</el-form-item>
<el-form-item label="设备级联编码:">
<el-input v-model="addOrEditForm.projectManager" clearable />
</el-form-item>
<el-form-item label="设备状态:">
<el-input
clearable
type="textarea"
:autosize="{ minRows: 3, maxRows: 10 }"
v-model="addOrEditForm.projectScale"
/>
</el-form-item>
<el-form-item label="设备信号:">
<el-input v-model="addOrEditForm.projectAmount" clearable />
</el-form-item>
<el-form-item label="监测区域:">
<el-input v-model="addOrEditForm.projectAmount" clearable />
</el-form-item>
<el-form-item label="所属边代:">
<el-input v-model="addOrEditForm.projectAmount" clearable />
</el-form-item>
<el-form-item class="handle">
<el-button> 取消 </el-button>
<el-button type="primary" @click="onSubmitForm"> 保存 </el-button>
</el-form-item>
</el-form>
</div>
</template>
<script>
import { addProjectAPI } from '@/api/project-manage/index.js'
export default {
data() {
const validatePlanStartTime = (rule, value, callback) => {
if (!value) {
return callback(new Error('请选择计划开工日期'))
}
const endTime = this.addOrEditForm.planEndTime
if (endTime && new Date(value) >= new Date(endTime)) {
return callback(new Error('计划开工日期必须小于计划竣工日期'))
}
callback()
}
const validatePlanEndTime = (rule, value, callback) => {
if (!value) {
return callback(new Error('请选择计划竣工日期'))
}
const endTime = this.addOrEditForm.planStartTime
if (endTime && new Date(value) <= new Date(endTime)) {
return callback(new Error('计划竣工日期必须大于计划开工日期'))
}
callback()
}
return {
//
addOrEditForm: {
projectName: '', //
ownerUnit: '', //
planStartTime: '', //
planEndTime: '', //
address: '', //
projectAmount: '', //
projectManager: '', //
projectScale: '', //
},
addOrEditFormRef: {
projectName: [
{
required: true,
message: '项目名称',
trigger: 'blur',
},
{
min: 1,
max: 30,
message: '长度在 1 到 30 个字符',
trigger: 'blur',
},
],
ownerUnit: [
{
required: true,
message: '请输入业主单位',
trigger: 'blur',
},
{
min: 1,
max: 20,
message: '长度在 1 到 20 个字符',
trigger: 'blur',
},
],
planStartTime: [
{
required: true,
message: '请选择计划开工日期',
trigger: 'change',
},
{ validator: validatePlanStartTime, trigger: 'change' },
],
planEndTime: [
{
required: true,
message: '请选择计划竣工日期',
trigger: 'change',
},
{ validator: validatePlanEndTime, trigger: 'change' },
],
},
}
},
methods: {
handleClose() {
this.$refs.addOrEditFormRef.resetFields()
// this.$emit('update:formDialogVisible', false)
},
//
onSubmitForm() {
this.$refs.addOrEditFormRef.validate(async (valid) => {
if (valid) {
const res = await addProjectAPI(this.addOrEditForm)
if (res.code === 200) {
this.$modal.msgSuccess('新增成功')
}
// this.$emit('update:formDialogVisible', false)
this.$emit('onCloseDialog')
}
})
},
},
async mounted() {},
watch: {},
}
</script>
<style lang="scss" scoped></style>

View File

@ -0,0 +1,31 @@
<template>
<div>
<el-descriptions :column="2" border>
<el-descriptions-item label="项目名称"></el-descriptions-item>
<el-descriptions-item label="业主单位"></el-descriptions-item>
<el-descriptions-item label="项目地址">苏州市</el-descriptions-item>
<el-descriptions-item label="项目金额(万元)">
</el-descriptions-item>
<el-descriptions-item
label="计划开工日期"
:contentStyle="{ 'text-align': 'right' }"
>江苏省苏州市吴中区吴中大道 1188 </el-descriptions-item
>
<el-descriptions-item label="计划竣工日期"
>苏州市</el-descriptions-item
>
<el-descriptions-item label="计划竣工日期"
>项目负责人</el-descriptions-item
>
<el-descriptions-item label="计划竣工日期"
>项目规模</el-descriptions-item
>
</el-descriptions>
</div>
</template>
<script>
export default {}
</script>
<style></style>

View File

@ -0,0 +1,24 @@
export const formLabel = [
{ f_label: '搜索关键词', f_model: 'proName', f_type: 'ipt', isShow: false },
{ f_label: '设备状态', f_model: 'relUser', f_type: 'sel', isShow: false },
{ f_label: '设备启用', f_model: 'relUser', f_type: 'sel', isShow: false },
]
export const columnsList = [
{ t_props: 'projectName', t_label: '所属工程' },
{ t_props: 'address', t_label: '设备类型' },
{ t_props: 'planStartTime', t_label: '设备编码' },
{ t_props: 'planEndTime', t_label: '设备名称' },
{ t_props: 'ownerUnit', t_label: '设备级联编码' },
{ t_props: 'projectStatus', t_label: '设备状态', t_slot: 'status' },
{ t_props: 'auditStatus', t_label: '设备信号' },
{ t_props: 'auditStatus', t_label: '所属边带' },
{ t_props: 'auditStatus', t_label: '监测区域' },
{ t_props: 'auditStatus', t_label: '备注' },
{ t_props: 'auditStatus', t_label: '操作' },
]
export const dialogConfig = {
outerWidth: '50%',
outerTitle: '设备新增',
outerVisible: false,
}

View File

@ -0,0 +1,88 @@
<template>
<!-- 感知设备 ---- 设备管理 -->
<div class="app-container">
<TableModel :formLabel="formLabel" :columnsList="columnsList" :request-api="getProjectListAPI">
<template slot="btn">
<el-button size="mini" type="primary" icon="el-icon-download" @click="handleExport()"> 导出 </el-button>
<el-button size="mini" type="primary" icon="el-icon-plus" @click="handleAddData()"> 新增 </el-button>
</template>
<template slot="handle" slot-scope="{ data }">
<el-button size="mini" type="primary" @click="handleEditData(data)" icon="el-icon-edit">
修改
</el-button>
<el-button size="mini" type="success" @click="handleDetails(data)" icon="el-icon-info">
详情
</el-button>
<el-button
size="mini"
type="danger"
icon="el-icon-delete"
@click="handleDeleteData(data.id, deleteWarningApi)"
>
删除
</el-button>
</template>
<template slot="status" slot-scope="{ data }">
<el-tag size="mini">状态 </el-tag>
</template>
</TableModel>
<DialogModel :dialogConfig="dialogConfig" @closeDialogOuter="closeDialogOuter">
<template slot="outerContent">
<AddEditForm @onCloseDialog="closeDialogOuter" v-if="dialogType === 1 || dialogType === 2" />
<ProjectDetails v-else />
</template>
</DialogModel>
</div>
</template>
<script>
import TableModel from '@/components/TableModel'
import DialogModel from '@/components/DialogModel'
import AddEditForm from './components/add-edit-form'
import ProjectDetails from './components/project-details'
import { formLabel, columnsList, dialogConfig } from './config'
import { getProjectListAPI } from '@/api/project-manage/index.js'
export default {
components: {
TableModel,
DialogModel,
AddEditForm,
ProjectDetails,
},
data() {
return {
formLabel,
columnsList,
dialogConfig,
getProjectListAPI,
dialogType: 1,
}
},
methods: {
handleExport() {
console.log('导出')
},
handleAddData() {
console.log('新增')
this.dialogType = 1
this.dialogConfig.outerTitle = '设备新增'
this.dialogConfig.outerVisible = true
},
handleDetails() {},
handleEditData() {
this.dialogType = 2
this.dialogConfig.outerTitle = '设备修改'
this.dialogConfig.outerVisible = true
},
handleDeleteData() {},
/** 关闭外侧弹框 */
closeDialogOuter() {
this.dialogConfig.outerVisible = false
},
},
}
</script>
<style></style>

View File

@ -1,84 +1,117 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<div class="filter-container"> <div class="filter-container">
<el-input
<el-input v-model="listQuery.ip" placeholder="请输入IP地址" v-model="listQuery.ip"
style="width: 200px" class="filter-item ml-20" :maxlength="30" placeholder="请输入IP地址"
@keyup.enter.native="handleFilter" style="width: 200px"
/> class="filter-item ml-20"
<el-date-picker :maxlength="30"
v-model="rangeDate" @keyup.enter.native="handleFilter"
style="width: 300px" />
class="filter-item ml-20" <el-date-picker
value-format="yyyy-MM-dd" v-model="rangeDate"
type="daterange" style="width: 300px"
range-separator="至" class="filter-item ml-20"
start-placeholder="开始日期" value-format="yyyy-MM-dd"
end-placeholder="结束日期" type="daterange"
/> range-separator="至"
<el-select v-model="listQuery.grade" placeholder="请选择异常等级" style="width: 200px" class="filter-item ml-20"> start-placeholder="开始日期"
<el-option v-for="item in Object.keys(levelList)" :key="item" :value="levelList[item]" :label="levelList[item]" /> end-placeholder="结束日期"
</el-select> />
<!-- <el-input v-model="listQuery.errType" placeholder="请输入异常类型" <el-select
v-model="listQuery.grade"
placeholder="请选择异常等级"
style="width: 200px"
class="filter-item ml-20"
>
<el-option
v-for="item in Object.keys(levelList)"
:key="item"
:value="levelList[item]"
:label="levelList[item]"
/>
</el-select>
<!-- <el-input v-model="listQuery.errType" placeholder="请输入异常类型"
style="width: 200px" class="filter-item" :maxlength="30" style="width: 200px" class="filter-item" :maxlength="30"
@keyup.enter.native="handleFilter" @keyup.enter.native="handleFilter"
/> --> /> -->
<el-select v-model="listQuery.errType" placeholder="请选择异常类型" style="width: 200px" class="filter-item ml-20"> <el-select
<el-option v-for="item in Object.keys(typeList)" :key="item" :value="typeList[item]" :label="typeList[item]" /> v-model="listQuery.errType"
</el-select> placeholder="请选择异常类型"
style="width: 200px"
class="filter-item ml-20"
>
<el-option
v-for="item in Object.keys(typeList)"
:key="item"
:value="typeList[item]"
:label="typeList[item]"
/>
</el-select>
<el-select v-model="listQuery.logSort" clearable filterable style="width: 200px" class="filter-item ml-20" placeholder="请选择" > <el-select
<el-option v-for="item in timeList" :key="item.id" :label="item.name" :value="item.id" /> v-model="listQuery.logSort"
</el-select> clearable
<el-select v-model="listQuery.logDesc" clearable filterable style="width: 200px" class="filter-item ml-20" placeholder="请选择" > filterable
<el-option v-for="item in sortList" :key="item.id" :label="item.name" :value="item.id" /> style="width: 200px"
</el-select> class="filter-item ml-20"
<el-button style="margin-left: 20px" class="filter-item" type="primary" @click="handleFilter"> placeholder="请选择"
查询 >
</el-button> <el-option v-for="item in timeList" :key="item.id" :label="item.name" :value="item.id" />
<el-button style="margin-left: 20px" class="filter-item" @click="resetFilter"> </el-select>
重置 <el-select
</el-button> v-model="listQuery.logDesc"
<el-button @click="handleBackups" class="filter-item" style="margin-left: 20px" type="warning"> clearable
备份 filterable
</el-button> style="width: 200px"
</div> class="filter-item ml-20"
placeholder="请选择"
>
<el-option v-for="item in sortList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
<el-button style="margin-left: 20px" class="filter-item" type="primary" @click="handleFilter">
查询
</el-button>
<el-button style="margin-left: 20px" class="filter-item" @click="resetFilter"> 重置 </el-button>
<el-button @click="handleBackups" class="filter-item" style="margin-left: 20px" type="warning">
备份
</el-button>
</div>
<el-table <el-table
:key="tableKey" :key="tableKey"
v-loading="listLoading" v-loading="listLoading"
:data="list" :data="list"
border border
fit fit
highlight-current-row highlight-current-row
style="width: 100%" style="width: 100%"
:max-height="tableHeight" :max-height="tableHeight"
> >
<el-table-column label="序号" align="center" width="80" type="index"> <el-table-column label="序号" align="center" width="80" type="index">
<template scope="scope"> <template slot-scope="scope">
<span>{{ (listQuery.pageNum - 1) * listQuery.pageSize + scope.$index + 1 }}</span> <span>{{ (listQuery.pageNum - 1) * listQuery.pageSize + scope.$index + 1 }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作人" align="center" prop="operaUserName"> <el-table-column label="操作人" align="center" prop="operaUserName">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ scope.row.operaUserName||'/' }}</span> <span>{{ scope.row.operaUserName || '/' }}</span>
</template> </template>
</el-table-column>
</el-table-column> <el-table-column label="操作时间" align="center" prop="operTime" width="180" />
<el-table-column label="操作时间" align="center" prop="operTime" width="180"/> <el-table-column label="IP地址" align="center" prop="ip" />
<el-table-column label="IP地址" align="center" prop="ip"/> <el-table-column label="操作模块" align="center" prop="model">
<el-table-column label="操作模块" align="center" prop="model" > <template slot-scope="scope">
<template slot-scope="scope"> <span>{{ scope.row.model || '/' }}</span>
<span>{{ scope.row.model||'/' }}</span> </template>
</template> </el-table-column>
<el-table-column label="异常类型" align="center" prop="errType" />
</el-table-column> <el-table-column label="异常原因" align="center" prop="operateDetail" />
<el-table-column label="异常类型" align="center" prop="errType" /> <el-table-column label="异常等级" align="center" prop="grade" />
<el-table-column label="异常原因" align="center" prop="operateDetail"/> <!-- <el-table-column label="事件结果" align="center" prop="failureReason"/> -->
<el-table-column label="异常等级" align="center" prop="grade"/> <el-table-column label="操作类型" align="center" prop="operType" />
<!-- <el-table-column label="事件结果" align="center" prop="failureReason"/> --> <!--
<el-table-column label="操作类型" align="center" prop="operType" />
<!--
<el-table-column label="操作详情" align="center" prop="operateDetail" /> <el-table-column label="操作详情" align="center" prop="operateDetail" />
<el-table-column label="操作结果" align="center" prop="errLevel"> <el-table-column label="操作结果" align="center" prop="errLevel">
@ -88,18 +121,18 @@
</el-table-column> </el-table-column>
<el-table-column label="操作参数" align="center" prop="params" /> <el-table-column label="操作参数" align="center" prop="params" />
<el-table-column label="操作方法" align="center" prop="method" /> --> <el-table-column label="操作方法" align="center" prop="method" /> -->
<el-table-column label="操作路径" align="center" prop="operUri" /> <el-table-column label="操作路径" align="center" prop="operUri" />
<!-- <el-table-column label="执行时间(ms)" align="center" prop="times" /> --> <!-- <el-table-column label="执行时间(ms)" align="center" prop="times" /> -->
</el-table> </el-table>
<pagination <pagination
v-show="total > 0" v-show="total > 0"
:total="total" :total="total"
:page.sync="listQuery.pageNum" :page.sync="listQuery.pageNum"
:limit.sync="listQuery.pageSize" :limit.sync="listQuery.pageSize"
@pagination="getList" @pagination="getList"
/> />
</div> </div>
</template> </template>
<script> <script>
@ -108,133 +141,138 @@ import Pagination from '@/components/Pagination'
import _ from 'lodash/fp' import _ from 'lodash/fp'
import { downloadFile } from '@/utils/download' import { downloadFile } from '@/utils/download'
import { getErrLogs,downloadErrLogs } from '@/api/system/log' import { getErrLogs, downloadErrLogs } from '@/api/system/log'
const levelList = { const levelList = {
1:'高', 1: '高',
2:'中', 2: '中',
3:'低' 3: '低',
}; }
const typeList = { const typeList = {
1:'越权访问', 1: '越权访问',
2:'IP异常', 2: 'IP异常',
// 3:'', // 3:'',
// 4:'', // 4:'',
// 5:'', // 5:'',
// 6:'', // 6:'',
// 7:'', // 7:'',
// 8:'', // 8:'',
// 9:'' // 9:''
}; }
export default { export default {
components: { Pagination }, components: { Pagination },
data() { data() {
return { return {
tableKey: 0, tableKey: 0,
list: [], list: [],
levelList: levelList, levelList: levelList,
total: 0, total: 0,
listLoading: false, listLoading: false,
tableHeight: 650, tableHeight: 650,
typeList: typeList, typeList: typeList,
timeList:[{id:1,name:'时间'},{id:2,name:'操作人'},{id:4,name:'ip'},{id:5,name:'异常等级'}], timeList: [
sortList:[{id:1,name:'倒序'},{id:2,name:'升序'}], { id: 1, name: '时间' },
listQuery: { { id: 2, name: '操作人' },
pageNum: 1, { id: 4, name: 'ip' },
pageSize: 10, { id: 5, name: '异常等级' },
errType: '', ],
ip: '', sortList: [
errLevel: '', { id: 1, name: '倒序' },
operTime:'', { id: 2, name: '升序' },
// logSort:1, ],
logDesc:1, listQuery: {
}, pageNum: 1,
rangeDate:[], pageSize: 10,
} errType: '',
}, ip: '',
created() { errLevel: '',
// this.getList() operTime: '',
// this.getOperate() // logSort:1,
}, logDesc: 1,
mounted() { },
this.listQuery.operTime = this.getCurrentDate()+' - '+this.getCurrentDate(); rangeDate: [],
this.rangeDate = [this.getCurrentDate(),this.getCurrentDate()] }
this.getList()
},
methods: {
getStatus(val) {
return this.levelList[val]
}, },
// created() {
getOperate(){ // this.getList()
// getOperateList().then((response) => { // this.getOperate()
// this.typeList = response.data
// })
}, },
mounted() {
this.listQuery.operTime = this.getCurrentDate() + ' - ' + this.getCurrentDate()
this.rangeDate = [this.getCurrentDate(), this.getCurrentDate()]
this.getList()
},
methods: {
getStatus(val) {
return this.levelList[val]
},
//
getOperate() {
// getOperateList().then((response) => {
// this.typeList = response.data
// })
},
getList() { getList() {
this.listLoading = true this.listLoading = true
if(this.rangeDate && this.rangeDate.length>0){ if (this.rangeDate && this.rangeDate.length > 0) {
this.listQuery.operTime = this.rangeDate[0]+' - '+this.rangeDate[1]; this.listQuery.operTime = this.rangeDate[0] + ' - ' + this.rangeDate[1]
} }
getErrLogs(this.listQuery).then((response) => { getErrLogs(this.listQuery).then((response) => {
this.list = response.rows.map(item => { this.list = response.rows.map((item) => {
return item return item
}) })
this.total = response.total this.total = response.total
}) })
setTimeout(()=>{ setTimeout(() => {
this.listLoading = false this.listLoading = false
},500) }, 500)
},
//
handleFilter() {
this.listQuery.pageNum = 1
this.getList()
},
//
resetFilter() {
this.listQuery = {
pageNum: 1,
pageSize: 10,
errType: '',
ip: '',
grade: '',
// logSort:1,
logDesc: 1,
}
this.rangeDate = [this.getCurrentDate(), this.getCurrentDate()]
this.handleFilter()
},
//
handleBackups() {
downloadErrLogs().then((res) => {
downloadFile({ fileName: '异常日志.sql', fileData: res, fileType: 'text/html;charset=UTF-8' })
})
},
//
handleExport() {
// exportCarDetail().then(res => {
// downloadFile({ fileName: '.xlsx', fileData: res, fileType: 'application/vnd.ms-excel;charset=utf-8' })
// })
},
getCurrentDate() {
let now = new Date()
let year = now.getFullYear()
let month = now.getMonth() + 1
if (month < 10) {
month = '0' + month
}
let day = now.getDate()
if (day < 10) {
day = '0' + day
}
return year + '-' + month + '-' + day
},
}, },
//
handleFilter() {
this.listQuery.pageNum = 1
this.getList()
},
//
resetFilter() {
this.listQuery={
pageNum: 1,
pageSize: 10,
errType: '',
ip: '',
grade: '',
// logSort:1,
logDesc:1,
};
this.rangeDate=[this.getCurrentDate(),this.getCurrentDate()]
this.handleFilter()
},
//
handleBackups() {
downloadErrLogs().then(res => {
downloadFile({ fileName: '异常日志.sql', fileData: res, fileType: 'text/html;charset=UTF-8'})
})
},
//
handleExport(){
// exportCarDetail().then(res => {
// downloadFile({ fileName: '.xlsx', fileData: res, fileType: 'application/vnd.ms-excel;charset=utf-8' })
// })
},
getCurrentDate() {
let now = new Date();
let year = now.getFullYear();
let month = now.getMonth() + 1;
if(month<10){
month = '0'+month
}
let day = now.getDate();
if(day<10){
day = '0'+day
}
return year + "-" + month + "-" + day;
}
}
} }
</script> </script>

View File

@ -1,231 +1,276 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<div class="filter-container"> <div class="filter-container">
<el-input v-model="listQuery.operaUserName" placeholder="请输入操作人" <el-input
style="width: 200px" class="filter-item" :maxlength="30" v-model="listQuery.operaUserName"
@keyup.enter.native="handleFilter" placeholder="请输入操作人"
/> style="width: 200px"
<el-input v-model="listQuery.ip" placeholder="请输入IP地址" class="filter-item"
style="width: 200px" class="filter-item ml-20" :maxlength="30" :maxlength="30"
@keyup.enter.native="handleFilter" @keyup.enter.native="handleFilter"
/> />
<el-date-picker <el-input
v-model="rangeDate" v-model="listQuery.ip"
style="width: 300px" placeholder="请输入IP地址"
class="filter-item ml-20" style="width: 200px"
value-format="yyyy-MM-dd" class="filter-item ml-20"
type="daterange" :maxlength="30"
range-separator="至" @keyup.enter.native="handleFilter"
start-placeholder="开始日期" />
end-placeholder="结束日期" <el-date-picker
/> v-model="rangeDate"
<!-- <el-input v-model="listQuery.content" placeholder="请输入操作内容" style="width: 300px"
class="filter-item ml-20"
value-format="yyyy-MM-dd"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
/>
<!-- <el-input v-model="listQuery.content" placeholder="请输入操作内容"
style="width: 200px" class="filter-item ml-20" :maxlength="30" style="width: 200px" class="filter-item ml-20" :maxlength="30"
@keyup.enter.native="handleFilter" @keyup.enter.native="handleFilter"
/> --> /> -->
<el-select v-model="listQuery.result" placeholder="请选择事件结果" style="width: 200px" class="filter-item ml-20"> <el-select
<el-option v-for="item in Object.keys(outcomeList)" :key="item" :value="outcomeList[item]" :label="outcomeList[item]" /> v-model="listQuery.result"
</el-select> placeholder="请选择事件结果"
<el-select v-model="listQuery.operType" placeholder="请选择操作类型" style="width: 200px" class="filter-item ml-20"> style="width: 200px"
<el-option v-for="item in Object.keys(operateList)" :key="item" :value="operateList[item]" :label="operateList[item]" /> class="filter-item ml-20"
</el-select> >
<el-option
v-for="item in Object.keys(outcomeList)"
:key="item"
:value="outcomeList[item]"
:label="outcomeList[item]"
/>
</el-select>
<el-select
v-model="listQuery.operType"
placeholder="请选择操作类型"
style="width: 200px"
class="filter-item ml-20"
>
<el-option
v-for="item in Object.keys(operateList)"
:key="item"
:value="operateList[item]"
:label="operateList[item]"
/>
</el-select>
<el-select v-model="listQuery.logSort" clearable filterable style="width: 200px" class="filter-item ml-20" placeholder="请选择" > <el-select
<el-option v-for="item in timeList" :key="item.id" :label="item.name" :value="item.id" /> v-model="listQuery.logSort"
</el-select> clearable
<el-select v-model="listQuery.logDesc" clearable filterable style="width: 200px" class="filter-item ml-20" placeholder="请选择" > filterable
<el-option v-for="item in sortList" :key="item.id" :label="item.name" :value="item.id" /> style="width: 200px"
</el-select> class="filter-item ml-20"
<el-button style="margin-left: 20px" class="filter-item" type="primary" @click="handleFilter"> placeholder="请选择"
查询 >
</el-button> <el-option v-for="item in timeList" :key="item.id" :label="item.name" :value="item.id" />
<el-button style="margin-left: 20px" class="filter-item" @click="resetFilter"> </el-select>
重置 <el-select
</el-button> v-model="listQuery.logDesc"
<el-button @click="handleBackups" class="filter-item" style="margin-left: 20px" type="warning"> clearable
备份 filterable
</el-button> style="width: 200px"
</div> class="filter-item ml-20"
placeholder="请选择"
>
<el-option v-for="item in sortList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
<el-button style="margin-left: 20px" class="filter-item" type="primary" @click="handleFilter">
查询
</el-button>
<el-button style="margin-left: 20px" class="filter-item" @click="resetFilter"> 重置 </el-button>
<el-button @click="handleBackups" class="filter-item" style="margin-left: 20px" type="warning">
备份
</el-button>
</div>
<el-table <el-table
:key="tableKey" :key="tableKey"
v-loading="listLoading" v-loading="listLoading"
:data="list" :data="list"
border border
fit fit
highlight-current-row highlight-current-row
style="width: 100%" style="width: 100%"
:max-height="tableHeight" :max-height="tableHeight"
> >
<el-table-column label="序号" align="center" width="80" type="index"> <el-table-column label="序号" align="center" width="80" type="index">
<template scope="scope"> <template slot-scope="scope">
<span>{{ (listQuery.pageNum - 1) * listQuery.pageSize + scope.$index + 1 }}</span> <span>{{ (listQuery.pageNum - 1) * listQuery.pageSize + scope.$index + 1 }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作人" align="center" prop="operaUserName" /> <el-table-column label="操作人" align="center" prop="operaUserName" />
<el-table-column label="操作时间" align="center" prop="operTime" /> <el-table-column label="操作时间" align="center" prop="operTime" />
<el-table-column label="IP地址" align="center" prop="ip" /> <el-table-column label="IP地址" align="center" prop="ip" />
<el-table-column label="操作模块" align="center" prop="model" /> <el-table-column label="操作模块" align="center" prop="model" />
<el-table-column label="操作类型" align="center" prop="operType" /> <el-table-column label="操作类型" align="center" prop="operType" />
<el-table-column label="操作详情" align="center" prop="operateDetail" /> <el-table-column label="操作详情" align="center" prop="operateDetail" />
<el-table-column label="操作结果" align="center" prop="result"> <el-table-column label="操作结果" align="center" prop="result">
<template slot-scope="{ row }"> <template slot-scope="{ row }">
{{ row.result}} {{ row.result }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作参数" align="center" prop="params" /> <el-table-column label="操作参数" align="center" prop="params" />
<el-table-column label="操作方法" align="center" prop="method" /> <el-table-column label="操作方法" align="center" prop="method" />
<el-table-column label="操作路径" align="center" prop="operUri" /> <el-table-column label="操作路径" align="center" prop="operUri" />
<el-table-column label="执行时间(ms)" align="center" prop="times" /> <el-table-column label="执行时间(ms)" align="center" prop="times" />
</el-table> </el-table>
<pagination <pagination
v-show="total > 0" v-show="total > 0"
:total="total" :total="total"
:page.sync="listQuery.pageNum" :page.sync="listQuery.pageNum"
:limit.sync="listQuery.pageSize" :limit.sync="listQuery.pageSize"
@pagination="getList" @pagination="getList"
/> />
</div> </div>
</template> </template>
<script> <script>
import Pagination from '@/components/Pagination' import Pagination from '@/components/Pagination'
import _ from 'lodash/fp' import _ from 'lodash/fp'
import { downloadFile } from '@/utils/download' import { downloadFile } from '@/utils/download'
import { getYwLogs,downloadYwLogs } from '@/api/system/log' import { getYwLogs, downloadYwLogs } from '@/api/system/log'
const outcomeList = {
1: '成功',
2: '失败',
}
const operateList = {
1: '新增',
2: '修改',
3: '删除',
4: '查询',
5: '导出',
6: '下载',
7: '备份',
8: '登录',
9: '登出',
}
const outcomeList = { export default {
1:'成功',
2:'失败'
};
const operateList = {
1:'新增',
2:'修改',
3:'删除',
4:'查询',
5:'导出',
6:'下载',
7:'备份',
8:'登录',
9:'登出'
};
export default {
components: { Pagination }, components: { Pagination },
data() { data() {
return { return {
tableKey: 0, tableKey: 0,
list: [], list: [],
outcomeList: outcomeList, outcomeList: outcomeList,
total: 0, total: 0,
listLoading: false, listLoading: false,
tableHeight: 650, tableHeight: 650,
operateList: operateList, operateList: operateList,
timeList:[{id:1,name:'时间'},{id:2,name:'操作人'},{id:3,name:'操作模块'},{id:4,name:'ip'},], timeList: [
sortList:[{id:1,name:'倒序'},{id:2,name:'升序'}], { id: 1, name: '时间' },
listQuery: { { id: 2, name: '操作人' },
pageNum: 1, { id: 3, name: '操作模块' },
pageSize: 10, { id: 4, name: 'ip' },
operaUserName: '', ],
ip: '', sortList: [
content:'', { id: 1, name: '倒序' },
result: '', { id: 2, name: '升序' },
operTime:'', ],
operType: '', listQuery: {
logSort:1, pageNum: 1,
logDesc:1, pageSize: 10,
}, operaUserName: '',
rangeDate:[], ip: '',
} content: '',
result: '',
operTime: '',
operType: '',
logSort: 1,
logDesc: 1,
},
rangeDate: [],
}
}, },
created() { created() {
// this.getList() // this.getList()
// this.getOperate() // this.getOperate()
}, },
mounted() { mounted() {
this.listQuery.operTime = this.getCurrentDate()+' - '+this.getCurrentDate(); this.listQuery.operTime = this.getCurrentDate() + ' - ' + this.getCurrentDate()
this.rangeDate = [this.getCurrentDate(),this.getCurrentDate()] this.rangeDate = [this.getCurrentDate(), this.getCurrentDate()]
this.getList() this.getList()
}, },
methods: { methods: {
getStatus(val) { getStatus(val) {
return this.outcomeList[val] return this.outcomeList[val]
}, },
// //
getOperate(){ getOperate() {
// getOperateList().then((response) => { // getOperateList().then((response) => {
// this.operateList = response.data // this.operateList = response.data
// }) // })
}, },
getList() { getList() {
this.listLoading = true this.listLoading = true
if(this.rangeDate && this.rangeDate.length>0){ if (this.rangeDate && this.rangeDate.length > 0) {
this.listQuery.operTime = this.rangeDate[0]+' - '+this.rangeDate[1]; this.listQuery.operTime = this.rangeDate[0] + ' - ' + this.rangeDate[1]
} }
getYwLogs(this.listQuery).then((response) => { getYwLogs(this.listQuery).then((response) => {
this.list = response.rows.map(item => { this.list = response.rows.map((item) => {
return item return item
}) })
this.total = response.total this.total = response.total
}) })
setTimeout(()=>{ setTimeout(() => {
this.listLoading = false this.listLoading = false
},500) }, 500)
}, },
// //
handleFilter() { handleFilter() {
this.listQuery.pageNum = 1 this.listQuery.pageNum = 1
this.getList() this.getList()
}, },
// //
resetFilter() { resetFilter() {
this.listQuery={ this.listQuery = {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
operaUserName: '', operaUserName: '',
ip: '', ip: '',
content:'', content: '',
result: '', result: '',
operType: '', operType: '',
logSort:1, logSort: 1,
logDesc:1, logDesc: 1,
}; }
this.rangeDate=[this.getCurrentDate(),this.getCurrentDate()] this.rangeDate = [this.getCurrentDate(), this.getCurrentDate()]
this.handleFilter() this.handleFilter()
}, },
// //
handleBackups() { handleBackups() {
downloadYwLogs().then(res => { downloadYwLogs().then((res) => {
downloadFile({ fileName: '业务日志.sql', fileData: res, fileType: 'text/html;charset=UTF-8'}) downloadFile({ fileName: '业务日志.sql', fileData: res, fileType: 'text/html;charset=UTF-8' })
}) })
}, },
// //
handleExport(){ handleExport() {
// exportCarDetail().then(res => {
// exportCarDetail().then(res => { // downloadFile({ fileName: '.xlsx', fileData: res, fileType: 'application/vnd.ms-excel;charset=utf-8' })
// downloadFile({ fileName: '.xlsx', fileData: res, fileType: 'application/vnd.ms-excel;charset=utf-8' }) // })
// }) },
}, getCurrentDate() {
getCurrentDate() { let now = new Date()
let now = new Date(); let year = now.getFullYear()
let year = now.getFullYear(); let month = now.getMonth() + 1
let month = now.getMonth() + 1; if (month < 10) {
if(month<10){ month = '0' + month
month = '0'+month }
} let day = now.getDate()
let day = now.getDate(); if (day < 10) {
if(day<10){ day = '0' + day
day = '0'+day }
} return year + '-' + month + '-' + day
return year + "-" + month + "-" + day; },
} },
}
} </script>
}
</script>

View File

@ -1,92 +1,122 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<div class="filter-container"> <div class="filter-container">
<el-input v-model="listQuery.operaUserName" placeholder="请输入操作人" <el-input
style="width: 200px" class="filter-item" :maxlength="30" v-model="listQuery.operaUserName"
@keyup.enter.native="handleFilter" placeholder="请输入操作人"
/> style="width: 200px"
<el-input v-model="listQuery.ip" placeholder="请输入IP地址" class="filter-item"
style="width: 200px" class="filter-item ml-20" :maxlength="30" :maxlength="30"
@keyup.enter.native="handleFilter" @keyup.enter.native="handleFilter"
/> />
<el-date-picker <el-input
v-model="rangeDate" v-model="listQuery.ip"
style="width: 300px" placeholder="请输入IP地址"
class="filter-item ml-20" style="width: 200px"
value-format="yyyy-MM-dd" class="filter-item ml-20"
type="daterange" :maxlength="30"
range-separator="至" @keyup.enter.native="handleFilter"
start-placeholder="开始日期" />
end-placeholder="结束日期" <el-date-picker
/> v-model="rangeDate"
<!-- <el-input v-model="listQuery.content" placeholder="请输入操作内容" style="width: 300px"
class="filter-item ml-20"
value-format="yyyy-MM-dd"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
/>
<!-- <el-input v-model="listQuery.content" placeholder="请输入操作内容"
style="width: 200px" class="filter-item ml-20" :maxlength="30" style="width: 200px" class="filter-item ml-20" :maxlength="30"
@keyup.enter.native="handleFilter" @keyup.enter.native="handleFilter"
/> />
<el-select v-model="listQuery.result" placeholder="请选择事件结果" style="width: 200px" class="filter-item ml-20"> <el-select v-model="listQuery.result" placeholder="请选择事件结果" style="width: 200px" class="filter-item ml-20">
<el-option v-for="item in Object.keys(outcomeList)" :key="item" :value="outcomeList[item]" :label="outcomeList[item]" /> <el-option v-for="item in Object.keys(outcomeList)" :key="item" :value="outcomeList[item]" :label="outcomeList[item]" />
</el-select>--> </el-select>-->
<el-select v-model="listQuery.operType" placeholder="请选择操作类型" style="width: 200px" class="filter-item ml-20"> <el-select
<el-option v-for="item in Object.keys(operateList)" :key="item" :value="operateList[item]" :label="operateList[item]" /> v-model="listQuery.operType"
</el-select> placeholder="请选择操作类型"
style="width: 200px"
class="filter-item ml-20"
>
<el-option
v-for="item in Object.keys(operateList)"
:key="item"
:value="operateList[item]"
:label="operateList[item]"
/>
</el-select>
<el-select v-model="listQuery.logSort" clearable filterable style="width: 200px" class="filter-item ml-20" placeholder="请选择" > <el-select
<el-option v-for="item in timeList" :key="item.id" :label="item.name" :value="item.id" /> v-model="listQuery.logSort"
</el-select> clearable
<el-select v-model="listQuery.logDesc" clearable filterable style="width: 200px" class="filter-item ml-20" placeholder="请选择" > filterable
<el-option v-for="item in sortList" :key="item.id" :label="item.name" :value="item.id" /> style="width: 200px"
</el-select> class="filter-item ml-20"
<el-button style="margin-left: 20px" class="filter-item" type="primary" @click="handleFilter"> placeholder="请选择"
查询 >
</el-button> <el-option v-for="item in timeList" :key="item.id" :label="item.name" :value="item.id" />
<el-button style="margin-left: 20px" class="filter-item" @click="resetFilter"> </el-select>
重置 <el-select
</el-button> v-model="listQuery.logDesc"
<el-button @click="handleBackups" class="filter-item" style="margin-left: 20px" type="warning"> clearable
备份 filterable
</el-button> style="width: 200px"
class="filter-item ml-20"
placeholder="请选择"
>
<el-option v-for="item in sortList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
<el-button style="margin-left: 20px" class="filter-item" type="primary" @click="handleFilter">
查询
</el-button>
<el-button style="margin-left: 20px" class="filter-item" @click="resetFilter"> 重置 </el-button>
<el-button @click="handleBackups" class="filter-item" style="margin-left: 20px" type="warning">
备份
</el-button>
</div>
<el-table
:key="tableKey"
v-loading="listLoading"
:data="list"
border
fit
highlight-current-row
style="width: 100%"
:max-height="tableHeight"
>
<el-table-column label="序号" align="center" width="80" type="index">
<template slot-scope="scope">
<span>{{ (listQuery.pageNum - 1) * listQuery.pageSize + scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column label="操作人" align="center" prop="operaUserName" />
<el-table-column label="操作时间" align="center" prop="operTime" />
<el-table-column label="IP地址" align="center" prop="ip" />
<el-table-column label="操作模块" align="center" prop="model" />
<el-table-column label="操作类型" align="center" prop="operType" />
<el-table-column label="操作详情" align="center" prop="operateDetail" />
<el-table-column label="操作结果" align="center" prop="result">
<template slot-scope="{ row }">
{{ row.result }}
</template>
</el-table-column>
<el-table-column label="操作参数" align="center" prop="params" />
<el-table-column label="操作方法" align="center" prop="method" />
<el-table-column label="操作路径" align="center" prop="operUri" />
<el-table-column label="执行时间(ms)" align="center" prop="times" />
</el-table>
<pagination
v-show="total > 0"
:total="total"
:page.sync="listQuery.pageNum"
:limit.sync="listQuery.pageSize"
@pagination="getList"
/>
</div> </div>
<el-table
:key="tableKey"
v-loading="listLoading"
:data="list"
border
fit
highlight-current-row
style="width: 100%"
:max-height="tableHeight"
>
<el-table-column label="序号" align="center" width="80" type="index">
<template scope="scope">
<span>{{ (listQuery.pageNum - 1) * listQuery.pageSize + scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column label="操作人" align="center" prop="operaUserName" />
<el-table-column label="操作时间" align="center" prop="operTime" />
<el-table-column label="IP地址" align="center" prop="ip" />
<el-table-column label="操作模块" align="center" prop="model" />
<el-table-column label="操作类型" align="center" prop="operType" />
<el-table-column label="操作详情" align="center" prop="operateDetail" />
<el-table-column label="操作结果" align="center" prop="result">
<template slot-scope="{ row }">
{{ row.result }}
</template>
</el-table-column>
<el-table-column label="操作参数" align="center" prop="params" />
<el-table-column label="操作方法" align="center" prop="method" />
<el-table-column label="操作路径" align="center" prop="operUri" />
<el-table-column label="执行时间(ms)" align="center" prop="times" />
</el-table>
<pagination
v-show="total > 0"
:total="total"
:page.sync="listQuery.pageNum"
:limit.sync="listQuery.pageSize"
@pagination="getList"
/>
</div>
</template> </template>
<script> <script>
@ -95,138 +125,143 @@ import Pagination from '@/components/Pagination'
import _ from 'lodash/fp' import _ from 'lodash/fp'
import { downloadFile } from '@/utils/download' import { downloadFile } from '@/utils/download'
import { getSysLogs,downloadSysLogs } from '@/api/system/log' import { getSysLogs, downloadSysLogs } from '@/api/system/log'
const outcomeList = { const outcomeList = {
1:'成功', 1: '成功',
2:'失败' 2: '失败',
}; }
const operateList = { const operateList = {
1:'新增', 1: '新增',
2:'修改', 2: '修改',
3:'删除', 3: '删除',
4:'查询', 4: '查询',
5:'导出', 5: '导出',
6:'下载', 6: '下载',
7:'备份', 7: '备份',
8:'登录', 8: '登录',
9:'登出' 9: '登出',
}; }
export default { export default {
components: { Pagination }, components: { Pagination },
data() { data() {
return { return {
tableKey: 0, tableKey: 0,
list: [], list: [],
outcomeList: outcomeList, outcomeList: outcomeList,
total: 0, total: 0,
listLoading: false, listLoading: false,
tableHeight: 650, tableHeight: 650,
operateList: operateList, operateList: operateList,
timeList:[{id:1,name:'时间'},{id:2,name:'操作人'},{id:3,name:'操作模块'},{id:4,name:'ip'},{id:5,name:'操作类型'},], timeList: [
sortList:[{id:1,name:'倒序'},{id:2,name:'升序'}], { id: 1, name: '时间' },
listQuery: { { id: 2, name: '操作人' },
pageNum: 1, { id: 3, name: '操作模块' },
pageSize: 10, { id: 4, name: 'ip' },
operaUserName: '', { id: 5, name: '操作类型' },
ip: '', ],
content:'', sortList: [
result: '', { id: 1, name: '倒序' },
operTime:'', { id: 2, name: '升序' },
operaType: '', ],
logSort:1, listQuery: {
logDesc:1, pageNum: 1,
}, pageSize: 10,
rangeDate:[], operaUserName: '',
} ip: '',
}, content: '',
created() { result: '',
// this.getList() operTime: '',
// this.getOperate() operaType: '',
}, logSort: 1,
mounted() { logDesc: 1,
this.listQuery.operTime = this.getCurrentDate()+' - '+this.getCurrentDate(); },
this.rangeDate = [this.getCurrentDate(),this.getCurrentDate()] rangeDate: [],
this.getList() }
},
methods: {
getStatus(val) {
return this.outcomeList[val]
}, },
// created() {
getOperate(){ // this.getList()
// getOperateList().then((response) => { // this.getOperate()
// this.operateList = response.data
// })
}, },
mounted() {
this.listQuery.operTime = this.getCurrentDate() + ' - ' + this.getCurrentDate()
this.rangeDate = [this.getCurrentDate(), this.getCurrentDate()]
this.getList()
},
methods: {
getStatus(val) {
return this.outcomeList[val]
},
//
getOperate() {
// getOperateList().then((response) => {
// this.operateList = response.data
// })
},
getList() { getList() {
this.listLoading = true this.listLoading = true
if(this.rangeDate && this.rangeDate.length>0){ if (this.rangeDate && this.rangeDate.length > 0) {
this.listQuery.operTime = this.rangeDate[0]+' - '+this.rangeDate[1]; this.listQuery.operTime = this.rangeDate[0] + ' - ' + this.rangeDate[1]
} }
getSysLogs(this.listQuery).then((response) => { getSysLogs(this.listQuery).then((response) => {
this.list = response.rows.map(item => { this.list = response.rows.map((item) => {
return item return item
}) })
this.total = response.total this.total = response.total
}) })
setTimeout(()=>{ setTimeout(() => {
this.listLoading = false this.listLoading = false
},500) }, 500)
}, },
// //
handleFilter() { handleFilter() {
this.listQuery.pageNum = 1 this.listQuery.pageNum = 1
this.getList() this.getList()
}, },
// //
resetFilter() { resetFilter() {
this.listQuery={ this.listQuery = {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
operaUserName: '', operaUserName: '',
ip: '', ip: '',
content:'', content: '',
result: '', result: '',
operateType: '', operateType: '',
logSort:1, logSort: 1,
logDesc:1, logDesc: 1,
}; }
this.rangeDate=[this.getCurrentDate(),this.getCurrentDate()] this.rangeDate = [this.getCurrentDate(), this.getCurrentDate()]
this.handleFilter() this.handleFilter()
},
//
handleBackups() {
downloadSysLogs().then((res) => {
downloadFile({ fileName: '系统日志.sql', fileData: res, fileType: 'text/html;charset=UTF-8' })
})
},
//
handleExport() {
// exportCarDetail().then(res => {
// downloadFile({ fileName: '.xlsx', fileData: res, fileType: 'application/vnd.ms-excel;charset=utf-8' })
// })
},
getCurrentDate() {
let now = new Date()
let year = now.getFullYear()
let month = now.getMonth() + 1
if (month < 10) {
month = '0' + month
}
let day = now.getDate()
if (day < 10) {
day = '0' + day
}
return year + '-' + month + '-' + day
},
}, },
//
handleBackups() {
downloadSysLogs().then(res => {
downloadFile({ fileName: '系统日志.sql', fileData: res, fileType: 'text/html;charset=UTF-8' })
})
},
//
handleExport(){
// exportCarDetail().then(res => {
// downloadFile({ fileName: '.xlsx', fileData: res, fileType: 'application/vnd.ms-excel;charset=utf-8' })
// })
},
getCurrentDate() {
let now = new Date();
let year = now.getFullYear();
let month = now.getMonth() + 1;
if(month<10){
month = '0'+month
}
let day = now.getDate();
if(day<10){
day = '0'+day
}
return year + "-" + month + "-" + day;
}
}
} }
</script> </script>