标签页面完善

This commit is contained in:
BianLzhaoMin 2024-12-12 15:30:21 +08:00
parent 26823d5cb8
commit f6237bd741
12 changed files with 370 additions and 261 deletions

4
env/.env.dev vendored
View File

@ -8,10 +8,10 @@ VITE_API_URL = '/proxyApi'
# VITE_proxyTarget = 'http://10.40.92.74:8080' #盛旭 # VITE_proxyTarget = 'http://10.40.92.74:8080' #盛旭
# VITE_proxyTarget = 'http://192.168.2.246:28080' # 马帅 # VITE_proxyTarget = 'http://192.168.2.246:28080' # 马帅
# VITE_proxyTarget = 'http://192.168.2.127:28080' # 梁超 VITE_proxyTarget = 'http://192.168.2.127:28080' # 梁超
# VITE_proxyTarget = 'http://36.33.26.201:17788/proxyApi' # 测试服务 # VITE_proxyTarget = 'http://36.33.26.201:17788/proxyApi' # 测试服务
# VITE_proxyTarget = 'http://192.168.0.244:28580' # 测试服务 # VITE_proxyTarget = 'http://192.168.0.244:28580' # 测试服务
VITE_proxyTarget = 'http://192.168.2.72:28080' # 盛旭 # VITE_proxyTarget = 'http://192.168.2.72:28080' # 盛旭
# VITE_proxyTarget = 'http://10.40.92.185:9206' # 赵福海 ( 设备类型) # VITE_proxyTarget = 'http://10.40.92.185:9206' # 赵福海 ( 设备类型)
# VITE_proxyTarget = 'http://10.40.92.16:9502' # 牛 (个人中心 基础信息企业申请认证) # VITE_proxyTarget = 'http://10.40.92.16:9502' # 牛 (个人中心 基础信息企业申请认证)

View File

