Browse Source

合并

master_tdsql
zhuyulei 1 year ago
parent
commit
0552d7b66f
  1. 9
      package.json
  2. 226
      src/api/management/dike.js
  3. 5
      src/api/management/index.js
  4. 1
      src/api/management/reservoir.js
  5. 218
      src/api/management/sluice.js
  6. 1
      src/assets/icons/svg/icon-clear.svg
  7. 1
      src/assets/icons/svg/icon-gcxc.svg
  8. 1
      src/assets/icons/svg/icon-line.svg
  9. 1
      src/assets/icons/svg/icon-wxjhgl.svg
  10. 1
      src/assets/icons/svg/icon-wxjl.svg
  11. 1
      src/assets/icons/svg/icon-wxyh.svg
  12. 1
      src/assets/icons/svg/icon-xcjhgl.svg
  13. 1
      src/assets/icons/svg/icon-xcjl.svg
  14. 1
      src/assets/icons/svg/icon-xcxmgl.svg
  15. 1
      src/assets/icons/svg/icon-yxgh.svg
  16. BIN
      src/assets/image/bottom-point.png
  17. BIN
      src/assets/image/map-point.png
  18. 50
      src/layout/components/Navbar.vue
  19. 9
      src/store/index.js
  20. 78
      src/store/modules/permission.js
  21. 19
      src/store/modules/topTab.js
  22. 3
      src/views/runManage/engineering/index.vue
  23. 399
      src/views/runManage/engineering/inspectionItems/Dike.vue
  24. 22
      src/views/runManage/engineering/inspectionItems/Reservoir.vue
  25. 399
      src/views/runManage/engineering/inspectionItems/Sluice.vue
  26. 29
      src/views/runManage/engineering/inspectionItems/index.vue
  27. 397
      src/views/runManage/engineering/inspectionPlan/Dike.vue
  28. 22
      src/views/runManage/engineering/inspectionPlan/Reservoir.vue
  29. 399
      src/views/runManage/engineering/inspectionPlan/Sluice.vue
  30. 29
      src/views/runManage/engineering/inspectionPlan/index.vue
  31. 170
      src/views/runManage/engineering/inspectionRecords/Dike.vue
  32. 22
      src/views/runManage/engineering/inspectionRecords/Reservoir.vue
  33. 170
      src/views/runManage/engineering/inspectionRecords/Sluice.vue
  34. 29
      src/views/runManage/engineering/inspectionRecords/index.vue
  35. 65
      src/views/runManage/engineering/patrolRouteSettings/Dike.vue
  36. 22
      src/views/runManage/engineering/patrolRouteSettings/Reservoir.vue
  37. 65
      src/views/runManage/engineering/patrolRouteSettings/Sluice.vue
  38. 414
      src/views/runManage/engineering/patrolRouteSettings/components/Drawer.vue
  39. 365
      src/views/runManage/engineering/patrolRouteSettings/components/GaoDeMap.vue
  40. 34
      src/views/runManage/engineering/patrolRouteSettings/index.vue
  41. 3
      src/views/runManage/maintenance/index.vue
  42. 380
      src/views/runManage/maintenance/maintenancePlan/Dike.vue
  43. 22
      src/views/runManage/maintenance/maintenancePlan/Reservoir.vue
  44. 376
      src/views/runManage/maintenance/maintenancePlan/Sluice.vue
  45. 29
      src/views/runManage/maintenance/maintenancePlan/index.vue
  46. 507
      src/views/runManage/maintenance/maintenanceRecords/Dike.vue
  47. 22
      src/views/runManage/maintenance/maintenanceRecords/Reservoir.vue
  48. 507
      src/views/runManage/maintenance/maintenanceRecords/Sluice.vue
  49. 29
      src/views/runManage/maintenance/maintenanceRecords/index.vue
  50. 3
      vue.config.js

9
package.json

@ -40,11 +40,12 @@
"url": "https://gitee.com/y_project/RuoYi-Vue.git"
},
"dependencies": {
"@amap/amap-jsapi-loader": "^1.0.1",
"@antv/x6": "^1.28.1",
"@riophae/vue-treeselect": "0.4.0",
"axios": "0.18.1",
"clipboard": "2.0.4",
"core-js": "3.6.5",
"core-js": "3.33.2",
"d3": "^5.0.0",
"d3-flextree": "^2.1.2",
"echarts": "4.2.1",
@ -60,11 +61,11 @@
"less": "^4.1.1",
"less-loader": "^7.0.0",
"node-jsencrypt": "^1.0.0",
"node-sass": "^4.12.0",
"node-sass": "^6.0.1",
"normalize.css": "7.0.0",
"nprogress": "0.2.0",
"path-to-regexp": "2.4.0",
"pdfjs-dist": "^3.1.81",
"pdfjs-dist": "^2.16.105",
"quill": "^2.0.0-dev.3",
"quill-better-table": "^1.2.10",
"screenfull": "4.2.0",
@ -113,7 +114,7 @@
"mockjs": "1.0.1-beta3",
"plop": "2.3.0",
"runjs": "4.3.2",
"sass-loader": "^8.0.2",
"sass-loader": "^10.2.0",
"script-ext-html-webpack-plugin": "^2.1.5",
"script-loader": "0.7.2",
"serve-static": "1.13.2",

226
src/api/management/dike.js

@ -0,0 +1,226 @@
// 堤防相关接口
import request from '@/utils/request'
// 巡查计划管理-获取人员信息
// export function getPersonnelInformation(id) {
// return request({
// url: `/system/user/${id}`,
// method: 'get',
// })
// }
// 巡查项目管理-巡视检查列表
export function postDFInspectionProjectList(data) {
return request({
url: '/run/df/checking/list',
method: 'post',
data
})
}
// 巡查项目管理-巡视检查详情
export function getDFInspectionProject(id) {
return request({
url: `/run/df/checking/${id}`,
method: 'get',
})
}
// 巡查项目管理-新增巡视检查
export function postDFInspectionProject(data) {
return request({
url: '/run/df/checking',
method: 'post',
data
})
}
// 巡查项目管理-修改巡视检查
export function putDFInspectionProject(data) {
return request({
url: '/run/df/checking',
method: 'put',
data
})
}
// 巡查项目管理-删除巡视检查
export function deleteDFInspectionProject(id) {
return request({
url: `/run/df/checking/${id}`,
method: 'delete'
})
}
// 巡查计划管理-巡查计划列表
export function postDFInspectionPlanlist(data) {
return request({
url: '/run/df/plan/list',
method: 'post',
data
})
}
// 巡查计划管理-巡查计划详情
export function getDFInspectionPlan(id) {
return request({
url: `/run/df/plan/${id}`,
method: 'get',
})
}
// 巡查计划管理-新增巡查计划
export function postDFInspectionPlan(data) {
return request({
url: '/run/df/plan',
method: 'post',
data
})
}
// 巡查计划管理-更新巡查计划
export function putDFInspectionPlan(data) {
return request({
url: '/run/df/plan',
method: 'put',
data
})
}
// 巡查计划管理-删除巡查计划
export function deleteDFInspectionPlan(id) {
return request({
url: `/run/df/plan/${id}`,
method: 'delete',
})
}
// 巡查计划管理-巡查点位设置
export function postDFInspectionRoute(id, data) {
return request({
url: `/run/df/plan/points/${id}`,
method: 'post',
data
})
}
// 巡查计划管理-获取巡查点位
export function getDFInspectionRoute(id) {
return request({
url: `/run/df/plan/points/${id}`,
method: 'get',
})
}
// 巡查记录-巡查记录列表
export function postDFInspectionRecordsList(data) {
return request({
url: '/run/df/record/list',
method: 'post',
data
})
}
// 巡查记录-新增巡查记录
export function postDFInspectionRecords(data) {
return request({
url: '/run/df/record',
method: 'post',
data
})
}
// 巡查记录-巡查记录轨迹列表
export function postDFInspectionRecordsTrajectoryList(data) {
return request({
url: '/run/df/trace/list',
method: 'post',
data
})
}
// 维修计划管理-维修计划列表
export function postDFMaintenancePlanList(data) {
return request({
url: '/run/df/yh/plan/list',
method: 'post',
data
})
}
// 维修计划管理-维修计划详情
export function getDFMaintenancePlan(id) {
return request({
url: `/run/df/yh/plan/${id}`,
method: 'get'
})
}
// 维修计划管理-新增维修计划
export function postDFMaintenancePlan(data) {
return request({
url: '/run/df/yh/plan',
method: 'post',
data
})
}
// 维修计划管理-更新维修计划
export function putDFMaintenancePlan(data) {
return request({
url: '/run/df/yh/plan',
method: 'put',
data
})
}
// 维修计划管理-删除维修计划
export function deleteDFMaintenancePlan(id) {
return request({
url: `/run/df/yh/plan/${id}`,
method: 'delete'
})
}
// 维修记录-维修记录列表
export function postDFMaintenanceRecordsList(data) {
return request({
url: '/run/df/yh/record/list',
method: 'post',
data
})
}
// 维修记录-维修记录详情
export function getDFMaintenanceRecords(id) {
return request({
url: `/run/df/yh/record/${id}`,
method: 'get'
})
}
// 维修记录-新增维修记录
export function postDFMaintenanceRecords(data) {
return request({
url: '/run/df/yh/record',
method: 'post',
data
})
}
// 维修记录-更新维修记录
export function putDFMaintenanceRecords(data) {
return request({
url: '/run/df/yh/record',
method: 'put',
data
})
}
// 维修记录-删除维修记录
export function deleteDFMaintenanceRecords(id) {
return request({
url: `/run/df/yh/record/${id}`,
method: 'delete'
})
}

5
src/api/management/index.js

@ -0,0 +1,5 @@
export * from './dike'
export * from './reservoir'
export * from './sluice'
export { getDicts } from '../system/dict/data'
export { listUser } from '../system/user'

1
src/api/management/reservoir.js

@ -0,0 +1 @@
// 水库相关接口

218
src/api/management/sluice.js

@ -0,0 +1,218 @@
// 水闸相关接口
import request from '@/utils/request'
// 巡查项目管理-巡视检查列表
export function postSZInspectionProjectList(data) {
return request({
url: '/run/sz/checking/list',
method: 'post',
data
})
}
// 巡查项目管理-巡视检查详情
export function getSZInspectionProject(id) {
return request({
url: `/run/sz/checking/${id}`,
method: 'get',
})
}
// 巡查项目管理-新增巡视检查
export function postSZInspectionProject(data) {
return request({
url: '/run/sz/checking',
method: 'post',
data
})
}
// 巡查项目管理-修改巡视检查
export function putSZInspectionProject(data) {
return request({
url: '/run/sz/checking',
method: 'put',
data
})
}
// 巡查项目管理-删除巡视检查
export function deleteSZInspectionProject(id) {
return request({
url: `/run/sz/checking/${id}`,
method: 'delete'
})
}
// 巡查计划管理-巡查计划列表
export function postSZInspectionPlanlist(data) {
return request({
url: '/run/sz/plan/list',
method: 'post',
data
})
}
// 巡查计划管理-巡查计划详情
export function getSZInspectionPlan(id) {
return request({
url: `/run/sz/plan/${id}`,
method: 'get',
})
}
// 巡查计划管理-新增巡查计划
export function postSZInspectionPlan(data) {
return request({
url: '/run/sz/plan',
method: 'post',
data
})
}
// 巡查计划管理-更新巡查计划
export function putSZInspectionPlan(data) {
return request({
url: '/run/sz/plan',
method: 'put',
data
})
}
// 巡查计划管理-删除巡查计划
export function deleteSZInspectionPlan(id) {
return request({
url: `/run/sz/plan/${id}`,
method: 'delete',
})
}
// 巡查计划管理-巡查点位设置
export function postSZInspectionRoute(id, data) {
return request({
url: `/run/sz/plan/points/${id}`,
method: 'post',
data
})
}
// 巡查计划管理-获取巡查点位
export function getSZInspectionRoute(id) {
return request({
url: `/run/sz/plan/points/${id}`,
method: 'get',
})
}
// 巡查记录-巡查记录列表
export function postSZInspectionRecordsList(data) {
return request({
url: '/run/sz/record/list',
method: 'post',
data
})
}
// 巡查记录-新增巡查记录
export function postSZInspectionRecords(data) {
return request({
url: '/run/sz/record',
method: 'post',
data
})
}
// 巡查记录-巡查记录轨迹列表
export function postSZInspectionRecordsTrajectoryList(data) {
return request({
url: '/run/sz/trace/list',
method: 'post',
data
})
}
// 维修计划管理-维修计划列表
export function postSZMaintenancePlanList(data) {
return request({
url: '/run/sz/yh/plan/list',
method: 'post',
data
})
}
// 维修计划管理-维修计划详情
export function getSZMaintenancePlan(id) {
return request({
url: `/run/sz/yh/plan/${id}`,
method: 'get'
})
}
// 维修计划管理-新增维修计划
export function postSZMaintenancePlan(data) {
return request({
url: '/run/sz/yh/plan',
method: 'post',
data
})
}
// 维修计划管理-更新维修计划
export function putSZMaintenancePlan(data) {
return request({
url: '/run/sz/yh/plan',
method: 'put',
data
})
}
// 维修计划管理-删除维修计划
export function deleteSZMaintenancePlan(id) {
return request({
url: `/run/sz/yh/plan/${id}`,
method: 'delete'
})
}
// 维修记录-维修记录列表
export function postSZMaintenanceRecordsList(data) {
return request({
url: '/run/sz/yh/record/list',
method: 'post',
data
})
}
// 维修记录-维修记录详情
export function getSZMaintenanceRecords(id) {
return request({
url: `/run/sz/yh/record/${id}`,
method: 'get'
})
}
// 维修记录-新增维修记录
export function postSZMaintenanceRecords(data) {
return request({
url: '/run/sz/yh/record',
method: 'post',
data
})
}
// 维修记录-更新维修记录
export function putSZMaintenanceRecords(data) {
return request({
url: '/run/sz/yh/record',
method: 'put',
data
})
}
// 维修记录-删除维修记录
export function deleteSZMaintenanceRecords(id) {
return request({
url: `/run/sz/yh/record/${id}`,
method: 'delete'
})
}

1
src/assets/icons/svg/icon-clear.svg

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="16" height="16.07989501953125" viewBox="0 0 16 16.07989501953125"><g><g><g><path d="M10.332273828125,3.49841L10.332273828125,1.16614C10.332273828125,0.522098,9.810173828125,0,9.166133828125,0L6.833863828125,0C6.189823828125,0,5.667723828125,0.522098,5.667723828125,1.16614L5.667723828125,3.49841L2.169313828125,3.49841C1.525270828125,3.49841,1.003173828125,4.02051,1.003173828125,4.66455L1.003173828125,6.99683C1.003173828125,7.58488,1.438441828125,8.07127,2.004373828125,8.15139L1.193324828125,13.8287C1.092964428125,14.5313,1.638088828125,15.1598,2.347743828125,15.1598L13.652273828125,15.1598C14.361873828125,15.1598,14.907073828125,14.5313,14.806673828125,13.8287L13.995673828125,8.15139C14.561573828125,8.07127,14.996873828125,7.58488,14.996873828125,6.99683L14.996873828125,4.66455C14.996873828125,4.02051,14.474773828125,3.49841,13.830673828125,3.49841L10.332273828125,3.49841ZM9.166133828125,3.49841L6.833863828125,3.49841L6.833863828125,1.16614L9.166133828125,1.16614L9.166133828125,3.49841ZM13.830673828125,6.99683L2.169313828125,6.99683L2.169313828125,4.66455L13.830673828125,4.66455L13.830673828125,6.99683ZM3.180693828125,8.16296L12.819273828125,8.16296L13.652273828125,13.9937L2.347743828125,13.9937L3.180693828125,8.16296Z" fill-rule="evenodd" fill="#1DA591" fill-opacity="1"/></g><g><path d="M5.08465576171875,11.661376953125L6.25079576171875,11.661376953125L6.25079576171875,13.993656953125L5.08465576171875,13.993656953125L5.08465576171875,11.661376953125ZM7.41693576171875,11.661376953125L8.58306576171875,11.661376953125L8.58306576171875,13.993656953125L7.41693576171875,13.993656953125L7.41693576171875,11.661376953125ZM9.74920576171875,11.661376953125L10.91534576171875,11.661376953125L10.91534576171875,13.993656953125L9.74920576171875,13.993656953125L9.74920576171875,11.661376953125Z" fill="#1DA591" fill-opacity="0.6000000238418579"/></g></g></g></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

1
src/assets/icons/svg/icon-gcxc.svg

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="14" height="14" viewBox="0 0 14 14"><defs><clipPath id="master_svg0_31_00455"><rect x="0" y="0" width="14" height="14" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_31_00455)"><g><path d="M13.8698765625,13.051065576171874L12.7094765625,11.387265576171876L12.8422765625,11.121665576171875C13.7649765625,9.779525576171874,13.7230765625,7.787265576171875,12.7513765625,6.382205576171875C12.7304765625,6.354245576171875,12.7164765625,6.326285576171875,12.7024765625,6.305315576171875C11.6748765625,4.907235576171875,9.9412865625,4.508785576171875,8.5222365625,5.263745576171875C8.3614665625,5.347625576171875,8.2006865625,5.445495576171875,8.0538865625,5.564335576171875C7.9979665625,5.599285576171875,7.9490265625,5.648215576171875,7.8931065625,5.690155576171875C7.5645565625,5.969775576171875,7.2779565625,6.312305576171875,7.0542665625,6.703765576171875C6.9633865625,6.871525576171875,6.8795065625,7.039295576171875,6.8095965625,7.221045576171875C6.3412465625,8.451355576171874,6.4600765625,9.933315576171875,7.2499965625,11.072765576171875C7.4177665625,11.317365576171875,7.6134965625,11.541065576171874,7.8371865625,11.736865576171875C8.9556465625,12.722465576171874,10.5354765625,12.848265576171874,11.7867765625,12.016465576171875L13.0100765625,13.771065576171875C13.0939765625,13.896865576171875,13.2267765625,13.980765576171875,13.3665765625,13.994765576171876C13.5063765625,14.015665576171875,13.6531765625,13.973765576171875,13.7649765625,13.875865576171876C13.8768765625,13.778065576171874,13.9537765625,13.638165576171875,13.9747765625,13.477465576171875C13.9956765625,13.330665576171874,13.9537765625,13.176865576171876,13.8698765625,13.051065576171874ZM11.6259765625,11.079765576171875C10.7171765625,11.855665576171875,9.4659365625,11.897565576171875,8.5082565625,11.191565576171875C8.3334965625,11.065765576171875,8.1727265625,10.911965576171875,8.0399065625,10.751165576171875C7.9839865625,10.681265576171874,7.9350465625,10.618365576171875,7.8861165625,10.548465576171875C7.2080465625,9.583795576171875,7.1591165625,8.311545576171875,7.6694165625,7.304935576171875C7.8441765625,6.948425576171875,8.0818465625,6.647835576171875,8.3754465625,6.403175576171875C9.4589465625,5.473455576171875,11.0107765625,5.606275576171875,11.9474765625,6.717745576171875C12.0942765625,6.885505576171875,12.2201765625,7.074255576171875,12.3179765625,7.276975576171875C12.9680765625,8.535235576171875,12.7024765625,10.170965576171875,11.6259765625,11.079765576171875ZM9.7455565625,3.935575576171875C10.8709765625,3.935575576171875,11.9195765625,4.306065576171875,12.7933765625,4.928205576171875C12.4857765625,3.565085576171875,12.1991765625,2.355745576171875,12.0453765625,1.852445576171875C11.6538765625,0.524272576171875,10.8639765625,0.034946376171875,9.7455565625,0.034946376171875L8.1587365625,0.034946376171875L8.7669065625,4.033435576171875C9.0884565625,3.963535576171875,9.4170065625,3.935575576171875,9.7455565625,3.935575576171875ZM7.7672765625,3.355375576171875L6.4530865625,3.355375576171875L6.3482365625,5.732095576171875C6.7676565625,5.256755576171875,7.2709665625,4.865295576171875,7.8162165625,4.564705576171875L7.7672765625,3.355375576171875ZM7.6274765625,0.048927276171875L6.5928965625,0.048927276171875L6.4950365625,2.250895576171875L7.7183465625,2.250895576171875L7.6274765625,0.048927276171875ZM0.2526295625,10.198965576171876C0.0988417625,10.723265576171874,0.0149572625,11.184565576171876,0.0009765625,11.583065576171874L0.0009765625,11.785765576171874C0.0289380625,12.708465576171875,0.5042835625,13.211765576171874,1.4340065625,13.211765576171874L3.8526665625,13.211765576171874L4.6076365625,8.933685576171875L0.5951585625,8.933685576171875C0.4693315625,9.430005576171874,0.3435045625,9.870395576171875,0.2526295625,10.198965576171876ZM2.4545965625,1.635745576171875C2.3357565625,2.006235576171875,2.1749865625,2.621385576171875,1.9932365625,3.348385576171875L5.5862865625,3.348385576171875L6.1664865625,0.020965576171875L4.0344165625,0.020965576171875C3.1815965625,0.097859676171875,2.9159565625,0.167763576171875,2.4545965625,1.635745576171875ZM0.8957445625,7.745325576171875L4.8103565625,7.745325576171875L5.3695865625,4.550725576171875L1.6926465625,4.550725576171875C1.4270165625,5.585305576171875,1.1543865625,6.717745576171875,0.8957445625,7.745325576171875Z" fill="#262626" fill-opacity="1"/></g></g></svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

