Browse Source

编写和对接网关参数管理、设备通信参数管理、维保管理、设备采集参数管理页面功能

dev
selia-zx 2 months ago
parent
commit
859b3e2d9a
  1. 284
      public/index.html
  2. 44
      src/api/device/comm.js
  3. 44
      src/api/device/gateway.js
  4. 44
      src/api/device/gather.js
  5. 44
      src/api/device/ledger.js
  6. 52
      src/api/device/maintenance.js
  7. 44
      src/api/device/qrCode.js
  8. 1
      src/assets/icons/svg/comm.svg
  9. 1
      src/assets/icons/svg/device.svg
  10. 1
      src/assets/icons/svg/gateway.svg
  11. 1
      src/assets/icons/svg/gather.svg
  12. 1
      src/assets/icons/svg/ledger.svg
  13. 1
      src/assets/icons/svg/maintenance.svg
  14. 1
      src/assets/icons/svg/qrCode.svg
  15. BIN
      src/assets/images/maint-icon1.png
  16. BIN
      src/assets/images/maint-icon2.png
  17. BIN
      src/assets/images/maint-icon3.png
  18. BIN
      src/assets/images/maint-icon4.png
  19. BIN
      src/assets/images/texture1.png
  20. BIN
      src/assets/images/texture2.png
  21. BIN
      src/assets/images/texture3.png
  22. BIN
      src/assets/images/texture4.png
  23. 12
      src/assets/styles/index.scss
  24. 435
      src/views/device/comm/index.vue
  25. 495
      src/views/device/gateway/index.vue
  26. 4
      src/views/device/gather/index.vue
  27. 566
      src/views/device/ledger/index.vue
  28. 828
      src/views/device/maintenance/index.vue
  29. 3
      src/views/device/qrCode/index.vue
  30. 15
      src/views/monitor/job/index.vue
  31. 9
      src/views/monitor/job/log.vue
  32. 12
      src/views/monitor/logininfor/index.vue
  33. 9
      src/views/monitor/operlog/index.vue
  34. 12
      src/views/system/config/index.vue
  35. 3
      src/views/system/dept/index.vue
  36. 12
      src/views/system/dict/data.vue
  37. 12
      src/views/system/dict/index.vue
  38. 3
      src/views/system/menu/index.vue
  39. 9
      src/views/system/notice/index.vue
  40. 12
      src/views/system/post/index.vue
  41. 6
      src/views/system/role/authUser.vue
  42. 12
      src/views/system/role/index.vue
  43. 12
      src/views/system/user/index.vue
  44. 12
      src/views/tool/gen/index.vue

284
public/index.html

@ -1,208 +1,104 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="renderer" content="webkit"> <meta name="renderer" content="webkit" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> <meta
<link rel="icon" href="<%= BASE_URL %>favicon.ico"> name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"
/>
<link rel="icon" href="<%= BASE_URL %>favicon.ico" />
<title><%= webpackConfig.name %></title> <title><%= webpackConfig.name %></title>
<!--[if lt IE 11]><script>window.location.href='/html/ie.html';</script><![endif]--> <!--[if lt IE 11
<style> ]><script>
html, window.location.href = "/html/ie.html";
body, </script><!
#app { [endif]-->
height: 100%; <style>
margin: 0px; html,
padding: 0px; body,
} #app {
.chromeframe { height: 100%;
margin: 0.2em 0; margin: 0px;
background: #ccc; padding: 0px;
color: #000;
padding: 0.2em 0;
}
#loader-wrapper {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 999999;
}
#loader {
display: block;
position: relative;
left: 50%;
top: 50%;
width: 150px;
height: 150px;
margin: -75px 0 0 -75px;
border-radius: 50%;
border: 3px solid transparent;
border-top-color: #FFF;
-webkit-animation: spin 2s linear infinite;
-ms-animation: spin 2s linear infinite;
-moz-animation: spin 2s linear infinite;
-o-animation: spin 2s linear infinite;
animation: spin 2s linear infinite;
z-index: 1001;
}
#loader:before {
content: "";
position: absolute;
top: 5px;
left: 5px;
right: 5px;
bottom: 5px;
border-radius: 50%;
border: 3px solid transparent;
border-top-color: #FFF;
-webkit-animation: spin 3s linear infinite;
-moz-animation: spin 3s linear infinite;
-o-animation: spin 3s linear infinite;
-ms-animation: spin 3s linear infinite;
animation: spin 3s linear infinite;
}
#loader:after {
content: "";
position: absolute;
top: 15px;
left: 15px;
right: 15px;
bottom: 15px;
border-radius: 50%;
border: 3px solid transparent;
border-top-color: #FFF;
-moz-animation: spin 1.5s linear infinite;
-o-animation: spin 1.5s linear infinite;
-ms-animation: spin 1.5s linear infinite;
-webkit-animation: spin 1.5s linear infinite;
animation: spin 1.5s linear infinite;
}
@-webkit-keyframes spin {
0% {
-webkit-transform: rotate(0deg);
-ms-transform: rotate(0deg);
transform: rotate(0deg);
} }
100% { #loader-wrapper {
-webkit-transform: rotate(360deg); position: fixed;
-ms-transform: rotate(360deg); top: 0;
transform: rotate(360deg); left: 0;
width: 100%;
height: 100%;
z-index: 999999;
background: #002249;
} }
}
@keyframes spin { #loader {
0% { display: block;
-webkit-transform: rotate(0deg); position: relative;
-ms-transform: rotate(0deg); left: calc(50% - 8 * var(--s));
transform: rotate(0deg); top: calc(50% - 8 * var(--s));
z-index: 1001;
/* css变量 环的宽度 */
--s: 10px;
width: calc(16 * var(--s));
height: calc(16 * var(--s));
border-radius: 50%;
/* 网格布局 */
display: grid;
/* 渐变蒙版 */
-webkit-mask: radial-gradient(
50% 50%,
#0000 calc(99% - 2 * var(--s)),
#000 calc(100% - 2 * var(--s))
);
/* 执行动画:动画名 时长 线性 循环播放 */
animation: spin 3s linear infinite;
} }
100% { #loader::before {
-webkit-transform: rotate(360deg); content: "";
-ms-transform: rotate(360deg); /* 圆锥渐变 */
transform: rotate(360deg); background: conic-gradient(
from 25deg,
#70a1d7 25%,
#a1de93 0 50%,
#f7f48b 0 75%,
#f47c7c 0
);
/* 渐变蒙版 */
-webkit-mask: repeating-conic-gradient(#0000 0 25deg, #000 23% 25%),
radial-gradient(var(--s) at var(--s) 50%, #000 97%, #0000)
left/calc(100% - 2 * var(--s)) 100% repeat-x,
radial-gradient(var(--s) at 50% var(--s), #000 97%, #0000) top/100%
calc(100% - 2 * var(--s)) repeat-y;
} }
} /* 定义动画 */
@keyframes spin {
to {
#loader-wrapper .loader-section { /* 旋转一周 */
position: fixed; transform: rotate(1turn);
top: 0; }
width: 51%; }
height: 100%; #loader-wrapper .load_title {
background: #002249; font-family: "Open Sans";
z-index: 1000; color: #fff;
-webkit-transform: translateX(0); font-size: 19px;
-ms-transform: translateX(0); width: 100%;
transform: translateX(0); text-align: center;
} z-index: 9999999999999;
position: absolute;
#loader-wrapper .loader-section.section-left { top: 62%;
left: 0; opacity: 1;
} line-height: 30px;
}
#loader-wrapper .loader-section.section-right { </style>
right: 0;
}
.loaded #loader-wrapper .loader-section.section-left {
-webkit-transform: translateX(-100%);
-ms-transform: translateX(-100%);
transform: translateX(-100%);
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
}
.loaded #loader-wrapper .loader-section.section-right {
-webkit-transform: translateX(100%);
-ms-transform: translateX(100%);
transform: translateX(100%);
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
}
.loaded #loader {
opacity: 0;
-webkit-transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
}
.loaded #loader-wrapper {
visibility: hidden;
-webkit-transform: translateY(-100%);
-ms-transform: translateY(-100%);
transform: translateY(-100%);
-webkit-transition: all 0.3s 1s ease-out;
transition: all 0.3s 1s ease-out;
}
.no-js #loader-wrapper {
display: none;
}
.no-js h1 {
color: #222222;
}
#loader-wrapper .load_title {
font-family: 'Open Sans';
color: #FFF;
font-size: 19px;
width: 100%;
text-align: center;
z-index: 9999999999999;
position: absolute;
top: 60%;
opacity: 1;
line-height: 30px;
}
#loader-wrapper .load_title span {
font-weight: normal;
font-style: italic;
font-size: 13px;
color: #FFF;
opacity: 0.5;
}
</style>
</head> </head>
<body> <body>
<div id="app"> <div id="app">
<div id="loader-wrapper"> <div id="loader-wrapper">
<div id="loader"></div> <div id="loader"></div>
<div class="loader-section section-left"></div> <div class="load_title">正在加载最新内容,稍等片刻...</div>
<div class="loader-section section-right"></div> </div>
<div class="load_title">正在加载系统资源,请耐心等待</div> </div>
</div>
</div>
</body> </body>
</html> </html>

44
src/api/device/comm.js

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询设备参数列表
export function cmpList(query) {
return request({
url: '/device/cmp/list',
method: 'get',
params: query
})
}
// 根据id查询网关信息
export function getCMP(cpmId) {
return request({
url: '/device/cmp/' + cpmId,
method: 'get'
})
}
// 新增设备参数
export function addCMP(data) {
return request({
url: '/device/cmp',
method: 'post',
data: data
})
}
// 修改设备参数
export function updateCMP(data) {
return request({
url: '/device/cmp',
method: 'put',
data: data
})
}
// 删除设备参数
export function delCMP(cpmIds) {
return request({
url: '/device/cmp/' + cpmIds,
method: 'delete'
})
}

44
src/api/device/gateway.js

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询网关列表
export function gatewayList(query) {
return request({
url: '/device/gateway/list',
method: 'get',
params: query
})
}
// 根据id查询网关信息
export function getGateway(gwId) {
return request({
url: '/device/gateway/' + gwId,
method: 'get'
})
}
// 新增网关参数
export function addGateway(data) {
return request({
url: '/device/gateway',
method: 'post',
data: data
})
}
// 修改网关参数
export function updateGateway(data) {
return request({
url: '/device/gateway',
method: 'put',
data: data
})
}
// 删除网关参数
export function delGateway(gwIds) {
return request({
url: '/device/gateway/' + gwIds,
method: 'delete'
})
}