@ -28,6 +28,7 @@
"vite-plugin-html": "^3.2.0", "vite-plugin-html": "^3.2.0",
"vite-plugin-zip-file": "^2.2.0", "vite-plugin-zip-file": "^2.2.0",
"vue": "^3.3.4", "vue": "^3.3.4",
"vue-qrcode": "^2.2.2",
"vue-router": "^4.2.5" "vue-router": "^4.2.5"
}, },
"devDependencies": { "devDependencies": {

View File

@ -50,6 +50,9 @@ importers:
vue: vue:
specifier: ^3.3.4 specifier: ^3.3.4
version: 3.3.4 version: 3.3.4
vue-qrcode:
specifier: ^2.2.2
version: 2.2.2(qrcode@1.5.4)(vue@3.3.4)
vue-router: vue-router:
specifier: ^4.2.5 specifier: ^4.2.5
version: 4.2.5(vue@3.3.4) version: 4.2.5(vue@3.3.4)
@ -581,6 +584,10 @@ packages:
engines: {node: '>=0.4.0'} engines: {node: '>=0.4.0'}
hasBin: true hasBin: true
ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
ansi-styles@3.2.1: ansi-styles@3.2.1:
resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
engines: {node: '>=4'} engines: {node: '>=4'}
@ -640,6 +647,10 @@ packages:
camel-case@4.1.2: camel-case@4.1.2:
resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==}
camelcase@5.3.1:
resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
engines: {node: '>=6'}
camelcase@6.3.0: camelcase@6.3.0:
resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
engines: {node: '>=10'} engines: {node: '>=10'}
@ -663,6 +674,9 @@ packages:
resolution: {integrity: sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==} resolution: {integrity: sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==}
engines: {node: '>= 10.0'} engines: {node: '>= 10.0'}
cliui@6.0.0:
resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
color-convert@1.9.3: color-convert@1.9.3:
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
@ -735,10 +749,17 @@ packages:
supports-color: supports-color:
optional: true optional: true
decamelize@1.2.0:
resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
engines: {node: '>=0.10.0'}
delayed-stream@1.0.0: delayed-stream@1.0.0:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
engines: {node: '>=0.4.0'} engines: {node: '>=0.4.0'}
dijkstrajs@1.0.3:
resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==}
dom-serializer@1.4.1: dom-serializer@1.4.1:
resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==}
@ -776,6 +797,9 @@ packages:
peerDependencies: peerDependencies:
vue: ^3.2.0 vue: ^3.2.0
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
entities@2.2.0: entities@2.2.0:
resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
@ -822,6 +846,10 @@ packages:
resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
engines: {node: '>=8'} engines: {node: '>=8'}
find-up@4.1.0:
resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
engines: {node: '>=8'}
follow-redirects@1.15.3: follow-redirects@1.15.3:
resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==} resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==}
engines: {node: '>=4.0'} engines: {node: '>=4.0'}
@ -851,6 +879,10 @@ packages:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
get-caller-file@2.0.5:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
glob-parent@5.1.2: glob-parent@5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'} engines: {node: '>= 6'}
@ -914,6 +946,10 @@ packages:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
is-fullwidth-code-point@3.0.0:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
is-glob@4.0.3: is-glob@4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
@ -977,6 +1013,10 @@ packages:
resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==}
engines: {node: '>=14'} engines: {node: '>=14'}
locate-path@5.0.0:
resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
engines: {node: '>=8'}
lodash-es@4.17.21: lodash-es@4.17.21:
resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
@ -1093,6 +1133,18 @@ packages:
nth-check@2.1.1: nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
p-limit@2.3.0:
resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
engines: {node: '>=6'}
p-locate@4.1.0:
resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
engines: {node: '>=8'}
p-try@2.2.0:
resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
engines: {node: '>=6'}
pako@1.0.11: pako@1.0.11:
resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
@ -1109,6 +1161,10 @@ packages:
path-browserify@1.0.1: path-browserify@1.0.1:
resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
path-exists@4.0.0:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
path-key@3.1.1: path-key@3.1.1:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'} engines: {node: '>=8'}
@ -1159,6 +1215,10 @@ packages:
pkg-types@1.0.3: pkg-types@1.0.3:
resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==}
pngjs@5.0.0:
resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==}
engines: {node: '>=10.13.0'}
postcss@8.4.31: postcss@8.4.31:
resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
engines: {node: ^10 || ^12 || >=14} engines: {node: ^10 || ^12 || >=14}
@ -1169,6 +1229,11 @@ packages:
proxy-from-env@1.1.0: proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
qrcode@1.5.4:
resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==}
engines: {node: '>=10.13.0'}
hasBin: true
queue-microtask@1.2.3: queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
@ -1187,6 +1252,13 @@ packages:
resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==}
engines: {node: '>= 0.10'} engines: {node: '>= 0.10'}
require-directory@2.1.1:
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
engines: {node: '>=0.10.0'}
require-main-filename@2.0.0:
resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
resolve@1.22.8: resolve@1.22.8:
resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
hasBin: true hasBin: true
@ -1223,6 +1295,9 @@ packages:
engines: {node: '>=10'} engines: {node: '>=10'}
hasBin: true hasBin: true
set-blocking@2.0.0:
resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
setimmediate@1.0.5: setimmediate@1.0.5:
resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==}
@ -1260,9 +1335,17 @@ packages:
spdx-license-ids@3.0.16: spdx-license-ids@3.0.16:
resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==}
string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
string_decoder@1.1.1: string_decoder@1.1.1:
resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
strip-ansi@6.0.1:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
strip-literal@1.3.0: strip-literal@1.3.0:
resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==}
@ -1418,6 +1501,12 @@ packages:
'@vue/composition-api': '@vue/composition-api':
optional: true optional: true
vue-qrcode@2.2.2:
resolution: {integrity: sha512-SbrXq/mSb1g2tbDyXPe9gy9KiMYsvxWKRErlpij1BqiFoHwQckheZV63CTw6yRLLUVG2RXAVlX+APkpdCK7SQQ==}
peerDependencies:
qrcode: ^1.0.0
vue: ^2.7.0 || ^3.0.0
vue-router@4.2.5: vue-router@4.2.5:
resolution: {integrity: sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==} resolution: {integrity: sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==}
peerDependencies: peerDependencies:
@ -1442,17 +1531,35 @@ packages:
webpack-virtual-modules@0.6.1: webpack-virtual-modules@0.6.1:
resolution: {integrity: sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==} resolution: {integrity: sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==}
which-module@2.0.1:
resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==}
which@2.0.2: which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
engines: {node: '>= 8'} engines: {node: '>= 8'}
hasBin: true hasBin: true
wrap-ansi@6.2.0:
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
engines: {node: '>=8'}
y18n@4.0.3:
resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
yallist@3.1.1: yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
yallist@4.0.0: yallist@4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
yargs-parser@18.1.3:
resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
engines: {node: '>=6'}
yargs@15.4.1:
resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
engines: {node: '>=8'}
snapshots: snapshots:
'@ampproject/remapping@2.2.1': '@ampproject/remapping@2.2.1':
@ -1983,6 +2090,8 @@ snapshots:
acorn@8.11.2: {} acorn@8.11.2: {}
ansi-regex@5.0.1: {}
ansi-styles@3.2.1: ansi-styles@3.2.1:
dependencies: dependencies:
color-convert: 1.9.3 color-convert: 1.9.3
@ -2045,6 +2154,8 @@ snapshots:
pascal-case: 3.1.2 pascal-case: 3.1.2
tslib: 2.6.2 tslib: 2.6.2
camelcase@5.3.1: {}
camelcase@6.3.0: {} camelcase@6.3.0: {}
caniuse-lite@1.0.30001565: {} caniuse-lite@1.0.30001565: {}
@ -2076,6 +2187,12 @@ snapshots:
dependencies: dependencies:
source-map: 0.6.1 source-map: 0.6.1
cliui@6.0.0:
dependencies:
string-width: 4.2.3
strip-ansi: 6.0.1
wrap-ansi: 6.2.0
color-convert@1.9.3: color-convert@1.9.3:
dependencies: dependencies:
color-name: 1.1.3 color-name: 1.1.3
@ -2134,8 +2251,12 @@ snapshots:
dependencies: dependencies:
ms: 2.1.2 ms: 2.1.2
decamelize@1.2.0: {}
delayed-stream@1.0.0: {} delayed-stream@1.0.0: {}
dijkstrajs@1.0.3: {}
dom-serializer@1.4.1: dom-serializer@1.4.1:
dependencies: dependencies:
domelementtype: 2.3.0 domelementtype: 2.3.0
@ -2190,6 +2311,8 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- '@vue/composition-api' - '@vue/composition-api'
emoji-regex@8.0.0: {}
entities@2.2.0: {} entities@2.2.0: {}
error-ex@1.3.2: error-ex@1.3.2:
@ -2253,6 +2376,11 @@ snapshots:
dependencies: dependencies:
to-regex-range: 5.0.1 to-regex-range: 5.0.1
find-up@4.1.0:
dependencies:
locate-path: 5.0.0
path-exists: 4.0.0
follow-redirects@1.15.3: {} follow-redirects@1.15.3: {}
form-data@4.0.0: form-data@4.0.0:
@ -2274,6 +2402,8 @@ snapshots:
gensync@1.0.0-beta.2: {} gensync@1.0.0-beta.2: {}
get-caller-file@2.0.5: {}
glob-parent@5.1.2: glob-parent@5.1.2:
dependencies: dependencies:
is-glob: 4.0.3 is-glob: 4.0.3
@ -2326,6 +2456,8 @@ snapshots:
is-extglob@2.1.1: {} is-extglob@2.1.1: {}
is-fullwidth-code-point@3.0.0: {}
is-glob@4.0.3: is-glob@4.0.3:
dependencies: dependencies:
is-extglob: 2.1.1 is-extglob: 2.1.1
@ -2381,6 +2513,10 @@ snapshots:
mlly: 1.4.2 mlly: 1.4.2
pkg-types: 1.0.3 pkg-types: 1.0.3
locate-path@5.0.0:
dependencies:
p-locate: 4.1.0
lodash-es@4.17.21: {} lodash-es@4.17.21: {}
lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21): lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21):
@ -2494,6 +2630,16 @@ snapshots:
dependencies: dependencies:
boolbase: 1.0.0 boolbase: 1.0.0
p-limit@2.3.0:
dependencies:
p-try: 2.2.0
p-locate@4.1.0:
dependencies:
p-limit: 2.3.0
p-try@2.2.0: {}
pako@1.0.11: {} pako@1.0.11: {}
param-case@3.0.4: param-case@3.0.4:
@ -2516,6 +2662,8 @@ snapshots:
path-browserify@1.0.1: {} path-browserify@1.0.1: {}
path-exists@4.0.0: {}
path-key@3.1.1: {} path-key@3.1.1: {}
path-parse@1.0.7: {} path-parse@1.0.7: {}
@ -2550,6 +2698,8 @@ snapshots:
mlly: 1.4.2 mlly: 1.4.2
pathe: 1.1.1 pathe: 1.1.1
pngjs@5.0.0: {}
postcss@8.4.31: postcss@8.4.31:
dependencies: dependencies:
nanoid: 3.3.7 nanoid: 3.3.7
@ -2560,6 +2710,12 @@ snapshots:
proxy-from-env@1.1.0: {} proxy-from-env@1.1.0: {}
qrcode@1.5.4:
dependencies:
dijkstrajs: 1.0.3
pngjs: 5.0.0
yargs: 15.4.1
queue-microtask@1.2.3: {} queue-microtask@1.2.3: {}
read-pkg@8.1.0: read-pkg@8.1.0:
@ -2585,6 +2741,10 @@ snapshots:
relateurl@0.2.7: {} relateurl@0.2.7: {}
require-directory@2.1.1: {}
require-main-filename@2.0.0: {}
resolve@1.22.8: resolve@1.22.8:
dependencies: dependencies:
is-core-module: 2.13.1 is-core-module: 2.13.1
@ -2617,6 +2777,8 @@ snapshots:
dependencies: dependencies:
lru-cache: 6.0.0 lru-cache: 6.0.0
set-blocking@2.0.0: {}
setimmediate@1.0.5: {} setimmediate@1.0.5: {}
shebang-command@2.0.0: shebang-command@2.0.0:
@ -2650,10 +2812,20 @@ snapshots:
spdx-license-ids@3.0.16: {} spdx-license-ids@3.0.16: {}
string-width@4.2.3:
dependencies:
emoji-regex: 8.0.0
is-fullwidth-code-point: 3.0.0
strip-ansi: 6.0.1
string_decoder@1.1.1: string_decoder@1.1.1:
dependencies: dependencies:
safe-buffer: 5.1.2 safe-buffer: 5.1.2
strip-ansi@6.0.1:
dependencies:
ansi-regex: 5.0.1
strip-literal@1.3.0: strip-literal@1.3.0:
dependencies: dependencies:
acorn: 8.11.2 acorn: 8.11.2
@ -2804,6 +2976,12 @@ snapshots:
dependencies: dependencies:
vue: 3.3.4 vue: 3.3.4
vue-qrcode@2.2.2(qrcode@1.5.4)(vue@3.3.4):
dependencies:
qrcode: 1.5.4
tslib: 2.6.2
vue: 3.3.4
vue-router@4.2.5(vue@3.3.4): vue-router@4.2.5(vue@3.3.4):
dependencies: dependencies:
'@vue/devtools-api': 6.5.1 '@vue/devtools-api': 6.5.1
@ -2833,10 +3011,39 @@ snapshots:
webpack-virtual-modules@0.6.1: {} webpack-virtual-modules@0.6.1: {}
which-module@2.0.1: {}
which@2.0.2: which@2.0.2:
dependencies: dependencies:
isexe: 2.0.0 isexe: 2.0.0
wrap-ansi@6.2.0:
dependencies:
ansi-styles: 4.3.0
string-width: 4.2.3
strip-ansi: 6.0.1
y18n@4.0.3: {}
yallist@3.1.1: {} yallist@3.1.1: {}
yallist@4.0.0: {} yallist@4.0.0: {}
yargs-parser@18.1.3:
dependencies:
camelcase: 5.3.1
decamelize: 1.2.0
yargs@15.4.1:
dependencies:
cliui: 6.0.0
decamelize: 1.2.0
find-up: 4.1.0
get-caller-file: 2.0.5
require-directory: 2.1.1
require-main-filename: 2.0.0
set-blocking: 2.0.0
string-width: 4.2.3
which-module: 2.0.1
y18n: 4.0.3
yargs-parser: 18.1.3

