Jelajahi Sumber

单点登录载入

wt 3 tahun lalu
induk
melakukan
d4e4f327e3
66 mengubah file dengan 3462 tambahan dan 530 penghapusan
  1. TEMPAT SAMPAH
      deviceManager.zip
  2. TEMPAT SAMPAH
      deviceManager/favicon.ico
  3. 0 210
      deviceManager/html/ie.html
  4. 0 181
      deviceManager/index.html
  5. 0 2
      deviceManager/robots.txt
  6. 0 0
      deviceManager/static/css/app.73b8de6e.css
  7. 0 0
      deviceManager/static/css/chunk-1366e499.ca646668.css
  8. 0 1
      deviceManager/static/css/chunk-2d1d87f5.f4f45be1.css
  9. 0 0
      deviceManager/static/css/chunk-4b5668c0.2cbded2b.css
  10. 0 0
      deviceManager/static/css/chunk-4e8a17b2.880c17bc.css
  11. 0 1
      deviceManager/static/css/chunk-58e08142.4f216fb8.css
  12. 0 1
      deviceManager/static/css/chunk-6a3a862b.02c39c52.css
  13. 0 1
      deviceManager/static/css/chunk-7e1d3d52.edabf9ec.css
  14. 0 4
      deviceManager/static/css/chunk-887127d2.84f98409.css
  15. 0 15
      deviceManager/static/css/chunk-libs.ea078ece.css
  16. TEMPAT SAMPAH
      deviceManager/static/fonts/element-icons.535877f5.woff
  17. TEMPAT SAMPAH
      deviceManager/static/fonts/element-icons.732389de.ttf
  18. TEMPAT SAMPAH
      deviceManager/static/img/1.8284d1cf.gif
  19. TEMPAT SAMPAH
      deviceManager/static/img/401.089007e7.gif
  20. TEMPAT SAMPAH
      deviceManager/static/img/404.a57b6f31.png
  21. TEMPAT SAMPAH
      deviceManager/static/img/404_cloud.0f4bc32b.png
  22. TEMPAT SAMPAH
      deviceManager/static/img/bg.1a7b14da.png
  23. 0 39
      deviceManager/static/img/dark.412ca67e.svg
  24. 0 39
      deviceManager/static/img/light.4183aad0.svg
  25. TEMPAT SAMPAH
      deviceManager/static/img/logo-b.fd92c04e.png
  26. TEMPAT SAMPAH
      deviceManager/static/img/logo.847312f6.png
  27. 0 0
      deviceManager/static/js/app.b5bec89e.js
  28. 0 0
      deviceManager/static/js/chunk-1366e499.a7a42eae.js
  29. 0 0
      deviceManager/static/js/chunk-2d0b2b28.9ffc10ea.js
  30. 0 0
      deviceManager/static/js/chunk-2d0e2366.68f2ed78.js
  31. 0 1
      deviceManager/static/js/chunk-2d0f012d.1bde8e38.js
  32. 0 1
      deviceManager/static/js/chunk-2d1d87f5.8dc74559.js
  33. 0 1
      deviceManager/static/js/chunk-4b5668c0.f2c4fb5e.js
  34. 0 0
      deviceManager/static/js/chunk-4e8a17b2.37e2469b.js
  35. 0 0
      deviceManager/static/js/chunk-58e08142.01d4b852.js
  36. 0 0
      deviceManager/static/js/chunk-6a3a862b.6b8867c6.js
  37. 0 0
      deviceManager/static/js/chunk-7e1d3d52.c15dca58.js
  38. 0 0
      deviceManager/static/js/chunk-887127d2.a09701ce.js
  39. 0 0
      deviceManager/static/js/chunk-elementUI.1ae322cf.js
  40. 0 0
      deviceManager/static/js/chunk-libs.70ffa533.js
  41. 38 0
      src/api/business/MochaITOM/crew/index.js
  42. 38 0
      src/api/business/MochaITOM/plan/index.js
  43. 38 0
      src/api/business/MochaITOM/point/index.js
  44. 17 0
      src/api/business/MochaITOM/record/index.js
  45. 45 0
      src/api/business/OM/MochaITOM/crew/index.js
  46. 38 0
      src/api/business/OM/MochaITOM/plan/index.js
  47. 38 0
      src/api/business/OM/MochaITOM/point/index.js
  48. 27 0
      src/api/business/OM/MochaITOM/record/index.js
  49. 48 0
      src/api/business/OM/MochaITOM/route/index.js
  50. 9 1
      src/api/login.js
  51. 10 1
      src/assets/js/dataFormate.js
  52. 13 1
      src/store/modules/user.js
  53. 255 0
      src/views/business/MochaITOM/crew - 副本 (2)/index.vue
  54. 255 0
      src/views/business/MochaITOM/crew - 副本 (3)/index.vue
  55. 255 0
      src/views/business/MochaITOM/crew - 副本/index.vue
  56. 255 0
      src/views/business/MochaITOM/crew/index.vue
  57. 417 0
      src/views/business/OM/MochaITOM/crew/index.vue
  58. 509 0
      src/views/business/OM/MochaITOM/plan/index.vue
  59. 430 0
      src/views/business/OM/MochaITOM/point/index.vue
  60. 199 0
      src/views/business/OM/MochaITOM/record/index.vue
  61. 299 0
      src/views/business/OM/MochaITOM/route/index.vue
  62. 1 1
      src/views/business/buildMange/floor/index.vue
  63. 0 2
      src/views/business/fireInternet/fireAlarm/fireMonitoring/index.vue
  64. 14 20
      src/views/index.vue
  65. 207 7
      src/views/login.vue
  66. 7 0
      设备设施接口.md

TEMPAT SAMPAH
deviceManager.zip


TEMPAT SAMPAH
deviceManager/favicon.ico


File diff ditekan karena terlalu besar
+ 0 - 210
deviceManager/html/ie.html


File diff ditekan karena terlalu besar
+ 0 - 181
deviceManager/index.html


+ 0 - 2
deviceManager/robots.txt

@@ -1,2 +0,0 @@
-User-agent: *
-Disallow: /

File diff ditekan karena terlalu besar
+ 0 - 0
deviceManager/static/css/app.73b8de6e.css


File diff ditekan karena terlalu besar
+ 0 - 0
deviceManager/static/css/chunk-1366e499.ca646668.css


+ 0 - 1
deviceManager/static/css/chunk-2d1d87f5.f4f45be1.css