44
src/api/device/gather.js

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询网关列表
export function gatewayList(query) {
return request({
url: '/device/gateway/list',
method: 'get',
params: query
})
}
// 根据id查询网关信息
export function getGateway(gwId) {
return request({
url: '/device/gateway/' + gwId,
method: 'get'
})
}
// 新增网关参数
export function addGateway(data) {
return request({
url: '/device/gateway',
method: 'post',
data: data
})
}
// 修改网关参数
export function updateGateway(data) {
return request({
url: '/device/gateway',
method: 'put',
data: data
})
}
// 删除网关参数
export function delGateway(gwIds) {
return request({
url: '/device/gateway/' + gwIds,
method: 'delete'
})
}

44
src/api/device/ledger.js

@ -0,0 +1,44 @@
import request from "@/utils/request";
// 查询设备台账列表
export function ledgerList(query) {
return request({
url: "/device/ledger/list",
method: "get",
params: query,
});
}
// 根据id查询设备台账信息
export function getLedger(ledgerId) {
return request({
url: "/device/ledger/" + ledgerId,
method: "get",
});
}
// 新增设备台账
export function addLedger(data) {
return request({
url: "/device/ledger",
method: "post",
data: data,
});
}
// 修改设备台账
export function updateLedger(data) {
return request({
url: "/device/ledger",
method: "put",
data: data,
});
}
// 删除设备台账
export function delGateway(ledgerIds) {
return request({
url: "/device/ledger/" + ledgerIds,
method: "delete",
});
}

52
src/api/device/maintenance.js

@ -0,0 +1,52 @@
import request from '@/utils/request'
// 查询维保列表
export function maintainList(query) {
return request({
url: '/device/maintain/list',
method: 'get',
params: query
})
}
// 根据id查询维保信息
export function getMaintain(maintainId) {
return request({
url: '/device/maintain/' + maintainId,
method: 'get'
})
}
// 新增维保信息
export function addMaintain(data) {
return request({
url: '/device/maintain',
method: 'post',
data: data
})
}
// 修改维保信息
export function updateMaintain(data) {
return request({
url: '/device/maintain',
method: 'put',
data: data
})
}
// 删除维保信息
export function delMaintain(maintainIds) {
return request({
url: '/device/maintain/' + maintainIds,
method: 'delete'
})
}
// 查询维保量汇总
export function getMaintainSum(query) {
return request({
url: '/device/maintain/maintainSum',
method: 'get',
params: query
})
}

44
src/api/device/qrCode.js

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询网关列表
export function gatewayList(query) {
return request({
url: '/device/gateway/list',
method: 'get',
params: query
})
}
// 根据id查询网关信息
export function getGateway(gwId) {
return request({
url: '/device/gateway/' + gwId,
method: 'get'
})
}
// 新增网关参数
export function addGateway(data) {
return request({
url: '/device/gateway',
method: 'post',
data: data
})
}
// 修改网关参数
export function updateGateway(data) {
return request({
url: '/device/gateway',
method: 'put',
data: data
})
}
// 删除网关参数
export function delGateway(gwIds) {
return request({
url: '/device/gateway/' + gwIds,
method: 'delete'
})
}

1
src/assets/icons/svg/comm.svg

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1740618400280" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5168" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M213.76 910.72a33.28 33.28 0 0 1-21.76-7.68 496 496 0 1 1 640 0 32.64 32.64 0 0 1-45.44-3.84 31.36 31.36 0 0 1 3.84-44.8 432 432 0 1 0-558.72 0 32 32 0 0 1-20.48 56.32z" fill="" p-id="5169"></path><path d="M327.04 796.8a31.36 31.36 0 0 1-20.48-7.68 330.24 330.24 0 1 1 426.88 0 31.36 31.36 0 0 1-44.8-3.2 32.64 32.64 0 0 1 3.2-45.44 266.88 266.88 0 1 0-344.32 0 32.64 32.64 0 0 1 3.84 45.44 30.72 30.72 0 0 1-24.32 10.88z" fill="" p-id="5170"></path><path d="M519.04 697.6a160.64 160.64 0 1 1 160.64-160.64 161.28 161.28 0 0 1-160.64 160.64z m0-256a96.64 96.64 0 1 0 96.64 95.36 97.28 97.28 0 0 0-96.64-96.64z" fill="" p-id="5171"></path><path d="M519.04 1015.68a32 32 0 0 1-32-32v-320a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32z" fill="" p-id="5172"></path></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

1
src/assets/icons/svg/device.svg

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1740619880051" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7242" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M1024 0v448H0V0h1024zM576 160H128v128h448v-128zM1024 576v448H0V576h1024z m-448 160H128v128h448v-128z" p-id="7243"></path></svg>

After

Width:  |  Height:  |  Size: 460 B

1
src/assets/icons/svg/gateway.svg

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1740618374109" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3214" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M964.064 651.04L894.56 190.784C891.84 156.192 861.344 128 824.672 128H203.68a70.336 70.336 0 0 0-70.112 64.64L64.32 640.928l-0.32 4.896 3.392 158.464 0.896 3.328a70.304 70.304 0 0 0 67.872 51.936h756.544c31.296 0 58.848-20.704 67.552-50.752l1.056-3.584 3.04-149.408-0.288-4.768zM189.376 199.2c0.832-9.344 6.944-14.976 14.272-14.976H824.64a14.08 14.08 0 0 1 14.016 12.96l62.208 412.16H126.112L189.376 199.2z m715.872 596.48a14.08 14.08 0 0 1-12.512 7.616H136.192a14.08 14.08 0 0 1-12.704-8l-2.816-129.664h787.232l-2.656 130.048z" fill="" p-id="3215"></path><path d="M753.216 775.008h84.352a28.16 28.16 0 0 0 0-56.256h-84.352a28.16 28.16 0 0 0 0 56.256zM640.736 775.008h14.048a28.16 28.16 0 0 0 0-56.256h-14.048a28.16 28.16 0 0 0 0 56.256zM528.256 775.008h14.048a28.16 28.16 0 0 0 0-56.256h-14.048a28.16 28.16 0 0 0 0 56.256z" fill="" p-id="3216"></path></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

1
src/assets/icons/svg/gather.svg

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1740724516301" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="22332" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M384 80a48 48 0 0 0-96 0V128h-48A144 144 0 0 0 96 272V320H48a48 48 0 0 0 0 96h48v192H48a48 48 0 1 0 0 96h48v48A144 144 0 0 0 240 896h48v48a48 48 0 0 0 96 0V896h192v48a48 48 0 1 0 96 0V896h48a144 144 0 0 0 144-144V704h48a48 48 0 0 0 0-96h-48v-192h48a48 48 0 0 0 0-96h-48v-48A144 144 0 0 0 720 128h-48v-48a48 48 0 0 0-96 0V128H384v-48zM576 320a96 96 0 0 1 96 96v192A96 96 0 0 1 576 704H384a96 96 0 0 1-96-96v-192A96 96 0 0 1 384 320h192z m0 96H384v192h192v-192z" p-id="22333" fill=""></path></svg>

After

Width:  |  Height:  |  Size: 829 B

1
src/assets/icons/svg/ledger.svg

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1740724562277" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="25476" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M853.333333 85.333333H170.666667C123.733333 85.333333 85.333333 123.733333 85.333333 170.666667v106.666666h64V170.666667c0-12.8 8.533333-21.333333 21.333334-21.333334h682.666666c12.8 0 21.333333 8.533333 21.333334 21.333334v682.666666c0 12.8-8.533333 21.333333-21.333334 21.333334H170.666667c-12.8 0-21.333333-8.533333-21.333334-21.333334v-106.666666H85.333333v106.666666c0 46.933333 38.4 85.333333 85.333334 85.333334h682.666666c46.933333 0 85.333333-38.4 85.333334-85.333334V170.666667c0-46.933333-38.4-85.333333-85.333334-85.333334z" fill="" p-id="25477"></path><path d="M85.333333 341.333333h128v64H85.333333zM85.333333 480h128v64H85.333333zM85.333333 618.666667h128v64H85.333333zM298.666667 320v384h490.666666V320H298.666667z m426.666666 320H362.666667V384h362.666666v256z" fill="" p-id="25478"></path><path d="M437.333333 458.666667m-32 0a32 32 0 1 0 64 0 32 32 0 1 0-64 0Z" fill="" p-id="25479"></path><path d="M544 490.666667h106.666667c17.066667 0 32-14.933333 32-32s-14.933333-32-32-32h-106.666667c-17.066667 0-32 14.933333-32 32s14.933333 32 32 32z" fill="" p-id="25480"></path><path d="M437.333333 565.333333m-32 0a32 32 0 1 0 64 0 32 32 0 1 0-64 0Z" fill="" p-id="25481"></path><path d="M544 597.333333h106.666667c17.066667 0 32-14.933333 32-32s-14.933333-32-32-32h-106.666667c-17.066667 0-32 14.933333-32 32s14.933333 32 32 32z" fill="" p-id="25482"></path></svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

1
src/assets/icons/svg/maintenance.svg

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1740618422861" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6232" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M412.234787 290.470831c-31.214742 0-62.440989 8.514157-90.813843 22.700585-17.028315 8.514157-19.870202 31.226247-5.683775 45.412674l96.497618 96.486112-34.05663 34.033618-96.486112-96.486112c-5.683775-5.683775-11.356045-8.514157-19.870202-8.514157q-17.03982 0-25.542472 17.028314c-36.898517 73.785528-25.542472 167.441258 36.887011 229.870742 39.740404 39.728899 87.983461 56.757213 139.068405 56.757213 22.700584 0 45.412674-2.841888 65.27137-11.344539l224.198472 224.221483c11.356045 11.344539 28.38436 11.344539 39.728899 0l79.423281-79.469303c11.356045-11.344539 11.356045-28.372854 0-39.728899l-19.870202-19.870202-204.282247-204.32827c25.542472-70.955146 8.514157-150.412944-45.412675-207.170157-39.728899-39.740404-90.813843-59.599101-139.056898-59.599102zM542.777528 537.427416c-8.514157 19.870202-2.830382 42.570787 14.197933 59.599101l204.328269 204.339775-39.728899 39.728899-204.339775-204.385798c-11.344539-11.356045-25.542472-17.028315-39.728899-17.028314a55.491596 55.491596 0 0 0-19.858696 2.88791c-14.197933 5.683775-31.226247 8.514157-48.254562 8.514157-36.887011 0-73.785528-14.186427-99.328-42.570786-34.056629-34.056629-48.243056-79.457798-39.728899-124.870472l65.271371 65.282876c11.356045 11.344539 25.542472 17.016809 39.728899 17.016809s28.38436-5.67227 39.728899-17.016809l34.068134-34.068135c22.700584-22.700584 22.700584-59.587596 0-79.457798l-65.282876-65.27137c8.514157-2.841888 17.028315-2.841888 25.542472-2.841888 36.887011 0 73.785528 14.197933 99.328 42.570787 39.740404 36.887011 53.926831 96.486112 34.056629 147.571056z m0 0" fill="" p-id="6233"></path><path d="M937.259146 114.515416H795.36036v-85.141573c0-14.186427-14.197933-28.372854-28.38436-28.372854s-28.372854 14.186427-28.372854 28.372854v85.141573H284.522427v-85.141573C284.522427 15.187416 270.336 1.000989 256.138067 1.000989S227.765213 15.187416 227.765213 29.373843v85.141573H85.866427C68.838112 114.515416 57.482067 125.871461 57.482067 142.88827v851.41573c0 17.028315 11.356045 28.372854 28.38436 28.372854h851.41573c17.028315 0 28.372854-11.344539 28.372854-28.372854v-851.41573c0-17.016809-11.344539-28.372854-28.372854-28.372854z m-28.384359 851.41573H114.250787V171.272629H227.765213v28.38436c0 14.186427 14.186427 28.372854 28.372854 28.372854s28.38436-14.186427 28.38436-28.372854v-28.38436h454.080719v28.38436c0 14.186427 14.186427 28.372854 28.372854 28.372854s28.38436-14.186427 28.38436-28.372854v-28.38436h113.514427z m0 0" fill="" p-id="6234"></path></svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

1
src/assets/icons/svg/qrCode.svg

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1740724486594" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="21049" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M31.68 0.384l410.176 0C483.52 4.48 473.472 76.864 473.472 123.904l0 223.936c0 48.64 9.28 108.288-23.424 122.112C428.8 478.912 371.648 472.64 344.064 472.64l-217.472 0C76.352 472.64 7.744 484.48 0 441.408L0 31.616C5.632 16.32 15.488 5.312 31.68 0.384L31.68 0.384zM88.064 92.672l0 291.776L384 384.448 384 88.576 89.472 88.576C87.872 88.832 87.936 90.752 88.064 92.672L88.064 92.672zM582.208 0.384l410.176 0C1009.088 6.528 1020.544 17.792 1024 37.056l0 398.976c-3.776 16.576-12.544 30.72-28.928 35.264-26.752 7.424-71.232 1.344-103.232 1.344l-210.56 0c-31.744 0-78.848 6.592-104.576-1.344-36.416-11.2-26.176-81.28-26.176-130.24L550.528 132.032C550.528 75.456 537.92 8.32 582.208 0.384L582.208 0.384zM638.656 92.672l0 291.776 295.936 0L934.592 88.576 640 88.576C638.4 88.832 638.528 90.752 638.656 92.672L638.656 92.672zM222.976 178.176c41.216-7.68 73.6 19.776 74.304 56.96 0.896 49.088-49.92 76.032-89.472 55.616C162.56 267.456 165.568 188.864 222.976 178.176L222.976 178.176zM773.504 178.176c97.088-17.856 95.232 133.696 0 118.08C712.896 286.272 710.976 189.696 773.504 178.176L773.504 178.176zM439.04 1023.616 33.024 1023.616C16.192 1018.496 4.8 1008 0 991.04L0 582.592c4.032-11.968 13.248-25.92 27.52-29.888 26.944-7.488 70.976-1.344 103.232-1.344l210.56 0c31.104 0 76.416-6.848 104.576 1.344 38.144 11.072 27.52 80 27.52 128.896l0 215.744C473.472 950.144 484.992 1018.88 439.04 1023.616L439.04 1023.616zM88.064 643.648l0 291.776L384 935.424 384 639.552 89.472 639.552C87.872 639.808 87.936 641.728 88.064 643.648L88.064 643.648zM1024 587.968l0 113.984c-3.2 38.464-0.448 82.752-1.344 123.456l-293.184 0 0-66.496c-27.52-3.2-60.992-0.448-90.816-1.344-3.2 85.952-0.448 177.792-1.408 265.984L583.552 1023.552c-46.144-9.152-33.024-77.376-33.024-131.648l0-210.368c0-31.616-6.528-79.04 1.344-104.512 9.408-30.336 50.112-25.792 90.816-25.792l199.552 0 0 180.48 92.224 0c0.896-59.712-1.856-123.008 1.344-180.48C980.288 548.736 1021.376 549.376 1024 587.968L1024 587.968zM229.824 727.744c44.032-4.8 80.384 36.928 63.296 82.816-23.68 63.616-136.832 39.68-115.648-40.704C183.424 747.584 200.32 731.008 229.824 727.744L229.824 727.744zM828.544 1023.616l-99.072 0c0.896-34.816-1.856-73.28 1.408-105.856l97.728 0L828.544 1023.616 828.544 1023.616zM1024 917.76l0 69.184c-3.84 19.264-15.296 31.104-33.024 36.672l-70.208 0c0.896-34.816-1.856-73.28 1.408-105.856C956.096 917.76 990.08 917.76 1024 917.76L1024 917.76z" p-id="21050" fill=""></path></svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
src/assets/images/maint-icon1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
src/assets/images/maint-icon2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
src/assets/images/maint-icon3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

BIN
src/assets/images/maint-icon4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

BIN
src/assets/images/texture1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
src/assets/images/texture2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
src/assets/images/texture3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
src/assets/images/texture4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

12
src/assets/styles/index.scss

@ -218,9 +218,6 @@ aside {
border-radius: 14px; border-radius: 14px;
} }
.special-div { .special-div {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@ -445,3 +442,12 @@ table th {
} }
} }
} }
.el-dialog .el-row {
margin-bottom: 10px !important;
}
.el-dialog .el-row .el-select {
width: 100% !important;
}
.el-dialog .el-row .el-date-editor{
width: 100% !important;
}

435
src/views/device/comm/index.vue