View File

@ -0,0 +1,22 @@
import { get, post } from '../../index'
// 获取维修列表
export const getRepairListApi = (data: any = {}) => {
return get('/material-mall/ma_rm/list', data)
}
// 新增维修保养数据
export const addRepairDataApi = (data: any = {}) => {
return post('/material-mall/ma_rm/add', data)
}
// 全证书列表
export const getSafeBookByMaIdListApi = (data: any = {}) => {
return get('/material-mall/safeBook/getSafeBookByMaId', data)
}
// 安全证书编辑
export const editSafeBookApi = (data: any = {}) => {
return post('/material-mall/safeBook/editSafeBook', data)
}
// 安全证书列表删除
export const delSafeBookByIdApi = (data: any = {}) => {
return post('/material-mall/safeBook/delSafeBook', data)
}

View File

@ -0,0 +1,22 @@
import { get, post } from '../../index'
// 获取标签列表
export const getTagDevListApi = (data: any = {}) => {
return get('/material-mall/tag/getTagDevList', data)
}
// 新增安全证书
export const addSafeBookApi = (data: any = {}) => {
return post('/material-mall/safeBook/addSafeBook', data)
}
// 全证书列表
export const getSafeBookByMaIdListApi = (data: any = {}) => {
return get('/material-mall/safeBook/getSafeBookByMaId', data)
}
// 安全证书编辑
export const editSafeBookApi = (data: any = {}) => {
return post('/material-mall/safeBook/editSafeBook', data)
}
// 安全证书列表删除
export const delSafeBookByIdApi = (data: any = {}) => {
return post('/material-mall/safeBook/delSafeBook', data)
}

View File

@ -329,7 +329,7 @@ const onJumpUser = () => {
class="left-check-box" class="left-check-box"
@click=" @click="
() => { () => {
searchCheckVisible = true searchCheckVisible = !searchCheckVisible
} }
" "
> >

View File

@ -3,8 +3,6 @@ import * as ElementPlusIconsVue from '@element-plus/icons-vue'
import { createApp } from 'vue' import { createApp } from 'vue'
// import { createPinia } from 'pinia'
import App from './App.vue' import App from './App.vue'
import pinia from "./store" import pinia from "./store"
import router from './router' import router from './router'
@ -13,6 +11,7 @@ import './style/css/reset.css'
import './assets/font/iconfont.js' import './assets/font/iconfont.js'
import ElementPlus from 'element-plus' import ElementPlus from 'element-plus'
import zhCn from 'element-plus/es/locale/lang/zh-cn' import zhCn from 'element-plus/es/locale/lang/zh-cn'
import VueQrcode from 'vue-qrcode'
import registerDirectives from 'utils/directive' import registerDirectives from 'utils/directive'
@ -21,6 +20,7 @@ const app = createApp(App)
for (const [key, component] of Object.entries(ElementPlusIconsVue)) { for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
app.component(key, component) app.component(key, component)
app.component('vue-qr-code', VueQrcode)
} }

View File

@ -296,7 +296,18 @@ const routes: Array<RouteRecordRaw> = [
name: 'tag-manage', name: 'tag-manage',
component: () => import('views/user/lessor/tag-manage/index.vue'), component: () => import('views/user/lessor/tag-manage/index.vue'),
meta: { meta: {
title: '标签', title: '标签管理',
keepAlive: true,
AuthFlag: false,
isLogin: true
},
},
{
path: '/repair-manage',
name: 'repair-manage',
component: () => import('views/user/lessor/repair-manage/index.vue'),
meta: {
title: '维修保养管理',
keepAlive: true, keepAlive: true,
AuthFlag: false, AuthFlag: false,
isLogin: true isLogin: true

View File

@ -30,6 +30,7 @@ const allList = [
{ title: '质检管理', name: 'quality-manage', permission: ['1'] }, { title: '质检管理', name: 'quality-manage', permission: ['1'] },
{ title: '安全证书管理', name: 'security-certificate', permission: ['1'] }, { title: '安全证书管理', name: 'security-certificate', permission: ['1'] },
{ title: '标签管理', name: 'tag-manage', permission: ['1'] }, { title: '标签管理', name: 'tag-manage', permission: ['1'] },
{ title: '维修保养管理', name: 'repair-manage', permission: ['1'] },
{ title: '需求管理', name: 'sourcingNeed', permission: ['2'] }, { title: '需求管理', name: 'sourcingNeed', permission: ['2'] },
{ title: '订单管理', name: 'orderManagement', permission: ['2'] }, { title: '订单管理', name: 'orderManagement', permission: ['2'] },
{ title: '合同管理', name: 'contract-manage', permission: ['1'] }, { title: '合同管理', name: 'contract-manage', permission: ['1'] },

View File

@ -26,7 +26,7 @@
inputmode="numeric" inputmode="numeric"
v-model="searchParams.minNum" v-model="searchParams.minNum"
style="width: 100%" style="width: 100%"
placeholder="质检次数" placeholder="维修保养次数"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -37,7 +37,7 @@
inputmode="numeric" inputmode="numeric"
v-model.trim="searchParams.maxNum" v-model.trim="searchParams.maxNum"
style="width: 100%" style="width: 100%"
placeholder="质检次数" placeholder="维修保养次数"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -76,7 +76,7 @@
@click=" @click="
() => { () => {
isRepublish = true isRepublish = true
dialogTitle = '质检新增' dialogTitle = '新建维修保养'
addOrEditDialogVisible = true addOrEditDialogVisible = true
} }
" "
@ -191,7 +191,7 @@
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="24"> <el-col :span="24">
<el-form-item label="质检名称" prop="qcName"> <el-form-item label="维修保养名称" prop="qcName">
<el-input <el-input
v-model.trim="addOrEditForm.qcName" v-model.trim="addOrEditForm.qcName"
placeholder="请输入质检名称" placeholder="请输入质检名称"
@ -199,26 +199,16 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="24"> <el-col :span="24">
<el-form-item label="质检员" prop="qcUser"> <el-form-item label="维修保养日期" prop="rmTime">
<el-input
clearable
placeholder="请输入质检员"
v-model="addOrEditForm.qcUser"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="质检日期" prop="qcTime">
<el-date-picker <el-date-picker
clearable clearable
type="date" type="date"
style="width: 100%" style="width: 100%"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
v-model="addOrEditForm.qcTime" v-model="addOrEditForm.rmTime"
placeholder="请选择质检日期" placeholder="请选择质检日期"
/> />
</el-form-item> </el-form-item>
@ -234,7 +224,7 @@
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="24"> <el-col :span="24">
<el-form-item label="质检附件" prop="fileInfoList"> <el-form-item label="维修保养附件" prop="fileInfoList">
<UploadComponentNew <UploadComponentNew
:maxSize="2" :maxSize="2"
:max-limit="1" :max-limit="1"
@ -398,6 +388,8 @@ import {
qualityDeleteByIdApi, qualityDeleteByIdApi,
getAssociationListApi, getAssociationListApi,
} from 'http/api/quality-manage' } from 'http/api/quality-manage'
import { getRepairListApi, addRepairDataApi } from 'http/api/repair-manage/index'
import { InfoFilled } from '@element-plus/icons-vue' import { InfoFilled } from '@element-plus/icons-vue'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
@ -421,7 +413,7 @@ const uploadUrl = import.meta.env.VITE_API_URL + '/file/upload'
const searchParams = reactive({ const searchParams = reactive({
deviceCode: '', deviceCode: '',
qcStartTime: '', StartTime: '',
qcEndTime: '', qcEndTime: '',
createStartTime: '', createStartTime: '',
createEndTime: '', createEndTime: '',
@ -443,9 +435,9 @@ const searchParamsInDialog = reactive({
const addOrEditForm = ref<any>({ const addOrEditForm = ref<any>({
maId: '', maId: '',
qcName: '', rmName: '',
qcUser: '', rmUser: '',
qcTime: '', rmTime: '',
fileInfoList: [], fileInfoList: [],
fileInfoTempList: [], fileInfoTempList: [],
}) })
@ -469,9 +461,9 @@ const checkMaxNum = (rule: any, value: any, callback: any) => {
const addOrEditFormRules = reactive({ const addOrEditFormRules = reactive({
maId: [{ required: true, message: '请选择关联装备', trigger: 'change' }], maId: [{ required: true, message: '请选择关联装备', trigger: 'change' }],
qcName: [{ required: true, message: '请输入质检名称', trigger: 'blur' }], rmName: [{ required: true, message: '请输入质检名称', trigger: 'blur' }],
qcUser: [{ required: true, message: '请输入质检员', trigger: 'change' }], rmUser: [{ required: true, message: '请输入质检员', trigger: 'change' }],
qcTime: [{ required: true, message: '请选择质检日期', trigger: 'change' }], rmTime: [{ required: true, message: '请选择质检日期', trigger: 'change' }],
fileInfoList: [{ required: true, message: '请上传质检附件', trigger: 'blur' }], fileInfoList: [{ required: true, message: '请上传质检附件', trigger: 'blur' }],
}) })
const searchFormRules = reactive({ const searchFormRules = reactive({
@ -509,7 +501,8 @@ const getLeaseListData = async () => {
searchParams.createStartTime = createTime.value[0] searchParams.createStartTime = createTime.value[0]
searchParams.createEndTime = createTime.value[1] searchParams.createEndTime = createTime.value[1]
} }
const { data: res }: any = await getQualityListApi(searchParams) const { data: res }: any = await getRepairListApi()
console.log(res, '维修列表')
qualityLis.value = res.rows qualityLis.value = res.rows
total.value = res.total total.value = res.total
} }

View File

@ -0,0 +1,18 @@
<template>
<!-- 标签管理 -->
<div class="qr-code-container">
<h1>装备信息</h1>
<div>装备名称***</div>
<div>装备编号***</div>
<div>装备图片***</div>
</div>
</template>
<script setup lang="ts"></script>
<style lang="scss" scoped>
.qr-code-container {
width: 100vw;
height: 100vh;
}
</style>

View File

@ -21,32 +21,32 @@
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item prop="code"> <el-form-item prop="deviceName">
<el-input <el-input
clearable clearable
style="width: 100%" style="width: 100%"
placeholder="请输入装备名称" placeholder="请输入装备名称"
v-model.trim="searchParams.code" v-model.trim="searchParams.deviceName"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item prop="code"> <el-form-item prop="nickName">
<el-input <el-input
clearable clearable
style="width: 100%" style="width: 100%"
placeholder="请输入上传人" placeholder="请输入上传人"
v-model.trim="searchParams.code" v-model.trim="searchParams.nickName"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item prop="code"> <el-form-item prop="comName">
<el-input <el-input
clearable clearable
style="width: 100%" style="width: 100%"
placeholder="请输入归属公司" placeholder="请输入归属公司"
v-model.trim="searchParams.code" v-model.trim="searchParams.comName"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -61,11 +61,22 @@
style="width: 100%" style="width: 100%"
range-separator="-" range-separator="-"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
start-placeholder="上传开始日期" start-placeholder="上传日期"
end-placeholder="上传结束日期" end-placeholder="上传日期"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6">
<el-form-item>
<el-button type="primary" class="primary-lease" @click="getLeaseListData">
查询
</el-button>
<el-button @click="onReset" type="primary" class="primary-lease">
重置
</el-button>
</el-form-item>
</el-col>
</el-row> </el-row>
</el-form> </el-form>
<!-- 表格 --> <!-- 表格 -->
@ -79,46 +90,22 @@
}" }"
> >
<el-table-column align="center" label="序号" type="index" width="80" /> <el-table-column align="center" label="序号" type="index" width="80" />
<el-table-column align="center" prop="deviceCode" label="装备编号" /> <el-table-column align="center" prop="code" label="装备编号" />
<el-table-column align="center" prop="deviceName" label="装备名称" /> <el-table-column align="center" prop="deviceName" label="装备名称" />
<el-table-column align="center" prop="nickName" label="上传人" width="120" /> <el-table-column align="center" prop="nickName" label="上传人" width="120" />
<el-table-column align="center" prop="createTime" label="归属公司" /> <el-table-column align="center" prop="comName" label="归属公司" />
<el-table-column align="center" prop="updateTime" label="装备数量" /> <el-table-column align="center" prop="deviceCount" label="装备数量" />
<el-table-column align="center" prop="updateTime" label="上传时间" /> <el-table-column align="center" prop="createTime" label="上传时间" />
<el-table-column align="center" label="二维码标签" :width="220"> <el-table-column align="center" label="二维码标签" :width="220">
<template #default="{ row }"> <template #default="{ row }">
<el-button <el-button
size="small" size="small"
type="primary" type="primary"
class="primary-lease" class="primary-lease"
@click="onViewQualityRecord(row)" @click="onViewQualityRecord(row.code)"
> >
查看 查看
</el-button> </el-button>
<el-popconfirm
width="220"
:icon="InfoFilled"
icon-color="#626AEF"
title="确定删除该项需求吗?"
@confirm="onDelete(row.maId)"
>
<template #reference>
<el-button size="small" type="danger"> 删除 </el-button>
</template>
<template #actions="{ confirm }">
<el-button type="primary" class="primary-lease" size="small"
>取消</el-button
>
<el-button
class="primary-lease"
type="primary"
size="small"
@click="confirm()"
>
确定
</el-button>
</template>
</el-popconfirm>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -133,172 +120,59 @@
/> />
<!-- 新增修改对话框 --> <!-- 新增修改对话框 -->
<el-dialog <el-dialog
width="40%" width="30%"
align-center align-center
@close="onClose"
destroy-on-close destroy-on-close
:title="dialogTitle" :title="dialogTitle"
v-model="addOrEditDialogVisible" v-model="addOrEditDialogVisible"
> >
<el-form <div class="qr-code-container">
label-width="auto" <vue-qr-code :value="qrCodeValue" :width="200" id="qrCodeContainer" />
label-position="right" <el-button
ref="addOrEditFormRef" style="width: 200px"
:model="addOrEditForm" class="primary-lease"
:rules="addOrEditFormRules" type="primary"
> @click="onDownLoadQrCode"
<el-row :gutter="20"> >
<el-col :span="24"> 下载标签
<el-form-item label="查看标签" style="width: 100%" prop="maId"> </el-button>
<el-select </div>
clearable
style="width: 100%"
placeholder="请选择关联装备"
v-model="addOrEditForm.maId"
@change="onMaIdChange"
:disabled="dialogTitle != '证书新增'"
>
<el-option
:key="item.maId"
:value="item.maId * 1"
:label="item.deviceName"
v-for="item in associationList"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-button class="primary-lease" type="primary"> 下载标签 </el-button>
</el-row>
<!-- <el-row :gutter="20">
<el-col :span="24">
<el-form-item label="1" style="margin-bottom: 0" class="upload-tip">
支持格式.jpg.png 单个文件大小不能超过2M最多可上传1张
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="安全证书附件" prop="fileInfoList">
<div style="flex: 1">
<UploadComponentNew
:maxSize="2"
:max-limit="1"
width="100%"
height="100%"
:multiple="true"
:autoUpload="true"
:minLimit="addOrEditForm.fileInfoList.length"
:actionUrl="uploadUrl"
listType="text"
:justifyContent="`flex-start`"
@onFileChange="onFileChange"
:acceptTypeList="['.jpg', '.png', '.pdf', '.doc']"
>
<template v-slot:default>
<el-button
:icon="UploadFilled"
type="primary"
class="primary-lease"
>上传文件</el-button
>
</template>
</UploadComponentNew>
</div>
</el-form-item>
</el-col>
</el-row> -->
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" class="primary-lease" @click="onCancel"
>取消</el-button
>
<el-button class="primary-lease" type="primary" @click="onSubmit()">
提交
</el-button>
</div>
</template>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { getTagDevListApi } from 'http/api/tag-manage/index'
import PagingComponent from 'components/PagingComponent/index.vue' import PagingComponent from 'components/PagingComponent/index.vue'
import UploadComponentNew from 'components/uploadComponentNew/index.vue'
import {
addSafeBookApi,
getSafeBookByMaIdListApi,
editSafeBookApi,
delSafeBookByIdApi,
getAssociationListApi,
} from 'http/api/security-certificate'
import { InfoFilled, UploadFilled } from '@element-plus/icons-vue'
import { ElMessage } from 'element-plus'
const total = ref(0) const total = ref(0)
const createTime = ref([]) const createTime = ref([])
const qualityLis = ref<any>([]) const qualityLis = ref<any>([])
const dialogTitle = ref('') const qrCodeValue = ref<any>('')
const searchFormRef = ref<any>(null) const searchFormRef = ref<any>(null)
const addOrEditFormRef = ref<any>(null) const dialogTitle = ref('二维码查看')
const addOrEditDialogVisible = ref(false) const addOrEditDialogVisible = ref(false)
const associationList = ref<any>([])
const uploadUrl = import.meta.env.VITE_API_URL + '/file/upload'
const searchParams = reactive({ const searchParams = reactive({
code: '', code: '',
deviceName: '',
nickName: '',
comName: '',
startTime: '', startTime: '',
endTime: '', endTime: '',
pageSize: 10, pageSize: 10,
pageNum: 1, pageNum: 1,
}) })
const addOrEditForm = ref<any>({
maId: '',
fileInfoList: [],
fileInfoTempList: [],
})
const addOrEditFormRules = reactive({
maId: [{ required: true, message: '请选择关联装备', trigger: 'change' }],
fileInfoList: [{ required: true, message: '请上传证书附件', trigger: 'blur' }],
})
// //
const getLeaseListData = async () => { const getLeaseListData = async () => {
if (createTime.value.length > 0) { if (createTime.value.length > 0) {
searchParams.startTime = createTime.value[0] searchParams.startTime = createTime.value[0]
searchParams.endTime = createTime.value[1] searchParams.endTime = createTime.value[1]
} }
const { data: res }: any = await getSafeBookByMaIdListApi(searchParams) const { data: res }: any = await getTagDevListApi(searchParams)
qualityLis.value = res.rows qualityLis.value = res.rows
total.value = res.total total.value = res.total
} }
//
const getAssociationListData = async () => {
const res: any = await getAssociationListApi()
associationList.value = res.data
}
const onMaIdChange = (id: any) => {
ElMessage.closeAll()
try {
associationList.value.forEach((e: any) => {
if (e.maId == id && e.isSafeBook === 1) {
ElMessage({
type: 'warning',
message: '当前装备证书已上传,不可重复选择!',
})
addOrEditForm.value.maId = ''
throw new Error()
}
})
} catch (error) {}
}
// //
const onReset = () => { const onReset = () => {
createTime.value = [] createTime.value = []
@ -309,72 +183,23 @@ const onReset = () => {
searchFormRef.value.resetFields() searchFormRef.value.resetFields()
getLeaseListData() getLeaseListData()
} }
//
// const onViewQualityRecord = (code: any) => {
const onDelete = async (maId: any) => { qrCodeValue.value = 'http://192.168.0.244:17766/login'
const res: any = await delSafeBookByIdApi({ maId })
if (res.code === 200) {
ElMessage({
type: 'success',
message: '删除成功',
})
getLeaseListData()
}
}
//
const onSubmit = () => {
addOrEditForm.value.fileInfoList = addOrEditForm.value.fileInfoTempList
addOrEditFormRef.value.validate(async (valid: any) => {
if (valid) {
const SEN_API = dialogTitle.value === '证书修改' ? editSafeBookApi : addSafeBookApi
const res: any = await SEN_API(addOrEditForm.value)
if (res.code === 200) {
ElMessage({
type: 'success',
message: '提交成功',
})
addOrEditDialogVisible.value = false
getLeaseListData()
}
}
})
}
//
const onViewQualityRecord = (row: any) => {
addOrEditForm.value.maId = row.maId
dialogTitle.value = '标签查看'
addOrEditDialogVisible.value = true addOrEditDialogVisible.value = true
} }
//
// const onDownLoadQrCode = () => {
const onFileChange = (fileList: any) => { let qrCodeElement = document.getElementById('qrCodeContainer') as HTMLImageElement
addOrEditForm.value.fileInfoTempList = [] let qrCodeSrc = qrCodeElement.src
const fileListTemp = fileList.map((e: any) => { const link = document.createElement('a')
return { link.href = qrCodeSrc
fileName: e.name, link.download = 'qr-code.png'
fileUrl: e.url, link.click()
}
})
addOrEditForm.value.fileInfoTempList.push(...fileListTemp)
}
//
const onCancel = () => {
addOrEditDialogVisible.value = false
}
const onClose = () => {
addOrEditFormRef.value.resetFields()
addOrEditForm.value.fileInfoTempList = []
addOrEditForm.value.fileInfoList = []
addOrEditForm.value.maId = ''
} }
onMounted(() => { onMounted(() => {
getLeaseListData() getLeaseListData()
getAssociationListData()
}) })
</script> </script>
@ -446,11 +271,20 @@ onMounted(() => {
max-height: 100vh !important; max-height: 100vh !important;
.el-dialog__body { .el-dialog__body {
flex: 1; flex: 1;
padding: 0 10px 20px;
overflow-y: scroll !important; overflow-y: scroll !important;
} }
.dialog-content { .dialog-content {
padding: 20px; padding: 20px;
} }
.qr-code-container {
width: 100%;
display: flex;
align-items: center;
flex-direction: column;
justify-content: center;
}
} }
} }
</style> </style>