1
src/assets/icons/svg/icon-line.svg

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="16" height="16" viewBox="0 0 16 16"><defs><clipPath id="master_svg0_206_03703"><rect x="0" y="0" width="16" height="16" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_206_03703)"><g></g><g transform="matrix(0.7071067690849304,-0.7071067690849304,0.7071067690849304,0.7071067690849304,-6.602256101890816,2.2829116119100945)"><g><ellipse cx="1.08330705948174" cy="11.034753829240799" rx="0.8619263172149658" ry="0.8619786500930786" fill-opacity="0" stroke-opacity="1" stroke="#1DA591" fill="none" stroke-width="1.5"/></g><g><ellipse cx="11.482120752334595" cy="11.034753829240799" rx="0.8619263172149658" ry="0.8619786500930786" fill-opacity="0" stroke-opacity="1" stroke="#1DA591" fill="none" stroke-width="1.5"/></g><g><path d="M3.3560608010482786,13.740011804122926Q4.1252308010482786,13.169611804122924,5.133470801048279,12.853364804122926L4.6845408010482785,11.422118804122924Q3.434920801048279,11.814077804122924,2.4625708010482787,12.535160804122924Q0.3170408010482788,14.126251804122925,0.3170408010482788,16.436351804122925L1.8170408010482788,16.436351804122925Q1.8170408010482788,14.881321804122924,3.3560608010482786,13.740011804122926ZM10.10391080104828,12.535160804122924Q9.131550801048279,11.814079804122924,7.881930801048279,11.422118804122924L7.433000801048279,12.853364804122926Q8.441250801048279,13.169611804122924,9.21041080104828,13.740011804122926Q10.749430801048279,14.881321804122924,10.749430801048279,16.436351804122925L12.249440801048278,16.436351804122925Q12.249440801048278,14.126251804122925,10.10391080104828,12.535160804122924Z" fill-rule="evenodd" fill="#1DA591" fill-opacity="0.6000000238418579"/></g><g><path d="M2.521552324295044,11.782130122184753L4.670792324295044,11.782130122184753L4.670792324295044,10.282130122184753L2.521552324295044,10.282130122184753L2.521552324295044,11.782130122184753ZM10.043872324295045,10.282130122184753L7.894642324295044,10.282130122184753L7.894642324295044,11.782130122184753L10.043872324295045,11.782130122184753L10.043872324295045,10.282130122184753Z" fill-rule="evenodd" fill="#1DA591" fill-opacity="0.6000000238418579"/></g><g><rect x="5.192798614501953" y="9.861083984375" width="2.7984700202941895" height="2.798609733581543" rx="0" fill-opacity="0" stroke-opacity="1" stroke="#1DA591" fill="none" stroke-width="1.5"/></g><g><rect x="0.20458984375" y="16.37957525253296" width="1.7238526344299316" height="1.7239573001861572" rx="0" fill-opacity="0" stroke-opacity="1" stroke="#1DA591" fill="none" stroke-width="1.5"/></g><g><rect x="10.636984825134277" y="16.37957525253296" width="1.7238526344299316" height="1.7239573001861572" rx="0" fill-opacity="0" stroke-opacity="1" stroke="#1DA591" fill="none" stroke-width="1.5"/></g></g></g></svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

1
src/assets/icons/svg/icon-wxjhgl.svg

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="14" height="14" viewBox="0 0 14 14"><defs><clipPath id="master_svg0_31_00426"><rect x="0" y="0" width="14" height="14" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_31_00426)"><g><path d="M4.0835,0.875L4.0835,1.458336L4.0835,1.75L2.04167,1.75Q1.558417,1.75,1.216709,2.09171Q0.875,2.43342,0.875,2.91667L0.875,11.9583Q0.875,12.4416,1.216711,12.7833Q1.558417,13.125,2.04167,13.125L11.9583,13.125Q12.4416,13.125,12.7833,12.7833Q13.125,12.4416,13.125,11.9583L13.125,2.91667Q13.125,2.43342,12.7833,2.09171Q12.4416,1.75,11.9583,1.75L9.91667,1.75L9.91667,1.458336L9.91667,0.875L8.75,0.875L8.75,1.458336L8.75,1.75L5.25017,1.75L5.25017,1.458336L5.25017,0.875L4.0835,0.875ZM11.9583,2.91667L11.9583,4.95831L2.04167,4.95831L2.04167,2.91667L4.0835,2.91667L4.0835,3.79167L4.0835,4.37501L5.25017,4.37501L5.25017,3.79167L5.25017,2.91667L8.75,2.91667L8.75,3.79167L8.75,4.37501L9.91667,4.37501L9.91667,3.79167L9.91667,2.91667L11.9583,2.91667ZM6.82931,11.2041C6.71991,11.3135,6.57154,11.375,6.41683,11.375C6.26212,11.375,6.11375,11.3135,6.00435,11.2041L4.2543500000000005,9.45413C4.14495,9.34473,4.0835,9.19636,4.0835,9.04165C4.0835,8.88694,4.14495,8.73856,4.2543500000000005,8.62917C4.36375,8.519770000000001,4.5121199999999995,8.45831,4.66683,8.45831C4.821540000000001,8.45831,4.96991,8.519770000000001,5.07931,8.62917L6.41683,9.96669L9.50413,6.87939C9.61375,6.76977,9.76212,6.70831,9.91683,6.70831C10.06892,6.70831,10.215,6.76772,10.32393,6.87386C10.32427,6.87419,10.32897,6.87883,10.32897,6.87883C10.4387,6.98856,10.50016,7.13694,10.50016,7.29165C10.50016,7.44636,10.4387,7.59473,10.32931,7.70413L6.82931,11.2041Z" fill-rule="evenodd" fill="#262626" fill-opacity="1"/></g></g></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

1
src/assets/icons/svg/icon-wxjl.svg

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="14" height="14" viewBox="0 0 14 14"><defs><clipPath id="master_svg0_31_01230"><rect x="0" y="0" width="14" height="14" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_31_01230)"><g><path d="M10.1379,0.965517L12.069,0.965517C12.2978,0.965517,12.5517,1.21848,12.5517,1.44828L12.5517,2.89655L0,2.89655L0,1.44828C0.000965521,1.21848,0.254414,0.965517,0.482759,0.965517L2.41379,0.965517L2.41379,2.41379L4.34483,2.41379L4.34483,0.965517L8.2069,0.965517L8.2069,2.41379L10.1379,2.41379L10.1379,0.965517ZM2.89655,0L3.86207,0L3.86207,1.93103L2.89655,1.93103L2.89655,0ZM8.68966,0L9.65517,0L9.65517,1.93103L8.68965,1.93103L8.68966,0ZM12.5517,5.95628C12.2465,5.77963,11.9227,5.63716,11.5862,5.53145L11.5862,4.34483L9.65517,4.34483L9.65517,5.33448C9.32743,5.36687,9.00389,5.43287,8.68965,5.53145L8.68965,4.34483L6.75862,4.34483L6.75862,6.27586L7.2409,6.27586C6.62587,6.73781,6.1296,7.33949,5.7931,8.03117L5.7931,7.24138L3.86207,7.24138L3.86207,9.17241L5.4069,9.17241C5.34366,9.48428,5.31034,9.80724,5.31034,10.1379L3.86207,10.1379L3.86207,12.069L5.712,12.069C5.94576,12.603,6.27417,13.0904,6.68138,13.5076L0.545517,13.4979C0.244276,13.4979,-3.67165e-7,13.2469,-3.67165e-7,12.936L-3.67165e-7,3.37931L12.5517,3.37931L12.5517,5.95628ZM0.965517,4.34483L0.965517,6.27586L2.89655,6.27586L2.89655,4.34483L0.965517,4.34483ZM0.965517,7.24138L0.965517,9.17241L2.89655,9.17241L2.89655,7.24138L0.965517,7.24138ZM0.965517,10.1379L0.965517,12.069L2.89655,12.069L2.89655,10.1379L0.965517,10.1379ZM3.86207,4.34483L3.86207,6.27586L5.7931,6.27586L5.7931,4.34483L3.86207,4.34483Z" fill="#000000" fill-opacity="1"/></g><g><path d="M10.13794890625,13.999988388671875C8.00498890625,13.999988388671875,6.27587890625,12.270878388671875,6.27587890625,10.137918388671874C6.27587890625,8.004958388671875,8.00498890625,6.275848388671875,10.13794890625,6.275848388671875C12.27090890625,6.275848388671875,14.00001890625,8.004958388671875,14.00001890625,10.137918388671874C14.00001890625,12.270878388671875,12.27090890625,13.999988388671875,10.13794890625,13.999988388671875ZM11.043118906250001,10.741368388671875C11.87586890625,10.740298388671874,12.550678906249999,10.065488388671875,12.55173890625,9.232748388671876C12.55173890625,9.100948388671874,12.53146890625,8.968678388671876,12.48704890625,8.816128388671874C12.47206890625,8.765158388671875,12.43165890625,8.725658388671874,12.380358906249999,8.711848388671875C12.32879890625,8.697958388671875,12.273748906249999,8.712688388671875,12.236018906249999,8.750468388671875L11.446708906249999,9.521918388671875L10.86932890625,9.406058388671875L10.75442890625,8.831088388671875L11.55242890625,8.050948388671875C11.63456890625,7.971448388671875,11.601678906250001,7.833018388671875,11.49256890625,7.7989483886718745C11.34743890625,7.751258388671875,11.19586890625,7.726018388671875,11.043118906250001,7.7241283886718755C10.21036890625,7.725188388671875,9.53555890625,8.399998388671875,9.53449890625,9.232748388671876C9.53449890625,9.330258388671876,9.54608890625,9.428748388671874,9.57021890625,9.537368388671876C9.400288906250001,9.677368388671875,9.23952890625,9.798058388671874,9.05704890625,9.934198388671875C8.79587890625,10.128748388671875,8.499948906250001,10.349368388671875,8.096848906249999,10.690198388671874C7.86214890625,10.892388388671876,7.7262689062500005,11.186138388671875,7.7241589062500005,11.495918388671875C7.72494890625,12.078688388671875,8.19717890625,12.550908388671875,8.77994890625,12.551708388671875C9.08794890625,12.551708388671875,9.38146890625,12.414128388671875,9.58325890625,12.174678388671875C9.85036890625,11.860948388671876,10.10638890625,11.537948388671875,10.35084890625,11.206258388671875C10.48456890625,11.027638388671875,10.60187890625,10.870748388671874,10.73801890625,10.705158388671876C10.83794890625,10.728818388671876,10.94077890625,10.740878388671874,11.043118906250001,10.741368388671875Z" fill="#000000" fill-opacity="1"/></g></g></svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

1
src/assets/icons/svg/icon-wxyh.svg

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="14" height="14" viewBox="0 0 14 14"><defs><clipPath id="master_svg0_31_00458"><rect x="0" y="0" width="14" height="14" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_31_00458)"><g><path d="M12.9706,6.02625C13.9738,5.00758,14.277,3.49122,13.7327,2.16927L11.8664,4.03555C11.3221,4.54878,10.4745,4.51768,9.96127,3.97334C9.47137,3.45234,9.47137,2.6514,9.96127,2.13039L11.8276,0.264113C10.5056,-0.272443,8.98925,0.0230518,7.9628,1.0184C6.95189,2.0293,6.6564,3.55343,7.20851,4.8676L5.91766,6.15845L2.65167,2.89246L2.87718,2.42589L1.11199,1.22058L0,2.34035L1.16643,4.08221L1.6952,3.81782L4.98452,7.08381L1.16642,10.9019C0.925364,11.143,0.917588,11.5318,1.15865,11.7728L1.16642,11.7806L2.33285,12.9548C2.57391,13.1959,2.9705,13.1959,3.21156,12.9548L7.02965,9.1445L7.57399,9.68883L7.42624,9.83658C7.21628,9.98432,7.16185,10.272,7.3096,10.4898C7.32515,10.5131,7.3407,10.5364,7.36403,10.552L9.95349,13.1337C10.1712,13.3592,10.5289,13.3825,10.7778,13.1803L11.9831,11.975C12.2008,11.7262,12.2008,11.3607,11.9831,11.1196L9.39361,8.53795C9.18365,8.32022,8.86483,8.41354,8.63932,8.63904L8.53046,8.74791L7.98612,8.21136L9.33918,6.85053C10.6067,7.28599,12.0142,6.96717,12.9706,6.02625Z" fill="#262626" fill-opacity="1"/></g></g></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

1
src/assets/icons/svg/icon-xcjhgl.svg

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="14" height="14" viewBox="0 0 14 14"><defs><clipPath id="master_svg0_31_00415"><rect x="0" y="0" width="14" height="14" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_31_00415)"><g><path d="M5.06033234375,0.76202392578125C2.35575234375,0.76202392578125,0.08740234375,3.11762392578125,0.08740234375,6.04031392578125C0.08740234375,7.52346392578125,0.65449134375,8.83213392578125,1.57055234375,9.79182392578125L4.79860234375,13.19432392578125C4.97309234375,13.36882392578125,5.27844234375,13.36882392578125,5.45293234375,13.19432392578125L8.68097234375,9.79182392578125C9.59704234375,8.83213392578125,10.16410234375,7.47984392578125,10.16410234375,6.04031392578125C10.07688234375,3.11762392578125,7.80853234375,0.76202452659625,5.06033234375,0.76202392578125ZM5.06033234375,7.69795392578125C3.96978234375,7.69795392578125,3.09733234375,6.82551392578125,3.09733234375,5.73495392578125C3.09733234375,4.6444039257812495,3.96978234375,3.77195392578125,5.06033234375,3.77195392578125C6.15089234375,3.77195392578125,7.02333234375,4.6444039257812495,7.02333234375,5.73495392578125C7.02333234375,6.82551392578125,6.15089234375,7.69795392578125,5.06033234375,7.69795392578125ZM9.64066234375,13.36882392578125L6.15089234375,13.36882392578125L7.02333234375,12.49642392578125L8.76822234375,12.49642392578125L9.64066234375,13.36882392578125Z" fill="#262626" fill-opacity="1"/></g><g><path d="M14.00275828125,8.832135703125001C14.00275828125,9.748195703124999,13.65377828125,10.577015703125,13.043068281250001,11.187735703125L10.94919828125,13.281595703125C10.81832828125,13.412465703125001,10.64384828125,13.412465703125001,10.51297828125,13.281595703125L8.41911068125,11.144105703125C8.37548828125,11.100485703124999,8.37548828125,11.100485703124999,8.37548828125,11.056865703125L9.24793328125,10.140795703125C9.46604828125,9.922685703125001,9.640528281249999,9.704575703125,9.81501828125,9.486465703124999C10.03312828125,9.748195703124999,10.38210828125,9.922685703125001,10.77470828125,9.922685703125001C11.47266828125,9.922685703125001,12.03975828125,9.355595703125001,12.03975828125,8.701265703125C12.03975828125,8.046935703125,11.47266828125,7.479845703125,10.77470828125,7.479845703125C10.90557828125,6.9563757031249995,10.992818281249999,6.432911703125,10.992818281249999,5.909445703125L10.992818281249999,5.516845703125C12.65046828125,5.647712703125,14.00275828125,7.0436257031250005,14.00275828125,8.832135703125001Z" fill="#262626" fill-opacity="1"/></g></g></svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

1
src/assets/icons/svg/icon-xcjl.svg

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="14" height="14" viewBox="0 0 14 14"><defs><clipPath id="master_svg0_31_00486"><rect x="0" y="0" width="14" height="14" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_31_00486)"><g><path d="M13.9999234375,3L13.9999234375,10.5C13.9999234375,11.2726,13.4129234375,11.9188,12.6439234375,11.993L12.4999234375,12L2.9999134375,12L2.9999134375,14L-0.00008746549999999996,14L-0.00008746549999999996,10.5C-0.00005029450000000005,9.72738,0.5868594375,9.08117,1.3559134375,9.007L1.4999134375,9L10.9999234375,9L10.9999234375,3L13.9999234375,3ZM3.4999134375,2.9814e-7C6.1517234375,-0.00106117,7.8414134375,2.83247,6.5799134375,5.165L7.4129134375,6C7.7825134375,6.39358,7.7729534375,7.00949,7.3913034375,7.39141C7.0096534375,7.77332,6.3937534375,7.78332,5.9999134375,7.414L5.1649134375,6.579C3.1583934375,7.66356,0.6672224375,6.56987,0.1076254375,4.3587C-0.4515965625,2.14705,1.2194134375,2.9814e-7,3.4999134375,2.9814e-7ZM3.4999134375,2C2.6714834375,2,1.9999134375,2.67157,1.9999134375,3.5C1.9999134375,4.32843,2.6714834375,5,3.4999134375,5C4.3283434375,5,4.9999134375,4.32843,4.9999134375,3.5C4.9999134375,2.67157,4.3283434375,2,3.4999134375,2ZM13.9999234375,2.9814e-7L13.9999234375,2L10.9999234375,2L10.9999234375,2.9814e-7L13.9999234375,2.9814e-7Z" fill="#262626" fill-opacity="1"/></g></g></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

1
src/assets/icons/svg/icon-xcxmgl.svg

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="14" height="14" viewBox="0 0 14 14"><defs><clipPath id="master_svg0_31_00763"><rect x="0" y="0" width="14" height="14" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_31_00763)"><g><path d="M12.5074,13.868625903320313L11.8947,13.249725903320313L11.6497,13.249725903320313C11.6934,13.217425903320313,11.7372,13.174525903320312,11.781,13.140325903320312L10.5206,11.879125903320313C9.98674,12.200725903320313,9.37581,12.371925903320312,8.75257,12.374525903320313C6.819,12.374525903320313,5.25154,10.807025903320312,5.25154,8.873485903320313C5.25154,6.9399259033203125,6.819,5.372465903320313,8.75257,5.372465903320313L3.50103,5.372465903320313L3.50103,3.6219559033203126L14.0041,3.6219559033203126L14.0041,5.372465903320313L11.6497,5.372465903320313C11.5621,5.315575903320313,11.4659,5.2709359033203125,11.3783,5.219295903320313L11.3783,5.372465903320313L8.75257,5.372465903320313C10.0105,5.362865903320312,11.1754,6.033925903320313,11.7982,7.126945903320313C12.421,8.219965903320313,12.4043,9.564235903320313,11.7547,10.641525903320312L13.0238,11.902725903320313C13.0565,11.856625903320312,13.0916,11.812225903320313,13.1288,11.769725903320312L13.1288,12.012125903320312L13.7503,12.630925903320312L12.5074,13.868625903320313ZM8.75257,7.122975903320312C7.78578,7.122975903320312,7.00205,7.906705903320312,7.00205,8.873495903320313C7.00205,9.840275903320313,7.78578,10.624025903320312,8.75257,10.624025903320312C9.71935,10.624025903320312,10.5031,9.840275903320313,10.5031,8.873495903320313C10.5031,7.906705903320312,9.71935,7.122975903320312,8.75257,7.122975903320312ZM3.50103,0.1209259033203125L14.0041,0.1209259033203125L14.0041,1.8714359033203125L3.50103,1.8714359033203125L3.50103,0.1209259033203125ZM0,10.624025903320312L1.75051,10.624025903320312L1.75051,12.374525903320313L0,12.374525903320313L0,10.624025903320312ZM0,7.122975903320312L1.75051,7.122975903320312L1.75051,8.873495903320313L0,8.873495903320313L0,7.122975903320312ZM0,3.6219559033203126L1.75051,3.6219559033203126L1.75051,5.372465903320313L0,5.372465903320313L0,3.6219559033203126ZM0,0.1209253692623125L1.75051,0.1209253692623125L1.75051,1.8714359033203125L0,1.8714359033203125L0,0.1209253692623125ZM5.85547,12.374525903320313L3.50103,12.374525903320313L3.50103,10.624025903320312L4.22749,10.624025903320312C4.62957,11.324025903320312,5.18643,11.922825903320312,5.85547,12.374525903320313Z" fill="#262626" fill-opacity="1"/></g></g></svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

1
src/assets/icons/svg/icon-yxgh.svg

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="14" height="14" viewBox="0 0 14 14"><defs><clipPath id="master_svg0_31_00467"><rect x="0" y="0" width="14" height="14" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_31_00467)"><g><path d="M13.8659,3.50373C13.8659,3.25394,13.7713,3.03116,13.5891,2.84889L11.0035,0.263286C10.8144,0.087762,10.5984,0,10.3554,0C10.1056,0,9.88956,0.087762,9.70729,0.263286L7.12168,2.84889C6.94616,3.03791,6.8584,3.25394,6.8584,3.50373C6.8584,3.75351,6.94616,3.96954,7.12168,4.14506L9.70729,6.73067C9.89631,6.91294,10.1123,7.00745,10.3554,7.00745C10.6052,7.00745,10.8212,6.91294,11.0035,6.73067L13.5891,4.14507C13.7713,3.96954,13.8659,3.75351,13.8659,3.50373ZM5.47178,0.857301C5.27796,0.670932,5.05431,0.581475,4.78594,0.581475L4.78594,0.57402L0.954207,0.57402C0.685836,0.57402,0.462194,0.663477,0.275825,0.849846C0.0894569,1.03621,0,1.25986,0,1.52823L0,5.36742C0,5.62833,0.0894569,5.85943,0.275825,6.05325C0.462194,6.23962,0.685836,6.33653,0.954207,6.33653L4.78594,6.33653C5.05431,6.33653,5.28541,6.23962,5.47178,6.05325C5.65815,5.85943,5.75506,5.63579,5.75506,5.36742L5.75506,1.53568C5.75506,1.26731,5.65815,1.04367,5.47178,0.857301ZM5.47178,8.52077C5.27796,8.3344,5.05431,8.24495,4.78594,8.24495L0.954207,8.24495C0.685836,8.24495,0.462194,8.3344,0.275825,8.52077C0.0894569,8.70714,0,8.93078,0,9.19915L0,13.0458C0,13.3142,0.0894568,13.5378,0.275825,13.7242C0.462194,13.9105,0.685836,14,0.954207,14L4.78594,14C5.05431,14,5.28541,13.9105,5.47178,13.7242C5.65815,13.5378,5.75506,13.3142,5.75506,13.0458L5.75506,9.19915C5.75506,8.93078,5.65815,8.70714,5.47178,8.52077ZM13.1502,8.52077C12.9638,8.3344,12.7401,8.24495,12.4718,8.24495L8.64004,8.24495C8.37167,8.24495,8.14058,8.3344,7.95421,8.52077C7.76784,8.70714,7.67093,8.93078,7.67093,9.19915L7.67093,13.0458C7.67093,13.3142,7.76784,13.5378,7.95421,13.7242C8.14803,13.9105,8.37167,14,8.64004,14L12.4718,14C12.7401,14,12.9638,13.9105,13.1502,13.7242C13.3365,13.5378,13.426,13.3142,13.426,13.0458L13.426,9.19915C13.426,8.93078,13.3365,8.70714,13.1502,8.52077Z" fill-rule="evenodd" fill="#BFBFBF" fill-opacity="1"/></g></g></svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
src/assets/image/bottom-point.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 354 B

BIN
src/assets/image/map-point.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 980 B

50
src/layout/components/Navbar.vue

@ -10,7 +10,12 @@
<!-- @toggleClick="toggleSideBar"-->
<!-- />-->
<!-- <breadcrumb id="breadcrumb-container" class="breadcrumb-container" />-->
<div class="centerTab">
<!-- <div>安全运行</div> -->
<div class="tab-item" :class="selectTab == 0 ? 'select-item' : ''" @click="SET_SELECT_TAB(0)">水库运行管理</div>
<div class="tab-item" :class="selectTab == 1 ? 'select-item' : ''" @click="SET_SELECT_TAB(1)">水闸运行管理</div>
<div class="tab-item" :class="selectTab == 2 ? 'select-item' : ''" @click="SET_SELECT_TAB(2)">堤防运行管理</div>
</div>
<div class="right-menu">
<template v-if="device !== 'mobile'">
<!-- <search id="header-search" class="right-menu-item" />-->
@ -30,10 +35,7 @@
<!-- </el-tooltip>-->
</template>
<el-dropdown
class="avatar-container right-menu-item hover-effect"
trigger="click"
>
<el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click">
<div class="avatar-wrapper">
<img v-if="options.img" :src="options.img" class="user-avatar" />
<div v-else style="background-color: white" class="user-avatar">
@ -59,7 +61,7 @@
</template>
<script>
import { mapGetters } from "vuex";
import { mapGetters, mapMutations } from "vuex";
import Breadcrumb from "@/components/Breadcrumb";
import Hamburger from "@/components/Hamburger";
import Screenfull from "@/components/Screenfull";
@ -67,6 +69,7 @@ import SizeSelect from "@/components/SizeSelect";
import Search from "@/components/HeaderSearch";
import { getFile } from "@/api/common";
import Logo from "./Sidebar/Logo";
import { store } from '@/store'
export default {
data() {
@ -74,6 +77,7 @@ export default {
options: {
img: "",
},
selectItem: '0'
};
},
components: {
@ -85,6 +89,9 @@ export default {
Search,
},
computed: {
selectTab() {
return this.$store.state.topTab.selectTab
},
...mapGetters(["sidebar", "avatar", "device"]),
showLogo() {
return this.$store.state.settings.sidebarLogo;
@ -137,6 +144,7 @@ export default {
});
});
},
...mapMutations('topTab', ['SET_SELECT_TAB']),
},
};
</script>
@ -144,11 +152,9 @@ export default {
<style lang="scss" scoped>
.navbar {
// background: #122c7d !important;
background: linear-gradient(
270deg,
rgba(61, 156, 204, 1) 1%,
rgba(131, 179, 107, 1) 100%
) !important;
background: linear-gradient(270deg,
rgba(61, 156, 204, 1) 1%,
rgba(131, 179, 107, 1) 100%) !important;
// height: 70px;
height: 56px;
overflow: hidden;
@ -182,6 +188,28 @@ export default {
vertical-align: top;
}
.centerTab {
display: flex;
.tab-item {
width: 120px;
height: 56px;
display: flex;
justify-content: center;
align-items: center;
color: #fff;
&:hover {
cursor: pointer;
}
}
.select-item {
padding-top: 4px;
border-bottom: 4px solid #fff;
}
}
.right-menu {
// float: right;
// height: 100%;

9
src/store/index.js

@ -8,6 +8,7 @@ import permission from './modules/permission'
import settings from './modules/settings'
import getters from './getters'
import createPersistedstate from 'vuex-persistedstate'
import topTab from './modules/topTab'
Vue.use(Vuex)
@ -30,21 +31,22 @@ const store = new Vuex.Store({
permission,
settings,
dict,
topTab
},
state: {
paragraph: {},
delParagraphParam: {},
addChildParagraphParam: {},
addChildTimeLine: {},
previewTimeLine:{},
previewTimeLine: {},
fileUrl: window.g.fileUrl,
basePageData: {
// 专题管理面包屑
routeList: [],
}
},
mutations:{
setParagraph(state, obj){
mutations: {
setParagraph(state, obj) {
state.paragraph = obj;
},
setDelParagraphParam(state, obj) {
@ -62,6 +64,7 @@ const store = new Vuex.Store({
setRouteList (state, payload) {
state.basePageData.routeList = payload
},
},
getters
})

78
src/store/modules/permission.js

@ -19,6 +19,82 @@ const permission = {
return new Promise(resolve => {
// 向后端请求路由数据
getRouters().then(res => {
// 临时手动添加路由
res.data.push(
{
component: "Layout",
alwaysShow: true,
hidden: false,
meta: { title: "运行管护", icon: "icon-yxgh" },
name: "RunManage",
path: "/runManage",
redirect: "noRedirect",
children: [
{
component: "runManage/engineering",
alwaysShow: true,
hidden: false,
meta: { title: "工程巡查", icon: "icon-gcxc" },
name: "Engineering",
path: "/engineering",
children: [
{
component: "runManage/engineering/inspectionItems",
hidden: false,
meta: { title: "巡查项目管理", icon: "icon-xcxmgl" },
name: "InspectionItems",
path: "/inspectionItems"
},
{
component: "runManage/engineering/inspectionPlan",
hidden: false,
meta: { title: "巡查计划管理", icon: "icon-xcjhgl" },
name: "InspectionPlan",
path: "/inspectionPlan"
},
{
component: "runManage/engineering/patrolRouteSettings",
hidden: true,
meta: { title: "巡查路线设置", icon: "" },
name: "PatrolRouteSettings",
path: "/patrolRouteSettings"
},
{
component: "runManage/engineering/inspectionRecords",
hidden: false,
meta: { title: "巡查记录", icon: "icon-xcjl" },
name: "InspectionRecords",
path: "/inspectionRecords"
},
],
},
{
component: "runManage/maintenance",
alwaysShow: true,
hidden: false,
meta: { title: "维修养护", icon: "icon-wxyh" },
name: "Maintenance",
path: "/maintenance",
children: [
{
component: "runManage/maintenance/maintenancePlan",
hidden: false,
meta: { title: "维养计划管理", icon: "icon-wxjhgl" },
name: "MaintenancePlan",
path: "/maintenancePlan"
},
{
component: "runManage/maintenance/maintenanceRecords",
hidden: false,
meta: { title: "维养记录", icon: "icon-wxjl" },
name: "MaintenanceRecords",
path: "/maintenanceRecords"
},
]
}
]
}
)
const accessedRoutes = filterAsyncRouter(res.data)
accessedRoutes.push({ path: '*', redirect: '/404', hidden: true })
commit('SET_ROUTES', accessedRoutes)
@ -48,7 +124,7 @@ function filterAsyncRouter(asyncRouterMap) {
}
export const loadView = (view) => { // 路由懒加载
return (resolve) => require([`@/views/${view}`], resolve)
return (resolve) => require([`@/views/${view}`], resolve)
}
export default permission

19
src/store/modules/topTab.js

@ -0,0 +1,19 @@
const state = {
/**
* selectTab = 0 水库运行管理
* selectTab = 1 水闸运行管理
* selectTab = 2 堤防运行管理
*/
selectTab: 0
}
const mutations = {
SET_SELECT_TAB: (state, select) => {
state.selectTab = select
}
}
export default {
namespaced: true,
state,
mutations,
}

3
src/views/runManage/engineering/index.vue

@ -0,0 +1,3 @@
<template >
<router-view />
</template>

399
src/views/runManage/engineering/inspectionItems/Dike.vue

@ -0,0 +1,399 @@
<!-- 巡查项目管理-堤防 -->
<script>
import { getDicts, postDFInspectionProjectList, postDFInspectionProject, putDFInspectionProject, deleteDFInspectionProject, getDFInspectionProject } from '@/api/management'
export default {
name: 'InspectionItems',
data() {
return {
searchInput: '',
searchType: 3,
dialogVisible: false,
ContentType: '',
firstType: [], //
secondType: [], //
examType: [], //
tableData: [], //
pageData: {
pageNum: 1, //
pageSize: 10, //
pageSizes: [10, 20, 50, 100],
total: 0 //
},
ruleForm: {
name: '',
type: '',
checkContentType: '',
items: [
],
},
rules: {
name: [
{ required: true, message: '请输入巡视检查名称', trigger: 'blur' },
{ max: 50, message: '名称最长为50个字符', trigger: 'blur' }
],
type: [
{ required: true, message: '请选择巡查类型', trigger: 'change' }
],
checkContentType: [
{ required: true, message: '请选择巡视检查内容', trigger: 'change' }
]
}
}
},
methods: {
//
searchTableList() {
postDFInspectionProjectList({
data: {
timeView: {
timeField: "create_time"
},
type: this.searchType == 3 ? '' : this.searchType
},
cv: {
name: "name",
type: "like",
value: this.searchInput
},
pageSize: this.pageData.pageSize,
pageNum: this.pageData.pageNum
}).then((res) => {
if (res) {
this.tableData = res.records
this.pageData.total = res.total
}
console.log('🚀表格数据🚀', res)
})
},
//
editTableItem(row) {
getDFInspectionProject(row.id).then((res) => {
console.log('🚀res🚀', res.data)
this.ruleForm = res.data
this.ruleForm.checkContentType = res.data.items[0].parts[0]
getDicts(res.data.items[0].parts[0]).then((res) => {
this.secondType = res.data
console.log('🚀一级🚀', res.data)
})
this.ruleForm.items.forEach(element => {
getDicts(element.parts[1]).then((res) => {
this.$set(element, 'third', res.data)
})
});
this.dialogVisible = true
console.log('🚀this.ruleForm🚀', this.ruleForm)
})
},
//
deleteTableItem(row) {
deleteDFInspectionProject(row.id).then((res) => {
this.getTableData()
this.$message.success('删除成功');
})
},
//
addPatrolItem(checkContentType) {
console.log('🚀checkContentType🚀', checkContentType)
this.ruleForm.items.push(
{
content: '',
parts: [checkContentType, '', '']
}
)
},
//
deletePatrolItem(index) {
this.ruleForm.items.splice(index, 1)
},
//
changeContentType(dictValue) {
getDicts(dictValue).then((res) => {
this.secondType = res.data
console.log('🚀一级🚀', res.data)
})
this.ruleForm.items = [
{
content: '',
parts: [this.ruleForm.checkContentType]
}
]
},
//
changeSecondType(row) {
getDicts(row.parts[1]).then((res) => {
row.parts[2] = ''
this.$set(row, 'third', res.data)
})
},
//
changeThirdType(row) {
let value = row.third.find(item => item.dictValue == row.parts[2]).remark
if (value) {
row.content = value
}
},
//
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
console.log(this.ruleForm);
if (this.ruleForm.id) {
putDFInspectionProject(this.ruleForm).then(() => {
this.getTableData()
this.dialogVisible = false
this.$message.success('更新成功');
})
} else {
postDFInspectionProject(this.ruleForm).then(() => {
this.getTableData()
this.dialogVisible = false
this.$message.success('添加成功');
})
}
} else {
console.log('校验不通过');
return false;
}
});
},
// dialog
closeDialog(ruleForm = 'ruleForm') {
console.log('触发关闭dialog', ruleForm);
this.$refs[ruleForm].resetFields();
this.ruleForm = {
name: '',
type: '',
checkContentType: '',
items: [
{
content: '',
parts: ['', '', '']
}
]
}
},
//
getTableData() {
this.searchInput = '',
this.searchType = 3,
postDFInspectionProjectList({
data: {
timeView: {
timeField: "create_time"
},
},
cv: {
name: "name",
type: "like"
},
pageSize: this.pageData.pageSize,
pageNum: this.pageData.pageNum
}).then((res) => {
if (res) {
this.tableData = res.records
this.pageData.total = res.total
}
console.log('🚀表格数据🚀', res)
})
}
},
mounted() {
//
this.getTableData()
//
getDicts('xs_classfy').then((res) => {
if (res.data && Array.isArray(res.data)) {
res.data.forEach(element => {
element.dictValue = Number(element.dictValue)
});
console.log('🚀res.data🚀', res.data)
this.examType = res.data
}
})
//
getDicts('df_xs_c_classfy').then((res) => {
if (res.data && Array.isArray(res.data)) {
this.firstType = res.data
}
})
},
}
</script>
<template>
<div class="body">
<div class="top-title">
基础信息管理
</div>
<div class="table-box">
<div class="top-search">
<span>巡视检查名称</span>
<el-input class="search-input" v-model="searchInput" placeholder="请输入巡视检查名称" />
<span>巡查类型</span>
<el-select v-model="searchType" placeholder="请选择">
<el-option v-for="item in examType" :label="item.dictLabel" :value="item.dictValue" :key="item.id"></el-option>
<el-option label="全部" :value="3"></el-option>
</el-select>
<el-button class="search-btn" type="success" @click="searchTableList()">搜索</el-button>
</div>
<el-button class="search-btn" style=" margin-right: 16px;margin-bottom: 8px; float: right;" type="success"
@click="dialogVisible = true">添加</el-button>
<el-table class="table" height="640" :data="tableData" border>
<el-table-column type="index" align="center" label="序号" width="100">
</el-table-column>
<el-table-column prop="name" align="center" label="巡视检查名称">
</el-table-column>
<el-table-column align="center" label="巡查类型">
<template slot-scope="scope">
<span v-if="examType.length > 0 && scope.row.type !== null">{{ examType.find(item => item.dictValue ==
scope.row.type).dictLabel ||
''
}}</span>
</template>
</el-table-column>
<el-table-column prop="createTime" align="center" sortable label="创建时间">
</el-table-column>
<el-table-column prop="updateTime" align="center" sortable label="更新时间">
</el-table-column>
<el-table-column prop="address" align="center" label="操作">
<template slot-scope="scope">
<el-button style=" margin-right: 16px;" @click="editTableItem(scope.row)" type="text"
size="small">编辑</el-button>
<el-popconfirm confirm-button-text='确定' cancel-button-text='取消' icon="el-icon-info" icon-color="red"
title="确定删除吗?" @confirm="deleteTableItem(scope.row)">
<el-button style="color: red;" type="text" size="small" slot="reference">删除</el-button>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
<el-pagination background class="pagination" style="margin-top: 16px;margin-right: 16px;float: right;"
:current-page="pageData.pageNum" :page-sizes="pageData.pageSizes" layout="total, prev, pager, next, sizes, jumper"
:total="pageData.total" @size-change="getTableData()">
</el-pagination>
</div>
<el-dialog title="新增/编辑巡查项目" @close="closeDialog" :visible.sync="dialogVisible" width="50%">
<div style="display: flex; margin-bottom: 16px;">
<div style="width: 5px; height: 16px; background-color: #31a08e; margin-right: 8px;"></div><span
style="font-weight: 600;">基础信息</span>
</div>
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
<el-form-item label-width="120px" label="巡视检查名称" prop="name">
<el-input style="width: 202px;" v-model="ruleForm.name"></el-input>
</el-form-item>
<el-form-item label-width="120px" label="巡查类型" prop="type">
<el-select v-model="ruleForm.type" placeholder="请选择巡查类型">
<el-option v-for="item in examType" :label="item.dictLabel" :value="item.dictValue"
:key="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label-width="120px" label="巡视检查内容" prop="checkContentType">
<el-select v-model="ruleForm.checkContentType" @change="changeContentType(ruleForm.checkContentType)"
placeholder="请选择巡视检查内容">
<el-option v-for="item in firstType" :label="item.dictLabel" :value="item.dictValue"
:key="item.id"></el-option>
<el-option label="其他" value="2"></el-option>
</el-select>
<span style="margin-left: 8px; color: red;">注意切换选项后检查内容将会清空</span>
</el-form-item>
</el-form>
<el-table class="table" height="350" :data="ruleForm.items" border>
<el-table-column type="index" align="center" label="序号" center width="80">
</el-table-column>
<el-table-column align="center" label="检查项目和内容" v-if="ruleForm.checkContentType != '2'">
<template slot-scope="scope">
<el-select v-model="scope.row.parts[1]" @change="changeSecondType(scope.row)" placeholder="请选择检查项目和内容">
<el-option v-for="item in secondType" :label="item.dictLabel" :value="item.dictValue"
:key="item.id"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column align="center" label="检查部位" v-if="ruleForm.checkContentType != '2'">
<template slot-scope="scope">
<el-select v-model="scope.row.parts[2]" v-if="scope.row.third" @change="changeThirdType(scope.row)"
placeholder="请选择检查部位">
<el-option v-for="item in scope.row.third" :label="item.dictLabel" :value="item.dictValue"
:key="item.id"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column align="center" prop="inspectionContent" label="检查内容">
<template slot-scope="scope">
<el-input maxlength="500" v-model="scope.row.content"></el-input>
</template>
</el-table-column>
<el-table-column prop="address" align="center" label="操作">
<template slot-scope="scope">
<el-button style="margin-right: 8px;"
v-if="scope.$index == ruleForm.items.length - 1 && ruleForm.items.length < 50"
@click="addPatrolItem(ruleForm.checkContentType)" type="text" size="small">添加</el-button>
<el-popconfirm v-if="ruleForm.items.length >= 2" confirm-button-text='确定' cancel-button-text='取消'
icon="el-icon-info" icon-color="red" title="确定删除吗?" @confirm="deletePatrolItem(scope.$index)">
<el-button slot="reference" style="color: red;" type="text" size="small">删除</el-button>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
<div slot="footer" class="dialog-footer">
<el-button size="mini" @click="dialogVisible = false"> </el-button>
<el-button size="mini" type="primary" @click="submitForm('ruleForm')">保存</el-button>
</div>
</el-dialog>
</div>
</template>
<style scoped lang="less">
.body {
width: 100%;
min-height: calc(100vh - 56px);
margin-left: 24px;
.top-title {
height: 40px;
background-color: white;
display: flex;
padding-left: 16px;
align-items: center;
font-weight: 600;
}
.table-box {
width: 100%;
min-height: calc(100vh - 56px - 64px);
margin-top: 24px;
padding: 16px;
background-color: white;
.top-search {
display: flex;
align-items: center;
margin-bottom: 8px;
.search-input {
width: 300px;
margin-right: 10px;
}
}
.search-btn {
margin-left: 10px;
background-color: #37b29e;
border: none;
&:hover {
background-color: #5ac6b9;
}
&:active {
background-color: #2b8070;
}
;
}
.table {
height: calc(680px - 34px);
}
}
}
</style>

22
src/views/runManage/engineering/inspectionItems/Reservoir.vue

@ -0,0 +1,22 @@
<!-- 巡查项目管理-水库 -->
<script>
export default {
name: '',
data() {
return {
}
},
methods: {
}
}
</script>
<template>
<div>
水库
</div>
</template>
<style scoped lang="less"></style>

399
src/views/runManage/engineering/inspectionItems/Sluice.vue

@ -0,0 +1,399 @@
<!-- 巡查项目管理-水闸 -->
<script>
import { getDicts, postSZInspectionProjectList, postSZInspectionProject, putSZInspectionProject, deleteSZInspectionProject, getSZInspectionProject } from '@/api/management'
export default {
name: 'InspectionItems',
data() {
return {
searchInput: '',
searchType: 3,
dialogVisible: false,
ContentType: '',
firstType: [], //
secondType: [], //
examType: [], //
tableData: [], //
pageData: {
pageNum: 1, //
pageSize: 10, //
pageSizes: [10, 20, 50, 100],
total: 0 //
},
ruleForm: {
name: '',
type: '',
checkContentType: '',
items: [
],
},
rules: {
name: [
{ required: true, message: '请输入巡视检查名称', trigger: 'blur' },
{ max: 50, message: '名称最长为50个字符', trigger: 'blur' }
],
type: [
{ required: true, message: '请选择巡查类型', trigger: 'change' }
],
checkContentType: [
{ required: true, message: '请选择巡视检查内容', trigger: 'change' }
]
}
}
},
methods: {
//
searchTableList() {
postSZInspectionProjectList({
data: {
timeView: {
timeField: "create_time"
},
type: this.searchType == 3 ? '' : this.searchType
},
cv: {
name: "name",
type: "like",
value: this.searchInput
},
pageSize: this.pageData.pageSize,
pageNum: this.pageData.pageNum
}).then((res) => {
if (res) {
this.tableData = res.records
this.pageData.total = res.total
}
console.log('🚀表格数据🚀', res)
})
},
//
editTableItem(row) {
getSZInspectionProject(row.id).then((res) => {
console.log('🚀res🚀', res.data)
this.ruleForm = res.data
this.ruleForm.checkContentType = res.data.items[0].parts[0]
getDicts(res.data.items[0].parts[0]).then((res) => {
this.secondType = res.data
console.log('🚀一级🚀', res.data)
})
this.ruleForm.items.forEach(element => {
getDicts(element.parts[1]).then((res) => {
this.$set(element, 'third', res.data)
})
});
this.dialogVisible = true
console.log('🚀this.ruleForm🚀', this.ruleForm)
})
},
//
deleteTableItem(row) {
deleteSZInspectionProject(row.id).then((res) => {
this.getTableData()
this.$message.success('删除成功');
})
},
//
addPatrolItem(checkContentType) {
console.log('🚀checkContentType🚀', checkContentType)
this.ruleForm.items.push(
{
content: '',
parts: [checkContentType, '', '']
}
)
},
//
deletePatrolItem(index) {
this.ruleForm.items.splice(index, 1)
},
//
changeContentType(dictValue) {
getDicts(dictValue).then((res) => {
this.secondType = res.data
console.log('🚀一级🚀', res.data)
})
this.ruleForm.items = [
{
content: '',
parts: [this.ruleForm.checkContentType]
}
]
},
//
changeSecondType(row) {
getDicts(row.parts[1]).then((res) => {
console.log('🚀二级🚀', res.data)
row.parts[2] = ''
this.$set(row, 'third', res.data)
})
},
//
changeThirdType(row) {
let value = row.third.find(item => item.dictValue == row.parts[2]).remark
if (value) {
row.content = value
}
},
//
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
console.log(this.ruleForm);
if (this.ruleForm.id) {
putSZInspectionProject(this.ruleForm).then(() => {
this.getTableData()
this.dialogVisible = false
this.$message.success('更新成功');
})
} else {
postSZInspectionProject(this.ruleForm).then(() => {
this.getTableData()
this.dialogVisible = false
this.$message.success('添加成功');
})
}
} else {
console.log('校验不通过');
return false;
}
});
},
// dialog
closeDialog(ruleForm = 'ruleForm') {
console.log('触发关闭dialog', ruleForm);
this.$refs[ruleForm].resetFields();
this.ruleForm = {
name: '',
type: '',
checkContentType: '',
items: [
{
content: '',
parts: ['', '', '']
}
]
}
},
//
getTableData() {
this.searchInput = '',
this.searchType = 3,
postSZInspectionProjectList({
data: {
timeView: {
timeField: "create_time"
},
},
cv: {
name: "name",
type: "like"
},
pageSize: this.pageData.pageSize,
pageNum: this.pageData.pageNum
}).then((res) => {
if (res) {
this.tableData = res.records
this.pageData.total = res.total
}
console.log('🚀表格数据🚀', res)
})
}
},
mounted() {
//
this.getTableData()
//
getDicts('xs_classfy').then((res) => {
if (res.data && Array.isArray(res.data)) {
res.data.forEach(element => {
element.dictValue = Number(element.dictValue)
});
console.log('🚀res.data🚀', res.data)
this.examType = res.data
}
})
//
getDicts('df_xs_c_classfy').then((res) => {
if (res.data && Array.isArray(res.data)) {
this.firstType = res.data
}
})
},
}
</script>
<template>
<div class="body">
<div class="top-title">
基础信息管理
</div>
<div class="table-box">
<div class="top-search">
<span>巡视检查名称</span>
<el-input class="search-input" v-model="searchInput" placeholder="请输入巡视检查名称" />
<span>巡查类型</span>
<el-select v-model="searchType" placeholder="请选择">
<el-option v-for="item in examType" :label="item.dictLabel" :value="item.dictValue" :key="item.id"></el-option>
<el-option label="全部" :value="3"></el-option>
</el-select>
<el-button class="search-btn" type="success" @click="searchTableList()">搜索</el-button>
</div>
<el-button class="search-btn" style=" margin-right: 16px;margin-bottom: 8px; float: right;" type="success"
@click="dialogVisible = true">添加</el-button>
<el-table class="table" height="640" :data="tableData" border>
<el-table-column type="index" align="center" label="序号" width="100">
</el-table-column>
<el-table-column prop="name" align="center" label="巡视检查名称">
</el-table-column>
<el-table-column align="center" label="巡查类型">
<template slot-scope="scope">
<span v-if="examType.length > 0 && scope.row.type !== null">{{ examType.find(item => item.dictValue ==
scope.row.type).dictLabel ||
''
}}</span>
</template>
</el-table-column>
<el-table-column prop="createTime" align="center" sortable label="创建时间">
</el-table-column>
<el-table-column prop="updateTime" align="center" sortable label="更新时间">
</el-table-column>
<el-table-column prop="address" align="center" label="操作">
<template slot-scope="scope">
<el-button style=" margin-right: 16px;" @click="editTableItem(scope.row)" type="text"
size="small">编辑</el-button>
<el-popconfirm confirm-button-text='确定' cancel-button-text='取消' icon="el-icon-info" icon-color="red"
title="确定删除吗?" @confirm="deleteTableItem(scope.row)">
<el-button style="color: red;" type="text" size="small" slot="reference">删除</el-button>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
<el-pagination background class="pagination" style="margin-top: 16px;margin-right: 16px;float: right;"
:current-page="pageData.pageNum" :page-sizes="pageData.pageSizes" layout="total, prev, pager, next, sizes, jumper"
:total="pageData.total" @size-change="getTableData()">
</el-pagination>
</div>
<el-dialog title="新增/编辑巡查项目" @close="closeDialog" :visible.sync="dialogVisible" width="50%">
<div style="display: flex; margin-bottom: 16px;">
<div style="width: 5px; height: 16px; background-color: #31a08e; margin-right: 8px;"></div><span
style="font-weight: 600;">基础信息</span>
</div>
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
<el-form-item label-width="120px" label="巡视检查名称" prop="name">
<el-input style="width: 202px;" v-model="ruleForm.name"></el-input>
</el-form-item>
<el-form-item label-width="120px" label="巡查类型" prop="type">
<el-select v-model="ruleForm.type" placeholder="请选择巡查类型">
<el-option v-for="item in examType" :label="item.dictLabel" :value="item.dictValue"
:key="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label-width="120px" label="巡视检查内容" prop="checkContentType">
<el-select v-model="ruleForm.checkContentType" @change="changeContentType(ruleForm.checkContentType)"
placeholder="请选择巡视检查内容">
<el-option v-for="item in firstType" :label="item.dictLabel" :value="item.dictValue"
:key="item.id"></el-option>
<el-option label="其他" value="2"></el-option>
</el-select>
<span style="margin-left: 8px; color: red;">注意切换选项后检查内容将会清空</span>
</el-form-item>
</el-form>
<el-table class="table" height="350" :data="ruleForm.items" border>
<el-table-column type="index" align="center" label="序号" center width="80">
</el-table-column>
<el-table-column align="center" label="检查项目和内容" v-if="ruleForm.checkContentType != '2'">
<template slot-scope="scope">
<el-select v-model="scope.row.parts[1]" @change="changeSecondType(scope.row)" placeholder="请选择检查项目和内容">
<el-option v-for="item in secondType" :label="item.dictLabel" :value="item.dictValue"
:key="item.id"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column align="center" label="检查部位" v-if="ruleForm.checkContentType != '2'">
<template slot-scope="scope">
<el-select v-model="scope.row.parts[2]" @change="changeThirdType(scope.row)" placeholder="请选择检查部位">
<el-option v-for="item in scope.row.third" :label="item.dictLabel" :value="item.dictValue"
:key="item.id"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column align="center" prop="inspectionContent" label="检查内容">
<template slot-scope="scope">
<el-input maxlength="500" v-model="scope.row.content"></el-input>
</template>
</el-table-column>
<el-table-column prop="address" align="center" label="操作">
<template slot-scope="scope">
<el-button style="margin-right: 8px;"
v-if="scope.$index == ruleForm.items.length - 1 && ruleForm.items.length < 50"
@click="addPatrolItem(ruleForm.checkContentType)" type="text" size="small">添加</el-button>
<el-popconfirm v-if="ruleForm.items.length >= 2" confirm-button-text='确定' cancel-button-text='取消'
icon="el-icon-info" icon-color="red" title="确定删除吗?" @confirm="deletePatrolItem(scope.$index)">
<el-button slot="reference" style="color: red;" type="text" size="small">删除</el-button>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
<div slot="footer" class="dialog-footer">
<el-button size="mini" @click="dialogVisible = false"> </el-button>
<el-button size="mini" type="primary" @click="submitForm('ruleForm')">保存</el-button>
</div>
</el-dialog>
</div>
</template>
<style scoped lang="less">
.body {
width: 100%;
min-height: calc(100vh - 56px);
margin-left: 24px;
.top-title {
height: 40px;
background-color: white;
display: flex;
padding-left: 16px;
align-items: center;
font-weight: 600;
}
.table-box {
width: 100%;
min-height: calc(100vh - 56px - 64px);
margin-top: 24px;
padding: 16px;
background-color: white;
.top-search {
display: flex;
align-items: center;
margin-bottom: 8px;
.search-input {
width: 300px;
margin-right: 10px;
}
}
.search-btn {
margin-left: 10px;
background-color: #37b29e;
border: none;
&:hover {
background-color: #5ac6b9;
}
&:active {
background-color: #2b8070;
}
;
}
.table {
height: calc(680px - 34px);
}
}
}
</style>

29
src/views/runManage/engineering/inspectionItems/index.vue

@ -0,0 +1,29 @@
<!-- 巡查项目管理 -->
<script>
import Dike from './Dike.vue'
import Reservoir from './Reservoir.vue'
import Sluice from './Sluice.vue'
export default {
name: 'InspectionItems',
components: {
Reservoir, //
Sluice, //
Dike, //
},
computed: {
selectTab() {
return this.$store.state.topTab.selectTab
},
}
}
</script>
<template>
<div>
<Reservoir v-if="selectTab == 0"></Reservoir>
<Sluice v-if="selectTab == 1"></Sluice>
<Dike v-if="selectTab == 2"></Dike>
</div>
</template>
<style scoped lang="less"></style>

397
src/views/runManage/engineering/inspectionPlan/Dike.vue

@ -0,0 +1,397 @@
<!-- 巡查计划管理-堤防 -->
<script>
import { getDicts, postDFInspectionPlanlist, postDFInspectionPlan, putDFInspectionPlan, postDFInspectionProjectList, getDFInspectionPlan, deleteDFInspectionPlan, listUser } from '@/api/management'
export default {
name: 'InspectionItems',
data() {
return {
searchInput: '',
dialogVisible: false,
patrolType: [], //
personnelList: [], //
examType: [], //
tableData: [], //
patrolTableData: [], //
pageData: {
pageNum: 1, //
pageSize: 10, //
pageSizes: [10, 20, 50, 100],
total: 0 //
},
ruleForm: {
name: '',
type: '',
xcId: '',
frequency: '',
cycleType: '',
reminderTime: '',
selectUser: [],
operators: [],
otherConfig: {
week: '',
time: ''
}
},
rules: {
name: [
{ required: true, message: '请输入计划名称', trigger: 'blur' },
{ max: 50, message: '名称最长为50个字符', trigger: 'blur' }
],
type: [
{ required: true, message: '请选择巡查类型', trigger: 'change' }
],
xcId: [
{ required: true, message: '请选择巡查项目名称', trigger: 'change' }
],
selectUser: [
{ required: true, message: '请选择巡查人员', trigger: 'change' }
],
cycleType: [
{ required: true, message: '请选择巡查周期', trigger: 'change' }
]
}
}
},
methods: {
//
editTableItem(row) {
getDFInspectionPlan(row.id).then((res) => {
// select
if (res.data.otherConfig.selectUser) {
this.personnelList = []
res.data.otherConfig.selectUser.forEach(element => {
listUser({
data: {
timeView: {
timeField: "create_time"
},
},
cv: {
name: "nickName",
type: "like",
value: element.nickName
},
pageSize: 10,
pageNum: 1
}).then((res) => {
this.personnelList.push(res.records[0])
})
});
}
this.ruleForm = res.data
this.ruleForm.type = res.data.type.toString()
if (res.data.cycleType) {
this.ruleForm.cycleType = res.data.cycleType.toString()
}
this.changePatrolType(res.data, false)
this.dialogVisible = true
})
},
//
deleteTableItem(row) {
deleteDFInspectionPlan(row.id).then((res) => {
this.getTableData()
this.$message.success('删除成功');
})
},
// 线
routeSetting(row) {
this.$router.push({
path: '/patrolRouteSettings',
query: { id: row.id, name: row.name, editor: true }
})
},
//
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
let user = []
this.ruleForm.otherConfig.selectUser.forEach(element => {
let a = {
name: element.nickName,
uid: element.id
}
user.push(a)
});
this.ruleForm.operators = user
if (this.ruleForm.id) {
putDFInspectionPlan(this.ruleForm).then((res) => {
this.getTableData()
this.dialogVisible = false
this.$message.success('更新成功');
})
} else {
postDFInspectionPlan(this.ruleForm).then((res) => {
this.getTableData()
this.dialogVisible = false
this.$message.success('添加成功');
})
}
} else {
console.log('校验不通过');
return false;
}
});
},
//
changePatrolType(ruleForm, reset) {
if (reset) {
this.$set(ruleForm, 'xcId', '')
}
postDFInspectionProjectList({
data: {
timeView: {
timeField: "create_time"
},
type: ruleForm.type
},
cv: {
name: "name",
type: "like"
},
pageSize: 999,
pageNum: 1
}).then((res) => {
this.patrolTableData = res.records
})
},
//
searchUser(e) {
listUser({
data: {
timeView: {
timeField: "create_time"
},
},
cv: {
name: "nickName",
type: "like",
value: e
},
pageSize: 100,
pageNum: 1
}).then((res) => {
this.personnelList = res.records
})
},
// dialog
closeDialog(ruleForm = 'ruleForm') {
console.log('触发关闭dialog', ruleForm);
this.$refs[ruleForm].resetFields();
this.patrolTableData = []
this.ruleForm = {
name: '',
type: '',
xcId: '',
frequency: '',
cycleType: '',
reminderTime: '',
operators: [],
otherConfig: {
week: '',
time: '',
selectUser: [],
}
}
},
//
getTableData(search) {
postDFInspectionPlanlist({
data: {
timeView: {
timeField: "create_time"
}
},
cv: {
name: "name",
type: "like",
value: search
},
pageSize: this.pageData.pageSize,
pageNum: this.pageData.pageNum
}).then((res) => {
if (res) {
this.tableData = res.records
this.pageData.total = res.total
}
console.log('🚀res1🚀', res)
})
}
},
mounted() {
//
this.getTableData()
getDicts('xs_classfy').then((res) => {
if (res.data && Array.isArray(res.data)) {
res.data.forEach(element => {
element.dictValue = element.dictValue
});
this.examType = res.data
}
})
getDicts('xs_cycle_type').then((res) => {
console.log('🚀res.data🚀', res.data)
this.patrolType = res.data
})
},
}
</script>
<template>
<div class="body">
<div class="top-title">
基础信息管理
</div>
<div class="table-box">
<div class="top-search">
<span>计划名称</span>
<el-input class="search-input" v-model="searchInput" placeholder="请输入计划名称" />
<el-button class="search-btn" type="success" @click="getTableData(searchInput)">搜索</el-button>
</div>
<el-button class="search-btn" style=" margin-right: 16px;margin-bottom: 8px; float: right;" type="success"
@click="dialogVisible = true">添加</el-button>
<el-table class="table" height="640" :data="tableData" border>
<el-table-column type="index" align="center" label="序号" width="100" />
<el-table-column prop="name" align="center" label="计划名称" />
<el-table-column align="center" label="巡查类型">
<template slot-scope="scope">
<span v-if="examType.length > 0">{{ examType.find(item => item.dictValue == scope.row.type).dictLabel ||
''
}}</span>
</template>
</el-table-column>
<el-table-column prop="createTime" align="center" sortable label="最近巡查时间" />
<el-table-column prop="createTime" align="center" sortable label="创建时间" />
<el-table-column prop="updateTime" align="center" sortable label="更新时间" />
<el-table-column prop="address" align="center" label="操作">
<template slot-scope="scope">
<el-button style=" margin-right: 16px;" @click="editTableItem(scope.row)" type="text"
size="small">编辑</el-button>
<el-popconfirm confirm-button-text='确定' cancel-button-text='取消' icon="el-icon-info" icon-color="red"
title="确定删除吗?" @confirm="deleteTableItem(scope.row)">
<el-button style="color: red;margin-right: 16px;" type="text" size="small" slot="reference">删除</el-button>
</el-popconfirm>
<el-button @click="routeSetting(scope.row)" type="text" size="small">路线设置</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination background class="pagination" style="margin-top: 16px;margin-right: 16px;float: right;"
:current-page="pageData.pageNum" :page-sizes="pageData.pageSizes" layout="total, prev, pager, next, sizes, jumper"
:total="pageData.total" @size-change="getTableData()">
</el-pagination>
</div>
<el-dialog title="新增/编辑巡查计划" @close="closeDialog" :visible.sync="dialogVisible" width="50%">
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" class="demo-ruleForm">
<el-form-item label-width="120px" label="计划名称" prop="name">
<el-input style="width: 202px;" v-model="ruleForm.name"></el-input>
</el-form-item>
<el-form-item label-width="120px" label="巡查类型" prop="type">
<el-select v-model="ruleForm.type" placeholder="请选择巡查类型" @change="changePatrolType(ruleForm, true)">
<el-option v-for="item in examType" :label="item.dictLabel" :value="item.dictValue"
:key="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label-width="120px" label="巡查项目名称" prop="xcId">
<el-select v-model="ruleForm.xcId" placeholder="请选择巡查项目名称">
<el-option v-for="item in patrolTableData" :label="item.name" :value="item.id" :key="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item v-if="ruleForm.type == 0" label-width="120px" label="巡查周期" prop="cycleType">
<el-input style="width: 202px;" v-model="ruleForm.frequency"></el-input>
/
<el-select v-model="ruleForm.cycleType" placeholder="请选择日期">
<el-option v-for="item in patrolType" :label="item.dictLabel" :value="item.dictValue"
:key="item.id"></el-option>
</el-select> /
</el-form-item>
<el-form-item v-else label-width="120px" label="检查日期" prop="reminderTime">
<el-date-picker v-model="ruleForm.otherConfig.time" type="date" value-format="yyyy-MM-dd" placeholder="选择日期">
</el-date-picker>
</el-form-item>
<el-form-item label-width="120px" label="消息提醒" prop="reminderTime">
<el-radio-group v-if="ruleForm.cycleType == 1 && ruleForm.type == 0" v-model="ruleForm.otherConfig.week">
<el-radio :label="1">星期一</el-radio>
<el-radio :label="2">星期二</el-radio>
<el-radio :label="3">星期三</el-radio>
<el-radio :label="4">星期四</el-radio>
<el-radio :label="5">星期五</el-radio>
<el-radio :label="6">星期六</el-radio>
<el-radio :label="7">星期日</el-radio>
</el-radio-group>
<el-time-picker v-if="ruleForm.cycleType != 2 && ruleForm.type == 0" v-model="ruleForm.reminderTime"
value-format="yyyy-MM-dd hh:mm:ss" placeholder="请选择时间点" />
<el-date-picker v-if="ruleForm.cycleType == 2 || ruleForm.type != 0" v-model="ruleForm.reminderTime"
value-format="yyyy-MM-dd hh:mm:ss" type="datetime" placeholder="选择日期时间" />
</el-form-item>
<el-form-item label-width="120px" label="责任人" prop="operators">
<el-select v-model="ruleForm.otherConfig.selectUser" multiple filterable remote :remote-method="searchUser"
value-key="id" placeholder="请输入关键词搜索用户" prop="selectUser">
<el-option v-for="item in personnelList" :key="item.id" :label="item.nickName" :value="item">
</el-option>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button size="mini" @click="dialogVisible = false"> </el-button>
<el-button size="mini" type="primary" @click="submitForm('ruleForm')">保存</el-button>
</div>
</el-dialog>
</div>
</template>
<style scoped lang="less">
.body {
width: 100%;
min-height: calc(100vh - 56px);
margin-left: 24px;
.top-title {
height: 40px;
background-color: white;
display: flex;
padding-left: 16px;
align-items: center;
font-weight: 600;
}
.table-box {
width: 100%;
min-height: calc(100vh - 56px - 64px);
margin-top: 24px;
padding: 16px;
background-color: white;
.top-search {
display: flex;
align-items: center;
margin-bottom: 8px;
.search-input {
width: 300px;
margin-right: 10px;
}
}
.search-btn {
margin-left: 10px;
background-color: #37b29e;
border: none;
&:hover {
background-color: #5ac6b9;
}
&:active {
background-color: #2b8070;
}
;
}
.table {
height: calc(680px - 34px);
}
}
}
</style>

22
src/views/runManage/engineering/inspectionPlan/Reservoir.vue

@ -0,0 +1,22 @@
<!-- 巡查计划管理-水库 -->
<script>
export default {
name: '',
data() {
return {
}
},
methods: {
}
}
</script>
<template>
<div>
水库
</div>
</template>
<style scoped lang="less"></style>

399
src/views/runManage/engineering/inspectionPlan/Sluice.vue

@ -0,0 +1,399 @@
<!-- 巡查计划管理-水闸 -->
<script>
import { getDicts, postSZInspectionPlanlist, postSZInspectionPlan, putSZInspectionPlan, postSZInspectionProjectList, getSZInspectionPlan, deleteSZInspectionPlan, listUser } from '@/api/management'
export default {
name: 'InspectionItems',
data() {
return {
searchInput: '',
dialogVisible: false,
patrolType: [], //
personnelList: [], //
examType: [], //
tableData: [], //
patrolTableData: [], //
pageData: {
pageNum: 1, //
pageSize: 10, //
pageSizes: [10, 20, 50, 100],
total: 0 //
},
ruleForm: {
name: '',
type: '',
xcId: '',
frequency: '',
cycleType: '',
reminderTime: '',
selectUser: [],
operators: [],
otherConfig: {
week: '',
time: ''
}
},
rules: {
name: [
{ required: true, message: '请输入计划名称', trigger: 'blur' },
{ max: 50, message: '名称最长为50个字符', trigger: 'blur' }
],
type: [
{ required: true, message: '请选择巡查类型', trigger: 'change' }
],
xcId: [
{ required: true, message: '请选择巡查项目名称', trigger: 'change' }
],
selectUser: [
{ required: true, message: '请选择巡查人员', trigger: 'change' }
],
cycleType: [
{ required: true, message: '请选择巡查周期', trigger: 'change' }
]
}
}
},
methods: {
//
editTableItem(row) {
getSZInspectionPlan(row.id).then((res) => {
// select
if (res.data.otherConfig.selectUser) {
this.personnelList = []
res.data.otherConfig.selectUser.forEach(element => {
listUser({
data: {
timeView: {
timeField: "create_time"
},
},
cv: {
name: "nickName",
type: "like",
value: element.nickName
},
pageSize: 10,
pageNum: 1
}).then((res) => {
this.personnelList.push(res.records[0])
})
});
}
this.ruleForm = res.data
this.ruleForm.type = res.data.type.toString()
if (res.data.cycleType) {
this.ruleForm.cycleType = res.data.cycleType.toString()
}
this.changePatrolType(res.data, false)
this.dialogVisible = true
})
},
//
deleteTableItem(row) {
deleteSZInspectionPlan(row.id).then((res) => {
this.getTableData()
this.$message.success('删除成功');
})
},
// 线
routeSetting(row) {
this.$router.push({
path: '/patrolRouteSettings',
query: { id: row.id, name: row.name, editor: true }
})
},
//
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
let user = []
this.ruleForm.otherConfig.selectUser.forEach(element => {
let a = {
name: element.nickName,
uid: element.id
}
user.push(a)
});
this.ruleForm.operators = user
if (this.ruleForm.id) {
putSZInspectionPlan(this.ruleForm).then((res) => {
this.getTableData()
this.dialogVisible = false
this.$message.success('更新成功');
})
} else {
postSZInspectionPlan(this.ruleForm).then((res) => {
this.getTableData()
this.dialogVisible = false
this.$message.success('添加成功');
})
}
} else {
console.log('校验不通过');
return false;
}
});
},
//
changePatrolType(ruleForm, clear) {
if (clear) {
console.log('清空');
this.ruleForm.frequency = ''
this.ruleForm.cycleType = ''
this.ruleForm.otherConfig.time = ''
this.$set(ruleForm, 'xcId', '')
}
postSZInspectionProjectList({
data: {
timeView: {
timeField: "create_time"
},
type: ruleForm.type
},
cv: {
name: "name",
type: "like"
},
pageSize: 999,
pageNum: 1
}).then((res) => {
this.patrolTableData = res.records
})
},
//
searchUser(e) {
listUser({
data: {
timeView: {
timeField: "create_time"
},
},
cv: {
name: "nickName",
type: "like",
value: e
},
pageSize: 100,
pageNum: 1
}).then((res) => {
this.personnelList = res.records
})
},
// dialog
closeDialog(ruleForm = 'ruleForm') {
this.$refs[ruleForm].resetFields();
this.ruleForm = {
name: '',
type: '',
xcId: '',
frequency: '',
cycleType: '',
reminderTime: '',
operators: [],
otherConfig: {
week: '',
time: '',
selectUser: [],
}
}
this.patrolTableData = []
},
//
getTableData(search) {
postSZInspectionPlanlist({
data: {
timeView: {
timeField: "create_time"
}
},
cv: {
name: "name",
type: "like",
value: search
},
pageSize: this.pageData.pageSize,
pageNum: this.pageData.pageNum
}).then((res) => {
if (res) {
this.tableData = res.records
this.pageData.total = res.total
}
})
}
},
mounted() {
//
this.getTableData()
getDicts('xs_classfy').then((res) => {
if (res.data && Array.isArray(res.data)) {
res.data.forEach(element => {
element.dictValue = element.dictValue
});
this.examType = res.data
}
})
getDicts('xs_cycle_type').then((res) => {
console.log('🚀res.data🚀', res.data)
this.patrolType = res.data
})
},
}
</script>
<template>
<div class="body">
<div class="top-title">
基础信息管理
</div>
<div class="table-box">
<div class="top-search">
<span>计划名称</span>
<el-input class="search-input" v-model="searchInput" placeholder="请输入计划名称" />
<el-button class="search-btn" type="success" @click="getTableData(searchInput)">搜索</el-button>
</div>
<el-button class="search-btn" style=" margin-right: 16px;margin-bottom: 8px; float: right;" type="success"
@click="dialogVisible = true">添加</el-button>
<el-table class="table" height="640" :data="tableData" border>
<el-table-column type="index" align="center" label="序号" width="100" />
<el-table-column prop="name" align="center" label="计划名称" />
<el-table-column align="center" label="巡查类型">
<template slot-scope="scope">
<span v-if="examType.length > 0">{{ examType.find(item => item.dictValue == scope.row.type).dictLabel ||
''
}}</span>
</template>
</el-table-column>
<el-table-column prop="createTime" align="center" sortable label="最近巡查时间" />
<el-table-column prop="createTime" align="center" sortable label="创建时间" />
<el-table-column prop="updateTime" align="center" sortable label="更新时间" />
<el-table-column prop="address" align="center" label="操作">
<template slot-scope="scope">
<el-button style=" margin-right: 16px;" @click="editTableItem(scope.row)" type="text"
size="small">编辑</el-button>
<el-popconfirm confirm-button-text='确定' cancel-button-text='取消' icon="el-icon-info" icon-color="red"
title="确定删除吗?" @confirm="deleteTableItem(scope.row)">
<el-button style="color: red;margin-right: 16px;" type="text" size="small" slot="reference">删除</el-button>
</el-popconfirm>
<el-button @click="routeSetting(scope.row)" type="text" size="small">路线设置</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination background class="pagination" style="margin-top: 16px;margin-right: 16px;float: right;"
:current-page="pageData.pageNum" :page-sizes="pageData.pageSizes" layout="total, prev, pager, next, sizes, jumper"
:total="pageData.total" @size-change="getTableData()">
</el-pagination>
</div>
<el-dialog title="新增/编辑巡查计划" @close="closeDialog" :visible.sync="dialogVisible" width="50%">
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" class="demo-ruleForm">
<el-form-item label-width="120px" label="计划名称" prop="name">
<el-input style="width: 202px;" v-model="ruleForm.name"></el-input>
</el-form-item>
<el-form-item label-width="120px" label="巡查类型" prop="type">
<el-select v-model="ruleForm.type" placeholder="请选择巡查类型" @change="changePatrolType(ruleForm, true)">
<el-option v-for="item in examType" :label="item.dictLabel" :value="item.dictValue"
:key="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label-width="120px" label="巡查项目名称" prop="xcId">
<el-select v-model="ruleForm.xcId" placeholder="请选择巡查项目名称">
<el-option v-for="item in patrolTableData" :label="item.name" :value="item.id" :key="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item v-if="ruleForm.type == 0" label-width="120px" label="巡查周期" prop="cycleType">
<el-input style="width: 202px;" v-model="ruleForm.frequency"></el-input>
/
<el-select v-model="ruleForm.cycleType" placeholder="请选择日期">
<el-option v-for="item in patrolType" :label="item.dictLabel" :value="item.dictValue"
:key="item.id"></el-option>
</el-select> /
</el-form-item>
<el-form-item v-else label-width="120px" label="检查日期" prop="reminderTime">
<el-date-picker v-model="ruleForm.otherConfig.time" type="date" value-format="yyyy-MM-dd" placeholder="选择日期">
</el-date-picker>
</el-form-item>
<el-form-item label-width="120px" label="消息提醒" prop="reminderTime">
<el-radio-group v-if="ruleForm.cycleType == 1 && ruleForm.type == 0" v-model="ruleForm.otherConfig.week">
<el-radio :label="1">星期一</el-radio>
<el-radio :label="2">星期二</el-radio>
<el-radio :label="3">星期三</el-radio>
<el-radio :label="4">星期四</el-radio>
<el-radio :label="5">星期五</el-radio>
<el-radio :label="6">星期六</el-radio>
<el-radio :label="7">星期日</el-radio>
</el-radio-group>
<el-time-picker v-if="ruleForm.cycleType != 2 && ruleForm.type == 0" v-model="ruleForm.reminderTime"
value-format="yyyy-MM-dd hh:mm:ss" placeholder="请选择时间点" />
<el-date-picker v-if="ruleForm.cycleType == 2 || ruleForm.type != 0" v-model="ruleForm.reminderTime"
value-format="yyyy-MM-dd hh:mm:ss" type="datetime" placeholder="选择日期时间" />
</el-form-item>
<el-form-item label-width="120px" label="责任人" prop="operators">
<el-select v-model="ruleForm.otherConfig.selectUser" multiple filterable remote :remote-method="searchUser"
value-key="id" placeholder="请输入关键词搜索用户" prop="selectUser">
<el-option v-for="item in personnelList" :key="item.id" :label="item.nickName" :value="item">
</el-option>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button size="mini" @click="dialogVisible = false"> </el-button>
<el-button size="mini" type="primary" @click="submitForm('ruleForm')">保存</el-button>
</div>
</el-dialog>
</div>
</template>
<style scoped lang="less">
.body {
width: 100%;
min-height: calc(100vh - 56px);
margin-left: 24px;
.top-title {
height: 40px;
background-color: white;
display: flex;
padding-left: 16px;
align-items: center;
font-weight: 600;
}
.table-box {
width: 100%;
min-height: calc(100vh - 56px - 64px);
margin-top: 24px;
padding: 16px;
background-color: white;
.top-search {
display: flex;
align-items: center;
margin-bottom: 8px;
.search-input {
width: 300px;
margin-right: 10px;
}
}
.search-btn {
margin-left: 10px;
background-color: #37b29e;
border: none;
&:hover {
background-color: #5ac6b9;
}
&:active {
background-color: #2b8070;
}
;
}
.table {
height: calc(680px - 34px);
}
}
}
</style>

29
src/views/runManage/engineering/inspectionPlan/index.vue

@ -0,0 +1,29 @@
<!-- 巡查计划管理 -->
<script>
import Dike from './Dike.vue'
import Reservoir from './Reservoir.vue'
import Sluice from './Sluice.vue'
export default {
name: 'InspectionItems',
components: {
Reservoir, //
Sluice, //
Dike, //
},
computed: {
selectTab() {
return this.$store.state.topTab.selectTab
},
}
}
</script>
<template>
<div>
<Reservoir v-if="selectTab == 0"></Reservoir>
<Sluice v-if="selectTab == 1"></Sluice>
<Dike v-if="selectTab == 2"></Dike>
</div>
</template>
<style scoped lang="less"></style>

170
src/views/runManage/engineering/inspectionRecords/Dike.vue

@ -0,0 +1,170 @@
<!-- 巡查记录-堤防 -->
<script>
import { postDFInspectionRecordsList, } from '@/api/management'
export default {
name: 'InspectionItems',
data() {
return {
searchInput: '',
tableData: [], //
pageData: {
pageNum: 1, //
pageSize: 10, //
pageSizes: [10, 20, 50, 100],
total: 0 //
},
}
},
methods: {
// 线
routeSetting(row) {
console.log('🚀row🚀', row)
this.$router.push({
path: '/patrolRouteSettings',
query: { name: row.name, editor: false,id:row.id }
})
},
getTableData(search) {
postDFInspectionRecordsList({
data: {
timeView: {
timeField: "create_time"
}
},
cv: {
name: "name",
type: "like",
value: search
},
pageSize: this.pageData.pageSize,
pageNum: this.pageData.pageNum
}).then((res) => {
if (res) {
this.tableData = res.records
this.pageData.total = res.total
}
console.log('🚀列表数据🚀', res)
})
}
},
mounted() {
//
this.getTableData()
},
}
</script>
<template>
<div class="body">
<div class="top-title">
基础信息管理
</div>
<div class="table-box">
<div class="top-search">
<span>巡检记录</span>
<el-input class="search-input" v-model="searchInput" placeholder="请输入巡检记录" />
<el-button class="search-btn" type="success" @click="getTableData(searchInput)">搜索</el-button>
</div>
<el-table class="table" height="690" :data="tableData" border>
<el-table-column type="index" align="center" label="序号" width="100" />
<el-table-column prop="name" align="center" label="巡检记录" />
<el-table-column align="center" label="有无异常">
<template slot-scope="scope">
<div v-if="scope.row.status != 0" style="display: flex; justify-content: center; flex-wrap: wrap;">
<div v-if="scope.row.parts" class="normal">正常</div>
<div v-else v-for="item in scope.row.parts" class="abnormal">{{ item }}</div>
</div>
</template>
</el-table-column>
<el-table-column prop="operatorName" align="center" label="巡查人员" />
<el-table-column prop="status" align="center" label="状态">
<template slot-scope="scope">
<span>{{ scope.row.status === 0 ? '检查中' : '已完成' }}</span>
</template>
</el-table-column>
<el-table-column prop="address" align="center" label="操作">
<template slot-scope="scope">
<el-button @click="routeSetting(scope.row)" type="text" size="small">巡查轨迹</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination background class="pagination" style="margin-top: 16px;margin-right: 16px;float: right;"
:current-page="pageData.pageNum" :page-sizes="pageData.pageSizes" layout="total, prev, pager, next, sizes, jumper"
:total="pageData.total" @size-change="getTableData()">
</el-pagination>
</div>
</div>
</template>
<style scoped lang="less">
.body {
width: 100%;
min-height: calc(100vh - 56px);
margin-left: 24px;
.top-title {
height: 40px;
background-color: white;
display: flex;
padding-left: 16px;
align-items: center;
font-weight: 600;
}
.table-box {
width: 100%;
min-height: calc(100vh - 56px - 64px);
margin-top: 24px;
padding: 16px;
background-color: white;
.top-search {
display: flex;
align-items: center;
margin-bottom: 8px;
.search-input {
width: 300px;
margin-right: 10px;
}
}
.search-btn {
margin-left: 10px;
background-color: #37b29e;
border: none;
&:hover {
background-color: #5ac6b9;
}
&:active {
background-color: #2b8070;
}
;
}
.table {
height: calc(680px - 34px);
.normal {
width: 40px;
border-radius: 5px;
background-color: #ebf7f5;
color: #36b29e;
}
.abnormal {
width: 40px;
border-radius: 5px;
background-color: #feebeb;
color: #d9001b;
margin-right: 10px;
margin-bottom: 10px;
}
}
}
}
</style>

22
src/views/runManage/engineering/inspectionRecords/Reservoir.vue

@ -0,0 +1,22 @@
<!-- 巡查记录-水库 -->
<script>
export default {
name: '',
data() {
return {
}
},
methods: {
}
}
</script>
<template>
<div>
水库
</div>
</template>
<style scoped lang="less"></style>

170
src/views/runManage/engineering/inspectionRecords/Sluice.vue

@ -0,0 +1,170 @@
<!-- 巡查记录-水闸 -->
<script>
import { postSZInspectionRecordsList, } from '@/api/management'
export default {
name: 'InspectionItems',
data() {
return {
searchInput: '',
tableData: [], //
pageData: {
pageNum: 1, //
pageSize: 10, //
pageSizes: [10, 20, 50, 100],
total: 0 //
},
}
},
methods: {
// 线
routeSetting(row) {
console.log('🚀row🚀', row)
this.$router.push({
path: '/patrolRouteSettings',
query: { name: row.name, editor: false, id: row.id }
})
},
getTableData(search) {
postSZInspectionRecordsList({
data: {
timeView: {
timeField: "create_time"
}
},
cv: {
name: "name",
type: "like",
value: search
},
pageSize: this.pageData.pageSize,
pageNum: this.pageData.pageNum
}).then((res) => {
if (res) {
this.tableData = res.records
this.pageData.total = res.total
}
console.log('🚀列表数据🚀', res)
})
}
},
mounted() {
//
this.getTableData()
},
}
</script>
<template>
<div class="body">
<div class="top-title">
基础信息管理
</div>
<div class="table-box">
<div class="top-search">
<span>巡检记录</span>
<el-input class="search-input" v-model="searchInput" placeholder="请输入巡检记录" />
<el-button class="search-btn" type="success" @click="getTableData(searchInput)">搜索</el-button>
</div>
<el-table class="table" height="690" :data="tableData" border>
<el-table-column type="index" align="center" label="序号" width="100" />
<el-table-column prop="name" align="center" label="巡检记录" />
<el-table-column align="center" label="有无异常">
<template slot-scope="scope">
<div v-if="scope.row.status != 0" style="display: flex; justify-content: center; flex-wrap: wrap;">
<div v-if="scope.row.parts" class="normal">正常</div>
<div v-else v-for="item in scope.row.parts" class="abnormal">{{ item }}</div>
</div>
</template>
</el-table-column>
<el-table-column prop="operatorName" align="center" label="巡查人员" />
<el-table-column prop="status" align="center" label="状态">
<template slot-scope="scope">
<span>{{ scope.row.status === 0 ? '检查中' : '已完成' }}</span>
</template>
</el-table-column>
<el-table-column prop="address" align="center" label="操作">
<template slot-scope="scope">
<el-button @click="routeSetting(scope.row)" type="text" size="small">巡查轨迹</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination background class="pagination" style="margin-top: 16px;margin-right: 16px;float: right;"
:current-page="pageData.pageNum" :page-sizes="pageData.pageSizes" layout="total, prev, pager, next, sizes, jumper"
:total="pageData.total" @size-change="getTableData()">
</el-pagination>
</div>
</div>
</template>
<style scoped lang="less">
.body {
width: 100%;
min-height: calc(100vh - 56px);
margin-left: 24px;
.top-title {
height: 40px;
background-color: white;
display: flex;
padding-left: 16px;
align-items: center;
font-weight: 600;
}
.table-box {
width: 100%;
min-height: calc(100vh - 56px - 64px);
margin-top: 24px;
padding: 16px;
background-color: white;
.top-search {
display: flex;
align-items: center;
margin-bottom: 8px;
.search-input {
width: 300px;
margin-right: 10px;
}
}
.search-btn {
margin-left: 10px;
background-color: #37b29e;
border: none;
&:hover {
background-color: #5ac6b9;
}
&:active {
background-color: #2b8070;
}
;
}
.table {
height: calc(680px - 34px);
.normal {
width: 40px;
border-radius: 5px;
background-color: #ebf7f5;
color: #36b29e;
}
.abnormal {
width: 40px;
border-radius: 5px;
background-color: #feebeb;
color: #d9001b;
margin-right: 10px;
margin-bottom: 10px;
}
}
}
}
</style>

29
src/views/runManage/engineering/inspectionRecords/index.vue

@ -0,0 +1,29 @@
<!-- 巡查记录 -->
<script>
import Dike from './Dike.vue'
import Reservoir from './Reservoir.vue'
import Sluice from './Sluice.vue'
export default {
name: 'InspectionItems',
components: {
Reservoir, //
Sluice, //
Dike, //
},
computed: {
selectTab() {
return this.$store.state.topTab.selectTab
},
}
}
</script>
<template>
<div>
<Reservoir v-if="selectTab == 0"></Reservoir>
<Sluice v-if="selectTab == 1"></Sluice>
<Dike v-if="selectTab == 2"></Dike>
</div>
</template>
<style scoped lang="less"></style>

65
src/views/runManage/engineering/patrolRouteSettings/Dike.vue

@ -0,0 +1,65 @@
<!-- 巡查路线设置-堤防 -->
<script>
import GaoDeMap from "./components/GaoDeMap.vue"
export default {
name: '',
components: {
GaoDeMap
},
data() {
return {
selectTab: 'first'
}
},
methods: {
}
}
</script>
<template>
<div class="body">
<div class="top-title">
基础信息管理
</div>
<div class="map-box">
<el-tabs v-model="selectTab" class="tab">
<el-tab-pane style="padding: 0px 16px;" label="电子地图" name="first">
<GaoDeMap :type="'DF'" />
</el-tab-pane>
<el-tab-pane label="平面图" name="second">平面图</el-tab-pane>
</el-tabs>
</div>
</div>
</template>
<style scoped lang="less">
.body {
width: 100%;
min-height: calc(100vh - 56px);
.top-title {
height: 40px;
background-color: white;
display: flex;
padding-left: 16px;
align-items: center;
font-weight: 600;
}
.map-box {
background-color: #fff;
border-radius: 8px;
min-height: calc(100vh - 56px - 40px - 48px);
margin: 24px;
.tab {
/deep/.el-tabs__nav {
.el-tabs__item:first-of-type {
margin-left: 16px;
}
}
}
}
}
</style>

22
src/views/runManage/engineering/patrolRouteSettings/Reservoir.vue

@ -0,0 +1,22 @@
<!-- 巡查路线设置-水库 -->
<script>
export default {
name: '',
data() {
return {
}
},
methods: {
}
}
</script>
<template>
<div>
水库
</div>
</template>
<style scoped lang="less"></style>

65
src/views/runManage/engineering/patrolRouteSettings/Sluice.vue

@ -0,0 +1,65 @@
<!-- 巡查路线设置-水闸 -->
<script>
import GaoDeMap from "./components/GaoDeMap.vue"
export default {
name: '',
components: {
GaoDeMap
},
data() {
return {
selectTab: 'first'
}
},
methods: {
}
}
</script>
<template>
<div class="body">
<div class="top-title">
基础信息管理
</div>
<div class="map-box">
<el-tabs v-model="selectTab" class="tab">
<el-tab-pane style="padding: 0px 16px;" label="电子地图" name="first">
<GaoDeMap :type="'SZ'" />
</el-tab-pane>
<el-tab-pane label="平面图" name="second">平面图</el-tab-pane>
</el-tabs>
</div>
</div>
</template>
<style scoped lang="less">
.body {
width: 100%;
min-height: calc(100vh - 56px);
.top-title {
height: 40px;
background-color: white;
display: flex;
padding-left: 16px;
align-items: center;
font-weight: 600;
}
.map-box {
background-color: #fff;
border-radius: 8px;
min-height: calc(100vh - 56px - 40px - 48px);
margin: 24px;
.tab {
/deep/.el-tabs__nav {
.el-tabs__item:first-of-type {
margin-left: 16px;
}
}
}
}
}
</style>

414
src/views/runManage/engineering/patrolRouteSettings/components/Drawer.vue

@ -0,0 +1,414 @@
<!-- 巡查记录抽屉 -->
<script>
export default {
name: '',
props: {
drawerVisible: {
type: Boolean,
default: false
}
},
data() {
return {
tableData: [
{ content: '张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三', photos: '编辑', delete: '删除' },
{ content: '张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
{ content: '张三', photos: '编辑', delete: '删除' },
]
}
},
methods: {
handleSpanMethod({ row, column, rowIndex, columnIndex }) {
if (columnIndex === 0) {
if (rowIndex < 4 || (rowIndex > 4 && rowIndex < 9) || (rowIndex > 8 && rowIndex < 11) || (rowIndex > 10 && rowIndex < 13) || (rowIndex > 12 && rowIndex < 18)) {
if (rowIndex === 0 || rowIndex === 5 || rowIndex === 9 || rowIndex === 11 || rowIndex === 13) {
return {
rowspan: [4, 4, 2, 2, 5][[0, 5, 9, 11, 13].indexOf(rowIndex)],
colspan: 1
};
} else {
return {
rowspan: 0,
colspan: 0
};
}
}
}
},
}
}
</script>
<template>
<div>
<div class="masking" :class="drawerVisible ? 'masking-in' : ''">
<div class="close-btn" @click="$emit('close-drawer');
">
<i class="el-icon-arrow-right"></i>
</div>
<div class="drawer-title">
<span>巡查记录</span>
</div>
<div class="center-table">
<el-table :data="tableData" height="636" style="width: 100%" :span-method="handleSpanMethod"
header-cell-class-name="table-header-cell">
<el-table-column align="center" class="first-column" label="工程部位" width="264">
<template slot-scope="scope">
<div v-if="scope.$index == 0">
<div class="box1">
<div class="item1">堤身</div>
<div class="item2">堤顶</div>
<div class="item3">堤坡</div>
<div class="item4">迎水坡</div>
<div class="item5">背水坡</div>
<div class="item6">护坡结构</div>
<div class="item7">堤脚</div>
</div>
</div>
<div v-if="scope.$index == 4">护坡地和堤防工程保护范围</div>
<div v-if="scope.$index == 5">
<div class="box2">
<div class="item1">堤岸防护工程</div>
<div class="item2">坡式</div>
<div class="item3">墙式</div>
<div class="item4">护脚</div>
<div class="item5">滩岸</div>
</div>
</div>
<div v-if="scope.$index == 9">
<div class="box3">
<div class="item1">防渗排水设施</div>
<div class="item2">防渗设施</div>
<div class="item3">排水设施</div>
</div>
</div>
<div v-if="scope.$index == 11">
<div class="box3">
<div class="item1">交叉建筑物及接连段</div>
<div class="item2">连接段</div>
<div class="item3">交叉建筑物</div>
</div>
</div>
<div v-if="scope.$index == 13">
<div class="box4">
<div class="item1">管理设施</div>
<div class="item2">观测设施</div>
<div class="item3">交通通信设施</div>
<div class="item4">信息化设施</div>
<div class="item5">标识标牌</div>
<div class="item6">管理房</div>
</div>
</div>
<div v-if="scope.$index == 18">生物防护工程</div>
<div v-if="scope.$index == 19">其他</div>
</template>
</el-table-column>
<el-table-column prop="content" align="center" class-name="column-item" label="检查内容" min-width="200" />
<el-table-column v-if="!this.$route.query.editor" prop="photos" align="center" class-name="column-item"
label="打卡图片" width="150" />
<el-table-column v-if="!this.$route.query.editor" align="center" class-name="column-item" label="检查记录">
<el-table-column prop="isNormal" align="center" class-name="column-item" label="是否正常" width="150" />
<el-table-column prop="problems" align="center" class-name="column-item" label="存在问题" width="150" />
</el-table-column>
</el-table>
</div>
</div>
</div>
</template>
<style scoped lang="less">
.masking {
position: absolute;
top: 0;
width: 50%;
height: 100%;
left: 120%;
z-index: 2;
background-color: #fff;
transition: left 0.5s ease-in-out;
box-shadow: -8px 0px 38px 0px rgba(0, 0, 0, 0.6);
.close-btn {
width: 32px;
height: 32px;
position: absolute;
top: 48px;
left: -16px;
background-color: #fff;
border: 1px solid #DCDCDC;
border-radius: 50%;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
i {
color: #36b29e;
}
}
.drawer-title {
width: 100%;
height: 64px;
line-height: 64px;
padding-left: 16px;
border-bottom: 1px solid #e7e7e7;
}
.center-table {
padding: 16px;
.box1 {
height: 352x;
display: grid;
grid-template-columns: repeat(3, 88px);
grid-template-rows: repeat(8, 44px);
.item1 {
grid-row: 1 / 9;
grid-column: 1;
line-height: 352px;
justify-content: center;
align-content: center;
border-right: 1px solid #f4f9f7;
}
.item2 {
grid-row: 1/3;
grid-column: 2/ 4;
line-height: 88px;
justify-content: center;
align-content: center;
border-bottom: 1px solid #f4f9f7;
}
.item3 {
grid-row: 3/7;
grid-column: 2;
line-height: 176px;
justify-content: center;
align-content: center;
border-right: 1px solid #f4f9f7;
}
.item4 {
line-height: 44px;
justify-content: center;
align-content: center;
border-bottom: 1px solid #f4f9f7;
}
.item5 {
line-height: 44px;
justify-content: center;
align-content: center;
border-bottom: 1px solid #f4f9f7;
}
.item6 {
grid-row: 7/5;
grid-column: 3;
line-height: 88px;
justify-content: center;
align-content: center;
}
.item7 {
grid-row: 9/7;
grid-column: 2/4;
line-height: 88px;
justify-content: center;
align-content: center;
border-top: 1px solid #f4f9f7;
}
}
.box2 {
height: 352px;
display: grid;
grid-template-columns: repeat(3, 88px);
grid-template-rows: repeat(8, 44px);
.item1 {
grid-row: 1 / 9;
grid-column: 1/3;
line-height: 352px;
justify-content: center;
align-content: center;
border-right: 1px solid #f4f9f7;
}
.item2 {
grid-row: 1/3;
grid-column: 3;
line-height: 88px;
justify-content: center;
align-content: center;
border-bottom: 1px solid #f4f9f7;
}
.item3 {
grid-row: 3/5;
grid-column: 3;
line-height: 88px;
justify-content: center;
align-content: center;
border-bottom: 1px solid #f4f9f7;
}
.item4 {
grid-row: 5/7;
grid-column: 3;
line-height: 88px;
justify-content: center;
align-content: center;
border-bottom: 1px solid #f4f9f7;
}
.item5 {
grid-row: 7/9;
grid-column: 3;
line-height: 88px;
justify-content: center;
align-content: center;
}
}
.box3 {
height: 176px;
display: grid;
grid-template-columns: repeat(3, 88px);
grid-template-rows: repeat(8, 44px);
.item1 {
grid-row: 1 / 5;
grid-column: 1/3;
line-height: 176px;
justify-content: center;
align-content: center;
border-right: 1px solid #f4f9f7;
}
.item2 {
grid-row: 1/3;
grid-column: 3;
line-height: 88px;
justify-content: center;
align-content: center;
border-bottom: 1px solid #f4f9f7;
}
.item3 {
grid-row: 3/5;
grid-column: 3;
line-height: 88px;
justify-content: center;
align-content: center;
}
}
.box4 {
height: 440px;
display: grid;
grid-template-columns: repeat(3, 88px);
grid-template-rows: repeat(8, 44px);
.item1 {
grid-row: 1 / 10;
grid-column: 1/3;
line-height: 440px;
justify-content: center;
align-content: center;
border-right: 1px solid #f4f9f7;
}
.item2 {
grid-row: 1/3;
grid-column: 3;
line-height: 88px;
justify-content: center;
align-content: center;
border-bottom: 1px solid #f4f9f7;
}
.item3 {
grid-row: 3/5;
grid-column: 3;
line-height: 88px;
justify-content: center;
align-content: center;
}
.item4 {
grid-row: 5/7;
grid-column: 3;
line-height: 88px;
justify-content: center;
align-content: center;
}
.item5 {
grid-row: 7/9;
grid-column: 3;
line-height: 88px;
justify-content: center;
align-content: center;
}
.item6 {
grid-row: 9/11;
grid-column: 3;
line-height: 88px;
justify-content: center;
align-content: center;
}
}
}
}
.masking-in {
left: 50%;
}
/deep/.el-table__body tr td {
padding: 0;
height: 88px !important;
}
/deep/ .cell {
padding: 0 !important;
}
/deep/.column-item {
padding-left: 10px !important;
}
/deep/.column-item .cell {
padding: 18;
max-height: 70px !important;
overflow: auto;
}
/deep/.table-header-cell {
background-color: #fff !important;
}
</style>

365
src/views/runManage/engineering/patrolRouteSettings/components/GaoDeMap.vue

@ -0,0 +1,365 @@
<!-- 高德地图 -->
<template>
<div>
<div id="container" @mouseenter="showTooltip = true" @mouseout="showTooltip = false"
@mousemove="updateTooltipPosition">
<div class="tooltip" v-if="showTooltip" :style="{ top: tooltipTop + 'px', left: tooltipLeft + 'px' }">
左键选点双击结束绘制右键取消绘制
</div>
<el-button class="open-drawer-btn" size="mini" @click="drawerVisible = true">展开抽屉</el-button>
<Drawer :drawer-visible="drawerVisible" @close-drawer="drawerVisible = false"></Drawer>
</div>
<div class="box">
<el-button size="mini" @click="addPoint = true">
<svg-icon icon-class="icon-line" />
绘制线路</el-button>
<el-button :disabled="checkpoints.length < 1" style="width: 29px; padding: 7px;" size="mini"
@click="clearLine"><svg-icon icon-class="icon-clear" /></el-button>
</div>
</div>
</template>
<script>
import AMapLoader from "@amap/amap-jsapi-loader";
import { postDFInspectionRoute, postSZInspectionRoute, getDFInspectionRoute, getSZInspectionRoute, postDFInspectionRecordsTrajectoryList, postSZInspectionRecordsTrajectoryList } from '@/api/management'
import Drawer from './Drawer.vue'
export default {
name: "map-view",
props: {
type: {
type: String,
default: ''
}
},
components: { Drawer },
data() {
return {
drawerVisible: false, //
addPoint: false, //
showTooltip: false, //
addSum: 0,
tooltipLeft: 0,
tooltipTop: 0,
checkpoints: [
// {
// name: '1',
// location: [113.431415, 23.104388]
// },
// {
// name: '2',
// location: [113.432021, 23.1038]
// },
// {
// name: '3',
// location: [113.431747, 23.102794]
// }
],
AMap: {},
};
},
mounted() {
this.initAMap();
},
unmounted() {
this.map?.destroy();
},
methods: {
//
updateTooltipPosition(event) {
this.tooltipLeft = event.clientX - 296 + 15;
this.tooltipTop = event.clientY - 174;
},
// 线
renderedPolyline() {
this.map.remove(this.map.getAllOverlays('polyline'));
if (this.checkpoints.length > 1) {
const polyline = new this.AMap.Polyline({
path: this.checkpoints.map((checkpoint) => checkpoint.location),
strokeColor: "#37E4FF",
strokeWeight: 4,
strokeOpacity: 1,
bubble: true
});
polyline.setMap(this.map);
}
},
//
addCheckpoint(name, location) {
const icon = new this.AMap.Icon({
size: new this.AMap.Size(20, 20),
image: require('@/assets/image/map-point.png'),
imageSize: new AMap.Size(20, 20),
anchor: 'center',
})
const marker = new this.AMap.Marker({
position: location,
title: name,
icon,
anchor: 'bottom-center',
bubble: true,
label: { content: name, direction: 'top' },
});
marker.on("mouseover", () => {
this.showTooltip = true
}),
marker.on("mouseout", () => {
this.showTooltip = true
}),
marker.setMap(this.map);
this.checkpoints.push({ name, location, marker });
this.renderedPolyline()
},
//
selectCheckpoint(checkpoint) {
const icon = new this.AMap.Icon({
size: new this.AMap.Size(20, 20),
image: require('@/assets/image/map-point.png'),
imageSize: new AMap.Size(20, 20),
anchor: 'center',
})
this.map.setCenter(checkpoint.location);
this.map.setZoom(18)
this.checkpoints.forEach((cp) => {
const marker = cp.marker;
if (cp === checkpoint) {
marker.setIcon('https://webapi.amap.com/theme/v1.3/markers/n/mark_r.png');
} else {
marker.setIcon(icon);
}
});
},
// 线
clearLine() {
// this.removeLastCheckpoint();
this.addSum = 0
this.checkpoints.forEach((checkpoint) => {
checkpoint.marker.setMap(null); // marker
});
this.checkpoints = []; // checkpoints
this.renderedPolyline() // 线
this.saveInspectionRoute() //
},
//
removeLastCheckpoint() {
const lastCheckpoint = this.checkpoints.pop();
const marker = lastCheckpoint.marker;
marker.setMap(null);
this.renderedPolyline()
},
// 线
saveInspectionRoute() {
let data = []
this.checkpoints.forEach(element => {
let a = {
longitude: element.location[0],
latitude: element.location[1]
}
data.push(a)
});
switch (this.type) {
case 'DF':
postDFInspectionRoute(this.$route.query.id, data).then((res) => {
this.$message({
message: '保存成功',
type: 'success'
});
})
break;
case 'SZ':
postSZInspectionRoute(this.$route.query.id, data).then((res) => {
this.$message({
message: '保存成功',
type: 'success'
});
})
break;
default:
console.log('未选中');
break;
}
},
//
initAMap() {
AMapLoader.load({
key: "67533ae78bf28afc2a3da3d10d308fa1", // WebKey load
version: "2.0", // JSAPI 1.4.15
plugins: [], // 使'AMap.Scale'
})
.then((AMap) => {
this.AMap = AMap
var satellite = new AMap.TileLayer.Satellite() //
this.map = new AMap.Map("container", {
// id
viewMode: "3D", // 3D
zoom: 18, //
doubleClickZoom: false, //
layers: [
satellite,
],
center: [113.43094, 23.10346], //
});
//
this.map.on("complete", () => {
console.log('🚀地图加载完毕🚀')
if (this.$route.query.editor) {
//
switch (this.type) {
case 'DF':
getDFInspectionRoute(this.$route.query.id).then((res) => {
res.data.forEach((element, index) => {
this.addCheckpoint("检查点" + (index + 1), [element.longitude, element.latitude])
});
})
break;
case 'SZ':
getSZInspectionRoute(this.$route.query.id).then((res) => {
res.data.forEach((element, index) => {
this.addCheckpoint("检查点" + (index + 1), [element.longitude, element.latitude])
});
})
break;
default:
console.log('未选中');
break;
}
} else {
switch (this.type) {
case 'DF':
postDFInspectionRecordsTrajectoryList({
data: {
timeView: {
timeField: "create_time"
},
recordId: this.$route.query.id
},
cv: {
name: "name",
type: "like",
},
pageSize: 100,
pageNum: 1
}).then((res) => {
console.log('🚀res🚀', res)
res.records.forEach((element, index) => {
this.addCheckpoint("检查点" + (index + 1), [element.longitude, element.latitude])
});
})
break;
case 'SZ':
postSZInspectionRecordsTrajectoryList({
data: {
timeView: {
timeField: "create_time"
},
recordId: this.$route.query.id
},
cv: {
name: "name",
type: "like",
},
pageSize: 100,
pageNum: 1
}).then((res) => {
console.log('🚀res🚀', res)
res.records.forEach((element, index) => {
this.addCheckpoint("检查点" + (index + 1), [element.longitude, element.latitude])
});
})
break;
default:
console.log('未选中');
break;
}
}
// 线
if (this.checkpoints.length > 1) {
this.renderedPolyline()
}
});
if (this.$route.query.editor) {
//
this.map.on('click', (e) => {
if (this.addPoint) {
this.addSum++
const { lng, lat } = e.lnglat;
const name = `检查点${this.checkpoints.length + 1}`;
this.addCheckpoint(name, [lng, lat]);
} else {
this.$message({
message: '请先点击绘制线路',
type: 'warning'
});
}
});
//
this.map.on('dblclick', () => {
if (this.addPoint) {
this.addSum = 0
this.saveInspectionRoute()
console.log('双击保存', this.checkpoints);
this.addPoint = false
}
});
//
this.map.on('rightclick', () => {
for (let i = 0; i < this.addSum; i++) {
this.removeLastCheckpoint()
}
this.addSum = 0
})
}
})
.catch((e) => {
console.log(e);
});
},
},
};
</script>
<style scoped lang="scss">
#container {
width: 100%;
height: calc(100vh - 56px - 40px - 48px - 70px);
position: relative;
.open-drawer-btn {
position: fixed;
top: 125px;
right: 40px;
}
}
.tooltip {
position: absolute;
z-index: 1;
background: rgba(0, 0, 0, 0.6);
border-radius: 4px;
padding: 8px 12px;
font-size: 12px;
color: #fff;
}
.box {
position: absolute;
top: 10px;
left: 26px;
display: flex;
flex-wrap: wrap;
z-index: 9;
}
/deep/.amap-marker-label {
background-color: rgba(0, 0, 0, 0.6);
border: none;
border-radius: 2px;
color: #fff;
font-size: 12px;
padding: 4px 8px;
}
</style>

34
src/views/runManage/engineering/patrolRouteSettings/index.vue

@ -0,0 +1,34 @@
<!-- 巡查路线设置 -->
<script>
import Dike from './Dike.vue'
import Reservoir from './Reservoir.vue'
import Sluice from './Sluice.vue'
export default {
name: 'InspectionItems',
components: {
Reservoir, //
Sluice, //
Dike, //
},
computed: {
selectTab() {
return this.$store.state.topTab.selectTab
},
},
watch: {
selectTab(newVal, oldVal) {
this.$router.push(this.$route.query.editor ? '/inspectionPlan' : '/inspectionRecords')
}
},
}
</script>
<template>
<div>
<Reservoir v-if="selectTab == 0"></Reservoir>
<Sluice v-if="selectTab == 1"></Sluice>
<Dike v-if="selectTab == 2"></Dike>
</div>
</template>
<style scoped lang="less"></style>

3
src/views/runManage/maintenance/index.vue

@ -0,0 +1,3 @@
<template >
<router-view />
</template>

380
src/views/runManage/maintenance/maintenancePlan/Dike.vue

@ -0,0 +1,380 @@
<!-- 维修计划管理-堤防 -->
<script>
import { putDFMaintenancePlan, deleteDFMaintenancePlan, postDFMaintenancePlan, postDFMaintenancePlanList, getDFMaintenancePlan } from '@/api/management'
export default {
name: 'InspectionItems',
data() {
return {
searchInput: '',
dialogVisible: false,
prohibitEditing: false,
dikeLevel: [
{
id: 1,
label: '全部',
value: 1
},
{
id: 2,
label: '一级',
value: 2
},
{
id: 3,
label: '二级',
value: 3
},
{
id: 4,
label: '三级',
value: 4
},
{
id: 5,
label: '四级',
value: 5
},
{
id: 6,
label: '五级及以下',
value: 6
},
], //
embankmentList: [
{
label: '堤防1',
value: '1',
id: '1',
},
{
label: '堤防2',
value: '2',
id: '2',
},
{
label: '堤防3',
value: '3',
id: '3',
}
], //
searchLevel: 1, //
tableData: [], //
pageData: {
pageNum: 1, //
pageSize: 10, //
pageSizes: [10, 20, 50, 100],
total: 0 //
},
ruleForm: {
dikeCode: '',
name: '',
planTime: '',
nationalSupplement: 0,
selfSupplement: 0,
budget: 0,
location: '',
content: '',
},
rules: {
dikeCode: [
{ required: true, message: '请选择堤防名称', trigger: 'blur' }
],
name: [
{ required: true, message: '请输入维养计划名称', trigger: 'blur' },
{ max: 100, message: '名称最长为100个字符', trigger: 'blur' }
],
planTime: [
{ required: true, message: '请选计划时间', trigger: 'change' }
],
nationalSupplement: [
{ required: true, message: '请输入资金', trigger: 'change' }
],
selfSupplement: [
{ required: true, message: '请输入资金', trigger: 'change' }
],
location: [
{ required: true, message: '请输入具体地点', trigger: 'change' }
],
content: [
{ required: true, message: '请输入维修养护内容', trigger: 'change' }
],
}
}
},
watch: {
dialogVisible(newVal, oldVal) {
if (oldVal) {
this.prohibitEditing = false
}
}
},
methods: {
//
deleteTableItem(row) {
deleteDFMaintenancePlan(row.id).then((res) => {
console.log('🚀res🚀', res)
this.getTableData()
this.$message.success('删除成功');
})
},
//
viewOrEditPlanDetails(row, edit = false) {
if (!edit) {
this.prohibitEditing = true
}
getDFMaintenancePlan(row.id).then((res) => {
console.log('🚀res🚀', res)
this.ruleForm = res.data
this.ruleForm.budget = res.data.nationalSupplement + res.data.selfSupplement
this.dialogVisible = true
})
},
//
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
if (this.ruleForm.id) {
putDFMaintenancePlan(this.ruleForm).then(() => {
this.getTableData()
this.dialogVisible = false
this.$message({
message: '保存成功',
type: 'success'
})
})
} else {
postDFMaintenancePlan(this.ruleForm).then(() => {
this.getTableData()
this.dialogVisible = false
this.$message({
message: '保存成功',
type: 'success'
})
})
}
} else {
console.log('校验不通过');
return false;
}
});
},
//
resetForm(formName) {
this.$refs[formName].resetFields();
this.dialogVisible = false
},
// dialog
closeDialog(ruleForm = 'ruleForm') {
console.log('触发关闭dialog', ruleForm);
this.$refs[ruleForm].resetFields();
this.ruleForm = {
dikeCode: '',
name: '',
planTime: '',
nationalSupplement: 0,
selfSupplement: 0,
location: '',
budget: 0,
content: '',
}
},
//
calculateBudget() {
this.ruleForm.budget = Number(this.ruleForm.selfSupplement) + Number(this.ruleForm.nationalSupplement)
},
//
getTableData(value = '') {
postDFMaintenancePlanList({
data: {
timeView: {
timeField: "create_time"
},
},
cv: {
name: "name",
type: "like",
value
},
pageSize: this.pageData.pageSize,
pageNum: this.pageData.pageNum
}).then((res) => {
if (res) {
this.tableData = res.records
this.pageData.total = res.total
}
console.log('🚀表格数据🚀', res)
})
}
},
mounted() {
//
this.getTableData()
},
}
</script>
<template>
<div class="body">
<div class="top-title">
基础信息管理
</div>
<div class="table-box">
<div class="top-search">
<span>维养计划名称</span>
<el-input class="search-input" v-model="searchInput" placeholder="请输入维养计划名称" />
<span>堤防级别</span>
<el-select v-model="searchLevel" placeholder="请选择">
<el-option v-for="item in dikeLevel" :label="item.label" :value="item.value" :key="item.id"></el-option>
</el-select>
<el-button class="search-btn" type="success" @click="getTableData(searchInput)">搜索</el-button>
</div>
<el-button class="search-btn" style=" margin-right: 16px;margin-bottom: 8px; float: right;" type="success"
@click="dialogVisible = true">添加</el-button>
<el-table class="table" height="640" :data="tableData" border>
<el-table-column type="index" align="center" label="序号" width="100" />
<el-table-column prop="name" align="center" label="维养计划名称" />
<el-table-column prop="" align="center" label="堤防级别" />
<el-table-column prop="location" align="center" label="具体地点" />
<el-table-column prop="content" align="center" label="维修养护内容" />
<el-table-column prop="nationalSupplement" align="center" label="国补" />
<el-table-column prop="selfSupplement" align="center" label="自筹" />
<el-table-column prop="createTime" align="center" sortable label="创建时间">
</el-table-column>
<el-table-column prop="updateTime" align="center" sortable label="更新时间">
</el-table-column>
<el-table-column prop="address" align="center" label="操作">
<template slot-scope="scope">
<el-button @click="viewOrEditPlanDetails(scope.row)" type="text" size="small">查看</el-button>
<el-button @click="viewOrEditPlanDetails(scope.row, true)" type="text" size="small">编辑</el-button>
<el-button style=" margin-right: 9px;" type="text" size="small">记录</el-button>
<el-popconfirm confirm-button-text='确定' cancel-button-text='取消' icon="el-icon-info" icon-color="red"
title="确定删除吗?" @confirm="deleteTableItem(scope.row)">
<el-button style="color: red;" type="text" size="small" slot="reference">删除</el-button>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
<el-pagination background class="pagination" style="margin-top: 16px;margin-right: 16px;float: right;"
:current-page="pageData.pageNum" :page-sizes="pageData.pageSizes" layout="total, prev, pager, next, sizes, jumper"
:total="pageData.total" @size-change="getTableData()">
</el-pagination>
</div>
<el-dialog title="新增/编辑维养计划" @close="closeDialog" :visible.sync="dialogVisible" width="38%">
<div style="display: flex; margin-bottom: 16px;">
<div style="width: 5px; height: 16px; background-color: #31a08e; margin-right: 8px;"></div><span
style="font-weight: 600;">基础信息</span>
</div>
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
<el-form-item label-width="120px" label="堤防名称" prop="dikeCode">
<el-select v-model="ruleForm.dikeCode" placeholder="请选择" @change="ruleForm.name = ruleForm.dikeCode"
:disabled="prohibitEditing">
<el-option v-for="item in embankmentList" :label="item.label" :value="item.value" :key="item.id"></el-option>
</el-select>
<el-button button class="search-btn" type="success" size="small">详情</el-button>
<el-button button class="search-btn" type="success" size="small">打开地图</el-button>
</el-form-item>
<div style="display: flex;">
<el-form-item label-width="120px" label="维养计划名称" prop="name">
<el-input style="width: 202px;" v-model="ruleForm.name" placeholder="请输入" :disabled="prohibitEditing" />
</el-form-item>
<el-form-item label-width="120px" label="计划时间" prop="planTime">
<el-date-picker v-model="ruleForm.planTime" type="month" placeholder="选择月" :disabled="prohibitEditing"
value-format="yy-MM-dd">
</el-date-picker>
</el-form-item>
</div>
<div style="display: flex;">
<el-form-item label-width="120px" label="国补资金" prop="nationalSupplement">
<el-input style="width: 79px;" v-model="ruleForm.nationalSupplement" type="number" @input="calculateBudget()"
placeholder="请输入" :disabled="prohibitEditing" /> 万元
</el-form-item>
<el-form-item label-width="120px" label="自筹资金" prop="selfSupplement">
<el-input style="width: 79px;" v-model="ruleForm.selfSupplement" type="number" @input="calculateBudget()"
placeholder="请输入" :disabled="prohibitEditing" /> 万元
</el-form-item>
<el-form-item label-width="120px" label="项目预算">
<el-input style="width: 79px;" v-model="ruleForm.budget" disabled />
</el-form-item>
</div>
<el-form-item label-width="120px" label="具体地点" prop="location">
<el-input style="width: 542px;" :autosize="{ minRows: 5 }" type="textarea" maxlength="500" show-word-limit
v-model="ruleForm.location" placeholder="请输入" :disabled="prohibitEditing" />
</el-form-item>
<el-form-item label-width="120px" label="维修养护内容" prop="content">
<el-input style="width: 542px;" :autosize="{ minRows: 5 }" type="textarea" maxlength="500" show-word-limit
v-model="ruleForm.content" placeholder="请输入" :disabled="prohibitEditing" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button size="mini" @click="resetForm('ruleForm')"> </el-button>
<el-button v-if="!prohibitEditing" size="mini" type="primary" @click="submitForm('ruleForm')">保存</el-button>
</div>
</el-dialog>
</div>
</template>
<style scoped lang="less">
.body {
width: 100%;
min-height: calc(100vh - 56px);
margin-left: 24px;
.top-title {
height: 40px;
background-color: white;
display: flex;
padding-left: 16px;
align-items: center;
font-weight: 600;
}
.table-box {
width: 100%;
min-height: calc(100vh - 56px - 64px);
margin-top: 24px;
padding: 16px;
background-color: white;
.top-search {
display: flex;
align-items: center;
margin-bottom: 8px;
.search-input {
width: 300px;
margin-right: 10px;
}
}
.table {
height: calc(680px - 34px);
}
}
.search-btn {
margin-left: 10px;
background-color: #37b29e;
border: none;
&:hover {
background-color: #5ac6b9;
}
&:active {
background-color: #2b8070;
}
;
}
}
/deep/.el-input__count {
height: 15px;
line-height: 15px;
margin-right: 10px;
margin-bottom: -4px;
}
</style>

22
src/views/runManage/maintenance/maintenancePlan/Reservoir.vue

@ -0,0 +1,22 @@
<!-- 维修计划管理-水库 -->
<script>
export default {
name: '',
data() {
return {
}
},
methods: {
}
}
</script>
<template>
<div>
水库
</div>
</template>
<style scoped lang="less"></style>

376
src/views/runManage/maintenance/maintenancePlan/Sluice.vue

@ -0,0 +1,376 @@
<!-- 维修计划管理-水闸 -->
<script>
import { putSZMaintenancePlan, deleteSZMaintenancePlan, postSZMaintenancePlan, postSZMaintenancePlanList, getSZMaintenancePlan } from '@/api/management'
export default {
name: 'InspectionItems',
data() {
return {
searchInput: '',
dialogVisible: false,
prohibitEditing: false,
dikeLevel: [
{
id: 1,
label: '全部',
value: 1
},
{
id: 2,
label: '一级',
value: 2
},
{
id: 3,
label: '二级',
value: 3
},
{
id: 4,
label: '三级',
value: 4
},
{
id: 5,
label: '四级',
value: 5
},
{
id: 6,
label: '五级及以下',
value: 6
},
], //
embankmentList: [
{
label: '堤防1',
value: '1',
id: '1',
},
{
label: '堤防2',
value: '2',
id: '2',
},
{
label: '堤防3',
value: '3',
id: '3',
}
], //
searchLevel: 1, //
tableData: [], //
pageData: {
pageNum: 1, //
pageSize: 10, //
pageSizes: [10, 20, 50, 100],
total: 0 //
},
ruleForm: {
dikeCode: '',
name: '',
planTime: '',
nationalSupplement: 0,
selfSupplement: 0,
budget: 0,
location: '',
content: '',
wagaCode: 'b'
},
rules: {
dikeCode: [
{ required: true, message: '请选择堤防名称', trigger: 'blur' }
],
name: [
{ required: true, message: '请输入维养计划名称', trigger: 'blur' },
{ max: 100, message: '名称最长为100个字符', trigger: 'blur' }
],
planTime: [
{ required: true, message: '请选计划时间', trigger: 'change' }
],
nationalSupplement: [
{ required: true, message: '请输入资金', trigger: 'change' }
],
selfSupplement: [
{ required: true, message: '请输入资金', trigger: 'change' }
],
location: [
{ required: true, message: '请输入具体地点', trigger: 'change' }
],
content: [
{ required: true, message: '请输入维修养护内容', trigger: 'change' }
],
}
}
},
watch: {
dialogVisible(newVal, oldVal) {
if (oldVal) {
this.prohibitEditing = false
}
}
},
methods: {
//
deleteTableItem(row) {
deleteSZMaintenancePlan(row.id).then((res) => {
console.log('🚀res🚀', res)
this.getTableData()
this.$message.success('删除成功');
})
},
//
viewOrEditPlanDetails(row, edit = false) {
if (!edit) {
this.prohibitEditing = true
}
getSZMaintenancePlan(row.id).then((res) => {
console.log('🚀res🚀', res)
this.ruleForm = res.data
this.ruleForm.budget = res.data.nationalSupplement + res.data.selfSupplement
this.dialogVisible = true
})
},
//
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
if (this.ruleForm.id) {
putSZMaintenancePlan(this.ruleForm).then(() => {
this.getTableData()
this.dialogVisible = false
this.$message({
message: '保存成功',
type: 'success'
})
})
} else {
postSZMaintenancePlan(this.ruleForm).then(() => {
this.getTableData()
this.dialogVisible = false
this.$message({
message: '保存成功',
type: 'success'
})
})
}
} else {
console.log('校验不通过');
return false;
}
});
},
// dialog
closeDialog(ruleForm = 'ruleForm') {
console.log('触发关闭dialog', ruleForm);
this.$refs[ruleForm].resetFields();
this.ruleForm = {
dikeCode: '',
name: '',
planTime: '',
nationalSupplement: 0,
selfSupplement: 0,
location: '',
budget: 0,
content: '',
wagaCode: 'b'
}
},
//
calculateBudget() {
this.ruleForm.budget = Number(this.ruleForm.selfSupplement) + Number(this.ruleForm.nationalSupplement)
},
//
getTableData(value = '') {
postSZMaintenancePlanList({
data: {
timeView: {
timeField: "create_time"
},
},
cv: {
name: "name",
type: "like",
value
},
pageSize: this.pageData.pageSize,
pageNum: this.pageData.pageNum
}).then((res) => {
if (res) {
this.tableData = res.records
this.pageData.total = res.total
}
console.log('🚀表格数据🚀', res)
})
}
},
mounted() {
//
this.getTableData()
},
}
</script>
<template>
<div class="body">
<div class="top-title">
基础信息管理
</div>
<div class="table-box">
<div class="top-search">
<span>维养计划名称</span>
<el-input class="search-input" v-model="searchInput" placeholder="请输入维养计划名称" />
<span>堤防级别</span>
<el-select v-model="searchLevel" placeholder="请选择">
<el-option v-for="item in dikeLevel" :label="item.label" :value="item.value" :key="item.id"></el-option>
</el-select>
<el-button class="search-btn" type="success" @click="getTableData(searchInput)">搜索</el-button>
</div>
<el-button class="search-btn" style=" margin-right: 16px;margin-bottom: 8px; float: right;" type="success"
@click="dialogVisible = true">添加</el-button>
<el-table class="table" height="640" :data="tableData" border>
<el-table-column type="index" align="center" label="序号" width="100" />
<el-table-column prop="name" align="center" label="维养计划名称" />
<el-table-column prop="" align="center" label="堤防级别" />
<el-table-column prop="location" align="center" label="具体地点" />
<el-table-column prop="content" align="center" label="维修养护内容" />
<el-table-column prop="nationalSupplement" align="center" label="国补" />
<el-table-column prop="selfSupplement" align="center" label="自筹" />
<el-table-column prop="createTime" align="center" sortable label="创建时间">
</el-table-column>
<el-table-column prop="updateTime" align="center" sortable label="更新时间">
</el-table-column>
<el-table-column prop="address" align="center" label="操作">
<template slot-scope="scope">
<el-button @click="viewOrEditPlanDetails(scope.row)" type="text" size="small">查看</el-button>
<el-button @click="viewOrEditPlanDetails(scope.row, true)" type="text" size="small">编辑</el-button>
<el-button style=" margin-right: 9px;" type="text" size="small">记录</el-button>
<el-popconfirm confirm-button-text='确定' cancel-button-text='取消' icon="el-icon-info" icon-color="red"
title="确定删除吗?" @confirm="deleteTableItem(scope.row)">
<el-button style="color: red;" type="text" size="small" slot="reference">删除</el-button>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
<el-pagination background class="pagination" style="margin-top: 16px;margin-right: 16px;float: right;"
:current-page="pageData.pageNum" :page-sizes="pageData.pageSizes" layout="total, prev, pager, next, sizes, jumper"
:total="pageData.total" @size-change="getTableData()">
</el-pagination>
</div>
<el-dialog title="新增/编辑维养计划" @close="closeDialog" :visible.sync="dialogVisible" width="38%">
<div style="display: flex; margin-bottom: 16px;">
<div style="width: 5px; height: 16px; background-color: #31a08e; margin-right: 8px;"></div><span
style="font-weight: 600;">基础信息</span>
</div>
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
<el-form-item label-width="120px" label="堤防名称" prop="dikeCode">
<el-select v-model="ruleForm.dikeCode" placeholder="请选择" @change="ruleForm.name = ruleForm.dikeCode"
:disabled="prohibitEditing">
<el-option v-for="item in embankmentList" :label="item.label" :value="item.value" :key="item.id"></el-option>
</el-select>
<el-button button class="search-btn" type="success" size="small">详情</el-button>
<el-button button class="search-btn" type="success" size="small">打开地图</el-button>
</el-form-item>
<div style="display: flex;">
<el-form-item label-width="120px" label="维养计划名称" prop="name">
<el-input style="width: 202px;" v-model="ruleForm.name" placeholder="请输入" :disabled="prohibitEditing" />
</el-form-item>
<el-form-item label-width="120px" label="计划时间" prop="planTime">
<el-date-picker v-model="ruleForm.planTime" type="month" placeholder="选择月" :disabled="prohibitEditing"
value-format="yy-MM-dd">
</el-date-picker>
</el-form-item>
</div>
<div style="display: flex;">
<el-form-item label-width="120px" label="国补资金" prop="nationalSupplement">
<el-input style="width: 79px;" v-model="ruleForm.nationalSupplement" type="number" @input="calculateBudget()"
placeholder="请输入" :disabled="prohibitEditing" /> 万元
</el-form-item>
<el-form-item label-width="120px" label="自筹资金" prop="selfSupplement">
<el-input style="width: 79px;" v-model="ruleForm.selfSupplement" type="number" @input="calculateBudget()"
placeholder="请输入" :disabled="prohibitEditing" /> 万元
</el-form-item>
<el-form-item label-width="120px" label="项目预算">
<el-input style="width: 79px;" v-model="ruleForm.budget" disabled />
</el-form-item>
</div>
<el-form-item label-width="120px" label="具体地点" prop="location">
<el-input style="width: 542px;" :autosize="{ minRows: 5 }" type="textarea" maxlength="500" show-word-limit
v-model="ruleForm.location" placeholder="请输入" :disabled="prohibitEditing" />
</el-form-item>
<el-form-item label-width="120px" label="维修养护内容" prop="content">
<el-input style="width: 542px;" :autosize="{ minRows: 5 }" type="textarea" maxlength="500" show-word-limit
v-model="ruleForm.content" placeholder="请输入" :disabled="prohibitEditing" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button size="mini" @click="resetForm('ruleForm')"> </el-button>
<el-button v-if="!prohibitEditing" size="mini" type="primary" @click="submitForm('ruleForm')">保存</el-button>
</div>
</el-dialog>
</div>
</template>
<style scoped lang="less">
.body {
width: 100%;
min-height: calc(100vh - 56px);
margin-left: 24px;
.top-title {
height: 40px;
background-color: white;
display: flex;
padding-left: 16px;
align-items: center;
font-weight: 600;
}
.table-box {
width: 100%;
min-height: calc(100vh - 56px - 64px);
margin-top: 24px;
padding: 16px;
background-color: white;
.top-search {
display: flex;
align-items: center;
margin-bottom: 8px;
.search-input {
width: 300px;
margin-right: 10px;
}
}
.table {
height: calc(680px - 34px);
}
}
.search-btn {
margin-left: 10px;
background-color: #37b29e;
border: none;
&:hover {
background-color: #5ac6b9;
}
&:active {
background-color: #2b8070;
}
;
}
}
/deep/.el-input__count {
height: 15px;
line-height: 15px;
margin-right: 10px;
margin-bottom: -4px;
}
</style>

29
src/views/runManage/maintenance/maintenancePlan/index.vue

@ -0,0 +1,29 @@
<!-- 维修计划管理 -->
<script>
import Dike from './Dike.vue'
import Reservoir from './Reservoir.vue'
import Sluice from './Sluice.vue'
export default {
name: 'InspectionItems',
components: {
Reservoir, //
Sluice, //
Dike, //
},
computed: {
selectTab() {
return this.$store.state.topTab.selectTab
},
}
}
</script>
<template>
<div>
<Reservoir v-if="selectTab == 0"></Reservoir>
<Sluice v-if="selectTab == 1"></Sluice>
<Dike v-if="selectTab == 2"></Dike>
</div>
</template>
<style scoped lang="less"></style>

507
src/views/runManage/maintenance/maintenanceRecords/Dike.vue

@ -0,0 +1,507 @@
<!-- 维修记录-堤防 -->
<script>
import { putDFMaintenanceRecords, deleteDFMaintenanceRecords, postDFMaintenanceRecords, postDFMaintenanceRecordsList, getDFMaintenanceRecords, getDicts, postDFMaintenancePlanList, getDFMaintenancePlan, listUser } from '@/api/management'
export default {
name: 'InspectionItems',
data() {
return {
searchInput: '',
dialogVisible: false,
prohibitEditing: false,
statusList: [], //
personnelList: [], //
planData: {
dikeCode: '',
planTime: '',
nationalSupplement: '',
selfSupplement: '',
budget: '',
location: '',
content: ''
}, //
planList: [],
embankmentList: [
{
label: '堤防1',
value: '1',
id: '1',
},
{
label: '堤防2',
value: '2',
id: '2',
},
{
label: '堤防3',
value: '3',
id: '3',
}
], //
selectStatus: '2', //
tableData: [], //
pageData: {
pageNum: 1, //
pageSize: 10, //
pageSizes: [10, 20, 50, 100],
total: 0 //
},
ruleForm: {
name: '',
planId: '',
before: '',
middle: '',
after: '',
maintenanceFunds: 0,
operators: [],
selectUser: [],
implement: '',
remark: '',
status: 0,
},
rules: {
planId: [
{ required: true, message: '请输入维养计划名称', trigger: 'blur' }
],
before: [
{ required: true, message: '请输入维修养护前', trigger: 'blur' }
],
middle: [
{ required: true, message: '请输入维修养护过程', trigger: 'blur' }
],
after: [
{ required: true, message: '请输入维修养护结束后', trigger: 'blur' }
]
}
}
},
watch: {
dialogVisible(newVal, oldVal) {
if (oldVal) {
this.prohibitEditing = false
}
}
},
methods: {
//
deleteTableItem(row) {
deleteDFMaintenanceRecords(row.id).then((res) => {
console.log('🚀res🚀', res)
this.getTableData()
this.$message.success('删除成功');
})
},
//
viewOrEditPlanDetails(row, edit = false) {
if (!edit) {
this.prohibitEditing = true
}
getDFMaintenanceRecords(row.id).then((res) => {
// select
if (res.data.operators) {
this.personnelList = []
res.data.operators.forEach(element => {
listUser({
data: {
timeView: {
timeField: "create_time"
},
},
cv: {
name: "nickName",
type: "like",
value: element.name
},
pageSize: 10,
pageNum: 1
}).then((res) => {
this.personnelList.push(res.records[0])
})
});
}
this.ruleForm = res.data
//
this.ruleForm.selectUser = []
res.data.operators.forEach(element => {
let a = {
id: element.uid,
lebel: element.name
}
this.ruleForm.selectUser.push(a)
});
this.dialogVisible = true
})
},
//
submitForm(formName, confirm = false) {
this.$refs[formName].validate((valid) => {
if (valid) {
let user = []
this.ruleForm.selectUser.forEach(element => {
let a = {
name: element.nickName,
uid: element.id
}
user.push(a)
});
console.log('🚀user🚀', user)
this.ruleForm.operators = user
if (confirm) {
this.ruleForm.status = 1
}
this.ruleForm.maintenanceFunds = Number(this.ruleForm.maintenanceFunds)
if (this.ruleForm.id) {
putDFMaintenanceRecords(this.ruleForm).then(() => {
this.getTableData()
this.dialogVisible = false
this.$message({
message: confirm ? '确认成功' : '保存成功',
type: 'success'
})
})
} else {
postDFMaintenanceRecords(this.ruleForm).then(() => {
this.getTableData()
this.dialogVisible = false
this.$message({
message: confirm ? '确认成功' : '保存成功',
type: 'success'
})
})
}
} else {
console.log('校验不通过');
return false;
}
});
},
//
searchPlan(value) {
postDFMaintenancePlanList({
data: {
timeView: {
timeField: "create_time"
},
},
cv: {
name: "name",
type: "like",
value
},
pageSize: 100,
pageNum: 1
}).then((res) => {
if (res) {
this.planList = res.records
}
})
},
//
changeSelectPlan() {
getDFMaintenancePlan(this.ruleForm.planId).then((res) => {
if (res.data) {
this.ruleForm.name = res.data.name
this.planData = res.data
this.planData.budget = res.data.nationalSupplement + res.data.selfSupplement
}
})
},
//
searchUser(e) {
listUser({
data: {
timeView: {
timeField: "create_time"
},
},
cv: {
name: "nickName",
type: "like",
value: e
},
pageSize: 100,
pageNum: 1
}).then((res) => {
this.personnelList = res.records
console.log('🚀用户数据🚀', res)
console.log('🚀用户数据🚀', this.ruleForm.operators)
})
},
// dialog
closeDialog(ruleForm = 'ruleForm') {
console.log('触发关闭dialog', ruleForm);
this.$refs[ruleForm].resetFields();
this.ruleForm = {
name: '',
planId: '',
before: '',
middle: '',
after: '',
maintenanceFunds: 0,
operators: [],
implement: '',
remark: '',
status: 0,
}
},
//
getTableData(value = '') {
postDFMaintenanceRecordsList({
data: {
timeView: {
timeField: "create_time"
},
},
cv: {
name: "name",
type: "like",
value
},
pageSize: this.pageData.pageSize,
pageNum: this.pageData.pageNum
}).then((res) => {
if (res) {
this.tableData = res.records
this.pageData.total = res.total
}
console.log('🚀表格数据🚀', res)
})
}
},
mounted() {
//
this.getTableData()
//
getDicts('xs_record_status').then((res) => {
if (res.data && Array.isArray(res.data)) {
this.statusList = res.data
}
})
},
}
</script>
<template>
<div class="body">
<div class="top-title">
基础信息管理
</div>
<div class="table-box">
<div class="top-search">
<span>维养计划名称</span>
<el-input class="search-input" v-model="searchInput" placeholder="请输入维养计划名称" />
<span>状态</span>
<el-select v-model="selectStatus" placeholder="请选择">
<el-option label="全部" value="2" />
<el-option v-for="item in statusList" :label="item.dictLabel" :value="item.dictValue"
:key="item.id"></el-option>
</el-select>
<el-button class="search-btn" type="success" @click="getTableData(searchInput)">搜索</el-button>
</div>
<el-button class="search-btn" style=" margin-right: 16px;margin-bottom: 8px; float: right;" type="success"
@click="dialogVisible = true">添加</el-button>
<el-table class="table" height="640" :data="tableData" border>
<el-table-column type="index" align="center" label="序号" width="100" />
<el-table-column prop="name" align="center" label="维养计划名称" />
<el-table-column prop="before" align="center" label="维修养护前" />
<el-table-column prop="middle" align="center" label="维修养护过程" />
<el-table-column prop="after" align="center" label="维修养护结束后" />
<el-table-column prop="maintenanceFunds" align="center" label="维修养护费用" />
<el-table-column prop="status" align="center" label="状态">
<template slot-scope="scope">
<span v-if="scope.row.status == '0'" class="is-save">已保存</span>
<span v-else class="is-confirm">已确认</span>
</template>
</el-table-column>
<el-table-column prop="createTime" align="center" sortable label="创建时间">
</el-table-column>
<el-table-column prop="updateTime" align="center" sortable label="更新时间">
</el-table-column>
<el-table-column prop="address" align="center" label="操作">
<template slot-scope="scope">
<el-button @click="viewOrEditPlanDetails(scope.row)" type="text" size="small">查看</el-button>
<el-button @click="viewOrEditPlanDetails(scope.row, true)" type="text" v-if="!scope.row.status"
size="small">编辑</el-button>
<el-popconfirm v-if="!scope.row.status" confirm-button-text='确定' cancel-button-text='取消' icon="el-icon-info"
icon-color="red" title="确定删除吗?" @confirm="deleteTableItem(scope.row)">
<el-button style="color: red; margin-left: 10px;" type="text" size="small" slot="reference">删除</el-button>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
<el-pagination background class="pagination" style="margin-top: 16px;margin-right: 16px;float: right;"
:current-page="pageData.pageNum" :page-sizes="pageData.pageSizes" layout="total, prev, pager, next, sizes, jumper"
:total="pageData.total" @size-change="getTableData()">
</el-pagination>
</div>
<el-dialog title="新增/编辑维养计划" @close="closeDialog" :visible.sync="dialogVisible" width="40%">
<div style="display: flex; margin-bottom: 16px;">
<div style="width: 5px; height: 16px; background-color: #31a08e; margin-right: 8px;"></div><span
style="font-weight: 600;">基础信息</span>
</div>
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" class="demo-ruleForm">
<el-form-item label-width="130px" label="维养计划名称" prop="planId">
<el-select v-model="ruleForm.planId" filterable remote :remote-method="searchPlan" placeholder="请输入"
@change="changeSelectPlan" :disabled="prohibitEditing">
<el-option v-for="item in planList" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
<el-button button class="search-btn" type="success" size="small">详情</el-button>
<el-button button class="search-btn" type="success" size="small">打开地图</el-button>
</el-form-item>
<div style="display: flex;">
<el-form-item label-width="130px" label="堤防名称">
<el-input v-model="planData.dikeCode" disabled />
</el-form-item>
<el-form-item label-width="130px" label="计划时间">
<el-date-picker v-model="planData.planTime" type="month" disabled>
</el-date-picker>
</el-form-item>
</div>
<div style="display: flex;">
<el-form-item label-width="130px" label="国补资金">
<div style="display: flex;">
<el-input v-model="planData.nationalSupplement" type="number" disabled style="margin-right: 5px;" />
<div style="width: 50px;">万元</div>
</div>
</el-form-item>
<el-form-item label-width="90px" label="自筹资金">
<div style="display: flex;">
<el-input v-model="planData.selfSupplement" type="number" disabled style="margin-right: 5px;" />
<div style="width: 50px;">万元</div>
</div>
</el-form-item>
<el-form-item label-width="90px" label="项目预算">
<el-input v-model="planData.budget" disabled />
</el-form-item>
</div>
<el-form-item label-width="130px" label="具体地点">
<el-input :autosize="{ minRows: 5 }" type="textarea" maxlength="500" show-word-limit v-model="planData.location"
disabled />
</el-form-item>
<el-form-item label-width="130px" label="维修养护内容">
<el-input :autosize="{ minRows: 5 }" type="textarea" maxlength="500" show-word-limit v-model="planData.content"
disabled />
</el-form-item>
<div style="display: flex; margin-bottom: 16px;">
<div style="width: 5px; height: 16px; background-color: #31a08e; margin-right: 8px;"></div><span
style="font-weight: 600;">维修养护记录</span>
</div>
<el-form-item label-width="130px" label="维修养护前" prop="before">
<el-input v-model="ruleForm.before" placeholder="请输入" style="width: 202px;" :disabled="prohibitEditing" />
</el-form-item>
<el-form-item label-width="130px" label="维修养护过程" prop="middle">
<el-input v-model="ruleForm.middle" placeholder="请输入" style="width: 202px;" :disabled="prohibitEditing" />
</el-form-item>
<el-form-item label-width="130px" label="维修养护结束后" prop="after">
<el-input v-model="ruleForm.after" placeholder="请输入" style="width: 202px;" :disabled="prohibitEditing" />
</el-form-item>
<el-form-item label-width="130px" label="维修养护费用" prop="maintenanceFunds">
<el-input v-model="ruleForm.maintenanceFunds" placeholder="请输入" style="width: 165px;" type="number"
:disabled="prohibitEditing" /> 万元
</el-form-item>
<el-form-item label-width="130px" label="养护人员" prop="operators">
<!-- <el-input v-model="ruleForm.operators" placeholder="请输入" style="width: 202px;" /> -->
<el-select v-model="ruleForm.selectUser" multiple filterable remote :remote-method="searchUser" value-key="id"
:disabled="prohibitEditing" placeholder="请输入关键词搜索用户" prop="selectUser">
<el-option v-for="item in personnelList" :key="item.id" :label="item.nickName" :value="item">
</el-option>
</el-select>
</el-form-item>
<el-form-item label-width="130px" label="落实情况" prop="implement">
<el-input :autosize="{ minRows: 5 }" type="textarea" maxlength="500" show-word-limit
v-model="ruleForm.implement" placeholder="请输入" :disabled="prohibitEditing" />
</el-form-item>
<el-form-item label-width="130px" label="备注" prop="remark">
<el-input :autosize="{ minRows: 5 }" type="textarea" maxlength="500" show-word-limit v-model="ruleForm.remark"
placeholder="请输入" :disabled="prohibitEditing" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button size="mini" @click="resetForm('ruleForm')"> </el-button>
<el-button v-if="!prohibitEditing" size="mini" type="primary" @click="submitForm('ruleForm')">保存</el-button>
<el-button v-if="this.ruleForm.status == 0 && prohibitEditing" size="mini" type="primary"
@click="submitForm('ruleForm', true)">确认</el-button>
</div>
</el-dialog>
</div>
</template>
<style scoped lang="less">
.body {
width: 100%;
min-height: calc(100vh - 56px);
margin-left: 24px;
.top-title {
height: 40px;
background-color: white;
display: flex;
padding-left: 16px;
align-items: center;
font-weight: 600;
}
.table-box {
width: 100%;
min-height: calc(100vh - 56px - 64px);
margin-top: 24px;
padding: 16px;
background-color: white;
.top-search {
display: flex;
align-items: center;
margin-bottom: 8px;
.search-input {
width: 300px;
margin-right: 10px;
}
}
.table {
height: calc(680px - 34px);
.is-confirm {
background-color: #ebf7f5;
border-radius: 4px;
color: #36b29e;
padding: 0px 6px;
}
.is-save {
background-color: #f8f9fb;
border: 1px solid #bfbfbf;
border-radius: 4px;
color: #bfbfbf;
padding: 0px 6px;
}
}
}
.search-btn {
margin-left: 10px;
background-color: #37b29e;
border: none;
&:hover {
background-color: #5ac6b9;
}
&:active {
background-color: #2b8070;
}
;
}
}
/deep/.el-input__count {
height: 15px;
line-height: 15px;
margin-right: 10px;
margin-bottom: -4px;
}
</style>

22
src/views/runManage/maintenance/maintenanceRecords/Reservoir.vue

@ -0,0 +1,22 @@
<!-- 维修记录-水库 -->
<script>
export default {
name: '',
data() {
return {
}
},
methods: {
}
}
</script>
<template>
<div>
水库
</div>
</template>
<style scoped lang="less"></style>

507
src/views/runManage/maintenance/maintenanceRecords/Sluice.vue

@ -0,0 +1,507 @@
<!-- 维修记录-水闸 -->
<script>
import { putSZMaintenanceRecords, deleteSZMaintenanceRecords, postSZMaintenanceRecords, postSZMaintenanceRecordsList, getSZMaintenanceRecords, getDicts, postSZMaintenancePlanList, getSZMaintenancePlan, listUser } from '@/api/management'
export default {
name: 'InspectionItems',
data() {
return {
searchInput: '',
dialogVisible: false,
prohibitEditing: false,
statusList: [], //
personnelList: [], //
planData: {
dikeCode: '',
planTime: '',
nationalSupplement: '',
selfSupplement: '',
budget: '',
location: '',
content: ''
}, //
planList: [],
embankmentList: [
{
label: '堤防1',
value: '1',
id: '1',
},
{
label: '堤防2',
value: '2',
id: '2',
},
{
label: '堤防3',
value: '3',
id: '3',
}
], //
selectStatus: '2', //
tableData: [], //
pageData: {
pageNum: 1, //
pageSize: 10, //
pageSizes: [10, 20, 50, 100],
total: 0 //
},
ruleForm: {
name: '',
planId: '',
before: '',
middle: '',
after: '',
maintenanceFunds: 0,
operators: [],
selectUser: [],
implement: '',
remark: '',
status: 0,
},
rules: {
planId: [
{ required: true, message: '请输入维养计划名称', trigger: 'blur' }
],
before: [
{ required: true, message: '请输入维修养护前', trigger: 'blur' }
],
middle: [
{ required: true, message: '请输入维修养护过程', trigger: 'blur' }
],
after: [
{ required: true, message: '请输入维修养护结束后', trigger: 'blur' }
]
}
}
},
watch: {
dialogVisible(newVal, oldVal) {
if (oldVal) {
this.prohibitEditing = false
}
}
},
methods: {
//
deleteTableItem(row) {
deleteSZMaintenanceRecords(row.id).then((res) => {
console.log('🚀res🚀', res)
this.getTableData()
this.$message.success('删除成功');
})
},
//
viewOrEditPlanDetails(row, edit = false) {
if (!edit) {
this.prohibitEditing = true
}
getSZMaintenanceRecords(row.id).then((res) => {
// select
if (res.data.operators) {
this.personnelList = []
res.data.operators.forEach(element => {
listUser({
data: {
timeView: {
timeField: "create_time"
},
},
cv: {
name: "nickName",
type: "like",
value: element.name
},
pageSize: 10,
pageNum: 1
}).then((res) => {
this.personnelList.push(res.records[0])
})
});
}
this.ruleForm = res.data
//
this.ruleForm.selectUser = []
res.data.operators.forEach(element => {
let a = {
id: element.uid,
lebel: element.name
}
this.ruleForm.selectUser.push(a)
});
this.dialogVisible = true
})
},
//
submitForm(formName, confirm = false) {
this.$refs[formName].validate((valid) => {
if (valid) {
let user = []
this.ruleForm.selectUser.forEach(element => {
let a = {
name: element.nickName,
uid: element.id
}
user.push(a)
});
console.log('🚀user🚀', user)
this.ruleForm.operators = user
if (confirm) {
this.ruleForm.status = 1
}
this.ruleForm.maintenanceFunds = Number(this.ruleForm.maintenanceFunds)
if (this.ruleForm.id) {
putSZMaintenanceRecords(this.ruleForm).then(() => {
this.getTableData()
this.dialogVisible = false
this.$message({
message: confirm ? '确认成功' : '保存成功',
type: 'success'
})
})
} else {
postSZMaintenanceRecords(this.ruleForm).then(() => {
this.getTableData()
this.dialogVisible = false
this.$message({
message: confirm ? '确认成功' : '保存成功',
type: 'success'
})
})
}
} else {
console.log('校验不通过');
return false;
}
});
},
//
searchPlan(value) {
postSZMaintenancePlanList({
data: {
timeView: {
timeField: "create_time"
},
},
cv: {
name: "name",
type: "like",
value
},
pageSize: 100,
pageNum: 1
}).then((res) => {
if (res) {
this.planList = res.records
}
})
},
//
changeSelectPlan() {
getSZMaintenancePlan(this.ruleForm.planId).then((res) => {
if (res.data) {
this.ruleForm.name = res.data.name
this.planData = res.data
this.planData.budget = res.data.nationalSupplement + res.data.selfSupplement
}
})
},
//
searchUser(e) {
listUser({
data: {
timeView: {
timeField: "create_time"
},
},
cv: {
name: "nickName",
type: "like",
value: e
},
pageSize: 100,
pageNum: 1
}).then((res) => {
this.personnelList = res.records
console.log('🚀用户数据🚀', res)
console.log('🚀用户数据🚀', this.ruleForm.operators)
})
},
// dialog
closeDialog(ruleForm = 'ruleForm') {
console.log('触发关闭dialog', ruleForm);
this.$refs[ruleForm].resetFields();
this.ruleForm = {
name: '',
planId: '',
before: '',
middle: '',
after: '',
maintenanceFunds: 0,
operators: [],
implement: '',
remark: '',
status: 0,
}
},
//
getTableData(value = '') {
postSZMaintenanceRecordsList({
data: {
timeView: {
timeField: "create_time"
},
},
cv: {
name: "name",
type: "like",
value
},
pageSize: this.pageData.pageSize,
pageNum: this.pageData.pageNum
}).then((res) => {
if (res) {
this.tableData = res.records
this.pageData.total = res.total
}
console.log('🚀表格数据🚀', res)
})
}
},
mounted() {
//
this.getTableData()
//
getDicts('xs_record_status').then((res) => {
if (res.data && Array.isArray(res.data)) {
this.statusList = res.data
}
})
},
}
</script>
<template>
<div class="body">
<div class="top-title">
基础信息管理
</div>
<div class="table-box">
<div class="top-search">
<span>维养计划名称</span>
<el-input class="search-input" v-model="searchInput" placeholder="请输入维养计划名称" />
<span>状态</span>
<el-select v-model="selectStatus" placeholder="请选择">
<el-option label="全部" value="2" />
<el-option v-for="item in statusList" :label="item.dictLabel" :value="item.dictValue"
:key="item.id"></el-option>
</el-select>
<el-button class="search-btn" type="success" @click="getTableData(searchInput)">搜索</el-button>
</div>
<el-button class="search-btn" style=" margin-right: 16px;margin-bottom: 8px; float: right;" type="success"
@click="dialogVisible = true">添加</el-button>
<el-table class="table" height="640" :data="tableData" border>
<el-table-column type="index" align="center" label="序号" width="100" />
<el-table-column prop="name" align="center" label="维养计划名称" />
<el-table-column prop="before" align="center" label="维修养护前" />
<el-table-column prop="middle" align="center" label="维修养护过程" />
<el-table-column prop="after" align="center" label="维修养护结束后" />
<el-table-column prop="maintenanceFunds" align="center" label="维修养护费用" />
<el-table-column prop="status" align="center" label="状态">
<template slot-scope="scope">
<span v-if="scope.row.status == '0'" class="is-save">已保存</span>
<span v-else class="is-confirm">已确认</span>
</template>
</el-table-column>
<el-table-column prop="createTime" align="center" sortable label="创建时间">
</el-table-column>
<el-table-column prop="updateTime" align="center" sortable label="更新时间">
</el-table-column>
<el-table-column prop="address" align="center" label="操作">
<template slot-scope="scope">
<el-button @click="viewOrEditPlanDetails(scope.row)" type="text" size="small">查看</el-button>
<el-button @click="viewOrEditPlanDetails(scope.row, true)" type="text" v-if="!scope.row.status"
size="small">编辑</el-button>
<el-popconfirm v-if="!scope.row.status" confirm-button-text='确定' cancel-button-text='取消' icon="el-icon-info"
icon-color="red" title="确定删除吗?" @confirm="deleteTableItem(scope.row)">
<el-button style="color: red; margin-left: 10px;" type="text" size="small" slot="reference">删除</el-button>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
<el-pagination background class="pagination" style="margin-top: 16px;margin-right: 16px;float: right;"
:current-page="pageData.pageNum" :page-sizes="pageData.pageSizes" layout="total, prev, pager, next, sizes, jumper"
:total="pageData.total" @size-change="getTableData()">
</el-pagination>
</div>
<el-dialog title="新增/编辑维养计划" @close="closeDialog" :visible.sync="dialogVisible" width="40%">
<div style="display: flex; margin-bottom: 16px;">
<div style="width: 5px; height: 16px; background-color: #31a08e; margin-right: 8px;"></div><span
style="font-weight: 600;">基础信息</span>
</div>
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" class="demo-ruleForm">
<el-form-item label-width="130px" label="维养计划名称" prop="planId">
<el-select v-model="ruleForm.planId" filterable remote :remote-method="searchPlan" placeholder="请输入"
@change="changeSelectPlan" :disabled="prohibitEditing">
<el-option v-for="item in planList" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
<el-button button class="search-btn" type="success" size="small">详情</el-button>
<el-button button class="search-btn" type="success" size="small">打开地图</el-button>
</el-form-item>
<div style="display: flex;">
<el-form-item label-width="130px" label="堤防名称">
<el-input v-model="planData.dikeCode" disabled />
</el-form-item>
<el-form-item label-width="130px" label="计划时间">
<el-date-picker v-model="planData.planTime" type="month" disabled>
</el-date-picker>
</el-form-item>
</div>
<div style="display: flex;">
<el-form-item label-width="130px" label="国补资金">
<div style="display: flex;">
<el-input v-model="planData.nationalSupplement" type="number" disabled style="margin-right: 5px;" />
<div style="width: 50px;">万元</div>
</div>
</el-form-item>
<el-form-item label-width="90px" label="自筹资金">
<div style="display: flex;">
<el-input v-model="planData.selfSupplement" type="number" disabled style="margin-right: 5px;" />
<div style="width: 50px;">万元</div>
</div>
</el-form-item>
<el-form-item label-width="90px" label="项目预算">
<el-input v-model="planData.budget" disabled />
</el-form-item>
</div>
<el-form-item label-width="130px" label="具体地点">
<el-input :autosize="{ minRows: 5 }" type="textarea" maxlength="500" show-word-limit v-model="planData.location"
disabled />
</el-form-item>
<el-form-item label-width="130px" label="维修养护内容">
<el-input :autosize="{ minRows: 5 }" type="textarea" maxlength="500" show-word-limit v-model="planData.content"
disabled />
</el-form-item>
<div style="display: flex; margin-bottom: 16px;">
<div style="width: 5px; height: 16px; background-color: #31a08e; margin-right: 8px;"></div><span
style="font-weight: 600;">维修养护记录</span>
</div>
<el-form-item label-width="130px" label="维修养护前" prop="before">
<el-input v-model="ruleForm.before" placeholder="请输入" style="width: 202px;" :disabled="prohibitEditing" />
</el-form-item>
<el-form-item label-width="130px" label="维修养护过程" prop="middle">
<el-input v-model="ruleForm.middle" placeholder="请输入" style="width: 202px;" :disabled="prohibitEditing" />
</el-form-item>
<el-form-item label-width="130px" label="维修养护结束后" prop="after">
<el-input v-model="ruleForm.after" placeholder="请输入" style="width: 202px;" :disabled="prohibitEditing" />
</el-form-item>
<el-form-item label-width="130px" label="维修养护费用" prop="maintenanceFunds">
<el-input v-model="ruleForm.maintenanceFunds" placeholder="请输入" style="width: 165px;" type="number"
:disabled="prohibitEditing" /> 万元
</el-form-item>
<el-form-item label-width="130px" label="养护人员" prop="operators">
<!-- <el-input v-model="ruleForm.operators" placeholder="请输入" style="width: 202px;" /> -->
<el-select v-model="ruleForm.selectUser" multiple filterable remote :remote-method="searchUser" value-key="id"
:disabled="prohibitEditing" placeholder="请输入关键词搜索用户" prop="selectUser">
<el-option v-for="item in personnelList" :key="item.id" :label="item.nickName" :value="item">
</el-option>
</el-select>
</el-form-item>
<el-form-item label-width="130px" label="落实情况" prop="implement">
<el-input :autosize="{ minRows: 5 }" type="textarea" maxlength="500" show-word-limit
v-model="ruleForm.implement" placeholder="请输入" :disabled="prohibitEditing" />
</el-form-item>
<el-form-item label-width="130px" label="备注" prop="remark">
<el-input :autosize="{ minRows: 5 }" type="textarea" maxlength="500" show-word-limit v-model="ruleForm.remark"
placeholder="请输入" :disabled="prohibitEditing" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button size="mini" @click="resetForm('ruleForm')"> </el-button>
<el-button v-if="!prohibitEditing" size="mini" type="primary" @click="submitForm('ruleForm')">保存</el-button>
<el-button v-if="this.ruleForm.status == 0 && prohibitEditing" size="mini" type="primary"
@click="submitForm('ruleForm', true)">确认</el-button>
</div>
</el-dialog>
</div>
</template>
<style scoped lang="less">
.body {
width: 100%;
min-height: calc(100vh - 56px);
margin-left: 24px;
.top-title {
height: 40px;
background-color: white;
display: flex;
padding-left: 16px;
align-items: center;
font-weight: 600;
}
.table-box {
width: 100%;
min-height: calc(100vh - 56px - 64px);
margin-top: 24px;
padding: 16px;
background-color: white;
.top-search {
display: flex;
align-items: center;
margin-bottom: 8px;
.search-input {
width: 300px;
margin-right: 10px;
}
}
.table {
height: calc(680px - 34px);
.is-confirm {
background-color: #ebf7f5;
border-radius: 4px;
color: #36b29e;
padding: 0px 6px;
}
.is-save {
background-color: #f8f9fb;
border: 1px solid #bfbfbf;
border-radius: 4px;
color: #bfbfbf;
padding: 0px 6px;
}
}
}
.search-btn {
margin-left: 10px;
background-color: #37b29e;
border: none;
&:hover {
background-color: #5ac6b9;
}
&:active {
background-color: #2b8070;
}
;
}
}
/deep/.el-input__count {
height: 15px;
line-height: 15px;
margin-right: 10px;
margin-bottom: -4px;
}
</style>

29
src/views/runManage/maintenance/maintenanceRecords/index.vue

@ -0,0 +1,29 @@
<!-- 维修记录 -->
<script>
import Dike from './Dike.vue'
import Reservoir from './Reservoir.vue'
import Sluice from './Sluice.vue'
export default {
name: 'InspectionItems',
components: {
Reservoir, //
Sluice, //
Dike, //
},
computed: {
selectTab() {
return this.$store.state.topTab.selectTab
},
}
}
</script>
<template>
<div>
<Reservoir v-if="selectTab == 0"></Reservoir>
<Sluice v-if="selectTab == 1"></Sluice>
<Dike v-if="selectTab == 2"></Dike>
</div>
</template>
<style scoped lang="less"></style>

3
vue.config.js

@ -37,8 +37,7 @@ module.exports = {
proxy: {
// detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: {
target: "http://127.0.0.1:18082",
// target: "http://192.168.1.20:8084",
target: "http://shuili-admin.product.dev.com:30115",
changeOrigin: true,
pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: '/tianhui-admin-web'

Loading…
Cancel
Save