@@ -1 +0,0 @@
-.errPage-container[data-v-0e5c12bd]{width:800px;max-width:100%;margin:100px auto}.errPage-container .pan-back-btn[data-v-0e5c12bd]{background:#008489;color:#fff;border:none!important}.errPage-container .pan-gif[data-v-0e5c12bd]{margin:0 auto;display:block}.errPage-container .pan-img[data-v-0e5c12bd]{display:block;margin:0 auto;width:100%}.errPage-container .text-jumbo[data-v-0e5c12bd]{font-size:60px;font-weight:700;color:#484848}.errPage-container .list-unstyled[data-v-0e5c12bd]{font-size:14px}.errPage-container .list-unstyled li[data-v-0e5c12bd]{padding-bottom:5px}.errPage-container .list-unstyled a[data-v-0e5c12bd]{color:#008489;text-decoration:none}.errPage-container .list-unstyled a[data-v-0e5c12bd]:hover{text-decoration:underline}

File diff ditekan karena terlalu besar
+ 0 - 0
deviceManager/static/css/chunk-4b5668c0.2cbded2b.css


File diff ditekan karena terlalu besar
+ 0 - 0
deviceManager/static/css/chunk-4e8a17b2.880c17bc.css


+ 0 - 1
deviceManager/static/css/chunk-58e08142.4f216fb8.css

@@ -1 +0,0 @@
-.user-info-head[data-v-20a6c9d6]{position:relative;display:inline-block;height:120px}.user-info-head[data-v-20a6c9d6]:hover:after{content:"+";position:absolute;left:0;right:0;top:0;bottom:0;color:#eee;background:rgba(0,0,0,.5);font-size:24px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;cursor:pointer;line-height:110px;border-radius:50%}

+ 0 - 1
deviceManager/static/css/chunk-6a3a862b.02c39c52.css

@@ -1 +0,0 @@
-.register{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:100%;background-size:cover}.title{margin:0 auto 30px auto;text-align:center;color:#707070}.register-form{border-radius:6px;background:#fff;width:400px;padding:25px 25px 5px 25px}.register-form .el-input,.register-form .el-input input{height:38px}.register-form .input-icon{height:39px;width:14px;margin-left:2px}.register-tip{font-size:13px;text-align:center;color:#bfbfbf}.register-code{width:33%;height:38px;float:right}.register-code img{cursor:pointer;vertical-align:middle}.el-register-footer{height:40px;line-height:40px;position:fixed;bottom:0;width:100%;text-align:center;color:#fff;font-family:Arial;font-size:12px;letter-spacing:1px}.register-code-img{height:38px}

+ 0 - 1
deviceManager/static/css/chunk-7e1d3d52.edabf9ec.css

@@ -1 +0,0 @@
-.bg[data-v-5b194c9a]{width:100%;height:100%;overflow:hidden;position:fixed;top:0;left:0;z-index:-1}.bg .bgimg[data-v-5b194c9a]{width:100%;height:100%;position:absolute;top:0;left:0;z-index:-1}.logo[data-v-5b194c9a]{width:100%;position:fixed;top:0}.logo img[data-v-5b194c9a]{width:152px;margin:10px 2rem 0 20px;vertical-align:middle}.logo .logo_txt[data-v-5b194c9a]{font-size:1.5rem;color:#fff;vertical-align:middle;letter-spacing:4px}.login[data-v-5b194c9a]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:100%;background-size:cover}.title[data-v-5b194c9a]{margin:0 auto 30px auto;text-align:left;color:#000;font-size:20px}.title span[data-v-5b194c9a]{margin-left:10px;opacity:.25}.login-form[data-v-5b194c9a]{border-radius:6px;background:#fff;width:456px;padding:63px 35px}.login-form .el-input[data-v-5b194c9a]{height:40px;font-size:16px!important}.login-form .el-input input[data-v-5b194c9a]{height:40px}.login-form .input-icon[data-v-5b194c9a]{height:39px;width:14px;margin-left:2px}.login-tip[data-v-5b194c9a]{font-size:13px;text-align:center;color:#bfbfbf}.login-code[data-v-5b194c9a]{width:33%;height:36px;float:right}.login-code img[data-v-5b194c9a]{cursor:pointer;vertical-align:middle;width:100%;height:36px;margin-top:-1px}.el-login-footer[data-v-5b194c9a]{height:40px;line-height:40px;position:fixed;bottom:0;width:100%;text-align:center;color:#fff;font-family:Arial;font-size:12px;letter-spacing:1px}[data-v-5b194c9a] .el-input__inner{height:36px!important;line-height:36px!important}

File diff ditekan karena terlalu besar
+ 0 - 4
deviceManager/static/css/chunk-887127d2.84f98409.css


File diff ditekan karena terlalu besar
+ 0 - 15
deviceManager/static/css/chunk-libs.ea078ece.css


TEMPAT SAMPAH
deviceManager/static/fonts/element-icons.535877f5.woff


TEMPAT SAMPAH
deviceManager/static/fonts/element-icons.732389de.ttf


TEMPAT SAMPAH
deviceManager/static/img/1.8284d1cf.gif


TEMPAT SAMPAH
deviceManager/static/img/401.089007e7.gif


TEMPAT SAMPAH
deviceManager/static/img/404.a57b6f31.png


TEMPAT SAMPAH
deviceManager/static/img/404_cloud.0f4bc32b.png


TEMPAT SAMPAH
deviceManager/static/img/bg.1a7b14da.png


+ 0 - 39
deviceManager/static/img/dark.412ca67e.svg

@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="52px" height="45px" viewBox="0 0 52 45" version="1.1" 
-    xmlns="http://www.w3.org/2000/svg" 
-    xmlns:xlink="http://www.w3.org/1999/xlink">
-    <defs>
-        <filter x="-9.4%" y="-6.2%" width="118.8%" height="122.5%" filterUnits="objectBoundingBox" id="filter-1">
-            <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
-            <feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
-            <feColorMatrix values="0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.15 0" type="matrix" in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix>
-            <feMerge>
-                <feMergeNode in="shadowMatrixOuter1"></feMergeNode>
-                <feMergeNode in="SourceGraphic"></feMergeNode>
-            </feMerge>
-        </filter>
-        <rect id="path-2" x="0" y="0" width="48" height="40" rx="4"></rect>
-        <filter x="-4.2%" y="-2.5%" width="108.3%" height="110.0%" filterUnits="objectBoundingBox" id="filter-4">
-            <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
-            <feGaussianBlur stdDeviation="0.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
-            <feColorMatrix values="0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.1 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
-        </filter>
-    </defs>
-    <g id="配置面板" width="48" height="40" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
-        <g id="setting-copy-2" width="48" height="40" transform="translate(-1190.000000, -136.000000)">
-            <g id="Group-8" width="48" height="40" transform="translate(1167.000000, 0.000000)">
-                <g id="Group-5-Copy-5" filter="url(#filter-1)" transform="translate(25.000000, 137.000000)">
-                    <mask id="mask-3" fill="white">
-                        <use xlink:href="#path-2"></use>
-                    </mask>
-                    <g id="Rectangle-18">
-                        <use fill="black" fill-opacity="1" filter="url(#filter-4)" xlink:href="#path-2"></use>
-                        <use fill="#F0F2F5" fill-rule="evenodd" xlink:href="#path-2"></use>
-                    </g>
-                    <rect id="Rectangle-11" fill="#FFFFFF" mask="url(#mask-3)" x="0" y="0" width="48" height="10"></rect>
-                    <rect id="Rectangle-18" fill="#303648" mask="url(#mask-3)" x="0" y="0" width="16" height="40"></rect>
-                </g>
-            </g>
-        </g>
-    </g>
-</svg>

+ 0 - 39
deviceManager/static/img/light.4183aad0.svg

@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="52px" height="45px" viewBox="0 0 52 45" version="1.1" 
-    xmlns="http://www.w3.org/2000/svg" 
-    xmlns:xlink="http://www.w3.org/1999/xlink">
-    <defs>
-        <filter x="-9.4%" y="-6.2%" width="118.8%" height="122.5%" filterUnits="objectBoundingBox" id="filter-1">
-            <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
-            <feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
-            <feColorMatrix values="0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.15 0" type="matrix" in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix>
-            <feMerge>
-                <feMergeNode in="shadowMatrixOuter1"></feMergeNode>
-                <feMergeNode in="SourceGraphic"></feMergeNode>
-            </feMerge>
-        </filter>
-        <rect id="path-2" x="0" y="0" width="48" height="40" rx="4"></rect>
-        <filter x="-4.2%" y="-2.5%" width="108.3%" height="110.0%" filterUnits="objectBoundingBox" id="filter-4">
-            <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
-            <feGaussianBlur stdDeviation="0.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
-            <feColorMatrix values="0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.1 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
-        </filter>
-    </defs>
-    <g id="配置面板" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
-        <g id="setting-copy-2" transform="translate(-1254.000000, -136.000000)">
-            <g id="Group-8" transform="translate(1167.000000, 0.000000)">
-                <g id="Group-5" filter="url(#filter-1)" transform="translate(89.000000, 137.000000)">
-                    <mask id="mask-3" fill="white">
-                        <use xlink:href="#path-2"></use>
-                    </mask>
-                    <g id="Rectangle-18">
-                        <use fill="black" fill-opacity="1" filter="url(#filter-4)" xlink:href="#path-2"></use>
-                        <use fill="#F0F2F5" fill-rule="evenodd" xlink:href="#path-2"></use>
-                    </g>
-                    <rect id="Rectangle-18" fill="#FFFFFF" mask="url(#mask-3)" x="0" y="0" width="16" height="40"></rect>
-                    <rect id="Rectangle-11" fill="#FFFFFF" mask="url(#mask-3)" x="0" y="0" width="48" height="10"></rect>
-                </g>
-            </g>
-        </g>
-    </g>
-</svg>

TEMPAT SAMPAH
deviceManager/static/img/logo-b.fd92c04e.png


TEMPAT SAMPAH
deviceManager/static/img/logo.847312f6.png


File diff ditekan karena terlalu besar
+ 0 - 0
deviceManager/static/js/app.b5bec89e.js


File diff ditekan karena terlalu besar
+ 0 - 0
deviceManager/static/js/chunk-1366e499.a7a42eae.js


File diff ditekan karena terlalu besar
+ 0 - 0
deviceManager/static/js/chunk-2d0b2b28.9ffc10ea.js


File diff ditekan karena terlalu besar
+ 0 - 0
deviceManager/static/js/chunk-2d0e2366.68f2ed78.js


+ 0 - 1
deviceManager/static/js/chunk-2d0f012d.1bde8e38.js

@@ -1 +0,0 @@
-(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d0f012d"],{"9b8f":function(e,r,n){"use strict";n.r(r);n("ac1f"),n("5319");var t,u,a={created:function(){var e=this.$route,r=e.params,n=e.query,t=r.path;this.$router.replace({path:"/"+t,query:n})},render:function(e){return e()}},c=a,o=n("2877"),p=Object(o["a"])(c,t,u,!1,null,null,null);r["default"]=p.exports}}]);

+ 0 - 1
deviceManager/static/js/chunk-2d1d87f5.8dc74559.js

@@ -1 +0,0 @@
-(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d1d87f5"],{9798:function(t,e,s){},cc6c:function(t,e,s){t.exports=s.p+"static/img/401.089007e7.gif"},e356:function(t,e,s){"use strict";s("9798")},ec55:function(t,e,s){"use strict";s.r(e);var a=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"errPage-container"},[s("el-button",{staticClass:"pan-back-btn",attrs:{icon:"arrow-left"},on:{click:t.back}},[t._v(" 返回 ")]),s("el-row",[s("el-col",{attrs:{span:12}},[s("h1",{staticClass:"text-jumbo text-ginormous"},[t._v(" 401错误! ")]),s("h2",[t._v("您没有访问权限!")]),s("h6",[t._v("对不起,您没有访问权限,请不要进行非法操作!您可以返回主页面")]),s("ul",{staticClass:"list-unstyled"},[s("li",{staticClass:"link-type"},[s("router-link",{attrs:{to:"/index"}},[t._v(" 回首页 ")])],1)])]),s("el-col",{attrs:{span:12}},[s("img",{attrs:{src:t.errGif,width:"313",height:"428",alt:"Girl has dropped her ice cream."}})])],1)],1)},c=[],n=s("cc6c"),r=s.n(n),i={name:"Page401",data:function(){return{errGif:r.a+"?"+ +new Date}},methods:{back:function(){this.$route.query.noGoBack?this.$router.push({path:"/"}):this.$router.go(-1)}}},o=i,l=(s("e356"),s("2877")),u=Object(l["a"])(o,a,c,!1,null,"0e5c12bd",null);e["default"]=u.exports}}]);

+ 0 - 1
deviceManager/static/js/chunk-4b5668c0.f2c4fb5e.js

@@ -1 +0,0 @@
-(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-4b5668c0"],{"26fc":function(t,s,i){t.exports=i.p+"static/img/404_cloud.0f4bc32b.png"},2754:function(t,s,i){"use strict";i.r(s);var c=function(){var t=this,s=t.$createElement,i=t._self._c||s;return i("div",{staticClass:"wscn-http404-container"},[i("div",{staticClass:"wscn-http404"},[t._m(0),i("div",{staticClass:"bullshit"},[i("div",{staticClass:"bullshit__oops"},[t._v(" 404错误! ")]),i("div",{staticClass:"bullshit__headline"},[t._v(" "+t._s(t.message)+" ")]),i("div",{staticClass:"bullshit__info"},[t._v(" 对不起,您正在寻找的页面不存在。尝试检查URL的错误,然后按浏览器上的刷新按钮或尝试在我们的应用程序中找到其他内容。 ")]),i("router-link",{staticClass:"bullshit__return-home",attrs:{to:"/index"}},[t._v(" 返回首页 ")])],1)])])},a=[function(){var t=this,s=t.$createElement,c=t._self._c||s;return c("div",{staticClass:"pic-404"},[c("img",{staticClass:"pic-404__parent",attrs:{src:i("a36b"),alt:"404"}}),c("img",{staticClass:"pic-404__child left",attrs:{src:i("26fc"),alt:"404"}}),c("img",{staticClass:"pic-404__child mid",attrs:{src:i("26fc"),alt:"404"}}),c("img",{staticClass:"pic-404__child right",attrs:{src:i("26fc"),alt:"404"}})])}],e={name:"Page404",computed:{message:function(){return"找不到网页!"}}},l=e,n=(i("e077"),i("2877")),r=Object(n["a"])(l,c,a,!1,null,"267f2676",null);s["default"]=r.exports},"2e5e":function(t,s,i){},a36b:function(t,s,i){t.exports=i.p+"static/img/404.a57b6f31.png"},e077:function(t,s,i){"use strict";i("2e5e")}}]);

File diff ditekan karena terlalu besar
+ 0 - 0
deviceManager/static/js/chunk-4e8a17b2.37e2469b.js


File diff ditekan karena terlalu besar
+ 0 - 0
deviceManager/static/js/chunk-58e08142.01d4b852.js


File diff ditekan karena terlalu besar
+ 0 - 0
deviceManager/static/js/chunk-6a3a862b.6b8867c6.js


File diff ditekan karena terlalu besar
+ 0 - 0
deviceManager/static/js/chunk-7e1d3d52.c15dca58.js


File diff ditekan karena terlalu besar
+ 0 - 0
deviceManager/static/js/chunk-887127d2.a09701ce.js


File diff ditekan karena terlalu besar
+ 0 - 0
deviceManager/static/js/chunk-elementUI.1ae322cf.js


File diff ditekan karena terlalu besar
+ 0 - 0
deviceManager/static/js/chunk-libs.70ffa533.js


+ 38 - 0
src/api/business/MochaITOM/crew/index.js

@@ -0,0 +1,38 @@
+import request from '@/utils/request'
+/* 班组管理 */
+export function addDevopsTeam(data) {
+    return request({
+        url: "/devopsTeam",
+        method: 'post',
+        data: data
+    })
+}
+
+export function delDevopsTeam(data) {
+    return request({
+        url: "/devopsTeam/" + data,
+        method: 'delete',
+    })
+}
+export function updateDevopsTeam(data) {
+    return request({
+        url: "/devopsTeam",
+        method: 'put',
+        data: data
+    })
+}
+export function getDevopsTeam(data) {
+    return request({
+        url: "/devopsTeam/list",
+        method: 'get',
+        params: data
+    })
+}
+// export function exportDeviceType(data) {
+//     return request({
+//         url: "/deviceType/export",
+//         method: 'get',
+//         params: data
+//     })
+// }
+

+ 38 - 0
src/api/business/MochaITOM/plan/index.js

@@ -0,0 +1,38 @@
+import request from '@/utils/request'
+/* 维保计划 */
+export function addMaintianPlan(data) {
+    return request({
+        url: "/maintianPlan",
+        method: 'post',
+        data: data
+    })
+}
+
+export function delMaintianPlan(data) {
+    return request({
+        url: "/maintianPlan/" + data,
+        method: 'delete',
+    })
+}
+export function updateMaintianPlan(data) {
+    return request({
+        url: "/maintianPlan",
+        method: 'put',
+        data: data
+    })
+}
+export function getMaintianPlan(data) {
+    return request({
+        url: "/maintianPlan/list",
+        method: 'get',
+        params: data
+    })
+}
+export function exportMaintianPlan(data) {
+    return request({
+        url: "/maintianPlan/export",
+        method: 'get',
+        params: data
+    })
+}
+

+ 38 - 0
src/api/business/MochaITOM/point/index.js

@@ -0,0 +1,38 @@
+import request from '@/utils/request'
+/* 维保点位 */
+export function addInspectionPoint(data) {
+    return request({
+        url: "/inspectionPoint",
+        method: 'post',
+        data: data
+    })
+}
+
+export function delInspectionPoint(data) {
+    return request({
+        url: "/inspectionPoint/" + data,
+        method: 'delete',
+    })
+}
+export function updateInspectionPoint(data) {
+    return request({
+        url: "/inspectionPoint",
+        method: 'put',
+        data: data
+    })
+}
+export function getInspectionPoint(data) {
+    return request({
+        url: "/inspectionPoint/list",
+        method: 'get',
+        params: data
+    })
+}
+export function exportInspectionPoint(data) {
+    return request({
+        url: "/inspectionPoint/export",
+        method: 'get',
+        params: data
+    })
+}
+

+ 17 - 0
src/api/business/MochaITOM/record/index.js

@@ -0,0 +1,17 @@
+import request from '@/utils/request'
+/* 维保计划 */
+export function getMaintianLog(data) {
+    return request({
+        url: "/maintianLog/list",
+        method: 'get',
+        params: data
+    })
+}
+export function exportMaintianLog(data) {
+    return request({
+        url: "/maintianLog/export",
+        method: 'get',
+        params: data
+    })
+}
+

+ 45 - 0
src/api/business/OM/MochaITOM/crew/index.js

@@ -0,0 +1,45 @@
+import request from '@/utils/request'
+/* 班组管理 */
+export function addDevopsTeam(data) {
+    return request({
+        url: "/devopsTeam",
+        method: 'post',
+        data: data
+    })
+}
+
+export function delDevopsTeam(data) {
+    return request({
+        url: "/devopsTeam/" + data,
+        method: 'delete',
+    })
+}
+export function updateDevopsTeam(data) {
+    return request({
+        url: "/devopsTeam",
+        method: 'put',
+        data: data
+    })
+}
+export function getDevopsTeam(data) {
+    return request({
+        url: "/devopsTeam/list",
+        method: 'get',
+        params: data
+    })
+}
+export function getTD(data) {//团队组员
+    return request({
+        url: "/devopsTeamRelation/list",
+        method: 'get',
+        params: data
+    })
+}
+// export function exportDeviceType(data) {
+//     return request({
+//         url: "/deviceType/export",
+//         method: 'get',
+//         params: data
+//     })
+// }
+

+ 38 - 0
src/api/business/OM/MochaITOM/plan/index.js

@@ -0,0 +1,38 @@
+import request from '@/utils/request'
+/* 维保计划 */
+export function addMaintianPlan(data) {
+    return request({
+        url: "/maintianPlan",
+        method: 'post',
+        data: data
+    })
+}
+
+export function delMaintianPlan(data) {
+    return request({
+        url: "/maintianPlan/" + data,
+        method: 'delete',
+    })
+}
+export function updateMaintianPlan(data) {
+    return request({
+        url: "/maintianPlan",
+        method: 'put',
+        data: data
+    })
+}
+export function getMaintianPlan(data) {
+    return request({
+        url: "/maintianPlan/list",
+        method: 'get',
+        params: data
+    })
+}
+export function exportMaintianPlan(data) {
+    return request({
+        url: "/maintianPlan/export",
+        method: 'get',
+        params: data
+    })
+}
+

+ 38 - 0
src/api/business/OM/MochaITOM/point/index.js

@@ -0,0 +1,38 @@
+import request from '@/utils/request'
+/* 维保点位 */
+export function addInspectionPoint(data) {
+    return request({
+        url: "/inspectionPoint",
+        method: 'post',
+        data: data
+    })
+}
+
+export function delInspectionPoint(data) {
+    return request({
+        url: "/inspectionPoint/" + data,
+        method: 'delete',
+    })
+}
+export function updateInspectionPoint(data) {
+    return request({
+        url: "/inspectionPoint",
+        method: 'put',
+        data: data
+    })
+}
+export function getInspectionPoint(data) {
+    return request({
+        url: "/inspectionPoint/list",
+        method: 'get',
+        params: data
+    })
+}
+export function exportInspectionPoint(data) {
+    return request({
+        url: "/inspectionPoint/export",
+        method: 'get',
+        params: data
+    })
+}
+

+ 27 - 0
src/api/business/OM/MochaITOM/record/index.js

@@ -0,0 +1,27 @@
+import request from '@/utils/request'
+/* 维保记录 */
+
+export function getMaintianLog(data) {
+    return request({
+        url: "/maintianLog/list",
+        method: 'post',
+        data: data
+    })
+}
+export function getCollect(data) {
+    return request({
+        url: "/planChild/collect",
+        method: 'get',
+        params: data
+    })
+}
+
+
+export function exportMaintianLog(data) {
+    return request({
+        url: "/maintianLog/export",
+        method: 'get',
+        params: data
+    })
+}
+

+ 48 - 0
src/api/business/OM/MochaITOM/route/index.js

@@ -0,0 +1,48 @@
+import request from '@/utils/request'
+/* 线路管理 */
+export function addPlanPath(data) {
+    return request({
+        url: "/planPath",
+        method: 'post',
+        data: data
+    })
+}
+
+export function delPlanPath(data) {
+    return request({
+        url: "/planPath/" + data,
+        method: 'delete',
+    })
+}
+export function updatePlanPath(data) {
+    return request({
+        url: "/planPath",
+        method: 'put',
+        data: data
+    })
+}
+export function getPlanPath(data) {
+    return request({
+        url: "/planPath/list",
+        method: 'get',
+        params: data
+    })
+}
+export function getXL(data) {
+    return request({
+        url: "planSpot/list",
+        method: 'get',
+        params: data
+    })
+}
+
+
+
+// export function exportDeviceType(data) {
+//     return request({
+//         url: "/deviceType/export",
+//         method: 'get',
+//         params: data
+//     })
+// }
+

+ 9 - 1
src/api/login.js

@@ -1,6 +1,6 @@
 import request from '@/utils/request'
 
-// 登录方法
+// 登录方法(常规)
 export function login(username, password, code, uuid) {
   const data = {
     username,
@@ -14,6 +14,14 @@ export function login(username, password, code, uuid) {
     data: data
   })
 }
+// 登录方法(ERP)
+export function loginERP(data) {
+  return request({
+    url: '/loginByCenterId',
+    method: 'get',
+    params: data
+  })
+}
 
 // 注册方法
 export function register(data) {

+ 10 - 1
src/assets/js/dataFormate.js

@@ -281,6 +281,14 @@ function YearMonthDate() {
     var currDate = date.getFullYear() + "-" + (mon < 10 ? "0" + mon : mon) + "-" + (day < 10 ? "0" + day : day) + " " + h + ":" + minute + ":" + second;
     return currDate
 }
+/**
+ * 年月日时分秒转时间戳()
+ * getTimeFormat('2022-02-02 02:22:22');
+ * ***/
+function getTimeFormat(timeS){
+    let time = (new Date(timeS).getTime()) / 1000; //除1000 是变成秒级的时间戳 不除就是毫秒级
+    return time;
+}
 
 export {
     getWeekStartAndEnd,
@@ -303,5 +311,6 @@ export {
     getThisDateBeforMonth,
     getThisDateNextMonth,
     YearMonthDate,
-    YearMonthDateSFN
+    YearMonthDateSFN,
+    getTimeFormat
 }

+ 13 - 1
src/store/modules/user.js

@@ -1,4 +1,4 @@
-import { login, logout, getInfo } from '@/api/login'
+import { login, loginERP, logout, getInfo } from '@/api/login'
 import { getToken, setToken, removeToken } from '@/utils/auth'
 
 const user = {
@@ -45,6 +45,18 @@ const user = {
                 })
             })
         },
+        // 登录PER
+         LoginERP({ commit }, userInfo) {
+            return new Promise((resolve, reject) => {
+                loginERP({centerId:userInfo.id}).then(res => {
+                    setToken(res.data)
+                    commit('SET_TOKEN', res.data)
+                    resolve()
+                }).catch(error => {
+                    reject(error)
+                })
+            })
+        },
 
         // 获取用户信息
         GetInfo({ commit, state }) {

+ 255 - 0
src/views/business/MochaITOM/crew - 副本 (2)/index.vue

@@ -0,0 +1,255 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="90px">
+      <el-form-item label="团队名称:" prop="name">
+        <el-input
+          v-model.trim="queryParams.name"
+          placeholder="请输入团队名称"
+          clearable
+          size="small"
+          style="width: 140px"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="责任人" prop="userName">
+        <el-select v-model="queryParams.userName"   placeholder="请选择责任人" style="width: 140px">
+          <el-option
+            v-for="item in transferTypeList"
+            :key="item.id"
+            :label="item.name"
+            :value="item.id"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:admin:add']"
+        >新增</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-table v-loading="loading" :data="adminList" height="calc(100vh - 28vh)">
+      <el-table-column label="团队名称" align="center" prop="teamName"  show-overflow-tooltip />
+      <el-table-column label="所属单位" align="center" prop="companyName"  show-overflow-tooltip />
+      <el-table-column label="责任人" align="center" prop="userIds.name"  show-overflow-tooltip />
+      <el-table-column label="联系方式" align="center" prop="userIds.id"  show-overflow-tooltip />
+      <el-table-column label="创建人" align="center" prop="addPeople"  show-overflow-tooltip />
+      <el-table-column label="创建时间" align="center" prop="addTime"  show-overflow-tooltip />
+      <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:admin:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:admin:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <!-- 修改、新增对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body :before-close="cancel" :close-on-click-modal="false">
+      <el-form ref="form" :model="form" :rules="rules" label-width="auto" >
+        <el-row :gutter="20">
+          <el-col :span="12" >
+            <el-form-item label="楼层名称" prop="floorName">
+              <el-input v-model="form.floorName" placeholder="请填写楼层名称" @input="onInput()" maxlength="15" show-word-limit />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="建筑名称" prop="buildId">
+              <el-select
+                v-model="form.buildId"
+                placeholder="请选择建筑名称"
+                clearable
+                size="small"
+              >
+                <el-option
+                  v-for="(dict,index) in buildListData"
+                  :key="index"
+                  :label="dict.name"
+                  :value="dict.id"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="备注" prop="remark">
+              <el-input type="textarea" v-model.trim="form.remark" placeholder="请填写备注" @input="onInput()" rows="4" maxlength="25" show-word-limit/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.current"
+      :limit.sync="queryParams.size"
+      @pagination="getList"
+    />
+  </div>
+</template>
+<script>
+import { addDevopsTeam, delDevopsTeam, updateDevopsTeam, getDevopsTeam } from "@/api/business/MochaITOM/crew";
+export default {
+  name: "Floor",
+  data() {
+    return {
+      exportLoading:false,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 参数表格数据
+      adminList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        current: 1,
+        size: 20,
+        name: undefined,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        buildName: [
+          { required: true, message: "建筑名称不能为空",  trigger: ["blur",'change']  }
+        ],
+        floorName: [
+          { required: true, message: "楼层名称不能为空", trigger: "blur" }
+        ],
+      },
+      //建筑下拉
+      buildListData:[],
+    };
+  },
+  created() {
+    this.getList();//初始化table
+    this.buildList()//初始化建筑下拉
+  },
+  methods: {
+    //强制el-input刷新
+    onInput(){
+        this.$forceUpdate();
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.queryParams = {
+        name:undefined,
+        current:1,
+        size:20
+      }
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 表单重置
+    reset() {
+      this.form = {};
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.current = 1;
+      this.getList();
+    },
+    /** 查询参数列表 */
+    getList() {
+      this.loading = true;
+      getDevopsTeam(this.queryParams).then(response => {
+        this.adminList = response.data.records;
+        this.total = response.data.total;
+        this.loading = false;
+      });
+    },
+
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      this.title = "修改";
+      this.form = JSON.parse(JSON.stringify(row))
+      this.form.buildId = Number(this.form.buildId)
+
+      this.open = true;
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "新增";
+    },
+    /** 提交按钮 */
+    submitForm(row) {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          this.loading = true
+          if (this.form.id != undefined) {
+            updateDevopsTeam(this.form).then(response => {
+              this.loading = false,
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            }).catch(()=>{
+              this.loading = false
+            })
+          } else {
+            addDevopsTeam(this.form).then(response => {
+              this.loading = false,
+              this.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            }).catch(()=>{
+              this.loading = false
+            })
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delDevopsTeam(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(() => {});
+    },
+  }
+};
+</script>

+ 255 - 0
src/views/business/MochaITOM/crew - 副本 (3)/index.vue

@@ -0,0 +1,255 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="90px">
+      <el-form-item label="团队名称:" prop="name">
+        <el-input
+          v-model.trim="queryParams.name"
+          placeholder="请输入团队名称"
+          clearable
+          size="small"
+          style="width: 140px"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="责任人" prop="userName">
+        <el-select v-model="queryParams.userName"   placeholder="请选择责任人" style="width: 140px">
+          <el-option
+            v-for="item in transferTypeList"
+            :key="item.id"
+            :label="item.name"
+            :value="item.id"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:admin:add']"
+        >新增</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-table v-loading="loading" :data="adminList" height="calc(100vh - 28vh)">
+      <el-table-column label="团队名称" align="center" prop="teamName"  show-overflow-tooltip />
+      <el-table-column label="所属单位" align="center" prop="companyName"  show-overflow-tooltip />
+      <el-table-column label="责任人" align="center" prop="userIds.name"  show-overflow-tooltip />
+      <el-table-column label="联系方式" align="center" prop="userIds.id"  show-overflow-tooltip />
+      <el-table-column label="创建人" align="center" prop="addPeople"  show-overflow-tooltip />
+      <el-table-column label="创建时间" align="center" prop="addTime"  show-overflow-tooltip />
+      <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:admin:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:admin:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <!-- 修改、新增对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body :before-close="cancel" :close-on-click-modal="false">
+      <el-form ref="form" :model="form" :rules="rules" label-width="auto" >
+        <el-row :gutter="20">
+          <el-col :span="12" >
+            <el-form-item label="楼层名称" prop="floorName">
+              <el-input v-model="form.floorName" placeholder="请填写楼层名称" @input="onInput()" maxlength="15" show-word-limit />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="建筑名称" prop="buildId">
+              <el-select
+                v-model="form.buildId"
+                placeholder="请选择建筑名称"
+                clearable
+                size="small"
+              >
+                <el-option
+                  v-for="(dict,index) in buildListData"
+                  :key="index"
+                  :label="dict.name"
+                  :value="dict.id"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="备注" prop="remark">
+              <el-input type="textarea" v-model.trim="form.remark" placeholder="请填写备注" @input="onInput()" rows="4" maxlength="25" show-word-limit/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.current"
+      :limit.sync="queryParams.size"
+      @pagination="getList"
+    />
+  </div>
+</template>
+<script>
+import { addDevopsTeam, delDevopsTeam, updateDevopsTeam, getDevopsTeam } from "@/api/business/MochaITOM/crew";
+export default {
+  name: "Floor",
+  data() {
+    return {
+      exportLoading:false,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 参数表格数据
+      adminList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        current: 1,
+        size: 20,
+        name: undefined,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        buildName: [
+          { required: true, message: "建筑名称不能为空",  trigger: ["blur",'change']  }
+        ],
+        floorName: [
+          { required: true, message: "楼层名称不能为空", trigger: "blur" }
+        ],
+      },
+      //建筑下拉
+      buildListData:[],
+    };
+  },
+  created() {
+    this.getList();//初始化table
+    this.buildList()//初始化建筑下拉
+  },
+  methods: {
+    //强制el-input刷新
+    onInput(){
+        this.$forceUpdate();
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.queryParams = {
+        name:undefined,
+        current:1,
+        size:20
+      }
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 表单重置
+    reset() {
+      this.form = {};
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.current = 1;
+      this.getList();
+    },
+    /** 查询参数列表 */
+    getList() {
+      this.loading = true;
+      getDevopsTeam(this.queryParams).then(response => {
+        this.adminList = response.data.records;
+        this.total = response.data.total;
+        this.loading = false;
+      });
+    },
+
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      this.title = "修改";
+      this.form = JSON.parse(JSON.stringify(row))
+      this.form.buildId = Number(this.form.buildId)
+
+      this.open = true;
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "新增";
+    },
+    /** 提交按钮 */
+    submitForm(row) {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          this.loading = true
+          if (this.form.id != undefined) {
+            updateDevopsTeam(this.form).then(response => {
+              this.loading = false,
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            }).catch(()=>{
+              this.loading = false
+            })
+          } else {
+            addDevopsTeam(this.form).then(response => {
+              this.loading = false,
+              this.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            }).catch(()=>{
+              this.loading = false
+            })
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delDevopsTeam(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(() => {});
+    },
+  }
+};
+</script>

+ 255 - 0
src/views/business/MochaITOM/crew - 副本/index.vue

@@ -0,0 +1,255 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="90px">
+      <el-form-item label="团队名称:" prop="name">
+        <el-input
+          v-model.trim="queryParams.name"
+          placeholder="请输入团队名称"
+          clearable
+          size="small"
+          style="width: 140px"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="责任人" prop="userName">
+        <el-select v-model="queryParams.userName"   placeholder="请选择责任人" style="width: 140px">
+          <el-option
+            v-for="item in transferTypeList"
+            :key="item.id"
+            :label="item.name"
+            :value="item.id"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:admin:add']"
+        >新增</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-table v-loading="loading" :data="adminList" height="calc(100vh - 28vh)">
+      <el-table-column label="团队名称" align="center" prop="teamName"  show-overflow-tooltip />
+      <el-table-column label="所属单位" align="center" prop="companyName"  show-overflow-tooltip />
+      <el-table-column label="责任人" align="center" prop="userIds.name"  show-overflow-tooltip />
+      <el-table-column label="联系方式" align="center" prop="userIds.id"  show-overflow-tooltip />
+      <el-table-column label="创建人" align="center" prop="addPeople"  show-overflow-tooltip />
+      <el-table-column label="创建时间" align="center" prop="addTime"  show-overflow-tooltip />
+      <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:admin:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:admin:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <!-- 修改、新增对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body :before-close="cancel" :close-on-click-modal="false">
+      <el-form ref="form" :model="form" :rules="rules" label-width="auto" >
+        <el-row :gutter="20">
+          <el-col :span="12" >
+            <el-form-item label="楼层名称" prop="floorName">
+              <el-input v-model="form.floorName" placeholder="请填写楼层名称" @input="onInput()" maxlength="15" show-word-limit />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="建筑名称" prop="buildId">
+              <el-select
+                v-model="form.buildId"
+                placeholder="请选择建筑名称"
+                clearable
+                size="small"
+              >
+                <el-option
+                  v-for="(dict,index) in buildListData"
+                  :key="index"
+                  :label="dict.name"
+                  :value="dict.id"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="备注" prop="remark">
+              <el-input type="textarea" v-model.trim="form.remark" placeholder="请填写备注" @input="onInput()" rows="4" maxlength="25" show-word-limit/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.current"
+      :limit.sync="queryParams.size"
+      @pagination="getList"
+    />
+  </div>
+</template>
+<script>
+import { addDevopsTeam, delDevopsTeam, updateDevopsTeam, getDevopsTeam } from "@/api/business/MochaITOM/crew";
+export default {
+  name: "Floor",
+  data() {
+    return {
+      exportLoading:false,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 参数表格数据
+      adminList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        current: 1,
+        size: 20,
+        name: undefined,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        buildName: [
+          { required: true, message: "建筑名称不能为空",  trigger: ["blur",'change']  }
+        ],
+        floorName: [
+          { required: true, message: "楼层名称不能为空", trigger: "blur" }
+        ],
+      },
+      //建筑下拉
+      buildListData:[],
+    };
+  },
+  created() {
+    this.getList();//初始化table
+    this.buildList()//初始化建筑下拉
+  },
+  methods: {
+    //强制el-input刷新
+    onInput(){
+        this.$forceUpdate();
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.queryParams = {
+        name:undefined,
+        current:1,
+        size:20
+      }
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 表单重置
+    reset() {
+      this.form = {};
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.current = 1;
+      this.getList();
+    },
+    /** 查询参数列表 */
+    getList() {
+      this.loading = true;
+      getDevopsTeam(this.queryParams).then(response => {
+        this.adminList = response.data.records;
+        this.total = response.data.total;
+        this.loading = false;
+      });
+    },
+
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      this.title = "修改";
+      this.form = JSON.parse(JSON.stringify(row))
+      this.form.buildId = Number(this.form.buildId)
+
+      this.open = true;
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "新增";
+    },
+    /** 提交按钮 */
+    submitForm(row) {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          this.loading = true
+          if (this.form.id != undefined) {
+            updateDevopsTeam(this.form).then(response => {
+              this.loading = false,
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            }).catch(()=>{
+              this.loading = false
+            })
+          } else {
+            addDevopsTeam(this.form).then(response => {
+              this.loading = false,
+              this.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            }).catch(()=>{
+              this.loading = false
+            })
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delDevopsTeam(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(() => {});
+    },
+  }
+};
+</script>

+ 255 - 0
src/views/business/MochaITOM/crew/index.vue

@@ -0,0 +1,255 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="90px">
+      <el-form-item label="团队名称:" prop="name">
+        <el-input
+          v-model.trim="queryParams.name"
+          placeholder="请输入团队名称"
+          clearable
+          size="small"
+          style="width: 140px"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="责任人" prop="userName">
+        <el-select v-model="queryParams.userName"   placeholder="请选择责任人" style="width: 140px">
+          <el-option
+            v-for="item in transferTypeList"
+            :key="item.id"
+            :label="item.name"
+            :value="item.id"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:admin:add']"
+        >新增</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-table v-loading="loading" :data="adminList" height="calc(100vh - 28vh)">
+      <el-table-column label="团队名称" align="center" prop="teamName"  show-overflow-tooltip />
+      <el-table-column label="所属单位" align="center" prop="companyName"  show-overflow-tooltip />
+      <el-table-column label="责任人" align="center" prop="userIds.name"  show-overflow-tooltip />
+      <el-table-column label="联系方式" align="center" prop="userIds.id"  show-overflow-tooltip />
+      <el-table-column label="创建人" align="center" prop="addPeople"  show-overflow-tooltip />
+      <el-table-column label="创建时间" align="center" prop="addTime"  show-overflow-tooltip />
+      <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:admin:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:admin:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <!-- 修改、新增对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body :before-close="cancel" :close-on-click-modal="false">
+      <el-form ref="form" :model="form" :rules="rules" label-width="auto" >
+        <el-row :gutter="20">
+          <el-col :span="12" >
+            <el-form-item label="楼层名称" prop="floorName">
+              <el-input v-model="form.floorName" placeholder="请填写楼层名称" @input="onInput()" maxlength="15" show-word-limit />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="建筑名称" prop="buildId">
+              <el-select
+                v-model="form.buildId"
+                placeholder="请选择建筑名称"
+                clearable
+                size="small"
+              >
+                <el-option
+                  v-for="(dict,index) in buildListData"
+                  :key="index"
+                  :label="dict.name"
+                  :value="dict.id"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="备注" prop="remark">
+              <el-input type="textarea" v-model.trim="form.remark" placeholder="请填写备注" @input="onInput()" rows="4" maxlength="25" show-word-limit/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.current"
+      :limit.sync="queryParams.size"
+      @pagination="getList"
+    />
+  </div>
+</template>
+<script>
+import { addDevopsTeam, delDevopsTeam, updateDevopsTeam, getDevopsTeam } from "@/api/business/MochaITOM/crew";
+export default {
+  name: "Floor",
+  data() {
+    return {
+      exportLoading:false,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 参数表格数据
+      adminList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        current: 1,
+        size: 20,
+        name: undefined,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        buildName: [
+          { required: true, message: "建筑名称不能为空",  trigger: ["blur",'change']  }
+        ],
+        floorName: [
+          { required: true, message: "楼层名称不能为空", trigger: "blur" }
+        ],
+      },
+      //建筑下拉
+      buildListData:[],
+    };
+  },
+  created() {
+    this.getList();//初始化table
+    this.buildList()//初始化建筑下拉
+  },
+  methods: {
+    //强制el-input刷新
+    onInput(){
+        this.$forceUpdate();
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.queryParams = {
+        name:undefined,
+        current:1,
+        size:20
+      }
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 表单重置
+    reset() {
+      this.form = {};
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.current = 1;
+      this.getList();
+    },
+    /** 查询参数列表 */
+    getList() {
+      this.loading = true;
+      getDevopsTeam(this.queryParams).then(response => {
+        this.adminList = response.data.records;
+        this.total = response.data.total;
+        this.loading = false;
+      });
+    },
+
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      this.title = "修改";
+      this.form = JSON.parse(JSON.stringify(row))
+      this.form.buildId = Number(this.form.buildId)
+
+      this.open = true;
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "新增";
+    },
+    /** 提交按钮 */
+    submitForm(row) {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          this.loading = true
+          if (this.form.id != undefined) {
+            updateDevopsTeam(this.form).then(response => {
+              this.loading = false,
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            }).catch(()=>{
+              this.loading = false
+            })
+          } else {
+            addDevopsTeam(this.form).then(response => {
+              this.loading = false,
+              this.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            }).catch(()=>{
+              this.loading = false
+            })
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delDevopsTeam(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(() => {});
+    },
+  }
+};
+</script>

+ 417 - 0
src/views/business/OM/MochaITOM/crew/index.vue

@@ -0,0 +1,417 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="90px">
+      <el-form-item label="团队名称:" prop="name">
+        <el-input
+          v-model.trim="queryParams.name"
+          placeholder="请输入团队名称"
+          clearable
+          size="small"
+          style="width: 140px"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="责任人" prop="userName">
+        <el-select v-model="queryParams.userName"   placeholder="请选择责任人" style="width: 140px">
+          <el-option
+            v-for="item in zrr"
+            :key="item.name"
+            :label="item.name"
+            :value="item.name"
+            clearable
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:admin:add']"
+        >新增</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-table v-loading="loading" :data="adminList" height="calc(100vh - 28vh)">
+      <el-table-column label="团队名称" align="center" prop="teamName"  show-overflow-tooltip />
+      <el-table-column label="所属单位" align="center" prop="companyName"  show-overflow-tooltip />
+      <el-table-column label="责任人" align="center" prop="dutyName"  show-overflow-tooltip />
+      <el-table-column label="联系方式" align="center" prop="dutyPhone"  show-overflow-tooltip />
+      <el-table-column label="创建时间" align="center" prop="addTime"  show-overflow-tooltip />
+      <el-table-column label="创建人" align="center" prop="addPeople"  show-overflow-tooltip />
+      <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:admin:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:admin:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <!-- 修改、新增对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body :before-close="cancel" :close-on-click-modal="false">
+      <el-form ref="form" :model="form" :rules="rules" label-width="auto" >
+        <el-row :gutter="20">
+          <el-col :span="12" >
+            <el-form-item label="团队名称" prop="teamName">
+              <el-input v-model="form.teamName" style="width: 160px" placeholder="请填写团队名称" @input="onInput()" maxlength="15" show-word-limit />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="单位名称" prop="companyCode">
+                  <el-select
+                    v-model="form.companyCode"
+                    placeholder="请选择单位名称"
+                    clearable
+                    size="small"
+                    style="width: 160px"
+                  >
+                    <el-option
+                      v-for="dict in companyList"
+                      :key="dict.dictValue"
+                      :label="dict.dictLabel"
+                      :value="dict.dictValue"
+                    />
+                  </el-select>
+                </el-form-item>
+          </el-col>
+          <div class="btn" style="text-align: left;margin:0 auto 30px;">
+            <el-button type="primary" icon="el-icon-plus" size="mini" @click="addItem">新增人员</el-button>
+          </div>
+          <el-table :data="list" border  style=" 100%;" stripe height="260" :rules="rules2" >
+            <el-table-column label="序号" width="80px" align='center'>
+              <template slot-scope="scope">
+                <span>{{ scope.$index +1 }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column prop="switch" label="负任人" align='center'>
+              <template slot-scope="scope">
+                <el-switch
+                  v-model="scope.row.switch"
+                  active-color="#13ce66"
+                  inactive-color="#ff4949"
+                  @change="handleStatusChange(scope.row,scope.$index)"
+                ></el-switch>
+              </template>
+            </el-table-column>
+            <el-table-column prop="name" label="姓名" align='center'>
+              <template slot-scope="scope">
+                <span v-if="!scope.row.isEgdit">{{scope.row.name}}</span>
+                <el-input v-if="scope.row.isEgdit" v-model="scope.row.name"></el-input>
+              </template>
+            </el-table-column>
+             <el-table-column prop="phone" label="手机号" align='center'>
+              <template slot-scope="scope">
+                <span v-if="!scope.row.isEgdit">{{scope.row.phone}}</span>
+                <el-input v-if="scope.row.isEgdit" v-model="scope.row.phone"  maxlength="11" oninput="value=value.replace(/^1[3|4|5|6|7|8|9][0-9]\d{8}$/,'')"></el-input>
+              </template>
+            </el-table-column>
+            <el-table-column fixed="right" label="操作" align='center' >
+              <template slot-scope="scope">
+                <el-button v-if="!scope.row.isEgdit" type="primary" size="small" @click='edit(scope.$index,scope.row)' icon="el-icon-edit" circle></el-button>
+                <el-button v-if="scope.row.isEgdit" type="success" size="small" @click='editSuccess(scope.$index,scope.row)' icon="el-icon-check" circle></el-button>
+                <el-button @click.native.prevent="deleteItem(scope.$index, list)" type="danger" size="small" icon="el-icon-delete" circle></el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.current"
+      :limit.sync="queryParams.size"
+      @pagination="getList"
+    />
+    <a href="" download="" id="xz" style="position: absolute;z-index: -1;opacity: 0;"></a>
+  </div>
+</template>
+<script>
+import { BASEPATH } from "@/assets/js/common.js";
+import { listChannel } from "@/api/system/product";
+import { addDevopsTeam, delDevopsTeam, updateDevopsTeam, getDevopsTeam, getTD } from "@/api/business/OM/MochaITOM/crew";
+export default {
+  name: "Floor",
+  data() {
+    return {
+      exportLoading:false,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 参数表格数据
+      adminList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        current: 1,
+        size: 20,
+        name: undefined,
+        userName:undefined
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        teamName: [
+          { required: true, message: "团队名称不能为空",  trigger: "blur"  }
+        ],
+        companyCode: [
+          { required: true, message: "单位名称不能为空",  trigger: ["blur",'change']}
+        ],
+      },
+      rules2: {
+        
+        name: [
+          { required: true, message: "姓名不能为空",  trigger: "blur"  }
+        ],
+        phone: [
+          { required: true, message: "手机号不能为空",  trigger: "blur"  },
+          {
+            pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
+            message: "请输入正确的手机号码",
+            trigger: "blur"
+          }
+        ],
+
+      },
+      // 公司列表
+      companyList: [],
+      list: [
+        {
+        name:undefined,
+        phone:undefined,
+        switch:false,
+        label:false,
+        userId:1,
+        },
+      ],
+      //责任人
+      zrr:[]
+    };
+  },
+  created() {
+    this.getList();//初始化table
+  },
+  methods: {
+    //新增数据
+    addItem() {
+      let item = {
+        name:undefined,
+        phone:undefined,
+        switch:false,
+        label:false,
+        userId:1,
+      }
+      this.list.push(item)
+    },
+    //删除数据
+    deleteItem(index, list) {
+      list.splice(index, 1);
+    },
+    //编辑数据
+    edit(index, row) {
+      this.$set(row, 'isEgdit', true)
+    },
+    //编辑成功
+    editSuccess(index, row) {
+      this.$set(row, 'isEgdit', false)
+    },
+    handleStatusChange(row,index){
+      if(row.switch === true){
+        row.label = 2
+      }else{
+        row.label = 1
+      }
+      for(let i = 0;i<this.list.length;i++){
+        if(i != index){
+          this.list[i].label = 1
+          this.list[i].switch = 1
+        } 
+      }
+    },
+    //强制el-input刷新
+    onInput(){
+        this.$forceUpdate();
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    //手机号验证
+    testPhone(str) {
+      const reg = /^1[3|4|5|7|8|6|9][0-9]\d{8}$/;
+      return reg.test(str);
+    },
+    vaildPhone(value) {
+      if (!this.testPhone(value)) {
+        this.msgError("请输入正确的手机号码");
+      }
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.queryParams = {
+        name:undefined,
+        current:1,
+        size:20
+      }
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 表单重置
+    reset() {
+      this.form = {};
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.current = 1;
+      this.getList();
+    },
+    /** 查询参数列表 */
+    getList() {
+      this.loading = true;
+      getDevopsTeam(this.queryParams).then(response => {
+        if(response.data.records.length>0){
+          this.adminList = response.data.records;
+          for(let i=0;i<this.adminList.length;i++){
+            this.zrr[i] = {}
+            this.zrr[i].name = this.adminList[i].dutyName
+          }
+          this.total = response.data.total;
+          this.loading = false;
+        }else{
+          this.adminList = []
+          this.total = response.data.total;
+          this.loading = false;
+        }
+        
+      });
+      /* 公司列表 */
+      listChannel(this.queryParams).then(response => {
+        if(response.data.records.length>0){
+          this.companyList = response.data.records.map(val =>{
+            return {
+              dictValue:val.ownerId,
+              dictLabel:val.ownerName,
+              address:val.ownerAddress,
+            }
+          })
+        }
+      });
+    },
+
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      this.title = "修改";
+      this.form = JSON.parse(JSON.stringify(row))
+      this.list = this.form.userIds
+      getTD({teamId:this.form.id}).then(res =>{
+        let arr = res.data
+        for(let i = 0;i<arr.length;i++){
+          if(arr[i].label == "1"){
+            arr[i].switch = false
+          }else{
+            arr[i].switch = true
+          }
+        }
+        this.list = arr
+        this.open = true;
+      })
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "新增";
+      this.list = []
+    },
+    /** 提交按钮 */
+    submitForm(row) {
+      this.form.userIds = []
+      this.form.userIds = this.list
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          let arr = this.form.userIds
+          if(arr.length>0){
+            for(let i = 0;i<arr.length;i++){
+              if(!arr[i].name){
+                this.msgError("姓名不能为空");
+                return
+              }
+              if(!arr[i].phone){
+                this.msgError("电话不能为空");
+                return
+              }
+              // if(arr[i].phone ){
+              //   this.msgError("电话不能为空");
+              //   return
+              // }
+            }
+          }
+          this.loading = true
+          if (this.form.id != undefined) {
+            updateDevopsTeam(this.form).then(response => {
+              this.loading = false,
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            }).catch(()=>{
+              this.loading = false
+            })
+          } else {
+            addDevopsTeam(this.form).then(response => {
+              this.loading = false,
+              this.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            }).catch(()=>{
+              this.loading = false
+            })
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delDevopsTeam(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(() => {});
+    },
+  }
+};
+</script>

+ 509 - 0
src/views/business/OM/MochaITOM/plan/index.vue

@@ -0,0 +1,509 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="90px">
+      <el-form-item label="计划名称:" prop="name">
+        <el-input
+          v-model.trim="queryParams.name"
+          placeholder="请输入计划名称"
+          clearable
+          size="small"
+          style="width: 140px"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:admin:add']"
+        >新增</el-button>
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          :loading="exportLoading"
+          @click="handleExport"
+          v-hasPermi="['system:admin:export']"
+        >导出</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-table v-loading="loading" :data="adminList" height="calc(100vh - 28vh)">
+      <el-table-column label="计划名称" align="center" prop="planName"  show-overflow-tooltip />
+      <el-table-column label="周期" align="center" prop="cycle"  show-overflow-tooltip />
+      <el-table-column label="执行开始时间" align="center" prop="startInspectTime"  show-overflow-tooltip />
+      <el-table-column label="执行结束时间" align="center" prop="endInspectTime"  show-overflow-tooltip />
+      <el-table-column label="执行团队" align="center" prop="teamName"  show-overflow-tooltip />
+      <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:admin:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:admin:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <!-- 修改、新增对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body :before-close="cancel" :close-on-click-modal="false">
+      <el-form ref="form" :model="form" :rules="rules" label-width="auto" >
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="计划名称" prop="planName">
+              <el-input v-model="form.planName" placeholder="请填写计划名称" @input="onInput()" maxlength="15" show-word-limit />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="执行团队" prop="teamId">
+              <el-select
+                v-model="form.teamId"
+                placeholder="请选择执行团队"
+                clearable
+                size="small"
+                style="width: 160px"
+              >
+                <el-option
+                  v-for="dict in teamList"
+                  :key="dict.id"
+                  :label="dict.teamName"
+                  :value="dict.id"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="单位名称" prop="companyCode">
+                  <el-select
+                    v-model="form.companyCode"
+                    placeholder="请选择单位名称"
+                    clearable
+                    size="small"
+                    style="width: 160px"
+                  >
+                    <el-option
+                      v-for="dict in companyList"
+                      :key="dict.dictValue"
+                      :label="dict.dictLabel"
+                      :value="dict.dictValue"
+                    />
+                  </el-select>
+                </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="周期" prop="cycle">
+              <el-select
+                v-model="form.cycle"
+                placeholder="请选择周期"
+                clearable
+                size="small"
+                style="width: 160px"
+              >
+                <el-option
+                  v-for="dict in cycleList"
+                  :key="dict.dictValue"
+                  :label="dict.dictLabel"
+                  :value="dict.dictValue"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="计划开始时间" prop="startDate">
+              <el-date-picker
+                v-model="form.startDate"
+                type="date"
+                style="width:160px"
+                placeholder="选择日期">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="计划结束时间" prop="endDate">
+              <el-date-picker
+                v-model="form.endDate"
+                type="date"
+                style="width:160px"
+                placeholder="选择日期">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="执行开始时间" prop="startInspectTime">
+              <el-select
+                v-model="form.startInspectTime"
+                placeholder="请选择开始时间"
+                clearable
+                size="small"
+                style="width: 160px"
+              >
+                <el-option
+                  v-for="dict in inspectTimeList"
+                  :key="dict.dictValue"
+                  :label="dict.dictValue"
+                  :value="dict.dictValue"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="执行结束时间" prop="endInspectTime">
+              <el-select
+                v-model="form.endInspectTime"
+                placeholder="请选择执行结束时间"
+                clearable
+                size="small"
+                style="width: 160px"
+              >
+                <el-option
+                  v-for="dict in inspectTimeList"
+                  :key="dict.dictValue"
+                  :label="dict.dictValue"
+                  :value="dict.dictValue"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          
+          <el-col style="font-size:16px;font-weight:700;margin:10px 0 20px;">巡更路线</el-col>
+          <el-table v-loading="loading2" :data="adminList2" height="200"   @select="dialogCheck" ref="dataTable">
+            <el-table-column type="selection" />
+            <el-table-column label="线路名称" align="center" prop="name"  show-overflow-tooltip />
+            <el-table-column label="创建时间" align="center" prop="createTime"  show-overflow-tooltip />
+          </el-table>
+          <pagination
+            v-show="total2>0"
+            :total="total2"
+            :page.sync="queryParams2.current"
+            :limit.sync="queryParams2.size"
+            @pagination="getList2"
+          />
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.current"
+      :limit.sync="queryParams.size"
+      @pagination="getList"
+    />
+    <a href="" download="" id="xz" style="position: absolute;z-index: -1;opacity: 0;"></a>
+  </div>
+</template>
+<script>
+import { BASEPATH } from "@/assets/js/common.js";
+import { listChannel } from "@/api/system/product";
+import { timestampToTime, getTimeFormat,YearMonthDate } from "@/assets/js/dataFormate.js";
+import { getPlanPath } from "@/api/business/OM/MochaITOM/route";
+import { addMaintianPlan, delMaintianPlan, updateMaintianPlan, getMaintianPlan, exportMaintianPlan } from "@/api/business/OM/MochaITOM/plan";
+import { getDevopsTeam } from "@/api/business/OM/MochaITOM/crew";
+export default {
+  name: "Floor",
+  data() {
+    return {
+      loading:true,
+      loading2:true,
+      exportLoading:false,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 总条数
+      total2: 0,
+      // 参数表格数据
+      adminList: [],
+      adminList2:[],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        current: 1,
+        size: 20,
+        name: undefined,
+      },
+      // 查询参数
+      queryParams2: {
+        current: 1,
+        size: 20,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        planName: [
+          { required: true, message: "任务名称不能为空",  trigger: "blur"  }
+        ],
+        teamId: [
+          { required: true, message: "团队名称不能为空",  trigger: "blur"  }
+        ],
+        companyCode: [
+          { required: true, message: "单位名称不能为空",  trigger: ["blur",'change']}
+        ],
+        cycle: [
+          { required: true, message: "周期不能为空",  trigger: ["blur",'change']}
+        ],
+        startDate: [
+          { required: true, message: "维保开始时间不能为空",  trigger: ["blur",'change']}
+        ],
+        endDate: [
+          { required: true, message: "维保结束时间不能为空",  trigger: ["blur",'change']}
+        ],
+        startInspectTime: [
+          { required: true, message: "执行开始时间称不能为空",  trigger: ["blur",'change']}
+        ],
+        endInspectTime: [
+          { required: true, message: "执行结束时间称不能为空",  trigger: ["blur",'change']}
+        ],
+      },
+      // 公司列表
+      companyList: [],
+      zrr:[],
+      cycleList:[
+        {dictValue:"周一",dictValue:"周一"},
+        {dictValue:"周二",dictValue:"周二"},
+        {dictValue:"周三",dictValue:"周三"},
+        {dictValue:"周四",dictValue:"周四"},
+        {dictValue:"周五",dictValue:"周五"},
+        {dictValue:"周六",dictValue:"周六"},
+        {dictValue:"周日",dictValue:"周日"},
+      ],
+      inspectTimeList:[],
+
+      dateRange:[],
+      teamList:[],
+      selectioned:'',//单选中的值
+    };
+  },
+  created() {
+    this.getList();//初始化table
+    this.zxtime()//执行时间
+  },
+  methods: {
+    
+   
+    //强制el-input刷新
+    onInput(){
+        this.$forceUpdate();
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.queryParams = {
+        name:undefined,
+        current:1,
+        size:20
+      }
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 表单重置
+    reset() {
+      this.form = {};
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.current = 1;
+      this.getList();
+    },
+    /** 执行时间 */
+    zxtime(){
+      let arr = []
+      for(let i = 0; i<48;i++){
+        arr[i] = {}
+        if(i%2 == "NaN"){
+          arr[i].dictValue="00:00:00"
+        }
+        if(i%2 == "0"){
+          if(i/2>=10){
+            arr[i].dictValue= i/2 + ":00:00"
+          }else{
+            arr[i].dictValue="0" + i/2 + ":00:00"
+          }
+        }
+        if(i%2 == "1"){
+          if(i/2>=10){
+            arr[i].dictValue=(i-1)/2 + ":30:00"
+          }else{
+            arr[i].dictValue="0" + (i-1)/2 + ":30:00"
+          }
+        }
+      }
+      this.inspectTimeList = arr
+    },
+    /** 查询参数列表 */
+    getList() {
+      this.loading = true;
+      getMaintianPlan(this.queryParams).then(response => {
+        this.adminList = response.data.records;
+        this.total = response.data.total;
+        this.loading = false;
+      });
+      /* 公司列表 */
+      listChannel(this.queryParams).then(response => {
+        if(response.data.records.length>0){
+          this.companyList = response.data.records.map(val =>{
+            return {
+              dictValue:val.ownerId,
+              dictLabel:val.ownerName,
+              address:val.ownerAddress,
+            }
+          })
+        }
+      });
+      getDevopsTeam(this.queryParams).then(response => {
+        if(response.data.records.length>0){
+          this.teamList = response.data.records;
+        }
+      })
+    },
+    getList2(row){
+        this.adminList2 = []
+        getPlanPath(this.queryParams2).then(response => {
+            this.adminList2 = response.data.records;
+            if(row){
+                let list = []
+                for(let i = 0; i<this.adminList2.length;i++){
+                    if(row.planPathId == this.adminList2[i].id){
+                        list.push(this.adminList2[i])
+                    }
+                }
+                setTimeout(() => {
+                    var that = this;
+                    that.$nextTick(() => {
+                        if(list){
+                            list.forEach((row) => {
+                                that.$refs.dataTable.toggleRowSelection(row, true)
+                            })
+                        }
+                    })
+                    this.total2 = response.data.total;
+                    this.loading2 = false;
+                })
+            }else{
+                this.total2 = response.data.total;
+                this.loading2 = false;
+            }
+        });
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      this.title = "修改";
+      this.form = JSON.parse(JSON.stringify(row))
+      this.getList2(row)
+      this.open = true;
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.getList2()
+      this.open = true;
+      this.title = "新增";
+      this.list = []
+    },
+    /** 提交按钮 */
+    submitForm(row) {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          this.form.endDate = timestampToTime(this.form.endDate)
+          this.form.startDate = timestampToTime(this.form.startDate)
+          let start = YearMonthDate().split(" ")[0] + " " + this.form.startInspectTime
+          let end = YearMonthDate().split(" ")[0] + " " + this.form.endInspectTime
+          if(getTimeFormat(this.form.endDate) < getTimeFormat(this.form.startDate)){
+            this.msgError("计划结束时间不能小于计划开始时间");
+            return
+          }
+          if(getTimeFormat(end) < getTimeFormat(start)){
+            this.msgError("执行结束时间不能小于执行开始时间");
+            return
+          }
+          this.loading = true
+          if (this.form.id != undefined) {
+            updateMaintianPlan(this.form).then(response => {
+              this.loading = false,
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            }).catch(()=>{
+              this.loading = false
+            })
+          } else {
+            addMaintianPlan(this.form).then(response => {
+              this.loading = false,
+              this.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            }).catch(()=>{
+              this.loading = false
+            })
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delMaintianPlan(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(() => {});
+    },
+    /** table */
+    dialogCheck(selection, row){
+      this.$refs.dataTable.clearSelection()
+        if (selection.length === 0) { // 判断selection是否有值存在
+            return
+        }
+        if (row) {
+            this.selectioned = row
+            this.$refs.dataTable.toggleRowSelection(row, true)
+            this.form.planPathId = row.id
+            this.form.planPathName = row.name
+        }
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      exportMaintianPlan(this.queryParams).then(response =>{
+        this.exportLoading = false;
+        document.getElementById("xz").href = BASEPATH() + response.data
+        document.getElementById("xz").download = response.data
+        document.getElementById("xz").click()
+      })
+    }
+  }
+};
+</script>

+ 430 - 0
src/views/business/OM/MochaITOM/point/index.vue

@@ -0,0 +1,430 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="90px">
+      <el-form-item label="点位名称:" prop="name">
+        <el-input
+          v-model.trim="queryParams.name"
+          placeholder="请输入点位名称"
+          clearable
+          size="small"
+          style="width: 140px"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="点位地址:" prop="address">
+        <el-input
+          v-model.trim="queryParams.address"
+          placeholder="请输入点位地址"
+          clearable
+          size="small"
+          style="width: 140px"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:admin:add']"
+        >新增</el-button>
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          :loading="exportLoading"
+          @click="handleExport"
+          v-hasPermi="['system:admin:export']"
+        >导出</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-table v-loading="loading" :data="adminList" height="calc(100vh - 28vh)">
+      <el-table-column label="点位名称" align="center" prop="spotName"  show-overflow-tooltip />
+      <el-table-column label="所属单位" align="center" prop="companyName"  show-overflow-tooltip />
+      <el-table-column label="点位地址" align="center" prop="spotAddress"  show-overflow-tooltip />
+      <!-- <el-table-column label="设备类型" align="center" prop="phone"  show-overflow-tooltip /> -->
+      <el-table-column label="点位标签" align="center" prop="spotLabelRoute"  show-overflow-tooltip >
+        <template slot-scope="scope">
+          <el-image
+            v-if="scope.row.spotLabelRoute"
+            style="width: 24px; height: 24px"
+            :preview-src-list="['https://smartpark.caih.com/dmapi/archive/' + scope.row.spotLabelRoute]"
+            :src="'https://smartpark.caih.com/dmapi/archive/' + scope.row.spotLabelRoute">
+          </el-image>
+      </template>
+      </el-table-column>
+      <el-table-column label="点位图片" align="center" prop="pictureRoute"  show-overflow-tooltip >
+        <template slot-scope="scope">
+          <el-image
+            v-if="scope.row.pictureRoute"
+            style="width: 24px; height: 24px"
+            :preview-src-list="['https://smartpark.caih.com/dmapi/archive/' + scope.row.pictureRoute]"
+            :src="'https://smartpark.caih.com/dmapi/archive/' + scope.row.pictureRoute">
+          </el-image>
+      </template>
+      </el-table-column>
+      <el-table-column label="备注" align="center" prop="remarks"  show-overflow-tooltip />
+      <el-table-column label="最新更新时间" align="center" prop="latestChangeTime"  show-overflow-tooltip />
+      <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:admin:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:admin:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <!-- 修改、新增对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body :before-close="cancel" :close-on-click-modal="false">
+      <el-form ref="form" :model="form" :rules="rules" label-width="auto" >
+        <el-row :gutter="20">
+          <el-col :span="12" >
+            <el-form-item label="点位名称" prop="spotName">
+              <el-input v-model="form.spotName" placeholder="请填写点位名称" @input="onInput()" maxlength="15" show-word-limit />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="单位名称" prop="companyCode">
+                  <el-select
+                    v-model="form.companyCode"
+                    placeholder="请选择单位名称"
+                    clearable
+                    size="small"
+                    style="width: 160px"
+                  >
+                    <el-option
+                      v-for="dict in companyList"
+                      :key="dict.dictValue"
+                      :label="dict.dictLabel"
+                      :value="dict.dictValue"
+                    />
+                  </el-select>
+                </el-form-item>
+          </el-col>
+          <el-col :span="12" >
+            <el-form-item label="点位地址" prop="spotAddress">
+              <el-input v-model="form.spotAddress" placeholder="请填写点位地址" @input="onInput()" maxlength="15" show-word-limit />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12" >
+            <el-form-item label="设备编号" prop="data1">
+              <el-input v-model="form.data1" placeholder="请填写设备编号" @input="onInput()" maxlength="30" show-word-limit />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12" >
+            <el-form-item label="备注" prop="remarks">
+              <el-input v-model="form.remarks" placeholder="请填写备注" @input="onInput()" maxlength="30" show-word-limit />
+            </el-form-item>
+          </el-col>
+          
+          <!-- <el-col :span="12">
+            <el-form-item label="设备类型" prop="dwtype">
+              <el-select v-model="form.dwtype"   placeholder="请选择设备类型">
+                <el-option
+                  v-for="item in dwtypeList"
+                  :key="item.id"
+                  :label="item.name"
+                  :value="item.id"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col> -->
+          <el-col :span="12">
+            <el-form-item label="点位文件上传" prop="pictureRoute">
+                <el-upload
+                  class="upload-demo"
+                  action="#"
+                  accept=".jpeg,.png,.jpg,.gif,.PNG,.JPG,.JPEG,.GIF"
+                  :limit = 1
+                  :on-change="handleChange"
+                  :file-list="fileList"
+                  >
+                  <el-button size="small" type="primary">点击上传</el-button>
+                </el-upload>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.current"
+      :limit.sync="queryParams.size"
+      @pagination="getList"
+    />
+    <div class="qrcode" ref="qrCodeUrl" style="position: absolute;z-index: -1;opacity: 0;"></div>
+    <a href="" download="" id="xz" style="position: absolute;z-index: -1;opacity: 0;"></a>
+  </div>
+</template>
+<script>
+import QRCode from 'qrcodejs2'
+import { BASEPATH } from "@/assets/js/common.js";
+import { listChannel } from "@/api/system/product";
+import { getDeviceType } from "@/api/business/deviceMange";
+import { fileUpload } from "@/api/business/uploadfile.js";
+import { getPlanPath } from "@/api/business/OM/MochaITOM/route";
+import { addInspectionPoint, delInspectionPoint, updateInspectionPoint, getInspectionPoint, exportInspectionPoint } from "@/api/business/OM/MochaITOM/point";
+import { YearMonthDateSFN } from "@/assets/js/dataFormate.js";
+export default {
+  name: "Floor",
+  data() {
+    return {
+      exportLoading:false,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 参数表格数据
+      adminList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        current: 1,
+        size: 20,
+        name: undefined,
+        address:undefined
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        spotName: [
+          { required: true, message: "点位名称不能为空",  trigger: "blur"  }
+        ],
+        spotAddress: [
+          { required: true, message: "点位地址不能为空",  trigger: "blur"  }
+        ],
+        data1: [
+          { required: true, message: "设备编号不能为空",  trigger: "blur"  }
+        ],
+        
+        companyCode: [
+          { required: true, message: "单位名称不能为空",  trigger: ["blur",'change']}
+        ],
+        dwtype: [
+          { required: true, message: "涉设备类型不能为空",  trigger: ["blur",'change']}
+        ],
+        pictureRoute: [
+          { required: true, message: "文件不能为空", trigger: ["blur",'change'] }
+        ],
+      },
+      // 公司列表
+      companyList: [],
+      //责任人
+      zrr:[],
+      dwtypeList:[],
+      num:0,
+      fileList:[],
+      base64:undefined,//二维码
+    };
+  },
+  created() {
+    this.getList();//初始化table
+  },
+  methods: {
+    creatQrCode(text) {//二维码
+      var qrcode = new QRCode(this.$refs.qrCodeUrl, {
+          text: "点位编号:" + text, // 需要转换为二维码的内容
+          width: 250,
+          height: 250,
+          colorDark: '#000000',
+          colorLight: '#ffffff',
+          correctLevel: QRCode.CorrectLevel.H
+      })
+      setTimeout(()=>{
+        this.base64 = window.atob(document.getElementsByClassName("qrcode")[0].getElementsByTagName("img")[0].src.split(',')[1]);
+        this.handleChangeEWM(this.base64)
+      },100)
+    },
+    handleChangeEWM(bytes){ //二维码上传
+      var array = [];
+      for(var i = 0; i < bytes.length; i++){
+          array.push(bytes.charCodeAt(i));
+      }
+      var blob = new Blob([new Uint8Array(array)], {type: 'image/jpeg'});
+      var formData = new FormData();
+      formData.append('file',blob, Date.now() + '.jpg');
+      formData.append('multipart',blob, Date.now() + '.jpg');
+      fileUpload(formData).then(response => {
+        this.form.spotLabelRoute = response.data
+        this.addData()
+      });
+    },
+    handleChange(param){//点位图片上传
+      this.num++
+      if(this.num>1){
+        this.num = 0
+        return false
+      }else{
+        const formData = new FormData();
+        formData.append('file', param.raw)
+        formData.append('multipart', param.raw)
+        fileUpload(formData).then(response => {
+          this.msgSuccess("上传成功");
+          this.form.pictureRoute = response.data
+        });
+      }
+    },
+    //强制el-input刷新
+    onInput(){
+        this.$forceUpdate();
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.queryParams = {
+        name:undefined,
+        current:1,
+        size:20
+      }
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 表单重置
+    reset() {
+      this.form = {};
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.current = 1;
+      this.getList();
+    },
+    /** 查询参数列表 */
+    getList() {
+      this.loading = true;
+      getInspectionPoint(this.queryParams).then(response => {
+        this.adminList = response.data.records;
+        this.total = response.data.total;
+        this.loading = false;
+      });
+      /* 公司列表 */
+      listChannel(this.queryParams).then(response => {
+        if(response.data.records.length>0){
+          this.companyList = response.data.records.map(val =>{
+            return {
+              dictValue:val.ownerId,
+              dictLabel:val.ownerName,
+              address:val.ownerAddress,
+            }
+          })
+        }
+      });
+      //设备类型
+      getDeviceType({current:1,size:100}).then(response =>{
+        this.dwtypeList = response.data.records.map(val=>{
+          return {
+            id:val.id,
+            name:val.typeName
+          }
+        });
+      })
+    },
+
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      this.title = "修改";
+      this.form = JSON.parse(JSON.stringify(row))
+      this.form.buildId = Number(this.form.buildId)
+      this.open = true;
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "新增";
+      this.list = []
+    },
+    /** 提交按钮 */
+    submitForm(row) {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          this.form.latestChangeTime = YearMonthDateSFN()
+          this.form.spotType = 1
+          this.form.userName = 1
+          this.loading = true
+          if (this.form.id != undefined) {
+            updateInspectionPoint(this.form).then(response => {
+              this.loading = false,
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            }).catch(()=>{
+              this.loading = false
+            })
+          } else {
+            this.form.spotLabelAnalysis = new Date().getTime()
+            this.creatQrCode(this.form.spotLabelAnalysis)
+          }
+        }
+      });
+    },
+    /**新增 */
+    addData(){
+      addInspectionPoint(this.form).then(response => {
+        this.loading = false,
+        this.msgSuccess("新增成功");
+        this.open = false;
+        this.getList();
+      }).catch(()=>{
+        this.loading = false
+      })
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delInspectionPoint(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      exportInspectionPoint(this.queryParams).then(response =>{
+        this.exportLoading = false;
+        document.getElementById("xz").href = BASEPATH() + response.data
+        document.getElementById("xz").download = response.data
+        document.getElementById("xz").click()
+      })
+    }
+    
+  }
+};
+</script>

+ 199 - 0
src/views/business/OM/MochaITOM/record/index.vue

@@ -0,0 +1,199 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="90px">
+      <el-form-item label="时间:" label-width="50px">
+        <el-date-picker style="vertical-align: middle;width:340px"
+          v-model="dateRange"
+          size="small"
+          value-format="yyyy-MM-dd HH:mm:ss"
+          type="datetimerange"
+          range-separator="-"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+        ></el-date-picker>
+      </el-form-item>
+      <el-form-item label="完成状态">
+        <el-select v-model.trim="queryParams.isComplete"  size="small" style="width:120px">
+          <el-option value="false" label="未完成"></el-option>
+          <el-option value="true" label="已完成"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+        <!-- <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          :loading="exportLoading"
+          @click="handleExport"
+          v-hasPermi="['system:admin:export']"
+        >导出</el-button> -->
+      </el-form-item>
+    </el-form>
+    <el-row :gutter="20" v-loading="loading2">
+      <el-col :span="2.4">
+        <el-col class="event">
+            维保人员数量<span class="color1 colorc">{{collectList.userCount}}</span>
+        </el-col>
+      </el-col>
+      <el-col :span="2.4">
+        <el-col class="event">
+            今日任务<span class="color2 colorc">{{collectList.todayCount}}</span>
+        </el-col>
+      </el-col>
+      <el-col :span="2.4" >
+        <el-col class="event">
+            超时任务<span class="color3 colorc">{{collectList.todayTimeOutCount}}</span>
+        </el-col>
+      </el-col>
+      <el-col :span="2.4">
+        <el-col class="event">
+            今日完成任务
+            <span class="color4 colorc">{{collectList.todayCompleteCount}}</span>
+        </el-col>
+      </el-col>
+    </el-row>
+    <el-table v-loading="loading" :data="adminList" style="margin-top:20px;" height="calc(100vh - 34vh)">
+      <el-table-column label="任务名称" align="center" prop="planName" show-overflow-tooltip />
+      <el-table-column label="维保点位" align="center" prop="pointName" show-overflow-tooltip />
+      <el-table-column label="应完成时间" align="center" prop="ywcTime" show-overflow-tooltip />
+      <!-- <el-table-column label="当前状态" align="center" prop="property" show-overflow-tooltip >
+        <template slot-scope="scope">
+          <span :class="scope.row.alarmStatus == 0 ? 'color3' : 'color4'">{{scope.row.alarmStatus == 0 ? "未处理" : "已处理"}}</span>
+        </template>
+      </el-table-column> -->
+      <el-table-column label="完成情况" align="center" prop="isComplete" show-overflow-tooltip >
+        <template slot-scope="scope">
+          <span :class="scope.row.isComplete == false ? 'color3' : 'color4'">{{scope.row.isComplete == false ? "未完成" : "已完成"}}</span>
+        </template>
+      </el-table-column> 
+      <el-table-column label="相关责任人" align="center" prop="dutyName" show-overflow-tooltip />
+      <el-table-column label="联系电话" align="center" prop="dutyPhone" show-overflow-tooltip />
+    </el-table>
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.current"
+      :limit.sync="queryParams.size"
+      @pagination="getList"
+    />
+    <!-- 导出-->
+    <a href="" download="" id="xz" style="position: absolute;z-index: -1;opacity: 0;"></a>
+  </div>
+</template>
+<script>
+import { getMaintianLog, exportMaintianLog,getCollect } from "@/api/business/OM/MochaITOM/record";
+import { BASEPATH } from "@/assets/js/common.js";
+export default {
+  name: "TbAlarm",
+  data() {
+    return {
+      piliang:false,
+      exportLoading:false,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 参数表格数据
+      adminList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        current: 1,
+        size: 10,
+        name: undefined,
+        startTime:undefined,
+        endTime:undefined,
+        isComplete:undefined
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+
+      },
+      // 日期范围
+      dateRange: [],
+      //综合数据
+      collectList:[
+
+      ],
+      loading2:true,
+    };
+  },
+  created() {
+    this.getList();//初始化table
+    // this.getCollect();//初始化table
+  },
+  methods: {
+    //强制el-input刷新
+    onInput(){
+        this.$forceUpdate();
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.queryParams = {
+        name:undefined,
+        current:1,
+        size:10,
+        type:1
+      }
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 表单重置
+    reset() {
+      this.form = {};
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.current = 1;
+      this.getList();
+    },
+    /** 查询参数列表 */
+    getList() {
+      this.loading = true;
+      if(this.dateRange.length>0){
+        this.queryParams.startTime = this.dateRange[0]
+        this.queryParams.endTime = this.dateRange[1]
+      }
+      getMaintianLog(this.queryParams).then(response => {
+        this.adminList = response.data.records;
+        this.total = response.data.total;
+        this.loading = false;
+      });
+      /** 综合列表列表 */
+      getCollect(this.queryParams).then(response => {
+        this.collectList = response.data
+        this.loading2 = false
+        
+      });
+    },
+    
+
+
+    /** 导出按钮操作 */
+    handleExport() {
+      exportMaintianLog(this.queryParams).then(response =>{
+        this.exportLoading = false;
+        document.getElementById("xz").href = BASEPATH() + response.data
+        document.getElementById("xz").download = response.data
+        document.getElementById("xz").click()
+      })
+    },
+  }
+};
+</script>
+

+ 299 - 0
src/views/business/OM/MochaITOM/route/index.vue

@@ -0,0 +1,299 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="90px">
+      <el-form-item label="路线名称:" prop="name">
+        <el-input
+          v-model.trim="queryParams.name"
+          placeholder="请输入路线名称"
+          clearable
+          size="small"
+          style="width: 140px"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:admin:add']"
+        >新增</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-table v-loading="loading" :data="adminList" height="calc(100vh - 28vh)">
+      <el-table-column label="路线名称" align="center" prop="name"  show-overflow-tooltip />
+      <el-table-column label="创建时间" align="center" prop="createTime"  show-overflow-tooltip />
+      <el-table-column label="创建人" align="center" prop="createBy"  show-overflow-tooltip />
+      <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:admin:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:admin:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <!-- 修改、新增对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body :before-close="cancel" :close-on-click-modal="false">
+      <el-form ref="form" :model="form" :rules="rules" label-width="auto" >
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="路线名称" prop="name">
+              <el-input v-model="form.name" placeholder="请填写路线名称" @input="onInput()" maxlength="15" show-word-limit />
+            </el-form-item>
+          </el-col>
+          <el-col style="font-size:16px;font-weight:700;margin:10px 0 20px;">维保点位</el-col>
+          <el-table v-loading="loading2" :data="adminList2" height="300" @selection-change="handleSelectionChange"  ref="dataTable">
+            <el-table-column type="selection" />
+            <el-table-column label="点位名称" align="center" prop="spotName"  show-overflow-tooltip />
+            <el-table-column label="点位地址" align="center" prop="spotAddress"  show-overflow-tooltip />
+            <el-table-column label="点位图片" align="center" prop="pictureRoute"  show-overflow-tooltip >
+              <template slot-scope="scope">
+                <el-image
+                  v-if="scope.row.pictureRoute"
+                  style="width: 24px; height: 24px"
+                  :preview-src-list="['https://smartpark.caih.com/dmapi/archive/' + scope.row.pictureRoute]"
+                  :src="'https://smartpark.caih.com/dmapi/archive/' + scope.row.pictureRoute">
+                </el-image>
+            </template>
+            </el-table-column>
+          </el-table>
+          <pagination
+            v-show="total2>0"
+            :total="total2"
+            :page.sync="queryParams2.current"
+            :limit.sync="queryParams2.size"
+            @pagination="getList2"
+          />
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.current"
+      :limit.sync="queryParams.size"
+      @pagination="getList"
+    />
+    <a href="" download="" id="xz" style="position: absolute;z-index: -1;opacity: 0;"></a>
+  </div>
+</template>
+<script>
+import { BASEPATH } from "@/assets/js/common.js";
+import { listChannel } from "@/api/system/product";
+import { getInspectionPoint } from "@/api/business/OM/MochaITOM/point";
+import { addPlanPath, delPlanPath, updatePlanPath, getPlanPath, getXL } from "@/api/business/OM/MochaITOM/route";
+export default {
+  name: "Floor",
+  data() {
+    return {
+      loading:true,
+      loading2:true,
+      exportLoading:false,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 总条数
+      total2: 0,
+      // 参数表格数据
+      adminList: [],
+      // 参数表格数据
+      adminList2: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        current: 1,
+        size: 20,
+        name: undefined,
+        dutyId:undefined
+      },
+      // 查询参数
+      queryParams2: {
+        current: 1,
+        size: 20,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        name: [
+          { required: true, message: "线路名称不能为空",  trigger: "blur"  }
+        ],
+      },
+    };
+  },
+  created() {
+    this.getList();//初始化table
+  },
+  methods: {
+    
+    //强制el-input刷新
+    onInput(){
+        this.$forceUpdate();
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.queryParams = {
+        name:undefined,
+        current:1,
+        size:20
+      }
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 表单重置
+    reset() {
+      this.form = {};
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.current = 1;
+      this.getList();
+    },
+    /** 查询参数列表 */
+    getList() {
+      this.loading = true;
+      getPlanPath(this.queryParams).then(response => {
+        this.adminList = response.data.records;
+        this.total = response.data.total;
+        this.loading = false;
+      });
+    },
+    getList2(row){
+        this.adminList2 = []
+        getInspectionPoint(this.queryParams2).then(response => {
+            this.adminList2 = response.data.records;
+            if(row && row.pointIds.length>0){
+                let list = []
+                for(let a = 0;a<row.pointIds.length;a++){
+                    for(let i = 0; i<this.adminList2.length;i++){
+                        if(row.pointIds[a] == this.adminList2[i].id){
+                            list.push(this.adminList2[i])
+                        }
+                    }
+                }
+                setTimeout(() => {
+                    var that = this;
+                    that.$nextTick(() => {
+                        if(list){
+                            list.forEach((row) => {
+                                that.$refs.dataTable.toggleRowSelection(row, true)
+                            })
+                        }
+                    })
+                    this.total2 = response.data.total;
+                    this.loading2 = false;
+                })
+            }else{
+                this.total2 = response.data.total;
+                this.loading2 = false;
+            }
+        });
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      this.title = "修改";
+      this.form = JSON.parse(JSON.stringify(row))
+      getXL({pathId:row.id}).then(res =>{
+          if(res.data.length>0){
+              row.pointIds = []
+              for(let i=0;i<res.data.length;i++){
+                  row.pointIds.push(res.data[i].spotId)
+              }
+          }
+          this.getList2(row)
+          this.open = true;
+      })  
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.getList2()
+      this.open = true;
+      this.title = "新增";
+    },
+    /** 提交按钮 */
+    submitForm(row) {
+      this.form.userIds = []
+      this.form.userIds = this.list
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          this.loading = true
+          if (this.form.id != undefined) {
+            updatePlanPath(this.form).then(response => {
+              this.loading = false,
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            }).catch(()=>{
+              this.loading = false
+            })
+          } else {
+            addPlanPath(this.form).then(response => {
+              this.loading = false,
+              this.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            }).catch(()=>{
+              this.loading = false
+            })
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delPlanPath(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(() => {});
+    },
+    /** table */
+    handleSelectionChange(row){
+        this.form.pointIds = []
+        for(let i=0;i<row.length;i++){
+            this.form.pointIds.push(row[i].id)
+        }
+    }
+  }
+};
+</script>

+ 1 - 1
src/views/business/buildMange/floor/index.vue

@@ -7,7 +7,7 @@
           placeholder="请输入建筑名称"
           clearable
           size="small"
-          style="width: 240px"
+          style="width: 140px"
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>

+ 0 - 2
src/views/business/fireInternet/fireAlarm/fireMonitoring/index.vue

@@ -142,9 +142,7 @@
     <a href="" download="" id="xz" style="position: absolute;z-index: -1;opacity: 0;"></a>
   </div>
 </template>
-
 <script>
-
 import {  getTbAlarmCollectIcoDetail, exportTbAlarm ,getTbAlarm, collectTbAlarm } from "@/api/business/OM/eventCenter";
 import { listChannel } from "@/api/system/product";
 import index1 from "@/views/components/fireInternetInfo/index1";

+ 14 - 20
src/views/index.vue

@@ -24,7 +24,7 @@
             <div class="card_center">
               <el-card class="box-card card_center1" style="padding:0 !important">
                   <div class="map" style="height:45vh">
-                    <iframe style="width:100%;height:100%" src='https://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9'></iframe>
+                    <iframe style="width:100%;height:100%;border:none;" src='https://www.thingjs.com/s/ef7ee6a73896c01bda77e679?params=105b0f77fd24654d4eebc434e9'></iframe>
                   </div>
               </el-card>
               <el-card class="box-card card_center2 mg10">
@@ -33,7 +33,7 @@
                 </div>
                 <div class="contain">
                   <el-table :data="index4Data"  style="margin-top:10px" height="calc(100vh - 54vh - 100px)">
-                    <el-table-column label="告警id" align="center" prop="devIdx" />
+                    <!-- <el-table-column label="告警id" align="center" prop="devIdx" />
                     <el-table-column label="告警时间" align="center" prop="time" show-overflow-tooltip />
                     <el-table-column label="告警设备" align="center" prop="devicename" show-overflow-tooltip />
                     <el-table-column label="设备类型" align="center" prop="dwtype" show-overflow-tooltip >
@@ -42,7 +42,15 @@
                           'RTU': scope.row.dwtype == 16 ? '消防视频监控': scope.row.dwtype == 1 ? '用户传输装置' : '其它' }}</span>
                       </template>
                     </el-table-column>
-                    <el-table-column label="告警内容" align="center" prop="evtname" show-overflow-tooltip />
+                    <el-table-column label="告警内容" align="center" prop="evtname" show-overflow-tooltip /> -->
+                    <el-table-column label="告警时间" align="center" prop="alarmTime"  show-overflow-tooltip />
+                    <el-table-column label="告警内容" align="center" prop="alarmContent"  show-overflow-tooltip />
+                    <el-table-column label="告警类型" align="center" prop="deviceType"  show-overflow-tooltip />
+                    <el-table-column label="状态" align="center" prop="evt"  show-overflow-tooltip >
+                      <template slot-scope="scope">
+                        <span :class="scope.row.alarmStatus == '1' ? 'handle2' : 'untreated2'">{{scope.row.alarmStatus == "1"  ? "已处理" : "未处理"}}</span>
+                      </template>
+                    </el-table-column>
                   </el-table>
                 </div>
               </el-card>
@@ -237,7 +245,8 @@ export default {
     initWebSocket() {
       let arrData = [];
       let that = this
-      let wsUri = "wss://iot.usky.cn:55120";
+      //let wsUri = "wss://iot.usky.cn:55120";
+      let wsUri = "ws://10.21.39.1:8083/dm/alarmPush";
       try {
               let websocket = new WebSocket(wsUri);
               websocket.onopen = function(evt) {
@@ -462,22 +471,7 @@ export default {
 
 }
 
- ::v-deep {
-    .el-table__body-wrapper::-webkit-scrollbar {
-      /*width: 0;宽度为0隐藏*/
-      width: 4px;
-    }
-    .el-table__body-wrapper::-webkit-scrollbar-thumb {
-      border-radius: 6px;
-      height: 50px;
-      background: rgba(40, 190, 252, .6);//滚动条颜色
-    }
-    .el-table__body-wrapper::-webkit-scrollbar-track {
-      box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
-      border-radius: 6px;
-      background: #eee;//滚动条背景色
-    }
-  }
+ 
 .unprocess{
 color: #FF5801
 }

+ 207 - 7
src/views/login.vue

@@ -1,11 +1,11 @@
 <template>
   <div class="login" >
-    <div class="bg"><img :src="bg" alt="" style="width:100%;height:100%;"></div>
-    <div class="logo">
+    <div class="bg" v-if="erp"><img :src="bg" alt="" style="width:100%;height:100%;"></div>
+    <div class="logo" v-if="erp">
       <img :src="logo" alt="">
       <span class="logo_txt">设备设施管理系统</span>
     </div>
-    <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
+    <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" v-if="erp">
       <h3 class="title">用户登录 <span>LOGIN</span></h3>
       <el-form-item prop="username" >
         <el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号">
@@ -58,9 +58,15 @@
       </el-form-item>
     </el-form>
     <!--  底部  -->
-    <div class="el-login-footer">
+    <div class="el-login-footer" v-if="erp">
       <!-- <span>Copyright © 2018-2021 yongtian.vip All Rights Reserved.</span> -->
     </div>
+    <div id="loader-wrapper" v-if="ERPloading">
+        <div id="loader"></div>
+        <div class="loader-section section-left"></div>
+        <div class="loader-section section-right"></div>
+        <div class="load_title">正在加载系统资源,请耐心等待</div>
+    </div>
   </div>
 </template>
 
@@ -75,6 +81,8 @@ export default {
   name: "Login",
   data() {
     return {
+      erp:false,
+      ERPloading:true,
       passwordtxt:"password",
       bg:bgImg,
       logo:logoImg,
@@ -98,7 +106,7 @@ export default {
         ],
         code: [{ required: true, trigger: "change", message: "请输入验证码" }]
       },
-      loading: false,
+      loading: true,
       // 验证码开关
       captchaOnOff: false,
       // 注册开关
@@ -115,10 +123,21 @@ export default {
     }
   },
   created() {
-    this.getCode();
-    this.getCookie();
+    this.getUrl()
   },
   methods: {
+    getUrl(){
+      let url = this.$route.query
+      if(url.id && url.name){
+        let data = {id:url.id,name:url.name}
+        this.handleLoginERP(data)
+      }else{
+        this.erp = true
+        this.ERPloading = false
+        this.getCode();
+        this.getCookie();
+      }
+    },
     eyeTab(){
       if(this.passwordtxt == "password"){
         this.passwordtxt = "text"
@@ -170,6 +189,14 @@ export default {
           });
         }
       });
+    },
+    handleLoginERP(data) {//erp登录
+      Cookies.set("username20220313", data.name);
+      this.$store.dispatch("LoginERP", data).then((res) => {
+        this.$router.push({ path: "/index"}).catch(()=>{});
+      }).catch((err) => {
+        location.href = '/deviceManager/#/';
+      });
     }
   }
 };
@@ -279,4 +306,177 @@ export default {
   height:36px !important;
   line-height: 36px !important;
 }
+body,html{
+  width:100%;
+  height:100%;
+  background: #7171C6;
+}
+        
+        #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% {
+                -webkit-transform: rotate(360deg);
+                -ms-transform: rotate(360deg);
+                transform: rotate(360deg);
+            }
+        }
+        
+        @keyframes spin {
+            0% {
+                -webkit-transform: rotate(0deg);
+                -ms-transform: rotate(0deg);
+                transform: rotate(0deg);
+            }
+            100% {
+                -webkit-transform: rotate(360deg);
+                -ms-transform: rotate(360deg);
+                transform: rotate(360deg);
+            }
+        }
+        
+        #loader-wrapper .loader-section {
+            position: fixed;
+            top: 0;
+            width: 51%;
+            height: 100%;
+            background: #7171C6;
+            z-index: 1000;
+            -webkit-transform: translateX(0);
+            -ms-transform: translateX(0);
+            transform: translateX(0);
+        }
+        
+        #loader-wrapper .loader-section.section-left {
+            left: 0;
+        }
+        
+        #loader-wrapper .loader-section.section-right {
+            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>

+ 7 - 0
设备设施接口.md

@@ -0,0 +1,7 @@
+### 1.资产管理中资产编号字段应该为唯一值,用作资产二维码展示内容(facility 接口)
+### 2.维保点位新增修改增加查询没有设备类型字段
+### 3.班组人员查询接口中查询字段责任人是userName,接口未返回责任人、电话字段(接口devopsTeam/list) ,未返回组成员,无法完成修改组员渲染展示
+###   新增接口userId是必填项,这个字段是做什么的???
+### 4.巡更路线查询接口创建人及时间字段数据为空
+             
+

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini