Просмотр исходного кода

内蒙运维系统WEB端版本提交

dylan 3 лет назад
Родитель
Сommit
0e70401178
100 измененных файлов с 30986 добавлено и 2857 удалено
  1. BIN
      public/favicon.png
  2. BIN
      public/favicon2.png
  3. BIN
      public/img/logo.png
  4. BIN
      public/img/logo_pc.png
  5. 9 7
      src/api/baseinfo/org.js
  6. 43 43
      src/api/baseinfo/project.js
  7. 76 0
      src/api/baseinfo/region.js
  8. 41 41
      src/api/baseinfo/rtu.js
  9. 15 7
      src/api/baseinfo/servicePerson.js
  10. 103 7
      src/api/business/inspection/inspection.js
  11. 60 0
      src/api/business/inspection/inspectionreport.js
  12. 21 0
      src/api/business/inspection/plan.js
  13. 112 37
      src/api/business/manage/manage.js
  14. 67 6
      src/api/business/order/order.js
  15. 64 5
      src/api/business/order/process.js
  16. 25 0
      src/api/business/warning/warning.js
  17. 10 1
      src/api/data/dataGround.js
  18. 10 1
      src/api/data/dataRain.js
  19. 10 1
      src/api/data/dataRiver.js
  20. 10 1
      src/api/data/dataRsvr.js
  21. 27 0
      src/api/data/rtuImport.js
  22. 7 7
      src/api/home/home.js
  23. 77 0
      src/api/notice/notice.js
  24. 13 0
      src/api/notice/noticeattach.js
  25. 0 57
      src/api/project/projectPlan.js
  26. 23 0
      src/api/versionmanage/version.js
  27. 7 7
      src/api/warning/originalWarnInfo.js
  28. 7 7
      src/api/warning/warning.js
  29. 4 3
      src/config/website.js
  30. 103 102
      src/lang/zh.js
  31. 1076 0
      src/libs/webgl/OrbitControls.js
  32. 0 0
      src/libs/webgl/fonts/FangSong_Regular.json
  33. 13 0
      src/libs/webgl/fonts/LICENSE
  34. 11 0
      src/libs/webgl/fonts/README.md
  35. 190 0
      src/libs/webgl/fonts/droid/NOTICE
  36. 18 0
      src/libs/webgl/fonts/droid/README.txt
  37. 0 0
      src/libs/webgl/fonts/droid/droid_sans_bold.typeface.json
  38. 0 0
      src/libs/webgl/fonts/droid/droid_sans_mono_regular.typeface.json
  39. 0 0
      src/libs/webgl/fonts/droid/droid_sans_regular.typeface.json
  40. 0 0
      src/libs/webgl/fonts/droid/droid_serif_bold.typeface.json
  41. 0 0
      src/libs/webgl/fonts/droid/droid_serif_regular.typeface.json
  42. 0 0
      src/libs/webgl/fonts/gentilis_bold.typeface.json
  43. 0 0
      src/libs/webgl/fonts/gentilis_regular.typeface.json
  44. 0 0
      src/libs/webgl/fonts/helvetiker_bold.typeface.json
  45. 0 0
      src/libs/webgl/fonts/helvetiker_regular.typeface.json
  46. 0 0
      src/libs/webgl/fonts/optimer_bold.typeface.json
  47. 0 0
      src/libs/webgl/fonts/optimer_regular.typeface.json
  48. 9 0
      src/libs/webgl/fonts/ttf/README.md
  49. BIN
      src/libs/webgl/fonts/ttf/kenpixel.ttf
  50. BIN
      src/libs/webgl/three-3d/img/base.png
  51. BIN
      src/libs/webgl/three-3d/img/box2.png
  52. BIN
      src/libs/webgl/three-3d/img/grid1.png
  53. BIN
      src/libs/webgl/three-3d/img/grid2.png
  54. BIN
      src/libs/webgl/three-3d/img/grid3.png
  55. BIN
      src/libs/webgl/three-3d/img/grid4.png
  56. BIN
      src/libs/webgl/three-3d/img/grid5.png
  57. BIN
      src/libs/webgl/three-3d/img/grid6.png
  58. BIN
      src/libs/webgl/three-3d/img/link-red.png
  59. BIN
      src/libs/webgl/three-3d/img/rain.png
  60. BIN
      src/libs/webgl/three-3d/img/site2.png
  61. BIN
      src/libs/webgl/three-3d/img/sun.png
  62. BIN
      src/libs/webgl/three-3d/img/tp.jpg
  63. BIN
      src/libs/webgl/three-3d/img/tube.png
  64. BIN
      src/libs/webgl/three-3d/img/tube2.png
  65. BIN
      src/libs/webgl/three-3d/img/y.png
  66. BIN
      src/libs/webgl/three-3d/sky/1.png
  67. BIN
      src/libs/webgl/three-3d/sky/2.png
  68. BIN
      src/libs/webgl/three-3d/sky/4.png
  69. BIN
      src/libs/webgl/three-3d/sky/bottom.png
  70. BIN
      src/libs/webgl/three-3d/sky/up.png
  71. 9616 0
      src/libs/webgl/three-3d/three.js
  72. 12651 0
      src/libs/webgl/three-3d/three.module.js
  73. 0 2
      src/main.js
  74. 4 2
      src/page/index/logo.vue
  75. 199 224
      src/page/index/top/index.vue
  76. 93 91
      src/page/login/index.vue
  77. 210 0
      src/views/appversion/index.vue
  78. 156 0
      src/views/appversion/versionupload.vue
  79. 73 189
      src/views/baseinfo/companyadminperson.vue
  80. 252 0
      src/views/baseinfo/companydept.vue
  81. 64 194
      src/views/baseinfo/companyserviceperson.vue
  82. 106 156
      src/views/baseinfo/orgadminperson.vue
  83. 270 0
      src/views/baseinfo/orgdept.vue
  84. 30 33
      src/views/baseinfo/project.vue
  85. 481 0
      src/views/baseinfo/region.vue
  86. 0 481
      src/views/baseinfo/rtu.vue
  87. 465 0
      src/views/baseinfo/rtu/index.vue
  88. 276 0
      src/views/baseinfo/rtu/rtuImportProcess.vue
  89. 223 0
      src/views/baseinfo/rtu/rtuimport.vue
  90. 174 0
      src/views/baseinfo/rtu/rtuimportdetail.vue
  91. 204 0
      src/views/baseinfo/rtu/videositeadd.vue
  92. 180 87
      src/views/business/data/groundDataCache.vue
  93. 96 51
      src/views/business/data/rainDataCache.vue
  94. 87 51
      src/views/business/data/riverDataCache.vue
  95. 81 49
      src/views/business/data/rsvrDataCache.vue
  96. 315 249
      src/views/business/inspection/index.vue
  97. 0 658
      src/views/business/inspection/inspectionRportDetail.vue
  98. 1279 0
      src/views/business/inspection/inspectionreportdetail.vue
  99. 384 0
      src/views/business/inspection/nonetwork/index.vue
  100. 756 0
      src/views/business/inspection/nonetwork/inspectionphotosubmit.vue

BIN
public/favicon.png


BIN
public/favicon2.png


BIN
public/img/logo.png


BIN
public/img/logo_pc.png


+ 9 - 7
src/api/desk/notice.js → src/api/baseinfo/org.js

@@ -1,8 +1,8 @@
 import request from '@/router/axios';
 
-export const getList = (current, size, params) => {
+export const getPage = (current, size, params) => {
     return request({
-        url: '/api/galaxy-test/notice/list',
+        url: '/api/galaxy-business/baseinfo/org/page',
         method: 'get',
         params: {
             ...params,
@@ -12,9 +12,10 @@ export const getList = (current, size, params) => {
     })
 }
 
+
 export const remove = (ids) => {
     return request({
-        url: '/api/galaxy-test/notice/remove',
+        url: '/api/galaxy-business/baseinfo/org/remove',
         method: 'post',
         params: {
             ids,
@@ -24,7 +25,7 @@ export const remove = (ids) => {
 
 export const add = (row) => {
     return request({
-        url: '/api/galaxy-test/notice/submit',
+        url: '/api/galaxy-business/baseinfo/org/save',
         method: 'post',
         data: row
     })
@@ -32,15 +33,15 @@ export const add = (row) => {
 
 export const update = (row) => {
     return request({
-        url: '/api/galaxy-test/notice/submit',
+        url: '/api/galaxy-business/baseinfo/org/update',
         method: 'post',
         data: row
     })
 }
 
-export const getNotice = (id) => {
+export const getDetail = (id) => {
     return request({
-        url: '/api/galaxy-test/notice/detail',
+        url: '/api/galaxy-business/baseinfo/org/detail',
         method: 'get',
         params: {
             id
@@ -48,3 +49,4 @@ export const getNotice = (id) => {
     })
 }
 
+

+ 43 - 43
src/api/baseinfo/project.js

@@ -1,70 +1,70 @@
 import request from '@/router/axios';
 
 export const getPage = (current, size, params) => {
-  return request({
-    url: '/api/galaxy-test/project/base/page',
-    method: 'get',
-    params: {
-      ...params,
-      current,
-      size,
-    }
-  })
+    return request({
+        url: '/api/galaxy-business/project/base/page',
+        method: 'get',
+        params: {
+            ...params,
+            current,
+            size,
+        }
+    })
 }
 
 
 export const getUserProjectList = () => {
-  return request({
-    url: '/api/galaxy-test/project/base/org/list',
-    method: 'get',
+    return request({
+        url: '/api/galaxy-business/project/base/org/list',
+        method: 'get',
 
-  })
+    })
 }
 
 
 export const remove = (ids) => {
-  return request({
-    url: '/api/galaxy-test/project/base/remove',
-    method: 'post',
-    params: {
-      ids,
-    }
-  })
+    return request({
+        url: '/api/galaxy-business/project/base/remove',
+        method: 'post',
+        params: {
+            ids,
+        }
+    })
 }
 
 export const add = (row) => {
-  return request({
-    url: '/api/galaxy-test/project/base/submit',
-    method: 'post',
-    data: row
-  })
+    return request({
+        url: '/api/galaxy-business/project/base/submit',
+        method: 'post',
+        data: row
+    })
 }
 
 export const update = (row) => {
-  return request({
-    url: '/api/galaxy-test/project/base/submit',
-    method: 'post',
-    data: row
-  })
+    return request({
+        url: '/api/galaxy-business/project/base/submit',
+        method: 'post',
+        data: row
+    })
 }
 
 export const getDetail = (id) => {
-  return request({
-    url: '/api/galaxy-test/project/base/detail',
-    method: 'get',
-    params: {
-      id
-    }
-  })
+    return request({
+        url: '/api/galaxy-business/project/base/detail',
+        method: 'get',
+        params: {
+            id
+        }
+    })
 }
 
 export const warnSetting = (params) => {
     return request({
-      url: '/api/galaxy-test/project/base/setting/warning/submit',
-      method: 'post',
-      params: {
-        ...params,
-      }
+        url: '/api/galaxy-business/project/base/setting/warning/submit',
+        method: 'post',
+        params: {
+            ...params,
+        }
     })
-  }
+}
 

+ 76 - 0
src/api/baseinfo/region.js

@@ -0,0 +1,76 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+    return request({
+        url: '/api/galaxy-system/region/list',
+        method: 'get',
+        params: {
+            ...params,
+            current,
+            size,
+        }
+    })
+}
+
+export const getChildrenList = () => {
+    return request({
+        url: '/api/galaxy-business/baseinfo/region/children/list',
+        method: 'get',
+    })
+}
+
+export const getLazyTree = (parentCode, params) => {
+    return request({
+        url: '/api/galaxy-business/baseinfo/region/lazy-tree',
+        method: 'get',
+        params: {
+            ...params,
+            parentCode
+        }
+    })
+}
+
+
+export const getTree = () => {
+    return request({
+        url: '/api/galaxy-business/baseinfo/region/tree',
+        method: 'get',
+    })
+}
+
+export const getDetail = (code) => {
+    return request({
+        url: '/api/galaxy-business/baseinfo/region/detail',
+        method: 'get',
+        params: {
+            code
+        }
+    })
+}
+
+export const remove = (id) => {
+    return request({
+        url: '/api/galaxy-business/baseinfo/region/remove',
+        method: 'post',
+        params: {
+            id,
+        }
+    })
+}
+
+export const submit = (row) => {
+    return request({
+        url: '/api/galaxy-business/baseinfo/region/submit',
+        method: 'post',
+        data: row
+    })
+}
+
+export const importSubmit = (row) => {
+    return request({
+        url: '/api/galaxy-business/baseinfo/region/import',
+        method: 'post',
+        data: row
+    })
+}
+

+ 41 - 41
src/api/baseinfo/rtu.js

@@ -1,61 +1,61 @@
 import request from '@/router/axios';
 
 export const getPage = (current, size, params) => {
-  return request({
-    url: '/api/galaxy-test/rtu/base/page',
-    method: 'get',
-    params: {
-      ...params,
-      current,
-      size,
-    }
-  })
+    return request({
+        url: '/api/galaxy-business/rtu/base/page',
+        method: 'get',
+        params: {
+            ...params,
+            current,
+            size,
+        }
+    })
 }
 
-export const getRtuKindList = ( code) => {
-  return request({
-    url: '/api/galaxy-test/rtu/base/dict/list',
-    method: 'get',
-    params: {
-      code,
-    }
-  })
+export const getRtuKindList = (code) => {
+    return request({
+        url: '/api/galaxy-business/rtu/base/dict/list',
+        method: 'get',
+        params: {
+            code,
+        }
+    })
 }
 
 
 export const remove = (ids) => {
-  return request({
-    url: '/api/galaxy-test/rtu/base/remove',
-    method: 'post',
-    params: {
-      ids,
-    }
-  })
+    return request({
+        url: '/api/galaxy-business/rtu/base/remove',
+        method: 'post',
+        params: {
+            ids,
+        }
+    })
 }
 
 export const add = (row) => {
-  return request({
-    url: '/api/galaxy-test/rtu/base/submit',
-    method: 'post',
-    data: row
-  })
+    return request({
+        url: '/api/galaxy-business/rtu/base/save',
+        method: 'post',
+        data: row
+    })
 }
 
 export const update = (row) => {
-  return request({
-    url: '/api/galaxy-test/rtu/base/submit',
-    method: 'post',
-    data: row
-  })
+    return request({
+        url: '/api/galaxy-business/rtu/base/submit',
+        method: 'post',
+        data: row
+    })
 }
 
 export const getDetail = (id) => {
-  return request({
-    url: '/api/galaxy-test/rtu/base/detail',
-    method: 'get',
-    params: {
-      id
-    }
-  })
+    return request({
+        url: '/api/galaxy-business/rtu/base/detail',
+        method: 'get',
+        params: {
+            id
+        }
+    })
 }
 

+ 15 - 7
src/api/baseinfo/servicePerson.js

@@ -3,15 +3,15 @@ import request from '@/router/axios';
 
 export const getOrgTree = () => {
     return request({
-        url: '/api/galaxy-test/project/person/org/dict',
+        url: '/api/galaxy-business/serviceperson/org/dict',
         method: 'get',
 
     })
 }
 
-export const getServicePersonList = (current, size, params) => {
+export const getPage = (current, size, params) => {
     return request({
-        url: '/api/galaxy-test/project/person/org/list',
+        url: '/api/galaxy-business/serviceperson/page',
         method: 'get',
         params: {
             ...params,
@@ -23,7 +23,7 @@ export const getServicePersonList = (current, size, params) => {
 
 export const remove = (ids) => {
     return request({
-        url: '/api/galaxy-test/project/person/remove',
+        url: '/api/galaxy-business/serviceperson/remove',
         method: 'post',
         params: {
             ids,
@@ -33,7 +33,7 @@ export const remove = (ids) => {
 
 export const add = (row) => {
     return request({
-        url: '/api/galaxy-test/project/person/save',
+        url: '/api/galaxy-business/serviceperson/save',
         method: 'post',
         data: row
     })
@@ -41,7 +41,7 @@ export const add = (row) => {
 
 export const update = (row) => {
     return request({
-        url: '/api/galaxy-test/project/person/update',
+        url: '/api/galaxy-business/serviceperson/update',
         method: 'post',
         data: row
     })
@@ -49,7 +49,7 @@ export const update = (row) => {
 
 export const getDetail = (id) => {
     return request({
-        url: '/api/galaxy-test/project/person/detail',
+        url: '/api/galaxy-business/serviceperson/detail',
         method: 'get',
         params: {
             id
@@ -57,3 +57,11 @@ export const getDetail = (id) => {
     })
 }
 
+export const getList = () => {
+    return request({
+        url: '/api/galaxy-business/serviceperson/list',
+        method: 'get',
+    })
+}
+
+

+ 103 - 7
src/api/business/inspection/inspection.js

@@ -2,7 +2,7 @@ import request from '@/router/axios';
 
 export const getPage = (current, size, params) => {
     return request({
-        url: '/api/galaxy-test/equipment/inspection/report/page',
+        url: '/api/galaxy-business/equipment/inspection/page',
         method: 'get',
         params: {
             ...params,
@@ -14,7 +14,7 @@ export const getPage = (current, size, params) => {
 
 export const remove = (ids) => {
     return request({
-        url: '/api/galaxy-test/equipment/inspection/report/remove',
+        url: '/api/galaxy-business/equipment/inspection/report/remove',
         method: 'post',
         params: {
             ids,
@@ -24,7 +24,7 @@ export const remove = (ids) => {
 
 export const add = (row) => {
     return request({
-        url: '/api/galaxy-test/equipment/inspection/report/save',
+        url: '/api/galaxy-business/equipment/inspection/report/save',
         method: 'post',
         data: row
     })
@@ -32,21 +32,117 @@ export const add = (row) => {
 
 export const update = (row) => {
     return request({
-        url: '/api/galaxy-test/equipment/inspection/report/update',
+        url: '/api/galaxy-business/equipment/inspection/report/update',
         method: 'post',
         data: row
     })
 }
 
-export const getDetail = (id) => {
+
+
+export const getDetailByCode = (rtuCode) => {
+    return request({
+        url: '/api/galaxy-business/equipment/inspection/report/detail',
+        method: 'get',
+        params: {
+            rtuCode
+        }
+    })
+}
+
+export const getRemainingproblemsPage = (current, size, params) => {
+    return request({
+        url: '/api/galaxy-business/equipment/inspection/report/remainingproblems/page',
+        method: 'get',
+        params: {
+            ...params,
+            current,
+            size,
+        }
+    })
+}
+
+export const closeRemainingProblem = (params) => {
     return request({
-        url: '/api/galaxy-test/equipment/inspection/report/detail',
+        url: '/api/galaxy-business/equipment/inspection/report/remainingproblems/close',
+        method: 'post',
+        data: params
+    })
+}
+
+export const monthRemainingProblemsExport = () => {
+    return request({
+        url: '/api/galaxy-business/equipment/inspection/report/monthremainingproblems/export',
+        method: 'get',
+
+    })
+}
+
+export const uncloseRemainingProblemsExport = () => {
+    return request({
+        url: '/api/galaxy-business/equipment/inspection/report/uncloseremainingproblems/export',
+        method: 'get',
+
+    })
+}
+
+export const getCountInfo = (adCode) => {
+    return request({
+        url: '/api/galaxy-business/equipment/inspection/count',
         method: 'get',
         params: {
-            id
+            adCode
         }
     })
 }
 
+export const getInspectionReportStatus = (rtuCode) => {
+    return request({
+        url: '/api/galaxy-business/equipment/inspection/rtu/reportStatus',
+        method: 'get',
+        params: {
+            rtuCode
+        }
+    })
+}
+
+
+export const getNoNetworkSignalReportPage = (current, size, params) => {
+    return request({
+        url: '/api/galaxy-business/equipment/inspection/report/nonetworksignal/page',
+        method: 'get',
+        params: {
+            ...params,
+            current,
+            size,
+        }
+    })
+}
+
+export const getUnfinishedInspectionPage = (current, size, params) => {
+    return request({
+        url: '/api/galaxy-business/equipment/inspection/unfinished/page',
+        method: 'get',
+        params: {
+            ...params,
+            current,
+            size,
+        }
+    })
+}
+
+export const unfinishedInspectionExport = (params) => {
+    return request({
+        url: '/api/galaxy-business/equipment/inspection/unfinished/export',
+        method: 'get',
+        params: {
+            ...params,
+        }
+    })
+}
+
+
+
+
 
 

+ 60 - 0
src/api/business/inspection/inspectionreport.js

@@ -0,0 +1,60 @@
+import request from '@/router/axios';
+
+
+export const todayInspectionReportList = (data) => {
+    return request({
+        url: '/api/galaxy-business/equipment/inspection/report/today/list',
+        method: 'get',
+        params: data,
+    })
+}
+
+
+export const todayInspectionReportPage = (current, size, params) => {
+    return request({
+        url: '/api/galaxy-business/equipment/inspection/report/today/page',
+        method: 'get',
+        params: {
+            ...params,
+            current,
+            size,
+        }
+    })
+}
+
+
+export const getDetail = (id) => {
+    return request({
+        url: '/api/galaxy-business/equipment/inspection/report/detail',
+        method: 'get',
+        params: {
+            id
+        }
+    })
+}
+
+export const update = (row) => {
+    return request({
+        url: '/api/galaxy-business/equipment/inspection/report/update',
+        method: 'post',
+        data: row
+    })
+}
+
+export const nonetworksignalPhotoUpdate = (row) => {
+    return request({
+        url: '/api/galaxy-business/equipment/inspection/report/nonetworksignal/photo/update',
+        method: 'post',
+        data: row
+    })
+}
+
+
+
+export const closeNonetworksignalPhotoSubmit = (params) => {
+    return request({
+        url: '/api/galaxy-business/equipment/inspection/report/nonetworksignal/close',
+        method: 'post',
+        data: params
+    })
+}

+ 21 - 0
src/api/business/inspection/plan.js

@@ -0,0 +1,21 @@
+import request from '@/router/axios';
+
+
+
+
+export const submit = (row) => {
+    return request({
+        url: '/api/galaxy-business/equipment/inspection/plan/submit',
+        method: 'post',
+        data: row
+    })
+}
+
+export const getDetail = () => {
+    return request({
+        url: '/api/galaxy-business/equipment/inspection/plan/detail',
+        method: 'get',
+
+    })
+}
+

+ 112 - 37
src/api/business/manage/manage.js

@@ -1,57 +1,132 @@
 import request from '@/router/axios';
 
 export const getList = (current, size, params) => {
-  return request({
-    url: '/api/galaxy-test/rtu/manage/page',
-    method: 'get',
-    params: {
-      ...params,
-      current,
-      size,
-    }
-  })
+    return request({
+        url: '/api/galaxy-business/rtu/manage/page',
+        method: 'get',
+        params: {
+            ...params,
+            current,
+            size,
+        }
+    })
 }
 
 export const getTree = () => {
-  return request({
-    url: '/api/galaxy-test/rtu/manage/tree',
-    method: 'get',
-  })
+    return request({
+        url: '/api/galaxy-business/rtu/manage/tree',
+        method: 'get',
+    })
 }
 
 export const remove = (ids) => {
-  return request({
-    url: '/api/galaxy-test/rtu/manage/remove',
-    method: 'post',
-    params: {
-      ids,
-    }
-  })
+    return request({
+        url: '/api/galaxy-business/rtu/manage/remove',
+        method: 'post',
+        params: {
+            ids,
+        }
+    })
 }
 
 export const add = (row) => {
-  return request({
-    url: '/api/galaxy-test/rtu/manage/save',
-    method: 'post',
-    data: row
-  })
+    return request({
+        url: '/api/galaxy-business/rtu/manage/save',
+        method: 'post',
+        data: row
+    })
 }
 
 export const update = (row) => {
-  return request({
-    url: '/api/galaxy-test/rtu/manage/update',
-    method: 'post',
-    data: row
-  })
+    return request({
+        url: '/api/galaxy-business/rtu/manage/update',
+        method: 'post',
+        data: row
+    })
 }
 
 export const getDetail = (id) => {
-  return request({
-    url: '/api/galaxy-test/rtu/manage/detail',
-    method: 'get',
-    params: {
-      id
-    }
-  })
+    return request({
+        url: '/api/galaxy-business/rtu/manage/detail',
+        method: 'get',
+        params: {
+            id
+        }
+    })
 }
 
+export const equipmentExport = (adCode, adName) => {
+    return request({
+        url: '/api/galaxy-business/rtu/manage/equipmentlist/export',
+        method: 'get',
+        params: {
+            adCode,
+            adName
+        }
+    })
+}
+
+export const getCountInfo = (adCode) => {
+    return request({
+        url: '/api/galaxy-business/rtu/manage/count',
+        method: 'get',
+        params: {
+            adCode
+        }
+    })
+}
+
+export const getRtuReplaceList = (params) => {
+    return request({
+        url: '/api/galaxy-business/rtu/manage/rtu/replace/list',
+        method: 'get',
+        params: {
+            ...params,
+        }
+    })
+}
+
+export const getRainSensorReplaceList = (params) => {
+    return request({
+        url: '/api/galaxy-business/rtu/manage/rainsensor/replace/list',
+        method: 'get',
+        params: {
+            ...params,
+        }
+    })
+}
+
+export const getWaterSensorReplaceList = (params) => {
+    return request({
+        url: '/api/galaxy-business/rtu/manage/watersensor/replace/list',
+        method: 'get',
+        params: {
+            ...params,
+        }
+    })
+}
+
+export const getGroundSensorReplaceList = (params) => {
+    return request({
+        url: '/api/galaxy-business/rtu/manage/groundsensor/replace/list',
+        method: 'get',
+        params: {
+            ...params,
+        }
+    })
+}
+
+export const getBatteryReplaceList = (params) => {
+    return request({
+        url: '/api/galaxy-business/rtu/manage/battery/replace/list',
+        method: 'get',
+        params: {
+            ...params,
+        }
+    })
+}
+
+
+
+
+

+ 67 - 6
src/api/business/order/order.js

@@ -2,7 +2,7 @@ import request from '@/router/axios';
 
 export const getPage = (current, size, params) => {
     return request({
-        url: '/api/galaxy-test/rtu/check/order/page',
+        url: '/api/galaxy-business/rtu/check/order/page',
         method: 'get',
         params: {
             ...params,
@@ -12,9 +12,22 @@ export const getPage = (current, size, params) => {
     })
 }
 
+export const getConfirmDelayPage = (current, size, params) => {
+    return request({
+        url: '/api/galaxy-business/rtu/check/order/confirm/delay/page',
+        method: 'get',
+        params: {
+            ...params,
+            current,
+            size,
+        }
+    })
+}
+
+
 export const remove = (ids) => {
     return request({
-        url: '/api/galaxy-test/rtu/check/order/remove',
+        url: '/api/galaxy-business/rtu/check/order/remove',
         method: 'post',
         params: {
             ids,
@@ -24,7 +37,7 @@ export const remove = (ids) => {
 
 export const add = (row) => {
     return request({
-        url: '/api/galaxy-test/rtu/check/order/save',
+        url: '/api/galaxy-business/rtu/check/order/save',
         method: 'post',
         data: row
     })
@@ -32,7 +45,7 @@ export const add = (row) => {
 
 export const update = (row) => {
     return request({
-        url: '/api/galaxy-test/rtu/check/order/update',
+        url: '/api/galaxy-business/rtu/check/order/update',
         method: 'post',
         data: row
     })
@@ -40,7 +53,7 @@ export const update = (row) => {
 
 export const getDetail = (id) => {
     return request({
-        url: '/api/galaxy-test/rtu/check/order/detail',
+        url: '/api/galaxy-business/rtu/check/order/detail',
         method: 'get',
         params: {
             id
@@ -48,10 +61,24 @@ export const getDetail = (id) => {
     })
 }
 
+export const getSettingDetail = () => {
+    return request({
+        url: '/api/galaxy-business/rtu/check/order/setting/detail',
+        method: 'get',
+    })
+}
+
+export const submitSetting = (data) => {
+    return request({
+        url: '/api/galaxy-business/rtu/check/order/setting/submit',
+        method: 'post',
+        data: data
+    })
+}
 
 export const orderClose = (params) => {
     return request({
-        url: '/api/galaxy-test/rtu/check/order/close',
+        url: '/api/galaxy-business/rtu/check/order/close',
         method: 'post',
         params: {
             ...params,
@@ -59,5 +86,39 @@ export const orderClose = (params) => {
     })
 }
 
+export const orderChange = (params) => {
+    return request({
+        url: '/api/galaxy-business/rtu/check/order/change',
+        method: 'post',
+        data: params
+    })
+}
+
+export const todayOrderList = () => {
+    return request({
+        url: '/api/galaxy-business/rtu/check/order/today/list',
+        method: 'get',
+    })
+}
+
+export const getCountInfo = (adCode) => {
+    return request({
+        url: '/api/galaxy-business/rtu/check/order/count',
+        method: 'get',
+        params: {
+            adCode
+        }
+    })
+}
+
+
+export const manuallyOrder = (data) => {
+    return request({
+        url: '/api/galaxy-business/rtu/check/order/manually',
+        method: 'post',
+        data: data
+    })
+}
+
 
 

+ 64 - 5
src/api/business/order/process.js

@@ -2,7 +2,7 @@ import request from '@/router/axios';
 
 export const getPage = (current, size, params) => {
     return request({
-        url: '/api/galaxy-test/rtu/check/order/process/page',
+        url: '/api/galaxy-business/rtu/check/order/process/page',
         method: 'get',
         params: {
             ...params,
@@ -12,9 +12,19 @@ export const getPage = (current, size, params) => {
     })
 }
 
+export const getList = (params) => {
+    return request({
+        url: '/api/galaxy-business/rtu/check/order/process/list',
+        method: 'get',
+        params: {
+            ...params,
+        }
+    })
+}
+
 export const remove = (ids) => {
     return request({
-        url: '/api/galaxy-test/rtu/check/order/process/remove',
+        url: '/api/galaxy-business/rtu/check/order/process/remove',
         method: 'post',
         params: {
             ids,
@@ -24,7 +34,7 @@ export const remove = (ids) => {
 
 export const add = (row) => {
     return request({
-        url: '/api/galaxy-test/rtu/check/order/process/save',
+        url: '/api/galaxy-business/rtu/check/order/process/save',
         method: 'post',
         data: row
     })
@@ -32,7 +42,7 @@ export const add = (row) => {
 
 export const update = (row) => {
     return request({
-        url: '/api/galaxy-test/rtu/check/order/process/update',
+        url: '/api/galaxy-business/rtu/check/order/process/update',
         method: 'post',
         data: row
     })
@@ -40,7 +50,7 @@ export const update = (row) => {
 
 export const getDetail = (id) => {
     return request({
-        url: '/api/galaxy-test/rtu/check/order/process/detail',
+        url: '/api/galaxy-business/rtu/check/order/process/detail',
         method: 'get',
         params: {
             id
@@ -48,3 +58,52 @@ export const getDetail = (id) => {
     })
 }
 
+export const todayOrderProcessList = (data) => {
+    return request({
+        url: '/api/galaxy-business/rtu/check/order/process/today/list',
+        method: 'get',
+        params: data,
+    })
+}
+
+export const todayOrderProcessPage = (current, size, params) => {
+    return request({
+        url: '/api/galaxy-business/rtu/check/order/process/today/page',
+        method: 'get',
+        params: {
+            ...params,
+            current,
+            size,
+        }
+    })
+}
+
+export const getNoNetworkSignalReportPage = (current, size, params) => {
+    return request({
+        url: '/api/galaxy-business/rtu/check/order/process/nonetworksignal/page',
+        method: 'get',
+        params: {
+            ...params,
+            current,
+            size,
+        }
+    })
+}
+
+export const closeNonetworksignalPhotoSubmit = (params) => {
+    return request({
+        url: '/api/galaxy-business/rtu/check/order/process/nonetworksignal/close',
+        method: 'post',
+        data: params
+    })
+}
+
+export const nonetworksignalPhotoUpdate = (row) => {
+    return request({
+        url: '/api/galaxy-business/rtu/check/order/process/nonetworksignal/photo/update',
+        method: 'post',
+        data: row
+    })
+}
+
+

+ 25 - 0
src/api/business/warning/warning.js

@@ -0,0 +1,25 @@
+import request from '@/router/axios';
+
+export const getPage = (current, size, params) => {
+    return request({
+        url: '/api/galaxy-business/rtu/warning/page',
+        method: 'get',
+        params: {
+            current,
+            size,
+            ...params
+        }
+    })
+}
+
+export const getDetail = (id) => {
+    return request({
+        url: '/api/galaxy-business/rtu/warning/detail',
+        method: 'get',
+        params: {
+            id
+        }
+    })
+}
+
+

+ 10 - 1
src/api/data/dataGround.js

@@ -2,7 +2,7 @@ import request from '@/router/axios';
 
 export const getPage = (current, size, params) => {
     return request({
-        url: '/api/galaxy-test/rtu/data/ground/page',
+        url: '/api/galaxy-business/rtu/data/ground/page',
         method: 'get',
         params: {
             ...params,
@@ -12,3 +12,12 @@ export const getPage = (current, size, params) => {
     })
 }
 
+export const getDetail = (rtuCode) => {
+    return request({
+        url: '/api/galaxy-business/rtu/data/ground/detail',
+        method: 'get',
+        params: {
+            rtuCode
+        }
+    })
+}

+ 10 - 1
src/api/data/dataRain.js

@@ -2,7 +2,7 @@ import request from '@/router/axios';
 
 export const getPage = (current, size, params) => {
     return request({
-        url: '/api/galaxy-test/rtu/data/rain/page',
+        url: '/api/galaxy-business/rtu/data/rain/page',
         method: 'get',
         params: {
             ...params,
@@ -12,3 +12,12 @@ export const getPage = (current, size, params) => {
     })
 }
 
+export const getDetail = (rtuCode) => {
+    return request({
+        url: '/api/galaxy-business/rtu/data/rain/detail',
+        method: 'get',
+        params: {
+            rtuCode
+        }
+    })
+}

+ 10 - 1
src/api/data/dataRiver.js

@@ -2,7 +2,7 @@ import request from '@/router/axios';
 
 export const getPage = (current, size, params) => {
     return request({
-        url: '/api/galaxy-test/rtu/data/river/page',
+        url: '/api/galaxy-business/rtu/data/river/page',
         method: 'get',
         params: {
             ...params,
@@ -12,3 +12,12 @@ export const getPage = (current, size, params) => {
     })
 }
 
+export const getDetail = (rtuCode) => {
+    return request({
+        url: '/api/galaxy-business/rtu/data/river/detail',
+        method: 'get',
+        params: {
+            rtuCode
+        }
+    })
+}

+ 10 - 1
src/api/data/dataRsvr.js

@@ -2,7 +2,7 @@ import request from '@/router/axios';
 
 export const getPage = (current, size, params) => {
     return request({
-        url: '/api/galaxy-test/rtu/data/rsvr/page',
+        url: '/api/galaxy-business/rtu/data/rsvr/page',
         method: 'get',
         params: {
             ...params,
@@ -12,3 +12,12 @@ export const getPage = (current, size, params) => {
     })
 }
 
+export const getDetail = (rtuCode) => {
+    return request({
+        url: '/api/galaxy-business/rtu/data/rsvr/detail',
+        method: 'get',
+        params: {
+            rtuCode
+        }
+    })
+}

+ 27 - 0
src/api/data/rtuImport.js

@@ -0,0 +1,27 @@
+import request from '@/router/axios';
+
+export const getPage = (current, size, params) => {
+    return request({
+        url: '/api/galaxy-business/data/manage/page',
+        method: 'get',
+        params: {
+            ...params,
+            current,
+            size,
+        }
+    })
+}
+
+
+export const getDetailPage = (current, size, params) => {
+    return request({
+        url: '/api/galaxy-business/data/manage/detail/page',
+        method: 'get',
+        params: {
+            ...params,
+            current,
+            size,
+        }
+    })
+}
+

+ 7 - 7
src/api/home/home.js

@@ -4,14 +4,14 @@ import request from '@/router/axios';
 
 export const getList = () => {
     return request({
-        url: '/api/galaxy-test/equipment/inspection/plan/all/list',
+        url: '/api/galaxy-business/equipment/inspection/plan/all/list',
         method: 'get',
     })
 }
 
 export const getPage = (current, size, params) => {
     return request({
-        url: '/api/galaxy-test/equipment/inspection/plan/page',
+        url: '/api/galaxy-business/equipment/inspection/plan/page',
         method: 'get',
         params: {
             ...params,
@@ -23,7 +23,7 @@ export const getPage = (current, size, params) => {
 
 export const remove = (ids) => {
     return request({
-        url: '/api/galaxy-test/equipment/inspection/plan/remove',
+        url: '/api/galaxy-business/equipment/inspection/plan/remove',
         method: 'post',
         params: {
             ids,
@@ -33,7 +33,7 @@ export const remove = (ids) => {
 
 export const add = (row) => {
     return request({
-        url: '/api/galaxy-test/equipment/inspection/plan/save',
+        url: '/api/galaxy-business/equipment/inspection/plan/save',
         method: 'post',
         data: row
     })
@@ -41,7 +41,7 @@ export const add = (row) => {
 
 export const update = (row) => {
     return request({
-        url: '/api/galaxy-test/equipment/inspection/plan/update',
+        url: '/api/galaxy-business/equipment/inspection/plan/update',
         method: 'post',
         data: row
     })
@@ -49,7 +49,7 @@ export const update = (row) => {
 
 export const getDetail = (id) => {
     return request({
-        url: '/api/galaxy-test/equipment/inspection/plan/detail',
+        url: '/api/galaxy-business/equipment/inspection/plan/detail',
         method: 'get',
         params: {
             id
@@ -61,7 +61,7 @@ export const getRealData = () => {
 
 
     return request({
-        url: '/api/galaxy-test/real/data/home/info',
+        url: '/api/galaxy-business/home/real/info',
         method: 'get',
 
     })

+ 77 - 0
src/api/notice/notice.js

@@ -0,0 +1,77 @@
+import request from '@/router/axios';
+
+export const getPage = (current, size, params) => {
+    return request({
+        url: '/api/galaxy-business/notice/page',
+        method: 'get',
+        params: {
+            ...params,
+            current,
+            size,
+        }
+    })
+}
+
+export const getList = (current, size, params) => {
+    return request({
+        url: '/api/galaxy-business/notice/list',
+        method: 'get',
+        params: {
+            ...params,
+            current,
+            size,
+        }
+    })
+}
+
+export const remove = (ids) => {
+    return request({
+        url: '/api/galaxy-business/notice/remove',
+        method: 'post',
+        params: {
+            ids,
+        }
+    })
+}
+
+export const add = (row) => {
+    return request({
+        url: '/api/galaxy-business/notice/save',
+        method: 'post',
+        data: row
+    })
+}
+
+export const update = (row) => {
+    return request({
+        url: '/api/galaxy-business/notice/submit',
+        method: 'post',
+        data: row
+    })
+}
+
+export const getNotice = (id) => {
+    return request({
+        url: '/api/galaxy-business/notice/detail',
+        method: 'get',
+        params: {
+            id
+        }
+    })
+}
+
+export const getLastList = (limit) => {
+    return request({
+        url: '/api/galaxy-business/notice/last/list?limit=' + limit,
+        method: 'get',
+    })
+}
+
+export const getTodayList = () => {
+    return request({
+        url: '/api/galaxy-business/notice/today/list',
+        method: 'get',
+    })
+}
+
+

+ 13 - 0
src/api/notice/noticeattach.js

@@ -0,0 +1,13 @@
+import request from '@/router/axios';
+
+export const getPage = (current, size, params) => {
+    return request({
+        url: '/api/galaxy-business/notice/attach/page',
+        method: 'get',
+        params: {
+            ...params,
+            current,
+            size,
+        }
+    })
+}

+ 0 - 57
src/api/project/projectPlan.js

@@ -1,57 +0,0 @@
-import request from '@/router/axios';
-
-export const getList = () => {
-    return request({
-        url: '/api/galaxy-test/equipment/inspection/plan/all/list',
-        method: 'get',
-    })
-}
-
-export const getPage = (current, size, params) => {
-    return request({
-        url: '/api/galaxy-test/equipment/inspection/plan/page',
-        method: 'get',
-        params: {
-            ...params,
-            current,
-            size,
-        }
-    })
-}
-
-export const remove = (ids) => {
-    return request({
-        url: '/api/galaxy-test/equipment/inspection/plan/remove',
-        method: 'post',
-        params: {
-            ids,
-        }
-    })
-}
-
-export const add = (row) => {
-    return request({
-        url: '/api/galaxy-test/equipment/inspection/plan/save',
-        method: 'post',
-        data: row
-    })
-}
-
-export const update = (row) => {
-    return request({
-        url: '/api/galaxy-test/equipment/inspection/plan/update',
-        method: 'post',
-        data: row
-    })
-}
-
-export const getDetail = (id) => {
-    return request({
-        url: '/api/galaxy-test/equipment/inspection/plan/detail',
-        method: 'get',
-        params: {
-            id
-        }
-    })
-}
-

+ 23 - 0
src/api/versionmanage/version.js

@@ -0,0 +1,23 @@
+import request from '@/router/axios';
+
+export const getPage = (current, size, params) => {
+    return request({
+        url: '/api/galaxy-business/version/page',
+        method: 'get',
+        params: {
+            ...params,
+            current,
+            size,
+        }
+    })
+}
+
+
+export const getAppInfo = () => {
+    return request({
+        url: '/api/galaxy-business/version/app',
+        method: 'get',
+    })
+}
+
+

+ 7 - 7
src/api/warning/originalWarnInfo.js

@@ -2,7 +2,7 @@ import request from '@/router/axios';
 
 export const getPage = (current, size, params) => {
     return request({
-        url: '/api/galaxy-test/rtu/warning/page',
+        url: '/api/galaxy-business/rtu/warning/page',
         method: 'get',
         params: {
             current,
@@ -15,7 +15,7 @@ export const getPage = (current, size, params) => {
 
 export const getDetail = (params) => {
     return request({
-        url: '/api/galaxy-test/rtu/warning/detail',
+        url: '/api/galaxy-business/rtu/warning/detail',
         method: 'get',
         params: {
 
@@ -34,7 +34,7 @@ export const getDetail = (params) => {
 // 维修列表
 export const getOrderList = (current, size, params) => {
     return request({
-        url: '/api/galaxy-test/rtu/check/order/page',
+        url: '/api/galaxy-business/rtu/check/order/page',
         method: 'get',
         params: {
             current,
@@ -47,7 +47,7 @@ export const getOrderList = (current, size, params) => {
 // 维修列表
 export const getProcessList = (current, size, params) => {
     return request({
-        url: '/api/galaxy-test/rtu/check/order/process/page',
+        url: '/api/galaxy-business/rtu/check/order/process/page',
         method: 'get',
         params: {
             current,
@@ -61,7 +61,7 @@ export const getProcessList = (current, size, params) => {
 // 维修工单关闭
 export const close = (params) => {
     return request({
-        url: '/api/galaxy-test/rtu/check/order/close',
+        url: '/api/galaxy-business/rtu/check/order/close',
         method: 'post',
         data: {
             ...params
@@ -71,7 +71,7 @@ export const close = (params) => {
 
 export const remove = (params) => {
     return request({
-        url: '/api/galaxy-test/rtu/check/order/close',
+        url: '/api/galaxy-business/rtu/check/order/close',
         method: 'post',
         data: {
             ...params
@@ -83,7 +83,7 @@ export const remove = (params) => {
 // 预警信息
 export const getWrningInfo = (params) => {
     return request({
-        url: '/api/galaxy-test/rtu/warning/page',
+        url: '/api/galaxy-business/rtu/warning/page',
         method: 'post',
         data: {
             ...params

+ 7 - 7
src/api/warning/warning.js

@@ -2,7 +2,7 @@ import request from '@/router/axios';
 
 export const getPage = (current, size, params) => {
     return request({
-        url: '/api/galaxy-test/rtu/warning/page',
+        url: '/api/galaxy-business/rtu/warning/page',
         method: 'get',
         params: {
             current,
@@ -15,7 +15,7 @@ export const getPage = (current, size, params) => {
 
 export const getDetail = (params) => {
     return request({
-        url: '/api/galaxy-test/rtu/warning/detail',
+        url: '/api/galaxy-business/rtu/warning/detail',
         method: 'get',
         params: {
 
@@ -34,7 +34,7 @@ export const getDetail = (params) => {
 // 维修列表
 export const getOrderList = (current, size, params) => {
     return request({
-        url: '/api/galaxy-test/rtu/check/order/page',
+        url: '/api/galaxy-business/rtu/check/order/page',
         method: 'get',
         params: {
             current,
@@ -47,7 +47,7 @@ export const getOrderList = (current, size, params) => {
 // 维修列表
 export const getProcessList = (current, size, params) => {
     return request({
-        url: '/api/galaxy-test/rtu/check/order/process/page',
+        url: '/api/galaxy-business/rtu/check/order/process/page',
         method: 'get',
         params: {
             current,
@@ -61,7 +61,7 @@ export const getProcessList = (current, size, params) => {
 // 维修工单关闭
 export const close = (params) => {
     return request({
-        url: '/api/galaxy-test/rtu/check/order/close',
+        url: '/api/galaxy-business/rtu/check/order/close',
         method: 'post',
         data: {
             ...params
@@ -71,7 +71,7 @@ export const close = (params) => {
 
 export const remove = (params) => {
     return request({
-        url: '/api/galaxy-test/rtu/check/order/close',
+        url: '/api/galaxy-business/rtu/check/order/close',
         method: 'post',
         data: {
             ...params
@@ -83,7 +83,7 @@ export const remove = (params) => {
 // 预警信息
 export const getWrningInfo = (params) => {
     return request({
-        url: '/api/galaxy-test/rtu/warning/page',
+        url: '/api/galaxy-business/rtu/warning/page',
         method: 'post',
         data: {
             ...params

+ 4 - 3
src/config/website.js

@@ -6,10 +6,10 @@
  * 全局配置文件
  */
 export default {
-    title: "运维系统",
+    title: "内蒙山洪运维",
     logo: "S",
     key: 'galaxy',//配置主键,目前用于存储
-    indexTitle: '运维系统',
+    indexTitle: '内蒙山洪运维',
     clientId: 'saber', // 客户端id
     clientSecret: 'saber_secret', // 客户端密钥
     tenantMode: false, // 是否开启租户模式
@@ -50,7 +50,8 @@ export default {
     reportUrl: 'http://localhost:8000/ureport',
 
     //文件存储服务器地址,末尾必须/
-    ossServer: 'http://localhost:9000/galaxy/',
+    //ossServer: 'http://172.9.0.165:80/oss/galaxy/',
+    ossServer: 'https://nmwx.dahengsi.com:20001/oss/galaxy/',
     //文件预览服务器地址
     kkfileviewServer: 'http://localhost:8012',
 

+ 103 - 102
src/lang/zh.js

@@ -1,109 +1,110 @@
 export default {
-  tip: '提示',
-  title: '运维系统',
-  logoutTip: '退出系统, 是否继续?',
-  submitText: '确定',
-  cancelText: '取消',
-  search: '请输入搜索内容',
-  menuTip: '没有发现菜单',
-  wel: {
-    info: '早安,Smallwei,Avuex一款超乎你想象的框架!',
-    dept: '我是avue团队下的一个部门-哈皮部门-哈皮职位',
-    team: '团队内排名',
-    project: '项目访问',
-    count: '项目数',
-    data: {
-      subtitle: '实时',
-      column1: '分类统计',
-      column2: '附件统计',
-      column3: '文章统计',
-      key1: '分',
-      key2: '附',
-      key3: '评',
-      text1: '当前分类总记录数',
-      text2: '当前上传的附件数',
-      text3: '评论次数'
+    tip: '提示',
+    title: '内蒙山洪运维',
+    logoutTip: '退出系统, 是否继续?',
+    submitText: '确定',
+    cancelText: '取消',
+    search: '请输入搜索内容',
+    menuTip: '没有发现菜单',
+    wel: {
+        info: '早安,Smallwei,Avuex一款超乎你想象的框架!',
+        dept: '我是avue团队下的一个部门-哈皮部门-哈皮职位',
+        team: '团队内排名',
+        project: '项目访问',
+        count: '项目数',
+        data: {
+            subtitle: '实时',
+            column1: '分类统计',
+            column2: '附件统计',
+            column3: '文章统计',
+            key1: '分',
+            key2: '附',
+            key3: '评',
+            text1: '当前分类总记录数',
+            text2: '当前上传的附件数',
+            text3: '评论次数'
+        },
+        data2: {
+            column1: '今日注册',
+            column2: '今日登录',
+            column3: '今日订阅',
+            column4: '今日评论'
+        },
+        data3: {
+            column1: '转化率(日同比 28%)',
+            column2: '签到率(日同比 11%)',
+            column3: '签到率(日同比 11%)'
+        },
+        data4: {
+            column1: '错误日志',
+            column2: '数据展示',
+            column3: '权限管理',
+            column4: '用户管理'
+        },
+        table: {
+            rw: '工作任务',
+            nr: '工作内容',
+            sj: '工作时间'
+        }
     },
-    data2: {
-      column1: '今日注册',
-      column2: '今日登录',
-      column3: '今日订阅',
-      column4: '今日评论'
+    route: {
+        info: '个人信息',
+        website: 'galaxy官网',
+        avuexwebsite: 'avuex官网',
+        dashboard: '首页',
+        more: '更多',
+        tags: '标签',
+        store: '本地存储',
+        api: '全局函数',
+        logs: '日志监控',
+        table: '表格',
+        form: '表单',
+        top: '返回顶部',
+        data: '数据展示',
+        permission: '权限',
+        error: '异常页面',
+        test: '测试页面'
     },
-    data3: {
-      column1: '转化率(日同比 28%)',
-      column2: '签到率(日同比 11%)',
-      column3: '签到率(日同比 11%)'
+    login: {
+        title: '登录',
+        info: '内蒙古自治区',
+        subInfo: '山洪灾害监测预警平台运维系统',
+        tenantId: '请输入租户ID',
+        username: '请输入账号',
+        password: '请输入密码',
+        wechat: '微信',
+        qq: 'QQ',
+        github: 'github',
+        gitee: '码云',
+        phone: '请输入手机号',
+        code: '请输入验证码',
+        submit: '登录',
+        userLogin: '账号密码登录',
+        phoneLogin: '手机号登录',
+        thirdLogin: '第三方系统登录',
+        msgText: '发送验证码',
+        msgSuccess: '秒后重发',
     },
-    data4: {
-      column1: '错误日志',
-      column2: '数据展示',
-      column3: '权限管理',
-      column4: '用户管理'
+    navbar: {
+        logOut: '退出登录',
+        userinfo: '个人信息',
+        switchDept: '部门切换',
+        dashboard: '首页',
+        lock: '锁屏',
+        bug: '没有错误日志',
+        bugs: '条错误日志',
+        screenfullF: '退出全屏',
+        screenfull: '全屏',
+        language: '中英文',
+        notice: '消息通知',
+        theme: '主题',
+        color: '换色'
     },
-    table: {
-      rw: '工作任务',
-      nr: '工作内容',
-      sj: '工作时间'
+    tagsView: {
+        search: '搜索',
+        menu: '更多',
+        clearCache: '清除缓存',
+        closeOthers: '关闭其它',
+        closeAll: '关闭所有'
     }
-  },
-  route: {
-    info: '个人信息',
-    website: 'galaxy官网',
-    avuexwebsite: 'avuex官网',
-    dashboard: '首页',
-    more: '更多',
-    tags: '标签',
-    store: '本地存储',
-    api: '全局函数',
-    logs: '日志监控',
-    table: '表格',
-    form: '表单',
-    top: '返回顶部',
-    data: '数据展示',
-    permission: '权限',
-    error: '异常页面',
-    test: '测试页面'
-  },
-  login: {
-    title: '登录 ',
-    info: '山洪灾害监测预警平台运维系统',
-    tenantId: '请输入租户ID',
-    username: '请输入账号',
-    password: '请输入密码',
-    wechat: '微信',
-    qq: 'QQ',
-    github: 'github',
-    gitee: '码云',
-    phone: '请输入手机号',
-    code: '请输入验证码',
-    submit: '登录',
-    userLogin: '账号密码登录',
-    phoneLogin: '手机号登录',
-    thirdLogin: '第三方系统登录',
-    msgText: '发送验证码',
-    msgSuccess: '秒后重发',
-  },
-  navbar: {
-    logOut: '退出登录',
-    userinfo: '个人信息',
-    switchDept : '部门切换',
-    dashboard: '首页',
-    lock: '锁屏',
-    bug: '没有错误日志',
-    bugs: '条错误日志',
-    screenfullF: '退出全屏',
-    screenfull: '全屏',
-    language: '中英文',
-    notice: '消息通知',
-    theme: '主题',
-    color: '换色'
-  },
-  tagsView: {
-    search: '搜索',
-    menu: '更多',
-    clearCache: '清除缓存',
-    closeOthers: '关闭其它',
-    closeAll: '关闭所有'
-  }
 }

+ 1076 - 0
src/libs/webgl/OrbitControls.js

@@ -0,0 +1,1076 @@
+/**
+ * @author qiao / https://github.com/qiao
+ * @author mrdoob / http://mrdoob.com
+ * @author alteredq / http://alteredqualia.com/
+ * @author WestLangley / http://github.com/WestLangley
+ * @author erich666 / http://erichaines.com
+ */
+
+// This set of controls performs orbiting, dollying (zooming), and panning.
+// Unlike TrackballControls, it maintains the "up" direction object.up (+Y by default).
+//
+//    Orbit - left mouse / touch: one-finger move
+//    Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish
+//    Pan - right mouse, or arrow keys / touch: two-finger move
+
+
+
+THREE.OrbitControls = function ( object, domElement ) {
+// object:指定相机对象,比如多个相机对象(场景相机对象、UI相机对象),只有一个起作用
+
+	this.object = object;
+	// domElement:指定鼠标事件起作用的范围,默认是整个document,所有html元素
+	// 比如3D建模软件,可以把范围指定为renderer.domElement,渲染器引用render的domElement属性引用指向绘图区canvas
+	this.domElement = ( domElement !== undefined ) ? domElement : document;
+
+	// Set to false to disable this control
+	// 设置为false以禁用此控件
+	this.enabled = true;
+
+	// "target" sets the location of focus, where the object orbits around
+	// "target"设置对象绕过的焦点位置
+	// 与lookAt相关:.lookAt( scope.target );   视角绕着谁旋转
+	// 平移之后,旋转中心仍然是默认的原点,是否可以以鼠标为中心
+	// 缩放的中心也是原点   能不能也改成以鼠标为中心
+	// 任何时候都以鼠标为中心进行旋转、缩放、平移
+	this.target = new THREE.Vector3();
+
+	// How far you can dolly in and out ( PerspectiveCamera only )
+	// 您可以进出多远(仅限PerspectiveCamera)
+	this.minDistance = 0;
+	this.maxDistance = Infinity;
+
+	// How far you can zoom in and out ( OrthographicCamera only )
+	// 您可以放大或缩小多少(仅限OrthographicCamera)
+	// 相对你原来设置相机视觉效果  设置缩放倍数
+	// 比如商品展示  0.5~2之间
+	this.minZoom = 0;
+	this.maxZoom = Infinity;
+
+	// How far you can orbit vertically, upper and lower limits.
+	// Range is 0 to Math.PI radians.
+	//你可以垂直绕行多远,上限和下限。
+//范围从0到Math.PI弧度。
+	// 上下旋转范围
+	this.minPolarAngle = 0; // radians
+	this.maxPolarAngle = Math.PI; // radians
+
+	// How far you can orbit horizontally, upper and lower limits.
+	// If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ].
+	//你可以绕水平方向运行多远,上限和下限。
+	//如果设置,则必须是区间[ - Math.PI,Math.PI]的子区间。
+
+	// 左右旋转范围
+	this.minAzimuthAngle = - Infinity; // radians
+	this.maxAzimuthAngle = Infinity; // radians
+
+	// Set to true to enable damping (inertia)
+	// If damping is enabled, you must call controls.update() in your animation loop
+	//设置为true以启用阻尼(惯性)
+	//如果启用阻尼,则必须在动画循环中调用controls.update()
+	this.enableDamping = false;
+	this.dampingFactor = 0.25;
+
+	// This option actually enables dollying in and out; left as "zoom" for backwards compatibility.
+	// Set to false to disable zooming
+	//这个选项实际上可以使进出进入; 为了向后兼容,保留为“缩放”。
+//设置为false以禁用缩放
+	this.enableZoom = true;
+	this.zoomSpeed = 1.0;
+
+	// Set to false to disable rotating
+	//设置为false以禁用旋转
+	this.enableRotate = true;
+	this.rotateSpeed = 1.0;
+
+	// Set to false to disable panning平移
+	this.enablePan = true;
+	this.panSpeed = 1.0;
+	// 如果为true,则在屏幕空间中平移
+	this.screenSpacePanning = false; // if true, pan in screen-space
+	this.keyPanSpeed = 7.0;	// pixels moved per arrow key push 像素按箭头键移动
+
+	// Set to true to automatically rotate around the target
+	// If auto-rotate is enabled, you must call controls.update() in your animation loop
+	//设置为true以自动围绕目标旋转
+//如果启用自动旋转,则必须在动画循环中调用controls.update()
+	this.autoRotate = false;
+	// 当fps是60时,每轮30秒
+	this.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60
+
+	// Set to false to disable use of the keys禁用键使用
+	this.enableKeys = true;
+
+	// The four arrow keys  四个箭头键
+	this.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 };
+
+	// Mouse buttons
+	// orbit:轨道    ZOOM:放大   pan对应平移
+	// 给特定的键命名
+	this.mouseButtons = { ORBIT: THREE.MOUSE.LEFT, ZOOM: THREE.MOUSE.MIDDLE, PAN: THREE.MOUSE.RIGHT };
+
+	// for reset  用于复位、重置
+	this.target0 = this.target.clone();
+	this.position0 = this.object.position.clone();
+	this.zoom0 = this.object.zoom;
+
+	//
+	// public methods
+	//
+// getPolarAngle获得极化角    Polar:极地的
+	this.getPolarAngle = function () {
+// phi:表示希腊文的第21个字母,角度φ
+// spherical:球形的
+		return spherical.phi;
+
+	};
+// Azimuthal:方位角
+	this.getAzimuthalAngle = function () {
+
+		return spherical.theta;
+
+	};
+// 记录目标点、相机位置、相机缩放状态
+	this.saveState = function () {
+
+		scope.target0.copy( scope.target );
+		scope.position0.copy( scope.object.position );
+		scope.zoom0 = scope.object.zoom;
+
+	};
+// 重置
+	this.reset = function () {
+
+		scope.target.copy( scope.target0 );
+		scope.object.position.copy( scope.position0 );
+		scope.object.zoom = scope.zoom0;
+
+		scope.object.updateProjectionMatrix();
+		scope.dispatchEvent( changeEvent );
+
+		scope.update();
+
+		state = STATE.NONE;
+
+	};
+
+	// this method is exposed, but perhaps it would be better if we can make it private...
+	this.update = function () {
+
+		var offset = new THREE.Vector3();
+
+		// so camera.up is the orbit axis
+		var quat = new THREE.Quaternion().setFromUnitVectors( object.up, new THREE.Vector3( 0, 1, 0 ) );
+		var quatInverse = quat.clone().inverse();
+
+		var lastPosition = new THREE.Vector3();
+		var lastQuaternion = new THREE.Quaternion();
+
+		return function update() {
+
+			var position = scope.object.position;
+
+			offset.copy( position ).sub( scope.target );
+
+			// rotate offset to "y-axis-is-up" space
+			offset.applyQuaternion( quat );
+
+			// angle from z-axis around y-axis
+			spherical.setFromVector3( offset );
+
+			if ( scope.autoRotate && state === STATE.NONE ) {
+
+				rotateLeft( getAutoRotationAngle() );
+
+			}
+
+			spherical.theta += sphericalDelta.theta;
+			spherical.phi += sphericalDelta.phi;
+
+			// restrict theta to be between desired limits
+			spherical.theta = Math.max( scope.minAzimuthAngle, Math.min( scope.maxAzimuthAngle, spherical.theta ) );
+
+			// restrict phi to be between desired limits
+			spherical.phi = Math.max( scope.minPolarAngle, Math.min( scope.maxPolarAngle, spherical.phi ) );
+
+			spherical.makeSafe();
+
+
+			spherical.radius *= scale;
+
+			// restrict radius to be between desired limits
+			spherical.radius = Math.max( scope.minDistance, Math.min( scope.maxDistance, spherical.radius ) );
+
+			// move target to panned location
+			scope.target.add( panOffset );
+
+			offset.setFromSpherical( spherical );
+
+			// rotate offset back to "camera-up-vector-is-up" space
+			offset.applyQuaternion( quatInverse );
+
+			position.copy( scope.target ).add( offset );
+
+			scope.object.lookAt( scope.target );
+
+			if ( scope.enableDamping === true ) {
+
+				sphericalDelta.theta *= ( 1 - scope.dampingFactor );
+				sphericalDelta.phi *= ( 1 - scope.dampingFactor );
+
+				panOffset.multiplyScalar( 1 - scope.dampingFactor );
+
+			} else {
+
+				sphericalDelta.set( 0, 0, 0 );
+
+				panOffset.set( 0, 0, 0 );
+
+			}
+
+			scale = 1;
+
+			// update condition is:
+			// min(camera displacement, camera rotation in radians)^2 > EPS
+			// using small-angle approximation cos(x/2) = 1 - x^2 / 8
+
+			if ( zoomChanged ||
+				lastPosition.distanceToSquared( scope.object.position ) > EPS ||
+				8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ) {
+
+				scope.dispatchEvent( changeEvent );
+
+				lastPosition.copy( scope.object.position );
+				lastQuaternion.copy( scope.object.quaternion );
+				zoomChanged = false;
+
+				return true;
+
+			}
+
+			return false;
+
+		};
+
+	}();
+
+	this.dispose = function () {
+
+		scope.domElement.removeEventListener( 'contextmenu', onContextMenu, false );
+		scope.domElement.removeEventListener( 'mousedown', onMouseDown, false );
+		scope.domElement.removeEventListener( 'wheel', onMouseWheel, false );
+
+		scope.domElement.removeEventListener( 'touchstart', onTouchStart, false );
+		scope.domElement.removeEventListener( 'touchend', onTouchEnd, false );
+		scope.domElement.removeEventListener( 'touchmove', onTouchMove, false );
+
+		document.removeEventListener( 'mousemove', onMouseMove, false );
+		document.removeEventListener( 'mouseup', onMouseUp, false );
+
+		window.removeEventListener( 'keydown', onKeyDown, false );
+
+		//scope.dispatchEvent( { type: 'dispose' } ); // should this be added here?
+
+	};
+
+	//
+	// internals
+	//
+
+	var scope = this;
+
+	var changeEvent = { type: 'change' };
+	var startEvent = { type: 'start' };
+	var endEvent = { type: 'end' };
+
+	var STATE = { NONE: - 1, ROTATE: 0, DOLLY: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_DOLLY_PAN: 4 };
+
+	var state = STATE.NONE;
+
+	var EPS = 0.000001;
+
+	// current position in spherical coordinates
+	var spherical = new THREE.Spherical();
+	var sphericalDelta = new THREE.Spherical();
+
+	var scale = 1;
+	var panOffset = new THREE.Vector3();
+	var zoomChanged = false;
+
+	var rotateStart = new THREE.Vector2();
+	var rotateEnd = new THREE.Vector2();
+	var rotateDelta = new THREE.Vector2();
+
+	var panStart = new THREE.Vector2();
+	var panEnd = new THREE.Vector2();
+	var panDelta = new THREE.Vector2();
+
+	var dollyStart = new THREE.Vector2();
+	var dollyEnd = new THREE.Vector2();
+	var dollyDelta = new THREE.Vector2();
+
+	function getAutoRotationAngle() {
+
+		return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;
+
+	}
+
+	function getZoomScale() {
+
+		return Math.pow( 0.95, scope.zoomSpeed );
+
+	}
+
+	function rotateLeft( angle ) {
+
+		sphericalDelta.theta -= angle;
+
+	}
+
+	function rotateUp( angle ) {
+
+		sphericalDelta.phi -= angle;
+
+	}
+
+	var panLeft = function () {
+
+		var v = new THREE.Vector3();
+
+		return function panLeft( distance, objectMatrix ) {
+
+			v.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix
+			v.multiplyScalar( - distance );
+
+			panOffset.add( v );
+
+		};
+
+	}();
+
+	var panUp = function () {
+
+		var v = new THREE.Vector3();
+
+		return function panUp( distance, objectMatrix ) {
+
+			if ( scope.screenSpacePanning === true ) {
+
+				v.setFromMatrixColumn( objectMatrix, 1 );
+
+			} else {
+
+				v.setFromMatrixColumn( objectMatrix, 0 );
+				v.crossVectors( scope.object.up, v );
+
+			}
+
+			v.multiplyScalar( distance );
+
+			panOffset.add( v );
+
+		};
+
+	}();
+
+	// deltaX and deltaY are in pixels; right and down are positive
+	var pan = function () {
+
+		var offset = new THREE.Vector3();
+
+		return function pan( deltaX, deltaY ) {
+
+			var element = scope.domElement === document ? scope.domElement.body : scope.domElement;
+
+			if ( scope.object.isPerspectiveCamera ) {
+
+				// perspective
+				var position = scope.object.position;
+				offset.copy( position ).sub( scope.target );
+				var targetDistance = offset.length();
+
+				// half of the fov is center to top of screen
+				targetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 );
+
+				// we use only clientHeight here so aspect ratio does not distort speed
+				panLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix );
+				panUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix );
+
+			} else if ( scope.object.isOrthographicCamera ) {
+
+				// orthographic
+				panLeft( deltaX * ( scope.object.right - scope.object.left ) / scope.object.zoom / element.clientWidth, scope.object.matrix );
+				panUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom / element.clientHeight, scope.object.matrix );
+
+			} else {
+
+				// camera neither orthographic nor perspective
+				console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );
+				scope.enablePan = false;
+
+			}
+
+		};
+
+	}();
+
+	function dollyIn( dollyScale ) {
+
+		if ( scope.object.isPerspectiveCamera ) {
+
+			scale /= dollyScale;
+
+		} else if ( scope.object.isOrthographicCamera ) {
+
+			scope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom * dollyScale ) );
+			scope.object.updateProjectionMatrix();
+			zoomChanged = true;
+
+		} else {
+
+			console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );
+			scope.enableZoom = false;
+
+		}
+
+	}
+
+	function dollyOut( dollyScale ) {
+
+		if ( scope.object.isPerspectiveCamera ) {
+
+			scale *= dollyScale;
+
+		} else if ( scope.object.isOrthographicCamera ) {
+
+			scope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / dollyScale ) );
+			scope.object.updateProjectionMatrix();
+			zoomChanged = true;
+
+		} else {
+
+			console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );
+			scope.enableZoom = false;
+
+		}
+
+	}
+
+	//
+	// event callbacks - update the object state
+	//
+
+	function handleMouseDownRotate( event ) {
+
+		//console.log( 'handleMouseDownRotate' );
+
+		rotateStart.set( event.clientX, event.clientY );
+
+	}
+
+	function handleMouseDownDolly( event ) {
+
+		//console.log( 'handleMouseDownDolly' );
+
+		dollyStart.set( event.clientX, event.clientY );
+
+	}
+
+	function handleMouseDownPan( event ) {
+
+		//console.log( 'handleMouseDownPan' );
+
+		panStart.set( event.clientX, event.clientY );
+
+	}
+
+	function handleMouseMoveRotate( event ) {
+
+		//console.log( 'handleMouseMoveRotate' );
+
+		rotateEnd.set( event.clientX, event.clientY );
+
+		rotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );
+
+		var element = scope.domElement === document ? scope.domElement.body : scope.domElement;
+
+		// rotating across whole screen goes 360 degrees around
+		rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientWidth );
+
+		// rotating up and down along whole screen attempts to go 360, but limited to 180
+		rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );
+
+		rotateStart.copy( rotateEnd );
+
+		scope.update();
+
+	}
+
+	function handleMouseMoveDolly( event ) {
+
+		//console.log( 'handleMouseMoveDolly' );
+
+		dollyEnd.set( event.clientX, event.clientY );
+
+		dollyDelta.subVectors( dollyEnd, dollyStart );
+
+		if ( dollyDelta.y > 0 ) {
+
+			dollyIn( getZoomScale() );
+
+		} else if ( dollyDelta.y < 0 ) {
+
+			dollyOut( getZoomScale() );
+
+		}
+
+		dollyStart.copy( dollyEnd );
+
+		scope.update();
+
+	}
+
+	function handleMouseMovePan( event ) {
+
+		//console.log( 'handleMouseMovePan' );
+
+		panEnd.set( event.clientX, event.clientY );
+
+		panDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );
+
+		pan( panDelta.x, panDelta.y );
+
+		panStart.copy( panEnd );
+
+		scope.update();
+
+	}
+
+	function handleMouseUp( event ) {
+
+		// console.log( 'handleMouseUp' );
+
+	}
+
+	function handleMouseWheel( event ) {
+
+		// console.log( 'handleMouseWheel' );
+
+		if ( event.deltaY < 0 ) {
+
+			dollyOut( getZoomScale() );
+
+		} else if ( event.deltaY > 0 ) {
+
+			dollyIn( getZoomScale() );
+
+		}
+
+		scope.update();
+
+	}
+
+	function handleKeyDown( event ) {
+
+		//console.log( 'handleKeyDown' );
+
+		switch ( event.keyCode ) {
+
+			case scope.keys.UP:
+				pan( 0, scope.keyPanSpeed );
+				scope.update();
+				break;
+
+			case scope.keys.BOTTOM:
+				pan( 0, - scope.keyPanSpeed );
+				scope.update();
+				break;
+
+			case scope.keys.LEFT:
+				pan( scope.keyPanSpeed, 0 );
+				scope.update();
+				break;
+
+			case scope.keys.RIGHT:
+				pan( - scope.keyPanSpeed, 0 );
+				scope.update();
+				break;
+
+		}
+
+	}
+
+	function handleTouchStartRotate( event ) {
+
+		//console.log( 'handleTouchStartRotate' );
+
+		rotateStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );
+
+	}
+
+	function handleTouchStartDollyPan( event ) {
+
+		//console.log( 'handleTouchStartDollyPan' );
+
+		if ( scope.enableZoom ) {
+
+			var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;
+			var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;
+
+			var distance = Math.sqrt( dx * dx + dy * dy );
+
+			dollyStart.set( 0, distance );
+
+		}
+
+		if ( scope.enablePan ) {
+
+			var x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );
+			var y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );
+
+			panStart.set( x, y );
+
+		}
+
+	}
+
+	function handleTouchMoveRotate( event ) {
+
+		//console.log( 'handleTouchMoveRotate' );
+
+		rotateEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );
+
+		rotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );
+
+		var element = scope.domElement === document ? scope.domElement.body : scope.domElement;
+
+		// rotating across whole screen goes 360 degrees around
+		rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientWidth );
+
+		// rotating up and down along whole screen attempts to go 360, but limited to 180
+		rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );
+
+		rotateStart.copy( rotateEnd );
+
+		scope.update();
+
+	}
+
+	function handleTouchMoveDollyPan( event ) {
+
+		//console.log( 'handleTouchMoveDollyPan' );
+
+		if ( scope.enableZoom ) {
+
+			var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;
+			var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;
+
+			var distance = Math.sqrt( dx * dx + dy * dy );
+
+			dollyEnd.set( 0, distance );
+
+			dollyDelta.set( 0, Math.pow( dollyEnd.y / dollyStart.y, scope.zoomSpeed ) );
+
+			dollyIn( dollyDelta.y );
+
+			dollyStart.copy( dollyEnd );
+
+		}
+
+		if ( scope.enablePan ) {
+
+			var x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );
+			var y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );
+
+			panEnd.set( x, y );
+
+			panDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );
+
+			pan( panDelta.x, panDelta.y );
+
+			panStart.copy( panEnd );
+
+		}
+
+		scope.update();
+
+	}
+
+	function handleTouchEnd( event ) {
+
+		//console.log( 'handleTouchEnd' );
+
+	}
+
+	//
+	// event handlers - FSM: listen for events and reset state
+	//
+
+	function onMouseDown( event ) {
+
+		if ( scope.enabled === false ) return;
+
+		event.preventDefault();
+
+		switch ( event.button ) {
+
+			case scope.mouseButtons.ORBIT:
+
+				if ( scope.enableRotate === false ) return;
+
+				handleMouseDownRotate( event );
+
+				state = STATE.ROTATE;
+
+				break;
+
+			case scope.mouseButtons.ZOOM:
+
+				if ( scope.enableZoom === false ) return;
+
+				handleMouseDownDolly( event );
+
+				state = STATE.DOLLY;
+
+				break;
+
+			case scope.mouseButtons.PAN:
+
+				if ( scope.enablePan === false ) return;
+
+				handleMouseDownPan( event );
+
+				state = STATE.PAN;
+
+				break;
+
+		}
+
+		if ( state !== STATE.NONE ) {
+
+			document.addEventListener( 'mousemove', onMouseMove, false );
+			document.addEventListener( 'mouseup', onMouseUp, false );
+
+			scope.dispatchEvent( startEvent );
+
+		}
+
+	}
+
+	function onMouseMove( event ) {
+
+		if ( scope.enabled === false ) return;
+
+		event.preventDefault();
+
+		switch ( state ) {
+
+			case STATE.ROTATE:
+
+				if ( scope.enableRotate === false ) return;
+
+				handleMouseMoveRotate( event );
+
+				break;
+
+			case STATE.DOLLY:
+
+				if ( scope.enableZoom === false ) return;
+
+				handleMouseMoveDolly( event );
+
+				break;
+
+			case STATE.PAN:
+
+				if ( scope.enablePan === false ) return;
+
+				handleMouseMovePan( event );
+
+				break;
+
+		}
+
+	}
+
+	function onMouseUp( event ) {
+
+		if ( scope.enabled === false ) return;
+
+		handleMouseUp( event );
+
+		document.removeEventListener( 'mousemove', onMouseMove, false );
+		document.removeEventListener( 'mouseup', onMouseUp, false );
+
+		scope.dispatchEvent( endEvent );
+
+		state = STATE.NONE;
+
+	}
+
+	function onMouseWheel( event ) {
+
+		if ( scope.enabled === false || scope.enableZoom === false || ( state !== STATE.NONE && state !== STATE.ROTATE ) ) return;
+
+		event.preventDefault();
+		event.stopPropagation();
+
+		scope.dispatchEvent( startEvent );
+
+		handleMouseWheel( event );
+
+		scope.dispatchEvent( endEvent );
+
+	}
+
+	function onKeyDown( event ) {
+
+		if ( scope.enabled === false || scope.enableKeys === false || scope.enablePan === false ) return;
+
+		handleKeyDown( event );
+
+	}
+
+	function onTouchStart( event ) {
+
+		if ( scope.enabled === false ) return;
+
+		event.preventDefault();
+
+		switch ( event.touches.length ) {
+
+			case 1:	// one-fingered touch: rotate
+
+				if ( scope.enableRotate === false ) return;
+
+				handleTouchStartRotate( event );
+
+				state = STATE.TOUCH_ROTATE;
+
+				break;
+
+			case 2:	// two-fingered touch: dolly-pan
+
+				if ( scope.enableZoom === false && scope.enablePan === false ) return;
+
+				handleTouchStartDollyPan( event );
+
+				state = STATE.TOUCH_DOLLY_PAN;
+
+				break;
+
+			default:
+
+				state = STATE.NONE;
+
+		}
+
+		if ( state !== STATE.NONE ) {
+
+			scope.dispatchEvent( startEvent );
+
+		}
+
+	}
+
+	function onTouchMove( event ) {
+
+		if ( scope.enabled === false ) return;
+
+		event.preventDefault();
+		event.stopPropagation();
+
+		switch ( event.touches.length ) {
+
+			case 1: // one-fingered touch: rotate
+
+				if ( scope.enableRotate === false ) return;
+				if ( state !== STATE.TOUCH_ROTATE ) return; // is this needed?
+
+				handleTouchMoveRotate( event );
+
+				break;
+
+			case 2: // two-fingered touch: dolly-pan
+
+				if ( scope.enableZoom === false && scope.enablePan === false ) return;
+				if ( state !== STATE.TOUCH_DOLLY_PAN ) return; // is this needed?
+
+				handleTouchMoveDollyPan( event );
+
+				break;
+
+			default:
+
+				state = STATE.NONE;
+
+		}
+
+	}
+
+	function onTouchEnd( event ) {
+
+		if ( scope.enabled === false ) return;
+
+		handleTouchEnd( event );
+
+		scope.dispatchEvent( endEvent );
+
+		state = STATE.NONE;
+
+	}
+
+	function onContextMenu( event ) {
+
+		if ( scope.enabled === false ) return;
+
+		event.preventDefault();
+
+	}
+
+	//
+
+	scope.domElement.addEventListener( 'contextmenu', onContextMenu, false );
+
+	scope.domElement.addEventListener( 'mousedown', onMouseDown, false );
+	scope.domElement.addEventListener( 'wheel', onMouseWheel, false );
+
+	scope.domElement.addEventListener( 'touchstart', onTouchStart, false );
+	scope.domElement.addEventListener( 'touchend', onTouchEnd, false );
+	scope.domElement.addEventListener( 'touchmove', onTouchMove, false );
+
+	window.addEventListener( 'keydown', onKeyDown, false );
+
+	// force an update at start
+
+	this.update();
+
+};
+
+THREE.OrbitControls.prototype = Object.create( THREE.EventDispatcher.prototype );
+THREE.OrbitControls.prototype.constructor = THREE.OrbitControls;
+
+Object.defineProperties( THREE.OrbitControls.prototype, {
+
+	center: {
+
+		get: function () {
+
+			console.warn( 'THREE.OrbitControls: .center has been renamed to .target' );
+			return this.target;
+
+		}
+
+	},
+
+	// backward compatibility
+
+	noZoom: {
+
+		get: function () {
+
+			console.warn( 'THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.' );
+			return ! this.enableZoom;
+
+		},
+
+		set: function ( value ) {
+
+			console.warn( 'THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.' );
+			this.enableZoom = ! value;
+
+		}
+
+	},
+
+	noRotate: {
+
+		get: function () {
+
+			console.warn( 'THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.' );
+			return ! this.enableRotate;
+
+		},
+
+		set: function ( value ) {
+
+			console.warn( 'THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.' );
+			this.enableRotate = ! value;
+
+		}
+
+	},
+
+	noPan: {
+
+		get: function () {
+
+			console.warn( 'THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.' );
+			return ! this.enablePan;
+
+		},
+
+		set: function ( value ) {
+
+			console.warn( 'THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.' );
+			this.enablePan = ! value;
+
+		}
+
+	},
+
+	noKeys: {
+
+		get: function () {
+
+			console.warn( 'THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.' );
+			return ! this.enableKeys;
+
+		},
+
+		set: function ( value ) {
+
+			console.warn( 'THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.' );
+			this.enableKeys = ! value;
+
+		}
+
+	},
+
+	staticMoving: {
+
+		get: function () {
+
+			console.warn( 'THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.' );
+			return ! this.enableDamping;
+
+		},
+
+		set: function ( value ) {
+
+			console.warn( 'THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.' );
+			this.enableDamping = ! value;
+
+		}
+
+	},
+
+	dynamicDampingFactor: {
+
+		get: function () {
+
+			console.warn( 'THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.' );
+			return this.dampingFactor;
+
+		},
+
+		set: function ( value ) {
+
+			console.warn( 'THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.' );
+			this.dampingFactor = value;
+
+		}
+
+	}
+
+} );

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
src/libs/webgl/fonts/FangSong_Regular.json


+ 13 - 0
src/libs/webgl/fonts/LICENSE

@@ -0,0 +1,13 @@
+Copyright @ 2004 by MAGENTA Ltd. All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions:
+
+The above copyright and this permission notice shall be included in all copies of one or more of the Font Software typefaces.
+
+The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing the word "MgOpen", or if the modifications are accepted for inclusion in the Font Software itself by the each appointed Administrator.
+
+This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "MgOpen" name.
+
+The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself.
+
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL MAGENTA OR PERSONS OR BODIES IN CHARGE OF ADMINISTRATION AND MAINTENANCE OF THE FONT SOFTWARE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.

+ 11 - 0
src/libs/webgl/fonts/README.md

@@ -0,0 +1,11 @@
+## MgOpen typefaces
+
+# Source and License
+
+https://web.archive.org/web/20050528114140/https://ellak.gr/fonts/mgopen/index.en
+
+# Usage
+
+Use Facetype.js to generate typeface.json fonts: https://gero3.github.io/facetype.js/
+
+Collection of Google fonts as typeface data for usage with three.js: https://github.com/components-ai/typefaces

+ 190 - 0
src/libs/webgl/fonts/droid/NOTICE

@@ -0,0 +1,190 @@
+
+   Copyright (c) 2005-2008, The Android Open Source Project
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+

+ 18 - 0
src/libs/webgl/fonts/droid/README.txt

@@ -0,0 +1,18 @@
+Copyright (C) 2008 The Android Open Source Project
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+  
+     http://www.apache.org/licenses/LICENSE-2.0
+  
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+##########
+
+This directory contains the fonts for the platform. They are licensed
+under the Apache 2 license.

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
src/libs/webgl/fonts/droid/droid_sans_bold.typeface.json


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
src/libs/webgl/fonts/droid/droid_sans_mono_regular.typeface.json


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
src/libs/webgl/fonts/droid/droid_sans_regular.typeface.json


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
src/libs/webgl/fonts/droid/droid_serif_bold.typeface.json


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
src/libs/webgl/fonts/droid/droid_serif_regular.typeface.json


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
src/libs/webgl/fonts/gentilis_bold.typeface.json


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
src/libs/webgl/fonts/gentilis_regular.typeface.json


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
src/libs/webgl/fonts/helvetiker_bold.typeface.json


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
src/libs/webgl/fonts/helvetiker_regular.typeface.json


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
src/libs/webgl/fonts/optimer_bold.typeface.json


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
src/libs/webgl/fonts/optimer_regular.typeface.json


+ 9 - 0
src/libs/webgl/fonts/ttf/README.md

@@ -0,0 +1,9 @@
+# Kenney Fonts
+
+## Source
+
+https://www.kenney.nl/assets/kenney-fonts
+
+## License
+
+CC0 1.0 Universal (CC0 1.0) Public Domain Dedication (https://creativecommons.org/publicdomain/zero/1.0/)

BIN
src/libs/webgl/fonts/ttf/kenpixel.ttf


BIN
src/libs/webgl/three-3d/img/base.png


BIN
src/libs/webgl/three-3d/img/box2.png


BIN
src/libs/webgl/three-3d/img/grid1.png


BIN
src/libs/webgl/three-3d/img/grid2.png


BIN
src/libs/webgl/three-3d/img/grid3.png


BIN
src/libs/webgl/three-3d/img/grid4.png


BIN
src/libs/webgl/three-3d/img/grid5.png


BIN
src/libs/webgl/three-3d/img/grid6.png


BIN
src/libs/webgl/three-3d/img/link-red.png


BIN
src/libs/webgl/three-3d/img/rain.png


BIN
src/libs/webgl/three-3d/img/site2.png


BIN
src/libs/webgl/three-3d/img/sun.png


BIN
src/libs/webgl/three-3d/img/tp.jpg


BIN
src/libs/webgl/three-3d/img/tube.png


BIN
src/libs/webgl/three-3d/img/tube2.png


BIN
src/libs/webgl/three-3d/img/y.png


BIN
src/libs/webgl/three-3d/sky/1.png


BIN
src/libs/webgl/three-3d/sky/2.png


BIN
src/libs/webgl/three-3d/sky/4.png


BIN
src/libs/webgl/three-3d/sky/bottom.png


BIN
src/libs/webgl/three-3d/sky/up.png


Разница между файлами не показана из-за своего большого размера
+ 9616 - 0
src/libs/webgl/three-3d/three.js


Разница между файлами не показана из-за своего большого размера
+ 12651 - 0
src/libs/webgl/three-3d/three.module.js


+ 0 - 2
src/main.js

@@ -29,8 +29,6 @@ import crudCommon from '@/mixins/crud';
 import tenantPackage from './views/system/tenantpackage';
 
 
-
-
 // 打印组件
 import Print from 'vue-print-nb'
 Vue.use(Print);

+ 4 - 2
src/page/index/logo.vue

@@ -82,11 +82,13 @@ export default {
         justify-content: flex-start;
 
         .myLogo {
-            width: 40px;
-            height: 40px;
+            margin-left: 5px;
+            width: 25px;
+            height: 25px;
         }
 
         .myTitle {
+            margin-left: 5px;
             display: block;
             text-align: center;
             font-weight: 300;

+ 199 - 224
src/page/index/top/index.vue

@@ -1,256 +1,231 @@
 <template>
-  <div class="avue-top">
-    <div class="top-bar__left">
-      <div class="avue-breadcrumb"
-           :class="[{ 'avue-breadcrumb--active': isCollapse }]"
-           v-if="showCollapse">
-        <i class="icon-navicon"
-           @click="setCollapse"></i>
-      </div>
-    </div>
-    <div class="top-bar__title">
-      <div class="top-bar__item top-bar__item--show"
-           v-if="showMenu">
-        <top-menu ref="topMenu"></top-menu>
-      </div>
-      <span class="top-bar__item"
-            v-if="showSearch">
-        <top-search></top-search>
-      </span>
-    </div>
-    <div class="top-bar__right">
-      <el-tooltip v-if="showColor"
-                  effect="dark"
-                  :content="$t('navbar.color')"
-                  placement="bottom">
-        <div class="top-bar__item">
-          <top-color></top-color>
+    <div class="avue-top">
+        <div class="top-bar__left">
+            <div class="avue-breadcrumb" :class="[{ 'avue-breadcrumb--active': isCollapse }]" v-if="showCollapse">
+                <i class="icon-navicon" @click="setCollapse"></i>
+            </div>
+        </div>
+        <div class="top-bar__title">
+            <div class="top-bar__item top-bar__item--show" v-if="showMenu">
+                <top-menu ref="topMenu"></top-menu>
+            </div>
+            <span class="top-bar__item" v-if="showSearch">
+                <top-search></top-search>
+            </span>
         </div>
-      </el-tooltip>
-      <el-tooltip v-if="showDebug"
+        <div class="top-bar__right">
+            <el-tooltip v-if="showColor" effect="dark" :content="$t('navbar.color')" placement="bottom">
+                <div class="top-bar__item">
+                    <top-color></top-color>
+                </div>
+            </el-tooltip>
+            <!-- <el-tooltip v-if="showDebug"
                   effect="dark"
                   :content="logsFlag?$t('navbar.bug'):logsLen+$t('navbar.bugs')"
                   placement="bottom">
         <div class="top-bar__item">
           <top-logs></top-logs>
         </div>
-      </el-tooltip>
-      <el-tooltip v-if="showLock"
-                  effect="dark"
-                  :content="$t('navbar.lock')"
-                  placement="bottom">
-        <div class="top-bar__item">
-          <top-lock></top-lock>
-        </div>
-      </el-tooltip>
-      <el-tooltip v-if="showTheme"
-                  effect="dark"
-                  :content="$t('navbar.theme')"
-                  placement="bottom">
-        <div class="top-bar__item top-bar__item--show">
-          <top-theme></top-theme>
-        </div>
-      </el-tooltip>
-      <el-tooltip effect="dark"
-                  :content="$t('navbar.notice')"
-                  placement="bottom">
-        <div class="top-bar__item top-bar__item--show">
-          <top-notice></top-notice>
-        </div>
-      </el-tooltip>
-      <el-tooltip effect="dark"
-                  :content="$t('navbar.language')"
-                  placement="bottom">
-        <div class="top-bar__item top-bar__item--show">
-          <top-lang></top-lang>
-        </div>
-      </el-tooltip>
-      <el-tooltip v-if="showFullScren"
-                  effect="dark"
-                  :content="isFullScren?$t('navbar.screenfullF'):$t('navbar.screenfull')"
-                  placement="bottom">
-        <div class="top-bar__item">
-          <i :class="isFullScren?'icon-tuichuquanping':'icon-quanping'"
-             @click="handleScreen"></i>
+      </el-tooltip> -->
+            <el-tooltip v-if="showLock" effect="dark" :content="$t('navbar.lock')" placement="bottom">
+                <div class="top-bar__item">
+                    <top-lock></top-lock>
+                </div>
+            </el-tooltip>
+            <el-tooltip v-if="showTheme" effect="dark" :content="$t('navbar.theme')" placement="bottom">
+                <div class="top-bar__item top-bar__item--show">
+                    <top-theme></top-theme>
+                </div>
+            </el-tooltip>
+            <!-- <el-tooltip effect="dark" :content="$t('navbar.notice')" placement="bottom">
+                <div class="top-bar__item top-bar__item--show">
+                    <top-notice></top-notice>
+                </div>
+            </el-tooltip> -->
+            <el-tooltip effect="dark" :content="$t('navbar.language')" placement="bottom">
+                <div class="top-bar__item top-bar__item--show">
+                    <top-lang></top-lang>
+                </div>
+            </el-tooltip>
+            <el-tooltip v-if="showFullScren" effect="dark"
+                :content="isFullScren?$t('navbar.screenfullF'):$t('navbar.screenfull')" placement="bottom">
+                <div class="top-bar__item">
+                    <i :class="isFullScren?'icon-tuichuquanping':'icon-quanping'" @click="handleScreen"></i>
+                </div>
+            </el-tooltip>
+            <img class="top-bar__img" :src="userInfo.avatar">
+            <el-dropdown>
+                <span class="el-dropdown-link">
+                    {{userInfo.userName}}
+                    <i class="el-icon-arrow-down el-icon--right"></i>
+                </span>
+                <el-dropdown-menu slot="dropdown">
+                    <el-dropdown-item>
+                        <router-link to="/">{{$t('navbar.dashboard')}}</router-link>
+                    </el-dropdown-item>
+                    <el-dropdown-item>
+                        <router-link to="/info/index">{{$t('navbar.userinfo')}}</router-link>
+                    </el-dropdown-item>
+                    <el-dropdown-item v-if="this.website.switchMode" @click.native="switchDept">
+                        {{$t('navbar.switchDept')}}
+                    </el-dropdown-item>
+                    <el-dropdown-item @click.native="logout" divided>{{$t('navbar.logOut')}}
+                    </el-dropdown-item>
+                </el-dropdown-menu>
+            </el-dropdown>
+            <el-dialog title="用户信息选择" append-to-body :visible.sync="userBox" width="350px">
+                <avue-form ref="form" :option="userOption" v-model="userForm" @submit="submitSwitch" />
+            </el-dialog>
         </div>
-      </el-tooltip>
-      <img class="top-bar__img"
-           :src="userInfo.avatar">
-      <el-dropdown>
-        <span class="el-dropdown-link">
-          {{userInfo.userName}}
-          <i class="el-icon-arrow-down el-icon--right"></i>
-        </span>
-        <el-dropdown-menu slot="dropdown">
-          <el-dropdown-item>
-            <router-link to="/">{{$t('navbar.dashboard')}}</router-link>
-          </el-dropdown-item>
-          <el-dropdown-item>
-            <router-link to="/info/index">{{$t('navbar.userinfo')}}</router-link>
-          </el-dropdown-item>
-          <el-dropdown-item v-if="this.website.switchMode" @click.native="switchDept"
-                            >{{$t('navbar.switchDept')}}
-          </el-dropdown-item>
-          <el-dropdown-item @click.native="logout"
-                            divided>{{$t('navbar.logOut')}}
-          </el-dropdown-item>
-        </el-dropdown-menu>
-      </el-dropdown>
-      <el-dialog title="用户信息选择"
-                 append-to-body
-                 :visible.sync="userBox"
-                 width="350px">
-        <avue-form ref="form" :option="userOption" v-model="userForm" @submit="submitSwitch"/>
-      </el-dialog>
     </div>
-  </div>
 </template>
 <script>
-  import {resetRouter} from '@/router/router'
-  import {mapGetters, mapState} from "vuex";
-  import {fullscreenToggel, listenfullscreen} from "@/util/util";
-  import topLock from "./top-lock";
-  import topMenu from "./top-menu";
-  import topSearch from "./top-search";
-  import topTheme from "./top-theme";
-  import topLogs from "./top-logs";
-  import topColor from "./top-color";
-  import topNotice from './top-notice'
-  import topLang from "./top-lang";
+import { resetRouter } from '@/router/router'
+import { mapGetters, mapState } from "vuex";
+import { fullscreenToggel, listenfullscreen } from "@/util/util";
+import topLock from "./top-lock";
+import topMenu from "./top-menu";
+import topSearch from "./top-search";
+import topTheme from "./top-theme";
+import topLogs from "./top-logs";
+import topColor from "./top-color";
+import topNotice from './top-notice'
+import topLang from "./top-lang";
 
-  export default {
+export default {
     components: {
-      topLock,
-      topMenu,
-      topSearch,
-      topTheme,
-      topLogs,
-      topColor,
-      topNotice,
-      topLang
+        topLock,
+        topMenu,
+        topSearch,
+        topTheme,
+        topLogs,
+        topColor,
+        topNotice,
+        topLang
     },
     name: "top",
     data() {
-      return {
-        userBox: false,
-        userForm: {
-          deptId: '',
-          roleId: ''
-        },
-        userOption: {
-          labelWidth: 70,
-          submitBtn: true,
-          emptyBtn: false,
-          submitText: '切换',
-          column: [
-            {
-              label: '部门',
-              prop: 'deptId',
-              type: 'select',
-              props: {
-                label: 'deptName',
-                value: 'id'
-              },
-              dicUrl: '/api/galaxy-system/dept/select',
-              span: 24,
-              display: false,
-              rules: [{
-                required: true,
-                message: "请选择部门",
-                trigger: "blur"
-              }],
+        return {
+            userBox: false,
+            userForm: {
+                deptId: '',
+                roleId: ''
             },
-            {
-              label: '角色',
-              prop: 'roleId',
-              type: 'select',
-              props: {
-                label: 'roleName',
-                value: 'id'
-              },
-              dicUrl: '/api/galaxy-system/role/select',
-              span: 24,
-              display: false,
-              rules: [{
-                required: true,
-                message: "请选择角色",
-                trigger: "blur"
-              }],
-            },
-          ]
-        }
-      };
+            userOption: {
+                labelWidth: 70,
+                submitBtn: true,
+                emptyBtn: false,
+                submitText: '切换',
+                column: [
+                    {
+                        label: '部门',
+                        prop: 'deptId',
+                        type: 'select',
+                        props: {
+                            label: 'deptName',
+                            value: 'id'
+                        },
+                        dicUrl: '/api/galaxy-system/dept/select',
+                        span: 24,
+                        display: false,
+                        rules: [{
+                            required: true,
+                            message: "请选择部门",
+                            trigger: "blur"
+                        }],
+                    },
+                    {
+                        label: '角色',
+                        prop: 'roleId',
+                        type: 'select',
+                        props: {
+                            label: 'roleName',
+                            value: 'id'
+                        },
+                        dicUrl: '/api/galaxy-system/role/select',
+                        span: 24,
+                        display: false,
+                        rules: [{
+                            required: true,
+                            message: "请选择角色",
+                            trigger: "blur"
+                        }],
+                    },
+                ]
+            }
+        };
     },
     filters: {},
     created() {
     },
     mounted() {
-      listenfullscreen(this.setScreen);
+        listenfullscreen(this.setScreen);
     },
     computed: {
-      ...mapState({
-        showDebug: state => state.common.showDebug,
-        showTheme: state => state.common.showTheme,
-        showLock: state => state.common.showLock,
-        showFullScren: state => state.common.showFullScren,
-        showCollapse: state => state.common.showCollapse,
-        showSearch: state => state.common.showSearch,
-        showMenu: state => state.common.showMenu,
-        showColor: state => state.common.showColor
-      }),
-      ...mapGetters([
-        "userInfo",
-        "isFullScren",
-        "tagWel",
-        "tagList",
-        "isCollapse",
-        "tag",
-        "logsLen",
-        "logsFlag"
-      ])
+        ...mapState({
+            showDebug: state => state.common.showDebug,
+            showTheme: state => state.common.showTheme,
+            showLock: state => state.common.showLock,
+            showFullScren: state => state.common.showFullScren,
+            showCollapse: state => state.common.showCollapse,
+            showSearch: state => state.common.showSearch,
+            showMenu: state => state.common.showMenu,
+            showColor: state => state.common.showColor
+        }),
+        ...mapGetters([
+            "userInfo",
+            "isFullScren",
+            "tagWel",
+            "tagList",
+            "isCollapse",
+            "tag",
+            "logsLen",
+            "logsFlag"
+        ])
     },
     methods: {
-      handleScreen() {
-        fullscreenToggel();
-      },
-      setCollapse() {
-        this.$store.commit("SET_COLLAPSE");
-      },
-      setScreen() {
-        this.$store.commit("SET_FULLSCREN");
-      },
-      switchDept() {
-        const userId = this.userInfo.user_id;
-        const deptColumn = this.findObject(this.userOption.column, "deptId");
-        deptColumn.dicUrl = `/api/galaxy-system/dept/select?userId=${userId}`;
-        deptColumn.display = true;
-        const roleColumn = this.findObject(this.userOption.column, "roleId");
-        roleColumn.dicUrl = `/api/galaxy-system/role/select?userId=${userId}`;
-        roleColumn.display = true;
-        this.userBox = true;
-      },
-      submitSwitch (form, done) {
-        this.$store.dispatch("refreshToken", form).then(() => {
-          this.userBox = false;
-          this.$router.push({path: "/"});
-        })
-        done();
-      },
-      logout() {
-        this.$confirm(this.$t("logoutTip"), this.$t("tip"), {
-          confirmButtonText: this.$t("submitText"),
-          cancelButtonText: this.$t("cancelText"),
-          type: "warning"
-        }).then(() => {
-          this.$store.dispatch("LogOut").then(() => {
-            resetRouter();
-            this.$router.push({path: "/login"});
-          });
-        });
-      }
+        handleScreen() {
+            fullscreenToggel();
+        },
+        setCollapse() {
+            this.$store.commit("SET_COLLAPSE");
+        },
+        setScreen() {
+            this.$store.commit("SET_FULLSCREN");
+        },
+        switchDept() {
+            const userId = this.userInfo.user_id;
+            const deptColumn = this.findObject(this.userOption.column, "deptId");
+            deptColumn.dicUrl = `/api/galaxy-system/dept/select?userId=${userId}`;
+            deptColumn.display = true;
+            const roleColumn = this.findObject(this.userOption.column, "roleId");
+            roleColumn.dicUrl = `/api/galaxy-system/role/select?userId=${userId}`;
+            roleColumn.display = true;
+            this.userBox = true;
+        },
+        submitSwitch(form, done) {
+            this.$store.dispatch("refreshToken", form).then(() => {
+                this.userBox = false;
+                this.$router.push({ path: "/" });
+            })
+            done();
+        },
+        logout() {
+            this.$confirm(this.$t("logoutTip"), this.$t("tip"), {
+                confirmButtonText: this.$t("submitText"),
+                cancelButtonText: this.$t("cancelText"),
+                type: "warning"
+            }).then(() => {
+                this.$store.dispatch("LogOut").then(() => {
+                    resetRouter();
+                    this.$router.push({ path: "/login" });
+                });
+            });
+        }
     }
-  };
+};
 </script>
 
 <style lang="scss" scoped>
+
 </style>

+ 93 - 91
src/page/login/index.vue

@@ -1,118 +1,120 @@
 <template>
-  <div class="login-container"
-       ref="login"
-       @keyup.enter.native="handleLogin">
-    <top-color v-show="false"></top-color>
-    <div class="login-weaper animated bounceInDown">
-      <div class="login-left">
-        <div class="login-time">
-          {{time}}
-        </div>
-        <p class="title">{{ $t('login.info') }}</p>
-      </div>
-      <div class="login-border">
-        <div class="login-main">
-          <h4 class="login-title">
-            {{ $t('login.title') }}{{website.title}}
-            <top-lang></top-lang>
-          </h4>
-          <userLogin v-if="activeName==='user'"></userLogin>
-          <codeLogin v-else-if="activeName==='code'"></codeLogin>
-          <thirdLogin v-else-if="activeName==='third'"></thirdLogin>
-          <div class="login-menu">
-            <a href="#" @click.stop="activeName='user'">{{ $t('login.userLogin') }}</a>
-            <!--<a href="#" @click.stop="activeName='code'">{{ $t('login.phoneLogin') }}</a>-->
-            <a href="#" @click.stop="activeName='third'">{{ $t('login.thirdLogin') }}</a>
-          </div>
-        </div>
+    <div class="login-container" ref="login" @keyup.enter.native="handleLogin">
+        <top-color v-show="false"></top-color>
+        <div class="login-weaper animated bounceInDown">
+            <div class="login-left">
+                <div class="login-time">
+                    {{time}}
+                </div>
+                <div>
+                    <p class="title">{{ $t('login.info') }}</p>
+                    <p class="title">{{ $t('login.subInfo') }}</p>
+                </div>
+
+            </div>
+            <div class="login-border">
+                <div class="login-main">
+                    <h4 class="login-title">
+                        {{ $t('login.title') }}{{website.title}}
+                        <!-- <top-lang></top-lang> -->
+                    </h4>
+                    <userLogin v-if="activeName==='user'"></userLogin>
+                    <codeLogin v-else-if="activeName==='code'"></codeLogin>
+                    <thirdLogin v-else-if="activeName==='third'"></thirdLogin>
+                    <!-- <div class="login-menu">
+                        <a href="#" @click.stop="activeName='user'">{{ $t('login.userLogin') }}</a>
+                        <a href="#" @click.stop="activeName='code'">{{ $t('login.phoneLogin') }}</a>
+                        <a href="#" @click.stop="activeName='third'">{{ $t('login.thirdLogin') }}</a>
+                    </div> -->
+                </div>
 
-      </div>
+            </div>
+        </div>
     </div>
-  </div>
 </template>
 <script>
-  import userLogin from "./userlogin";
-  import codeLogin from "./codelogin";
-  import thirdLogin from "./thirdlogin";
-  import {mapGetters} from "vuex";
-  import {dateFormat} from "@/util/date";
-  import {validatenull} from "@/util/validate";
-  import topLang from "@/page/index/top/top-lang";
-  import topColor from "@/page/index/top/top-color";
-  import {getQueryString, getTopUrl} from "@/util/util";
+import userLogin from "./userlogin";
+import codeLogin from "./codelogin";
+import thirdLogin from "./thirdlogin";
+import { mapGetters } from "vuex";
+import { dateFormat } from "@/util/date";
+import { validatenull } from "@/util/validate";
+import topLang from "@/page/index/top/top-lang";
+import topColor from "@/page/index/top/top-color";
+import { getQueryString, getTopUrl } from "@/util/util";
 
-  export default {
+export default {
     name: "login",
     components: {
-      userLogin,
-      codeLogin,
-      thirdLogin,
-      topLang,
-      topColor
+        userLogin,
+        codeLogin,
+        thirdLogin,
+        topLang,
+        topColor
     },
     data() {
-      return {
-        time: "",
-        activeName: "user",
-        socialForm: {
-          tenantId: "000000",
-          source: "",
-          code: "",
-          state: "",
-        }
-      };
+        return {
+            time: "",
+            activeName: "user",
+            socialForm: {
+                tenantId: "000000",
+                source: "",
+                code: "",
+                state: "",
+            }
+        };
     },
     watch: {
-      $route() {
-        this.handleLogin();
-      }
+        $route() {
+            this.handleLogin();
+        }
     },
     created() {
-      this.handleLogin();
-      this.getTime();
+        this.handleLogin();
+        this.getTime();
     },
     mounted() {
     },
     computed: {
-      ...mapGetters(["website", "tagWel"])
+        ...mapGetters(["website", "tagWel"])
     },
     props: [],
     methods: {
-      getTime() {
-        setInterval(() => {
-          this.time = dateFormat(new Date());
-        }, 1000);
-      },
-      handleLogin() {
-        const topUrl = getTopUrl();
-        const redirectUrl = "/oauth/redirect/";
-        this.socialForm.source = getQueryString("source");
-        this.socialForm.code = getQueryString("code");
-        this.socialForm.state = getQueryString("state");
-        if (validatenull(this.socialForm.source) && topUrl.includes(redirectUrl)) {
-          let source = topUrl.split("?")[0];
-          source = source.split(redirectUrl)[1];
-          this.socialForm.source = source;
-        }
-        if (!validatenull(this.socialForm.source) && !validatenull(this.socialForm.code) && !validatenull(this.socialForm.state)) {
-          const loading = this.$loading({
-            lock: true,
-            text: '第三方系统登录中,请稍后。。。',
-            spinner: "el-icon-loading"
-          });
-          this.$store.dispatch("LoginBySocial", this.socialForm).then(() => {
-            window.location.href = topUrl.split(redirectUrl)[0];
-            this.$router.push({path: this.tagWel.value});
-            loading.close();
-          }).catch(() => {
-            loading.close();
-          });
+        getTime() {
+            setInterval(() => {
+                this.time = dateFormat(new Date());
+            }, 1000);
+        },
+        handleLogin() {
+            const topUrl = getTopUrl();
+            const redirectUrl = "/oauth/redirect/";
+            this.socialForm.source = getQueryString("source");
+            this.socialForm.code = getQueryString("code");
+            this.socialForm.state = getQueryString("state");
+            if (validatenull(this.socialForm.source) && topUrl.includes(redirectUrl)) {
+                let source = topUrl.split("?")[0];
+                source = source.split(redirectUrl)[1];
+                this.socialForm.source = source;
+            }
+            if (!validatenull(this.socialForm.source) && !validatenull(this.socialForm.code) && !validatenull(this.socialForm.state)) {
+                const loading = this.$loading({
+                    lock: true,
+                    text: '第三方系统登录中,请稍后。。。',
+                    spinner: "el-icon-loading"
+                });
+                this.$store.dispatch("LoginBySocial", this.socialForm).then(() => {
+                    window.location.href = topUrl.split(redirectUrl)[0];
+                    this.$router.push({ path: this.tagWel.value });
+                    loading.close();
+                }).catch(() => {
+                    loading.close();
+                });
+            }
         }
-      }
     }
-  };
+};
 </script>
 
 <style lang="scss">
-  @import "@/styles/login.scss";
+@import "@/styles/login.scss";
 </style>

+ 210 - 0
src/views/appversion/index.vue

@@ -0,0 +1,210 @@
+<!--
+ * @Title: 
+ * @Description: 
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+    <el-row>
+        <el-col :span="24">
+            <basic-container>
+                <el-button-group>
+                    <el-button type="primary" size="small" icon="el-icon-upload2" @click="handleImport">上传APK
+                    </el-button>
+                </el-button-group>
+            </basic-container>
+            <basic-container>
+                <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page"
+                    :before-open="beforeOpen" ref="crud" v-model="form" :permission="permissionList"
+                    @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
+                    @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange"
+                    @on-load="onLoad">
+                </avue-crud>
+            </basic-container>
+        </el-col>
+        <el-dialog title="APK上传向导" :visible.sync="versionuploadDialog" width="60%" height="60%"
+            :close-on-click-modal="false" append-to-body :v-loading="importLoading" v-if="versionuploadDialog">
+            <versionupload :importLoading="importLoading" :visible.sync="versionuploadDialog" ref="rtuImportProcess">
+            </versionupload>
+        </el-dialog>
+    </el-row>
+</template>
+
+<script>
+import { getPage } from "@/api/versionmanage/version.js";
+
+import versionupload from "./versionupload.vue";
+export default {
+    components: {
+        versionupload,
+    },
+    data() {
+        return {
+            importLoading: false,
+            loading: false,
+            versionuploadDialog: false,
+            infoDialog: false,
+            orgId: 0,
+            orgName: '',
+            id: "",
+            editForm: {},
+            editDialog: false,
+            form: {},
+            selectionList: [],
+            query: {},
+            page: {
+                pageSize: 10,
+                currentPage: 1,
+                total: 0,
+            },
+            option: {
+                labelWidth: 120,
+                viewLabelWidth: 100,
+                searchlabelWidth: 100,
+                height: "auto",
+                calcHeight: 80,
+                align: "center",
+                headerAlign: "center",
+                lazy: false,
+                tip: false,
+                simplePage: true,
+                searchShow: true,
+                searchMenuSpan: 6,
+                tree: true,
+                border: true,
+                index: true,
+                selection: false,
+                viewBtn: false,
+                viewTitle: "版本管理",
+                editBtn: false,
+                delBtn: false,
+                addBtn: false,
+                menu: false,
+                menuWidth: 220,
+                dialogType: "drawer",
+                dialogClickModal: false,
+                column: [
+                    {
+                        label: "版本ID",
+                        prop: "appId",
+                        span: 24,
+                        hide: true,
+                        viewDisplay: false,
+                        type: "tree",
+                        addDisabled: false,
+                    },
+                    {
+                        label: "版本号",
+                        prop: "version",
+                        span: 24,
+                        editDisplay: false,
+                        addDisplay: false,
+                    },
+                    {
+                        label: "APK名称",
+                        prop: "appName",
+                        span: 24,
+                        editDisplay: false,
+                        addDisplay: false,
+                    },
+                    {
+                        label: "升级提示",
+                        prop: "versionNote",
+                        span: 24,
+                        editDisplay: false,
+                        addDisplay: false,
+                    },
+                    {
+                        label: "上传时间",
+                        prop: "createTime",
+                        span: 24,
+
+                    },
+                    {
+                        label: "是否可用",
+                        prop: "isDeleted",
+                        span: 24,
+                        dicData: [{
+                            label: '发布中',
+                            value: 0,
+                        }, {
+                            label: '停用',
+                            value: 1,
+                        }],
+                    },
+                ],
+            },
+            data: [],
+        };
+    },
+    computed: {
+        // ...mapGetters(["userInfo", "permission"]),
+        permissionList() {
+            return {
+                // addBtn: this.vaildData(this.permission.docCategory_add, false),
+                // viewBtn: this.vaildData(this.permission.docCategory_view, false),
+                // delBtn: this.vaildData(this.permission.docCategory_delete, false),
+                // editBtn: this.vaildData(this.permission.docCategory_edit, false),
+            };
+        },
+        ids() {
+            let ids = [];
+            this.selectionList.forEach((ele) => {
+                ids.push(ele.id);
+            });
+            return ids.join(",");
+        },
+    },
+    mounted() { },
+    created() {
+
+    },
+    methods: {
+        handleImport() {
+            this.versionuploadDialog = true;
+        },
+        searchReset() {
+            this.query = {};
+            this.onLoad(this.page);
+        },
+        searchChange(params, done) {
+            this.query = params;
+            this.page.currentPage = 1;
+            this.onLoad(this.page, params);
+            done();
+        },
+        selectionChange(list) {
+            this.selectionList = list;
+        },
+        selectionClear() {
+            this.selectionList = [];
+            this.$refs.crud.toggleSelection();
+        },
+        currentChange(currentPage) {
+            this.page.currentPage = currentPage;
+        },
+        sizeChange(pageSize) {
+            this.page.pageSize = pageSize;
+        },
+        refreshChange() {
+            this.onLoad(this.page, this.query);
+        },
+        onLoad(page, params = {}) {
+            this.loading = true;
+            getPage(
+                page.currentPage,
+                page.pageSize,
+                Object.assign(params, this.query)
+            ).then((res) => {
+                const data = res.data.data;
+                this.page.total = data.total;
+                this.data = data.records;
+                this.loading = false;
+                this.selectionClear();
+            });
+        },
+    },
+};
+</script>

+ 156 - 0
src/views/appversion/versionupload.vue

@@ -0,0 +1,156 @@
+<!--
+ * @Title: 
+ * @Description:  APP上传
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+    <div>
+        <el-row>
+            <el-col :span="24">
+                <basic-container>
+                    <avue-form :option="debugOption" v-model="debugForm" />
+                </basic-container>
+            </el-col>
+        </el-row>
+        <el-row>
+            <el-col :span="24">
+                <basic-container>
+                    <el-upload ref="upload" :action="uploadUrl" :on-preview="handlePreview" :on-remove="handleRemove"
+                        :before-upload="beforeUpload" :on-error="onError" :on-success="onSuccess" :file-list="fileList"
+                        :on-progress="onProgress" :auto-upload="false" :multiple="false" limit="1" accept=".apk"
+                        :data="postData">
+                        <el-button slot="trigger" size="small" type="primary">选择APK文件</el-button>
+                        <el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">开始上传
+                        </el-button>
+                        <div slot="tip" class="el-upload__tip">只能上传APK文件</div>
+                    </el-upload>
+                </basic-container>
+            </el-col>
+        </el-row>
+
+
+    </div>
+</template>
+
+<script>
+
+import { getToken } from "@/util/auth";
+import { validatenull } from "@/util/validate";
+
+export default {
+    data() {
+        return {
+            fileName: '',
+            editForm: {},
+            editDialog: false,
+            form: {},
+            selectionList: [],
+            query: {},
+            loading: true,
+            postData: {},
+            uploadUrl: '',
+            debugForm: {},
+            debugOption: {
+                labelWidth: 150,
+                submitBtn: false,
+                emptyBtn: false,
+                column: [
+                    {
+                        label: 'APPID',
+                        prop: 'appId',
+                        type: 'input',
+                        span: 24,
+                    },
+                    {
+                        label: '版本号',
+                        prop: 'version',
+                        type: 'input',
+                        span: 24,
+                    },
+                    {
+                        label: '版本升级提示',
+                        prop: 'versionNote',
+                        type: 'input',
+                        span: 24,
+                    },
+
+                ]
+            }
+        };
+    },
+
+    props: {
+        visible: {
+            tyep: [Boolean],
+            default: false,
+        },
+        importLoading: {
+            tyep: [Boolean],
+            default: false,
+        }
+    },
+    name: 'versionupload',
+    created() {
+        this.init();
+    },
+    methods: {
+        init() {
+            this.uploadUrl = this.getUploadUrl();
+        },
+        submitUpload() {
+            if (validatenull(this.debugForm.appId) && validatenull(this.debugForm.version)) {
+                this.$message.warning("请录入APPID和版本号!");
+                return;
+            }
+            this.postData['appId'] = this.debugForm.appId;
+            this.postData['version'] = this.debugForm.version;
+            this.postData['versionNote'] = this.debugForm.versionNote;
+            this.$refs.upload.submit();
+            this.$message.success('已成功上传APK!')
+        },
+        handleRemove(file, fileList) {
+            console.log(file, fileList);
+            this.$message.success('handleRemove')
+        },
+        handlePreview(file) {
+            console.log(file);
+            this.$message.success('handlePreview')
+        },
+        beforeUpload(file) {
+            console.log(file);
+            this.$message.success('beforeUpload')
+            return true;
+        },
+        getUploadUrl: function () {
+            return `/api/galaxy-business/version/apk?${this.website.tokenHeader
+                }=${getToken()}`;
+        },
+        onProgress(event, file, fileList) {
+            console.log(file, fileList);
+            this.$emit("update:importLoading", true);
+        },
+        onError(err, file, fileList) {
+            console.log(file, fileList);
+            this.$message.warning(err);
+        },
+        onSuccess(response, file, fileList) {
+            console.log(response);
+            console.log(file);
+            console.log(fileList);
+            this.$message.warning("提交成功");
+            this.$refs.upload.clearFiles();
+            this.$emit("update:importLoading", false);
+            this.$emit("update:visible", false);
+        },
+    },
+};
+</script>
+<style>
+.mb0 {
+    margin-top: 10;
+
+}
+</style>

+ 73 - 189
src/views/baseinfo/servicePerson.vue → src/views/baseinfo/companyadminperson.vue

@@ -1,7 +1,7 @@
 <!--
  * @Title: 
- * @Description: 
- * @Author: 893699165@qq.com
+ * @Description: 运维公司管理员用户管理
+ * @Author: swp
  * @Date: 2022-08-24 10:49:21
  * @LastEditors: 
  * @LastEditTime: 2022-08-24 10:49:21
@@ -9,24 +9,11 @@
 <template>
     <div>
         <el-row>
-            <!-- <el-col :span="5">
-          <div class="box">
-            <el-scrollbar>
-            <basic-container>
-              <avue-tree
-                :option="treeOption"
-                :data="treeData"
-                @node-click="nodeClick"
-              />
-            </basic-container>
-          </el-scrollbar>
-          </div>
-        </el-col> -->
             <el-col :span="24">
                 <basic-container>
                     <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page"
-                        :before-open="beforeOpen" ref="crud" v-model="form" :permission="permissionList"
-                        @row-del="rowDel" @row-update="rowUpdate" @row-save="rowSave" @search-change="searchChange"
+                        :before-open="beforeOpen" ref="crud" v-model="form" :permission="permissionList" @row-del="rowDel"
+                        @row-update="rowUpdate" @row-save="rowSave" @search-change="searchChange"
                         @search-reset="searchReset" @selection-change="selectionChange" @current-change="currentChange"
                         @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad"
                         @before-open="beforeOpen" @select-change="selectChange">
@@ -34,78 +21,27 @@
                             <el-button type="text" @click="openConfig(row)"> 正常 </el-button>
                         </template>
                         <template slot-scope="{ row, index }" slot="menu">
-                            <!-- 
-              <el-button type="text" size="small" @click="warnSetting(row)">预警配置
-              </el-button>
-
-              <el-button type="text" size="small" @click="planManage(row)">巡检计划
-              </el-button> -->
-
+                        </template>
+                        <template slot="state" slot-scope="{ row }">
+                            <el-button type="text" @click="openConfig(row)"> 正常 </el-button>
                         </template>
                     </avue-crud>
                 </basic-container>
             </el-col>
         </el-row>
-        <!-- <el-dialog title="预警配置" :visible.sync="configDialog" width="600px" :before-close="handleClose"
-      :close-on-click-modal="false" append-to-body>
-      <el-form label-width="120px">
-        <el-form-item label="预警总开关">
-          <el-switch v-model="warningConfig.configSw" active-color="#13ce66" inactive-color="#ff4949" active-text="开"
-            inactive-text="关">
-          </el-switch>
-        </el-form-item>
-      </el-form>
-      <span slot="footer" class="dialog-footer">
-        <el-button @click="configDialog = false" size="small">取 消</el-button>
-        <el-button type="primary" @click="confirmConfig" size="small">确 定</el-button>
-      </span>
-    </el-dialog>
-
-    <el-dialog title="巡检计划"  :visible.sync="projectPlanDialog" v-if="projectPlanDialog" width="60%" height="60%" :close-on-click-modal="false"
-      append-to-body>
-      <projectPlan :planSetting="planSetting"  
-        ref="projectPlan"></projectPlan>
-    </el-dialog> -->
-
-
     </div>
 </template>
-  
-<script>
-// import { getRtuList, getRtuKindList,getDetail, add, update, remove } from "@/api/baseinfo/rtu.js";
 
-import { getOrgTree, getServicePersonList, getDetail, add, update, remove } from "@/api/baseinfo/servicePerson.js";
-
-// import {
-//   getList,
-// } from "@/api/system/dictbiz.js";
-
-// import {
-//   getDeptTree,
-// } from "@/api/system/dept.js";
+<script>
 
-// import projectPlan from '@/views/project/projectPlan.vue'
+import { getPage, getDetail, add, update, remove } from "@/api/baseinfo/serviceperson.js";
 
 export default {
     components: {
-        // projectPlan,
+
     },
     data() {
         return {
-            rtuKinds: [],
-            projectPlanDialog: false,
-            orderDialog: false,
-            warningConfig: {
-                configSw: false,
-                code: "",
-            },
-            planSetting: {
-                orgId: 0,
-                projectId: 0,
-                planTitle: ''
-            },
-            infoDialog: false,
-            configDialog: false,
             id: "",
             editForm: {},
             editDialog: false,
@@ -118,52 +54,21 @@ export default {
                 currentPage: 1,
                 total: 0,
             },
-            treeOption: {
-                nodeKey: "id",
-                lazy: true,
-                treeLoad: function (node, resolve) {
-                    const parentId = node.level === 0 ? 0 : node.data.id;
-                    console.log(parentId)
-                    console.log(resolve)
-                    // getDeptLazyTree(parentId).then((res) => {
-                    //   resolve(
-                    //     res.data.data.map((item) => {
-                    //       return {
-                    //         ...item,
-                    //         leaf: !item.hasChildren,
-                    //       };
-                    //     })
-                    //   );
-                    // });
-                },
-                addBtn: false,
-                menu: false,
-                size: "small",
-                props: {
-                    labelText: "标题",
-                    label: "title",
-                    value: "value",
-                    children: "children",
-                },
-            },
             option: {
-                labelWidth: 120,
-                viewLabelWidth: 100,
-                searchlabelWidth: 100,
-                // height: "auto",
-                height: 500,
-                calcHeight: 30,
+                labelWidth: 140,
+                viewLabelWidth: 140,
+                searchLabelWidth: 140,
+                height: "auto",
+                calcHeight: 80,
                 align: "center",
                 headerAlign: "center",
-                // lazy: true,
                 tip: false,
                 simplePage: true,
                 searchShow: true,
                 searchMenuSpan: 6,
-                // tree: true,
                 border: true,
                 index: true,
-                selection: true,
+                selection: false,
                 viewBtn: false,
                 viewTitle: "运维人员信息",
                 editBtn: true,
@@ -171,68 +76,96 @@ export default {
                 menuWidth: 220,
                 dialogType: "drawer",
                 dialogClickModal: false,
+                addBtnText: "新增用户",
+                columnBtn: false,
                 column: [
                     {
-                        label: "帐号",
-                        prop: "userAccount",
-                        span: 12,
-                        tip: "密码默认为帐号+@2022",
+                        label: "登录帐号",
+                        prop: "account",
+                        span: 24,
+                        tip: "密码默认为帐号+@8282",
                         tipPlacement: 'right-end',
-                        hide: true,
                         editDisabled: true,
+                        rules: [
+                            {
+                                required: true,
+                                message: "请录入登录帐号",
+                                trigger: "click",
+                            },
+                        ],
                     },
                     {
-                        label: "名称",
-                        prop: "personName",
+                        label: "用户名称",
+                        prop: "realName",
                         search: true,
                         span: 24,
+                        rules: [
+                            {
+                                required: true,
+                                message: "请录入用户名称",
+                                trigger: "click",
+                            },
+                        ],
                     },
                     {
                         label: "联系电话",
-                        prop: "contactPhone",
+                        prop: "phone",
                         search: true,
-                        span: 12,
+                        span: 24,
                         editDisplay: true,
                         addDisplay: true,
+                        rules: [
+                            {
+                                required: true,
+                                message: "请录入联系电话",
+                                trigger: "click",
+                            },
+                        ],
                     },
                     {
                         label: "邮箱",
-                        prop: "mail",
-                        span: 12,
+                        prop: "email",
+                        span: 24,
                         editDisplay: true,
                         addDisplay: true,
                     },
                     {
-                        label: "所属机构",
-                        prop: "orgId",
-                        span: 24,
+                        label: "所属运维单位",
+                        prop: "deptName",
+                        span: 12,
+                        addDisplay: false,
+                        editDisabled: true,
+                        rules: [
+                            {
+                                required: true,
+                                message: "请录入单位名称",
+                                trigger: "click",
+                            },
+                        ],
+                    }
+                    ,
+                    {
+                        label: "所属运维单位",
+                        prop: "deptId",
+                        span: 12,
                         hide: true,
                         viewDisplay: false,
-
-                        dicData: [],
+                        editDisplay: false,
                         type: "select",
-
                         addDisabled: false,
                         props: {
                             label: "deptName",
                             value: "id"
                         },
+                        dicUrl: "/api/galaxy-business/baseinfo/org/list",
                         rules: [
                             {
-                                required: false,
-                                message: "请选择机构",
+                                required: true,
+                                message: "请选择运维单位",
                                 trigger: "click",
                             },
                         ],
                     },
-                    {
-                        label: "备注说明",
-                        prop: "remark",
-                        span: 24,
-                        type: "textarea",
-                        editDisplay: true,
-                        addDisplay: true,
-                    },
                 ],
             },
             data: [],
@@ -258,47 +191,8 @@ export default {
     },
     mounted() { },
     created() {
-        this.initData();
     },
-
     methods: {
-        initData() {
-            getOrgTree().then((res) => {
-                const column = this.findObject(this.option.column, "orgId");
-                column.dicData = res.data.data;
-            });
-        },
-
-        confirmConfig() {
-
-        },
-        warnSetting(item) {
-            this.configSw = item.configSw;
-            this.configDialog = true;
-        },
-        planManage(item) {
-            const planDate = new Date();
-            this.planSetting.orgId = item.orgId;
-            this.planSetting.projectId = item.id;
-            const y = planDate.getFullYear();
-            this.planSetting.planTitle = "" + y + "年" + item.orgName + "(" + item.projectName + ")巡检计划";
-            this.projectPlanDialog = true;
-        },
-        // openInfo(item) {
-        //   this.id = item.id;
-        //   this.infoDialog = true;
-        //   this.$nextTick(() => {
-        //     this.$refs["warningInfo"].init();
-        //   });
-        // },
-        // openOrder(item) {
-        //   this.id = item.id;
-        //   this.orderDialog = true;
-        //   this.$nextTick(() => {
-        //     this.$refs["maintainOrder"].init();
-        //   });
-        // },
-
         rowSave(row, done, loading) {
             add(row).then(
                 () => {
@@ -359,11 +253,10 @@ export default {
             done();
         },
         selectionChange(list) {
-            this.$message.success("ssssssssssssssssssssssssss")
             this.selectionList = list;
         },
         selectChange(item) {
-            this.$message.success("sssssssssssssssss" + item)
+            console.log(item)
         },
         selectionClear() {
             this.selectionList = [];
@@ -392,17 +285,9 @@ export default {
                 });
         },
         beforeOpen(done, type) {
-
-
-            // if (["add", "edit"].includes(type)) {
-            //     this.initData();
-            //   }
-
             if (["edit", "view"].includes(type)) {
                 getDetail(this.form.id).then((res) => {
                     this.form = res.data.data;
-                    //   this.from['rtuKinds']=this.rtuKinds;
-                    //this.$message.success(this.form)
                 });
             }
             done();
@@ -418,7 +303,7 @@ export default {
         },
         onLoad(page, params = {}) {
             this.loading = true;
-            getServicePersonList(
+            getPage(
                 page.currentPage,
                 page.pageSize,
                 Object.assign(params, this.query)
@@ -433,4 +318,3 @@ export default {
     },
 };
 </script>
-  

+ 252 - 0
src/views/baseinfo/companydept.vue

@@ -0,0 +1,252 @@
+<!--
+ * @Title: 
+ * @Description: 运维公司机构管理
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+    <div>
+        <el-row>
+            <el-col :span="24">
+                <basic-container>
+                    <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page"
+                        :before-open="beforeOpen" ref="crud" v-model="form" :permission="permissionList" @row-del="rowDel"
+                        @row-update="rowUpdate" @row-save="rowSave" @search-change="searchChange"
+                        @search-reset="searchReset" @selection-change="selectionChange" @current-change="currentChange"
+                        @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad"
+                        @before-open="beforeOpen" @select-change="selectChange">
+                    </avue-crud>
+                </basic-container>
+            </el-col>
+        </el-row>
+    </div>
+</template>
+
+<script>
+
+import { getPage, getDetail, add, update, remove } from "@/api/baseinfo/org.js";
+
+export default {
+    components: {
+
+    },
+    data() {
+        return {
+            id: "",
+            editForm: {},
+            editDialog: false,
+            form: {},
+            selectionList: [],
+            query: {},
+            loading: true,
+            page: {
+                pageSize: 10,
+                currentPage: 1,
+                total: 0,
+            },
+            option: {
+                labelWidth: 140,
+                viewLabelWidth: 140,
+                searchLabelWidth: 140,
+                height: "auto",
+                calcHeight: 80,
+                align: "center",
+                headerAlign: "center",
+                tip: false,
+                simplePage: true,
+                searchShow: true,
+                searchMenuSpan: 6,
+                border: true,
+                index: true,
+                selection: false,
+                viewBtn: false,
+                viewTitle: "运维人员信息",
+                editBtn: true,
+                delBtn: true,
+                menuWidth: 220,
+                dialogType: "drawer",
+                dialogClickModal: false,
+                columnBtn: false,
+                addBtnText: "新增运维单位",
+                column: [
+                    {
+                        label: "运维单位全称",
+                        prop: "deptName",
+                        span: 24,
+                        search: true,
+                        rules: [
+                            {
+                                required: true,
+                                message: "请录入运维单位全称",
+                                trigger: "click",
+                            },
+                        ],
+                    },
+                    {
+                        label: "运维行政区划",
+                        prop: "adnm",
+                        span: 24,
+                        editDisabled: true,
+                        addDisplay: false,
+                    },
+                    {
+                        label: "备注说明",
+                        prop: "remark",
+                        span: 24,
+                        type: "textarea",
+                    },
+                ],
+            },
+            data: [],
+        };
+    },
+    computed: {
+        // ...mapGetters(["userInfo", "permission"]),
+        permissionList() {
+            return {
+                // addBtn: this.vaildData(this.permission.docCategory_add, false),
+                // viewBtn: this.vaildData(this.permission.docCategory_view, false),
+                // delBtn: this.vaildData(this.permission.docCategory_delete, false),
+                // editBtn: this.vaildData(this.permission.docCategory_edit, false),
+            };
+        },
+        ids() {
+            let ids = [];
+            this.selectionList.forEach((ele) => {
+                ids.push(ele.id);
+            });
+            return ids.join(",");
+        },
+    },
+    mounted() { },
+    created() {
+
+    },
+    methods: {
+        rowSave(row, done, loading) {
+            add(row).then(
+                () => {
+                    this.onLoad(this.page);
+                    this.$message({
+                        type: "success",
+                        message: "操作成功!",
+                    });
+                    done();
+                },
+                (error) => {
+                    window.console.log(error);
+                    loading();
+                }
+            );
+        },
+        rowUpdate(row, index, done, loading) {
+            update(row).then(
+                () => {
+                    this.onLoad(this.page);
+                    this.$message({
+                        type: "success",
+                        message: "操作成功!",
+                    });
+                    done();
+                },
+                (error) => {
+                    window.console.log(error);
+                    loading();
+                }
+            );
+        },
+        rowDel(row) {
+            this.$confirm("确定将选择数据删除?", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning",
+            })
+                .then(() => {
+                    return remove(row.id);
+                })
+                .then(() => {
+                    this.onLoad(this.page);
+                    this.$message({
+                        type: "success",
+                        message: "操作成功!",
+                    });
+                });
+        },
+        searchReset() {
+            this.query = {};
+            this.onLoad(this.page);
+        },
+        searchChange(params, done) {
+            this.query = params;
+            this.page.currentPage = 1;
+            this.onLoad(this.page, params);
+            done();
+        },
+        selectionChange(list) {
+            this.selectionList = list;
+        },
+        selectChange(item) {
+            console.log(item)
+        },
+        selectionClear() {
+            this.selectionList = [];
+            this.$refs.crud.toggleSelection();
+        },
+        handleDelete() {
+            if (this.selectionList.length === 0) {
+                this.$message.warning("请选择至少一条数据");
+                return;
+            }
+            this.$confirm("确定将选择数据删除?", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning",
+            })
+                .then(() => {
+                    return remove(this.ids);
+                })
+                .then(() => {
+                    this.onLoad(this.page);
+                    this.$message({
+                        type: "success",
+                        message: "操作成功!",
+                    });
+                    this.$refs.crud.toggleSelection();
+                });
+        },
+        beforeOpen(done, type) {
+            if (["edit", "view"].includes(type)) {
+                getDetail(this.form.id).then((res) => {
+                    this.form = res.data.data;
+                });
+            }
+            done();
+        },
+        currentChange(currentPage) {
+            this.page.currentPage = currentPage;
+        },
+        sizeChange(pageSize) {
+            this.page.pageSize = pageSize;
+        },
+        refreshChange() {
+            this.onLoad(this.page, this.query);
+        },
+        onLoad(page, params = {}) {
+            this.loading = true;
+            getPage(
+                page.currentPage,
+                page.pageSize,
+                Object.assign(params, this.query)
+            ).then((res) => {
+                const data = res.data.data;
+                this.page.total = data.total;
+                this.data = data.records;
+                this.loading = false;
+                this.selectionClear();
+            });
+        },
+    },
+};
+</script>

+ 64 - 194
src/views/data/rtuimport.vue → src/views/baseinfo/companyserviceperson.vue

@@ -1,7 +1,7 @@
 <!--
  * @Title: 
- * @Description: 
- * @Author: 893699165@qq.com
+ * @Description: 运维公司运维人员管理
+ * @Author: swp
  * @Date: 2022-08-24 10:49:21
  * @LastEditors: 
  * @LastEditTime: 2022-08-24 10:49:21
@@ -9,192 +9,126 @@
 <template>
     <div>
         <el-row>
-            <!-- <el-col :span="5">
-        <div class="box">
-          <el-scrollbar>
-          <basic-container>
-            <avue-tree
-              :option="treeOption"
-              :data="treeData"
-              @node-click="nodeClick"
-            />
-          </basic-container>
-        </el-scrollbar>
-        </div>
-      </el-col> -->
             <el-col :span="24">
                 <basic-container>
                     <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page"
-                        :before-open="beforeOpen" ref="crud" v-model="form" :permission="permissionList"
-                        @row-del="rowDel" @row-update="rowUpdate" @row-save="rowSave" @search-change="searchChange"
+                        :before-open="beforeOpen" ref="crud" v-model="form" :permission="permissionList" @row-del="rowDel"
+                        @row-update="rowUpdate" @row-save="rowSave" @search-change="searchChange"
                         @search-reset="searchReset" @selection-change="selectionChange" @current-change="currentChange"
                         @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad"
-                        @before-open="beforeOpen">
+                        @before-open="beforeOpen" @select-change="selectChange">
                         <template slot="state" slot-scope="{ row }">
                             <el-button type="text" @click="openConfig(row)"> 正常 </el-button>
                         </template>
                         <template slot-scope="{ row, index }" slot="menu">
-
-                            <el-button type="text" size="small" @click="rtuImport(row)">导入测站
-                            </el-button>
-
+                        </template>
+                        <template slot="state" slot-scope="{ row }">
+                            <el-button type="text" @click="openConfig(row)"> 正常 </el-button>
                         </template>
                     </avue-crud>
                 </basic-container>
             </el-col>
         </el-row>
-
-        <el-dialog title="导入向导" :visible.sync="rtuImportProcessDialog" width="60%" height="60%"
-            :close-on-click-modal="false" append-to-body :v-loading="importLoading" v-if="rtuImportProcessDialog">
-            <rtuImportProcess :id="projectId" :projectName="projectName" :importLoading="importLoading"
-                :visible.sync="rtuImportProcessDialog" ref="rtuImportProcess"></rtuImportProcess>
-        </el-dialog>
-
     </div>
 </template>
 
 <script>
-import { getPage, getDetail, add, update, remove } from "@/api/baseinfo/project";
-// import { mapGetters } from "vuex";
-//   import warningInfo from "./warningInfo.vue";
-//   import maintainOrder from "./maintainOrder.vue";
-import {
-    getDeptTree,
-} from "@/api/system/dept.js";
-import { getToken } from "@/util/auth";
-// import { dateFormat } from "@/util/date";
-import rtuImportProcess from "./rtuImportProcess.vue";
+
+import { getPage, getDetail, add, update, remove } from "@/api/baseinfo/serviceperson.js";
+
 export default {
     components: {
-        rtuImportProcess,
 
     },
     data() {
         return {
-            importLoading: false,
-            loading: false,
-            rtuImportProcessDialog: false,
-            warningConfig: {
-                configSw: false,
-                code: "",
-            },
-            infoDialog: false,
-            rtuImportDialog: false,
-
-            projectId: 0,
-            projectName: '',
-
             id: "",
             editForm: {},
             editDialog: false,
             form: {},
             selectionList: [],
             query: {},
-
+            loading: true,
             page: {
                 pageSize: 10,
                 currentPage: 1,
                 total: 0,
             },
-            treeOption: {
-                nodeKey: "id",
-                lazy: true,
-                treeLoad: function (node, resolve) {
-                    const parentId = node.level === 0 ? 0 : node.data.id;
-                    console.log(parentId)
-                    console.log(resolve)
-                    // getDeptLazyTree(parentId).then((res) => {
-                    //   resolve(
-                    //     res.data.data.map((item) => {
-                    //       return {
-                    //         ...item,
-                    //         leaf: !item.hasChildren,
-                    //       };
-                    //     })
-                    //   );
-                    // });
-                },
-                addBtn: false,
-                menu: false,
-                size: "small",
-                props: {
-                    labelText: "标题",
-                    label: "title",
-                    value: "value",
-                    children: "children",
-                },
-            },
             option: {
-                labelWidth: 120,
-                viewLabelWidth: 100,
-                searchlabelWidth: 100,
-                // height: "auto",
-                height: 600,
-                calcHeight: 30,
+                labelWidth: 140,
+                viewLabelWidth: 140,
+                searchlabelWidth: 140,
+                height: "auto",
+                calcHeight: 80,
                 align: "center",
                 headerAlign: "center",
-                lazy: true,
                 tip: false,
                 simplePage: true,
                 searchShow: true,
                 searchMenuSpan: 6,
-                tree: true,
                 border: true,
                 index: true,
-                selection: true,
+                selection: false,
                 viewBtn: false,
-                viewTitle: "测站导入",
-                editBtn: false,
-                delBtn: false,
-                addBtn: false,
+                viewTitle: "运维人员信息",
+                editBtn: true,
+                delBtn: true,
                 menuWidth: 220,
                 dialogType: "drawer",
                 dialogClickModal: false,
+                addBtnText: "新增用户",
+                columnBtn: false,
                 column: [
                     {
-                        label: "项目名称",
-                        prop: "projectName",
-                        search: true,
-                        span: 12,
+                        label: "登录帐号",
+                        prop: "account",
+                        span: 24,
+                        tip: "密码默认为帐号+@8282",
+                        tipPlacement: 'right-end',
+                        editDisabled: true,
+                        rules: [
+                            {
+                                required: true,
+                                message: "请录入登录帐号",
+                                trigger: "click",
+                            },
+                        ],
                     },
                     {
-                        label: "所属机构",
-                        prop: "orgId",
-                        span: 12,
-                        hide: true,
-                        viewDisplay: false,
-
-
-                        dicData: [],
-                        type: "tree",
-
-                        addDisabled: false,
-                        props: {
-                            label: "title",
-                        },
+                        label: "用户名称",
+                        prop: "realName",
+                        search: true,
+                        span: 24,
                         rules: [
                             {
-                                required: false,
-                                message: "请选择机构",
+                                required: true,
+                                message: "请录入用户名称",
                                 trigger: "click",
                             },
                         ],
                     },
                     {
-                        label: "所属机构",
-                        prop: "orgName",
-                        span: 12,
-                        editDisplay: false,
-                        addDisplay: false,
+                        label: "联系电话",
+                        prop: "phone",
+                        search: true,
+                        span: 24,
+                        editDisplay: true,
+                        addDisplay: true,
+                        rules: [
+                            {
+                                required: true,
+                                message: "请录入联系电话",
+                                trigger: "click",
+                            },
+                        ],
                     },
-
                     {
-                        label: "导入时间",
-                        prop: "importTime",
-                        span: 8,
-
-                    },
-
+                        label: "邮箱",
+                        prop: "email",
+                        span: 24,
+                        editDisplay: true,
+                        addDisplay: true,
+                    }
                 ],
             },
             data: [],
@@ -220,70 +154,8 @@ export default {
     },
     mounted() { },
     created() {
-        this.initData();
     },
     methods: {
-        handleRemove(file, fileList) {
-            this.$message.warning("超出文件上传数量{}{}", file, fileList);
-            //this.ruleForm.attach = "";
-        },
-        onExceed(file, fileList) {
-            this.$message.warning("超出文件上传数量{}{}", file, fileList);
-
-        },
-        uploadUrl: function () {
-            return `/api/galaxy-test/data/manage/import/rtu?${this.website.tokenHeader
-                }=${getToken()}`;
-        },
-        beforeUpload() {
-            this.loading = true;
-        },
-        uploadSuccess(response, file, fileList) {
-            console.log("---response:", response);
-            console.log("---file:", file);
-
-            console.log("---fileList:", fileList);
-            this.fileList = [];
-            this.loading = false;
-            this.$message.success("导入成功");
-            this.changeDate();
-        },
-        initData() {
-            getDeptTree('000000').then((res) => {
-                const column = this.findObject(this.option.column, "orgId");
-                column.dicData = res.data.data;
-            });
-        },
-
-        rtuImport(item) {
-            //this.$message.de("11111111111"+item.id);
-            // this.$message.log("11111111111"+item.projectName);
-
-            //  this.$message({
-            //           type: "success",
-            //           message: "操作成功!"+item.projectName,
-            //         });
-
-            this.projectName = item.projectName;
-            this.projectId = item.id;
-            this.rtuImportProcessDialog = true;
-        },
-
-        // openInfo(item) {
-        //   this.id = item.id;
-        //   this.infoDialog = true;
-        //   this.$nextTick(() => {
-        //     this.$refs["warningInfo"].init();
-        //   });
-        // },
-        // openOrder(item) {
-        //   this.id = item.id;
-        //   this.orderDialog = true;
-        //   this.$nextTick(() => {
-        //     this.$refs["maintainOrder"].init();
-        //   });
-        // },
-
         rowSave(row, done, loading) {
             add(row).then(
                 () => {
@@ -346,6 +218,9 @@ export default {
         selectionChange(list) {
             this.selectionList = list;
         },
+        selectChange(item) {
+            console.log(item)
+        },
         selectionClear() {
             this.selectionList = [];
             this.$refs.crud.toggleSelection();
@@ -373,11 +248,6 @@ export default {
                 });
         },
         beforeOpen(done, type) {
-
-
-            // if (["add", "edit"].includes(type)) {
-            //     this.initData();
-            //   }
             if (["edit", "view"].includes(type)) {
                 getDetail(this.form.id).then((res) => {
                     this.form = res.data.data;

+ 106 - 156
src/views/project/projectPlan.vue → src/views/baseinfo/orgadminperson.vue

@@ -1,7 +1,7 @@
 <!--
  * @Title: 
- * @Description: 
- * @Author: 893699165@qq.com
+ * @Description: 盟市管理员用户管理
+ * @Author: swp
  * @Date: 2022-08-24 10:49:21
  * @LastEditors: 
  * @LastEditTime: 2022-08-24 10:49:21
@@ -9,56 +9,40 @@
 <template>
     <div>
         <el-row>
-
             <el-col :span="24">
                 <basic-container>
                     <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page"
-                        :before-open="beforeOpen" ref="crud" v-model="form" :permission="permissionList"
-                        @row-del="rowDel" @row-update="rowUpdate" @row-save="rowSave" @search-change="searchChange"
+                        :before-open="beforeOpen" ref="crud" v-model="form" :permission="permissionList" @row-del="rowDel"
+                        @row-update="rowUpdate" @row-save="rowSave" @search-change="searchChange"
                         @search-reset="searchReset" @selection-change="selectionChange" @current-change="currentChange"
                         @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad"
-                        @before-open="beforeOpen">
+                        @before-open="beforeOpen" @select-change="selectChange">
+                        <template slot="state" slot-scope="{ row }">
+                            <el-button type="text" @click="openConfig(row)"> 正常 </el-button>
+                        </template>
+                        <template slot-scope="{ row, index }" slot="menu">
+                        </template>
                         <template slot="state" slot-scope="{ row }">
                             <el-button type="text" @click="openConfig(row)"> 正常 </el-button>
                         </template>
-                        <!-- <template slot-scope="{ row, index }" slot="menu">
-
-              <el-button type="text" size="small" @click="warnSetting">预警配置
-              </el-button>
-
-            </template> -->
                     </avue-crud>
                 </basic-container>
             </el-col>
         </el-row>
-
-
     </div>
 </template>
-  
+
 <script>
-import { getPage, getDetail, add, update, remove } from "@/api/project/projectPlan.js";
 
-// import {
-//   getDeptTree,
-// } from "@/api/system/dept.js";
+import { getPage, getDetail, add, update, remove } from "@/api/baseinfo/serviceperson.js";
 
 export default {
     components: {
 
     },
-    props: {
-        planSetting: {
-            type: [Object],
-            required: true
-        },
-
-
-    },
-    name: 'projectPlan',
     data() {
         return {
-
+            id: "",
             editForm: {},
             editDialog: false,
             form: {},
@@ -70,86 +54,118 @@ export default {
                 currentPage: 1,
                 total: 0,
             },
-            treeOption: {
-                nodeKey: "id",
-                lazy: true,
-                treeLoad: function (node, resolve) {
-                    const parentId = node.level === 0 ? 0 : node.data.id;
-                    console.log(parentId)
-                    console.log(resolve)
-                    // getDeptLazyTree(parentId).then((res) => {
-                    //   resolve(
-                    //     res.data.data.map((item) => {
-                    //       return {
-                    //         ...item,
-                    //         leaf: !item.hasChildren,
-                    //       };
-                    //     })
-                    //   );
-                    // });
-                },
-                addBtn: false,
-                menu: false,
-                size: "small",
-                props: {
-                    labelText: "标题",
-                    label: "title",
-                    value: "value",
-                    children: "children",
-                },
-            },
             option: {
                 labelWidth: 120,
                 viewLabelWidth: 100,
-                searchlabelWidth: 100,
-                //height: "auto",
-                height: 400,
-                calcHeight: 30,
+                searchlabelWidth: 140,
+                height: "auto",
+                calcHeight: 80,
                 align: "center",
                 headerAlign: "center",
-                lazy: false,
                 tip: false,
                 simplePage: true,
-                searchShow: false,
+                searchShow: true,
                 searchMenuSpan: 6,
-                tree: false,
                 border: true,
                 index: true,
-                selection: true,
+                selection: false,
                 viewBtn: false,
-                viewTitle: "计划信息",
-                addBtn: true,
+                viewTitle: "运维人员信息",
                 editBtn: true,
                 delBtn: true,
                 menuWidth: 220,
                 dialogType: "drawer",
                 dialogClickModal: false,
+                addBtnText: "新增用户",
+                columnBtn: false,
                 column: [
                     {
-                        label: "计划名称",
-                        prop: "planTitle",
-                        span: 12,
+                        label: "登录帐号",
+                        prop: "account",
+                        span: 24,
+                        tip: "密码默认为帐号+@8282",
+                        tipPlacement: 'right-end',
+                        editDisabled: true,
+                        rules: [
+                            {
+                                required: true,
+                                message: "请录入登录帐号",
+                                trigger: "click",
+                            },
+                        ],
                     },
-
                     {
-                        label: "计划开始时间",
-                        prop: "inspectionStartTime",
-                        span: 12,
-                        type: 'date'
+                        label: "用户名称",
+                        prop: "realName",
+                        search: true,
+                        span: 24,
+                        rules: [
+                            {
+                                required: true,
+                                message: "请录入用户名称",
+                                trigger: "click",
+                            },
+                        ],
                     },
-
                     {
-                        label: "计划结束时间",
-                        prop: "inspectionEndTime",
-                        span: 12,
-                        type: 'date'
+                        label: "联系电话",
+                        prop: "phone",
+                        search: true,
+                        span: 24,
+                        editDisplay: true,
+                        addDisplay: true,
+                        rules: [
+                            {
+                                required: true,
+                                message: "请录入联系电话",
+                                trigger: "click",
+                            },
+                        ],
                     },
                     {
-                        label: "备注说明",
-                        prop: "remark",
-                        span: 8,
+                        label: "邮箱",
+                        prop: "email",
+                        span: 24,
+                        editDisplay: true,
+                        addDisplay: true,
+                    },
+                    {
+                        label: "所属机构",
+                        prop: "deptName",
+                        span: 12,
+                        addDisplay: false,
+                        editDisabled: true,
+                        rules: [
+                            {
+                                required: true,
+                                message: "请录入机构名称",
+                                trigger: "click",
+                            },
+                        ],
+                    }
+                    ,
+                    {
+                        label: "所属盟市机构",
+                        prop: "deptId",
+                        span: 12,
+                        hide: true,
+                        viewDisplay: false,
+                        editDisplay: false,
+                        type: "select",
+                        addDisabled: false,
+                        props: {
+                            label: "deptName",
+                            value: "id"
+                        },
+                        dicUrl: "/api/galaxy-business/baseinfo/org/list",
+                        rules: [
+                            {
+                                required: true,
+                                message: "请选择盟市机构",
+                                trigger: "click",
+                            },
+                        ],
                     },
-
                 ],
             },
             data: [],
@@ -173,62 +189,10 @@ export default {
             return ids.join(",");
         },
     },
-    mounted() {
-
-
-    },
+    mounted() { },
     created() {
-
-        // this.query = {
-        //     'orgId': this.planSetting.orgId,
-        //     'projectId': this.planSetting.projectId,
-        // }
-        this.initData();
     },
     methods: {
-        initData() {
-
-            const planDate = new Date();
-
-            const y = planDate.getFullYear();
-
-            this.form = {
-                'planTitle': this.planSetting.planTitle,
-                'inspectionStartTime': "" + y + "-01-01",
-                'inspectionEndTime': "" + y + "-12-31",
-            };
-            // this.form['planTitle'] = this.planTitle;
-            // this.from['orgId'] = this.orgId;
-            // this.from['projectId'] = this.projectId;
-            // this.$message.success(this.planTitle)
-            // getDeptTree('000000').then((res) => {
-            //   const column = this.findObject(this.option.column, "orgId");
-            //   column.dicData = res.data.data;
-            // });
-        },
-
-        // confirmConfig() {
-
-        // },
-        // warnSetting(item) {
-        //     this.configSw = item.configSw;
-        //     this.configDialog = true;
-        // },
-        // openInfo(item) {
-        //   this.id = item.id;
-        //   this.infoDialog = true;
-        //   this.$nextTick(() => {
-        //     this.$refs["warningInfo"].init();
-        //   });
-        // },
-        // openOrder(item) {
-        //   this.id = item.id;
-        //   this.orderDialog = true;
-        //   this.$nextTick(() => {
-        //     this.$refs["maintainOrder"].init();
-        //   });
-        // },
-
         rowSave(row, done, loading) {
             add(row).then(
                 () => {
@@ -279,16 +243,11 @@ export default {
                 });
         },
         searchReset() {
-            this.query = {
-                'orgId': this.planSetting.orgId,
-                'projectId': this.planSetting.projectId,
-            }
+            this.query = {};
             this.onLoad(this.page);
         },
         searchChange(params, done) {
             this.query = params;
-            this.query['orgId'] = this.planSetting.projectId;
-            this.query['projectId'] = this.planSetting.projectId;
             this.page.currentPage = 1;
             this.onLoad(this.page, params);
             done();
@@ -296,6 +255,9 @@ export default {
         selectionChange(list) {
             this.selectionList = list;
         },
+        selectChange(item) {
+            console.log(item);
+        },
         selectionClear() {
             this.selectionList = [];
             this.$refs.crud.toggleSelection();
@@ -323,17 +285,7 @@ export default {
                 });
         },
         beforeOpen(done, type) {
-
-            //     this.$message.success("beforeOpenbeforeOpenbeforeOpenbeforeOpenbeforeOpenbeforeOpenbeforeOpenbeforeOpen")
-
-            //   this.query={
-            //   'orgId':this.planSetting.orgId,
-            //   'projectId':this.planSetting.projectId,
-            // }
-            //   if (["add", "edit"].includes(type)) {
-            //     this.initData();
-            //   }
-            if (["edit"].includes(type)) {
+            if (["edit", "view"].includes(type)) {
                 getDetail(this.form.id).then((res) => {
                     this.form = res.data.data;
                 });
@@ -350,7 +302,6 @@ export default {
             this.onLoad(this.page, this.query);
         },
         onLoad(page, params = {}) {
-
             this.loading = true;
             getPage(
                 page.currentPage,
@@ -367,4 +318,3 @@ export default {
     },
 };
 </script>
-  

+ 270 - 0
src/views/baseinfo/orgdept.vue

@@ -0,0 +1,270 @@
+<!--
+ * @Title: 
+ * @Description: 盟市机构管理
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+    <div>
+        <el-row>
+            <el-col :span="24">
+                <basic-container>
+                    <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page"
+                        :before-open="beforeOpen" ref="crud" v-model="form" :permission="permissionList" @row-del="rowDel"
+                        @row-update="rowUpdate" @row-save="rowSave" @search-change="searchChange"
+                        @search-reset="searchReset" @selection-change="selectionChange" @current-change="currentChange"
+                        @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad"
+                        @before-open="beforeOpen" @select-change="selectChange">
+                    </avue-crud>
+                </basic-container>
+            </el-col>
+        </el-row>
+    </div>
+</template>
+
+<script>
+import { getPage, getDetail, add, update, remove } from "@/api/baseinfo/org.js";
+
+export default {
+    components: {
+
+    },
+    data() {
+        return {
+            id: "",
+            editForm: {},
+            editDialog: false,
+            form: {},
+            selectionList: [],
+            query: {},
+            loading: true,
+            page: {
+                pageSize: 10,
+                currentPage: 1,
+                total: 0,
+            },
+            option: {
+                labelWidth: 140,
+                viewLabelWidth: 140,
+                searchlabelWidth: 140,
+                height: "auto",
+                calcHeight: 80,
+                align: "center",
+                headerAlign: "center",
+                tip: false,
+                simplePage: true,
+                searchShow: true,
+                searchMenuSpan: 6,
+                border: true,
+                index: true,
+                selection: false,
+                viewBtn: false,
+                viewTitle: "运维人员信息",
+                editBtn: true,
+                delBtn: true,
+                menuWidth: 220,
+                dialogType: "drawer",
+                dialogClickModal: false,
+                columnBtn: false,
+                addBtnText: "新增盟市",
+                column: [
+                    {
+                        label: "盟市全称",
+                        prop: "deptName",
+                        span: 24,
+                        search: true,
+                        rules: [
+                            {
+                                required: true,
+                                message: "请录入盟市全称",
+                                trigger: "click",
+                            },
+                        ],
+                    },
+                    {
+                        label: "运维行政区划",
+                        prop: "adcd",
+                        span: 24,
+                        hide: true,
+                        editDisplay: false,
+                        type: "select",
+                        dicUrl: `./api/galaxy-business/baseinfo/region/children/list`,
+                        props: {
+                            label: "adnm",
+                            value: "adcd",
+                        },
+                        rules: [
+                            {
+                                required: true,
+                                message: "请选择运维的行政区划",
+                                trigger: "click",
+                            },
+                        ],
+                    },
+                    {
+                        label: "运维行政区划",
+                        prop: "adnm",
+                        span: 24,
+                        editDisabled: true,
+                        addDisplay: false,
+                    },
+                    {
+                        label: "备注说明",
+                        prop: "remark",
+                        span: 24,
+                        type: "textarea",
+                    },
+                ],
+            },
+            data: [],
+        };
+    },
+    computed: {
+        // ...mapGetters(["userInfo", "permission"]),
+        permissionList() {
+            return {
+                // addBtn: this.vaildData(this.permission.docCategory_add, false),
+                // viewBtn: this.vaildData(this.permission.docCategory_view, false),
+                // delBtn: this.vaildData(this.permission.docCategory_delete, false),
+                // editBtn: this.vaildData(this.permission.docCategory_edit, false),
+            };
+        },
+        ids() {
+            let ids = [];
+            this.selectionList.forEach((ele) => {
+                ids.push(ele.id);
+            });
+            return ids.join(",");
+        },
+    },
+    mounted() { },
+    created() {
+    },
+    methods: {
+        rowSave(row, done, loading) {
+            add(row).then(
+                () => {
+                    this.onLoad(this.page);
+                    this.$message({
+                        type: "success",
+                        message: "操作成功!",
+                    });
+                    done();
+                },
+                (error) => {
+                    window.console.log(error);
+                    loading();
+                }
+            );
+        },
+        rowUpdate(row, index, done, loading) {
+            update(row).then(
+                () => {
+                    this.onLoad(this.page);
+                    this.$message({
+                        type: "success",
+                        message: "操作成功!",
+                    });
+                    done();
+                },
+                (error) => {
+                    window.console.log(error);
+                    loading();
+                }
+            );
+        },
+        rowDel(row) {
+            this.$confirm("确定将选择数据删除?", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning",
+            })
+                .then(() => {
+                    return remove(row.id);
+                })
+                .then(() => {
+                    this.onLoad(this.page);
+                    this.$message({
+                        type: "success",
+                        message: "操作成功!",
+                    });
+                });
+        },
+        searchReset() {
+            this.query = {};
+            this.onLoad(this.page);
+        },
+        searchChange(params, done) {
+            this.query = params;
+            this.page.currentPage = 1;
+            this.onLoad(this.page, params);
+            done();
+        },
+        selectionChange(list) {
+            this.selectionList = list;
+        },
+        selectChange(item) {
+            console.log(item)
+        },
+        selectionClear() {
+            this.selectionList = [];
+            this.$refs.crud.toggleSelection();
+        },
+        handleDelete() {
+            if (this.selectionList.length === 0) {
+                this.$message.warning("请选择至少一条数据");
+                return;
+            }
+            this.$confirm("确定将选择数据删除?", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning",
+            })
+                .then(() => {
+                    return remove(this.ids);
+                })
+                .then(() => {
+                    this.onLoad(this.page);
+                    this.$message({
+                        type: "success",
+                        message: "操作成功!",
+                    });
+                    this.$refs.crud.toggleSelection();
+                });
+        },
+        beforeOpen(done, type) {
+            if (["edit", "view"].includes(type)) {
+                getDetail(this.form.id).then((res) => {
+                    this.form = res.data.data;
+                });
+            }
+            done();
+        },
+        currentChange(currentPage) {
+            this.page.currentPage = currentPage;
+        },
+        sizeChange(pageSize) {
+            this.page.pageSize = pageSize;
+        },
+        refreshChange() {
+            this.onLoad(this.page, this.query);
+        },
+        onLoad(page, params = {}) {
+            this.loading = true;
+            getPage(
+                page.currentPage,
+                page.pageSize,
+                Object.assign(params, this.query)
+            ).then((res) => {
+                const data = res.data.data;
+                this.page.total = data.total;
+                this.data = data.records;
+                this.loading = false;
+                this.selectionClear();
+            });
+        },
+    },
+};
+</script>

+ 30 - 33
src/views/baseinfo/project.vue

@@ -1,37 +1,37 @@
 <!--
  * @Title: 
  * @Description: 
- * @Author: 893699165@qq.com
+ * @Author: swp
  * @Date: 2022-08-24 10:49:21
  * @LastEditors: 
  * @LastEditTime: 2022-08-24 10:49:21
 -->
 <template>
     <div>
-        <el-row>
-            <!-- <el-col :span="5">
-          <div class="box">
-            <el-scrollbar>
-            <basic-container>
-              <avue-tree
-                :option="treeOption"
-                :data="treeData"
-                @node-click="nodeClick"
-              />
-            </basic-container>
-          </el-scrollbar>
-          </div>
-        </el-col> -->
+    <el-row>
+        <!-- <el-col :span="5">
+        <div class="box">
+          <el-scrollbar>
+          <basic-container>
+            <avue-tree
+                  :option="treeOption"
+                  :data="treeData"
+                  @node-click="nodeClick"
+                />
+              </basic-container>
+            </el-scrollbar>
+            </div>
+          </el-col> -->
             <el-col :span="24">
                 <basic-container>
                     <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page"
-                        :before-open="beforeOpen" ref="crud" v-model="form" :permission="permissionList"
-                        @row-del="rowDel" @row-update="rowUpdate" @row-save="rowSave" @search-change="searchChange"
+                        :before-open="beforeOpen" ref="crud" v-model="form" :permission="permissionList" @row-del="rowDel"
+                        @row-update="rowUpdate" @row-save="rowSave" @search-change="searchChange"
                         @search-reset="searchReset" @selection-change="selectionChange" @current-change="currentChange"
                         @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad"
                         @before-open="beforeOpen">
                         <template slot="state" slot-scope="{ row }">
-                            <el-button type="text" @click="openConfig(row)"> 正常 </el-button>
+                        <el-button type="text" @click="openConfig(row)"> 正常 </el-button>
                         </template>
                         <template slot-scope="{ row, index }" slot="menu">
 
@@ -39,7 +39,7 @@
                             </el-button>
 
                             <!-- <el-button type="text" size="small" @click="planManage(row)">巡检计划
-              </el-button> -->
+                </el-button> -->
 
                         </template>
                     </avue-crud>
@@ -62,23 +62,23 @@
                 <el-form-item label="">
                     <label>延时时长用于测站离线预警监测,当超过配置的时长时触发预警,默认2小时</label>
                 </el-form-item>
-            </el-form>
-            <span slot="footer" class="dialog-footer">
-                <el-button @click="warnSettingDialog = false" size="small">取 消</el-button>
-                <el-button type="primary" @click="confirmConfigClick" size="small">确 定</el-button>
+        </el-form>
+        <span slot="footer" class="dialog-footer">
+            <el-button @click="warnSettingDialog = false" size="small">取 消</el-button>
+            <el-button type="primary" @click="confirmConfigClick" size="small">确 定</el-button>
             </span>
         </el-dialog>
 
         <!-- <el-dialog title="巡检计划"  :visible.sync="projectPlanDialog" v-if="projectPlanDialog" width="60%" height="60%" :close-on-click-modal="false"
-      append-to-body>
-      <projectPlan :planSetting="planSetting"  
-        ref="projectPlan"></projectPlan>
-    </el-dialog> -->
+        append-to-body>
+        <projectPlan :planSetting="planSetting"  
+          ref="projectPlan"></projectPlan>
+      </el-dialog> -->
 
 
     </div>
 </template>
-  
+
 <script>
 import { getPage, getDetail, add, update, remove, warnSetting } from "@/api/baseinfo/project";
 
@@ -86,11 +86,10 @@ import {
     getDeptTree,
 } from "@/api/system/dept.js";
 
-import projectPlan from '@/views/project/projectPlan.vue'
 
 export default {
     components: {
-        projectPlan,
+
     },
     data() {
         return {
@@ -154,8 +153,7 @@ export default {
                 viewLabelWidth: 100,
                 searchlabelWidth: 100,
                 height: "auto",
-                // height: 600,
-                calcHeight: 30,
+                calcHeight: 80,
                 align: "center",
                 headerAlign: "center",
                 lazy: true,
@@ -470,4 +468,3 @@ export default {
     },
 };
 </script>
-  

+ 481 - 0
src/views/baseinfo/region.vue

@@ -0,0 +1,481 @@
+<template>
+    <el-row>
+        <el-col :span="9">
+            <div class="box">
+                <el-scrollbar>
+                    <basic-container>
+                        <avue-tree :option="treeOption" :data="treeData" @node-click="nodeClick">
+                            <span class="el-tree-node__label" slot-scope="{ node, data }">
+                                <span>
+                                    <i class="el-icon-office-building"></i>
+                                    {{ (node || {}).label }}
+                                </span>
+                            </span>
+                        </avue-tree>
+                    </basic-container>
+                </el-scrollbar>
+            </div>
+        </el-col>
+        <el-col :span="15">
+            <basic-container>
+                <el-button-group>
+                    <el-button v-if="permission.region_add" type="primary" size="small"
+                        icon="el-icon-circle-plus-outline" @click="addChildren">新增下级</el-button>
+                    <el-button v-if="permission.region_delete" type="primary" size="small" icon="el-icon-delete"
+                        @click="handleDelete">删除</el-button>
+                    <el-button v-if="permission.region_import" type="primary" size="small" icon="el-icon-upload2"
+                        @click="handleImport">从宏图共享数据导入行政区划</el-button>
+                    <!-- <el-button v-if="permission.region_export" type="primary" size="small" icon="el-icon-download"
+                        @click="handleExport">导出</el-button>
+                    <el-button v-if="permission.region_debug" type="primary" size="small" icon="el-icon-video-play"
+                        @click="handleDebug">调试</el-button> -->
+                </el-button-group>
+            </basic-container>
+            <basic-container>
+                <avue-form ref="form" :option="regionOption" v-model="regionForm" @submit="handleSubmit">
+                    <!-- <template slot="code" slot-scope="{}">
+                        <el-input placeholder="请输入 区划子编号" v-model="regionForm.subCode">
+                            <template slot="prepend">{{regionForm.parentCode}}</template>
+                        </el-input>
+                    </template> -->
+                </avue-form>
+                <el-dialog title="行政区划数据导入" append-to-body :visible.sync="excelBox" width="800px">
+                    <avue-form :option="excelOption" v-model="excelForm" @submit="handleImportSubmit">
+                        <!-- <template slot="excelTemplate">
+                            <el-button type="primary" @click="handleTemplate">
+                                开始导入<i class="el-icon-download el-icon--right"></i>
+                            </el-button>
+                        </template> -->
+                    </avue-form>
+                </el-dialog>
+                <el-dialog title="行政区划数据调试" append-to-body :visible.sync="debugBox" width="350px">
+                    <avue-form :option="debugOption" v-model="debugForm" />
+                </el-dialog>
+            </basic-container>
+        </el-col>
+    </el-row>
+</template>
+
+<script>
+import { getTree, getDetail, submit, remove, importSubmit } from "@/api/baseinfo/region";
+import { exportBlob } from "@/api/common";
+import { mapGetters } from "vuex";
+import { validatenull } from "@/util/validate";
+import { downloadXls } from "@/util/util";
+import { dateNow } from "@/util/date";
+import { getToken } from "@/util/auth";
+import NProgress from 'nprogress';
+import 'nprogress/nprogress.css';
+
+export default {
+    data() {
+        return {
+            topCode: '00',
+            treeCode: '',
+            treeParentCode: '',
+            treeData: [],
+            treeOption: {
+                nodeKey: 'id',
+                defaultExpandedKeys: [],
+                lazy: false,
+                // treeLoad: function (node, resolve) {
+                //     const parentCode = (node.level === 0) ? "00" : node.data.value;
+                //     getLazyTree(parentCode).then(res => {
+                //         resolve(res.data.data.map(item => {
+                //             return {
+                //                 ...item,
+                //                 leaf: !item.hasChildren
+                //             }
+                //         }))
+                //     });
+                // },
+                addBtn: false,
+                menu: false,
+                size: 'small',
+                props: {
+                    labelText: '标题',
+                    label: 'title',
+                    value: 'value',
+                    children: 'children'
+                }
+            },
+            regionForm: {},
+            regionOption: {
+                labelWidth: 100,
+                column: [
+                    {
+                        label: "父区划编号",
+                        prop: "parentCode",
+                        span: 24,
+                        disabled: true,
+                        rules: [{
+                            required: true,
+                            message: "请输入父区划编号",
+                            trigger: "blur"
+                        }]
+                    },
+                    {
+                        label: "父区划名称",
+                        prop: "parentName",
+                        span: 24,
+                        disabled: true,
+                    },
+                    {
+                        label: "区划编号",
+                        prop: "code",
+                        span: 24,
+                        rules: [{
+                            required: true,
+                            message: "请输入区划编号",
+                            trigger: "blur"
+                        }]
+                    },
+                    {
+                        label: "区划子编号",
+                        prop: "ancestors",
+                        display: false,
+                    },
+                    {
+                        label: "区划名称",
+                        prop: "name",
+                        span: 24,
+                        rules: [{
+                            required: true,
+                            message: "请输入区划名称",
+                            trigger: "blur"
+                        }]
+                    },
+                    // {
+                    //     label: "区划等级",
+                    //     prop: "regionLevel",
+                    //     type: "radio",
+                    //     dicUrl: "/api/galaxy-system/dict/dictionary?code=region",
+                    //     props: {
+                    //         label: "dictValue",
+                    //         value: "dictKey"
+                    //     },
+                    //     dataType: "number",
+                    //     span: 24,
+                    //     rules: [{
+                    //         required: true,
+                    //         message: "请选择区划等级",
+                    //         trigger: "blur"
+                    //     }]
+                    // },
+                    // {
+                    //     label: "区划排序",
+                    //     prop: "sort",
+                    //     type: "number",
+                    //     span: 24,
+                    //     rules: [{
+                    //         required: true,
+                    //         message: "请输入区划排序",
+                    //         trigger: "blur"
+                    //     }]
+                    // },
+                    // {
+                    //     label: "区划备注",
+                    //     prop: "remark",
+                    //     type: "textarea",
+                    //     minRows: 6,
+                    //     span: 24,
+                    // },
+                ]
+            },
+            excelBox: false,
+            excelForm: {},
+            excelOption: {
+                // submitBtn: false,
+                emptyBtn: false,
+                column: [
+                    // {
+                    //     label: '模板上传',
+                    //     prop: 'excelFile',
+                    //     type: 'upload',
+                    //     drag: true,
+                    //     loadText: '模板上传中,请稍等',
+                    //     span: 24,
+                    //     propsHttp: {
+                    //         res: 'data'
+                    //     },
+                    //     tip: '请上传 .xls,.xlsx 标准格式文件',
+                    //     action: "/api/galaxy-system/region/import-region"
+                    // },
+                    {
+                        label: "导入区划等级",
+                        labelWidth: 160,
+                        prop: "regionLevel",
+                        type: "radio",
+                        dicUrl: "/api/galaxy-system/dict/dictionary?code=region",
+                        props: {
+                            label: "dictValue",
+                            value: "dictKey"
+                        },
+                        dataType: "number",
+                        span: 24,
+                        value: 3,
+                        rules: [{
+                            required: true,
+                            message: "请选择区划等级",
+                            trigger: "blur"
+                        }]
+                    },
+                    {
+                        label: "数据清空",
+                        labelWidth: 160,
+                        prop: "isCovered",
+                        type: "switch",
+                        align: "center",
+                        width: 80,
+                        dicData: [
+                            {
+                                label: "否",
+                                value: 0
+                            },
+                            {
+                                label: "是",
+                                value: 1
+                            }
+                        ],
+                        value: 0,
+                        slot: true,
+                        rules: [
+                            {
+                                required: true,
+                                message: "请选择是否覆盖",
+                                trigger: "blur"
+                            }
+                        ]
+                    },
+                    // {
+                    //     label: '操作',
+                    //     labelWidth: 160,
+                    //     prop: 'excelTemplate',
+                    //     formslot: true,
+                    //     span: 24,
+                    // }
+                ]
+            },
+            debugBox: false,
+            debugForm: {},
+            debugOption: {
+                labelWidth: 50,
+                submitBtn: false,
+                emptyBtn: false,
+                column: [
+                    {
+                        label: '省份',
+                        prop: 'province',
+                        type: 'select',
+                        props: {
+                            label: 'name',
+                            value: 'code'
+                        },
+                        cascader: ['city'],
+                        dicUrl: '/api/galaxy-system/region/select',
+                        span: 24,
+                    },
+                    {
+                        label: '地市',
+                        prop: 'city',
+                        type: 'select',
+                        props: {
+                            label: 'name',
+                            value: 'code'
+                        },
+                        cascader: ['district'],
+                        dicFlag: false,
+                        dicUrl: '/api/galaxy-system/region/select?code={{province}}',
+                        span: 24,
+                    },
+                    {
+                        label: '区县',
+                        prop: 'district',
+                        type: 'select',
+                        props: {
+                            label: 'name',
+                            value: 'code'
+                        },
+                        dicFlag: false,
+                        dicUrl: '/api/galaxy-system/region/select?code={{city}}',
+                        span: 24,
+                    }
+                ]
+            }
+        };
+    },
+    watch: {
+        // 'regionForm.subCode'() {
+        //     this.regionForm.code = this.regionForm.parentCode + this.regionForm.subCode;
+        // },
+        // 'excelForm.isCovered'() {
+        //     if (this.excelForm.isCovered !== '') {
+        //         const column = this.findObject(this.excelOption.column, "excelFile");
+        //         column.action = `/api/galaxy-system/region/import-region?isCovered=${this.excelForm.isCovered}`;
+        //     }
+        // }
+    },
+
+    computed: {
+        ...mapGetters(["permission"]),
+        permissionList() {
+            return {
+                addBtn: this.vaildData(this.permission.region_add, false),
+                viewBtn: this.vaildData(this.permission.region_view, false),
+                delBtn: this.vaildData(this.permission.region_delete, false),
+                editBtn: this.vaildData(this.permission.region_edit, false)
+            };
+        },
+        ids() {
+            let ids = [];
+            this.selectionList.forEach(ele => {
+                ids.push(ele.id);
+            });
+            return ids.join(",");
+        }
+    },
+    created() {
+        this.initTree();
+    },
+    methods: {
+        initTree() {
+            this.treeData = [];
+            getTree().then(res => {
+                this.treeData = res.data.data.map(item => {
+                    return {
+                        ...item,
+                        leaf: !item.hasChildren
+                    }
+                })
+                this.treeOption.defaultExpandedKeys.push(this.treeData[0].id);
+            });
+        },
+        nodeClick(data) {
+            const column = this.findObject(this.regionOption.column, "parentCode");
+            column.disabled = true;
+            this.treeCode = data.id;
+            this.treeParentCode = data.parentId;
+            getDetail(this.treeCode).then(res => {
+                this.regionForm = res.data.data;
+                this.regionForm.subCode = this.regionForm.code.replace(this.regionForm.parentCode, '');
+            })
+        },
+        addChildren() {
+            if (validatenull(this.regionForm.code) || validatenull(this.regionForm.name)) {
+                this.$message.warning("请先选择一项区划");
+                return;
+            }
+            this.regionForm.parentCode = this.regionForm.code;
+            this.regionForm.parentName = this.regionForm.name;
+            this.regionForm.code = '';
+            // this.regionForm.subCode = '';
+            this.regionForm.name = '';
+            this.regionForm.regionLevel = (this.regionForm.regionLevel === 5) ? 5 : this.regionForm.regionLevel + 1;
+        },
+        handleSubmit(form, done, loading) {
+            // const parentCode = form.parentCode === this.topCode ? '' : form.parentCode;
+            // form.code = parentCode + form.subCode;
+            submit(form).then(() => {
+                this.$message({
+                    type: "success",
+                    message: "操作成功!"
+                });
+                this.initTree();
+                // this.regionForm.subCode = '';
+                this.$refs.form.resetForm();
+                done();
+            }, error => {
+                loading();
+                window.console.log(error);
+            });
+        },
+        handleDelete() {
+            if (validatenull(this.regionForm.code)) {
+                this.$message.warning("请先选择一项区划");
+                return;
+            }
+            this.$confirm(`确定将 [${this.regionForm.name}] 数据删除?`, {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning"
+            })
+                .then(() => {
+                    return remove(this.treeCode);
+                })
+                .then(() => {
+                    this.$message({
+                        type: "success",
+                        message: "操作成功!"
+                    });
+                    this.initTree();
+                    // this.regionForm.subCode = '';
+                    this.$refs.form.resetForm();
+                });
+        },
+        // uploadAfter(res, done, loading, column) {
+        //     window.console.log(column);
+        //     this.excelBox = false;
+        //     this.initTree();
+        //     done();
+        // },
+        handleDebug() {
+            this.debugBox = true;
+        },
+        handleImport() {
+            this.excelBox = true;
+
+        },
+        handleExport() {
+            this.$confirm("是否导出行政区划数据?", "提示", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning"
+            }).then(() => {
+                NProgress.start();
+                exportBlob(`/api/galaxy-system/region/export-region?${this.website.tokenHeader}=${getToken()}`).then(res => {
+                    downloadXls(res.data, `行政区划数据${dateNow()}.xlsx`);
+                    NProgress.done();
+                })
+            });
+        },
+        handleImportSubmit(form, done, loading) {
+
+            importSubmit(form).then(() => {
+                this.$message({
+                    type: "success",
+                    message: "操作成功!"
+                });
+                this.initTree();
+                // this.regionForm.subCode = '';
+                this.$refs.form.resetForm();
+                this.excelBox = false;
+                done();
+
+            }, error => {
+                loading();
+                window.console.log(error);
+            });
+        },
+        // handleTemplate() {
+
+        // exportBlob(`/api/galaxy-system/region/export-template?${this.website.tokenHeader}=${getToken()}`).then(res => {
+        //     downloadXls(res.data, "行政区划模板.xlsx");
+        // })
+        // },
+    }
+};
+</script>
+
+<style>
+.box {
+    height: 800px;
+}
+
+.el-scrollbar {
+    height: 100%;
+}
+
+.box .el-scrollbar__wrap {
+    overflow: scroll;
+}
+</style>

+ 0 - 481
src/views/baseinfo/rtu.vue

@@ -1,481 +0,0 @@
-<!--
- * @Title: 
- * @Description: 
- * @Author: 893699165@qq.com
- * @Date: 2022-08-24 10:49:21
- * @LastEditors: 
- * @LastEditTime: 2022-08-24 10:49:21
--->
-<template>
-    <div>
-        <el-row>
-            <!-- <el-col :span="5">
-          <div class="box">
-            <el-scrollbar>
-            <basic-container>
-              <avue-tree
-                :option="treeOption"
-                :data="treeData"
-                @node-click="nodeClick"
-              />
-            </basic-container>
-          </el-scrollbar>
-          </div>
-        </el-col> -->
-            <el-col :span="24">
-                <basic-container>
-                    <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page"
-                        :before-open="beforeOpen" ref="crud" v-model="form" :permission="permissionList"
-                        @row-del="rowDel" @row-update="rowUpdate" @row-save="rowSave" @search-change="searchChange"
-                        @search-reset="searchReset" @selection-change="selectionChange" @current-change="currentChange"
-                        @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad"
-                        @before-open="beforeOpen" @select-change="selectChange">
-                        <template slot="state" slot-scope="{ row }">
-                            <el-button type="text" @click="openConfig(row)"> 正常 </el-button>
-                        </template>
-                        <template slot-scope="{ row, index }" slot="menu">
-                            <!-- 
-              <el-button type="text" size="small" @click="warnSetting(row)">预警配置
-              </el-button>
-
-              <el-button type="text" size="small" @click="planManage(row)">巡检计划
-              </el-button> -->
-
-                        </template>
-                    </avue-crud>
-                </basic-container>
-            </el-col>
-        </el-row>
-        <!-- <el-dialog title="预警配置" :visible.sync="configDialog" width="600px" :before-close="handleClose"
-      :close-on-click-modal="false" append-to-body>
-      <el-form label-width="120px">
-        <el-form-item label="预警总开关">
-          <el-switch v-model="warningConfig.configSw" active-color="#13ce66" inactive-color="#ff4949" active-text="开"
-            inactive-text="关">
-          </el-switch>
-        </el-form-item>
-      </el-form>
-      <span slot="footer" class="dialog-footer">
-        <el-button @click="configDialog = false" size="small">取 消</el-button>
-        <el-button type="primary" @click="confirmConfig" size="small">确 定</el-button>
-      </span>
-    </el-dialog>
-
-    <el-dialog title="巡检计划"  :visible.sync="projectPlanDialog" v-if="projectPlanDialog" width="60%" height="60%" :close-on-click-modal="false"
-      append-to-body>
-      <projectPlan :planSetting="planSetting"  
-        ref="projectPlan"></projectPlan>
-    </el-dialog> -->
-
-
-    </div>
-</template>
-  
-<script>
-import { getPage, getRtuKindList, getDetail, add, update, remove } from "@/api/baseinfo/rtu.js";
-
-import { getUserProjectList } from "@/api/baseinfo/project.js";
-
-// import {
-//   getList,
-// } from "@/api/system/dictbiz.js";
-
-// import {
-//   getDeptTree,
-// } from "@/api/system/dept.js";
-
-// import projectPlan from '@/views/project/projectPlan.vue'
-
-export default {
-    components: {
-        // projectPlan,
-    },
-    data() {
-        return {
-            rtuKinds: [],
-            projectPlanDialog: false,
-            orderDialog: false,
-            warningConfig: {
-                configSw: false,
-                code: "",
-            },
-            planSetting: {
-                orgId: 0,
-                projectId: 0,
-                planTitle: ''
-            },
-            infoDialog: false,
-            configDialog: false,
-            id: "",
-            editForm: {},
-            editDialog: false,
-            form: {},
-            selectionList: [],
-            query: {},
-            loading: true,
-            page: {
-                pageSize: 10,
-                currentPage: 1,
-                total: 0,
-            },
-            treeOption: {
-                nodeKey: "id",
-                lazy: true,
-                treeLoad: function (node, resolve) {
-                    const parentId = node.level === 0 ? 0 : node.data.id;
-                    console.log(parentId)
-                    console.log(resolve)
-                    // getDeptLazyTree(parentId).then((res) => {
-                    //   resolve(
-                    //     res.data.data.map((item) => {
-                    //       return {
-                    //         ...item,
-                    //         leaf: !item.hasChildren,
-                    //       };
-                    //     })
-                    //   );
-                    // });
-                },
-                addBtn: false,
-                menu: false,
-                size: "small",
-                props: {
-                    labelText: "标题",
-                    label: "title",
-                    value: "value",
-                    children: "children",
-                },
-            },
-            option: {
-                labelWidth: 120,
-                viewLabelWidth: 100,
-                searchlabelWidth: 100,
-                // height: "auto",
-                height: 600,
-                calcHeight: 30,
-                align: "center",
-                headerAlign: "center",
-                lazy: true,
-                tip: false,
-                simplePage: true,
-                searchShow: true,
-                searchMenuSpan: 6,
-                tree: true,
-                border: true,
-                index: true,
-                selection: true,
-                viewBtn: false,
-                viewTitle: "测站信息",
-                editBtn: true,
-                delBtn: true,
-                menuWidth: 220,
-                dialogType: "drawer",
-                dialogClickModal: false,
-                column: [
-                    {
-                        label: "站点名称",
-                        prop: "rtuName",
-                        search: true,
-                        span: 12,
-                    },
-                    {
-                        label: "站点编码",
-                        prop: "rtuCode",
-                        search: true,
-                        span: 12,
-                    },
-                    // {
-                    //   label: "所属机构",
-                    //   prop: "orgName",
-                    //   span: 12,
-                    //   editDisplay: false,
-                    //   addDisplay: false,
-
-
-                    // },
-                    {
-                        label: "项目",
-                        prop: "projectId",
-                        span: 12,
-                        hide: true,
-                        viewDisplay: false,
-                        dicData: [],
-                        type: "select",
-                        editDisplay: true,
-                        addDisplay: true,
-
-                        props: {
-                            label: "projectName",
-                            value: "id",
-                        },
-                        rules: [
-                            {
-                                required: false,
-                                message: "请选择项目",
-                                trigger: "click",
-                            },
-                        ],
-                    },
-                    {
-                        label: "项目名称",
-                        prop: "projectName",
-                        search: true,
-                        span: 12,
-                        editDisplay: false,
-                        addDisplay: false,
-                    },
-                    {
-                        label: "行政区",
-                        prop: "areaName",
-                        span: 12,
-                        editDisplay: false,
-                        addDisplay: false,
-                    },
-                    {
-                        label: "测站类型",
-                        prop: "rtuKinds",
-                        span: 12,
-                        hide: true,
-                        viewDisplay: false,
-                        dicData: [],
-                        type: "checkbox",
-                        addDisabled: false,
-                        props: {
-                            label: "dictValue",
-                            value: "id",
-                        },
-
-                    },
-                    {
-                        label: "测站类型",
-                        prop: "rtuKindDesc",
-                        span: 8,
-                        editDisplay: false,
-                        addDisplay: false,
-                    },
-                    {
-                        label: "备注说明",
-                        prop: "remark",
-                        span: 12,
-                        type: "textarea",
-
-                    },
-                ],
-            },
-            data: [],
-        };
-    },
-    computed: {
-        // ...mapGetters(["userInfo", "permission"]),
-        permissionList() {
-            return {
-                // addBtn: this.vaildData(this.permission.docCategory_add, false),
-                // viewBtn: this.vaildData(this.permission.docCategory_view, false),
-                // delBtn: this.vaildData(this.permission.docCategory_delete, false),
-                // editBtn: this.vaildData(this.permission.docCategory_edit, false),
-            };
-        },
-        ids() {
-            let ids = [];
-            this.selectionList.forEach((ele) => {
-                ids.push(ele.id);
-            });
-            return ids.join(",");
-        },
-    },
-    mounted() { },
-    created() {
-        this.initData();
-    },
-
-    methods: {
-        initData() {
-
-            getUserProjectList().then((res) => {
-                const column = this.findObject(this.option.column, "projectId");
-                column.dicData = res.data.data;
-            });
-            //     getDeptTree('000000').then((res) => {
-            //   const column = this.findObject(this.option.column, "projectId");
-            //   column.dicData = res.data.data;
-            // });
-
-
-
-            getRtuKindList('rtu_kind').then((res) => {
-                const column = this.findObject(this.option.column, "rtuKinds");
-                column.dicData = res.data.data;
-                //this.rtuKinds= res.data.data; 
-
-
-                //this.$message.success(this.form)
-            });
-
-
-        },
-
-        confirmConfig() {
-
-        },
-        warnSetting(item) {
-            this.configSw = item.configSw;
-            this.configDialog = true;
-        },
-        planManage(item) {
-            const planDate = new Date();
-            this.planSetting.orgId = item.orgId;
-            this.planSetting.projectId = item.id;
-            const y = planDate.getFullYear();
-            this.planSetting.planTitle = "" + y + "年" + item.orgName + "(" + item.projectName + ")巡检计划";
-            this.projectPlanDialog = true;
-        },
-        // openInfo(item) {
-        //   this.id = item.id;
-        //   this.infoDialog = true;
-        //   this.$nextTick(() => {
-        //     this.$refs["warningInfo"].init();
-        //   });
-        // },
-        // openOrder(item) {
-        //   this.id = item.id;
-        //   this.orderDialog = true;
-        //   this.$nextTick(() => {
-        //     this.$refs["maintainOrder"].init();
-        //   });
-        // },
-
-        rowSave(row, done, loading) {
-            add(row).then(
-                () => {
-                    this.onLoad(this.page);
-                    this.$message({
-                        type: "success",
-                        message: "操作成功!",
-                    });
-                    done();
-                },
-                (error) => {
-                    window.console.log(error);
-                    loading();
-                }
-            );
-        },
-        rowUpdate(row, index, done, loading) {
-            update(row).then(
-                () => {
-                    this.onLoad(this.page);
-                    this.$message({
-                        type: "success",
-                        message: "操作成功!",
-                    });
-                    done();
-                },
-                (error) => {
-                    window.console.log(error);
-                    loading();
-                }
-            );
-        },
-        rowDel(row) {
-            this.$confirm("确定将选择数据删除?", {
-                confirmButtonText: "确定",
-                cancelButtonText: "取消",
-                type: "warning",
-            })
-                .then(() => {
-                    return remove(row.id);
-                })
-                .then(() => {
-                    this.onLoad(this.page);
-                    this.$message({
-                        type: "success",
-                        message: "操作成功!",
-                    });
-                });
-        },
-        searchReset() {
-            this.query = {};
-            this.onLoad(this.page);
-        },
-        searchChange(params, done) {
-            this.query = params;
-            this.page.currentPage = 1;
-            this.onLoad(this.page, params);
-            done();
-        },
-        selectionChange(list) {
-            this.$message.success("ssssssssssssssssssssssssss")
-            this.selectionList = list;
-        },
-        selectChange(item) {
-            this.$message.success("sssssssssssssssss" + item)
-        },
-        selectionClear() {
-            this.selectionList = [];
-            this.$refs.crud.toggleSelection();
-        },
-        handleDelete() {
-            if (this.selectionList.length === 0) {
-                this.$message.warning("请选择至少一条数据");
-                return;
-            }
-            this.$confirm("确定将选择数据删除?", {
-                confirmButtonText: "确定",
-                cancelButtonText: "取消",
-                type: "warning",
-            })
-                .then(() => {
-                    return remove(this.ids);
-                })
-                .then(() => {
-                    this.onLoad(this.page);
-                    this.$message({
-                        type: "success",
-                        message: "操作成功!",
-                    });
-                    this.$refs.crud.toggleSelection();
-                });
-        },
-        beforeOpen(done, type) {
-
-
-            // if (["add", "edit"].includes(type)) {
-            //     this.initData();
-            //   }
-
-            if (["edit", "view"].includes(type)) {
-                getDetail(this.form.id).then((res) => {
-                    this.form = res.data.data;
-                    //   this.from['rtuKinds']=this.rtuKinds;
-                    //this.$message.success(this.form)
-                });
-            }
-            done();
-        },
-        currentChange(currentPage) {
-            this.page.currentPage = currentPage;
-        },
-        sizeChange(pageSize) {
-            this.page.pageSize = pageSize;
-        },
-        refreshChange() {
-            this.onLoad(this.page, this.query);
-        },
-        onLoad(page, params = {}) {
-            this.loading = true;
-            getPage(
-                page.currentPage,
-                page.pageSize,
-                Object.assign(params, this.query)
-            ).then((res) => {
-                const data = res.data.data;
-                this.page.total = data.total;
-                this.data = data.records;
-                this.loading = false;
-                this.selectionClear();
-            });
-        },
-    },
-};
-</script>
-  

+ 465 - 0
src/views/baseinfo/rtu/index.vue

@@ -0,0 +1,465 @@
+<!--
+ * @Title: 
+ * @Description: 
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+    <div>
+        <el-row>
+            <el-col :span="4">
+                <div class="box">
+                    <el-scrollbar>
+                        <basic-container>
+                            <avue-tree :option="treeOption" :data="treeData" @node-click="nodeClick">
+                                <span class="el-tree-node__label" slot-scope="{ node, data }">
+                                    <span>
+                                        <i class="el-icon-office-building"></i>
+                                        {{ (node || {}).label }}
+                                    </span>
+                                </span>
+                            </avue-tree>
+                        </basic-container>
+                    </el-scrollbar>
+                </div>
+            </el-col>
+            <el-col :span="20">
+                <basic-container>
+                    <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page"
+                        :before-open="beforeOpen" ref="crud" v-model="form" :permission="permissionList" @row-del="rowDel"
+                        @row-update="rowUpdate" @row-save="rowSave" @search-change="searchChange"
+                        @search-reset="searchReset" @selection-change="selectionChange" @current-change="currentChange"
+                        @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad"
+                        @before-open="beforeOpen" @select-change="selectChange">
+                        <template slot-scope="scope" slot="menuLeft">
+                            <el-button v-if="permissionList.importBtn" type="primary" icon="el-icon-upload2" size="small"
+                                @click="toRtuImpoartHandler">导入测站</el-button>
+                            <el-button v-if="permissionList.importBtn" type="primary" icon="el-icon-finished" size="small"
+                                @click="toRtuImportHistoryHandler">测站导入历史</el-button>
+                            <el-button v-if="permissionList.importBtn" type="primary" icon="el-icon-download" size="small"
+                                @click="downloadTemplate">测站信息模板下载</el-button>
+                            <el-button v-if="permissionList.videoSiteAdd" type="primary" icon="el-icon-plus" size="small"
+                                @click="toAddVideoSite">添加视频站</el-button>
+                        </template>
+
+                    </avue-crud>
+                </basic-container>
+            </el-col>
+        </el-row>
+        <el-drawer :visible.sync="rtuImportHistoryDialog" v-if="rtuImportHistoryDialog" title="测站导入操作记录" direction="rtl"
+            size="60%" append-to-body="true">
+            <rtuImportHistoryView ref="rtuImportHistoryView"></rtuImportHistoryView>
+        </el-drawer>
+        <el-dialog title="测站导入向导" :visible.sync="rtuImportDialog" width="60%" height="60%" :close-on-click-modal="false"
+            append-to-body :v-loading="importLoading" v-if="rtuImportDialog">
+            <rtuImportView :importLoading="importLoading" :visible.sync="rtuImportDialog" ref="rtuImportView">
+            </rtuImportView>
+        </el-dialog>
+        <el-dialog title="添加视频站" :visible.sync="videoSiteAddDialog" width="60%" height="60%" :close-on-click-modal="false"
+            append-to-body :v-loading="importLoading" v-if="videoSiteAddDialog">
+            <videositeadd :importLoading="importLoading" :visible.sync="videoSiteAddDialog" ref="videositeadd"
+                @fevent="update_table">
+            </videositeadd>
+
+        </el-dialog>
+    </div>
+</template>
+
+<script>
+import { getPage, getDetail, add, update, remove } from "@/api/baseinfo/rtu.js";
+import { getTree } from "@/api/baseinfo/region";
+import { mapGetters } from "vuex";
+import rtuImportHistoryView from './rtuimport.vue';
+import rtuImportView from './rtuImportProcess.vue';
+import videositeadd from './videositeadd.vue';
+export default {
+    components: {
+        rtuImportView,
+        rtuImportHistoryView,
+        videositeadd
+    },
+    data() {
+        return {
+            importLoading: false,
+            rtuImportDialog: false,
+            rtuImportHistoryDialog: false,
+            videoSiteAddDialog: false,
+            id: "",
+            form: {},
+            selectionList: [],
+            query: {},
+            loading: true,
+            page: {
+                pageSize: 10,
+                currentPage: 1,
+                total: 0,
+            },
+            treeCode: '',
+            treeParentCode: '',
+            treeData: [],
+            treeOption: {
+                nodeKey: "id",
+                defaultExpandedKeys: [],
+                lazy: false,
+                // treeLoad: function (node, resolve) {
+                //     const parentCode = (node.level === 0) ? "00" : node.data.value;
+                //     getLazyTree(parentCode).then(res => {
+                //         resolve(res.data.data.map(item => {
+                //             return {
+                //                 ...item,
+                //                 leaf: !item.hasChildren
+                //             }
+                //         }))
+                //     });
+                // },
+                addBtn: false,
+                menu: true,
+                size: "small",
+                props: {
+                    labelText: "标题",
+                    label: "title",
+                    value: "value",
+                    children: "children",
+                },
+            },
+            option: {
+                labelWidth: 140,
+                viewLabelWidth: 140,
+                searchLabelWidth: 140,
+                height: "auto",
+                calcHeight: 80,
+                align: "center",
+                headerAlign: "center",
+                lazy: false,
+                tip: false,
+                simplePage: true,
+                searchShow: true,
+                searchMenuSpan: 6,
+                tree: true,
+                border: true,
+                index: true,
+                selection: false,
+                viewBtn: true,
+                viewTitle: "测站信息",
+                editBtn: false,
+                delBtn: false,
+                addBtn: false,
+                menuWidth: 120,
+                dialogType: "drawer",
+                dialogClickModal: false,
+                columnBtn: false,
+                column: [
+                    {
+                        label: "站点名称",
+                        prop: "rtuName",
+                        search: true,
+                        span: 6,
+                        rules: [
+                            {
+                                required: true,
+                                message: "请录入站点名称",
+                                trigger: "click",
+                            },
+                        ],
+                    },
+                    {
+                        label: "站点编码",
+                        prop: "rtuCode",
+                        search: true,
+                        span: 6,
+                        editDisabled: true,
+                        rules: [
+                            {
+                                required: true,
+                                message: "请录入站点编码",
+                                trigger: "click",
+                            },
+                        ],
+                    },
+                    {
+                        label: "测站类型",
+                        prop: "rtuKindDesc",
+                        span: 24,
+                        editDisplay: false,
+                        addDisplay: false,
+                    },
+                    {
+                        label: '测站类型',
+                        prop: 'rtuKind',
+                        type: 'select',
+                        hide: true,
+                        editDisplay: false,
+                        addDisplay: false,
+                        search: true,
+                        props: {
+                            label: 'name',
+                            value: 'code'
+                        },
+                        span: 6,
+                        dicData: [{
+                            name: '雨量站',
+                            code: 1
+                        }, {
+                            name: '水位站',
+                            code: 2
+                        }, {
+                            name: '墒情站',
+                            code: 3
+                        }, {
+                            name: '视频站',
+                            code: 4
+                        }]
+                    },
+
+                    // {
+                    //     label: "运维单位",
+                    //     prop: "manageCompany",
+                    //     span: 24,
+                    //     editDisplay: false,
+                    //     addDisplay: false,
+                    // },
+                    {
+                        label: "经度",
+                        prop: "lng",
+                        span: 24,
+                        editDisplay: false,
+                        addDisplay: false,
+                    },
+                    {
+                        label: "纬度",
+                        prop: "lat",
+                        span: 24,
+                        editDisplay: false,
+                        addDisplay: false,
+                    },
+                    {
+                        label: "测站位置",
+                        prop: "locationDesc",
+                        span: 24,
+                        editDisplay: false,
+                        addDisplay: false,
+                        overHidden: true,
+                    },
+                    {
+                        label: "备注说明",
+                        prop: "remark",
+                        span: 24,
+                        type: "textarea",
+                        hide: true
+                    },
+                ],
+            },
+            data: [],
+        };
+    },
+    computed: {
+        ...mapGetters(["userInfo", "permission"]),
+        permissionList() {
+            return {
+                // addBtn: this.vaildData(this.permission.rtu_add, false),
+                viewBtn: this.vaildData(this.permission.rtu_view, false),
+                // delBtn: this.vaildData(this.permission.rtu_del, false),
+                // editBtn: this.vaildData(this.permission.rtu_edit, false),
+                importBtn: this.vaildData(this.permission.rtu_import, false),
+                videoSiteAdd: this.vaildData(this.permission.video_site_add, false),
+            };
+        },
+    },
+    created() {
+        this.initTree();
+    },
+    beforeDestroy() {
+
+    },
+    methods: {
+        initTree() {
+            this.treeData = [];
+            getTree().then(res => {
+                this.treeData = res.data.data.map(item => {
+                    return {
+                        ...item,
+                        leaf: !item.hasChildren
+                    }
+                })
+                this.treeOption.defaultExpandedKeys.push(this.treeData[0].id);
+                this.treeCode = this.treeData[0].id;
+            });
+        },
+        update_table() {
+            this.onLoad(this.page, this.query);
+        },
+        toRtuImpoartHandler() {
+            this.rtuImportDialog = true;
+        },
+        toRtuImportHistoryHandler() {
+            this.rtuImportHistoryDialog = true;
+        },
+        toAddVideoSite() {
+            this.videoSiteAddDialog = true;
+            this.$nextTick(() => {
+                this.$refs["videositeadd"].init();
+            });
+        },
+        downloadTemplate() {
+            window.open('/file/download/template/站点信息记录表模板.xlsx')
+        },
+        nodeClick(data) {
+            this.treeCode = data.id;
+            this.treeParentCode = data.parentId;
+            this.query = {};
+            this.query['adCode'] = this.treeCode;
+            this.page.currentPage = 1;
+            var params = {};
+            this.onLoad(this.page, params);
+        },
+        searchReset() {
+            this.query = {};
+            this.query['adCode'] = this.treeCode;
+            this.page.currentPage = 1;
+            this.onLoad(this.page);
+        },
+        searchChange(params, done) {
+            this.query = params;
+            this.query['adCode'] = this.treeCode;
+            this.page.currentPage = 1;
+            this.onLoad(this.page, params);
+            done();
+        },
+        currentChange(currentPage) {
+            console.log("currentPage " + currentPage);
+            this.page.currentPage = currentPage;
+        },
+        sizeChange(pageSize) {
+            this.page.pageSize = pageSize;
+        },
+        refreshChange() {
+            var params = {};
+            this.onLoad(this.page, params);
+        },
+        selectionChange(list) {
+            this.selectionList = list;
+        },
+        selectChange(item) {
+            console.log(JSON.stringify(item));
+        },
+        selectionClear() {
+            this.selectionList = [];
+            this.$refs.crud.toggleSelection();
+        },
+        // initData() {
+        //     getRtuKindList('rtu_kind').then((res) => {
+        //         const column = this.findObject(this.option.column, "rtuKinds");
+        //         column.dicData = res.data.data;
+        //     });
+        // },
+        rowSave(row, done, loading) {
+            add(row).then(
+                () => {
+                    this.onLoad(this.page);
+                    this.$message({
+                        type: "success",
+                        message: "操作成功!",
+                    });
+                    done();
+                },
+                (error) => {
+                    window.console.log(error);
+                    loading();
+                }
+            );
+        },
+        rowUpdate(row, index, done, loading) {
+            update(row).then(
+                () => {
+                    this.onLoad(this.page);
+                    this.$message({
+                        type: "success",
+                        message: "操作成功!",
+                    });
+                    done();
+                },
+                (error) => {
+                    window.console.log(error);
+                    loading();
+                }
+            );
+        },
+        rowDel(row) {
+            this.$confirm("确定将选择数据删除?", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning",
+            })
+                .then(() => {
+                    return remove(row.id);
+                })
+                .then(() => {
+                    this.onLoad(this.page);
+                    this.$message({
+                        type: "success",
+                        message: "操作成功!",
+                    });
+                });
+        },
+        handleDelete() {
+            if (this.selectionList.length === 0) {
+                this.$message.warning("请选择至少一条数据");
+                return;
+            }
+            this.$confirm("确定将选择数据删除?", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning",
+            })
+                .then(() => {
+                    return remove(this.ids);
+                })
+                .then(() => {
+                    this.onLoad(this.page);
+                    this.$message({
+                        type: "success",
+                        message: "操作成功!",
+                    });
+                    this.$refs.crud.toggleSelection();
+                });
+        },
+        beforeOpen(done, type) {
+            if (["edit", "view"].includes(type)) {
+                getDetail(this.form.id).then((res) => {
+                    this.form = res.data.data;
+                });
+            }
+            done();
+        },
+        onLoad(page, params = {}) {
+            this.loading = true;
+            getPage(
+                page.currentPage,
+                page.pageSize,
+                Object.assign(params, this.query)
+            ).then((res) => {
+                const data = res.data.data;
+                this.page.total = data.total;
+                this.data = data.records;
+                this.loading = false;
+                this.selectionClear();
+            });
+        },
+    },
+};
+</script>
+<style>
+.box {
+    height: 800px;
+}
+
+.el-scrollbar {
+    height: 100%;
+}
+
+.box .el-scrollbar__wrap {
+    overflow: scroll;
+}
+</style>

+ 276 - 0
src/views/baseinfo/rtu/rtuImportProcess.vue

@@ -0,0 +1,276 @@
+<!--
+ * @Title: 
+ * @Description: 
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+    <div>
+        <el-row>
+            <el-col :span="24">
+                <basic-container>
+                    <avue-form :option="debugOption" v-model="debugForm" />
+                    <div style="color:gray;margin-top: 0px;">*测站导入操作任务在后台运行,请在提交测站表格文件后打开测站导入历史页面查看导入状态</div>
+                </basic-container>
+            </el-col>
+
+        </el-row>
+        <el-row>
+            <el-col :span="24">
+                <basic-container>
+                    <el-upload ref="upload" :action="uploadUrl" :on-preview="handlePreview" :on-remove="handleRemove"
+                        :before-upload="beforeUpload" :on-error="onError" :on-success="onSuccess" :file-list="fileList"
+                        :on-progress="onProgress" :auto-upload="false" :multiple="false" limit="1" accept=".xlsx"
+                        :data="postData">
+                        <el-button slot="trigger" size="small" type="primary">选择测站数据文件</el-button>
+                        <el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">开始导入
+                        </el-button>
+                        <div slot="tip" class="el-upload__tip">只能上传XLSX 工作表</div>
+                    </el-upload>
+                </basic-container>
+            </el-col>
+        </el-row>
+    </div>
+</template>
+
+<script>
+
+import { getToken } from "@/util/auth";
+// import { validatenull } from "@/util/validate";
+
+export default {
+    data() {
+        return {
+            fileName: '',
+            editForm: {},
+            editDialog: false,
+            form: {},
+            selectionList: [],
+            query: {},
+            loading: true,
+            postData: {},
+            uploadUrl: '',
+            debugForm: {},
+            debugOption: {
+                labelWidth: 150,
+                submitBtn: false,
+                emptyBtn: false,
+                column: [
+                    {
+                        label: '导入备注',
+                        prop: 'remark',
+                        span: 24,
+                        rules: [{
+                            required: true,
+                            message: "测站导入是重要的操作,为了记录必要的信息,请务必录入相关操作信息",
+                            trigger: "blur"
+                        }],
+                    },
+                    {
+                        label: '导入操作类型',
+                        prop: 'saveType',
+                        type: 'radio',
+                        span: 24,
+                        value: 0,
+                        dicData: [
+                            {
+                                label: '只新增',
+                                value: 0,
+                            },
+                            {
+                                label: '只更新',
+                                value: 1,
+                            },
+                            {
+                                label: '新增或更新',
+                                value: 2,
+                            }
+                        ],
+                        rules: [{
+                            required: true,
+                        }],
+                    },
+                    {
+                        label: '更新列配置',
+                        prop: 'cellUpdate',
+                        type: 'checkbox',
+                        span: 24,
+
+                        disabled: true,
+                        dicData: [{
+                            label: '盟市',
+                            value: 2
+                        }, {
+                            label: '旗县区',
+                            value: 3
+                        }, {
+                            label: '测站名称',
+                            value: 4
+                        }, {
+                            label: '站点类型',
+                            value: 5
+                        }, {
+                            label: '安装位置描述',
+                            value: 6
+                        }, {
+                            label: '经度',
+                            value: 7
+                        }, {
+                            label: '纬度',
+                            value: 8
+                        }, {
+                            label: '运维单位',
+                            value: 9
+                        }, {
+                            label: 'RTU品牌',
+                            value: 10
+                        }, {
+                            label: 'RTU型号',
+                            value: 11
+                        }, {
+                            label: 'RTU更换时间',
+                            value: 12
+                        }, {
+                            label: '雨量计品牌',
+                            value: 13
+                        }, {
+                            label: '雨量计型号',
+                            value: 14
+                        }, {
+                            label: '雨量计更换时间',
+                            value: 15
+                        }, {
+                            label: '水位计传感器类型',
+                            value: 16
+                        }, {
+                            label: '水位计品牌',
+                            value: 17
+                        }, {
+                            label: '水位计型号',
+                            value: 18
+                        }, {
+                            label: '水位计更换时间',
+                            value: 19
+                        }, {
+                            label: '墒情站传感器类型',
+                            value: 20
+                        }, {
+                            label: '墒情传感器品牌',
+                            value: 21
+                        }, {
+                            label: '墒情传感器型号',
+                            value: 22
+                        }, {
+                            label: '墒情传感器更换时间',
+                            value: 23
+                        }, {
+                            label: '蓄电池容量',
+                            value: 24
+                        }, {
+                            label: '蓄电池更换时间',
+                            value: 25
+                        }, {
+                            label: '太阳能板',
+                            value: 26
+                        }, {
+                            label: 'SIM卡号',
+                            value: 27
+                        }, {
+                            label: 'SIM卡开卡单位',
+                            value: 28
+                        }, {
+                            label: 'SIM卡缴费截止时间',
+                            value: 29
+                        }, {
+                            label: '是否卫星通讯',
+                            value: 30
+                        }, {
+                            label: '通讯模式',
+                            value: 31
+                        },],
+                        all: true,
+
+                    }
+                ]
+            }
+        };
+    },
+
+    props: {
+        visible: {
+            tyep: [Boolean],
+            default: false,
+        },
+        importLoading: {
+            tyep: [Boolean],
+            default: false,
+        }
+    },
+    name: 'rtuImportProcess',
+    created() {
+        this.init();
+    },
+    methods: {
+        init() {
+            this.uploadUrl = this.getUploadUrl();
+        },
+        submitUpload() {
+            this.postData['remark'] = this.debugForm.remark;
+            this.postData['saveType'] = this.debugForm.saveType;
+            let cellUpdateText = '';
+            let cellUpdate = [];
+            cellUpdate = this.debugForm.cellUpdate;
+            for (let i = 0; i < cellUpdate.length; i++) {
+                if (cellUpdateText !== '') {
+                    cellUpdateText = cellUpdateText + ',';
+                }
+                cellUpdateText = cellUpdateText + cellUpdate[i];
+            }
+            this.postData['cellUpdate'] = cellUpdateText;
+            //this.$message.success(JSON.stringify(this.postData))
+            this.$refs.upload.submit();
+
+        },
+        handleRemove(file, fileList) {
+            console.log(file, fileList);
+            // this.$message.success('handleRemove')
+        },
+        handlePreview(file) {
+            console.log(file);
+            //  this.$message.success('handlePreview')
+        },
+        beforeUpload(file) {
+            console.log(file);
+            // this.$message.success('beforeUpload')
+            return true;
+        },
+        getUploadUrl: function () {
+            return `/api/galaxy-business/data/manage/import/rtu?${this.website.tokenHeader
+                }=${getToken()}`;
+        },
+        onProgress(event, file, fileList) {
+            console.log(fileList);
+            this.$emit("update:importLoading", true);
+        },
+        onError(err, file, fileList) {
+            console.log(fileList);
+            this.$message.warning(err);
+        },
+        onSuccess(response, file, fileList) {
+            console.log(fileList);
+            this.$message.success('已成功提交导入任务!')
+            this.$refs.upload.clearFiles();
+            this.$emit("update:importLoading", false);
+            this.$emit("update:visible", false);
+        },
+    },
+};
+</script>
+<style>
+.mb0 {
+    margin-top: 10;
+
+}
+</style>

+ 223 - 0
src/views/baseinfo/rtu/rtuimport.vue

@@ -0,0 +1,223 @@
+<!--
+ * @Title: 
+ * @Description: 
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+    <div>
+        <el-row>
+            <el-col :span="24">
+                <basic-container>
+                    <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page"
+                        :before-open="beforeOpen" ref="crud" v-model="form" :permission="permissionList"
+                        @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
+                        @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange"
+                        @on-load="onLoad">
+                        <template slot-scope="{ row, index }" slot="menu">
+                            <el-button type="text" size="small" @click="openDetail(row)">导入详情
+                            </el-button>
+                        </template>
+                    </avue-crud>
+                </basic-container>
+            </el-col>
+
+        </el-row>
+        <el-dialog title="导入详情" :visible.sync="detailDialog" width="60%" height="60%" :close-on-click-modal="false"
+            append-to-body v-if="detailDialog">
+            <rtuimportdetail :id="id" ref="rtuimportdetail">
+            </rtuimportdetail>
+        </el-dialog>
+    </div>
+</template>
+
+<script>
+import { getPage } from "@/api/data/rtuImport.js";
+
+import rtuimportdetail from "./rtuimportdetail.vue";
+
+export default {
+    components: {
+        rtuimportdetail
+    },
+    data() {
+        return {
+            detailDialog: false,
+            loading: false,
+            id: "",
+            editForm: {},
+            editDialog: false,
+            form: {},
+            selectionList: [],
+            query: {},
+            page: {
+                pageSize: 10,
+                currentPage: 1,
+                total: 0,
+            },
+            option: {
+                labelWidth: 120,
+                viewLabelWidth: 100,
+                searchlabelWidth: 100,
+                height: "auto",
+                calcHeight: 80,
+                align: "center",
+                headerAlign: "center",
+                lazy: false,
+                tip: false,
+                simplePage: true,
+                searchShow: true,
+                searchMenuSpan: 6,
+                tree: true,
+                border: true,
+                index: true,
+                selection: false,
+                viewBtn: false,
+                viewTitle: "测站导入",
+                editBtn: false,
+                delBtn: false,
+                addBtn: false,
+                menu: true,
+                menuWidth: 120,
+                dialogType: "drawer",
+                dialogClickModal: false,
+                columnBtn: false,
+                column: [
+                    {
+                        label: "导入结果",
+                        prop: "importStatus",
+                        span: 24,
+                        width: 120,
+                        html: true,
+                        formatter: (val) => {
+                            if (val.importStatus === 0) {
+                                return '<b style="color:blue">导入中</b>'
+                            } else if (val.importStatus === 1) {
+                                return '<b style="color:green">导入成功</b>'
+                            } else if (val.importStatus === 2) {
+                                return '<b style="color:red">导入失败</b>'
+                            } else {
+                                return '';
+                            }
+                        },
+                    },
+                    {
+                        label: "操作用户",
+                        prop: "createUserName",
+                        span: 24,
+                        width: 120,
+                        editDisplay: false,
+                        addDisplay: false,
+                    },
+                    {
+                        label: "导入时间",
+                        prop: "importTime",
+                        span: 24,
+                    },
+                    {
+                        label: "导入说明",
+                        prop: "remark",
+                        span: 24,
+                        overHidden: true,
+                    },
+                    {
+                        label: "导入操作类型",
+                        prop: "saveType",
+                        span: 24,
+                        width: 160,
+                        html: true,
+                        formatter: (val) => {
+                            if (val.saveType === 0) {
+                                return '<b style="color:blue">只新增</b>'
+                            } else if (val.saveType === 1) {
+                                return '<b style="color:red">覆盖已有测站</b>'
+                            } else {
+                                return '';
+                            }
+                        },
+                    },
+                    {
+                        label: "文件名称",
+                        prop: "fileName",
+                        span: 24,
+                        overHidden: true,
+                    },
+                ],
+            },
+            data: [],
+        };
+    },
+    computed: {
+        // ...mapGetters(["userInfo", "permission"]),
+        permissionList() {
+            return {
+                // addBtn: this.vaildData(this.permission.docCategory_add, false),
+                // viewBtn: this.vaildData(this.permission.docCategory_view, false),
+                // delBtn: this.vaildData(this.permission.docCategory_delete, false),
+                // editBtn: this.vaildData(this.permission.docCategory_edit, false),
+            };
+        },
+        ids() {
+            let ids = [];
+            this.selectionList.forEach((ele) => {
+                ids.push(ele.id);
+            });
+            return ids.join(",");
+        },
+    },
+    mounted() { },
+    created() {
+    },
+    methods: {
+        openDetail(row) {
+            this.id = row.id;
+            this.detailDialog = true;
+            this.$nextTick(() => {
+                this.$refs["rtuimportdetail"].init();
+            });
+        },
+        searchReset() {
+            this.query = {};
+            this.onLoad(this.page);
+        },
+        searchChange(params, done) {
+            this.query = params;
+            this.page.currentPage = 1;
+            this.onLoad(this.page, params);
+            done();
+        },
+        selectionChange(list) {
+            this.selectionList = list;
+        },
+        selectionClear() {
+            this.selectionList = [];
+            this.$refs.crud.toggleSelection();
+        },
+        currentChange(currentPage) {
+            this.page.currentPage = currentPage;
+        },
+        sizeChange(pageSize) {
+            this.page.pageSize = pageSize;
+        },
+        refreshChange() {
+            this.onLoad(this.page, this.query);
+        },
+        onLoad(page, params = {}) {
+            this.loading = true;
+            getPage(
+                page.currentPage,
+                page.pageSize,
+                Object.assign(params, this.query)
+            ).then((res) => {
+                const data = res.data.data;
+                this.page.total = data.total;
+                this.data = data.records;
+                this.loading = false;
+                this.selectionClear();
+            });
+        },
+    },
+};
+</script>

+ 174 - 0
src/views/baseinfo/rtu/rtuimportdetail.vue

@@ -0,0 +1,174 @@
+<!--
+ * @Title: 
+ * @Description: 
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+    <el-row>
+        <el-col :span="24">
+            <basic-container>
+                <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page"
+                    :before-open="beforeOpen" ref="crud" v-model="form" :permission="permissionList"
+                    @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
+                    @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange"
+                    @on-load="onLoad">
+                </avue-crud>
+            </basic-container>
+        </el-col>
+
+    </el-row>
+</template>
+
+<script>
+import { getDetailPage } from "@/api/data/rtuImport.js";
+
+export default {
+    props: {
+        id: {
+            type: [Number],
+            required: true
+        },
+    },
+    components: {
+
+    },
+    data() {
+        return {
+            loading: false,
+            form: {},
+            selectionList: [],
+            query: {},
+            page: {
+                pageSize: 10,
+                currentPage: 1,
+                total: 0,
+            },
+            option: {
+                labelWidth: 120,
+                viewLabelWidth: 100,
+                searchlabelWidth: 100,
+                height: "auto",
+                calcHeight: 400,
+                align: "center",
+                headerAlign: "center",
+                lazy: false,
+                tip: false,
+                simplePage: true,
+                searchShow: true,
+                searchMenuSpan: 6,
+                tree: true,
+                border: true,
+                index: true,
+                selection: false,
+                viewBtn: false,
+                editBtn: false,
+                delBtn: false,
+                addBtn: false,
+                menu: false,
+                menuWidth: 220,
+                dialogType: "drawer",
+                dialogClickModal: false,
+                columnBtn: false,
+                column: [
+                    {
+                        label: "测站名称",
+                        prop: "rtuName",
+                        span: 24,
+                    },
+                    {
+                        label: "测站编码",
+                        prop: "rtuCode",
+                        span: 24,
+                    },
+                    {
+                        label: "操作类型",
+                        prop: "saveType",
+                        span: 24,
+                        html: true,
+                        formatter: (val) => {
+                            if (val.saveType === 0) {
+                                return '<b style="color:blue">只新增</b>'
+                            } else if (val.saveType === 1) {
+                                return '<b style="color:red">覆盖已有测站</b>'
+                            } else if (val.saveType === 2) {
+                                return '<b style="color:red">删除测站</b>'
+                            } else {
+                                return '';
+                            }
+                        },
+                    },
+                ],
+            },
+            data: [],
+        };
+    },
+    computed: {
+        // ...mapGetters(["userInfo", "permission"]),
+        permissionList() {
+            return {
+                // addBtn: this.vaildData(this.permission.docCategory_add, false),
+                // viewBtn: this.vaildData(this.permission.docCategory_view, false),
+                // delBtn: this.vaildData(this.permission.docCategory_delete, false),
+                // editBtn: this.vaildData(this.permission.docCategory_edit, false),
+            };
+        },
+        ids() {
+            let ids = [];
+            this.selectionList.forEach((ele) => {
+                ids.push(ele.id);
+            });
+            return ids.join(",");
+        },
+    },
+    mounted() { },
+    created() {
+
+    },
+    methods: {
+        searchReset() {
+            this.query = {};
+            this.onLoad(this.page);
+        },
+        searchChange(params, done) {
+            this.query = params;
+            this.page.currentPage = 1;
+            this.onLoad(this.page, params);
+            done();
+        },
+        selectionChange(list) {
+            this.selectionList = list;
+        },
+        selectionClear() {
+            this.selectionList = [];
+            this.$refs.crud.toggleSelection();
+        },
+        currentChange(currentPage) {
+            this.page.currentPage = currentPage;
+        },
+        sizeChange(pageSize) {
+            this.page.pageSize = pageSize;
+        },
+        refreshChange() {
+            this.onLoad(this.page, this.query);
+        },
+        onLoad(page, params = {}) {
+            params['id'] = this.id;
+            this.loading = true;
+            getDetailPage(
+                page.currentPage,
+                page.pageSize,
+                Object.assign(params, this.query)
+            ).then((res) => {
+                const data = res.data.data;
+                this.page.total = data.total;
+                this.data = data.records;
+                this.loading = false;
+                this.selectionClear();
+            });
+        },
+    },
+};
+</script>

+ 204 - 0
src/views/baseinfo/rtu/videositeadd.vue

@@ -0,0 +1,204 @@
+<!--
+ * @Title: 
+ * @Description: 
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+    <div>
+        <!-- <el-row>
+            <el-col :span="24">
+                <basic-container>
+                    <div style="color:gray;margin-top: 0px;">*视频站编码仅支持字母+数字的编码组合,长度为20个字符</div>
+                </basic-container>
+            </el-col>
+        </el-row> -->
+        <el-row>
+            <el-col :span="24">
+                <basic-container>
+                    <avue-form :option="debugOption" v-model="debugForm" @submit="submit" />
+                </basic-container>
+            </el-col>
+        </el-row>
+    </div>
+</template>
+
+<script>
+import { add } from "@/api/baseinfo/rtu.js";
+//import { getToken } from "@/util/auth";
+// import { validatenull } from "@/util/validate";
+import { getChildrenList } from "@/api/baseinfo/region";
+export default {
+    data() {
+        return {
+            fileName: '',
+            editForm: {},
+            editDialog: false,
+            form: {},
+            selectionList: [],
+            query: {},
+            loading: true,
+            postData: {},
+            debugForm: {
+                isVideo: 1,
+            },
+            debugOption: {
+                labelWidth: 150,
+                submitBtn: true,
+                emptyBtn: true,
+                column: [
+                    {
+                        label: '视频站编码',
+                        prop: 'rtuCode',
+                        maxlength: 20,
+                        showWordLimit: true,
+                        tip: '*视频站编码仅支持字母+数字的编码组合,长度为20个字符',
+                        span: 24,
+                        rules: [{
+                            required: true,
+                            message: "必填项",
+                            trigger: "blur"
+                        }],
+                    },
+                    {
+                        label: '视频站名称',
+                        prop: 'rtuName',
+                        span: 24,
+                        rules: [{
+                            required: true,
+                            message: "必填项",
+                            trigger: "blur"
+                        }],
+                    },
+                    {
+                        label: '旗县区',
+                        prop: 'adCode',
+                        type: 'select',
+                        props: {
+                            label: 'adnm',
+                            value: 'adcd'
+                        },
+                        span: 24,
+                        dicData: [],
+                        rules: [{
+                            required: true,
+                            message: "必填项",
+                            trigger: "blur"
+                        }],
+                    },
+                    {
+                        label: "测站类型",
+                        prop: "isVideo",
+                        span: 24,
+                        editDisplay: false,
+                        addDisplay: false,
+                        display: false,
+                    },
+                    {
+                        label: '经度',
+                        prop: 'lng',
+                        tip: "使用弧度格式录入,如110.2536",
+                        span: 12,
+                        rules: [{
+                            required: true,
+                            message: "必填项",
+                            trigger: "blur"
+                        }],
+                    },
+                    {
+                        label: '纬度',
+                        prop: 'lat',
+                        tip: "使用弧度格式录入,如90.2536",
+                        span: 12,
+                        rules: [{
+                            required: true,
+                            message: "必填项",
+                            trigger: "blur"
+                        }],
+                    },
+                    {
+                        label: '安装位置',
+                        prop: 'locationDesc',
+                        span: 24,
+                        rules: [{
+                            required: true,
+                            message: "必填项",
+                            trigger: "blur"
+                        }],
+                    },
+                    {
+                        label: '蓄电池容量',
+                        prop: 'batteryModel',
+                        span: 24,
+                    },
+                    {
+                        label: '太阳能板',
+                        prop: 'sunPowerModel',
+                        span: 24,
+                    },
+                    {
+                        label: 'SIM卡号',
+                        prop: 'networkSimId',
+                        span: 24,
+                    },
+                    {
+                        label: 'SIM卡开卡单位',
+                        prop: 'networkPayer',
+                        span: 24,
+                    },
+                ]
+            }
+        };
+    },
+
+    props: {
+        visible: {
+            tyep: [Boolean],
+            default: false,
+        },
+        importLoading: {
+            tyep: [Boolean],
+            default: false,
+        }
+    },
+    name: 'videositeadd',
+    created() {
+
+    },
+    methods: {
+        init() {
+            getChildrenList().then((res) => {
+                const column = this.findObject(this.debugOption.column, "adCode");
+                column.dicData = res.data.data;
+            }, error => {
+                this.$message.error(error)
+            });
+        },
+        submit(from, done) {
+            console.log(JSON.stringify(from));
+            add(from).then(() => {
+                this.$message({
+                    type: "success",
+                    message: "提交成功!"
+                });
+
+                this.$emit("update:visible", false);
+                this.$emit("fevent");
+                done();
+            }, error => {
+                console.log(error);
+
+                done();
+            });
+        },
+    },
+};
+</script>
+<style>
+.mb0 {
+    margin-top: 10;
+
+}
+</style>

+ 180 - 87
src/views/business/data/groundDataCache.vue

@@ -1,7 +1,7 @@
 <!--
  * @Title: 
  * @Description: 
- * @Author: 893699165@qq.com
+ * @Author: swp
  * @Date: 2022-08-24 10:49:21
  * @LastEditors: 
  * @LastEditTime: 2022-08-24 10:49:21
@@ -9,30 +9,27 @@
 <template>
     <div>
         <el-row>
-            <el-col :span="5">
+            <el-col :span="4">
                 <div class="box">
                     <el-scrollbar>
                         <basic-container>
-                            <avue-tree :option="treeOption" :data="projectTreeData" @node-click="nodeClick">
+                            <avue-tree :option="treeOption" :data="treeData" @node-click="nodeClick">
                                 <span class="el-tree-node__label" slot-scope="{ node, data }">
                                     <span>
-                                        <i class="el-icon-user-solid"></i>
+                                        <i class="el-icon-office-building"></i>
                                         {{ (node || {}).label }}
                                     </span>
                                 </span>
-                                <template slot-scope="scope" slot="menu">
-                                    <div class="avue-tree__item" @click.native="tip(scope.node,scope.data)">自定义按钮</div>
-                                </template>
                             </avue-tree>
                         </basic-container>
                     </el-scrollbar>
                 </div>
             </el-col>
-            <el-col :span="19">
+            <el-col :span="20">
                 <basic-container>
                     <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page"
-                        :before-open="beforeOpen" ref="crud" v-model="form" :permission="permissionList"
-                        @row-del="rowDel" @row-update="rowUpdate" @row-save="rowSave" @search-change="searchChange"
+                        :before-open="beforeOpen" ref="crud" v-model="form" :permission="permissionList" @row-del="rowDel"
+                        @row-update="rowUpdate" @row-save="rowSave" @search-change="searchChange"
                         @search-reset="searchReset" @selection-change="selectionChange" @current-change="currentChange"
                         @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad"
                         @select-change="selectChange">
@@ -44,21 +41,17 @@
 
     </div>
 </template>
-  
+
 <script>
 import { getPage, } from "@/api/data/dataGround.js";
-import { getTree } from "@/api/business/manage/manage.js";
-
+import { getTree } from "@/api/baseinfo/region";
 export default {
     components: {
 
     },
     data() {
         return {
-
             id: "",
-            editForm: {},
-            editDialog: false,
             form: {},
             selectionList: [],
             query: {},
@@ -68,19 +61,15 @@ export default {
                 currentPage: 1,
                 total: 0,
             },
-            treeCache: {
-                orgId: '',
-                projectId: '',
-            },
-            projectTreeData: [
-
-            ],
+            treeCode: '',
+            treeParentCode: '',
+            treeData: [],
             treeOption: {
                 nodeKey: "id",
+                defaultExpandedKeys: [],
                 lazy: false,
-                defaultExpandAll: true,
                 addBtn: false,
-                menu: false,
+                menu: true,
                 size: "small",
                 props: {
                     labelText: "标题",
@@ -94,8 +83,7 @@ export default {
                 viewLabelWidth: 100,
                 searchlabelWidth: 100,
                 height: "auto",
-                //height: 600,
-                calcHeight: 30,
+                calcHeight: 80,
                 align: "center",
                 headerAlign: "center",
                 lazy: false,
@@ -106,7 +94,7 @@ export default {
                 tree: true,
                 border: true,
                 index: true,
-                selection: true,
+                selection: false,
                 viewBtn: false,
                 viewTitle: "测站信息",
                 editBtn: false,
@@ -115,64 +103,168 @@ export default {
                 menu: false,
                 dialogType: "drawer",
                 dialogClickModal: false,
+                columnBtn: false,
                 column: [
                     {
                         label: "站点名称",
                         prop: "rtuName",
                         search: true,
-                        span: 12,
+                        span: 24,
+                        width: 160,
                     },
                     {
                         label: "站点编码",
                         prop: "rtuCode",
-
-                        span: 12,
-                    },
-                    {
-                        label: "垂线平均含水量",
-                        prop: "vtavslm",
-                        span: 8,
-                    },
-                    {
-                        label: "表层含水量",
-                        prop: "srlslm",
-                        span: 8,
-                    },
-                    {
-                        label: "10CM深度含水量",
-                        prop: "slm10",
-                        span: 8,
-                    },
-                    {
-                        label: "20CM深度含水量",
-                        prop: "slm20",
-                        span: 8,
-                    },
-                    {
-                        label: "30CM深度含水量",
-                        prop: "slm30",
-                        span: 8,
-                    },
-                    {
-                        label: "40CM深度含水量",
-                        prop: "slm40",
-                        span: 8,
+                        search: true,
+                        span: 24,
+                        width: 120,
                     },
                     {
-                        label: "60CM深度含水量",
-                        prop: "slm60",
-                        span: 8,
+                        label: "行政区",
+                        prop: "adCity",
+                        span: 12,
+                        editDisplay: false,
+                        addDisplay: false,
+                        html: true,
+                        formatter: (val) => {
+                            if (val.adCity && val.adDist) {
+                                return '<b>' + val.adCity + '</b>/' + '<b>' + val.adDist + '</b>'
+                            } else {
+                                return '<b>' + val.adCity + '</b>'
+                            }
+                        }
                     },
                     {
-                        label: "80CM深度含水量",
-                        prop: "slm80",
+                        label: "上报时间",
+                        prop: "tm",
                         span: 8,
                     },
                     {
-                        label: "100CM深度含水量",
-                        prop: "slm100",
-                        span: 8,
+                        label: "含水量",
+                        children: [
+                            // {
+                            //     label: "垂线平均",
+                            //     prop: "vtavslm",
+                            //     span: 8,
+                            //     formatter: (val) => {
+                            //         if (val.vtavslm != null) {
+                            //             return val.vtavslm;
+                            //         } else {
+                            //             return "";
+                            //         }
+                            //     }
+                            // },
+                            // {
+                            //     label: "表层",
+                            //     prop: "srlslm",
+                            //     span: 8,
+                            //     formatter: (val) => {
+                            //         if (val.srlslm != null) {
+                            //             return val.srlslm;
+                            //         } else {
+                            //             return "";
+                            //         }
+                            //     }
+                            // },
+                            {
+                                label: "10CM",
+                                prop: "slm10",
+                                span: 8,
+                                formatter: (val) => {
+                                    if (val.slm10 != null) {
+                                        return val.slm10;
+                                    } else {
+                                        return "";
+                                    }
+                                }
+                            },
+                            {
+                                label: "20CM",
+                                prop: "slm20",
+                                span: 8,
+                                formatter: (val) => {
+                                    if (val.slm20 != null) {
+                                        return val.slm20;
+                                    } else {
+                                        return "";
+                                    }
+                                }
+                            },
+                            {
+                                label: "30CM",
+                                prop: "slm30",
+                                span: 8,
+                                formatter: (val) => {
+                                    if (val.slm30 != null) {
+                                        return val.slm30;
+                                    } else {
+                                        return "";
+                                    }
+                                }
+                            },
+                            {
+                                label: "40CM",
+                                prop: "slm40",
+                                span: 8,
+                                formatter: (val) => {
+                                    if (val.slm40 != null) {
+                                        return val.slm40;
+                                    } else {
+                                        return "";
+                                    }
+                                }
+                            },
+                            {
+                                label: "50CM",
+                                prop: "slm50",
+                                span: 8,
+                                formatter: (val) => {
+                                    if (val.slm50 != null) {
+                                        return val.slm50;
+                                    } else {
+                                        return "";
+                                    }
+                                }
+                            },
+                            {
+                                label: "60CM",
+                                prop: "slm60",
+                                span: 8,
+                                formatter: (val) => {
+                                    if (val.slm60 != null) {
+                                        return val.slm60;
+                                    } else {
+                                        return "";
+                                    }
+                                }
+                            },
+                            {
+                                label: "80CM",
+                                prop: "slm80",
+                                span: 8,
+                                formatter: (val) => {
+                                    if (val.slm80 != null) {
+                                        return val.slm80;
+                                    } else {
+                                        return "";
+                                    }
+                                }
+                            },
+                            {
+                                label: "100CM",
+                                prop: "slm100",
+                                span: 8,
+                                formatter: (val) => {
+                                    if (val.slm100 != null) {
+                                        return val.slm100;
+                                    } else {
+                                        return "";
+                                    }
+                                }
+                            },
+                        ]
                     },
+
                 ],
             },
             data: [],
@@ -202,44 +294,47 @@ export default {
     },
 
     methods: {
-
         initTree() {
-            getTree(
-            ).then((res) => {
-                const data = res.data.data;
-                this.projectTreeData = data;
+            this.treeData = [];
+            getTree().then(res => {
+                this.treeData = res.data.data.map(item => {
+                    return {
+                        ...item,
+                        leaf: !item.hasChildren
+                    }
+                })
+                this.treeOption.defaultExpandedKeys.push(this.treeData[0].id);
+                this.treeCode = this.treeData[0].id;
             });
         },
         nodeClick(data) {
-            this.treeCache.orgId = data.orgId;
-            this.treeCache.projectId = data.projectId;
-            //this.$message.success(JSON.stringify(data))
+            this.treeCode = data.id;
+            this.treeParentCode = data.parentId;
             this.query = {};
+            this.query['adCode'] = this.treeCode;
             this.page.currentPage = 1;
-            this.onLoad(this.page);
+            var params = {};
+            this.onLoad(this.page, params);
         },
         searchReset() {
-            this.query = {};
+            this.page.currentPage = 1;
             this.onLoad(this.page);
         },
         searchChange(params, done) {
-            this.query = params;
             this.page.currentPage = 1;
             this.onLoad(this.page, params);
             done();
         },
         selectionChange(list) {
-            this.$message.success("ssssssssssssssssssssssssss")
             this.selectionList = list;
         },
         selectChange(item) {
-            this.$message.success("sssssssssssssssss" + item)
+            this.$message.success("" + item)
         },
         selectionClear() {
             this.selectionList = [];
             this.$refs.crud.toggleSelection();
         },
-
         currentChange(currentPage) {
             this.page.currentPage = currentPage;
         },
@@ -247,12 +342,11 @@ export default {
             this.page.pageSize = pageSize;
         },
         refreshChange() {
-            this.onLoad(this.page, this.query);
+            var params = {};
+            this.onLoad(this.page, params);
         },
         onLoad(page, params = {}) {
             this.loading = true;
-            params['orgId'] = this.treeCache.orgId;
-            params['projectId'] = this.treeCache.projectId;
             getPage(
                 page.currentPage,
                 page.pageSize,
@@ -268,4 +362,3 @@ export default {
     },
 };
 </script>
-  

+ 96 - 51
src/views/business/data/rainDataCache.vue

@@ -1,7 +1,7 @@
 <!--
  * @Title: 
  * @Description: 
- * @Author: 893699165@qq.com
+ * @Author: swp
  * @Date: 2022-08-24 10:49:21
  * @LastEditors: 
  * @LastEditTime: 2022-08-24 10:49:21
@@ -9,30 +9,27 @@
 <template>
     <div>
         <el-row>
-            <el-col :span="5">
+            <el-col :span="4">
                 <div class="box">
                     <el-scrollbar>
                         <basic-container>
-                            <avue-tree :option="treeOption" :data="projectTreeData" @node-click="nodeClick">
+                            <avue-tree :option="treeOption" :data="treeData" @node-click="nodeClick">
                                 <span class="el-tree-node__label" slot-scope="{ node, data }">
                                     <span>
-                                        <i class="el-icon-user-solid"></i>
+                                        <i class="el-icon-office-building"></i>
                                         {{ (node || {}).label }}
                                     </span>
                                 </span>
-                                <template slot-scope="scope" slot="menu">
-                                    <div class="avue-tree__item" @click.native="tip(scope.node,scope.data)">自定义按钮</div>
-                                </template>
                             </avue-tree>
                         </basic-container>
                     </el-scrollbar>
                 </div>
             </el-col>
-            <el-col :span="19">
+            <el-col :span="20">
                 <basic-container>
                     <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page"
-                        :before-open="beforeOpen" ref="crud" v-model="form" :permission="permissionList"
-                        @row-del="rowDel" @row-update="rowUpdate" @row-save="rowSave" @search-change="searchChange"
+                        :before-open="beforeOpen" ref="crud" v-model="form" :permission="permissionList" @row-del="rowDel"
+                        @row-update="rowUpdate" @row-save="rowSave" @search-change="searchChange"
                         @search-reset="searchReset" @selection-change="selectionChange" @current-change="currentChange"
                         @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad"
                         @select-change="selectChange">
@@ -44,21 +41,18 @@
 
     </div>
 </template>
-  
+
 <script>
 import { getPage, } from "@/api/data/dataRain.js";
-import { getTree } from "@/api/business/manage/manage.js";
-
+// import { getTree } from "@/api/business/manage/manage.js";
+import { getTree } from "@/api/baseinfo/region";
 export default {
     components: {
 
     },
     data() {
         return {
-
             id: "",
-            editForm: {},
-            editDialog: false,
             form: {},
             selectionList: [],
             query: {},
@@ -68,19 +62,26 @@ export default {
                 currentPage: 1,
                 total: 0,
             },
-            treeCache: {
-                orgId: '',
-                projectId: '',
-            },
-            projectTreeData: [
-
-            ],
+            treeCode: '',
+            treeParentCode: '',
+            treeData: [],
             treeOption: {
                 nodeKey: "id",
+                defaultExpandedKeys: [],
                 lazy: false,
-                defaultExpandAll: true,
+                // treeLoad: function (node, resolve) {
+                //     const parentCode = (node.level === 0) ? "00" : node.data.value;
+                //     getLazyTree(parentCode).then(res => {
+                //         resolve(res.data.data.map(item => {
+                //             return {
+                //                 ...item,
+                //                 leaf: !item.hasChildren
+                //             }
+                //         }))
+                //     });
+                // },
                 addBtn: false,
-                menu: false,
+                menu: true,
                 size: "small",
                 props: {
                     labelText: "标题",
@@ -94,8 +95,7 @@ export default {
                 viewLabelWidth: 100,
                 searchlabelWidth: 100,
                 height: "auto",
-                //height: 600,
-                calcHeight: 30,
+                calcHeight: 80,
                 align: "center",
                 headerAlign: "center",
                 lazy: false,
@@ -106,7 +106,7 @@ export default {
                 tree: true,
                 border: true,
                 index: true,
-                selection: true,
+                selection: false,
                 viewBtn: false,
                 viewTitle: "测站信息",
                 editBtn: false,
@@ -115,28 +115,71 @@ export default {
                 menu: false,
                 dialogType: "drawer",
                 dialogClickModal: false,
+                columnBtn: false,
                 column: [
                     {
                         label: "站点名称",
                         prop: "rtuName",
                         search: true,
-                        span: 12,
+                        span: 24,
+                        width: 160,
                     },
                     {
                         label: "站点编码",
                         prop: "rtuCode",
-                        span: 12,
+                        search: true,
+                        span: 24,
+                        width: 120,
                     },
                     {
-                        label: "时段降水",
-                        prop: "drp",
-                        span: 8,
+                        label: "行政区",
+                        prop: "adCity",
+                        span: 24,
+                        editDisplay: false,
+                        addDisplay: false,
+                        html: true,
+                        formatter: (val) => {
+                            if (val.adCity && val.adDist) {
+                                return '<b>' + val.adCity + '</b>/' + '<b>' + val.adDist + '</b>'
+                            } else {
+                                return '<b>' + val.adCity + '</b>'
+                            }
+                        }
                     },
                     {
                         label: "上报时间",
                         prop: "tm",
-                        span: 8,
+                        span: 24,
+                    },
+                    {
+                        label: "时段长",
+                        prop: "intv",
+                        span: 24,
+                        html: true,
+                        formatter: (val) => {
+                            if (val.intv === 1.0) {
+                                return '<b>1小时</b>'
+                            } if (val.intv === 0.05) {
+                                return '<b>5分钟</b>'
+                            } else {
+                                return '';
+                            }
+                        }
+                    },
+                    {
+                        label: "时段降水量",
+                        prop: "drp",
+                        span: 24,
+                        html: true,
+                        formatter: (val) => {
+                            if (val.drp != null) {
+                                return val.drp;
+                            } else {
+                                return "";
+                            }
+                        }
                     },
+
                 ],
             },
             data: [],
@@ -166,38 +209,42 @@ export default {
     },
 
     methods: {
-
         initTree() {
-            getTree(
-            ).then((res) => {
-                const data = res.data.data;
-                this.projectTreeData = data;
+            this.treeData = [];
+            getTree().then(res => {
+                this.treeData = res.data.data.map(item => {
+                    return {
+                        ...item,
+                        leaf: !item.hasChildren
+                    }
+                })
+                this.treeOption.defaultExpandedKeys.push(this.treeData[0].id);
+                this.treeCode = this.treeData[0].id;
             });
         },
         nodeClick(data) {
-            this.treeCache.orgId = data.orgId;
-            this.treeCache.projectId = data.projectId;
-            //this.$message.success(JSON.stringify(data))
+            this.treeCode = data.id;
+            this.treeParentCode = data.parentId;
             this.query = {};
+            this.query['adCode'] = this.treeCode;
             this.page.currentPage = 1;
-            this.onLoad(this.page);
+            var params = {};
+            this.onLoad(this.page, params);
         },
         searchReset() {
-            this.query = {};
+            this.page.currentPage = 1;
             this.onLoad(this.page);
         },
         searchChange(params, done) {
-            this.query = params;
             this.page.currentPage = 1;
             this.onLoad(this.page, params);
             done();
         },
         selectionChange(list) {
-            this.$message.success("ssssssssssssssssssssssssss")
             this.selectionList = list;
         },
         selectChange(item) {
-            this.$message.success("sssssssssssssssss" + item)
+            this.$message.success("" + item)
         },
         selectionClear() {
             this.selectionList = [];
@@ -211,12 +258,11 @@ export default {
             this.page.pageSize = pageSize;
         },
         refreshChange() {
-            this.onLoad(this.page, this.query);
+            var params = {};
+            this.onLoad(this.page, params);
         },
         onLoad(page, params = {}) {
             this.loading = true;
-            params['orgId'] = this.treeCache.orgId;
-            params['projectId'] = this.treeCache.projectId;
             getPage(
                 page.currentPage,
                 page.pageSize,
@@ -232,4 +278,3 @@ export default {
     },
 };
 </script>
-  

+ 87 - 51
src/views/business/data/riverDataCache.vue

@@ -1,7 +1,7 @@
 <!--
  * @Title: 
  * @Description: 
- * @Author: 893699165@qq.com
+ * @Author: swp
  * @Date: 2022-08-24 10:49:21
  * @LastEditors: 
  * @LastEditTime: 2022-08-24 10:49:21
@@ -9,30 +9,27 @@
 <template>
     <div>
         <el-row>
-            <el-col :span="5">
+            <el-col :span="4">
                 <div class="box">
                     <el-scrollbar>
                         <basic-container>
-                            <avue-tree :option="treeOption" :data="projectTreeData" @node-click="nodeClick">
+                            <avue-tree :option="treeOption" :data="treeData" @node-click="nodeClick">
                                 <span class="el-tree-node__label" slot-scope="{ node, data }">
                                     <span>
-                                        <i class="el-icon-user-solid"></i>
+                                        <i class="el-icon-office-building"></i>
                                         {{ (node || {}).label }}
                                     </span>
                                 </span>
-                                <template slot-scope="scope" slot="menu">
-                                    <div class="avue-tree__item" @click.native="tip(scope.node,scope.data)">自定义按钮</div>
-                                </template>
                             </avue-tree>
                         </basic-container>
                     </el-scrollbar>
                 </div>
             </el-col>
-            <el-col :span="19">
+            <el-col :span="20">
                 <basic-container>
                     <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page"
-                        :before-open="beforeOpen" ref="crud" v-model="form" :permission="permissionList"
-                        @row-del="rowDel" @row-update="rowUpdate" @row-save="rowSave" @search-change="searchChange"
+                        :before-open="beforeOpen" ref="crud" v-model="form" :permission="permissionList" @row-del="rowDel"
+                        @row-update="rowUpdate" @row-save="rowSave" @search-change="searchChange"
                         @search-reset="searchReset" @selection-change="selectionChange" @current-change="currentChange"
                         @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad"
                         @select-change="selectChange">
@@ -44,21 +41,17 @@
 
     </div>
 </template>
-  
+
 <script>
 import { getPage, } from "@/api/data/dataRiver.js";
-import { getTree } from "@/api/business/manage/manage.js";
-
+import { getTree } from "@/api/baseinfo/region";
 export default {
     components: {
 
     },
     data() {
         return {
-
             id: "",
-            editForm: {},
-            editDialog: false,
             form: {},
             selectionList: [],
             query: {},
@@ -68,19 +61,26 @@ export default {
                 currentPage: 1,
                 total: 0,
             },
-            treeCache: {
-                orgId: '',
-                projectId: '',
-            },
-            projectTreeData: [
-
-            ],
+            treeCode: '',
+            treeParentCode: '',
+            treeData: [],
             treeOption: {
                 nodeKey: "id",
+                defaultExpandedKeys: [],
                 lazy: false,
-                defaultExpandAll: true,
+                // treeLoad: function (node, resolve) {
+                //     const parentCode = (node.level === 0) ? "00" : node.data.value;
+                //     getLazyTree(parentCode).then(res => {
+                //         resolve(res.data.data.map(item => {
+                //             return {
+                //                 ...item,
+                //                 leaf: !item.hasChildren
+                //             }
+                //         }))
+                //     });
+                // },
                 addBtn: false,
-                menu: false,
+                menu: true,
                 size: "small",
                 props: {
                     labelText: "标题",
@@ -94,8 +94,7 @@ export default {
                 viewLabelWidth: 100,
                 searchlabelWidth: 100,
                 height: "auto",
-                //height: 600,
-                calcHeight: 30,
+                calcHeight: 80,
                 align: "center",
                 headerAlign: "center",
                 lazy: false,
@@ -106,7 +105,7 @@ export default {
                 tree: true,
                 border: true,
                 index: true,
-                selection: true,
+                selection: false,
                 viewBtn: false,
                 viewTitle: "测站信息",
                 editBtn: false,
@@ -115,28 +114,64 @@ export default {
                 menu: false,
                 dialogType: "drawer",
                 dialogClickModal: false,
+                columnBtn: false,
                 column: [
                     {
                         label: "站点名称",
                         prop: "rtuName",
                         search: true,
-                        span: 12,
+                        span: 24,
+                        width: 160,
                     },
                     {
                         label: "站点编码",
                         prop: "rtuCode",
+                        search: true,
+                        span: 24,
+                        width: 120,
+                    },
+                    {
+                        label: "行政区",
+                        prop: "adCity",
                         span: 12,
+                        editDisplay: false,
+                        addDisplay: false,
+                        html: true,
+                        formatter: (val) => {
+                            if (val.adCity && val.adDist) {
+                                return '<b>' + val.adCity + '</b>/' + '<b>' + val.adDist + '</b>'
+                            } else {
+                                return '<b>' + val.adCity + '</b>'
+                            }
+                        }
                     },
                     {
-                        label: "河道水位",
-                        prop: "z",
+                        label: "上报时间",
+                        prop: "wlTm",
                         span: 8,
+                        html: true,
+                        formatter: (val) => {
+                            if (val.wlTm) {
+                                return val.wlTm;
+                            } else {
+                                return "";
+                            }
+                        }
                     },
                     {
-                        label: "上报时间",
-                        prop: "tm",
+                        label: "水位",
+                        prop: "wl",
                         span: 8,
+                        html: true,
+                        formatter: (val) => {
+                            if (val.wl) {
+                                return val.wl;
+                            } else {
+                                return "";
+                            }
+                        }
                     },
+
                 ],
             },
             data: [],
@@ -164,40 +199,43 @@ export default {
     created() {
         this.initTree();
     },
-
     methods: {
-
         initTree() {
-            getTree(
-            ).then((res) => {
-                const data = res.data.data;
-                this.projectTreeData = data;
+            this.treeData = [];
+            getTree().then(res => {
+                this.treeData = res.data.data.map(item => {
+                    return {
+                        ...item,
+                        leaf: !item.hasChildren
+                    }
+                })
+                this.treeOption.defaultExpandedKeys.push(this.treeData[0].id);
+                this.treeCode = this.treeData[0].id;
             });
         },
         nodeClick(data) {
-            this.treeCache.orgId = data.orgId;
-            this.treeCache.projectId = data.projectId;
-            //this.$message.success(JSON.stringify(data))
+            this.treeCode = data.id;
+            this.treeParentCode = data.parentId;
             this.query = {};
+            this.query['adCode'] = this.treeCode;
             this.page.currentPage = 1;
-            this.onLoad(this.page);
+            var params = {};
+            this.onLoad(this.page, params);
         },
         searchReset() {
-            this.query = {};
+            this.page.currentPage = 1;
             this.onLoad(this.page);
         },
         searchChange(params, done) {
-            this.query = params;
             this.page.currentPage = 1;
             this.onLoad(this.page, params);
             done();
         },
         selectionChange(list) {
-            this.$message.success("ssssssssssssssssssssssssss")
             this.selectionList = list;
         },
         selectChange(item) {
-            this.$message.success("sssssssssssssssss" + item)
+            this.$message.success("" + item)
         },
         selectionClear() {
             this.selectionList = [];
@@ -211,12 +249,11 @@ export default {
             this.page.pageSize = pageSize;
         },
         refreshChange() {
-            this.onLoad(this.page, this.query);
+            var params = {};
+            this.onLoad(this.page, params);
         },
         onLoad(page, params = {}) {
             this.loading = true;
-            params['orgId'] = this.treeCache.orgId;
-            params['projectId'] = this.treeCache.projectId;
             getPage(
                 page.currentPage,
                 page.pageSize,
@@ -232,4 +269,3 @@ export default {
     },
 };
 </script>
-  

+ 81 - 49
src/views/business/data/rsvrDataCache.vue

@@ -1,7 +1,7 @@
 <!--
  * @Title: 
  * @Description: 
- * @Author: 893699165@qq.com
+ * @Author: swp
  * @Date: 2022-08-24 10:49:21
  * @LastEditors: 
  * @LastEditTime: 2022-08-24 10:49:21
@@ -9,30 +9,27 @@
 <template>
     <div>
         <el-row>
-            <el-col :span="5">
+            <el-col :span="4">
                 <div class="box">
                     <el-scrollbar>
                         <basic-container>
-                            <avue-tree :option="treeOption" :data="projectTreeData" @node-click="nodeClick">
+                            <avue-tree :option="treeOption" :data="treeData" @node-click="nodeClick">
                                 <span class="el-tree-node__label" slot-scope="{ node, data }">
                                     <span>
-                                        <i class="el-icon-user-solid"></i>
+                                        <i class="el-icon-office-building"></i>
                                         {{ (node || {}).label }}
                                     </span>
                                 </span>
-                                <template slot-scope="scope" slot="menu">
-                                    <div class="avue-tree__item" @click.native="tip(scope.node,scope.data)">自定义按钮</div>
-                                </template>
                             </avue-tree>
                         </basic-container>
                     </el-scrollbar>
                 </div>
             </el-col>
-            <el-col :span="19">
+            <el-col :span="20">
                 <basic-container>
                     <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page"
-                        :before-open="beforeOpen" ref="crud" v-model="form" :permission="permissionList"
-                        @row-del="rowDel" @row-update="rowUpdate" @row-save="rowSave" @search-change="searchChange"
+                        :before-open="beforeOpen" ref="crud" v-model="form" :permission="permissionList" @row-del="rowDel"
+                        @row-update="rowUpdate" @row-save="rowSave" @search-change="searchChange"
                         @search-reset="searchReset" @selection-change="selectionChange" @current-change="currentChange"
                         @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad"
                         @select-change="selectChange">
@@ -44,21 +41,18 @@
 
     </div>
 </template>
-  
+
 <script>
 import { getPage, } from "@/api/data/dataRsvr.js";
-import { getTree } from "@/api/business/manage/manage.js";
-
+// import { getTree } from "@/api/business/manage/manage.js";
+import { getTree } from "@/api/baseinfo/region";
 export default {
     components: {
 
     },
     data() {
         return {
-
             id: "",
-            editForm: {},
-            editDialog: false,
             form: {},
             selectionList: [],
             query: {},
@@ -68,19 +62,26 @@ export default {
                 currentPage: 1,
                 total: 0,
             },
-            treeCache: {
-                orgId: '',
-                projectId: '',
-            },
-            projectTreeData: [
-
-            ],
+            treeCode: '',
+            treeParentCode: '',
+            treeData: [],
             treeOption: {
                 nodeKey: "id",
+                defaultExpandedKeys: [],
                 lazy: false,
-                defaultExpandAll: true,
+                // treeLoad: function (node, resolve) {
+                //     const parentCode = (node.level === 0) ? "00" : node.data.value;
+                //     getLazyTree(parentCode).then(res => {
+                //         resolve(res.data.data.map(item => {
+                //             return {
+                //                 ...item,
+                //                 leaf: !item.hasChildren
+                //             }
+                //         }))
+                //     });
+                // },
                 addBtn: false,
-                menu: false,
+                menu: true,
                 size: "small",
                 props: {
                     labelText: "标题",
@@ -94,8 +95,7 @@ export default {
                 viewLabelWidth: 100,
                 searchlabelWidth: 100,
                 height: "auto",
-                //height: 600,
-                calcHeight: 30,
+                calcHeight: 80,
                 align: "center",
                 headerAlign: "center",
                 lazy: false,
@@ -106,7 +106,7 @@ export default {
                 tree: true,
                 border: true,
                 index: true,
-                selection: true,
+                selection: false,
                 viewBtn: false,
                 viewTitle: "测站信息",
                 editBtn: false,
@@ -115,28 +115,54 @@ export default {
                 menu: false,
                 dialogType: "drawer",
                 dialogClickModal: false,
+                columnBtn: false,
                 column: [
                     {
                         label: "站点名称",
                         prop: "rtuName",
                         search: true,
-                        span: 12,
+                        span: 24,
+                        width: 160,
                     },
                     {
                         label: "站点编码",
                         prop: "rtuCode",
-                        span: 12,
+                        search: true,
+                        span: 24,
+                        width: 120,
                     },
                     {
-                        label: "库上水位",
-                        prop: "rz",
-                        span: 8,
+                        label: "行政区",
+                        prop: "adCity",
+                        span: 12,
+                        editDisplay: false,
+                        addDisplay: false,
+                        html: true,
+                        formatter: (val) => {
+                            if (val.adCity && val.adDist) {
+                                return '<b>' + val.adCity + '</b>/' + '<b>' + val.adDist + '</b>'
+                            } else {
+                                return '<b>' + val.adCity + '</b>'
+                            }
+                        }
                     },
                     {
                         label: "上报时间",
                         prop: "tm",
                         span: 8,
                     },
+                    {
+                        label: "库上水位",
+                        prop: "rz",
+                        span: 8,
+                        formatter: (val) => {
+                            if (val.rz != null) {
+                                return val.rz;
+                            } else {
+                                return "";
+                            }
+                        }
+                    },
                 ],
             },
             data: [],
@@ -168,36 +194,44 @@ export default {
     methods: {
 
         initTree() {
-            getTree(
-            ).then((res) => {
-                const data = res.data.data;
-                this.projectTreeData = data;
+            this.treeData = [];
+            getTree().then(res => {
+                this.treeData = res.data.data.map(item => {
+                    return {
+                        ...item,
+                        leaf: !item.hasChildren
+                    }
+                })
+                this.treeOption.defaultExpandedKeys.push(this.treeData[0].id);
+                this.treeCode = this.treeData[0].id;
             });
         },
         nodeClick(data) {
-            this.treeCache.orgId = data.orgId;
-            this.treeCache.projectId = data.projectId;
-            //this.$message.success(JSON.stringify(data))
+            this.treeCode = data.id;
+            this.treeParentCode = data.parentId;
             this.query = {};
+            this.query['adCode'] = this.treeCode;
             this.page.currentPage = 1;
-            this.onLoad(this.page);
+            var params = {};
+            this.onLoad(this.page, params);
         },
         searchReset() {
-            this.query = {};
+            // this.query = {};
+            // this.query['adCode'] = this.treeCode;
+            this.page.currentPage = 1;
             this.onLoad(this.page);
         },
         searchChange(params, done) {
-            this.query = params;
+            //  this.query = params;
             this.page.currentPage = 1;
             this.onLoad(this.page, params);
             done();
         },
         selectionChange(list) {
-            this.$message.success("ssssssssssssssssssssssssss")
             this.selectionList = list;
         },
         selectChange(item) {
-            this.$message.success("sssssssssssssssss" + item)
+            this.$message.success("" + item)
         },
         selectionClear() {
             this.selectionList = [];
@@ -211,12 +245,11 @@ export default {
             this.page.pageSize = pageSize;
         },
         refreshChange() {
-            this.onLoad(this.page, this.query);
+            var params = {};
+            this.onLoad(this.page, params);
         },
         onLoad(page, params = {}) {
             this.loading = true;
-            params['orgId'] = this.treeCache.orgId;
-            params['projectId'] = this.treeCache.projectId;
             getPage(
                 page.currentPage,
                 page.pageSize,
@@ -232,4 +265,3 @@ export default {
     },
 };
 </script>
-  

+ 315 - 249
src/views/business/inspection/index.vue

@@ -1,161 +1,112 @@
 <!--
  * @Title: 
- * @Description: 
- * @Author: 893699165@qq.com
+ * @Description: 巡检上报列表
+ * @Author: swp
  * @Date: 2022-08-24 10:49:21
  * @LastEditors: 
  * @LastEditTime: 2022-08-24 10:49:21
 -->
 <template>
     <div>
-        <el-row type="flex" justify="center">
-            <el-col :span="19" style="padding-left:8px;">
-                <avue-form :option="planOption" v-model="editForm" ref="editForm"></avue-form>
-            </el-col>
-            <el-col :span="5">
-                <div style="display:flex; justify-content: center;align-items: center;height: 100%;">
-                    <el-button type="primary" @click="openPlanManage()" plain>巡检计划管理
-                    </el-button>
-                </div>
-
-            </el-col>
-        </el-row>
         <el-row>
-            <el-col :span="5">
+            <el-col :span="4">
                 <div class="box">
                     <el-scrollbar>
-                        <basic-container>
-                            <avue-tree :option="treeOption" :data="projectTreeData" @node-click="nodeClick">
-                                <span class="el-tree-node__label" slot-scope="{ node, data }">
-                                    <span>
-                                        <i class="el-icon-user-solid"></i>
-                                        {{ (node || {}).label }}
-                                    </span>
+                        <avue-tree :option="treeOption" :data="treeData" @node-click="nodeClick">
+                            <span class="el-tree-node__label" slot-scope="{ node, data }">
+                                <span>
+                                    <i class="el-icon-office-building"></i>
+                                    {{ (node || {}).label }}
                                 </span>
-                                <template slot-scope="scope" slot="menu">
-                                    <div class="avue-tree__item" @click.native="tip(scope.node,scope.data)">自定义按钮</div>
-                                </template>
-                            </avue-tree>
-                        </basic-container>
+                            </span>
+                        </avue-tree>
                     </el-scrollbar>
                 </div>
             </el-col>
-            <el-col :span="19">
+            <el-col :span="20">
                 <basic-container>
                     <avue-crud :option="option" :table-loading="loading" :page.sync="page" :data="data" ref="crud"
                         v-model="form" :permission="permissionList" @row-del="rowDel" @row-update="rowUpdate"
                         @row-save="rowSave" @search-change="searchChange" @search-reset="searchReset"
                         @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
                         @refresh-change="refreshChange" @on-load="onLoad">
+                        <template slot-scope="scope" slot="menuLeft">
+                            <div class="line">
+                                <div class="lineText">
+                                    <span class="inspectionCount">本年度已巡检设备数量(至少一次): {{ inspectionCountInfo.inspectionCount
+                                    }}</span>
+                                </div>
+                                <div class="lineText">
+                                    <span style="color: gray;">/</span>
+                                </div>
+                                <div class="lineText">
+                                    <span class="beforeRainInspectionCount">汛前巡检设备数量: {{
+                                        inspectionCountInfo.beforeRainInspectionCount
+                                    }}</span>
+                                </div>
+                                <div class="lineText">
+                                    <span style="color: gray;">/</span>
+                                </div>
+                                <div class="lineText">
+                                    <span class="rainFirstInspectionCount">汛中第一次巡检设备数量: {{
+                                        inspectionCountInfo.firstRainInspectionCount
+                                    }}</span>
+                                </div>
+                                <div class="lineText">
+                                    <span style="color: gray;">/</span>
+                                </div>
+                                <div class="lineText">
+                                    <span class="rainSencodInspectionCount">汛中第二次巡检设备数量: {{
+                                        inspectionCountInfo.sencodRainInspectionCount
+                                    }}</span>
+                                </div>
+                            </div>
+                        </template>
                         <template slot-scope="{ row, index }" slot="menu">
-                            <el-button type="text" size="small" @click="openReportDetail(row)">填报详情
+                            <el-button type="text" size="small" @click="openBeforeRainReportDetail(row)">汛前详情
+                            </el-button>
+                            <el-button type="text" size="small" @click="openRainFirstReportDetail(row)">汛中(一)详情
+                            </el-button>
+                            <el-button type="text" size="small" @click="openRainSencodReportDetail(row)">汛中(二)详情
                             </el-button>
-                            <!-- <el-button type="text" size="small" @click="orderOff(row)">人工关闭
-      </el-button> -->
                         </template>
                     </avue-crud>
                 </basic-container>
             </el-col>
         </el-row>
-        <!-- <el-dialog
-  title="预警配置"
-  :visible.sync="configDialog"
-  width="600px"
-  :before-close="handleClose"
-  :close-on-click-modal="false"
-  append-to-body
->
-  <el-form label-width="120px">
-    <el-form-item label="预警总开关">
-      <el-switch
-        v-model="warningConfig.configSw"
-        active-color="#13ce66"
-        inactive-color="#ff4949"
-        active-text="开"
-        inactive-text="关"
-      >
-      </el-switch>
-    </el-form-item>
-  </el-form>
-  <span slot="footer" class="dialog-footer">
-    <el-button @click="configDialog = false" size="small">取 消</el-button>
-    <el-button type="primary" @click="confirmConfig" size="small"
-      >确 定</el-button
-    >
-  </span>
-</el-dialog> -->
-        <!-- <el-dialog title="预警信息" :visible.sync="warnInfoDialog" width="80%" :close-on-click-modal="false" append-to-body>
-  <rtuWarningList :rtuCode="rtuCode" ref="rtuWarningList"></rtuWarningList>
-</el-dialog> -->
-
-        <el-dialog title="巡检填报记录" :visible.sync="reportDialog" v-if="reportDialog" width="80%"
+        <el-drawer title="巡检填报记录" :visible.sync="reportDialog" v-if="reportDialog" :size="drawerSize" :direction="direction"
             :close-on-click-modal="false" append-to-body>
-            <inspectionRportDetail :id="id" ref="inspectionRportDetail"></inspectionRportDetail>
-        </el-dialog>
-
-
-        <el-dialog title="巡检计划" :visible.sync="projectPlanDialog" v-if="projectPlanDialog" width="60%"
-            :close-on-click-modal="false" append-to-body>
-            <ProjectPlan :planSetting="planSetting" rel="planSetting"></ProjectPlan>
-        </el-dialog>
-
+            <div slot="title" class="header-title">
+                <span class="name">{{ dialogTitle }}</span>
+            </div>
+            <inspectionreportdetail :id="id" ref="inspectionreportdetail"></inspectionreportdetail>
+        </el-drawer>
     </div>
-
 </template>
 <script>
-import { getList as getPlanList } from "@/api/project/projectPlan.js";
-import { getTree } from "@/api/business/manage/manage.js";
-import projectPlan from '@/views/project/projectPlan.vue'
 import {
     getPage,
-    getDetail,
-} from "@/api/business/inspection/inspection";
-// import { mapGetters } from "vuex";
-import inspectionRportDetail from "./inspectionRportDetail";
-import ProjectPlan from "../../project/projectPlan.vue";
-//let baseUrl = 'http://localhost:40004/api/galaxy-test'
+    getCountInfo,
+} from "@/api/business/inspection/inspection.js";
+import { getTree } from "@/api/baseinfo/region.js";
+import { mapGetters } from "vuex";
+import inspectionreportdetail from "./inspectionreportdetail.vue";
 export default {
     components: {
-        inspectionRportDetail,
-        projectPlan,
-        ProjectPlan
+        inspectionreportdetail,
     },
     data() {
         return {
             id: '',
-            projectPlanDialog: false,
-
-            planSetting: {
-                orgId: 0,
-                projectId: 0,
-                planTitle: ''
+            inspectionDate: '',
+            beforeRainSeasonReportId: '',
+            rainSeasonFirstReportId: '',
+            rainSeasonSecondReportId: '',
+            inspectionCountInfo: {
             },
-
-            planOption: {
-                submitBtn: false,
-                emptyBtn: false,
-                column: [{
-                    label: '巡检计划',
-                    prop: 'planId',
-                    type: 'select',
-
-                    dicUrl: `./api/galaxy-test/equipment/inspection/plan/all/list`,
-                    props: {
-                        label: "planTitle",
-                        value: "id",
-                    }
-                }]
-            },
-            planId: '',
-
+            drawerSize: '50%',
             reportDialog: false,
-
-            editForm: {
-
-            },
-            editDialog: false,
-            form: {},
-
+            dialogTitle: '',
             selectionList: [],
             query: {},
             loading: true,
@@ -164,33 +115,15 @@ export default {
                 currentPage: 1,
                 total: 0,
             },
-            treeCache: {
-                orgId: '',
-                projectId: '',
-            },
-            projectTreeData: [
-
-            ],
+            treeCode: '',
+            treeParentCode: '',
+            treeData: [],
             treeOption: {
                 nodeKey: "id",
+                defaultExpandedKeys: [],
                 lazy: false,
-
-                // treeLoad: function (node, resolve) {
-                // const parentId = node.level === 0 ? 0 : node.data.id;
-                // getDeptLazyTree(parentId).then((res) => {
-                // resolve(
-                // res.data.data.map((item) => {
-                // return {
-                // ...item,
-                // leaf: !item.hasChildren,
-                // };
-                // })
-                // );
-                // });
-                // },
-                defaultExpandAll: true,
                 addBtn: false,
-                menu: false,
+                menu: true,
                 size: "small",
                 props: {
                     labelText: "标题",
@@ -200,160 +133,265 @@ export default {
                 },
             },
             option: {
-                labelWidth: 120,
-                viewLabelWidth: 100,
-                searchlabelWidth: 100,
-                // height: "auto",
-                calcHeight: 30,
+                labelWidth: 140,
+                viewLabelWidth: 140,
+                searchlabelWidth: 140,
+                height: "auto",
+                calcHeight: 80,
                 align: "center",
                 headerAlign: "center",
-
-                tip: false,
+                tip: true,
                 simplePage: true,
                 searchShow: true,
                 searchMenuSpan: 6,
                 addBtn: false,
-
                 border: true,
                 index: true,
-                height: 500,
                 editBtn: false,
                 delBtn: false,
-                menuWidth: 160,
+                viewBtn: false,
+                menuWidth: 200,
                 dialogType: "drawer",
-
                 dialogClickModal: false,
+                columnBtn: false,
                 column: [
-                    //   {
-                    //     label: "计划名称",
-                    // prop: "planId",
-                    // span: 12,
-                    // type: "select",
-                    // hide: true,
-                    // search:true,
-                    // dicUrl:`./api/galaxy-test/equipment/inspection/plan/all/list`,
-                    // props:{
-                    //   label:"planTitle",
-                    //   value:"id",
-                    // }
-                    //   },
                     {
-
                         label: "测站名称",
                         prop: "rtuName",
                         span: 12,
                         search: true,
+                        html: true,
+                        formatter: (val) => {
+                            if (val.rtuName) {
+                                return '<b>' + val.rtuName + '</b>/' + '<b style="color:grey">' + val.rtuCode + '</b>'
+                            } else {
+                                return '<b>' + val.rtuName + '</b>'
+                            }
+                        }
                     },
                     {
                         label: "测站编码",
                         prop: "rtuCode",
                         span: 12,
                         search: true,
+                        hide: true,
                     },
                     {
-                        label: "填报总结说明",
-                        prop: "reportDesc",
-                        span: 12,
+                        label: "汛前巡检ID",
+                        prop: "beforeRainSeasonReportId",
+                        span: 24,
+                        hide: true,
                     },
                     {
-                        label: "填报人",
-                        prop: "createUser",
-                        span: 12,
+                        label: "汛前巡检",
+                        prop: "beforeRainSeasonStatus",
+                        span: 24,
+                        html: true,
+                        formatter: (val) => {
+                            if (val.beforeRainSeasonStatus == 1) {
+                                return '<b style="color:darkcyan;">已填报</b>'
+                            } else {
+                                return '<b style="color:darkorange;">未填报</b>'
+                            }
+                        }
                     },
                     {
-                        label: "填报时间",
-                        prop: "createTime",
-                        span: 12,
+                        label: "汛前填报人",
+                        prop: "beforeRainSeasonReportUserName",
+                        span: 24,
+                        hide: true,
                     },
+                    {
+                        label: "汛前填报时间",
+                        prop: "beforeRainSeasonReportTime",
+                        span: 24,
 
+                    },
+                    {
+                        label: "汛中巡检(一)ID",
+                        prop: "rainSeasonFirstReportId",
+                        span: 24,
+                        hide: true,
+                    },
+                    {
+                        label: "汛中巡检(一)",
+                        prop: "rainSeasonFirstStatus",
+                        span: 24,
+                        html: true,
+                        formatter: (val) => {
+                            if (val.rainSeasonFirstStatus == 1) {
+                                return '<b style="color:darkcyan;">已填报</b>'
+                            } else {
+                                return '<b style="color:darkorange;">未填报</b>'
+                            }
+                        }
+                    },
+                    {
+                        label: "汛中填报人(一)",
+                        prop: "rainSeasonFirstReportUserName",
+                        span: 24,
+                        hide: true,
+                    },
+                    {
+                        label: "汛中填报时间(一)",
+                        prop: "rainSeasonFirstReportTime",
+                        span: 24,
 
+                    },
+                    {
+                        label: "汛中巡检(二)ID",
+                        prop: "rainSeasonSecondReportId",
+                        span: 24,
+                        hide: true,
+                    },
+                    {
+                        label: "汛中巡检(二)",
+                        prop: "rainSeasonSecondStatus",
+                        span: 24,
+                        html: true,
+                        formatter: (val) => {
+                            if (val.rainSeasonSecondStatus == 1) {
+                                return '<b style="color:darkcyan;">已填报</b>'
+                            } else {
+                                return '<b style="color:darkorange;">未填报</b>'
+                            }
+                        }
+                    },
+                    {
+                        label: "汛中填报人(二)",
+                        prop: "rainSeasonSecondReportUserName",
+                        span: 24,
+                        hide: true,
+                    },
+                    {
+                        label: "汛中填报时间(二)",
+                        prop: "rainSeasonSecondReportTime",
+                        span: 24,
+                    },
                 ],
             },
             data: [],
         };
     },
+    computed: {
+        ...mapGetters(["userInfo", "permission"]),
+        permissionList() {
+            return {
 
+            };
+        },
+    },
     created() {
-        this.init();
+        this.initTree();
     },
     watch: {
-        'editForm.planId': {
-            handler(val) {
-                if (val != '' && val != undefined && val != null) {
-                    this.planId = val;
-                    // this.$message.success(this.planId)
-                }
-            },
-            immediate: true
-        }
+        // 'editForm.planId': {
+        //     handler(val) {
+        //         if (val != '' && val != undefined && val != null) {
+        //             this.planId = val;
+        //         }
+        //     },
+        //     immediate: true
+        // }
     },
     methods: {
-        openPlanManage() {
-            const planDate = new Date();
-            //  this.planSetting.orgId = item.orgId;
-            //  this.planSetting.projectId = item.id;
-            const y = planDate.getFullYear();
-            this.planSetting.planTitle = "" + y + "年度巡检计划";
-            this.projectPlanDialog = true;
-        },
-        init() {
-            this.initTree();
-            this.initPlan();
-        },
         initTree() {
-            getTree(
-            ).then((res) => {
-                const data = res.data.data;
-                this.projectTreeData = data;
-            });
-        },
-        initPlan() {
-            getPlanList(
-            ).then((res) => {
-                this.editForm.planId = res.data.data[0].id;
-                this.planId = res.data.data[0].id;
-                this.onLoad(this.page);
+            this.treeData = [];
+            getTree().then(res => {
+                this.treeData = res.data.data.map(item => {
+                    return {
+                        ...item,
+                        leaf: !item.hasChildren
+                    }
+                })
+                this.treeOption.defaultExpandedKeys.push(this.treeData[0].id);
+                this.treeCode = this.treeData[0].id;
+                this.getCountInfo(this.treeCode);
             });
-
         },
         nodeClick(data) {
-            this.treeCache.orgId = data.orgId;
-            this.treeCache.projectId = data.projectId;
-            //this.$message.success(JSON.stringify(data))
+            this.treeCode = data.id;
+            this.treeParentCode = data.parentId;
             this.query = {};
+            this.query['adCode'] = this.treeCode;
             this.page.currentPage = 1;
-            this.onLoad(this.page);
+            var params = {};
+            this.onLoad(this.page, params);
+            this.getCountInfo(this.treeCode);
         },
-        openReportDetail(item) {
-            this.reportDialog = true;
-            this.id = item.id;
-            this.$nextTick(() => {
-                this.$refs["inspectionRportDetail"].init();
+        getCountInfo(adCode) {
+            getCountInfo(adCode).then((res) => {
+                this.inspectionCountInfo = res.data.data;
             });
         },
-        // orderOff(item) {
-        // this.$prompt("请输入处理意见","是否确认关闭此工单?", {
-        // confirmButtonText: "确定",
-        // cancelButtonText: "取消",
-
-        // })
-        // .then(({ value }) => {
-        //   confirm({ id: item.id, orderDesc: value }).then((res) => {
-        // if (res.data.code == 200) {
-        // this.$message({
-        // type: "info",
-        // message: "操作成功",
-        // });
-        // this.refreshChange();
-        // }
-        // });
-        // })
-        // .catch(() => { });
-        // },
-
-
+        openBeforeRainReportDetail(item) {
+            if (item.beforeRainSeasonStatus == 1) {
+                this.reportDialog = true;
+                this.dialogTitle = '汛前巡检填报信息';
+                this.id = item.beforeRainSeasonReportId;
+                this.$nextTick(() => {
+                    this.$refs["inspectionreportdetail"].init();
+                });
+            } else {
+
+                this.$confirm("汛前巡检暂未填报!", "提示", {
+                    confirmButtonText: "确定",
+                    cancelButtonText: "取消",
+                    showCancelButton: false,
+                    type: "warning",
+                })
+                    .then(() => {
+
+                    })
+                    .catch(() => { });
+            }
+        },
+        openRainFirstReportDetail(item) {
+            if (item.rainSeasonFirstStatus == 1) {
+                this.reportDialog = true;
+                this.dialogTitle = '汛中第一次巡检填报信息';
+                this.id = item.rainSeasonFirstReportId;
+                this.$nextTick(() => {
+                    this.$refs["inspectionreportdetail"].init();
+                });
+            } else {
+                this.$confirm("汛中第一次巡检暂未填报!", "提示", {
+                    confirmButtonText: "确定",
+                    cancelButtonText: "取消",
+                    showCancelButton: false,
+                    type: "warning",
+                })
+                    .then(() => {
+
+                    })
+                    .catch(() => { });
+            }
+        },
+        openRainSencodReportDetail(item) {
+            if (item.rainSeasonSecondStatus == 1) {
+                this.reportDialog = true;
+                this.dialogTitle = '汛中第二次巡检填报信息';
+                this.id = item.rainSeasonSecondReportId;
+                this.$nextTick(() => {
+                    this.$refs["inspectionreportdetail"].init();
+                });
+            } else {
+                this.$confirm("汛中第二次巡检暂未填报!", "提示", {
+                    confirmButtonText: "确定",
+                    cancelButtonText: "取消",
+                    showCancelButton: false,
+                    type: "warning",
+                })
+                    .then(() => {
+
+                    })
+                    .catch(() => { });
+            }
+        },
         searchReset() {
             this.query = {};
+            this.query['adCode'] = this.treeCode;
+            this.page.currentPage = 1;
             this.onLoad(this.page);
         },
         searchChange(params, done) {
@@ -371,9 +409,9 @@ export default {
         },
         beforeOpen(done, type) {
             if (["edit", "view"].includes(type)) {
-                getDetail(this.form.id).then((res) => {
-                    this.form = res.data.data;
-                });
+                // getDetail(this.form.id).then((res) => {
+                //     this.form = res.data.data;
+                // });
             }
             done();
         },
@@ -384,14 +422,11 @@ export default {
             this.page.pageSize = pageSize;
         },
         refreshChange() {
-            this.onLoad(this.page, this.query);
+            var params = {};
+            this.onLoad(this.page, params);
         },
         onLoad(page, params = {}) {
             this.loading = true;
-            params['planId'] = this.planId;
-            params['orgId'] = this.treeCache.orgId;
-            params['projectId'] = this.treeCache.projectId;
-
             getPage(
                 page.currentPage,
                 page.pageSize,
@@ -399,7 +434,6 @@ export default {
             ).then((res) => {
                 const data = res.data.data;
                 this.page.total = data.total;
-
                 this.data = data.records;
                 this.loading = false;
                 this.selectionClear();
@@ -419,8 +453,6 @@ export default {
     .el-dialog {
         margin: 0 auto !important;
         position: relative;
-
-
         overflow: hidden;
 
         .el-dialog__header {
@@ -460,4 +492,38 @@ export default {
         }
     }
 }
+
+.line {
+    display: flex;
+    flex-direction: row;
+    justify-content: flex-start;
+}
+
+.line .lineText {
+    margin-left: 10px;
+    margin-right: 0px;
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+}
+
+.line .lineText .inspectionCount {
+    color: dodgerblue;
+    font-size: 0.8rem;
+}
+
+.line .lineText .beforeRainInspectionCount {
+    color: darkorange;
+    font-size: 0.8rem;
+}
+
+.line .lineText .rainFirstInspectionCount {
+    color: lightcoral;
+    font-size: 0.8rem;
+}
+
+.line .lineText .rainSencodInspectionCount {
+    color: darkcyan;
+    font-size: 0.8rem;
+}
 </style>

+ 0 - 658
src/views/business/inspection/inspectionRportDetail.vue

@@ -1,658 +0,0 @@
-<template>
-    <basic-container>
-        <el-form ref="form" :model="form" label-width="120px">
-
-            <el-card shadow="hover">
-                <div slot="header">
-                    <span>巡检总结情况</span>
-                </div>
-                <el-form-item label="巡检意见:">
-                    <div>
-                        <label>{{form.reportDesc}}</label>
-                    </div>
-                </el-form-item>
-                <el-row>
-                    <el-col :span="12">
-                        <el-form-item label="图片一">
-                            <div class="block">
-                                <!-- <span class="demonstration">默认</span> -->
-                                <el-image :src="form.basePhoto1Url"></el-image>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                    <el-col :span="12">
-                        <el-form-item label="图片二">
-                            <div class="block">
-                                <!-- <span class="demonstration">默认</span> -->
-                                <el-image :src="form.basePhoto2Url"></el-image>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-            </el-card>
-            <el-card shadow="hover" style="margin-top: 10px;">
-                <div slot="header">
-                    <span>RTU设备信息</span>
-                </div>
-                <el-row type="flex">
-                    <el-col :span="24">
-                        <el-form-item label="运行状态:">
-                            <div v-if="rtuStatus ==0" class="block">
-                                <div>
-                                    <label>正常</label>
-                                </div>
-                                <el-input :disabled="true" value="正常" />
-                            </div>
-                            <div v-else>
-                                <div>
-                                    <label>故障</label>
-                                </div>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-                <el-row type="flex">
-                    <el-col :span="6">
-                        <el-form-item label="品牌:">
-                            <div class="block">
-                                <label>{{form.rtuBrand}}</label>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                    <el-col :span="6">
-                        <el-form-item label="型号:">
-                            <div class="block">
-
-                                <label>{{form.rtuModel}}</label>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                    <el-col :span="6">
-                        <el-form-item label="更换时间:">
-                            <div class="block">
-                                <label>{{form.rtuReplaceDate}}</label>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-                <el-row type="flex">
-                    <el-col :span="24">
-                        <el-form-item label="上报到县市省:">
-                            <div style="display:flex; justify-content: start;align-items: center;">
-                                <div v-if="form.datagramToLevel1">
-                                    <label>发往县</label>
-                                    <label style="margin-left: 5px;margin-right: 5px;">/</label>
-                                </div>
-                                <div v-if="form.datagramToLevel2">
-                                    <label>发往市</label>
-                                    <label style="margin-left: 5px;margin-right: 5px;">/</label>
-                                </div>
-                                <div v-if="form.datagramToLevel3">
-                                    <label>发往省</label>
-                                    <label style="margin-left: 5px;margin-right: 5px;">/</label>
-                                </div>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-                <el-row type="flex">
-                    <el-col :span="24">
-                        <el-form-item label="备注说明:">
-                            <label>{{form.rtuDesc}}</label>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-                <el-row type="flex">
-                    <el-col :span="12">
-                        <el-form-item label="RTU图片">
-                            <div class="block">
-                                <!-- <span class="demonstration">默认</span> -->
-                                <el-image :src="form.rtuPhotoUrl"></el-image>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-            </el-card>
-            <el-card shadow="hover" style="margin-top: 10px;">
-                <div slot="header">
-                    <span>雨量传感器</span>
-                </div>
-                <el-row type="flex">
-                    <el-col :span="24">
-                        <el-form-item label="运行状态:">
-                            <div v-if="rainSensorStatus ==0" class="block">
-                                <div>
-                                    <label>正常</label>
-                                </div>
-                                <el-input :disabled="true" value="正常" />
-                            </div>
-                            <div v-else>
-                                <div>
-                                    <label>故障</label>
-                                </div>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-                <el-row type="flex">
-                    <el-col :span="6">
-                        <el-form-item label="品牌:">
-                            <div class="block">
-                                <label>{{form.rainSensorBrand}}</label>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                    <el-col :span="6">
-                        <el-form-item label="型号:">
-                            <div class="block">
-
-                                <label>{{form.rainSensorModel}}</label>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                    <el-col :span="6">
-                        <el-form-item label="更换时间:">
-                            <div class="block">
-                                <label>{{form.rainSensorReplaceDate}}</label>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-
-                <el-row type="flex">
-                    <el-col :span="24">
-                        <el-form-item label="备注说明:">
-                            <label>{{form.rainSensorDesc}}</label>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-                <el-row type="flex">
-                    <el-col :span="12">
-                        <el-form-item label="雨量传感器图片">
-                            <div class="block">
-                                <!-- <span class="demonstration">默认</span> -->
-                                <el-image :src="form.rainSensorPhotoUrl"></el-image>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-            </el-card>
-
-            <el-card shadow="hover" style="margin-top: 10px;">
-                <div slot="header">
-                    <span>水位传感器</span>
-                </div>
-                <el-row type="flex">
-                    <el-col :span="12">
-                        <el-form-item label="运行状态:">
-                            <div v-if="waterLevelSensorStatus ==0" class="block">
-                                <div>
-                                    <label>正常</label>
-                                </div>
-                                <el-input :disabled="true" value="正常" />
-                            </div>
-                            <div v-else>
-                                <div>
-                                    <label>故障</label>
-                                </div>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                    <el-col :span="12">
-                        <el-form-item label="传感器类型:">
-                            <div class="block">
-                                <label>{{form.waterSensorTypeText}}</label>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-                <el-row type="flex">
-                    <el-col :span="6">
-                        <el-form-item label="品牌:">
-                            <div class="block">
-                                <label>{{form.waterSensorBrand}}</label>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                    <el-col :span="6">
-                        <el-form-item label="型号:">
-                            <div class="block">
-
-                                <label>{{form.waterSensorModel}}</label>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                    <el-col :span="6">
-                        <el-form-item label="更换时间:">
-                            <div class="block">
-                                <label>{{form.waterSensorReplaceDate}}</label>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-
-                <el-row type="flex">
-                    <el-col :span="24">
-                        <el-form-item label="备注说明:">
-                            <label>{{form.waterSensorDesc}}</label>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-                <el-row type="flex">
-                    <el-col :span="12">
-                        <el-form-item label="水位传感器图片">
-                            <div class="block">
-                                <!-- <span class="demonstration">默认</span> -->
-                                <el-image :src="form.waterSensorPhotoUrl"></el-image>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-            </el-card>
-
-            <el-card shadow="hover" style="margin-top: 10px;">
-                <div slot="header">
-                    <span>墒情传感器</span>
-                </div>
-                <el-row type="flex">
-                    <el-col :span="12">
-                        <el-form-item label="运行状态:">
-                            <div v-if="groundWaterSensorStatus ==0" class="block">
-                                <div>
-                                    <label>正常</label>
-                                </div>
-                                <el-input :disabled="true" value="正常" />
-                            </div>
-                            <div v-else>
-                                <div>
-                                    <label>故障</label>
-                                </div>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                    <el-col :span="12">
-                        <el-form-item label="传感器类型:">
-                            <div class="block">
-                                <label>{{form.groundSensorTypeText}}</label>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-                <el-row type="flex">
-                    <el-col :span="6">
-                        <el-form-item label="品牌:">
-                            <div class="block">
-                                <label>{{form.groundSensorBrand}}</label>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                    <el-col :span="6">
-                        <el-form-item label="型号:">
-                            <div class="block">
-
-                                <label>{{form.groundSensorModel}}</label>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                    <el-col :span="6">
-                        <el-form-item label="更换时间:">
-                            <div class="block">
-                                <label>{{form.rtuReplaceDate}}</label>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-
-                <el-row type="flex">
-                    <el-col :span="24">
-                        <el-form-item label="备注说明:">
-                            <label>{{form.groundSensorDesc}}</label>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-                <el-row type="flex">
-                    <el-col :span="12">
-                        <el-form-item label="墒情传感器图片">
-                            <div class="block">
-                                <!-- <span class="demonstration">默认</span> -->
-                                <el-image :src="form.groundSensorPhotoUrl"></el-image>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-            </el-card>
-
-            <el-card shadow="hover" style="margin-top: 10px;">
-                <div slot="header">
-                    <span>供电系统</span>
-                </div>
-                <el-row type="flex">
-                    <el-col :span="24">
-                        <el-form-item label="运行状态:">
-                            <div v-if="powerStatus ==0" class="block">
-                                <div>
-                                    <label>正常</label>
-                                </div>
-                                <el-input :disabled="true" value="正常" />
-                            </div>
-                            <div v-else>
-                                <div>
-                                    <label>故障</label>
-                                </div>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-                <el-row type="flex">
-                    <el-col :span="6">
-                        <el-form-item label="蓄电池容量(AH):">
-                            <div class="block">
-                                <label>{{form.batteryModel}}</label>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                    <el-col :span="6">
-                        <el-form-item label="蓄电池更换时间:">
-                            <div class="block">
-
-                                <label>{{form.batteryReplaceDate}}</label>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                    <el-col :span="6">
-                        <el-form-item label="太阳能板功率(W):">
-                            <div class="block">
-                                <label>{{form.sunPowerModel}}</label>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                    <el-col :span="6">
-                        <el-form-item label="太阳能板更换时间:">
-                            <div class="block">
-                                <label>{{form.sunPowerReplaceDate}}</label>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-
-                <el-row type="flex">
-                    <el-col :span="24">
-                        <el-form-item label="备注说明:">
-                            <label>{{form.powerDesc}}</label>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-                <el-row type="flex">
-                    <el-col :span="12">
-                        <el-form-item label="蓄电池图片">
-                            <div class="block">
-                                <!-- <span class="demonstration">默认</span> -->
-                                <el-image :src="form.batteryPhotoUrl"></el-image>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                    <el-col :span="12">
-                        <el-form-item label="太阳能板图片">
-                            <div class="block">
-                                <!-- <span class="demonstration">默认</span> -->
-                                <el-image :src="form.sunPhotoUrl"></el-image>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-            </el-card>
-
-            <el-card shadow="hover" style="margin-top: 10px;">
-                <div slot="header">
-                    <span>4G移动网络</span>
-                </div>
-                <el-row type="flex">
-                    <el-col :span="24">
-                        <el-form-item label="运行状态:">
-                            <div v-if="networkStatus ==0" class="block">
-                                <div>
-                                    <label>正常</label>
-                                </div>
-                                <el-input :disabled="true" value="正常" />
-                            </div>
-                            <div v-else>
-                                <div>
-                                    <label>故障</label>
-                                </div>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-                <el-row type="flex">
-                    <el-col :span="6">
-                        <el-form-item label="SIM卡号:">
-                            <div class="block">
-                                <label>{{form.simCcid}}</label>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                    <el-col :span="6">
-                        <el-form-item label="开卡单位:">
-                            <div class="block">
-                                <label>{{form.simPay}}</label>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                    <el-col :span="6">
-                        <el-form-item label="缴费截止时间:">
-                            <div class="block">
-                                <label>{{form.simPayEndDate}}</label>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-                <el-row type="flex">
-                    <el-col :span="24">
-                        <el-form-item label="备注说明:">
-                            <label>{{form.networkDesc}}</label>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-            </el-card>
-
-            <el-card shadow="hover" style="margin-top: 10px;">
-                <div slot="header">
-                    <span>北斗通讯</span>
-                </div>
-                <el-row type="flex">
-                    <el-col :span="24">
-                        <el-form-item label="运行状态:">
-                            <div v-if="satelliteStatus ==0" class="block">
-                                <div>
-                                    <label>正常</label>
-                                </div>
-                                <el-input :disabled="true" value="正常" />
-                            </div>
-                            <div v-else>
-                                <div>
-                                    <label>故障</label>
-                                </div>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-                <el-row type="flex">
-                    <el-col :span="12">
-                        <el-form-item label="通讯模式:">
-                            <div class="block">
-                                <label>{{form.satelliteModelText}}</label>
-                            </div>
-                        </el-form-item>
-                    </el-col>
-
-                </el-row>
-
-                <el-row type="flex">
-                    <el-col :span="24">
-                        <el-form-item label="备注说明:">
-                            <label>{{form.satelliteDesc}}</label>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-
-            </el-card>
-
-
-        </el-form>
-    </basic-container>
-</template>
-
-<script>
-
-import {
-    getDetail,
-} from "@/api/business/inspection/inspection";
-export default {
-    components: {
-
-    },
-    props: {
-        id: {
-            type: [Number],
-            required: true
-        },
-    },
-    name: 'inspectionReport',
-    data() {
-        return {
-
-            form: {
-                reportDesc: '',
-                basePhoto1Url: '',
-                basePhoto1Take: true,
-                basePhoto2Url: '',
-                basePhoto2Take: true,
-
-                rtuStatus: 0,
-                rtuDesc: 'RTU巡检意见',
-                rtuBrand: 'RTU品牌',
-                rtuModel: 'RTU型号',
-                rtuReplaceDate: '2022-08-15 12:00:00',
-                datagramToLevel1: 1,
-                datagramToLevel2: 0,
-                datagramToLevel3: 1,
-                rtuPhotoUrl: '',
-                rtuPhotoTake: true,
-
-                rainSensorActive: 1,
-                rainSensorStatus: 0,
-                rainSensorDesc: '雨量巡检意见',
-                rainSensorReplaceDate: '2022-08-15 12:00:00',
-                rainSensorBrand: '雨量品牌',
-                rainSensorModel: '雨量型号',
-                rainSensorPhotoUrl: '',
-                rainSensorPhotoTake: true,
-
-                waterSensorBrand: '水位计品牌',
-                waterSensorModel: '水位计型号',
-                waterSensorTypeText: '雷达',
-                waterSensorReplaceDate: '2022-08-15 12:00:00',
-                waterSensorDesc: '水位计巡检意见',
-                waterSensorPhotoUrl: '',
-                waterSensorPhotoTake: true,
-                waterLevelSensorActive: 1,
-                waterLevelSensorStatus: 1,
-
-                groundSensorBrand: '墒情品牌',
-                groundSensorModel: '墒情型号',
-                groundSensorTypeText: '插针式',
-                groundSensorReplaceDate: '2022-08-15 12:00:00',
-                groundSensorDesc: '墒情巡检意见',
-                groundSensorPhotoUrl: '',
-                groundSensorPhotoTake: true,
-                groundWaterSensorActive: 1,
-                groundWaterSensorStatus: 0,
-
-                batteryModel: '电池型号',
-                batteryReplaceDate: '2022-08-15 12:00:00',
-                sunPowerModel: '太阳能型号',
-                sunPowerReplaceDate: '2022-08-15 12:00:00',
-                batteryPhotoUrl: '',
-                batteryPhotoTake: true,
-                sunPhotoUrl: '',
-                sunPhotoTake: true,
-                powerDesc: '供电巡检意见',
-                powerStatus: 0,
-
-                simCcid: '11111111111',
-                simPay: '开卡单位',
-                simPayEndDate: '2022-08-15 12:00:00',
-                networkDesc: '4G网络巡检意见',
-                networkStatus: 0,
-                networkActive: 1,
-
-                satelliteModelText: '北斗2代',
-                satelliteStatus: 0,
-                satelliteDesc: '卫星巡检意见',
-                satelliteActive: 1,
-            }
-        }
-    },
-    created() {
-        this.init();
-    },
-    methods: {
-        init() {
-
-            getDetail(this.id).then(res => {
-                const data = res.data;
-                if (data.success) {
-                    this.form = data.data;
-                    let url = this.form.basePhoto1Url;
-                    if (url != null) {
-                        url = "http://111.204.228.227:19000/galaxy/" + url;
-                        this.form.basePhoto1Url = url;
-                    }
-                    url = this.form.basePhoto2Url;
-                    if (url != null) {
-                        url = "http://111.204.228.227:19000/galaxy/" + url;
-                        this.form.basePhoto2Url = url;
-                    }
-                    url = this.form.rtuPhotoUrl;
-                    if (url != null) {
-                        url = "http://111.204.228.227:19000/galaxy/" + url;
-                        this.form.rtuPhotoUrl = url;
-                    }
-                    url = this.form.rainSensorPhotoUrl;
-                    if (url != null) {
-                        url = "http://111.204.228.227:19000/galaxy/" + url;
-                        this.form.rainSensorPhotoUrl = url;
-                    }
-                    url = this.form.waterSensorPhotoUrl;
-                    if (url != null) {
-                        url = "http://111.204.228.227:19000/galaxy/" + url;
-                        this.form.waterSensorPhotoUrl = url;
-                    }
-                    url = this.form.groundSensorPhotoUrl;
-                    if (url != null) {
-                        url = "http://111.204.228.227:19000/galaxy/" + url;
-                        this.form.groundSensorPhotoUrl = url;
-                    }
-                    url = this.form.batteryPhotoUrl;
-                    if (url != null) {
-                        url = "http://111.204.228.227:19000/galaxy/" + url;
-                        this.form.batteryPhotoUrl = url;
-                    }
-                    url = this.form.sunPhotoUrl;
-                    if (url != null) {
-                        url = "http://111.204.228.227:19000/galaxy/" + url;
-                        this.form.sunPhotoUrl = url;
-                    }
-
-                }
-            })
-        },
-
-    }
-}
-</script>
-
-<style>
-
-</style>
-

+ 1279 - 0
src/views/business/inspection/inspectionreportdetail.vue

@@ -0,0 +1,1279 @@
+<!--
+ * @Title: 
+ * @Description: 巡检填报详情
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+    <basic-container>
+
+        <el-card shadow="hover" style="margin-top: 0px;">
+            <div slot="header">
+                <span>站点基础信息</span>
+            </div>
+            <el-row type="flex">
+                <el-col :span="6" class="item-line-end">
+                    <div class="item-title">
+                        <label>测站名称:</label>
+                    </div>
+                </el-col>
+                <el-col :span="18" class="item-line-start">
+                    <div class="item-content">
+                        <label>{{ data.rtuName }} / {{ data.rtuCode }}</label>
+                    </div>
+                </el-col>
+            </el-row>
+            <el-row type="flex">
+                <el-col :span="6" class="item-line-end">
+                    <div class="item-title">
+                        <label>测站类型:</label>
+                    </div>
+                </el-col>
+                <el-col :span="18" class="item-line-start">
+                    <div class="item-content">
+                        <label>{{ getSiteKind() }}</label>
+                    </div>
+                </el-col>
+            </el-row>
+            <el-row type="flex">
+                <el-col :span="6" class="item-line-end">
+                    <div class="item-title">
+                        <label>测站安装地址:</label>
+                    </div>
+                </el-col>
+                <el-col :span="18" class="item-line-start">
+                    <div class="item-content">
+                        <label>{{ data.locationDesc }}</label>
+                    </div>
+                </el-col>
+            </el-row>
+            <el-row type="flex">
+                <el-col :span="6" class="item-line-end">
+                    <div class="item-title">
+                        <label>经纬度:</label>
+                    </div>
+                </el-col>
+                <el-col :span="18" class="item-line-start">
+                    <div class="item-content">
+                        <label>{{ data.lng }} / {{ data.lat }}</label>
+                    </div>
+                </el-col>
+            </el-row>
+            <el-row type="flex">
+                <el-col :span="6" class="item-line-end">
+                    <div class="item-title">
+                        <label>行政区划:</label>
+                    </div>
+                </el-col>
+                <el-col :span="18" class="item-line-start">
+                    <div class="item-content">
+                        <label>{{ getAreaName() }}</label>
+                    </div>
+                </el-col>
+            </el-row>
+        </el-card>
+        <!-- 站点状态检查信息 -->
+        <el-card shadow="hover" style="margin-top: 10px;">
+            <div slot="header">
+                <span>站点状态检查信息</span>
+            </div>
+            <el-row type="flex">
+                <el-col :span="6" class="item-line-end">
+                    <div class="item-title">
+                        <label>已选检查项:</label>
+                    </div>
+                </el-col>
+                <el-col :span="18" class="item-line-start">
+                    <div class="item-content">
+                        <label>{{ getSiteCheckStatus() }}</label>
+                    </div>
+                </el-col>
+            </el-row>
+            <el-row type="flex">
+                <el-col :span="6" class="item-line-end">
+                    <div class="item-title">
+                        <label>站点检查补充说明:</label>
+                    </div>
+                </el-col>
+                <el-col :span="18" class="item-line-start">
+                    <div class="item-content">
+                        <label>{{ data.siteCheckRemark }}</label>
+                    </div>
+                </el-col>
+            </el-row>
+            <div v-if="data.siteCheckPhotos.length > 0" style="width: 100%;">
+
+                <div class="block-line"
+                    style="height: 30px;display: flex;flex-direction: row;justify-content: center;margin-top: 10px;margin-bottom: 10px;">
+                    <label>站点检查拍摄照片</label>
+                </div>
+
+                <el-row v-for="(item, index) in data.siteCheckPhotos" :key="index" type="flex">
+                    <el-col :span="24">
+                        <el-image :src=toOss(item)></el-image>
+                    </el-col>
+                </el-row>
+            </div>
+            <div v-else>
+                <div class="block-line"
+                    style="height: 30px;display: flex;flex-direction: row;justify-content: center;margin-top: 10px;margin-bottom: 10px;">
+                    <label>站点检查拍摄照片</label>
+                </div>
+                <el-row type="flex">
+                    <el-col :span="24" class="item-line-center">
+                        <div class="item-title">
+                            <label>无照片数据</label>
+                        </div>
+                    </el-col>
+                </el-row>
+            </div>
+        </el-card>
+        <!-- 雨量站检查信息 -->
+        <el-card shadow="hover" style="margin-top: 10px;">
+            <div slot="header">
+                <span>雨量站检查信息</span>
+            </div>
+            <el-row type="flex">
+                <el-col :span="6" class="item-line-end">
+                    <div class="item-title">
+                        <label>已选检查项:</label>
+                    </div>
+                </el-col>
+                <el-col :span="18" class="item-line-start">
+                    <div class="item-content">
+                        <label>{{ getRainSiteCheckItems() }}</label>
+                    </div>
+                </el-col>
+            </el-row>
+            <el-row type="flex">
+                <el-col :span="6" class="item-line-end">
+                    <div class="item-title">
+                        <label>巡检结果:</label>
+                    </div>
+                </el-col>
+                <el-col :span="18" class="item-line-start">
+                    <div class="item-content">
+                        <label v-if="data.rainSiteCheckResult == 0" style="color: red;">异常</label>
+                        <label v-else style="color: blue;">正常</label>
+                    </div>
+                </el-col>
+            </el-row>
+            <el-row type="flex">
+                <el-col :span="6" class="item-line-end">
+                    <div class="item-title">
+                        <label>雨量站检查补充说明:</label>
+                    </div>
+                </el-col>
+                <el-col :span="18" class="item-line-start">
+                    <div class="item-content">
+                        <label>{{ data.rainSiteCheckRemark }}</label>
+                    </div>
+                </el-col>
+            </el-row>
+            <div v-if="data.rainSiteCheckPhotos.length > 0" style="width: 100%;">
+
+                <div class="block-line"
+                    style="height: 30px;display: flex;flex-direction: row;justify-content: center;margin-top: 10px;margin-bottom: 10px;">
+                    <label>雨量站检查拍摄照片</label>
+                </div>
+
+                <el-row v-for="(item, index) in data.rainSiteCheckPhotos" :key="index" type="flex">
+                    <el-col :span="24">
+                        <el-image :src=toOss(item)></el-image>
+                    </el-col>
+                </el-row>
+            </div>
+            <div v-else>
+                <div class="block-line"
+                    style="height: 30px;display: flex;flex-direction: row;justify-content: center;margin-top: 10px;margin-bottom: 10px;">
+                    <label>雨量站检查拍摄照片</label>
+                </div>
+                <el-row type="flex">
+                    <el-col :span="24" class="item-line-center">
+                        <div class="item-title">
+                            <label>无照片数据</label>
+                        </div>
+                    </el-col>
+                </el-row>
+            </div>
+
+
+        </el-card>
+
+        <!-- 水位站检查信息 -->
+        <el-card shadow="hover" style="margin-top: 10px;">
+            <div slot="header">
+                <span>水位站检查信息</span>
+            </div>
+            <el-row type="flex">
+                <el-col :span="6" class="item-line-end">
+                    <div class="item-title">
+                        <label>已选检查项:</label>
+                    </div>
+                </el-col>
+                <el-col :span="18" class="item-line-start">
+                    <div class="item-content">
+                        <label>{{ getWaterSiteCheckItems() }}</label>
+                    </div>
+                </el-col>
+            </el-row>
+            <el-row type="flex">
+                <el-col :span="6" class="item-line-end">
+                    <div class="item-title">
+                        <label>巡检结果:</label>
+                    </div>
+                </el-col>
+                <el-col :span="18" class="item-line-start">
+                    <div class="item-content">
+                        <label v-if="data.waterSiteCheckResult == 0" style="color: red;">异常</label>
+                        <label v-else style="color: blue;">正常</label>
+                    </div>
+                </el-col>
+            </el-row>
+            <el-row type="flex">
+                <el-col :span="6" class="item-line-end">
+                    <div class="item-title">
+                        <label>水位站检查补充说明:</label>
+                    </div>
+                </el-col>
+                <el-col :span="18" class="item-line-start">
+                    <div class="item-content">
+                        <label>{{ data.waterSiteCheckRemark }}</label>
+                    </div>
+                </el-col>
+            </el-row>
+            <div v-if="data.waterSiteCheckPhotos.length > 0" style="width: 100%;">
+
+                <div class="block-line"
+                    style="height: 30px;display: flex;flex-direction: row;justify-content: center;margin-top: 10px;margin-bottom: 10px;">
+                    <label>水位站检查拍摄照片</label>
+                </div>
+
+                <el-row v-for="(item, index) in data.waterSiteCheckPhotos" :key="index" type="flex">
+                    <el-col :span="24">
+                        <el-image :src=toOss(item)></el-image>
+                    </el-col>
+                </el-row>
+            </div>
+            <div v-else>
+                <div class="block-line"
+                    style="height: 30px;display: flex;flex-direction: row;justify-content: center;margin-top: 10px;margin-bottom: 10px;">
+                    <label>水位站检查拍摄照片</label>
+                </div>
+                <el-row type="flex">
+                    <el-col :span="24" class="item-line-center">
+                        <div class="item-title">
+                            <label>无照片数据</label>
+                        </div>
+                    </el-col>
+                </el-row>
+            </div>
+
+        </el-card>
+
+        <!-- 墒情站检查信息 -->
+        <el-card shadow="hover" style="margin-top: 10px;">
+            <div slot="header">
+                <span>墒情站检查信息</span>
+            </div>
+            <el-row type="flex">
+                <el-col :span="6" class="item-line-end">
+                    <div class="item-title">
+                        <label>已选检查项:</label>
+                    </div>
+                </el-col>
+                <el-col :span="18" class="item-line-start">
+                    <div class="item-content">
+                        <label>{{ getGroundSiteCheckItems() }}</label>
+                    </div>
+                </el-col>
+            </el-row>
+            <el-row type="flex">
+                <el-col :span="6" class="item-line-end">
+                    <div class="item-title">
+                        <label>巡检结果:</label>
+                    </div>
+                </el-col>
+                <el-col :span="18" class="item-line-start">
+                    <div class="item-content">
+                        <label v-if="data.groundSiteCheckResult == 0" style="color: red;">异常</label>
+                        <label v-else style="color: blue;">正常</label>
+                    </div>
+                </el-col>
+            </el-row>
+            <el-row type="flex">
+                <el-col :span="6" class="item-line-end">
+                    <div class="item-title">
+                        <label>墒情站检查补充说明:</label>
+                    </div>
+                </el-col>
+                <el-col :span="18" class="item-line-start">
+                    <div class="item-content">
+                        <label>{{ data.groundSiteCheckRemark }}</label>
+                    </div>
+                </el-col>
+            </el-row>
+            <div v-if="data.groundSiteCheckPhotos.length > 0" style="width: 100%;">
+
+                <div class="block-line"
+                    style="height: 30px;display: flex;flex-direction: row;justify-content: center;margin-top: 10px;margin-bottom: 10px;">
+                    <label>墒情站检查拍摄照片</label>
+                </div>
+
+                <el-row v-for="(item, index) in data.groundSiteCheckPhotos" :key="index" type="flex">
+                    <el-col :span="24">
+                        <el-image :src=toOss(item)></el-image>
+                    </el-col>
+                </el-row>
+            </div>
+            <div v-else>
+                <div class="block-line"
+                    style="height: 30px;display: flex;flex-direction: row;justify-content: center;margin-top: 10px;margin-bottom: 10px;">
+                    <label>墒情站检查拍摄照片</label>
+                </div>
+                <el-row type="flex">
+                    <el-col :span="24" class="item-line-center">
+                        <div class="item-title">
+                            <label>无照片数据</label>
+                        </div>
+                    </el-col>
+                </el-row>
+            </div>
+
+        </el-card>
+
+
+
+        <!-- 其他设备检查信息 -->
+        <el-card shadow="hover" style="margin-top: 10px;">
+            <div slot="header">
+                <span>其他设备检查信息</span>
+            </div>
+            <el-row type="flex">
+                <el-col :span="6" class="item-line-end">
+                    <div class="item-title">
+                        <label>已选检查项:</label>
+                    </div>
+                </el-col>
+                <el-col :span="18" class="item-line-start">
+                    <div class="item-content">
+                        <label>{{ getOthersEquipmentCheckItems() }}</label>
+                    </div>
+                </el-col>
+            </el-row>
+            <el-row type="flex">
+                <el-col :span="6" class="item-line-end">
+                    <div class="item-title">
+                        <label>巡检结果:</label>
+                    </div>
+                </el-col>
+                <el-col :span="18" class="item-line-start">
+                    <div class="item-content">
+                        <label v-if="data.otherEquipmentCheckResult == 0" style="color: red;">异常</label>
+                        <label v-else style="color: blue;">正常</label>
+                    </div>
+                </el-col>
+            </el-row>
+            <el-row type="flex">
+                <el-col :span="6" class="item-line-end">
+                    <div class="item-title">
+                        <label>其他设备检查补充说明:</label>
+                    </div>
+                </el-col>
+                <el-col :span="18" class="item-line-start">
+                    <div class="item-content">
+                        <label>{{ data.othersEquipmentCheckRemark }}</label>
+                    </div>
+                </el-col>
+            </el-row>
+            <div v-if="data.othersEquipmentCheckPhotos.length > 0" style="width: 100%;">
+
+                <div class="block-line"
+                    style="height: 30px;display: flex;flex-direction: row;justify-content: center;margin-top: 10px;margin-bottom: 10px;">
+                    <label>其他设备检查拍摄照片</label>
+                </div>
+
+                <el-row v-for="(item, index) in data.othersEquipmentCheckPhotos" :key="index" type="flex">
+                    <el-col :span="24">
+                        <el-image :src=toOss(item)></el-image>
+                    </el-col>
+                </el-row>
+            </div>
+            <div v-else>
+                <div class="block-line"
+                    style="height: 30px;display: flex;flex-direction: row;justify-content: center;margin-top: 10px;margin-bottom: 10px;">
+                    <label>其他设备检查拍摄照片</label>
+                </div>
+                <el-row type="flex">
+                    <el-col :span="24" class="item-line-center">
+                        <div class="item-title">
+                            <label>无照片数据</label>
+                        </div>
+                    </el-col>
+                </el-row>
+            </div>
+
+        </el-card>
+
+        <!-- 设备更换信息 -->
+        <el-card shadow="hover" style="margin-top: 10px;">
+            <div slot="header">
+                <span>其他设备检查信息</span>
+            </div>
+            <el-card v-if="data.equipmentsReplaceItems.items[0].checked" shadow="hover" style="margin-top: 10px;">
+                <div slot="header">
+                    <span>更换RTU</span>
+                </div>
+                <el-row type="flex">
+                    <el-col :span="24" class="item-line-start">
+                        <div class="item-content">
+                            <label>{{ data.rtuModelRemark }}</label>
+                        </div>
+                    </el-col>
+                </el-row>
+                <div v-if="data.rtuReplacePhotos.length > 0" style="width: 100%;">
+
+                    <div class="block-line"
+                        style="height: 30px;display: flex;flex-direction: row;justify-content: center;margin-top: 10px;margin-bottom: 10px;">
+                        <label>RTU更换照片</label>
+                    </div>
+
+                    <el-row v-for="(item, index) in data.rtuReplacePhotos" :key="index" type="flex">
+                        <el-col :span="24">
+                            <el-image :src=toOss(item)></el-image>
+                        </el-col>
+                    </el-row>
+                </div>
+                <div v-else>
+                    <div class="block-line"
+                        style="height: 30px;display: flex;flex-direction: row;justify-content: center;margin-top: 10px;margin-bottom: 10px;">
+                        <label>RTU更换照片</label>
+                    </div>
+                    <el-row type="flex">
+                        <el-col :span="24" class="item-line-center">
+                            <div class="item-title">
+                                <label>无照片数据</label>
+                            </div>
+                        </el-col>
+                    </el-row>
+                </div>
+            </el-card>
+
+            <el-card v-if="data.equipmentsReplaceItems.items[1].checked" shadow="hover" style="margin-top: 10px;">
+                <div slot="header">
+                    <span>更换雨量计</span>
+                </div>
+                <el-row type="flex">
+                    <el-col :span="24" class="item-line-start">
+                        <div class="item-content">
+                            <label>{{ data.rainSensorModelRemark }}</label>
+                        </div>
+                    </el-col>
+                </el-row>
+                <div v-if="data.rtuReplacePhotos.length > 0" style="width: 100%;">
+
+                    <div class="block-line"
+                        style="height: 30px;display: flex;flex-direction: row;justify-content: center;margin-top: 10px;margin-bottom: 10px;">
+                        <label>RTU更换照片</label>
+                    </div>
+
+                    <el-row v-for="(item, index) in data.rtuReplacePhotos" :key="index" type="flex">
+                        <el-col :span="24">
+                            <el-image :src=toOss(item)></el-image>
+                        </el-col>
+                    </el-row>
+                </div>
+                <div v-else>
+                    <div class="block-line"
+                        style="height: 30px;display: flex;flex-direction: row;justify-content: center;margin-top: 10px;margin-bottom: 10px;">
+                        <label>RTU更换照片</label>
+                    </div>
+                    <el-row type="flex">
+                        <el-col :span="24" class="item-line-center">
+                            <div class="item-title">
+                                <label>无照片数据</label>
+                            </div>
+                        </el-col>
+                    </el-row>
+                </div>
+            </el-card>
+
+            <el-card v-if="data.equipmentsReplaceItems.items[2].checked" shadow="hover" style="margin-top: 10px;">
+                <div slot="header">
+                    <span>更换水位计</span>
+                </div>
+                <el-row type="flex">
+                    <el-col :span="24" class="item-line-start">
+                        <div class="item-content">
+                            <label>{{ data.waterSensorModelRemark }}</label>
+                        </div>
+                    </el-col>
+                </el-row>
+                <div v-if="data.waterSensorReplacePhotos.length > 0" style="width: 100%;">
+
+                    <div class="block-line"
+                        style="height: 30px;display: flex;flex-direction: row;justify-content: center;margin-top: 10px;margin-bottom: 10px;">
+                        <label>水位计更换照片</label>
+                    </div>
+
+                    <el-row v-for="(item, index) in data.waterSensorReplacePhotos" :key="index" type="flex">
+                        <el-col :span="24">
+                            <el-image :src=toOss(item)></el-image>
+                        </el-col>
+                    </el-row>
+                </div>
+                <div v-else>
+                    <div class="block-line"
+                        style="height: 30px;display: flex;flex-direction: row;justify-content: center;margin-top: 10px;margin-bottom: 10px;">
+                        <label>水位计更换照片</label>
+                    </div>
+                    <el-row type="flex">
+                        <el-col :span="24" class="item-line-center">
+                            <div class="item-title">
+                                <label>无照片数据</label>
+                            </div>
+                        </el-col>
+                    </el-row>
+                </div>
+            </el-card>
+
+            <el-card v-if="data.equipmentsReplaceItems.items[3].checked" shadow="hover" style="margin-top: 10px;">
+                <div slot="header">
+                    <span>更换墒情计</span>
+                </div>
+                <el-row type="flex">
+                    <el-col :span="24" class="item-line-start">
+                        <div class="item-content">
+                            <label>{{ data.groundSensorModelRemark }}</label>
+                        </div>
+                    </el-col>
+                </el-row>
+                <div v-if="data.groundSensorReplacePhotos.length > 0" style="width: 100%;">
+
+                    <div class="block-line"
+                        style="height: 30px;display: flex;flex-direction: row;justify-content: center;margin-top: 10px;margin-bottom: 10px;">
+                        <label>墒情计更换照片</label>
+                    </div>
+
+                    <el-row v-for="(item, index) in data.groundSensorReplacePhotos" :key="index" type="flex">
+                        <el-col :span="24">
+                            <el-image :src=toOss(item)></el-image>
+                        </el-col>
+                    </el-row>
+                </div>
+                <div v-else>
+                    <div class="block-line"
+                        style="height: 30px;display: flex;flex-direction: row;justify-content: center;margin-top: 10px;margin-bottom: 10px;">
+                        <label>墒情计更换照片</label>
+                    </div>
+                    <el-row type="flex">
+                        <el-col :span="24" class="item-line-center">
+                            <div class="item-title">
+                                <label>无照片数据</label>
+                            </div>
+                        </el-col>
+                    </el-row>
+                </div>
+            </el-card>
+
+            <el-card v-if="data.equipmentsReplaceItems.items[4].checked" shadow="hover" style="margin-top: 10px;">
+                <div slot="header">
+                    <span>更换蓄电池</span>
+                </div>
+                <el-row type="flex">
+                    <el-col :span="24" class="item-line-start">
+                        <div class="item-content">
+                            <label>{{ data.batteryModelRemark }}</label>
+                        </div>
+                    </el-col>
+                </el-row>
+                <div v-if="data.batteryReplacePhotos.length > 0" style="width: 100%;">
+
+                    <div class="block-line"
+                        style="height: 30px;display: flex;flex-direction: row;justify-content: center;margin-top: 10px;margin-bottom: 10px;">
+                        <label>蓄电池更换照片</label>
+                    </div>
+
+                    <el-row v-for="(item, index) in data.batteryReplacePhotos" :key="index" type="flex">
+                        <el-col :span="24">
+                            <el-image :src=toOss(item)></el-image>
+                        </el-col>
+                    </el-row>
+                </div>
+                <div v-else>
+                    <div class="block-line"
+                        style="height: 30px;display: flex;flex-direction: row;justify-content: center;margin-top: 10px;margin-bottom: 10px;">
+                        <label>蓄电池更换照片</label>
+                    </div>
+                    <el-row type="flex">
+                        <el-col :span="24" class="item-line-center">
+                            <div class="item-title">
+                                <label>无照片数据</label>
+                            </div>
+                        </el-col>
+                    </el-row>
+                </div>
+            </el-card>
+
+            <el-card v-if="data.equipmentsReplaceItems.items[5].checked" shadow="hover" style="margin-top: 10px;">
+                <div slot="header">
+                    <span>更换太阳能板</span>
+                </div>
+                <el-row type="flex">
+                    <el-col :span="24" class="item-line-start">
+                        <div class="item-content">
+                            <label>{{ data.sunPowerModelRemark }}</label>
+                        </div>
+                    </el-col>
+                </el-row>
+                <div v-if="data.sunPowerReplacePhotos.length > 0" style="width: 100%;">
+
+                    <div class="block-line"
+                        style="height: 30px;display: flex;flex-direction: row;justify-content: center;margin-top: 10px;margin-bottom: 10px;">
+                        <label>太阳能板更换照片</label>
+                    </div>
+
+                    <el-row v-for="(item, index) in data.sunPowerReplacePhotos" :key="index" type="flex">
+                        <el-col :span="24">
+                            <el-image :src=toOss(item)></el-image>
+                        </el-col>
+                    </el-row>
+                </div>
+                <div v-else>
+                    <div class="block-line"
+                        style="height: 30px;display: flex;flex-direction: row;justify-content: center;margin-top: 10px;margin-bottom: 10px;">
+                        <label>太阳能板更换照片</label>
+                    </div>
+                    <el-row type="flex">
+                        <el-col :span="24" class="item-line-center">
+                            <div class="item-title">
+                                <label>无照片数据</label>
+                            </div>
+                        </el-col>
+                    </el-row>
+                </div>
+            </el-card>
+
+            <el-card v-if="data.equipmentsReplaceItems.items[6].checked" shadow="hover" style="margin-top: 10px;">
+                <div slot="header">
+                    <span>更换充电控制器</span>
+                </div>
+                <el-row type="flex">
+                    <el-col :span="24" class="item-line-start">
+                        <div class="item-content">
+                            <label>{{ data.batteryControlModelRemark }}</label>
+                        </div>
+                    </el-col>
+                </el-row>
+                <div v-if="data.batteryControlReplacePhotos.length > 0" style="width: 100%;">
+
+                    <div class="block-line"
+                        style="height: 30px;display: flex;flex-direction: row;justify-content: center;margin-top: 10px;margin-bottom: 10px;">
+                        <label>充电控制器更换照片</label>
+                    </div>
+
+                    <el-row v-for="(item, index) in data.batteryControlReplacePhotos" :key="index" type="flex">
+                        <el-col :span="24">
+                            <el-image :src=toOss(item)></el-image>
+                        </el-col>
+                    </el-row>
+                </div>
+                <div v-else>
+                    <div class="block-line"
+                        style="height: 30px;display: flex;flex-direction: row;justify-content: center;margin-top: 10px;margin-bottom: 10px;">
+                        <label>充电控制器更换照片</label>
+                    </div>
+                    <el-row type="flex">
+                        <el-col :span="24" class="item-line-center">
+                            <div class="item-title">
+                                <label>无照片数据</label>
+                            </div>
+                        </el-col>
+                    </el-row>
+                </div>
+            </el-card>
+
+            <el-card v-if="data.equipmentsReplaceItems.items[7].checked" shadow="hover" style="margin-top: 10px;">
+                <div slot="header">
+                    <span>更换其他设备</span>
+                </div>
+                <el-row type="flex">
+                    <el-col :span="24" class="item-line-start">
+                        <div class="item-content">
+                            <label>{{ data.otherEquipmentModelRemark }}</label>
+                        </div>
+                    </el-col>
+                </el-row>
+                <div v-if="data.otherEquipmentReplacePhotos.length > 0" style="width: 100%;">
+
+                    <div class="block-line"
+                        style="height: 30px;display: flex;flex-direction: row;justify-content: center;margin-top: 10px;margin-bottom: 10px;">
+                        <label>其他设备更换照片</label>
+                    </div>
+
+                    <el-row v-for="(item, index) in data.otherEquipmentReplacePhotos" :key="index" type="flex">
+                        <el-col :span="24">
+                            <el-image :src=toOss(item)></el-image>
+                        </el-col>
+                    </el-row>
+                </div>
+                <div v-else>
+                    <div class="block-line"
+                        style="height: 30px;display: flex;flex-direction: row;justify-content: center;margin-top: 10px;margin-bottom: 10px;">
+                        <label>其他设备更换照片</label>
+                    </div>
+                    <el-row type="flex">
+                        <el-col :span="24" class="item-line-center">
+                            <div class="item-title">
+                                <label>无照片数据</label>
+                            </div>
+                        </el-col>
+                    </el-row>
+                </div>
+            </el-card>
+        </el-card>
+
+
+        <el-card shadow="hover" style="margin-top: 10px;">
+            <div slot="header">
+                <span>遗留问题补充说明</span>
+            </div>
+            <el-row type="flex">
+                <el-col :span="24" class="item-line-start">
+                    <div class="item-content">
+                        <label>{{ data.inspectionRemainProblemsRemark }}</label>
+                    </div>
+                </el-col>
+            </el-row>
+        </el-card>
+
+
+        <!-- 巡检工作留存照片 -->
+        <el-card shadow="hover" style="margin-top: 10px;">
+            <div slot="header">
+                <span>巡检工作留存照片</span>
+            </div>
+            <div v-if="data.inspectionWorkPhotos.length > 0" style="width: 100%;">
+                <el-row v-for="(item, index) in data.inspectionWorkPhotos" :key="index" type="flex">
+                    <el-col :span="24">
+                        <el-image :src=toOss(item)></el-image>
+                    </el-col>
+                </el-row>
+            </div>
+            <div v-else>
+                <el-row type="flex">
+                    <el-col :span="24" class="item-line-center">
+                        <div class="item-title">
+                            <label>无照片数据</label>
+                        </div>
+                    </el-col>
+                </el-row>
+            </div>
+        </el-card>
+    </basic-container>
+</template>
+
+<script>
+
+import {
+    getDetail,
+} from "@/api/business/inspection/inspectionreport.js";
+
+export default {
+    components: {
+
+    },
+    props: {
+        id: {
+            type: [Number],
+            required: true
+        },
+    },
+    name: 'inspectionreportdetail',
+    data() {
+        return {
+            data: {
+                rtuCode: '',
+                rtuName: '',
+                isRain: false,
+                isRiver: false,
+                isRes: false,
+                isGround: false,
+                isCamera: false,
+                lng: '',
+                lat: '',
+                adCity: '',
+                adDist: '',
+                locationDesc: '',
+                //站点状态检查项
+                siteCheckStatus: {
+                    items: [{
+                        'id': '0',
+                        'dictValue': '水毁'
+                    }, {
+                        'id': '1',
+                        'dictValue': '丢失'
+                    }, {
+                        'id': '2',
+                        'dictValue': '损坏'
+                    }, {
+                        'id': '3',
+                        'dictValue': '正常'
+                    }],
+                    current: 3
+                },
+                siteCheckPhotos: [],
+                siteCheckRemark: '',
+                //雨量站检查数据
+                rainSiteCheckItems: {
+                    items: [{
+                        'id': '0',
+                        'checked': false,
+                        'dictValue': '故障排查'
+                    }, {
+                        'id': '1',
+                        'checked': false,
+                        'dictValue': '清理堵塞'
+                    }, {
+                        'id': '2',
+                        'checked': false,
+                        'dictValue': '雨量计校核'
+                    }],
+                    current: 0
+                },
+                rainSiteCheckPhotos: [],
+                rainSiteCheckResult: 1,
+                rainSiteCheckRemark: '',
+                //水位站检查数据
+                waterSiteCheckItems: {
+                    items: [{
+                        'id': '0',
+                        'checked': false,
+                        'dictValue': '故障排查'
+                    }, {
+                        'id': '1',
+                        'checked': false,
+                        'dictValue': '水位计校核'
+                    }],
+                    current: 0
+                },
+                waterSiteCheckPhotos: [],
+                waterSiteCheckResult: 1,
+                waterSiteCheckRemark: '',
+                //墒情站检查数据
+                groundSiteCheckItems: {
+                    items: [{
+                        'id': '0',
+                        'checked': false,
+                        'dictValue': '故障排查'
+                    }, {
+                        'id': '1',
+                        'checked': false,
+                        'dictValue': '墒情计校核'
+                    }],
+                    current: 0
+                },
+                groundSiteCheckPhotos: [],
+                groundSiteCheckRemark: '',
+                groundSiteCheckResult: 1,
+                //其他设备检查
+                othersEquipmentCheckItems: {
+                    items: [{
+                        'id': '0',
+                        'checked': false,
+                        'dictValue': '设备接地检测'
+                    }, {
+                        'id': '1',
+                        'checked': false,
+                        'dictValue': '电源电压检测'
+                    }, {
+                        'id': '2',
+                        'checked': false,
+                        'dictValue': '太阳能板检查'
+                    }, {
+                        'id': '3',
+                        'checked': false,
+                        'dictValue': '蓄电池检查'
+                    }, {
+                        'id': '4',
+                        'checked': false,
+                        'dictValue': '网络通信检查'
+                    }],
+                    current: 0
+                },
+                othersEquipmentCheckPhotos: [],
+                othersEquipmentCheckRemark: '',
+                otherEquipmentCheckResult: 1,
+                //设备替换
+                equipmentsReplaceItems: {
+                    items: [{
+                        'id': '0',
+                        'checked': false,
+                        'dictValue': 'RTU'
+                    }, {
+                        'id': '1',
+                        'checked': false,
+                        'dictValue': '雨量计'
+                    }, {
+                        'id': '2',
+                        'checked': false,
+                        'dictValue': '水位计'
+                    }, {
+                        'id': '3',
+                        'checked': false,
+                        'dictValue': '墒情计'
+                    }, {
+                        'id': '4',
+                        'checked': false,
+                        'dictValue': '蓄电池'
+                    }, {
+                        'id': '5',
+                        'checked': false,
+                        'dictValue': '太阳能板'
+                    }, {
+                        'id': '6',
+                        'checked': false,
+                        'dictValue': '充电控制器'
+                    }, {
+                        'id': '7',
+                        'checked': false,
+                        'dictValue': '其他'
+                    }],
+                    current: 0
+                },
+                rtuModelRemark: '',
+                rtuReplacePhotos: [],
+                rainSensorModelRemark: '',
+                rainSensorReplacePhotos: [],
+                waterSensorModelRemark: '',
+                waterSensorReplacePhotos: [],
+                groundSensorModelRemark: '',
+                groundSensorReplacePhotos: [],
+                batteryModelRemark: '',
+                batteryReplacePhotos: [],
+                sunPowerModelRemark: '',
+                sunPowerReplacePhotos: [],
+                batteryControlModelRemark: '',
+                batteryControlReplacePhotos: [],
+                otherEquipmentModelRemark: '',
+                otherEquipmentReplacePhotos: [],
+                //巡检遗留问题描述
+                inspectionRemainProblemsRemark: '',
+                //工作留存数据
+                inspectionWorkPhotos: [],
+            }
+        }
+    },
+    created() {
+        this.init();
+    },
+    methods: {
+        toOss(path) {
+            console.log("oss " + this.website.ossServer + path);
+            // return "/oss/galaxy/" + path;
+            return this.website.ossServer + path;
+        },
+        init() {
+            getDetail(this.id).then(res => {
+                const data = res.data;
+                console.log(JSON.stringify(data));
+                if (data.success) {
+                    // this.data = data.data;
+                    this.data.rtuName = data.data['rtuName'];
+                    this.data.rtuCode = data.data['rtuCode'];
+                    this.data.isRain = data.data['isRain'];
+                    this.data.isRiver = data.data['isRiver'];
+                    this.data.isRes = data.data['isRes'];
+                    this.data.isGround = data.data['isGround'];
+                    this.data.lng = data.data['lng'];
+                    this.data.lat = data.data['lat'];
+                    this.data.adCity = data.data['adCity'];
+                    this.data.adDist = data.data['adDist'];
+                    this.data.locationDesc = data.data['locationDesc'];
+                    this.data.siteCheckStatus.current = Number(data.data['siteCheckItem']);
+                    this.data.siteCheckRemark = data.data['siteCheckRemark'];
+                    this.data.siteCheckPhotos = [];
+                    let photos = data.data['siteCheckPhotos'];
+                    if (null != photos && photos.length > 0) {
+                        let photoList = photos.split(",");
+                        this.data.siteCheckPhotos = photoList;
+                    }
+                    //雨量站检查
+                    let items = data.data['rainSiteCheckItem'];
+                    if (null != items && items.length > 0) {
+                        let itemList = items.split(",");
+                        this.data.rainSiteCheckItems.items[0].checked = (itemList[0] == 0) ? false : true;
+                        this.data.rainSiteCheckItems.items[1].checked = (itemList[1] == 0) ? false : true;
+                        this.data.rainSiteCheckItems.items[2].checked = (itemList[2] == 0) ? false : true;
+                    }
+
+                    this.data.rainSiteCheckResult = data.data['rainSiteCheckResult'];
+                    this.data.rainSiteCheckPhotos = [];
+                    photos = data.data['rainSiteCheckPhotos'];
+                    if (null != photos && photos.length > 0) {
+                        let photoList = photos.split(",");
+                        this.data.rainSiteCheckPhotos = photoList;
+                    }
+                    this.data.rainSiteCheckRemark = data.data['rainSiteCheckRemark'];
+                    //水位站检查
+                    items = data.data['waterSiteCheckItem'];
+                    if (null != items && items.length > 0) {
+                        let itemList = items.split(",");
+                        this.data.waterSiteCheckItems.items[0].checked = (itemList[0] == 0) ? false : true;
+                        this.data.waterSiteCheckItems.items[1].checked = (itemList[1] == 0) ? false : true;
+                    }
+                    this.data.waterSiteCheckPhotos = [];
+                    photos = data.data['waterSiteCheckPhotos'];
+                    if (null != photos && photos.length > 0) {
+                        let photoList = photos.split(",");
+                        this.data.waterSiteCheckPhotos = photoList;
+                    }
+                    this.data.waterSiteCheckRemark = data.data['waterSiteCheckRemark'];
+                    this.data.waterSiteCheckResult = data.data['waterSiteCheckResult'];
+                    items = data.data['groundSiteCheckItem'];
+                    if (null != items && items.length > 0) {
+                        let itemList = items.split(",");
+                        this.data.groundSiteCheckItems.items[0].checked = itemList[0] == 0 ? false : true;
+                        this.data.groundSiteCheckItems.items[1].checked = itemList[1] == 0 ? false : true;
+                    }
+                    this.data.groundSiteCheckPhotos = [];
+                    photos = data.data['groundSiteCheckPhotos'];
+                    if (null != photos && photos.length > 0) {
+                        let photoList = photos.split(",");
+                        this.data.groundSiteCheckPhotos = photoList;
+                    }
+                    this.data.groundSiteCheckRemark = data.data['groundSiteCheckRemark'];
+                    this.data.groundSiteCheckResult = data.data['groundSiteCheckResult'];
+                    items = data.data['otherEquipmentCheckItem'];
+                    if (null != items && items.length > 0) {
+                        let itemList = items.split(",");
+                        this.data.othersEquipmentCheckItems.items[0].checked = itemList[0] == 0 ? false : true;
+                        this.data.othersEquipmentCheckItems.items[1].checked = itemList[1] == 0 ? false : true;
+                        this.data.othersEquipmentCheckItems.items[2].checked = itemList[2] == 0 ? false : true;
+                        this.data.othersEquipmentCheckItems.items[3].checked = itemList[3] == 0 ? false : true;
+                        this.data.othersEquipmentCheckItems.items[4].checked = itemList[4] == 0 ? false : true;
+
+                    }
+                    this.data.othersEquipmentCheckPhotos = [];
+                    photos = data.data['otherEquipmentCheckPhotos'];
+                    if (null != photos && photos.length > 0) {
+                        let photoList = photos.split(",");
+                        this.data.othersEquipmentCheckPhotos = photoList;
+                    }
+                    this.data.othersEquipmentCheckRemark = data.data['otherEquipmentCheckRemark'];
+                    this.data.otherEquipmentCheckResult = data.data['otherEquipmentCheckResult'];
+
+                    this.data.equipmentsReplaceItems.items[0].checked = data.data['rtuReplace'] == 0 ? false :
+                        true;
+                    this.data.equipmentsReplaceItems.items[1].checked = data.data['rainSensorReplace'] == 0 ?
+                        false :
+                        true;
+                    this.data.equipmentsReplaceItems.items[2].checked = data.data['waterSensorReplace'] == 0 ?
+                        false :
+                        true;
+                    this.data.equipmentsReplaceItems.items[3].checked = data.data['groundSensorReplace'] == 0 ?
+                        false : true;
+                    this.data.equipmentsReplaceItems.items[4].checked = data.data['batteryReplace'] == 0 ?
+                        false :
+                        true;
+                    this.data.equipmentsReplaceItems.items[5].checked = data.data['sunPowerReplace'] == 0 ?
+                        false :
+                        true;
+                    this.data.equipmentsReplaceItems.items[6].checked = data.data['batteryControllerReplace'] ==
+                        0 ?
+                        false : true;
+                    this.data.equipmentsReplaceItems.items[7].checked = data.data['otherEquipmentReplace'] ==
+                        0 ?
+                        false : true;
+
+                    this.data.rtuModelRemark = data.data['rtuModelRemark'];
+                    photos = data.data['rtuReplacePhotos'];
+                    if (null != photos && photos.length > 0) {
+                        let photoList = photos.split(",");
+                        this.data.rtuReplacePhotos = photoList;
+                    }
+                    this.data.rainSensorModelRemark = data.data['rainSensorModelRemark'];
+                    photos = data.data['rainSensorReplacePhotos'];
+                    if (null != photos && photos.length > 0) {
+                        let photoList = photos.split(",");
+                        this.data.rainSensorReplacePhotos = photoList;
+                    }
+                    this.data.waterSensorModelRemark = data.data['waterSensorModelRemark'];
+                    photos = data.data['waterSensorReplacePhotos'];
+                    if (null != photos && photos.length > 0) {
+                        let photoList = photos.split(",");
+                        this.data.waterSensorReplacePhotos = photoList;
+                    }
+                    this.data.groundSensorModelRemark = data.data['groundSensorModelRemark'];
+                    photos = data.data['groundSensorReplacePhotos'];
+                    if (null != photos && photos.length > 0) {
+                        let photoList = photos.split(",");
+                        this.data.groundSensorReplacePhotos = photoList;
+                    }
+                    this.data.batteryModelRemark = data.data['batteryModelRemark'];
+                    photos = data.data['batteryReplacePhotos'];
+                    if (null != photos && photos.length > 0) {
+                        let photoList = photos.split(",");
+                        this.data.batteryReplacePhotos = photoList;
+                    }
+                    this.data.sunPowerModelRemark = data.data['sunPowerModelRemark'];
+                    photos = data.data['sunPowerReplacePhotos'];
+                    if (null != photos && photos.length > 0) {
+                        let photoList = photos.split(",");
+                        this.data.sunPowerReplacePhotos = photoList;
+                    }
+                    this.data.batteryControlModelRemark = data.data['batteryControllerModelRemark'];
+                    photos = data.data['batteryControllerReplacePhotos'];
+                    if (null != photos && photos.length > 0) {
+                        let photoList = photos.split(",");
+                        this.data.batteryControllerReplacePhotos = photoList;
+                    }
+                    this.data.otherEquipmentModelRemark = data.data['otherEquipmentModelRemark'];
+                    photos = data.data['otherEquipmentReplacePhotos'];
+                    if (null != photos && photos.length > 0) {
+                        let photoList = photos.split(",");
+                        this.data.otherEquipmentReplacePhotos = photoList;
+                    }
+                    this.data.inspectionWorkPhotos = [];
+                    photos = data.data['inspectionWorkPhotos'];
+                    if (null != photos && photos.length > 0) {
+                        let photoList = photos.split(",");
+                        this.data.inspectionWorkPhotos = photoList;
+                    }
+                    this.data.inspectionRemainProblemsRemark = data.data['remainQuestion'];
+                }
+            })
+        },
+        getSiteKind() {
+            let htmltext = '';
+            if (this.data.isRain === 1) {
+                htmltext = htmltext + "雨量站";
+            }
+            if (this.data.isRiver == 1 || this.data.isRes == 1) {
+                if (htmltext.length > 0) {
+                    htmltext = htmltext + ' / ';
+                }
+                htmltext = htmltext + '水位站';
+            }
+            if (this.data.isGround == 1) {
+                if (htmltext.length > 0) {
+                    htmltext = htmltext + ' / ';
+                }
+                htmltext = htmltext + '墒情站';
+            }
+            return htmltext;
+        },
+        getAreaName() {
+            let htmltext = '';
+            if (this.data.adCity) {
+                htmltext = htmltext + this.data.adCity;
+            }
+            if (this.data.adDist) {
+                if (htmltext.length > 0) {
+                    htmltext = htmltext + ' / ';
+                }
+                htmltext = htmltext + this.data.adDist;
+            }
+            return htmltext;
+        },
+        getSiteCheckStatus() {
+            return this.data.siteCheckStatus.items[this.data.siteCheckStatus.current].dictValue;
+        },
+        getRainSiteCheckItems() {
+            let text = '';
+            for (let i = 0; i < this.data.rainSiteCheckItems.items.length; i++) {
+                if (this.data.rainSiteCheckItems.items[i].checked) {
+                    if (text.length > 0) {
+                        text = text + ' / ';
+                    }
+                    text = text + this.data.rainSiteCheckItems.items[i].dictValue;
+                }
+            }
+            return text;
+        },
+        getWaterSiteCheckItems() {
+            let text = '';
+            for (let i = 0; i < this.data.waterSiteCheckItems.items.length; i++) {
+                if (this.data.waterSiteCheckItems.items[i].checked) {
+                    if (text.length > 0) {
+                        text = text + ' / ';
+                    }
+                    text = text + this.data.waterSiteCheckItems.items[i].dictValue;
+                }
+            }
+            return text;
+        },
+        getGroundSiteCheckItems() {
+            let text = '';
+            for (let i = 0; i < this.data.groundSiteCheckItems.items.length; i++) {
+                if (this.data.groundSiteCheckItems.items[i].checked) {
+                    if (text.length > 0) {
+                        text = text + ' / ';
+                    }
+                    text = text + this.data.groundSiteCheckItems.items[i].dictValue;
+                }
+            }
+            return text;
+        },
+        getOthersEquipmentCheckItems() {
+            let text = '';
+            for (let i = 0; i < this.data.othersEquipmentCheckItems.items.length; i++) {
+                if (this.data.othersEquipmentCheckItems.items[i].checked) {
+                    if (text.length > 0) {
+                        text = text + ' / ';
+                    }
+                    text = text + this.data.othersEquipmentCheckItems.items[i].dictValue;
+                }
+            }
+            return text;
+        },
+    }
+}
+</script>
+
+
+<style lang="scss" scoped>
+.item-line-start {
+    display: flex;
+    flex-direction: row;
+    justify-content: flex-start;
+}
+
+.item-line-end {
+    display: flex;
+    flex-direction: row;
+    justify-content: flex-end;
+}
+
+.item-line-center {
+    display: flex;
+    flex-direction: row;
+    justify-content: center;
+    width: 100%;
+}
+
+.block-line {
+    border-bottom: 1px solid lightblue;
+}
+
+.item-title {
+    display: flex;
+    flex-direction: column;
+    ;
+    justify-content: center;
+    font-size: 1rem;
+}
+
+.item-content {
+    display: flex;
+    flex-direction: column;
+    ;
+    justify-content: center;
+    padding-left: 10px;
+    color: grey;
+    font-size: 1rem;
+}
+</style>
+

+ 384 - 0
src/views/business/inspection/nonetwork/index.vue

@@ -0,0 +1,384 @@
+<!--
+ * @Title: 
+ * @Description: 无信号上报列表
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+    <div>
+        <el-row>
+            <el-col :span="24">
+                <basic-container>
+                    <avue-crud :option="option" :table-loading="loading" :page.sync="page" :data="data" ref="crud"
+                        v-model="form" :permission="permissionList" @row-del="rowDel" @row-update="rowUpdate"
+                        @row-save="rowSave" @search-change="searchChange" @search-reset="searchReset"
+                        @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
+                        @refresh-change="refreshChange" @on-load="onLoad">
+                        <template slot-scope="{ row, index }" slot="menu">
+                            <el-button type="text" size="small" @click="openReportDetail(row)">填报详情
+                            </el-button>
+                            <el-button
+                                v-if="permission.inspection_nonetwork_photo_submit_close == 1 && row.photoSupplementSubmitStatus == 0"
+                                type="text" size="small" @click="toPhotoSubmit(row)">图片补交
+                            </el-button>
+                            <el-button
+                                v-if="permission.inspection_nonetwork_photo_submit_close == 1 && row.photoSupplementSubmitStatus === 0"
+                                type="text" size="small" style="color:lightcoral" @click="closePhotoSubmit(row)">关闭问题
+                            </el-button>
+                        </template>
+                    </avue-crud>
+                </basic-container>
+            </el-col>
+        </el-row>
+        <el-drawer title="巡检填报信息" :visible.sync="reportDialog" v-if="reportDialog" :size="drawerSize" :direction="direction"
+            :close-on-click-modal="false" append-to-body>
+            <inspectionreportdetail :id="id" ref="inspectionreportdetail"></inspectionreportdetail>
+        </el-drawer>
+        <el-drawer title="图片补交操作" :visible.sync="inspectionphotosubmitDialog" v-if="inspectionphotosubmitDialog"
+            :size="drawerSize" :direction="direction" :close-on-click-modal="false" append-to-body>
+            <inspectionphotosubmit :id="id" ref="inspectionphotosubmit" :visible.sync="inspectionphotosubmitDialog">
+            </inspectionphotosubmit>
+        </el-drawer>
+    </div>
+</template>
+<script>
+
+import {
+    getNoNetworkSignalReportPage,
+} from "@/api/business/inspection/inspection.js";
+import { closeNonetworksignalPhotoSubmit } from "@/api/business/inspection/inspectionreport.js";
+import { mapGetters } from "vuex";
+import inspectionreportdetail from "../inspectionreportdetail.vue";
+import inspectionphotosubmit from "./inspectionphotosubmit.vue";
+export default {
+    components: {
+        getNoNetworkSignalReportPage,
+        inspectionreportdetail,
+        closeNonetworksignalPhotoSubmit,
+        inspectionphotosubmit
+    },
+    data() {
+        return {
+            id: '',
+            drawerSize: '50%',
+            reportDialog: false,
+            inspectionphotosubmitDialog: false,
+            form: {},
+            selectionList: [],
+            query: {},
+            loading: true,
+            page: {
+                pageSize: 10,
+                currentPage: 1,
+                total: 0,
+            },
+            option: {
+                labelWidth: 120,
+                viewLabelWidth: 100,
+                searchlabelWidth: 100,
+                height: "auto",
+                calcHeight: 80,
+                align: "center",
+                headerAlign: "center",
+                tip: false,
+                simplePage: true,
+                searchShow: true,
+                searchMenuSpan: 6,
+                addBtn: false,
+                border: true,
+                index: true,
+                editBtn: false,
+                delBtn: false,
+                viewBtn: false,
+                menuWidth: 200,
+                dialogType: "drawer",
+                columnBtn: false,
+                dialogClickModal: false,
+                column: [
+                    {
+                        label: "测站名称",
+                        prop: "rtuName",
+                        span: 12,
+                        search: true,
+                        searchSpan: 4,
+                        html: true,
+                        formatter: (val) => {
+                            if (val.rtuName) {
+                                return '<b>' + val.rtuName + '</b>/' + '<b style="color:grey">' + val.rtuCode + '</b>'
+                            } else {
+                                return '<b>' + val.rtuName + '</b>'
+                            }
+                        }
+                    },
+                    {
+                        label: "测站编码",
+                        prop: "rtuCode",
+                        span: 12,
+                        search: true,
+                        searchSpan: 4,
+                        hide: true,
+                    },
+                    {
+                        label: "行政区",
+                        prop: "adCity",
+                        span: 12,
+                        editDisplay: false,
+                        addDisplay: false,
+                        html: true,
+                        formatter: (val) => {
+                            if (val.adCity && val.adDist) {
+                                return '<b>' + val.adCity + '</b>/' + '<b>' + val.adDist + '</b>'
+                            } else {
+                                return '<b>' + val.adCity + '</b>'
+                            }
+                        }
+                    },
+                    {
+                        label: "巡检年度",
+                        prop: "inspectionYear",
+                        span: 24,
+                        hide: true,
+                        search: true,
+                        searchSpan: 4,
+                        type: "year",
+                        rules: [{
+                            required: true,
+                        }],
+                        format: 'yyyy年',
+                        valueFormat: 'yyyy-MM-dd',
+                    },
+                    {
+                        search: true,
+                        label: "汛期",
+                        prop: "rainSeasonKind",
+
+                        type: 'select',
+                        span: 24,
+                        searchSpan: 4,
+                        props: {
+                            label: 'dictValue',
+                            value: 'id'
+                        },
+                        dicData: [{
+                            dictValue: '汛前巡检',
+                            id: 1,
+                        },
+                        {
+                            dictValue: '汛中(一)巡检',
+                            id: 2,
+                        },
+                        {
+                            dictValue: '汛中(二)巡检',
+                            id: 3,
+                        }],
+                    },
+                    {
+                        label: "填报总结说明",
+                        prop: "reportDesc",
+                        span: 12,
+                        overHidden: true,
+                    },
+                    {
+                        label: "填报人",
+                        prop: "servicePersonName",
+                        span: 12,
+                        width: 120,
+                    },
+                    {
+                        label: "填报时间",
+                        prop: "createTime",
+                        span: 12,
+                        width: 140,
+                    },
+                    {
+                        label: "图片提交状态",
+                        prop: "photoSupplementSubmitStatus",
+                        span: 12,
+                        slot: true,
+                        width: 120,
+                        html: true,
+                        formatter: (val) => {
+                            if (val.photoSupplementSubmitStatus == 0) {
+                                return '<b style="color:red">图片补交中</b>'
+                            } else if (val.photoSupplementSubmitStatus == 1) {
+                                return '<b style="color:blue">图片补交完成</b>'
+                            }
+                        }
+                    },
+                ],
+            },
+            data: [],
+        };
+    },
+    computed: {
+        ...mapGetters(["userInfo", "permission"]),
+        permissionList() {
+            return {
+                photoSubmitCloseBtn: this.vaildData(this.permission.inspection_nonetwork_photo_submit_close, false),
+            };
+        },
+    },
+    created() {
+
+    },
+    watch: {
+        // 'editForm.planId': {
+        //     handler(val) {
+        //         if (val != '' && val != undefined && val != null) {
+        //             this.planId = val;
+        //              this.$message.success(this.planId)
+        //         }
+        //     },
+        //     immediate: true
+        // }
+    },
+    methods: {
+        toOss(path) {
+            console.log("oss " + path);
+            return this.website.ossServer + path;
+        },
+        toPhotoSubmit(item) {
+            console.log(JSON.stringify(item));
+            this.inspectionphotosubmitDialog = true;
+            this.id = item.id;
+            this.$nextTick(() => {
+                this.$refs["inspectionphotosubmit"].init();
+            });
+        },
+        closePhotoSubmit(item) {
+            console.log(JSON.stringify(item));
+            this.$confirm("确认完成图片补交操作?", "提示", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning",
+            })
+                .then(() => {
+                    closeNonetworksignalPhotoSubmit({ id: item.id }).then((res) => {
+                        if (res.data.code == 200) {
+                            this.$message({
+                                type: "success",
+                                message: "操作成功",
+                            });
+                            this.refreshChange();
+                        }
+                    });
+
+                })
+                .catch(() => { });
+
+        },
+        openReportDetail(item) {
+            this.reportDialog = true;
+            this.id = item.id;
+            this.$nextTick(() => {
+                this.$refs["inspectionreportdetail"].init();
+            });
+        },
+        searchReset() {
+            this.query = {};
+            this.query['adCode'] = this.treeCode;
+            this.page.currentPage = 1;
+            this.onLoad(this.page);
+        },
+        searchChange(params, done) {
+            console.log(JSON.stringify(params))
+            this.query = params;
+            this.page.currentPage = 1;
+            this.onLoad(this.page);
+            done();
+        },
+        selectionChange(list) {
+            this.selectionList = list;
+        },
+        selectionClear() {
+            this.selectionList = [];
+            this.$refs.crud.toggleSelection();
+        },
+        beforeOpen(done, type) {
+            if (["edit", "view"].includes(type)) {
+                // getDetail(this.form.id).then((res) => {
+                //     this.form = res.data.data;
+                // });
+            }
+            done();
+        },
+        currentChange(currentPage) {
+            this.page.currentPage = currentPage;
+        },
+        sizeChange(pageSize) {
+            this.page.pageSize = pageSize;
+        },
+        refreshChange() {
+            var params = {};
+            this.onLoad(this.page, params);
+        },
+        onLoad(page, params = {}) {
+            this.loading = true;
+            getNoNetworkSignalReportPage(
+                page.currentPage,
+                page.pageSize,
+                Object.assign(params, this.query)
+            ).then((res) => {
+                const data = res.data.data;
+                this.page.total = data.total;
+                this.data = data.records;
+                this.loading = false;
+                this.selectionClear();
+            });
+        },
+    },
+};
+</script>
+
+<style  lang="scss" scoped>
+.common-dialog {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    overflow: hidden;
+
+    .el-dialog {
+        margin: 0 auto !important;
+        position: relative;
+        overflow: hidden;
+
+        .el-dialog__header {
+            position: absolute;
+            left: 0;
+            right: 0;
+            bottom: 0;
+            width: 100%;
+            height: 60px;
+            z-index: 1;
+        }
+
+        .el-dialog__body {
+            position: relative;
+            left: 0;
+            top: 60px;
+            bottom: 0;
+            right: 0;
+            padding: 0;
+            width: 100%;
+            overflow: hidden;
+            overflow-y: auto;
+            max-height: 90vh;
+            padding-top: 80px;
+            padding-bottom: 100px;
+            z-index: 1;
+        }
+
+        .el-dialog__footer {
+            position: absolute;
+            left: 0;
+            right: 0;
+            bottom: 0;
+            width: 100%;
+            height: 80px;
+            z-index: 1;
+        }
+    }
+}
+</style>

+ 756 - 0
src/views/business/inspection/nonetwork/inspectionphotosubmit.vue

@@ -0,0 +1,756 @@
+<!--
+ * @Title: 
+ * @Description: 巡检填报详情
+ * @Author: swp
+ * @Date: 2022-08-24 10:49:21
+ * @LastEditors: 
+ * @LastEditTime: 2022-08-24 10:49:21
+-->
+<template>
+    <el-row>
+        <el-col :span="24">
+            <basic-container>
+                <avue-form :option="option" v-model="dataForm" @submit="submitPhoto"></avue-form>
+            </basic-container>
+        </el-col>
+    </el-row>
+</template>
+
+<script>
+
+import {
+    getDetail,
+} from "@/api/business/inspection/inspectionreport.js";
+import { nonetworksignalPhotoUpdate } from "@/api/business/inspection/inspectionreport.js";
+let putPhotoAction = "/api/galaxy-business/equipment/inspection/report/nonetworksignal/putPhoto";
+export default {
+    components: {
+
+    },
+    props: {
+        id: {
+            type: [Number],
+            required: true
+        },
+    },
+    name: 'inspectionphotosubmit',
+    data() {
+        return {
+            dataForm: {
+                siteCheckPhotos: [],
+                rainSiteCheckPhotos: [],
+                waterSiteCheckPhotos: [],
+                groundSiteCheckPhotos: [],
+                othersEquipmentCheckPhotos: [],
+                rtuReplacePhotos: [],
+                rainSensorReplacePhotos: [],
+                waterSensorReplacePhotos: [],
+                groundSensorReplacePhotos: [],
+                batteryReplacePhotos: [],
+                sunPowerReplacePhotos: [],
+                batteryControlReplacePhotos: [],
+                otherEquipmentReplacePhotos: [],
+                inspectionWorkPhotos: [],
+            },
+            option: {
+                column: [
+                    {
+                        label: '站点状态检查补交照片',
+                        prop: 'siteCheckPhotos',
+                        listType: 'picture-card',
+                        type: 'upload',
+                        span: 24,
+                        action: putPhotoAction,
+                        dataType: 'object',
+                        props: {
+                            label: 'name',
+                            value: 'url'
+                        },
+                        propsHttp: {
+                            url: 'name',
+                            name: 'originalName',
+                            home: this.website.ossServer,
+                            res: 'data',
+                        },
+                    },
+                    {
+                        label: '雨量站检查补交照片',
+                        prop: 'rainSiteCheckPhotos',
+                        listType: 'picture-card',
+                        type: 'upload',
+                        span: 24,
+                        action: putPhotoAction,
+                        dataType: 'object',
+                        props: {
+                            label: 'name',
+                            value: 'url'
+                        },
+                        propsHttp: {
+                            url: 'name',
+                            name: 'originalName',
+                            home: this.website.ossServer,
+                            res: 'data',
+                        },
+                    },
+                    {
+                        label: '水位站检查补交照片',
+                        prop: 'waterSiteCheckPhotos',
+                        listType: 'picture-card',
+                        type: 'upload',
+                        span: 24,
+                        action: putPhotoAction,
+                        dataType: 'object',
+                        props: {
+                            label: 'name',
+                            value: 'url'
+                        },
+                        propsHttp: {
+                            url: 'name',
+                            name: 'originalName',
+                            home: this.website.ossServer,
+                            res: 'data',
+                        },
+                    },
+                    {
+                        label: '墒情站检查补交照片',
+                        prop: 'groundSiteCheckPhotos',
+                        listType: 'picture-card',
+                        type: 'upload',
+                        span: 24,
+                        action: putPhotoAction,
+                        dataType: 'object',
+                        props: {
+                            label: 'name',
+                            value: 'url'
+                        },
+                        propsHttp: {
+                            url: 'name',
+                            name: 'originalName',
+                            home: this.website.ossServer,
+                            res: 'data',
+                        },
+                    },
+                    {
+                        label: '其他设备检查补交照片',
+                        prop: 'othersEquipmentCheckPhotos',
+                        listType: 'picture-card',
+                        type: 'upload',
+                        span: 24,
+                        action: putPhotoAction,
+                        dataType: 'object',
+                        props: {
+                            label: 'name',
+                            value: 'url'
+                        },
+                        propsHttp: {
+                            url: 'name',
+                            name: 'originalName',
+                            home: this.website.ossServer,
+                            res: 'data',
+                        },
+                    },
+                    {
+                        label: 'RTU更换补交照片',
+                        prop: 'rtuReplacePhotos',
+                        listType: 'picture-card',
+                        type: 'upload',
+                        span: 24,
+                        action: putPhotoAction,
+                        dataType: 'object',
+                        props: {
+                            label: 'name',
+                            value: 'url'
+                        },
+                        propsHttp: {
+                            url: 'name',
+                            name: 'originalName',
+                            home: this.website.ossServer,
+                            res: 'data',
+                        },
+                    },
+                    {
+                        label: '雨量计更换补交照片',
+                        prop: 'rainSensorReplacePhotos',
+                        listType: 'picture-card',
+                        type: 'upload',
+                        span: 24,
+                        action: putPhotoAction,
+                        dataType: 'object',
+                        props: {
+                            label: 'name',
+                            value: 'url'
+                        },
+                        propsHttp: {
+                            url: 'name',
+                            name: 'originalName',
+                            home: this.website.ossServer,
+                            res: 'data',
+                        },
+                    },
+                    {
+                        label: '水位计更换补交照片',
+                        prop: 'waterSensorReplacePhotos',
+                        listType: 'picture-card',
+                        type: 'upload',
+                        span: 24,
+                        action: putPhotoAction,
+                        dataType: 'object',
+                        props: {
+                            label: 'name',
+                            value: 'url'
+                        },
+                        propsHttp: {
+                            url: 'name',
+                            name: 'originalName',
+                            home: this.website.ossServer,
+                            res: 'data',
+                        },
+                    },
+                    {
+                        label: '墒情计更换补交照片',
+                        prop: 'groundSensorReplacePhotos',
+                        listType: 'picture-card',
+                        type: 'upload',
+                        span: 24,
+                        action: putPhotoAction,
+                        dataType: 'object',
+                        props: {
+                            label: 'name',
+                            value: 'url'
+                        },
+                        propsHttp: {
+                            url: 'name',
+                            name: 'originalName',
+                            home: this.website.ossServer,
+                            res: 'data',
+                        },
+                    },
+                    {
+                        label: '蓄电池更换补交照片',
+                        prop: 'batteryReplacePhotos',
+                        listType: 'picture-card',
+                        type: 'upload',
+                        span: 24,
+                        action: putPhotoAction,
+                        dataType: 'object',
+                        props: {
+                            label: 'name',
+                            value: 'url'
+                        },
+                        propsHttp: {
+                            url: 'name',
+                            name: 'originalName',
+                            home: this.website.ossServer,
+                            res: 'data',
+                        },
+                    },
+                    {
+                        label: '太阳能板更换补交照片',
+                        prop: 'sunPowerReplacePhotos',
+                        listType: 'picture-card',
+                        type: 'upload',
+                        span: 24,
+                        action: putPhotoAction,
+                        dataType: 'object',
+                        props: {
+                            label: 'name',
+                            value: 'url'
+                        },
+                        propsHttp: {
+                            url: 'name',
+                            name: 'originalName',
+                            home: this.website.ossServer,
+                            res: 'data',
+                        },
+                    },
+                    {
+                        label: '蓄电池控制器更换补交照片',
+                        prop: 'batteryControllerReplacePhotos',
+                        listType: 'picture-card',
+                        type: 'upload',
+                        span: 24,
+                        action: putPhotoAction,
+                        dataType: 'object',
+                        props: {
+                            label: 'name',
+                            value: 'url'
+                        },
+                        propsHttp: {
+                            url: 'name',
+                            name: 'originalName',
+                            home: this.website.ossServer,
+                            res: 'data',
+                        },
+                    },
+                    {
+                        label: '其他设备更换补交照片',
+                        prop: 'otherEquipmentReplacePhotos',
+                        listType: 'picture-card',
+                        type: 'upload',
+                        span: 24,
+                        action: putPhotoAction,
+                        dataType: 'object',
+                        props: {
+                            label: 'name',
+                            value: 'url'
+                        },
+                        propsHttp: {
+                            url: 'name',
+                            name: 'originalName',
+                            home: this.website.ossServer,
+                            res: 'data',
+                        },
+                    },
+                    {
+                        label: '工作留存补交照片',
+                        prop: 'inspectionWorkPhotos',
+                        listType: 'picture-card',
+                        type: 'upload',
+                        span: 24,
+                        action: putPhotoAction,
+                        dataType: 'object',
+                        props: {
+                            label: 'name',
+                            value: 'url'
+                        },
+                        propsHttp: {
+                            url: 'name',
+                            name: 'originalName',
+                            home: this.website.ossServer,
+                            res: 'data',
+                        },
+
+                    },
+                ]
+            },
+        }
+    },
+    created() {
+        // this.init();
+    },
+    methods: {
+        toOss(path) {
+            console.log("oss " + this.website.ossServer + path);
+            // return "/oss/galaxy/" + path;
+            return this.website.ossServer + path;
+        },
+        init() {
+            getDetail(this.id).then(res => {
+                const data = res.data;
+                console.log(JSON.stringify(data));
+                if (data.success) {
+
+
+
+                    let siteCheckPhotos = [];
+                    let photos = data.data['siteCheckPhotos'];
+                    if (null != photos && photos.length > 0) {
+                        let photoList = photos.split(",");
+                        for (let i = 0; i < photoList.length; i++) {
+                            let p = {};
+                            p['url'] = photoList[i];
+                            p['name'] = photoList[i];
+                            siteCheckPhotos.push(p);
+                        }
+                        this.dataForm.siteCheckPhotos = siteCheckPhotos;
+                    }
+
+
+
+                    let rainSiteCheckPhotos = [];
+                    photos = data.data['rainSiteCheckPhotos'];
+                    if (null != photos && photos.length > 0) {
+                        let photoList = photos.split(",");
+                        for (let i = 0; i < photoList.length; i++) {
+                            let p = {};
+                            p['url'] = photoList[i];
+                            p['name'] = photoList[i];
+                            rainSiteCheckPhotos.push(p);
+                        }
+                        this.dataForm.rainSiteCheckPhotos = rainSiteCheckPhotos;
+                    }
+
+                    let waterSiteCheckPhotos = [];
+                    photos = data.data['waterSiteCheckPhotos'];
+                    if (null != photos && photos.length > 0) {
+                        let photoList = photos.split(",");
+                        for (let i = 0; i < photoList.length; i++) {
+                            let p = {};
+                            p['url'] = photoList[i];
+                            p['name'] = photoList[i];
+                            waterSiteCheckPhotos.push(p);
+                        }
+                        this.dataForm.waterSiteCheckPhotos = rainSiteCheckPhotos;
+                    }
+
+                    let groundSiteCheckPhotos = [];
+                    photos = data.data['groundSiteCheckPhotos'];
+                    if (null != photos && photos.length > 0) {
+                        let photoList = photos.split(",");
+                        for (let i = 0; i < photoList.length; i++) {
+                            let p = {};
+                            p['url'] = photoList[i];
+                            p['name'] = photoList[i];
+                            groundSiteCheckPhotos.push(p);
+                        }
+                        this.dataForm.groundSiteCheckPhotos = groundSiteCheckPhotos;
+                    }
+
+                    let othersEquipmentCheckPhotos = [];
+                    photos = data.data['otherEquipmentCheckPhotos'];
+                    console.log(JSON.stringify(photos))
+                    if (null != photos && photos.length > 0) {
+                        let photoList = photos.split(",");
+                        for (let i = 0; i < photoList.length; i++) {
+                            let p = {};
+                            p['url'] = photoList[i];
+                            p['name'] = photoList[i];
+                            othersEquipmentCheckPhotos.push(p);
+                        }
+                        console.log("ppp" + JSON.stringify(othersEquipmentCheckPhotos))
+                        this.dataForm.othersEquipmentCheckPhotos = othersEquipmentCheckPhotos;
+                    }
+                    let rtuReplacePhotos = [];
+                    photos = data.data['rtuReplacePhotos'];
+                    if (null != photos && photos.length > 0) {
+                        let photoList = photos.split(",");
+                        for (let i = 0; i < photoList.length; i++) {
+                            let p = {};
+                            p['url'] = photoList[i];
+                            p['name'] = photoList[i];
+                            rtuReplacePhotos.push(p);
+                        }
+                        this.dataForm.rtuReplacePhotos = rtuReplacePhotos;
+                    }
+                    let rainSensorReplacePhotos = [];
+                    photos = data.data['rainSensorReplacePhotos'];
+                    if (null != photos && photos.length > 0) {
+                        let photoList = photos.split(",");
+                        for (let i = 0; i < photoList.length; i++) {
+                            let p = {};
+                            p['url'] = photoList[i];
+                            p['name'] = photoList[i];
+                            rainSensorReplacePhotos.push(p);
+                        }
+                        this.dataForm.rainSensorReplacePhotos = rainSensorReplacePhotos;
+                    }
+                    let waterSensorReplacePhotos = [];
+                    photos = data.data['waterSensorReplacePhotos'];
+                    if (null != photos && photos.length > 0) {
+                        let photoList = photos.split(",");
+                        for (let i = 0; i < photoList.length; i++) {
+                            let p = {};
+                            p['url'] = photoList[i];
+                            p['name'] = photoList[i];
+                            waterSensorReplacePhotos.push(p);
+                        }
+                        this.dataForm.waterSensorReplacePhotos = waterSensorReplacePhotos;
+                    }
+                    let groundSensorReplacePhotos = [];
+                    photos = data.data['groundSensorReplacePhotos'];
+                    if (null != photos && photos.length > 0) {
+                        let photoList = photos.split(",");
+                        for (let i = 0; i < photoList.length; i++) {
+                            let p = {};
+                            p['url'] = photoList[i];
+                            p['name'] = photoList[i];
+                            groundSensorReplacePhotos.push(p);
+                        }
+                        this.dataForm.groundSensorReplacePhotos = groundSensorReplacePhotos;
+                    }
+                    let batteryReplacePhotos = [];
+                    photos = data.data['batteryReplacePhotos'];
+                    if (null != photos && photos.length > 0) {
+                        let photoList = photos.split(",");
+                        for (let i = 0; i < photoList.length; i++) {
+                            let p = {};
+                            p['url'] = photoList[i];
+                            p['name'] = photoList[i];
+                            batteryReplacePhotos.push(p);
+                        }
+                        this.dataForm.batteryReplacePhotos = batteryReplacePhotos;
+                    }
+                    let sunPowerReplacePhotos = [];
+                    photos = data.data['sunPowerReplacePhotos'];
+                    if (null != photos && photos.length > 0) {
+                        let photoList = photos.split(",");
+                        for (let i = 0; i < photoList.length; i++) {
+                            let p = {};
+                            p['url'] = photoList[i];
+                            p['name'] = photoList[i];
+                            sunPowerReplacePhotos.push(p);
+                        }
+                        this.dataForm.sunPowerReplacePhotos = sunPowerReplacePhotos;
+                    }
+                    let batteryControllerReplacePhotos = [];
+                    photos = data.data['batteryControllerReplacePhotos'];
+                    if (null != photos && photos.length > 0) {
+                        let photoList = photos.split(",");
+                        for (let i = 0; i < photoList.length; i++) {
+                            let p = {};
+                            p['url'] = photoList[i];
+                            p['name'] = photoList[i];
+                            batteryControllerReplacePhotos.push(p);
+                        }
+                        this.dataForm.batteryControllerReplacePhotos = batteryControllerReplacePhotos;
+                    }
+                    let otherEquipmentReplacePhotos = [];
+                    photos = data.data['otherEquipmentReplacePhotos'];
+                    if (null != photos && photos.length > 0) {
+                        let photoList = photos.split(",");
+                        for (let i = 0; i < photoList.length; i++) {
+                            let p = {};
+                            p['url'] = photoList[i];
+                            p['name'] = photoList[i];
+                            otherEquipmentReplacePhotos.push(p);
+                        }
+                        this.dataForm.otherEquipmentReplacePhotos = otherEquipmentReplacePhotos;
+                    }
+                    let inspectionWorkPhotos = [];
+                    photos = data.data['inspectionWorkPhotos'];
+                    if (null != photos && photos.length > 0) {
+                        let photoList = photos.split(",");
+                        for (let i = 0; i < photoList.length; i++) {
+                            let p = {};
+                            p['url'] = photoList[i];
+                            p['name'] = photoList[i];
+                            inspectionWorkPhotos.push(p);
+                        }
+                        this.dataForm.inspectionWorkPhotos = inspectionWorkPhotos;
+                    }
+
+                    console.log(JSON.stringify(this.dataForm))
+
+                }
+            })
+        },
+        submitPhoto(form, done) {
+            let postformdata = {};
+            postformdata['id'] = this.id;
+
+            if (form.siteCheckPhotos.length > 0) {
+                let photos = '';
+                for (let i = 0; i < form.siteCheckPhotos.length; i++) {
+                    if (photos.length > 0) {
+                        photos = photos + ',';
+                    }
+                    photos = photos + form.siteCheckPhotos[i].url;
+                }
+                postformdata['siteCheckPhotos'] = photos;
+            }
+
+
+            if (form.rainSiteCheckPhotos.length > 0) {
+                let photos = '';
+                for (let i = 0; i < form.rainSiteCheckPhotos.length; i++) {
+                    if (photos.length > 0) {
+                        photos = photos + ',';
+                    }
+                    photos = photos + form.rainSiteCheckPhotos[i].url;
+                }
+                postformdata['rainSiteCheckPhotos'] = photos;
+            }
+
+
+
+            if (form.waterSiteCheckPhotos.length > 0) {
+                let photos = '';
+                for (let i = 0; i < form.waterSiteCheckPhotos.length; i++) {
+                    if (photos.length > 0) {
+                        photos = photos + ',';
+                    }
+                    photos = photos + form.waterSiteCheckPhotos[i].url;
+                }
+                postformdata['waterSiteCheckPhotos'] = photos;
+            }
+
+
+            if (form.groundSiteCheckPhotos.length > 0) {
+                let photos = '';
+                for (let i = 0; i < form.groundSiteCheckPhotos.length; i++) {
+                    if (photos.length > 0) {
+                        photos = photos + ',';
+                    }
+                    photos = photos + form.groundSiteCheckPhotos[i].url;
+                }
+                postformdata['groundSiteCheckPhotos'] = photos;
+            }
+
+            if (form.othersEquipmentCheckPhotos.length > 0) {
+                let photos = '';
+                for (let i = 0; i < form.othersEquipmentCheckPhotos.length; i++) {
+                    if (photos.length > 0) {
+                        photos = photos + ',';
+                    }
+                    photos = photos + form.othersEquipmentCheckPhotos[i].url;
+                }
+                postformdata['otherEquipmentCheckPhotos'] = photos;
+            }
+
+            if (form.rtuReplacePhotos.length > 0) {
+                let photos = '';
+                for (let i = 0; i < form.rtuReplacePhotos.length; i++) {
+                    if (photos.length > 0) {
+                        photos = photos + ',';
+                    }
+                    photos = photos + form.rtuReplacePhotos[i].url;
+                }
+                postformdata['rtuReplacePhotos'] = photos;
+            }
+
+
+            if (form.rainSensorReplacePhotos.length > 0) {
+                let photos = '';
+                for (let i = 0; i < form.rainSensorReplacePhotos.length; i++) {
+                    if (photos.length > 0) {
+                        photos = photos + ',';
+                    }
+                    photos = photos + form.rainSensorReplacePhotos[i].url;
+                }
+                postformdata['rainSensorReplacePhotos'] = photos;
+            }
+
+            if (form.waterSensorReplacePhotos.length > 0) {
+                let photos = '';
+                for (let i = 0; i < form.waterSensorReplacePhotos.length; i++) {
+                    if (photos.length > 0) {
+                        photos = photos + ',';
+                    }
+                    photos = photos + form.waterSensorReplacePhotos[i].url;
+                }
+                postformdata['waterSensorReplacePhotos'] = photos;
+            }
+
+
+            if (form.groundSensorReplacePhotos.length > 0) {
+                let photos = '';
+                for (let i = 0; i < form.groundSensorReplacePhotos.length; i++) {
+                    if (photos.length > 0) {
+                        photos = photos + ',';
+                    }
+                    photos = photos + form.groundSensorReplacePhotos[i].url;
+                }
+                postformdata['groundSensorReplacePhotos'] = photos;
+            }
+
+
+
+            if (form.batteryReplacePhotos.length > 0) {
+                let photos = '';
+                for (let i = 0; i < form.batteryReplacePhotos.length; i++) {
+                    if (photos.length > 0) {
+                        photos = photos + ',';
+                    }
+                    photos = photos + form.batteryReplacePhotos[i].url;
+                }
+                postformdata['batteryReplacePhotos'] = photos;
+            }
+
+            if (form.sunPowerReplacePhotos.length > 0) {
+                let photos = '';
+                for (let i = 0; i < form.sunPowerReplacePhotos.length; i++) {
+                    if (photos.length > 0) {
+                        photos = photos + ',';
+                    }
+                    photos = photos + form.sunPowerReplacePhotos[i].url;
+                }
+                postformdata['sunPowerReplacePhotos'] = photos;
+            }
+
+
+
+            if (form.batteryControlReplacePhotos.length > 0) {
+                let photos = '';
+                for (let i = 0; i < form.batteryControlReplacePhotos.length; i++) {
+                    if (photos.length > 0) {
+                        photos = photos + ',';
+                    }
+                    photos = photos + form.batteryControlReplacePhotos[i].url;
+                }
+                postformdata['batteryControllerReplacePhotos'] = photos;
+            }
+
+            if (form.otherEquipmentReplacePhotos.length > 0) {
+                let photos = '';
+                for (let i = 0; i < form.otherEquipmentReplacePhotos.length; i++) {
+                    if (photos.length > 0) {
+                        photos = photos + ',';
+                    }
+                    photos = photos + form.otherEquipmentReplacePhotos[i].url;
+                }
+                postformdata['otherEquipmentReplacePhotos'] = photos;
+            }
+
+
+            if (form.inspectionWorkPhotos.length > 0) {
+                let photos = '';
+                for (let i = 0; i < form.inspectionWorkPhotos.length; i++) {
+                    if (photos.length > 0) {
+                        photos = photos + ',';
+                    }
+                    photos = photos + form.inspectionWorkPhotos[i].url;
+                }
+                postformdata['inspectionWorkPhotos'] = photos;
+            }
+
+            nonetworksignalPhotoUpdate(postformdata).then((res) => {
+                if (res.data.code == 200) {
+                    this.$message({
+                        type: "success",
+                        message: "操作成功",
+                    });
+
+                    done();
+
+                    this.$emit("update:visible", false);
+                }
+            });
+        },
+    }
+}
+</script>
+
+
+<style lang="scss" scoped>
+.item-line-start {
+    display: flex;
+    flex-direction: row;
+    justify-content: flex-start;
+}
+
+.item-line-end {
+    display: flex;
+    flex-direction: row;
+    justify-content: flex-end;
+}
+
+.item-line-center {
+    display: flex;
+    flex-direction: row;
+    justify-content: center;
+    width: 100%;
+}
+
+.block-line {
+    border-bottom: 1px solid lightblue;
+}
+
+.item-title {
+    display: flex;
+    flex-direction: column;
+    ;
+    justify-content: center;
+    font-size: 1rem;
+}
+
+.item-content {
+    display: flex;
+    flex-direction: column;
+    ;
+    justify-content: center;
+    padding-left: 10px;
+    color: grey;
+    font-size: 1rem;
+}
+</style>
+

Некоторые файлы не были показаны из-за большого количества измененных файлов