@ -0,0 +1,435 @@
<template>
<div class="app-container">
<div class="btn-condition">
<div class="condition-left" v-show="showSearch">
<el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
label-width="68px"
>
<el-form-item label="仪表类型" prop="mtType">
<el-select
v-model="queryParams.mtType"
placeholder="请选择仪表类型"
clearable
>
<el-option
v-for="dict in dict.type.sys_mt_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-form>
<div class="primary-btn">
<el-button
type="primary"
icon="el-icon-search"
size="mini"
@click="handleQuery"
>搜索</el-button
>
</div>
<div class="cancel-btn">
<el-button
type="cancel"
icon="el-icon-refresh"
size="mini"
@click="resetQuery"
>重置</el-button
>
</div>
</div>
</div>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<div class="primary-btn" v-hasPermi="['system:post:add']">
<el-button
type="primary"
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增</el-button
>
</div>
</el-col>
<el-col :span="1.5">
<div class="success-btn" v-hasPermi="['system:post:edit']">
<el-button
type="success"
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
>修改</el-button
>
</div>
</el-col>
<el-col :span="1.5">
<div class="delete-btn" v-hasPermi="['system:post:remove']">
<el-button
type="delete"
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
>删除</el-button
>
</div>
</el-col>
<el-col :span="1.5">
<div class="warning-btn" v-hasPermi="['system:post:export']">
<el-button
type="warning"
icon="el-icon-download"
size="mini"
@click="handleExport"
>导出</el-button
>
</div>
</el-col>
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row>
<el-table
v-loading="loading"
:data="postList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="仪表类型" align="center" prop="mtType">
<template slot-scope="scope">
<dict-tag
:options="dict.type.sys_mt_type"
:value="scope.row.mtType"
/>
</template>
</el-table-column>
<el-table-column label="波特率" align="center" prop="baudRate" />
<el-table-column label="数据位" align="center" prop="dataBit" />
<el-table-column label="停止位" align="center" prop="stopBit" />
<el-table-column label="校验位" align="center" prop="parity" />
<el-table-column label="创建时间" align="center" prop="createTime">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column
label="更新时间"
align="center"
prop="updateTime"
width="180"
>
<template slot-scope="scope">
<span>{{ parseTime(scope.row.updateTime) }}</span>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:post:edit']"
>修改</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:post:remove']"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改设备参数对话框 -->
<el-dialog :title="title" :visible.sync="open" width="700px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-row type="flex" justify="center">
<el-col :span="12">
<el-form-item label="仪表类型" prop="mtType">
<el-select
v-model="form.mtType"
placeholder="请选择仪表类型"
clearable
>
<el-option
v-for="dict in dict.type.sys_mt_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="波特率" prop="baudRate">
<el-select
clearable
placeholder="请选择波特率"
v-model="form.baudRate"
>
<el-option label="1200" value="1200"></el-option>
<el-option label="2400" value="2400"></el-option>
<el-option label="4800" value="4800"></el-option>
<el-option label="9600" value="9600"></el-option>
<el-option label="115200" value="115200"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" justify="center">
<el-col :span="12">
<el-form-item label="数据位" prop="dataBit">
<el-select
clearable
placeholder="请选择数据位"
v-model="form.dataBit"
>
<el-option label="5" value="5"></el-option>
<el-option label="7" value="7"></el-option>
<el-option label="8" value="8"></el-option>
</el-select> </el-form-item
></el-col>
<el-col :span="12">
<el-form-item label="停止位" prop="stopBit">
<el-select
clearable
placeholder="请选择停止位"
v-model="form.stopBit"
>
<el-option label="1" value="1"></el-option>
<el-option label="1.5" value="1.5"></el-option>
<el-option
label="2"
value="2"
></el-option> </el-select></el-form-item
></el-col>
</el-row>
<el-row type="flex" justify="center">
<el-col :span="12">
<el-form-item label="校验位" prop="parity">
<el-select
clearable
placeholder="请选择校验位"
v-model="form.parity"
>
<el-option label="none" value="none"></el-option>
<el-option label="even" value="even"></el-option>
<el-option label="edd" value="odd"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="备注" prop="remark">
<el-input
v-model="form.remark"
type="textarea"
placeholder="请输入内容"
/> </el-form-item
></el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="cancel"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { cmpList, getCMP, delCMP, addCMP, updateCMP } from "@/api/device/comm";
export default {
name: "comm",
dicts: ["sys_mt_type"],
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
postList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
mtType: "",
},
//
form: {},
//
rules: {
mtType: [
{ required: true, message: "请选择仪表类型", trigger: "blur" },
],
baudRate: [
{ required: true, message: "请选择波特率", trigger: "blur" },
],
dataBit: [{ required: true, message: "请选择数据位", trigger: "blur" }],
stopBit: [{ required: true, message: "请选择停止位", trigger: "blur" }],
parity: [{ required: true, message: "请选择校验位", trigger: "blur" }],
},
};
},
created() {
this.getList();
},
methods: {
/** 查询设备参数列表 */
getList() {
this.loading = true;
cmpList(this.queryParams).then((response) => {
this.postList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
this.form.id = "";
},
//
reset() {
this.form = {
mtType: "",
baudRate: "",
dataBit: "",
stopBit: "",
parity: "",
remark: "",
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.id);
this.single = selection.length != 1;
this.multiple = !selection.length;
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加设备参数信息";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
this.form.id = "";
const cpmId = row.id || this.ids;
console.log("row", row);
getCMP(cpmId).then((response) => {
console.log("打印结果", response.data);
// this.form = response.data;
this.form = {
id: response.data.id,
mtType: response.data.mtType,
baudRate: response.data.baudRate.toString(),
dataBit: response.data.dataBit.toString(),
stopBit: response.data.stopBit.toString(),
parity: response.data.parity.toString(),
remark: response.data.remark,
};
this.open = true;
this.title = "修改设备参数信息";
});
},
/** 提交按钮 */
submitForm: function () {
this.$refs["form"].validate((valid) => {
if (valid) {
if (this.form.id != undefined) {
updateCMP(this.form).then((response) => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
console.log("新增参数", this.form);
addCMP(this.form).then((response) => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const Ids = row.id || this.ids;
this.$modal
.confirm('是否确认删除设备参数编号为"' + Ids + '"的数据项?')
.then(function () {
return delCMP(Ids);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download(
"device/gateway/export",
{
...this.queryParams,
},
`post_${new Date().getTime()}.xlsx`
);
},
},
};
</script>

495
src/views/device/gateway/index.vue

@ -0,0 +1,495 @@
<template>
<div class="app-container">
<div class="btn-condition">
<div class="condition-left" v-show="showSearch">
<el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
label-width="68px"
>
<el-form-item label="网关名称" prop="gwName">
<el-input
v-model="queryParams.gwName"
placeholder="请输入网关名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select
v-model="queryParams.status"
placeholder="网关状态"
clearable
>
<el-option
v-for="dict in dict.type.gateway_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-form>
<div class="primary-btn">
<el-button
type="primary"
icon="el-icon-search"
size="mini"
@click="handleQuery"
>搜索</el-button
>
</div>
<div class="cancel-btn">
<el-button
type="cancel"
icon="el-icon-refresh"
size="mini"
@click="resetQuery"
>重置</el-button
>
</div>
</div>
</div>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<div class="primary-btn" v-hasPermi="['system:post:add']">
<el-button
type="primary"
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增</el-button
>
</div>
</el-col>
<el-col :span="1.5">
<div class="success-btn" v-hasPermi="['system:post:edit']">
<el-button
type="success"
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
>修改</el-button
>
</div>
</el-col>
<el-col :span="1.5">
<div class="delete-btn" v-hasPermi="['system:post:remove']">
<el-button
type="delete"
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
>删除</el-button
>
</div>
</el-col>
<el-col :span="1.5">
<div class="warning-btn" v-hasPermi="['system:post:export']">
<el-button
type="warning"
icon="el-icon-download"
size="mini"
@click="handleExport"
>导出</el-button
>
</div>
</el-col>
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row>
<el-table
v-loading="loading"
:data="postList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="网关名称" align="center" prop="gwName" />
<el-table-column label="网关IP" align="center" prop="gwIp" />
<el-table-column label="安装位置" align="center" prop="gwAddr" />
<el-table-column label="端口" align="center" prop="port" />
<el-table-column label="采集周期" align="center" prop="collectionLoop" />
<el-table-column label="连接时间" align="center" prop="connectTime">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.connectTime) }}</span>
</template>
</el-table-column>
<el-table-column label="卡号" align="center" prop="internetCard" />
<el-table-column label="运营商" align="center" prop="operatorType">
<template slot-scope="scope">
<dict-tag
:options="dict.type.operator_type"
:value="scope.row.operatorType"
/>
</template>
</el-table-column>
<el-table-column label="通信方式" align="center" prop="communicationType">
<template slot-scope="scope">
<dict-tag
:options="dict.type.communication_type"
:value="scope.row.communicationType"
/>
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="status">
<template slot-scope="scope">
<dict-tag
:options="dict.type.gateway_status"
:value="scope.row.status"
/>
</template>
</el-table-column>
<el-table-column
label="更新时间"
align="center"
prop="updateTime"
width="180"
>
<template slot-scope="scope">
<span>{{ parseTime(scope.row.updateTime) }}</span>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:post:edit']"
>修改</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:post:remove']"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改网关对话框 -->
<el-dialog :title="title" :visible.sync="open" width="700px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-row type="flex" justify="center">
<el-col :span="12">
<el-form-item label="网关名称" prop="gwName">
<el-input v-model="form.gwName" placeholder="请输入网关名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="网关IP" prop="gwIp">
<el-input
v-model="form.gwIp"
placeholder="请输入网关Ip"
clearable
/>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" justify="center">
<el-col :span="12">
<el-form-item label="安装地址" prop="gwAddr">
<el-input
v-model="form.gwAddr"
placeholder="请输入安装地址"
clearable
/> </el-form-item
></el-col>
<el-col :span="12">
<el-form-item label="端口" prop="port">
<el-input
v-model="form.port"
placeholder="请输入端口"
clearable
/> </el-form-item
></el-col>
</el-row>
<el-row type="flex" justify="center">
<el-col :span="12">
<el-form-item label="采集周期" prop="collectionLoop">
<el-input
v-model="form.collectionLoop"
placeholder="请输入采集周期"
clearable
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="卡号" prop="internetCard">
<el-input
v-model="form.internetCard"
placeholder="请输入卡号"
clearable
/> </el-form-item
></el-col>
</el-row>
<el-row type="flex" justify="center">
<el-col :span="12">
<el-form-item label="运营商" prop="operatorType">
<el-select
v-model="form.operatorType"
placeholder="选择运营商"
clearable
>
<el-option
v-for="dict in dict.type.operator_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select> </el-form-item
></el-col>
<el-col :span="12">
<el-form-item label="通信方式" prop="communicationType">
<el-select
v-model="form.communicationType"
placeholder="选择通信方式"
clearable
>
<el-option
v-for="dict in dict.type.communication_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select> </el-form-item
></el-col>
</el-row>
<el-row type="flex" justify="center" style="margin-bottom: 34px">
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input
v-model="form.remark"
type="textarea"
placeholder="请输入内容"
/> </el-form-item
></el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="cancel"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
gatewayList,
getGateway,
delGateway,
addGateway,
updateGateway,
} from "@/api/device/gateway";
export default {
name: "gateway",
dicts: ["gateway_status", "operator_type", "communication_type"],
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
postList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
gwName: undefined,
status: undefined,
},
//
form: {},
//
rules: {
gwName: [
{ required: true, message: "网关名称不能为空", trigger: "blur" },
],
gwIp: [{ required: true, message: "网关IP不能为空", trigger: "blur" }],
gwAddr: [
{ required: true, message: "安装位置不能为空", trigger: "blur" },
],
port: [{ required: true, message: "端口不能为空", trigger: "blur" }],
collectionLoop: [
{ required: true, message: "采集周期不能为空", trigger: "blur" },
],
internetCard: [
{ required: true, message: "卡号不能为空", trigger: "blur" },
],
operatorType: [
{ required: true, message: "请选择运营商", trigger: "blur" },
],
communicationType: [
{ required: true, message: "请选择通信方式", trigger: "blur" },
],
},
};
},
created() {
this.getList();
},
methods: {
/** 查询网关列表 */
getList() {
this.loading = true;
gatewayList(this.queryParams).then((response) => {
this.postList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
this.form.id = "";
},
//
reset() {
this.form = {
gwName: undefined,
gwIp: "",
gwAddr: "",
port: "",
collectionLoop: "",
internetCard: "",
operatorType: "",
communicationType: "",
remark: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.id);
this.single = selection.length != 1;
this.multiple = !selection.length;
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加网关信息";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
this.form.id = "";
const gwId = row.id || this.ids;
console.log("");
getGateway(gwId).then((response) => {
// this.form = response.data;
this.form = {
id: response.data.id,
gwName: response.data.gwName,
gwIp: response.data.gwIp,
gwAddr: response.data.gwAddr,
port: response.data.port,
collectionLoop: response.data.collectionLoop,
internetCard: response.data.internetCard,
operatorType: response.data.operatorType.toString(),
communicationType: response.data.communicationType.toString(),
remark: response.data.remark,
};
this.open = true;
this.title = "修改网关信息";
});
},
/** 提交按钮 */
submitForm: function () {
this.$refs["form"].validate((valid) => {
if (valid) {
if (this.form.id != undefined) {
updateGateway(this.form).then((response) => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
console.log("新增参数", this.form);
addGateway(this.form).then((response) => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const Ids = row.id || this.ids;
this.$modal
.confirm('是否确认删除网关编号为"' + Ids + '"的数据项?')
.then(function () {
return delGateway(Ids);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download(
"device/gateway/export",
{
...this.queryParams,
},
`post_${new Date().getTime()}.xlsx`
);
},
},
};
</script>

4
src/views/device/gather/index.vue

@ -0,0 +1,4 @@
<template>
<div>设备采集参数管理</div>
</template>

566
src/views/device/ledger/index.vue

@ -0,0 +1,566 @@
<template>
<div class="app-container">
<div class="btn-condition">
<div class="condition-left" v-show="showSearch">
<el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
label-width="68px"
>
<el-form-item label="设备名称" prop="deviceName">
<el-input
v-model="queryParams.deviceName"
placeholder="请输入设备名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="资产编号" prop="assetNum">
<el-input
v-model="queryParams.assetNum"
placeholder="请输入资产编号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="设备类型" prop="deviceType">
<el-select
v-model="queryParams.deviceType"
placeholder="请选择设备类型"
clearable
>
<el-option
v-for="dict in dict.type.sys_device_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="日期范围" prop="timeArr">
<el-date-picker
style="width: 220px"
v-model="timeArr"
type="daterange"
unlink-panels
range-separator="~"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="yyyy-MM-dd"
@change="dateChange"
>
</el-date-picker>
</el-form-item>
</el-form>
<div class="primary-btn">
<el-button
type="primary"
icon="el-icon-search"
size="mini"
@click="handleQuery"
>搜索</el-button
>
</div>
<div class="cancel-btn">
<el-button
type="cancel"
icon="el-icon-refresh"
size="mini"
@click="resetQuery"
>重置</el-button
>
</div>
</div>
</div>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<div class="primary-btn" v-hasPermi="['system:post:add']">
<el-button
type="primary"
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增</el-button
>
</div>
</el-col>
<el-col :span="1.5">
<div class="success-btn" v-hasPermi="['system:post:edit']">
<el-button
type="success"
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
>修改</el-button
>
</div>
</el-col>
<el-col :span="1.5">
<div class="delete-btn" v-hasPermi="['system:post:remove']">
<el-button
type="delete"
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
>删除</el-button
>
</div>
</el-col>
<el-col :span="1.5">
<div class="warning-btn" v-hasPermi="['system:post:export']">
<el-button
type="warning"
icon="el-icon-download"
size="mini"
@click="handleExport"
>导出</el-button
>
</div>
</el-col>
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row>
<el-table
v-loading="loading"
:data="postList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="设备名称" align="center" prop="deviceName" />
<el-table-column label="规格与型号" align="center" prop="modelSpecs" />
<el-table-column label="资产编号" align="center" prop="assetNum" />
<el-table-column label="关联二维码Id" align="center" prop="qrCodeId" />
<el-table-column label="预计使用寿命" align="center" prop="serviceLife" />
<el-table-column label="设备类型" align="center" prop="deviceType">
<template slot-scope="scope">
<dict-tag
:options="dict.type.sys_device_type"
:value="scope.row.deviceType"
/>
</template>
</el-table-column>
<el-table-column label="技术参数描述" align="center" prop="techParams" />
<el-table-column label="设备文档" align="center" prop="techDoc" />
<el-table-column label="安装日期" align="center" prop="installTime">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.installTime) }}</span>
</template>
</el-table-column>
<el-table-column label="是否需要采集" align="center" prop="isCollection">
<template slot-scope="scope">
<span v-if="scope.row.isCollection === 0"></span>
<span v-if="scope.row.isCollection === 1"></span>
</template>
</el-table-column>
<el-table-column label="是否计算能效" align="center" prop="isCalcEnergy">
<template slot-scope="scope">
<span v-if="scope.row.isCalcEnergy === 0"></span>
<span v-if="scope.row.isCalcEnergy === 1"></span>
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="status">
<template slot-scope="scope">
<el-tag v-if="scope.row.status === 0">正常</el-tag>
<el-tag type="danger" v-if="scope.row.status === 1">停用</el-tag>
</template>
</el-table-column>
<el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:post:edit']"
>修改</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:post:remove']"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改设备台账对话框 -->
<el-dialog :title="title" :visible.sync="open" width="700px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-row type="flex" justify="center">
<el-col :span="12">
<el-form-item label="设备名称" prop="deviceName">
<el-input
v-model="form.deviceName"
placeholder="请输入设备名称"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="设备类型" prop="deviceType">
<el-select
v-model="form.deviceType"
placeholder="请选择设备类型"
clearable
>
<el-option
v-for="dict in dict.type.sys_device_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" justify="center">
<el-col :span="12">
<el-form-item label="规格与型号" prop="modelSpecs">
<el-input
v-model="form.modelSpecs"
placeholder="请输入规格与型号"
clearable
/> </el-form-item
></el-col>
<el-col :span="12">
<el-form-item label="资产编号" prop="assetNum">
<el-input
v-model="form.assetNum"
placeholder="请输入资产编号"
clearable
/> </el-form-item
></el-col>
</el-row>
<el-row type="flex" justify="center">
<el-col :span="12">
<el-form-item label="关联二维码Id" prop="qrCodeId">
<el-input
v-model="form.qrCodeId"
placeholder="请选择"
clearable
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="预计使用寿命" prop="serviceLife">
<el-input
v-model="form.serviceLife"
placeholder="请输入预计使用寿命"
clearable
/> </el-form-item
></el-col>
</el-row>
<el-row type="flex" justify="center">
<el-col :span="12">
<el-form-item label="技术参数描述" prop="techParams">
<el-input
v-model="form.techParams"
placeholder="请输入技术参数描述"
clearable
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="设备文档" prop="techDoc">
<el-input
v-model="form.techDoc"
placeholder="请输入设备文档"
clearable
/> </el-form-item
></el-col>
</el-row>
<el-row type="flex" justify="center">
<el-col :span="12">
<el-form-item label="设备安装时间" prop="installTime">
<el-date-picker
value-format="yyyy-MM-dd HH:mm:ss"
v-model="form.installTime"
type="datetime"
placeholder="选择日期"
>
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="状态" prop="status">
<el-select v-model="form.status" placeholder="请选择" clearable>
<el-option label="正常" value="0" />
<el-option label="停用" value="1" /> </el-select></el-form-item
></el-col>
</el-row>
<el-row type="flex" justify="center">
<el-col :span="12">
<el-form-item label="是否需要采集" prop="isCollection">
<el-select
v-model="form.isCollection"
placeholder="请选择是否"
clearable
>
<el-option label="是" value="0" />
<el-option label="否" value="1" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否计算能效" prop="isCalcEnergy">
<el-select
v-model="form.isCalcEnergy"
placeholder="请选择是否"
clearable
>
<el-option label="是" value="0" />
<el-option label="否" value="1" />
</el-select> </el-form-item
></el-col>
</el-row>
<el-row type="flex" justify="center" style="margin-bottom: 34px">
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input
v-model="form.remark"
type="textarea"
placeholder="请输入内容"
/> </el-form-item
></el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="cancel"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
ledgerList,
getLedger,
delGateway,
addLedger,
updateLedger,
} from "@/api/device/ledger";
export default {
name: "ledger",
dicts: ["sys_device_type"],
data() {
return {
timeArr: [],
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
postList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
beginTime: "",
endTime: "",
deviceName: "",
assetNum: "",
deviceType: "",
},
//
form: {},
//
rules: {
deviceName: [
{ required: true, message: "设备名称不能为空", trigger: "blur" },
],
assetNum: [
{ required: true, message: "资产编号不能为空", trigger: "blur" },
],
deviceType: [
{ required: true, message: "请选择设备类型", trigger: "blur" },
],
status: [{ required: true, message: "请选择状态", trigger: "blur" }],
},
};
},
created() {
this.getList();
},
methods: {
//
dateChange() {
// console.log("", this.timeArr);
if (!this.timeArr) {
this.$nextTick(() => {
this.timeArr = [];
this.queryParams.beginTime = "";
this.queryParams.endTime = "";
});
} else {
this.queryParams.beginTime = this.timeArr[0];
this.queryParams.endTime = this.timeArr[1];
}
},
/** 查询设备台账列表 */
getList() {
this.loading = true;
ledgerList(this.queryParams).then((response) => {
this.postList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
this.form.id = "";
},
//
reset() {
this.form = {
deviceName: "",
deviceType: "",
modelSpecs: "",
assetNum: "",
qrCodeId: "",
serviceLife: "",
techParams: "",
techDoc: "",
installTime: "",
isCollection: "",
isCalcEnergy: "",
status: "",
remark: "",
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.id);
this.single = selection.length != 1;
this.multiple = !selection.length;
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加设备台账信息";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
this.form.id = "";
const ledgerId = row.id || this.ids;
console.log("");
getLedger(ledgerId).then((response) => {
// this.form = response.data;
this.form = {
id: response.data.id,
deviceName: response.data.deviceName,
deviceType: response.data.deviceType,
modelSpecs: response.data.modelSpecs,
assetNum: response.data.assetNum,
qrCodeId: response.data.qrCodeId,
serviceLife: response.data.serviceLife,
techParams: response.data.techParams,
techDoc: response.data.techDoc,
installTime: response.data.installTime,
isCollection: response.data.isCollection.toString(),
isCalcEnergy: response.data.isCalcEnergy.toString(),
status: response.data.status.toString(),
remark: response.data.remark,
};
this.open = true;
this.title = "修改设备台账信息";
});
},
/** 提交按钮 */
submitForm: function () {
this.$refs["form"].validate((valid) => {
if (valid) {
if (this.form.id != undefined) {
updateLedger(this.form).then((response) => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
console.log("新增参数", this.form);
addLedger(this.form).then((response) => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const Ids = row.id || this.ids;
this.$modal
.confirm('是否确认删除设备台账编号为"' + Ids + '"的数据项?')
.then(function () {
return delGateway(Ids);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download(
"device/gateway/export",
{
...this.queryParams,
},
`post_${new Date().getTime()}.xlsx`
);
},
},
};
</script>

828
src/views/device/maintenance/index.vue

@ -0,0 +1,828 @@
<template>
<div class="app-container">
<div class="data-content">
<div class="data-li type1">
<img class="maint-img" src="../../../assets/images/maint-icon1.png" />
<div class="maint-right">
<div class="maint-right-li">
<div>今日保修数量</div>
<div class="data-text">{{ this.sumObj.dayNum }}</div>
</div>
<div class="maint-right-li">
<div>与昨日相比</div>
<div class="proportion">{{ this.sumObj.dayP }}%</div>
</div>
</div>
<img
class="type-img"
src="../../../assets/images/texture1.png"
alt=""
/>
</div>
<div class="data-li type2">
<img class="maint-img" src="../../../assets/images/maint-icon2.png" />
<div class="maint-right">
<div class="maint-right-li">
<div>近七天保修数量</div>
<div class="data-text">{{ this.sumObj.weekNum }}</div>
</div>
<div class="maint-right-li">
<div>与上周相比</div>
<div class="proportion">{{ this.sumObj.weekP }}%</div>
</div>
</div>
<img
class="type-img"
src="../../../assets/images/texture2.png"
alt=""
/>
</div>
<div class="data-li type3">
<img class="maint-img" src="../../../assets/images/maint-icon3.png" />
<div class="maint-right">
<div class="maint-right-li">
<div>当月保修数量</div>
<div class="data-text">{{ this.sumObj.monthNum }}</div>
</div>
<div class="maint-right-li">
<div>与上月相比</div>
<div class="proportion">{{ this.sumObj.monthP }}%</div>
</div>
</div>
<img
class="type-img"
src="../../../assets/images/texture3.png"
alt=""
/>
</div>
<div class="data-li type4">
<img class="maint-img" src="../../../assets/images/maint-icon4.png" />
<div class="maint-right">
<div class="maint-right-li">
<div>今年保修数量</div>
<div class="data-text">{{ this.sumObj.yearNum }}</div>
</div>
<div class="maint-right-li">
<div>与去年相比</div>
<div class="proportion">{{ this.sumObj.yearP }}%</div>
</div>
</div>
<img
class="type-img"
src="../../../assets/images/texture4.png"
alt=""
/>
</div>
</div>
<div class="btn-condition">
<div class="condition-left" v-show="showSearch">
<el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
label-width="68px"
>
<el-form-item label="设备类型" prop="deviceType">
<el-select
v-model="queryParams.deviceType"
placeholder="请选择设备类型"
clearable
>
<el-option
v-for="item in devices"
:key="item.buildingId"
:label="item.deviceName"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="维保类型" prop="maintainType">
<el-select
v-model="queryParams.maintainType"
placeholder="请选择维保类型"
clearable
>
<el-option
v-for="dict in dict.type.maintain_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="维保人员" prop="maintainPeople">
<el-input v-model="queryParams.maintainPeople" clearable></el-input>
</el-form-item>
<el-form-item label="维保日期" prop="timeArr">
<el-date-picker
v-model="timeArr"
type="daterange"
unlink-panels
range-separator="~"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="yyyy-MM-dd"
@change="dateChange"
style="width: 220px"
>
</el-date-picker>
</el-form-item>
</el-form>
<div class="primary-btn">
<el-button
type="primary"
icon="el-icon-search"
size="mini"
@click="handleQuery"
>搜索</el-button
>
</div>
<div class="cancel-btn">
<el-button
type="cancel"
icon="el-icon-refresh"
size="mini"
@click="resetQuery"
>重置</el-button
>
</div>
</div>
</div>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<div class="primary-btn" v-hasPermi="['system:post:add']">
<el-button
type="primary"
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增</el-button
>
</div>
</el-col>
<el-col :span="1.5">
<div class="success-btn" v-hasPermi="['system:post:edit']">
<el-button
type="success"
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
>修改</el-button
>
</div>
</el-col>
<el-col :span="1.5">
<div class="delete-btn" v-hasPermi="['system:post:remove']">
<el-button
type="delete"
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
>删除</el-button
>
</div>
</el-col>
<el-col :span="1.5">
<div class="warning-btn" v-hasPermi="['system:post:export']">
<el-button
type="warning"
icon="el-icon-download"
size="mini"
@click="handleExport"
>导出</el-button
>
</div>
</el-col>
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row>
<el-table
v-loading="loading"
:data="postList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="维保类型" align="center" prop="maintainType">
<template slot-scope="scope">
<dict-tag
:options="dict.type.maintain_type"
:value="scope.row.maintainType"
/>
</template>
</el-table-column>
<el-table-column label="维保人员" align="center" prop="maintainPeople">
</el-table-column>
<el-table-column
label="设备类型"
align="center"
prop="deviceType"
:formatter="formatDeviceType"
>
</el-table-column>
<el-table-column label="维修内容" align="center" prop="contents">
</el-table-column>
<el-table-column label="维修开始时间" align="center" prop="execTime">
</el-table-column>
<el-table-column label="花费时间" align="center" prop="spendTimes">
</el-table-column>
<el-table-column label="花费金额" align="center" prop="cost">
</el-table-column>
<el-table-column label="评价" align="center" prop="evaluate">
<template slot-scope="{ row }">
<span
v-show="row.evaluate == '' || row.evaluate == null"
class="iconfont"
style="color: aquamarine; cursor: pointer"
title="点击进行评价"
@click="handleEvaluate(row)"
>待评价</span
>
<span v-show="row.evaluate == '1'">极差</span>
<span v-show="row.evaluate == '2'">失望</span>
<span v-show="row.evaluate == '3'">一般</span>
<span v-show="row.evaluate == '4'">满意</span>
<span v-show="row.evaluate == '5'">非常满意</span>
</template>
</el-table-column>
<el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:post:edit']"
>修改</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:post:remove']"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改维保对话框 -->
<el-dialog :title="title" :visible.sync="open" width="700px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-row type="flex" justify="center">
<el-col :span="12">
<el-form-item label="维保类型" prop="maintainType">
<el-select
v-model="form.maintainType"
placeholder="请选择维保类型"
clearable
:disabled="shouldDis"
>
<el-option
v-for="dict in dict.type.maintain_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="设备类型" prop="deviceType">
<el-select
v-model="form.deviceType"
placeholder="请选择设备类型"
clearable
:disabled="shouldDis"
>
<el-option
v-for="item in devices"
:key="item.buildingId"
:label="item.deviceName"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" justify="center">
<el-col :span="12">
<el-form-item label="维保人员" prop="maintainPeople">
<el-input
clearable
placeholder="请输入维保人员"
v-model="form.maintainPeople"
:disabled="shouldDis"
>
</el-input></el-form-item
></el-col>
<el-col :span="12">
<el-form-item label="花费金额" prop="cost">
<el-input
clearable
v-model="form.cost"
placeholder="请输入花费金额"
:disabled="shouldDis"
></el-input> </el-form-item
></el-col>
</el-row>
<el-row type="flex" justify="center">
<el-col :span="12">
<el-form-item label="开始时间" prop="execTime">
<el-date-picker
v-model="form.execTime"
value-format="yyyy-MM-dd HH:mm:ss"
type="datetime"
placeholder="选择日期"
:disabled="shouldDis"
>
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="花费时间" prop="spendTimes">
<el-input
v-model="form.spendTimes"
placeholder="请输入花费时间"
:disabled="shouldDis"
/> </el-form-item
></el-col>
</el-row>
<el-row type="flex" justify="center">
<el-col :span="24">
<el-form-item label="维保内容" prop="contents">
<el-input
v-model="form.contents"
type="textarea"
placeholder="请输入维保内容"
:disabled="shouldDis"
/>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" justify="center" v-if="isEvaluate || shouldDis">
<el-col :span="24">
<el-form-item label="评价得分" prop="evaluate">
<el-rate
v-model="form.evaluate"
show-text
:texts="['极差', '失望', '一般', '满意', '非常满意']"
:disabled="isEvaluate"
:text-color="textColor"
style="line-height: 2.5"
>
</el-rate>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="cancel"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { ledgerList } from "@/api/device/ledger";
import { getDay } from "@/utils/datetime";
import {
maintainList,
getMaintain,
delMaintain,
addMaintain,
updateMaintain,
getMaintainSum,
} from "@/api/device/maintenance";
export default {
name: "maintenance",
dicts: ["maintain_type", "sys_mt_type"],
data() {
return {
shouldDis: false,
isEvaluate: false,
textColor: "#ffffff",
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
postList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
execTime: "",
maintainType: "",
maintainPeople: "",
deviceType: "",
beginTime: "",
endTime: "",
},
timeArr: [],
//
form: {},
//
rules: {
maintainType: [
{ required: true, message: "请选择维保类型", trigger: "blur" },
],
deviceType: [
{ required: true, message: "请选择设备类型", trigger: "blur" },
],
},
devices: [], //
sumObj: {
dayNum: "0",
dayP: "0",
weekNum: "0",
weekP: "0",
monthNum: "0",
monthP: "0",
yearNum: "0",
yearP: "0",
},
};
},
mounted() {
this.getDeviceType();
this.getMaintainSum();
this.getList();
},
methods: {
//
dateChange() {
// console.log("", this.timeArr);
if (!this.timeArr) {
this.$nextTick(() => {
this.timeArr = [];
this.queryParams.beginTime = "";
this.queryParams.endTime = "";
});
} else {
this.queryParams.beginTime = this.timeArr[0];
this.queryParams.endTime = this.timeArr[1];
}
},
//
getDeviceType() {
let data = {
pageNum: 1,
pageSize: 1000000,
};
ledgerList(data).then((response) => {
this.devices = response.rows;
// console.log("",this.devices)
});
},
//
formatDeviceType(row, column, cellValue) {
// devices id cellValue
const device = this.devices.find((item) => item.id === cellValue);
// deviceName
return device ? device.deviceName : cellValue;
},
/** 查询维保列表 */
getList() {
this.loading = true;
maintainList(this.queryParams).then((response) => {
this.postList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
this.form.id = "";
},
//
reset() {
this.form = {
maintainType: "",
maintainPeople: "",
deviceType: "",
cost: "",
execTime: "",
spendTimes: "",
contents: "",
evaluate: null,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.id);
this.single = selection.length != 1;
this.multiple = !selection.length;
},
/** 新增按钮操作 */
handleAdd() {
this.isEvaluate = false;
this.shouldDis = false;
this.reset();
this.open = true;
this.title = "添加维保信息";
console.log("添加时不显示评分内容", this.isEvaluate);
},
/** 修改按钮操作 */
handleUpdate(row) {
this.isEvaluate = true;
this.shouldDis = false;
this.reset();
this.form.id = "";
const cpmId = row.id || this.ids;
console.log("row", row);
getMaintain(cpmId).then((response) => {
console.log("打印结果", response.data);
// this.form = response.data;
this.form = {
id: response.data.id,
maintainType: response.data.maintainType.toString(),
maintainPeople: response.data.maintainPeople,
deviceType: response.data.deviceType.toString(),
cost: response.data.cost,
execTime: response.data.execTime,
spendTimes: response.data.spendTimes,
contents: response.data.contents,
evaluate: Number(response.data.evaluate),
};
this.open = true;
this.title = "修改维保信息";
});
},
/** 提交按钮 */
submitForm: function () {
this.$refs["form"].validate((valid) => {
if (valid) {
if (this.form.id != undefined) {
updateMaintain(this.form).then((response) => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
console.log("新增参数", this.form);
addMaintain(this.form).then((response) => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const Ids = row.id || this.ids;
this.$modal
.confirm('是否确认删除维保编号为"' + Ids + '"的数据项?')
.then(function () {
return delMaintain(Ids);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download(
"device/gateway/export",
{
...this.queryParams,
},
`post_${new Date().getTime()}.xlsx`
);
},
//
handleEvaluate(row) {
this.isEvaluate = false;
this.shouldDis = true;
// if (this.userName !== "admin") {
// this.$message({
// message: "",
// type: "warning",
// });
// return;
// }
this.reset();
this.form.id = "";
const cpmId = row.id || this.ids;
console.log("row", row);
getMaintain(cpmId).then((response) => {
console.log("打印结果", response.data);
// this.form = response.data;
this.form = {
id: response.data.id,
maintainType: response.data.maintainType.toString(),
maintainPeople: response.data.maintainPeople,
deviceType: response.data.deviceType.toString(),
cost: response.data.cost,
execTime: response.data.execTime,
spendTimes: response.data.spendTimes,
contents: response.data.contents,
evaluate: Number(response.data.evaluate),
};
this.open = true;
this.title = "修改维保信息";
});
},
//
getMaintainSum() {
let data = {
buildingId: "",
curDate: getDay(0),
};
getMaintainSum(data).then((res) => {
if (res.code == 200) {
this.sumObj = res.data;
}
});
},
},
};
</script>
<style lang="scss" scoped>
.data-content {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: space-between;
width: 100%;
.data-li {
background-color: transparent;
border-radius: 0rem;
display: flex;
flex-direction: row;
justify-content: flex-start;
align-items: center;
padding: 0.15rem 0.2rem;
width: 24%;
margin-bottom: 0.24rem;
font-family: SourceHanSansCN-Regular;
font-size: 0.16rem;
position: relative;
overflow: hidden;
.maint-img {
width: 0.68rem;
height: 0.68rem;
margin-right: 0.15rem;
}
.maint-right {
display: flex;
flex-direction: row;
align-items: flex-start;
.maint-right-li {
display: flex;
flex-direction: column;
align-items: flex-start;
.data-text {
z-index: 11 !important;
font-family: DIN-Bold;
font-size: 0.24rem;
margin-top: 0.05rem;
}
.proportion {
z-index: 11 !important;
font-family: DIN-Bold;
font-size: 0.2rem;
margin-top: 0.1rem;
}
}
.maint-right-li:nth-last-child(1) {
margin-left: 0.35rem;
}
}
}
.type-img {
position: absolute;
bottom: 0;
width: 3.17rem;
height: 0.52rem;
z-index: 10;
}
.type1 {
border: 1px solid #e8aa13;
border-radius: 10px;
/* 设置渐变背景 */
background: linear-gradient(rgba(26, 56, 65, 0.5), rgba(184, 196, 51, 0.5));
}
.type1::after {
content: "";
width: 100%;
height: 90%;
box-shadow: 0 0 30px 40px rgba(243, 166, 23, 0.3);
border-radius: 50%;
display: flex;
justify-content: center;
align-items: center;
position: absolute;
bottom: -100% !important;
z-index: 1;
}
.type2 {
border: 1px solid #27a0f2;
border-radius: 10px;
/* 设置渐变背景 */
background: linear-gradient(rgba(2, 43, 88, 0.5), rgba(8, 96, 179, 0.5));
}
.type2::after {
content: "";
width: 100%;
height: 90%;
box-shadow: 0 0 30px 40px rgba(28, 128, 241, 0.3);
border-radius: 50%;
display: flex;
justify-content: center;
align-items: center;
position: absolute;
bottom: -100% !important;
z-index: 1;
}
.type3 {
border: 1px solid #1ad3ef;
border-radius: 10px;
/* 设置渐变背景 */
background: linear-gradient(rgba(2, 50, 89, 0.5), rgba(17, 145, 151, 0.5));
}
.type3::after {
content: "";
width: 100%;
height: 90%;
box-shadow: 0 0 30px 40px rgba(117, 242, 248, 0.3);
border-radius: 50%;
display: flex;
justify-content: center;
align-items: center;
position: absolute;
bottom: -100% !important;
z-index: 1;
}
.type4 {
border: 1px solid #11d47b;
border-radius: 10px;
/* 设置渐变背景 */
background: linear-gradient(rgba(2, 57, 82, 0.5), rgba(5, 91, 90, 0.5));
}
.type4::after {
content: "";
width: 100%;
height: 90%;
box-shadow: 0 0 30px 40px rgba(115, 245, 176, 0.3);
border-radius: 50%;
display: flex;
justify-content: center;
align-items: center;
position: absolute;
bottom: -100% !important;
z-index: 1;
}
}
</style>

3
src/views/device/qrCode/index.vue

@ -0,0 +1,3 @@
<template>
<div>设备二维码</div>
</template>

15
src/views/monitor/job/index.vue

@ -69,63 +69,58 @@
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<div class="primary-btn"> <div class="primary-btn" v-hasPermi="['monitor:job:add']">
<el-button <el-button
type="primary" type="primary"
icon="el-icon-plus" icon="el-icon-plus"
size="mini" size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['monitor:job:add']"
>新增</el-button >新增</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="success-btn"> <div class="success-btn" v-hasPermi="['monitor:job:edit']">
<el-button <el-button
type="success" type="success"
icon="el-icon-edit" icon="el-icon-edit"
size="mini" size="mini"
:disabled="single" :disabled="single"
@click="handleUpdate" @click="handleUpdate"
v-hasPermi="['monitor:job:edit']"
>修改</el-button >修改</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="delete-btn"> <div class="delete-btn" v-hasPermi="['monitor:job:remove']">
<el-button <el-button
type="delete" type="delete"
icon="el-icon-delete" icon="el-icon-delete"
size="mini" size="mini"
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['monitor:job:remove']"
>删除</el-button >删除</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="warning-btn"> <div class="warning-btn" v-hasPermi="['monitor:job:export']">
<el-button <el-button
type="warning" type="warning"
icon="el-icon-download" icon="el-icon-download"
size="mini" size="mini"
@click="handleExport" @click="handleExport"
v-hasPermi="['monitor:job:export']"
>导出</el-button >导出</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="info-btn"> <div class="info-btn" v-hasPermi="['monitor:job:query']">
<el-button <el-button
type="info" type="info"
icon="el-icon-s-operation" icon="el-icon-s-operation"
size="mini" size="mini"
@click="handleJobLog" @click="handleJobLog"
v-hasPermi="['monitor:job:query']"
>日志</el-button >日志</el-button
> >
</div> </div>

9
src/views/monitor/job/log.vue

@ -83,38 +83,35 @@
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<div class="delete-btn"> <div class="delete-btn" v-hasPermi="['monitor:job:remove']">
<el-button <el-button
type="delete" type="delete"
icon="el-icon-delete" icon="el-icon-delete"
size="mini" size="mini"
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['monitor:job:remove']"
>删除</el-button >删除</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="delete-btn"> <div class="delete-btn" v-hasPermi="['monitor:job:remove']">
<el-button <el-button
type="delete" type="delete"
icon="el-icon-delete" icon="el-icon-delete"
size="mini" size="mini"
@click="handleClean" @click="handleClean"
v-hasPermi="['monitor:job:remove']"
>清空</el-button >清空</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="warning-btn"> <div class="warning-btn" v-hasPermi="['monitor:job:export']">
<el-button <el-button
type="warning" type="warning"
icon="el-icon-download" icon="el-icon-download"
size="mini" size="mini"
@click="handleExport" @click="handleExport"
v-hasPermi="['monitor:job:export']"
>导出</el-button >导出</el-button
> >
</div> </div>

12
src/views/monitor/logininfor/index.vue

@ -78,51 +78,47 @@
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<div class="delete-btn"> <div class="delete-btn" v-hasPermi="['monitor:logininfor:remove']">
<el-button <el-button
type="delete" type="delete"
icon="el-icon-delete" icon="el-icon-delete"
size="mini" size="mini"
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['monitor:logininfor:remove']"
>删除</el-button >删除</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="delete-btn"> <div class="delete-btn" v-hasPermi="['monitor:logininfor:remove']">
<el-button <el-button
type="delete" type="delete"
icon="el-icon-delete" icon="el-icon-delete"
size="mini" size="mini"
@click="handleClean" @click="handleClean"
v-hasPermi="['monitor:logininfor:remove']"
>清空</el-button >清空</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="primary-btn"> <div class="primary-btn" v-hasPermi="['monitor:logininfor:unlock']">
<el-button <el-button
type="primary" type="primary"
icon="el-icon-unlock" icon="el-icon-unlock"
size="mini" size="mini"
:disabled="single" :disabled="single"
@click="handleUnlock" @click="handleUnlock"
v-hasPermi="['monitor:logininfor:unlock']"
>解锁</el-button >解锁</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="warning-btn"> <div class="warning-btn" v-hasPermi="['monitor:logininfor:export']">
<el-button <el-button
type="warning" type="warning"
icon="el-icon-download" icon="el-icon-download"
size="mini" size="mini"
@click="handleExport" @click="handleExport"
v-hasPermi="['monitor:logininfor:export']"
>导出</el-button >导出</el-button
> >
</div> </div>

9
src/views/monitor/operlog/index.vue

@ -102,39 +102,36 @@
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<div class="delete-btn"> <div class="delete-btn" v-hasPermi="['monitor:operlog:remove']">
<el-button <el-button
type="delete" type="delete"
icon="el-icon-delete" icon="el-icon-delete"
size="mini" size="mini"
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['monitor:operlog:remove']"
>删除</el-button >删除</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="delete-btn"> <div class="delete-btn" v-hasPermi="['monitor:operlog:remove']">
<el-button <el-button
type="delete" type="delete"
icon="el-icon-delete" icon="el-icon-delete"
size="mini" size="mini"
@click="handleClean" @click="handleClean"
v-hasPermi="['monitor:operlog:remove']"
>清空</el-button >清空</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="warning-btn"> <div class="warning-btn" v-hasPermi="['monitor:operlog:export']">
<el-button <el-button
type="warning" type="warning"
plain plain
icon="el-icon-download" icon="el-icon-download"
size="mini" size="mini"
@click="handleExport" @click="handleExport"
v-hasPermi="['monitor:operlog:export']"
>导出</el-button >导出</el-button
> >
</div> </div>

12
src/views/system/config/index.vue

@ -76,51 +76,47 @@
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<div class="primary-btn"> <div class="primary-btn" v-hasPermi="['system:config:add']">
<el-button <el-button
type="primary" type="primary"
icon="el-icon-plus" icon="el-icon-plus"
size="mini" size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['system:config:add']"
>新增</el-button >新增</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="success-btn"> <div class="success-btn" v-hasPermi="['system:config:edit']">
<el-button <el-button
type="success" type="success"
icon="el-icon-edit" icon="el-icon-edit"
size="mini" size="mini"
:disabled="single" :disabled="single"
@click="handleUpdate" @click="handleUpdate"
v-hasPermi="['system:config:edit']"
>修改</el-button >修改</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="delete-btn"> <div class="delete-btn" v-hasPermi="['system:config:remove']">
<el-button <el-button
type="delete" type="delete"
icon="el-icon-delete" icon="el-icon-delete"
size="mini" size="mini"
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['system:config:remove']"
>删除</el-button >删除</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="warning-btn"> <div class="warning-btn" v-hasPermi="['system:config:export']">
<el-button <el-button
type="warning" type="warning"
icon="el-icon-download" icon="el-icon-download"
size="mini" size="mini"
@click="handleExport" @click="handleExport"
v-hasPermi="['system:config:export']"
>导出</el-button >导出</el-button
> >
</div> </div>

3
src/views/system/dept/index.vue

@ -54,13 +54,12 @@
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<div class="primary-btn"> <div class="primary-btn" v-hasPermi="['system:dept:add']">
<el-button <el-button
type="primary" type="primary"
icon="el-icon-plus" icon="el-icon-plus"
size="mini" size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['system:dept:add']"
>新增</el-button >新增</el-button
> >
</div> </div>

12
src/views/system/dict/data.vue

@ -65,51 +65,47 @@
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<div class="primary-btn"> <div class="primary-btn" v-hasPermi="['system:dict:add']">
<el-button <el-button
type="primary" type="primary"
icon="el-icon-plus" icon="el-icon-plus"
size="mini" size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['system:dict:add']"
>新增</el-button >新增</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="success-btn"> <div class="success-btn" v-hasPermi="['system:dict:edit']">
<el-button <el-button
type="success" type="success"
icon="el-icon-edit" icon="el-icon-edit"
size="mini" size="mini"
:disabled="single" :disabled="single"
@click="handleUpdate" @click="handleUpdate"
v-hasPermi="['system:dict:edit']"
>修改</el-button >修改</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="delete-btn"> <div class="delete-btn" v-hasPermi="['system:dict:remove']">
<el-button <el-button
type="delete" type="delete"
icon="el-icon-delete" icon="el-icon-delete"
size="mini" size="mini"
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['system:dict:remove']"
>删除</el-button >删除</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="warning-btn"> <div class="warning-btn" v-hasPermi="['system:dict:export']">
<el-button <el-button
type="warning" type="warning"
icon="el-icon-download" icon="el-icon-download"
size="mini" size="mini"
@click="handleExport" @click="handleExport"
v-hasPermi="['system:dict:export']"
>导出</el-button >导出</el-button
> >
</div> </div>

12
src/views/system/dict/index.vue

@ -77,51 +77,47 @@
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<div class="primary-btn"> <div class="primary-btn" v-hasPermi="['system:dict:add']">
<el-button <el-button
type="primary" type="primary"
icon="el-icon-plus" icon="el-icon-plus"
size="mini" size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['system:dict:add']"
>新增</el-button >新增</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="success-btn"> <div class="success-btn" v-hasPermi="['system:dict:edit']">
<el-button <el-button
type="success" type="success"
icon="el-icon-edit" icon="el-icon-edit"
size="mini" size="mini"
:disabled="single" :disabled="single"
@click="handleUpdate" @click="handleUpdate"
v-hasPermi="['system:dict:edit']"
>修改</el-button >修改</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="delete-btn"> <div class="delete-btn" v-hasPermi="['system:dict:remove']">
<el-button <el-button
type="delete" type="delete"
icon="el-icon-delete" icon="el-icon-delete"
size="mini" size="mini"
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['system:dict:remove']"
>删除</el-button >删除</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="warning-btn"> <div class="warning-btn" v-hasPermi="['system:dict:export']">
<el-button <el-button
type="warning" type="warning"
icon="el-icon-download" icon="el-icon-download"
size="mini" size="mini"
@click="handleExport" @click="handleExport"
v-hasPermi="['system:dict:export']"
>导出</el-button >导出</el-button
> >
</div> </div>

3
src/views/system/menu/index.vue

@ -54,13 +54,12 @@
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<div class="primary-btn"> <div class="primary-btn" v-hasPermi="['system:menu:add']">
<el-button <el-button
type="primary" type="primary"
icon="el-icon-plus" icon="el-icon-plus"
size="mini" size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['system:menu:add']"
>新增</el-button >新增</el-button
> >
</div> </div>

9
src/views/system/notice/index.vue

@ -63,39 +63,36 @@
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<div class="primary-btn"> <div class="primary-btn" v-hasPermi="['system:notice:add']">
<el-button <el-button
type="primary" type="primary"
icon="el-icon-plus" icon="el-icon-plus"
size="mini" size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['system:notice:add']"
>新增</el-button >新增</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="success-btn"> <div class="success-btn" v-hasPermi="['system:notice:edit']">
<el-button <el-button
type="success" type="success"
icon="el-icon-edit" icon="el-icon-edit"
size="mini" size="mini"
:disabled="single" :disabled="single"
@click="handleUpdate" @click="handleUpdate"
v-hasPermi="['system:notice:edit']"
>修改</el-button >修改</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="delete-btn"> <div class="delete-btn" v-hasPermi="['system:notice:remove']">
<el-button <el-button
type="delete" type="delete"
icon="el-icon-delete" icon="el-icon-delete"
size="mini" size="mini"
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['system:notice:remove']"
>删除</el-button >删除</el-button
> >
</div> </div>

12
src/views/system/post/index.vue

@ -63,51 +63,47 @@
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<div class="primary-btn"> <div class="primary-btn" v-hasPermi="['system:post:add']">
<el-button <el-button
type="primary" type="primary"
icon="el-icon-plus" icon="el-icon-plus"
size="mini" size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['system:post:add']"
>新增</el-button >新增</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="success-btn"> <div class="success-btn" v-hasPermi="['system:post:edit']">
<el-button <el-button
type="success" type="success"
icon="el-icon-edit" icon="el-icon-edit"
size="mini" size="mini"
:disabled="single" :disabled="single"
@click="handleUpdate" @click="handleUpdate"
v-hasPermi="['system:post:edit']"
>修改</el-button >修改</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="delete-btn"> <div class="delete-btn" v-hasPermi="['system:post:remove']">
<el-button <el-button
type="delete" type="delete"
icon="el-icon-delete" icon="el-icon-delete"
size="mini" size="mini"
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['system:post:remove']"
>删除</el-button >删除</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="warning-btn"> <div class="warning-btn" v-hasPermi="['system:post:export']">
<el-button <el-button
type="warning" type="warning"
icon="el-icon-download" icon="el-icon-download"
size="mini" size="mini"
@click="handleExport" @click="handleExport"
v-hasPermi="['system:post:export']"
>导出</el-button >导出</el-button
> >
</div> </div>

6
src/views/system/role/authUser.vue

@ -51,26 +51,24 @@
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<div class="primary-btn"> <div class="primary-btn" v-hasPermi="['system:role:add']">
<el-button <el-button
type="primary" type="primary"
icon="el-icon-plus" icon="el-icon-plus"
size="mini" size="mini"
@click="openSelectUser" @click="openSelectUser"
v-hasPermi="['system:role:add']"
>添加用户</el-button >添加用户</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="delete-btn"> <div class="delete-btn" v-hasPermi="['system:role:remove']">
<el-button <el-button
type="delete" type="delete"
icon="el-icon-circle-close" icon="el-icon-circle-close"
size="mini" size="mini"
:disabled="multiple" :disabled="multiple"
@click="cancelAuthUserAll" @click="cancelAuthUserAll"
v-hasPermi="['system:role:remove']"
>批量取消授权</el-button >批量取消授权</el-button
> >
</div> </div>

12
src/views/system/role/index.vue

@ -77,51 +77,47 @@
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<div class="primary-btn"> <div class="primary-btn" v-hasPermi="['system:role:add']">
<el-button <el-button
type="primary" type="primary"
icon="el-icon-plus" icon="el-icon-plus"
size="mini" size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['system:role:add']"
>新增</el-button >新增</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="success-btn"> <div class="success-btn" v-hasPermi="['system:role:edit']">
<el-button <el-button
type="success" type="success"
icon="el-icon-edit" icon="el-icon-edit"
size="mini" size="mini"
:disabled="single" :disabled="single"
@click="handleUpdate" @click="handleUpdate"
v-hasPermi="['system:role:edit']"
>修改</el-button >修改</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="delete-btn"> <div class="delete-btn" v-hasPermi="['system:role:remove']">
<el-button <el-button
type="delete" type="delete"
icon="el-icon-delete" icon="el-icon-delete"
size="mini" size="mini"
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['system:role:remove']"
>删除</el-button >删除</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="warning-btn"> <div class="warning-btn" v-hasPermi="['system:role:export']">
<el-button <el-button
type="warning" type="warning"
icon="el-icon-download" icon="el-icon-download"
size="mini" size="mini"
@click="handleExport" @click="handleExport"
v-hasPermi="['system:role:export']"
>导出</el-button >导出</el-button
> >
</div> </div>

12
src/views/system/user/index.vue

@ -39,19 +39,19 @@
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<div class="success-btn"><el-button type="success" icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['system:user:add']">新增</el-button></div> <div class="success-btn" v-hasPermi="['system:user:add']"><el-button type="success" icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button></div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="primary-btn"><el-button type="primary" icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate" v-hasPermi="['system:user:edit']">修改</el-button></div> <div class="primary-btn" v-hasPermi="['system:user:edit']"><el-button type="primary" icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate">修改</el-button></div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="delete-btn"><el-button type="delete" icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete" v-hasPermi="['system:user:remove']">删除</el-button></div> <div class="delete-btn" v-hasPermi="['system:user:remove']"><el-button type="delete" icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete">删除</el-button></div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="info-btn"><el-button type="info" icon="el-icon-upload2" size="mini" @click="handleImport" v-hasPermi="['system:user:import']">导入</el-button></div> <div class="info-btn" v-hasPermi="['system:user:import']"><el-button type="info" icon="el-icon-upload2" size="mini" @click="handleImport">导入</el-button></div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="warning-btn"><el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['system:user:export']">导出</el-button></div> <div class="warning-btn" v-hasPermi="['system:user:export']"><el-button type="warning" icon="el-icon-download" size="mini" @click="handleExport">导出</el-button></div>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
</el-row> </el-row>

12
src/views/tool/gen/index.vue

@ -60,14 +60,13 @@
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<div class="primary-btn"> <div class="primary-btn" v-hasPermi="['tool:gen:code']">
<el-button <el-button
type="primary" type="primary"
icon="el-icon-download" icon="el-icon-download"
size="mini" size="mini"
:disabled="multiple" :disabled="multiple"
@click="handleGenTable" @click="handleGenTable"
v-hasPermi="['tool:gen:code']"
>生成</el-button >生成</el-button
> >
</div> </div>
@ -85,39 +84,36 @@
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="info-btn"> <div class="info-btn" v-hasPermi="['tool:gen:import']">
<el-button <el-button
type="info" type="info"
icon="el-icon-upload" icon="el-icon-upload"
size="mini" size="mini"
@click="openImportTable" @click="openImportTable"
v-hasPermi="['tool:gen:import']"
>导入</el-button >导入</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="success-btn"> <div class="success-btn" v-hasPermi="['tool:gen:edit']">
<el-button <el-button
type="success" type="success"
icon="el-icon-edit" icon="el-icon-edit"
size="mini" size="mini"
:disabled="single" :disabled="single"
@click="handleEditTable" @click="handleEditTable"
v-hasPermi="['tool:gen:edit']"
>修改</el-button >修改</el-button
> >
</div> </div>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<div class="delete-btn"> <div class="delete-btn" v-hasPermi="['tool:gen:remove']">
<el-button <el-button
type="delete" type="delete"
icon="el-icon-delete" icon="el-icon-delete"
size="mini" size="mini"
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['tool:gen:remove']"
>删除</el-button >删除</el-button
> >
</div> </div>

Loading…
Cancel
Save