Browse Source

Merge branch 'release-sy-v1.0.0' of ssh://gitlab.datameta.com:2224/project/water/shuili-vue into release-sy-v1.0.0

sy-water-data-board-ui
chenhaojie 1 year ago
parent
commit
bd258b545e
  1. 1
      package.json
  2. 38
      src/api/management/sluice.js
  3. 63
      src/api/sluice/index.js
  4. 6
      src/assets/styles/flex.scss
  5. 7
      src/views/dike/runManage/maintenance/maintenancePlan/index.vue
  6. 1
      src/views/dike/runManage/maintenance/maintenanceRecords/index.vue
  7. 1
      src/views/dike/runManage/pestAnimalControl/governanceRecords/index.vue
  8. 1
      src/views/dike/runManage/pestAnimalControl/planManagement/index.vue
  9. 3
      src/views/sluice/runManage/dispatch/index.vue
  10. 157
      src/views/sluice/runManage/dispatch/plan/components/edit.vue
  11. 317
      src/views/sluice/runManage/dispatch/plan/index.vue
  12. 120
      src/views/sluice/runManage/dispatch/record/components/edit.vue
  13. 293
      src/views/sluice/runManage/dispatch/record/index.vue
  14. 222
      src/views/sluice/runManage/dispatch/utilize/index.vue
  15. 7
      src/views/sluice/runManage/maintenance/maintenancePlan/index.vue
  16. 1
      src/views/sluice/runManage/maintenance/maintenanceRecords/index.vue
  17. 3
      src/views/sluice/runManage/monitoring/index.vue
  18. 258
      src/views/sluice/runManage/monitoring/sluice/index.vue
  19. 208
      src/views/sluice/runManage/monitoring/sluice/manage/components/edit.vue
  20. 367
      src/views/sluice/runManage/monitoring/sluice/manage/index.vue
  21. 120
      src/views/sluice/runManage/monitoring/sluice/record/components/edit.vue
  22. 219
      src/views/sluice/runManage/monitoring/sluice/record/index.vue
  23. 29
      src/views/sluice/runManage/supervisionInspetion/projectManage/index.vue
  24. 363
      src/views/sluice/runManage/supervisionInspetion/projectManage/projectReport.vue
  25. 352
      src/views/sluice/runManage/supervisionInspetion/projectManage/projectReportPage.vue
  26. 984
      src/views/sluice/runManage/supervisionInspetion/questionManage/index.vue
  27. 8
      src/views/sluice/runManage/supervisionInspetion/tasksManage/tasksDetails.vue
  28. 16
      vue.config.js

1
package.json

@ -59,6 +59,7 @@
"js-beautify": "1.10.2",
"js-cookie": "2.2.0",
"jsencrypt": "^3.2.0",
"jspdf": "^2.5.1",
"jsplumb": "^2.15.6",
"less": "^4.1.1",
"less-loader": "^7.0.0",

38
src/api/management/sluice.js

@ -1,6 +1,44 @@
// 水闸相关接口
import request from '@/utils/request'
// 水闸动态监测列表
export function postSZDevice(data) {
return request({
url: '/run/sz/device',
method: 'post',
data
})
}
// 水闸动态监测列表
export function postSZDeviceList(data) {
return request({
url: '/run/sz/device/list',
method: 'post',
data
})
}
// 查询水闸动态检测设备详情
export function getSZDevice(id) {
return request({
url: `/run/sz/device/${id}`,
method: 'get'
})
}
// 查询水闸动态检测设备详情
export function delSZDevice(id) {
return request({
url: `/run/sz/device/${id}`,
method: 'delete'
})
}
// 修改水闸动态检测设备
export function putSZDevice(data) {
return request({
url: `/run/sz/device/`,
method: 'put',
data
})
}
// 巡查项目管理-巡视检查列表
export function postSZInspectionProjectList(data) {
return request({

63
src/api/sluice/index.js

@ -9,6 +9,22 @@ export function getRunProjectList(data) {
data
})
}
// 水闸动态检测设备记录
export function getRunSzDeviceRecord(data) {
return request({
url: `/run/sz/device/record`,
method: 'post',
data
})
}
// 查询水闸动态检测设备记录列表
export function getRunSzDeviceRecordList(data) {
return request({
url: `/run/sz/device/record/list`,
method: 'post',
data
})
}
// 获取维修养护工程列表
export function getSluiceYhProjectList(data) {
@ -274,11 +290,11 @@ export function updateSuperviseWayItemData(data){
}
// 督检查办法-获取启用中的督检查办法
export function getEnableSuperviseWayData(data){
export function getEnableSuperviseWayData(params){
return request({
url: `/run/sz/superviseWay/enable`,
method: 'get',
data
params
})
}
@ -324,3 +340,46 @@ export function putSuperviseWayTaskDetailsData(data){
data
})
}
// 监督检查-新增工程问题上报
export function addSuperviseEngineeringReportData(data){
return request({
url: `/run/sz/superviseEngineering/add`,
method: 'post',
data
})
}
// 监督检查-工程详情
export function getSuperviseEngineeringReportDetailsData(id){
return request({
url: `/run/sz/superviseEngineering/detail/${id}`,
method: 'get'
})
}
// 监督检查-工程问题列表
export function getSuperviseEngineeringProblemListData(data){
return request({
url: `/run/sz/superviseEngineering/list`,
method: 'post',
data
})
}
// 监督检查-工程问题详情
export function getSuperviseEngineeringProblemDetailsData(id){
return request({
url: `/run/sz/superviseEngineering/problemDetail/${id}`,
method: 'get'
})
}
// 监督检查-工程问题问题处理和状态修改
export function updateSuperviseEngineeringProblemStatusAndData(data){
return request({
url: `/run/sz/superviseEngineering/updateStatus`,
method: 'put',
data
})
}

6
src/assets/styles/flex.scss

@ -1,6 +1,12 @@
.flex {
display: flex;
}
.flex-3{
flex: 3;
}
.flex-2{
flex: 2;
}
.flex-1{
flex: 1;
}

7
src/views/dike/runManage/maintenance/maintenancePlan/index.vue

@ -124,6 +124,11 @@ export default {
this.$message.success("删除成功");
});
},
addPlan() {
this.ruleForm.dikeCode = this.$route.query.dikeCode;
this.dialogVisible = true;
},
//
viewOrEditPlanDetails(row, edit = false) {
if (!edit) {
@ -302,7 +307,7 @@ export default {
class="search-btn"
style="margin-right: 16px; margin-bottom: 8px; float: right"
type="success"
@click="dialogVisible = true"
@click="addPlan"
>添加</el-button
>
</div>

1
src/views/dike/runManage/maintenance/maintenanceRecords/index.vue

@ -212,6 +212,7 @@ export default {
timeView: {
timeField: "create_time",
},
dikeCode: this.$route.query.dikeCode,
},
cv: {
name: "name",

1
src/views/dike/runManage/pestAnimalControl/governanceRecords/index.vue

@ -319,6 +319,7 @@ export default {
timeView: {
timeField: "create_time",
},
dikeCode: this.$route.query.dikeCode,
},
cv: {
name: "name",

1
src/views/dike/runManage/pestAnimalControl/planManagement/index.vue

@ -131,6 +131,7 @@ export default {
},
//
openAddDialog() {
this.ruleForm.dikeCode = this.$route.query.dikeCode;
//
this.getDicts("xc_w_month").then((res) => {
this.workMonth = res.data;

3
src/views/sluice/runManage/dispatch/index.vue

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

157
src/views/sluice/runManage/dispatch/plan/components/edit.vue

@ -0,0 +1,157 @@
<script>
export default {
name: "Edit",
props: {
model: {
type: Object,
default: null
}
},
data() {
return {
ruleForm: {
sluice: '',
plan: '',
sponsor: '',
code: '',
responsibility: '',
programme: '',
drawing: ''
},
rules: {
sluice: [
{ required: true, message: "请输入闸门名称", trigger: "blur" },
],
plan: [
{ required: true, message: "请输入计划名称", trigger: "blur" },
],
sponsor: [
{ required: true, message: "请选择主管单位", trigger: "blur" },
],
code: [
{ required: true, message: "请输入注册编码", trigger: "blur" },
],
responsibility: [
{ required: true, message: "请选择三个责任人", trigger: "blur" },
],
},
fileList: []
}
},
methods: {
handlePreview(file) {
console.log(file);
},
handleExceed(files, fileList) {
this.$message.warning(`当前限制选择 5 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
},
beforeRemove(file, fileList) {
return this.$confirm(`确定移除 ${ file.name }`);
}
}
}
</script>
<template>
<div style="display:flex; flex-direction: column">
<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"
:disabled="!!model && model.eventType !== 'edit'"
ref="ruleForm"
label-width="100px"
>
<el-col :span="24">
<el-form-item label-width="120px" label="水闸名称" prop="sluice">
<el-input style="width: 202px" v-model="ruleForm.sluice" placeholder="请输入水闸名称"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="120px" label="计划名称" prop="plan">
<el-input style="width: 202px" v-model="ruleForm.plan" placeholder="请输入计划名称"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="120px" label="主管单位" prop="sponsor">
<el-input style="width: 202px" v-model="ruleForm.sponsor"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="120px" label="注册编码" prop="code">
<el-input style="width: 202px" v-model="ruleForm.code" placeholder="请输入注册编码"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="120px" label="三个责任人" prop="responsibility">
<el-input style="width: 202px" v-model="ruleForm.responsibility"></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<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-col>
<el-col :span="12">
<el-form-item label-width="120px" label="调度方案" prop="programme">
<el-upload
class="upload-demo"
action="https://jsonplaceholder.typicode.com/posts/"
:on-preview="handlePreview"
:before-remove="beforeRemove"
multiple
accept=".doc, .docx, .pdf, .png, .jpg"
:limit="5"
:on-exceed="handleExceed"
:auto-upload="false"
:file-list="fileList">
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">只能上传doc/docx/pdf/png/JPG文件且不能超过50m</div>
</el-upload>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="120px" label="水闸建设图纸" prop="drawing">
<el-upload
class="upload-demo"
action="https://jsonplaceholder.typicode.com/posts/"
:on-preview="handlePreview"
:before-remove="beforeRemove"
accept=".pdf, .png, .jpg"
multiple
:limit="5"
:on-exceed="handleExceed"
:auto-upload="false"
:file-list="fileList">
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">只能上传pdf/png/JPG文件且不能超过50m</div>
</el-upload>
</el-form-item>
</el-col>
</el-form>
</div>
</template>
<style scoped lang="scss">
</style>

317
src/views/sluice/runManage/dispatch/plan/index.vue

@ -0,0 +1,317 @@
<!-- 巡查项目管理-水闸 -->
<script>
import Edit from './components/edit.vue'
import {
getDicts,
postSZInspectionProjectList,
postSZInspectionProject,
putSZInspectionProject,
deleteSZInspectionProject,
getSZInspectionProject,
} from "@/api/management";
export default {
name: "record",
components: {
Edit
},
data() {
return {
searchForm: {
code: '',
name: '',
status: '',
plan: ''
},
dialog: {
title: '新增水闸调度方案',
dom: '',
visible: false
},
mdl: null,
tableData: [], //
pageData: {
pageNum: 1, //
pageSize: 10, //
pageSizes: [10, 20, 50, 100],
total: 0, //
},
};
},
methods: {
handleCurrentPageChange(page) {
this.pageData.pageNum = page;
this.getTableData();
},
handlePageSizeChange(pageSize) {
this.pageData.pageSize = pageSize;
this.getTableData();
},
//
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);
});
},
//
resetSearch() {
if (!this.$refs['searchForm']) return
this.$refs['searchForm'].resetFields()
this.searchTableList();
},
//
handleAdd() {
this.dialog.title = '新增水闸调度方案'
this.dialog.dom = 'Edit'
this.dialog.visible = true
},
handleCheck(row) {
this.dialog.title = '查看水闸调度方案'
this.dialog.dom = 'Edit'
this.mdl = {...row}
this.dialog.visible = true
},
handleEdit(row) {
this.dialog.title = '编辑水闸调度方案'
this.dialog.dom = 'Edit'
this.mdl = {...row, eventType: 'edit'}
this.dialog.visible = true
},
handleDelete(row) {
this.dialog.dom = 'Edit'
this.mdl = {...row}
this.dialog.visible = true
},
//
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 {
return false;
}
});
},
// dialog
closeDialog() {
this.dialog.visible = false
this.mdl = null
},
//
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();
},
};
</script>
<template>
<div class="slider-right">
<div class="top-title">水闸操作记录</div>
<div class="table-box">
<el-form inline :model="searchForm" ref="searchForm" class="demo-ruleForm">
<el-form-item label="注册编码:" prop="gate">
<el-input v-model="searchForm.code" class="search-input" placeholder="请输入注册编码"></el-input>
</el-form-item>
<el-form-item label="计划名称:" prop="instruct">
<el-input v-model="searchForm.plan" class="search-input" placeholder="请输入计划名称"></el-input>
</el-form-item>
<el-form-item label="水闸名称:" prop="number">
<el-input v-model="searchForm.name" class="search-input" placeholder="请输入水闸名称"></el-input>
</el-form-item>
<el-form-item label="审批状态:" prop="number">
<el-input v-model="searchForm.status" class="search-input"></el-input>
</el-form-item>
<el-form-item>
<el-button class="search-btn" type="success" @click="searchTableList()">查询</el-button>
<el-button @click="resetSearch()">重置</el-button>
</el-form-item>
</el-form>
<el-button
class="search-btn"
style="margin-right: 16px; margin-bottom: 8px; float: right"
type="success"
@click="handleAdd()"
>新增</el-button
>
<el-table height="625" :data="tableData" border style="width: 100%">
<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 prop="center" align="center" label="计划名称">
</el-table-column>
<el-table-column prop="name" align="center" label="水闸名称">
</el-table-column>
<el-table-column prop="name" align="center" label="三个责任人">
</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="handleCheck(scope.row)"
type="text"
size="small"
>查看</el-button
>
<el-button
style="margin-right: 16px"
@click="handleEdit(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="handleDelete(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"
@current-change="(e) => handleCurrentPageChange(e)"
@size-change="(e) => handlePageSizeChange(e)"
>
</el-pagination>
</div>
<el-dialog
:title="dialog.title"
@close="closeDialog"
:visible.sync="dialog.visible"
width="50%"
>
<component :is="dialog.dom" :model="mdl"></component>
<div slot="footer" class="dialog-footer">
<el-button size="mini" @click="closeDialog"> </el-button>
<el-button size="mini" type="primary" @click="submitForm('ruleForm')"
>保存</el-button
>
</div>
</el-dialog>
</div>
</template>
<style scoped lang="less">
.top-title {
height: 50px;
background-color: white;
display: flex;
padding-left: 16px;
align-items: center;
font-weight: 600;
}
.table-box {
width: 100%;
height: calc(100% - 50px - 24px);
margin-top: 24px;
padding: 16px;
background-color: white;
.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;
}
}
}
</style>

120
src/views/sluice/runManage/dispatch/record/components/edit.vue

@ -0,0 +1,120 @@
<script>
export default {
name: "Edit",
props: {
model: {
type: Object,
default: null
}
},
data() {
return {
ruleForm: {
name: '',
number: '',
control: '',
instruct: '',
leftTrunk: '',
rightTrunk: '',
upstream: '',
downstream: '',
opening: '',
time: ''
},
rules: {
name: [
{ required: true, message: "请输入闸门名称", trigger: "blur" },
],
control: [
{ required: true, message: "请输入控制水位", trigger: "blur" },
],
leftTrunk: [
{ required: true, message: "请输入左干", trigger: "blur" },
],
rightTrunk: [
{ required: true, message: "请输入右干", trigger: "blur" },
],
}
}
}
}
</script>
<template>
<div>
<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"
:disabled="!!model"
ref="ruleForm"
label-width="100px"
>
<el-col :span="12">
<el-form-item label-width="120px" label="闸门" prop="name">
<el-input style="width: 202px" v-model="ruleForm.name"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="120px" label="闸号" prop="number">
<el-input style="width: 202px" v-model="ruleForm.number"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="120px" label="控制水位" prop="control">
<el-input style="width: 202px" v-model="ruleForm.control"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="120px" label="指令号" prop="instruct">
<el-input style="width: 202px" v-model="ruleForm.instruct"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="120px" label="左干" prop="leftTrunk">
<el-input style="width: 202px" v-model="ruleForm.leftTrunk"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="120px" label="右干" prop="rightTrunk">
<el-input style="width: 202px" v-model="ruleForm.rightTrunk"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="120px" label="上游水位" prop="upstream">
<el-input style="width: 202px" v-model="ruleForm.upstream"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="120px" label="下游水位" prop="downstream">
<el-input style="width: 202px" v-model="ruleForm.downstream"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="120px" label="开度" prop="opening">
<el-input style="width: 202px" v-model="ruleForm.opening"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="120px" label="时间" prop="time">
<el-input style="width: 202px" v-model="ruleForm.time"></el-input>
</el-form-item>
</el-col>
</el-form>
</div>
</template>
<style scoped lang="scss">
</style>

293
src/views/sluice/runManage/dispatch/record/index.vue

@ -0,0 +1,293 @@
<!-- 巡查项目管理-水闸 -->
<script>
import Edit from './components/edit.vue'
import {
getDicts,
postSZInspectionProjectList,
postSZInspectionProject,
putSZInspectionProject,
deleteSZInspectionProject,
getSZInspectionProject,
} from "@/api/management";
export default {
name: "record",
components: {
Edit
},
data() {
return {
searchForm: {
gate: '',
instruct: '',
number: ''
},
dialog: {
title: '新增操作记录',
dom: '',
visible: false
},
mdl: null,
tableData: [], //
pageData: {
pageNum: 1, //
pageSize: 10, //
pageSizes: [10, 20, 50, 100],
total: 0, //
},
};
},
methods: {
handleCurrentPageChange(page) {
this.pageData.pageNum = page;
this.getTableData();
},
handlePageSizeChange(pageSize) {
this.pageData.pageSize = pageSize;
this.getTableData();
},
//
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);
});
},
//
resetSearch() {
if (!this.$refs['searchForm']) return
this.$refs['searchForm'].resetFields()
this.searchTableList();
},
//
handleAdd() {
this.dialog.dom = 'Edit'
this.dialog.visible = true
},
handleCheck(row) {
this.dialog.dom = 'Edit'
this.mdl = {...row}
this.dialog.visible = true
},
//
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() {
this.dialog.visible = false
this.mdl = null
},
//
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();
},
};
</script>
<template>
<div class="slider-right">
<div class="top-title">水闸操作记录</div>
<div class="table-box">
<el-form inline :model="searchForm" ref="searchForm" class="demo-ruleForm">
<el-form-item label="闸门:" prop="gate">
<el-input v-model="searchForm.gate" class="search-input" placeholder="请输入闸门"></el-input>
</el-form-item>
<el-form-item label="指令号:" prop="instruct">
<el-input v-model="searchForm.instruct" class="search-input" placeholder="请输入指令号"></el-input>
</el-form-item>
<el-form-item label="闸号:" prop="number">
<el-input v-model="searchForm.number" class="search-input" placeholder="请输入闸号"></el-input>
</el-form-item>
<el-form-item>
<el-button class="search-btn" type="success" @click="searchTableList()">查询</el-button>
<el-button @click="resetSearch()">重置</el-button>
</el-form-item>
</el-form>
<el-button
class="search-btn"
style="margin-right: 16px; margin-bottom: 8px; float: right"
type="success"
@click="handleAdd()"
>新增</el-button
>
<el-table height="625" :data="tableData" border style="width: 100%">
<el-table-column type="index" align="center" label="序号">
</el-table-column>
<el-table-column prop="name" align="center" label="闸门" min-width="150">
</el-table-column>
<el-table-column prop="name" align="center" label="指令号" min-width="120">
</el-table-column>
<el-table-column prop="name" align="center" label="控制水位(m)" min-width="120">
</el-table-column>
<el-table-column prop="name" align="center" label="左干(m³/s)" min-width="120">
</el-table-column>
<el-table-column prop="name" align="center" label="右干(m³/s)" min-width="120">
</el-table-column>
<el-table-column prop="name" align="center" label="上游水位(m)" min-width="120">
</el-table-column>
<el-table-column prop="name" align="center" label="下游水位(m)" min-width="120">
</el-table-column>
<el-table-column prop="name" align="center" label="闸号" min-width="150">
</el-table-column>
<el-table-column prop="name" align="center" label="操作人" min-width="120">
</el-table-column>
<el-table-column prop="name" align="center" label="监护人" min-width="120">
</el-table-column>
<el-table-column
min-width="200"
prop="createTime"
align="center"
sortable
label="创建时间"
>
</el-table-column>
<el-table-column
min-width="200"
prop="updateTime"
align="center"
sortable
label="更新时间"
>
</el-table-column>
<el-table-column prop="address" align="center" label="操作" fixed="right">
<template slot-scope="scope">
<el-button
style="margin-right: 16px"
@click="handleCheck(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"
@current-change="(e) => handleCurrentPageChange(e)"
@size-change="(e) => handlePageSizeChange(e)"
>
</el-pagination>
</div>
<el-dialog
:title="dialog.title"
@close="closeDialog"
:visible.sync="dialog.visible"
width="50%"
>
<component :is="dialog.dom" :model="mdl"></component>
<div slot="footer" class="dialog-footer">
<el-button size="mini" @click="closeDialog"> </el-button>
<el-button size="mini" type="primary" @click="submitForm('ruleForm')"
>保存</el-button
>
</div>
</el-dialog>
</div>
</template>
<style scoped lang="less">
.top-title {
height: 50px;
background-color: white;
display: flex;
padding-left: 16px;
align-items: center;
font-weight: 600;
}
.table-box {
width: 100%;
height: calc(100% - 50px - 24px);
margin-top: 24px;
padding: 16px;
background-color: white;
.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;
}
}
}
</style>

222
src/views/sluice/runManage/dispatch/utilize/index.vue

@ -0,0 +1,222 @@
<!-- 调度运用管理-水闸 -->
<script>
import {
getDicts,
postSZInspectionProjectList,
} from "@/api/management";
import {
getRunSzDeviceRecord
} from "@/api/sluice";
export default {
name: "utilize",
data() {
return {
searchInput: "",
searchType: 3,
examType: [], //
tableData: [], //
pageData: {
pageNum: 1, //
pageSize: 10, //
pageSizes: [10, 20, 50, 100],
total: 0, //
},
};
},
methods: {
handleGoPlan(row) {
this.$router.push({
path: "plan",
query: { id: row.id },
});
},
handleGoRecord(row) {
this.$router.push({
path: "record",
query: { id: row.id },
});
},
handleCurrentPageChange(page) {
this.pageData.pageNum = page;
this.getTableData();
},
handlePageSizeChange(pageSize) {
this.pageData.pageSize = pageSize;
this.getTableData();
},
//
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);
});
},
//
getTableData() {
(this.searchInput = ""),
(this.searchType = 3),
getRunSzDeviceRecord({
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) => {
this.examType = res.data;
});
},
};
</script>
<template>
<div class="slider-right">
<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-table height="625" :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 prop="name" align="center" label="水闸名代码">
</el-table-column>
<el-table-column prop="name" align="center" label="管理单位">
</el-table-column>
<el-table-column prop="name" align="center" label="行政主管部门">
</el-table-column>
<el-table-column prop="createTime" align="center" label="最近巡查回见">
</el-table-column>
<el-table-column prop="address" align="center" label="操作">
<template slot-scope="scope">
<el-button
style="margin-right: 16px"
@click="handleGoPlan(scope.row)"
type="text"
size="small"
>计划管理</el-button
>
<el-button
style="margin-right: 16px"
@click="handleGoRecord(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"
@current-change="(e) => handleCurrentPageChange(e)"
@size-change="(e) => handlePageSizeChange(e)"
>
</el-pagination>
</div>
</div>
</template>
<style scoped lang="less">
.top-title {
height: 50px;
background-color: white;
display: flex;
padding-left: 16px;
align-items: center;
font-weight: 600;
}
.table-box {
width: 100%;
height: calc(100% - 50px - 24px);
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;
}
}
}
</style>

7
src/views/sluice/runManage/maintenance/maintenancePlan/index.vue

@ -103,6 +103,11 @@ export default {
},
});
},
addPlan() {
this.ruleForm.wagaCode = this.$route.query.wagaCode;
this.dialogVisible = true;
},
//
submitForm(formName) {
this.$refs[formName].validate((valid) => {
@ -250,7 +255,7 @@ export default {
class="search-btn"
style="margin-right: 16px; margin-bottom: 8px; float: right"
type="success"
@click="dialogVisible = true"
@click="addPlan"
>添加</el-button
>
</div>

1
src/views/sluice/runManage/maintenance/maintenanceRecords/index.vue

@ -202,6 +202,7 @@ export default {
getSluiceYhPlanList({
data: {
name: value || null,
wagaCode: this.$route.query.wagaCode,
},
cv: {
name: "name",

3
src/views/sluice/runManage/monitoring/index.vue

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

258
src/views/sluice/runManage/monitoring/sluice/index.vue

@ -0,0 +1,258 @@
<!-- 调度运用管理-水闸 -->
<script>
import {getDicts} from "@/api/management";
import { getAreasData } from "@/api/areas/index";
import { getRunProjectList } from "@/api/sluice/index";
let that
export default {
name: "sluice",
data() {
return {
searchForm: {
adcd: '',
wagaType: -1,
wagaName: ''
},
searchInput: "",
searchType: 3,
sluiceType: [], //
areasOptions: [], //
adcdOptions: [], //
areasOptionProps: {
emitPath: false,
checkStrictly: true, //
},
tableData: [], //
pageData: {
pageNum: 1, //
pageSize: 10, //
pageSizes: [10, 20, 50, 100],
total: 0, //
},
};
},
created() {
that = this
},
filters: {
//
filterSluice (price) {
const data = that.sluiceType.filter((res) => res.dictValue == price)
return data[0] ? data[0].dictLabel : '/'
},
//
filterAdcd (price) {
let name = ''
if (that.adcdOptions.filter((res) => res.id == price)[0]) {
name = that.adcdOptions.filter((res) => res.id == price)[0].name
}
return name
}
},
methods: {
handleGoManage(row) {
this.$router.push({
path: "manage",
query: { wagaCode: row.wagaCode },
});
},
handleCurrentPageChange(page) {
this.pageData.pageNum = page;
this.getTableData();
},
handlePageSizeChange(pageSize) {
this.pageData.pageSize = pageSize;
this.getTableData();
},
search() {
this.pageData.pageNum = 1;
this.getTableData();
},
//
resetSearch() {
this.pageData.pageNum = 1;
if (!this.$refs['searchForm']) return
this.$refs['searchForm'].resetFields()
this.getTableData();
},
//
getTableData() {
getRunProjectList({
data: {
timeView: {
timeField: "create_time",
},
adcd: this.searchForm.adcd,
wagaType: this.searchForm.wagaType == -1 ? "" : this.searchForm.wagaType,
wagaName: this.searchForm.wagaName
},
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;
}
});
},
//
getTreeData() {
getAreasData().then((items) => {
this.adcdOptions = items.data
if (items?.data) {
let res = [];
let getChildren = (res, pid) => {
for (const i of items.data) {
if (i.parentid === pid) {
const newItem = {
label: i.name,
value: i.id,
};
if (i.layer != 3) newItem.children = [];
res.push(newItem);
getChildren(newItem.children, newItem.value);
}
}
};
getChildren(res, items.data[0].parentid);
this.areasOptions = res;
}
});
},
},
async mounted () {
//
getDicts("sluice_type").then((res) => {
this.sluiceType = res.data;
});
console.log(123)
await this.getTreeData();
//
await this.getTableData();
},
};
</script>
<template>
<div class="slider-right">
<div class="top-title">基础信息管理</div>
<div class="table-box">
<el-form inline :model="searchForm" ref="searchForm" class="demo-ruleForm">
<el-form-item label="区域选择:" prop="adcd">
<el-cascader
:options="areasOptions"
v-model="searchForm.adcd"
:props="areasOptionProps"
placeholder="请选择"
clearable
size="small"
>
</el-cascader>
</el-form-item>
<el-form-item label="水闸类型:" prop="wagaType">
<el-select v-model="searchForm.wagaType" placeholder="请选择">
<el-option
v-for="item in sluiceType"
:label="item.dictLabel"
:value="item.dictValue"
:key="item.id"
></el-option>
<el-option label="全部" :value="-1"></el-option>
</el-select>
</el-form-item>
<el-form-item label="水闸名称:" prop="wagaName">
<el-input v-model="searchForm.wagaName" class="search-input" placeholder="请输入水闸名称"></el-input>
</el-form-item>
<el-form-item>
<el-button class="search-btn" type="success" @click="search()">查询</el-button>
<el-button @click="resetSearch()">重置</el-button>
</el-form-item>
</el-form>
<el-table height="625" :data="tableData" border>
<el-table-column type="index" align="center" label="序号" width="100">
</el-table-column>
<el-table-column prop="wagaCode" align="center" label="水闸编码">
</el-table-column>
<el-table-column prop="wagaName" align="center" label="水闸名称">
</el-table-column>
<el-table-column prop="waterAdministrativeDepartment" align="center" label="水闸类型">
<template slot-scope="scope">
{{ scope.row.waterAdministrativeDepartment | filterSluice }}
</template>
</el-table-column>
<el-table-column prop="name" align="center" label="区域">
<template slot-scope="scope">
{{ scope.row.adcd | filterAdcd }}
</template>
</el-table-column>
<el-table-column prop="engineeringManagementUnit" align="center" label="管理机构">
</el-table-column>
<el-table-column prop="address" align="center" label="操作">
<template slot-scope="scope">
<el-button
style="margin-right: 16px"
@click="handleGoManage(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"
@current-change="(e) => handleCurrentPageChange(e)"
@size-change="(e) => handlePageSizeChange(e)"
>
</el-pagination>
</div>
</div>
</template>
<style scoped lang="less">
.top-title {
height: 50px;
background-color: white;
display: flex;
padding-left: 16px;
align-items: center;
font-weight: 600;
}
.table-box {
width: 100%;
height: calc(100% - 50px - 24px);
margin-top: 24px;
padding: 16px;
background-color: white;
.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;
}
}
}
</style>

208
src/views/sluice/runManage/monitoring/sluice/manage/components/edit.vue

@ -0,0 +1,208 @@
<script>
import { getDicts, getSZDevice } from "@/api/management";
export default {
name: "Edit",
props: {
model: {
type: Object,
default: null
}
},
data() {
return {
xcDeviceType:[],
xcWarnningType:[],
xcWarnningLevelType:[],
sluiceType:[],
ruleForm: {
type: '',
name: '',
deviceId: '',
message: '',
warningType: '',
warningLevel: '',
reportInterval: '',
minThreshold: 0,
maxThreshold: 0,
},
rules: {
type: [
{ required: true, message: "请选择设备类型", trigger: "blur" },
],
name: [
{ required: true, message: "请选择设备名称", trigger: "blur" },
],
message: [
{ required: true, message: "请输入设备信息", trigger: "blur" },
],
reportInterval: [
{ required: true, message: "请输入自动预警上报间隔", trigger: "blur" },
],
Threshold: [
{ validator: this.validateThresholds },
],
}
}
},
methods: {
validateThresholds(rule, value, callback) {
if (this.ruleForm.minThreshold > this.ruleForm.maxThreshold) {
callback(new Error('最小阈值必须小于最大阈值'));
} else {
callback()
}
},
submitForm(callback) {
this.$refs.ruleForm.validate((valid) => {
if (valid) {
callback({
...this.ruleForm
})
}
})
}
},
async mounted() {
//
getDicts("xc_warnning_type").then((res) => {
this.xcWarnningType = res.data;
});
//
getDicts("xc_warnning_level").then((res) => {
this.xcWarnningLevelType = res.data;
});
//
getDicts("xc_device_type").then((res) => {
this.xcDeviceType = res.data;
});
if (this.model) {
const data = await getSZDevice(this.model.id)
this.ruleForm.type = data.data.type + ''
this.ruleForm.name = data.data.name
this.ruleForm.deviceId = data.data.deviceId
this.ruleForm.message = data.data.message
this.ruleForm.warningType = data.data.warningType
this.ruleForm.warningLevel = data.data.warningLevel
}
}
}
</script>
<template>
<div style="display:flex; flex-direction: column">
<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"
:disabled="!!model && model.eventType !== 'edit'"
ref="ruleForm"
label-width="100px"
>
<el-col :span="24">
<el-form-item label-width="120px" label="设备类型" prop="name">
<el-select v-model="ruleForm.type" placeholder="请选择">
<el-option
v-for="item in xcDeviceType"
:label="item.dictLabel"
:value="item.dictValue"
:key="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="120px" label="设备名称" prop="name">
<el-input style="width: 202px" v-model="ruleForm.name" placeholder="请输入"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="120px" label="设备id" prop="number">
<el-input disabled style="width: 202px" v-model="ruleForm.deviceId"></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label-width="120px" label="设备信息" prop="message">
<el-input
style="width: 502px"
v-model="ruleForm.message"
type="textarea"
resize="none"
rows="3"
placeholder="请输入"
maxlength="30"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="120px" label="预警类型" prop="warningType">
<el-select v-model="ruleForm.warningType" placeholder="请选择">
<el-option
v-for="item in xcWarnningType"
:label="item.dictLabel"
:value="item.dictValue"
:key="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="120px" label="预警级别" prop="warningLevel">
<el-select v-model="ruleForm.warningLevel" placeholder="请选择">
<el-option
v-for="item in xcWarnningLevelType"
:label="item.dictLabel"
:value="item.dictValue"
:key="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<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-col>
<el-col :span="12">
<el-form-item label-width="200px" label="自动预警上报间隔(分钟)" prop="reportInterval">
<el-input style="width: 202px" v-model="ruleForm.reportInterval"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="120px" label="预警阈值" prop="Threshold">
<el-col :span="8">
<el-form-item label-width="30px" label=">=">
<el-input style="width: 100px" v-model="ruleForm.minThreshold"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label-width="32px" label="<=">
<el-input style="width: 100px" v-model="ruleForm.maxThreshold"></el-input>
</el-form-item>
</el-col>
</el-form-item>
</el-col>
</el-form>
</div>
</template>
<style scoped lang="scss">
</style>

367
src/views/sluice/runManage/monitoring/sluice/manage/index.vue

@ -0,0 +1,367 @@
<!-- 巡查项目管理-水闸 -->
<script>
import Edit from './components/edit.vue'
import {
getDicts,
postSZDeviceList,
postSZDevice,
putSZDevice,
delSZDevice
} from "@/api/management";
let that
export default {
name: "manage",
components: {
Edit
},
data() {
return {
xcWarnningType: [],
xcWarnningLevelType: [],
xcDeviceType: [],
searchForm: {
type: -1,
warningLevel: '',
name: ''
},
dialog: {
title: '新增操作记录',
dom: '',
visible: false
},
mdl: null,
tableData: [], //
pageData: {
pageNum: 1, //
pageSize: 10, //
pageSizes: [10, 20, 50, 100],
total: 0, //
},
};
},
methods: {
handleCurrentPageChange(page) {
this.pageData.pageNum = page;
this.getTableData();
},
handlePageSizeChange(pageSize) {
this.pageData.pageSize = pageSize;
this.getTableData();
},
search() {
this.pageData.pageNum = 1;
this.getTableData();
},
handleRecord(row) {
this.$router.push({
path: "record",
query: {id: row.id},
});
},
//
resetSearch() {
this.pageData.pageNum = 1;
if (!this.$refs['searchForm']) return
this.$refs['searchForm'].resetFields()
this.getTableData();
},
//
handleAdd() {
this.dialog.dom = 'Edit'
this.dialog.visible = true
},
handleCheck(row) {
this.dialog.dom = 'Edit'
this.mdl = {...row}
this.dialog.visible = true
},
handleEdit(row) {
this.dialog.dom = 'Edit'
this.mdl = {
eventType: 'edit',
...row
}
this.dialog.visible = true
},
async handleDelete(row) {
await delSZDevice(row.id)
this.$message.success('删除成功')
this.getTableData()
},
//
submitForm () {
this.$refs.component.submitForm(async (from) => {
if (this.mdl) {
await putSZDevice({
id: this.mdl.id,
...from,
wagaCode: this.$route.query.wagaCode
})
this.closeDialog()
this.getTableData()
} else {
await postSZDevice({
...from,
wagaCode: this.$route.query.wagaCode
})
this.$message.success('新增成功')
this.closeDialog()
this.getTableData()
}
})
},
// dialog
closeDialog() {
this.dialog.visible = false
this.mdl = null
},
//
getTableData() {
postSZDeviceList({
data: {
timeView: {
timeField: "create_time",
},
type: this.searchForm.type === -1 ? '' : this.searchForm.type,
name: this.searchForm.name,
wagaCode: this.$route.query.wagaCode
},
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;
}
});
},
},
created() {
that = this
},
filters: {
//
filterwarnningType (price) {
const data = that.xcWarnningType.filter((res) => res.dictValue == price)
return data[0] ? data[0].dictLabel : '/'
},
//
filterwarnningLevel (price) {
const data = that.xcWarnningLevelType.filter((res) => res.dictValue == price)
return data[0] ? data[0].dictLabel : '/'
},
//
filterdeviceType (price) {
const data = that.xcDeviceType.filter((res) => res.dictValue == price)
return data[0] ? data[0].dictLabel : '/'
}
},
async mounted() {
//
getDicts("xc_warnning_type").then((res) => {
this.xcWarnningType = res.data;
});
//
getDicts("xc_warnning_level").then((res) => {
this.xcWarnningLevelType = res.data;
});
//
getDicts("xc_device_type").then((res) => {
this.xcDeviceType = res.data;
});
//
await this.getTableData();
},
};
</script>
<template>
<div class="slider-right">
<div class="top-title">水闸动态监测管理</div>
<div class="table-box">
<el-form inline :model="searchForm" ref="searchForm" class="demo-ruleForm">
<el-form-item label="设备类型:" prop="type">
<el-select v-model="searchForm.type" placeholder="请选择">
<el-option
v-for="item in xcDeviceType"
:label="item.dictLabel"
:value="item.dictValue"
:key="item.id"
></el-option>
<el-option label="全部" :value="-1"></el-option>
</el-select>
</el-form-item>
<el-form-item label="预警级别:" prop="warningLevel">
<el-select v-model="searchForm.warningLevel" placeholder="请选择">
<el-option
v-for="item in xcWarnningLevelType"
:label="item.dictLabel"
:value="item.dictValue"
:key="item.id"
></el-option>
<el-option label="全部" :value="-1"></el-option>
</el-select>
</el-form-item>
<el-form-item label="设备名称:" prop="name">
<el-input v-model="searchForm.name" class="search-input" placeholder="请输入设备名称"></el-input>
</el-form-item>
<el-form-item>
<el-button class="search-btn" type="success" @click="search()">查询</el-button>
<el-button @click="resetSearch()">重置</el-button>
</el-form-item>
</el-form>
<el-button
class="search-btn"
style="margin-right: 16px; margin-bottom: 8px; float: right"
type="success"
@click="handleAdd()"
>新增
</el-button
>
<el-table height="625" :data="tableData" border style="width: 100%">
<el-table-column type="index" align="center" label="序号">
</el-table-column>
<el-table-column prop="name" align="center" label="设备名称">
</el-table-column>
<el-table-column prop="type" align="center" label="设备类型">
<template slot-scope="scope">
{{ scope.row.type | filterdeviceType }}
</template>
</el-table-column>
<el-table-column prop="warningType" align="center" label="预警类型">
<template slot-scope="scope">
{{ scope.row.warningType | filterwarnningType }}
</template>
</el-table-column>
<el-table-column prop="warningLevel" align="center" label="预警等级">
<template slot-scope="scope">
{{ scope.row.warningLevel | filterwarnningLevel }}
</template>
</el-table-column>
<el-table-column
min-width="200"
prop="createTime"
align="center"
sortable
label="预警时间"
>
</el-table-column>
<el-table-column prop="address" align="center" label="操作" min-width="200">
<template slot-scope="scope">
<el-button
style="margin-right: 16px"
@click="handleCheck(scope.row)"
type="text"
size="small"
>
查看
</el-button>
<el-button
style="margin-right: 16px"
@click="handleEdit(scope.row)"
type="text"
size="small"
>
编辑
</el-button>
<el-button
style="margin-right: 16px"
@click="handleRecord(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="handleDelete(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"
@current-change="(e) => handleCurrentPageChange(e)"
@size-change="(e) => handlePageSizeChange(e)"
>
</el-pagination>
</div>
<el-dialog
:title="dialog.title"
@close="closeDialog"
:visible.sync="dialog.visible"
width="50%"
>
<component v-if="dialog.visible" :is="dialog.dom" ref="component" :model="mdl"></component>
<div slot="footer" class="dialog-footer">
<el-button size="mini" @click="closeDialog"> </el-button>
<el-button size="mini" type="primary" @click="submitForm"
>保存
</el-button
>
</div>
</el-dialog>
</div>
</template>
<style scoped lang="less">
.top-title {
height: 50px;
background-color: white;
display: flex;
padding-left: 16px;
align-items: center;
font-weight: 600;
}
.table-box {
width: 100%;
height: calc(100% - 50px - 24px);
margin-top: 24px;
padding: 16px;
background-color: white;
.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;
}
}
}
</style>

120
src/views/sluice/runManage/monitoring/sluice/record/components/edit.vue

@ -0,0 +1,120 @@
<script>
export default {
name: "Edit",
props: {
model: {
type: Object,
default: null
}
},
data() {
return {
ruleForm: {
name: '',
number: '',
control: '',
instruct: '',
leftTrunk: '',
rightTrunk: '',
upstream: '',
downstream: '',
opening: '',
time: ''
},
rules: {
name: [
{ required: true, message: "请输入闸门名称", trigger: "blur" },
],
control: [
{ required: true, message: "请输入控制水位", trigger: "blur" },
],
leftTrunk: [
{ required: true, message: "请输入左干", trigger: "blur" },
],
rightTrunk: [
{ required: true, message: "请输入右干", trigger: "blur" },
],
}
}
}
}
</script>
<template>
<div>
<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"
:disabled="!!model"
ref="ruleForm"
label-width="100px"
>
<el-col :span="12">
<el-form-item label-width="120px" label="闸门" prop="name">
<el-input style="width: 202px" v-model="ruleForm.name"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="120px" label="闸号" prop="number">
<el-input style="width: 202px" v-model="ruleForm.number"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="120px" label="控制水位" prop="control">
<el-input style="width: 202px" v-model="ruleForm.control"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="120px" label="指令号" prop="instruct">
<el-input style="width: 202px" v-model="ruleForm.instruct"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="120px" label="左干" prop="leftTrunk">
<el-input style="width: 202px" v-model="ruleForm.leftTrunk"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="120px" label="右干" prop="rightTrunk">
<el-input style="width: 202px" v-model="ruleForm.rightTrunk"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="120px" label="上游水位" prop="upstream">
<el-input style="width: 202px" v-model="ruleForm.upstream"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="120px" label="下游水位" prop="downstream">
<el-input style="width: 202px" v-model="ruleForm.downstream"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="120px" label="开度" prop="opening">
<el-input style="width: 202px" v-model="ruleForm.opening"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="120px" label="时间" prop="time">
<el-input style="width: 202px" v-model="ruleForm.time"></el-input>
</el-form-item>
</el-col>
</el-form>
</div>
</template>
<style scoped lang="scss">
</style>

219
src/views/sluice/runManage/monitoring/sluice/record/index.vue

@ -0,0 +1,219 @@
<!-- 巡查项目管理-水闸 -->
<script>
import {
getRunSzDeviceRecordList
} from "@/api/sluice";
import {
getDicts
} from "@/api/management";
let that = this
export default {
name: "record",
data() {
return {
xcWarnningType: [],
xcWarnningLevelType: [],
searchForm: {
warningType: -1,
warningLevel: -1,
warningTime: null,
},
mdl: null,
tableData: [], //
pageData: {
pageNum: 1, //
pageSize: 10, //
pageSizes: [10, 20, 50, 100],
total: 0, //
},
};
},
methods: {
handleCurrentPageChange(page) {
this.pageData.pageNum = page;
this.getTableData();
},
handlePageSizeChange(pageSize) {
this.pageData.pageSize = pageSize;
this.getTableData();
},
search() {
console.log(this.searchForm)
this.pageData.pageNum = 1;
this.getTableData();
},
//
resetSearch() {
this.pageData.pageNum = 1;
if (!this.$refs['searchForm']) return
this.$refs['searchForm'].resetFields()
this.getTableData();
},
//
getTableData() {
getRunSzDeviceRecordList({
data: {
warningLevel: this.searchForm.warningLevel === -1 ? '' : this.searchForm.warningLevel,
warningType: this.searchForm.warningType === -1 ? '' : this.searchForm.warningType,
warningEndTime: this.searchForm.warningTime[0] ? this.searchForm.warningTime[0] : '',
warningStartTime: this.searchForm.warningTime[1] ? this.searchForm.warningTime[1] : '',
},
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);
});
},
},
created() {
that = this
},
filters: {
//
filterwarnningType (price) {
const data = that.xcWarnningType.filter((res) => res.dictValue == price)
return data[0] ? data[0].dictLabel : '/'
},
//
filterwarnningLevel (price) {
const data = that.xcWarnningLevelType.filter((res) => res.dictValue == price)
return data[0] ? data[0].dictLabel : '/'
}
},
async mounted() {
//
getDicts("xc_warnning_type").then((res) => {
this.xcWarnningType = res.data;
});
//
getDicts("xc_warnning_level").then((res) => {
this.xcWarnningLevelType = res.data;
});
//
await this.getTableData();
},
};
</script>
<template>
<div class="slider-right">
<div class="top-title">水闸动态监测历史记录</div>
<div class="table-box">
<el-form inline :model="searchForm" ref="searchForm" class="demo-ruleForm">
<el-form-item label="预警类型:" prop="warningType">
<el-select v-model="searchForm.warningType" placeholder="请选择">
<el-option
v-for="item in xcWarnningType"
:label="item.dictLabel"
:value="item.dictValue"
:key="item.id"
></el-option>
<el-option label="全部" :value="-1"></el-option>
</el-select>
</el-form-item>
<el-form-item label="预警级别:" prop="warningLevel">
<el-select v-model="searchForm.warningLevel" placeholder="请选择">
<el-option
v-for="item in xcWarnningLevelType"
:label="item.dictLabel"
:value="item.dictValue"
:key="item.id"
></el-option>
<el-option label="全部" :value="-1"></el-option>
</el-select>
</el-form-item>
<el-form-item label="预警时间:" prop="warningTime">
<el-time-picker
is-range
v-model="searchForm.warningTime"
value-format="timestamp"
range-separator="·"
start-placeholder="开始时间"
end-placeholder="结束时间"
placeholder="选择时间范围">
</el-time-picker>
</el-form-item>
<el-form-item>
<el-button class="search-btn" type="success" @click="search()">查询</el-button>
<el-button @click="resetSearch()">重置</el-button>
</el-form-item>
</el-form>
<el-table height="625" :data="tableData" border style="width: 100%">
<el-table-column type="index" align="center" label="序号">
</el-table-column>
<el-table-column prop="warningType" align="center" label="预警类型">
<template slot-scope="scope">
{{ scope.row.warningType | filterwarnningType }}
</template>
</el-table-column>
<el-table-column prop="warningLevel" align="center" label="预警等级">
<template slot-scope="scope">
{{ scope.row.warningLevel | filterwarnningLevel }}
</template>
</el-table-column>
<el-table-column prop="warningData" align="center" label="预警数据">
</el-table-column>
<el-table-column prop="warningTime" align="center" label="预警时间">
</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"
@current-change="(e) => handleCurrentPageChange(e)"
@size-change="(e) => handlePageSizeChange(e)"
>
</el-pagination>
</div>
</div>
</template>
<style scoped lang="less">
.top-title {
height: 50px;
background-color: white;
display: flex;
padding-left: 16px;
align-items: center;
font-weight: 600;
}
.table-box {
width: 100%;
height: calc(100% - 50px - 24px);
margin-top: 24px;
padding: 16px;
background-color: white;
.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;
}
}
}
</style>

29
src/views/sluice/runManage/supervisionInspetion/projectManage/index.vue

@ -43,6 +43,7 @@ export default {
path: "supervisionProjectReport",
query: {
type: "preview",
wayId: row.wayId,
id: row.id,
},
});
@ -53,6 +54,17 @@ export default {
path: "supervisionProjectReport",
query: {
type: "edit",
wayId: row.wayId,
id: row.id,
},
});
},
//
handleCheckReport(row) {
this.$router.push({
path: "supervisionProjectReportPage",
query: {
wayId: row.wayId,
id: row.id,
},
});
@ -90,7 +102,9 @@ export default {
}).then((res) => {
if (res) {
this.tableData = res.records.map((item) => {
item.deadTime = this.calcDeadLine(item.doneTime);
if (item.state != "1") {
item.deadTime = this.calcDeadLine(item.doneTime);
}
return item;
});
this.pageData.total = res.total;
@ -170,9 +184,20 @@ export default {
<el-button type="text" size="small" @click="handleCheck(scope.row)"
>查看</el-button
>
<el-button type="text" size="small" @click="handleEdit(scope.row)"
<el-button
type="text"
size="small"
v-if="scope.row.state != '1'"
@click="handleEdit(scope.row)"
>巡查</el-button
>
<el-button
v-else
type="text"
size="small"
@click="handleCheckReport(scope.row)"
>报告</el-button
>
</template>
</el-table-column>
</el-table>

363
src/views/sluice/runManage/supervisionInspetion/projectManage/projectReport.vue

@ -1,22 +1,39 @@
<!-- 监督检查工程管理 -->
<script>
import { getEnableSuperviseWayData } from "@/api/sluice";
import { cloneDeep } from "lodash";
import { uploadFileData } from "@/api/system/upload";
import { listUser } from "@/api/management";
import {
getEnableSuperviseWayData,
getSuperviseEngineeringReportDetailsData,
addSuperviseEngineeringReportData,
} from "@/api/sluice";
export default {
name: "projectReport",
data() {
return {
activeName: "",
formData: [],
currentItem: null,
problemList: [],
personnelList: [],
formData: {
patrolName: "",
patrolUid: "",
problemList: [],
state: "",
taskId: "",
weather: "",
},
};
},
computed: {
//
calcStep() {
if (this.formData.length) {
let sum = this.formData.reduce((prev, cur) => {
if (this.problemList.length) {
let sum = this.problemList.reduce((prev, cur) => {
return prev + cur.children.length;
}, 0);
let hasDoneLevel = this.formData.reduce((prev, cur) => {
let hasDoneLevel = this.problemList.reduce((prev, cur) => {
return (
prev +
cur.children.reduce((prev2, cur2) => {
@ -30,28 +47,72 @@ export default {
return 0;
}
},
isDisabled() {
return (
this.formData.state === "1" || this.$route.query.type === "preview"
);
},
//
computedPatrolUid: {
get() {
return this.formData.patrolUid?.split(",").filter((v) => v) || [];
},
set(val) {
this.formData.patrolUid = val?.join(",") || "";
this.formData.patrolName = this.personnelList
.filter((v) => val.includes(v.id))
.map((v) => v.nickName)
.join(",");
},
},
},
methods: {
//
getEnableSuperviseWayData() {
getEnableSuperviseWayData().then((res) => {
console.log(res);
//
searchUser(e = null) {
listUser({
data: {
timeView: {
timeField: "create_time",
},
},
cv: {
name: "nickName",
type: "like",
value: e,
},
pageSize: 100,
pageNum: 1,
}).then((res) => {
this.personnelList = res.records;
});
},
async initData() {
const enableData = await getEnableSuperviseWayData({
wayId: this.$route.query.wayId,
});
if (enableData) {
let list = [];
res.data?.itemList?.forEach((item, index) => {
enableData.data?.itemList?.forEach((item, index) => {
if (index === 0) {
list.push({
id: item.id,
projectId: item.projectId,
projectName: item.projectName,
problemDescribe: "",
siteSituationRecords: "",
siteSituationRecordsArr: [],
children: [{ ...item, level: null }],
});
} else {
let exitItem = list.find((v) => v.projectId === item.projectId);
if (!exitItem) {
list.push({
id: item.id,
projectId: item.projectId,
projectName: item.projectName,
problemDescribe: "",
siteSituationRecords: "",
siteSituationRecordsArr: [],
children: [{ ...item, level: null }],
});
} else {
@ -62,22 +123,176 @@ export default {
}
}
});
this.formData = list;
this.problemList = list;
this.activeName = list[0]?.projectId || "";
}
const detailRes = await getSuperviseEngineeringReportDetailsData(
this.$route.query.id
);
if (detailRes?.data && this.problemList.length) {
const { data } = detailRes;
this.formData.patrolName = data.patrolName;
this.formData.patrolUid = data.patrolUid;
this.formData.state = data.state;
this.formData.taskId = data.taskId;
this.formData.weather = data.weather;
this.formData.problemList = [];
const { engineeringList, problemList } = data;
this.problemList.forEach((item) => {
let exitItem = engineeringList.find(
(v) => v.projectId === item.projectId
);
if (exitItem) {
item.newId = item.id === exitItem.id ? null : exitItem.id;
item.problemDescribe = exitItem.problemDescribe;
item.siteSituationRecords = exitItem.siteSituationRecords;
item.siteSituationRecordsArr = exitItem.siteSituationRecords
? exitItem.siteSituationRecords.split(",")
: [];
item.children.forEach((item2) => {
let exitItem2 = problemList.find(
(v) => v.projectItemId === item2.id
);
if (exitItem2) {
item2.level = exitItem2.level;
item2.newId = item2.id === exitItem2.id ? null : exitItem2.id;
}
});
}
});
}
},
//
handleClickItem(item) {
this.currentItem = item;
},
//
beforeUpload(e) {
console.log("beforeUpload >>>>> ", e);
if (this.currentItem.siteSituationRecordsArr?.length >= 99) {
this.$message.warning("最多上传99张图片");
return false;
}
return true;
},
handleUpload(e) {
const { file } = e;
let fData = new FormData();
fData.append("file", file);
uploadFileData(fData)
.then((res) => {
this.currentItem.siteSituationRecordsArr.push(res.url);
})
.catch((err) => {
console.log("err >>>>> ", err);
});
},
//
getEnableSuperviseWayData() {
getEnableSuperviseWayData({ wayId: this.$route.query.wayId }).then(
(res) => {
console.log(res);
let list = [];
res.data?.itemList?.forEach((item, index) => {
if (index === 0) {
list.push({
projectId: item.projectId,
projectName: item.projectName,
problemDescribe: "",
siteSituationRecords: "",
siteSituationRecordsArr: [],
children: [{ ...item, level: null }],
});
} else {
let exitItem = list.find((v) => v.projectId === item.projectId);
if (!exitItem) {
list.push({
projectId: item.projectId,
projectName: item.projectName,
problemDescribe: "",
siteSituationRecords: "",
siteSituationRecordsArr: [],
children: [{ ...item, level: null }],
});
} else {
exitItem.children.push({
...item,
level: null,
});
}
}
});
this.problemList = list;
this.activeName = list[0]?.projectId || "";
}
);
},
//
dealFormData() {
this.formData.taskId = this.$route.query.id;
this.problemList.forEach((item) => {
let problemItem = {
id: item.newId || null,
levelList: [],
problemDescribe: item.problemDescribe,
siteSituationRecords: item.siteSituationRecordsArr.join(",") || "",
projectId: item.projectId,
};
if (item.children.length) {
item.children.forEach((item2) => {
problemItem.levelList.push({
id: item2.newId || null,
level: item2.level,
projectItemId: item2.id,
});
});
}
this.formData.problemList.push(problemItem);
});
return cloneDeep(this.formData);
},
handleSave() {
console.log("保存");
let data = this.dealFormData();
data.state = "0";
console.log("data >>>>> ", data);
addSuperviseEngineeringReportData(data).then((res) => {
this.$message({
type: "success",
message: "保存成功",
});
});
},
handleSubmit() {
if (this.calcStep < 100) {
this.$message.warning("检查进度未达到100%,请检查");
return;
}
//
this.$confirm("是否确认提交?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
let data = this.dealFormData();
data.state = "1";
console.log("data >>>>> ", data);
addSuperviseEngineeringReportData(data).then((res) => {
this.$message({
type: "success",
message: "提交成功",
});
this.formData.state = "1";
});
})
.catch(() => {});
},
},
created() {
this.getEnableSuperviseWayData();
this.searchUser();
this.initData();
},
mounted() {},
};
@ -87,24 +302,54 @@ export default {
<div class="body slider-right">
<div class="top-title">工程问题上报</div>
<div class="table-box">
<template v-if="formData.length">
<div class="step-box">
<div
class="bar"
:style="{
left: `-${100 - calcStep}%`,
backgroundColor: `rgb(${255 - (255 * calcStep) / 100},${
0 + (255 * calcStep) / 100
},0)`,
}"
></div>
<div style="position: relative; z-index: 1" class="pl-4 font-14">
检查进度 {{ calcStep }}%
</div>
<div class="step-box">
<div
class="bar"
:style="{
left: `-${100 - calcStep}%`,
backgroundColor: `rgb(${255 - (255 * calcStep) / 100},${
0 + (255 * calcStep) / 100
},0)`,
}"
></div>
<div style="position: relative; z-index: 1" class="pl-4 font-14">
检查进度 {{ calcStep }}%
</div>
</div>
<div class="flex items-center mb-12">
<div>巡查人员</div>
<el-select
:disabled="isDisabled"
style="width: 240px"
class="ml-4"
v-model="computedPatrolUid"
multiple
filterable
remote
:remote-method="searchUser"
placeholder="请选择"
>
<el-option
v-for="item in personnelList"
:key="item.id"
:label="item.nickName"
:value="item.id"
>
</el-option>
</el-select>
<div class="ml-24">天气</div>
<el-input
:disabled="isDisabled"
class="ml-4"
style="width: 240px"
v-model="formData.weather"
placeholder="请输入"
/>
</div>
<template v-if="problemList.length">
<el-tabs v-model="activeName" type="card">
<el-tab-pane
v-for="item in formData"
v-for="item in problemList"
:key="item.id"
:label="item.projectName"
:name="item.projectId"
@ -125,27 +370,34 @@ export default {
<div>较重{{ item2.heavyGrade || " " }}</div>
<div>严重{{ item2.seriousGrade || " " }}</div>
</div>
<span>提示</span>
<i
class="el-icon-warning font-20"
style="color: #e6a23c"
></i>
</el-tooltip>
</div>
</div>
<div class="question-select">
<el-button
:disabled="isDisabled"
:type="item2.level === '0' ? 'primary' : ''"
@click="item2.level = '0'"
></el-button
>
<el-button
:disabled="isDisabled"
:type="item2.level === '1' ? 'primary' : ''"
@click="item2.level = '1'"
>一般</el-button
>
<el-button
:disabled="isDisabled"
:type="item2.level === '2' ? 'primary' : ''"
@click="item2.level = '2'"
>较重</el-button
>
<el-button
:disabled="isDisabled"
:type="item2.level === '3' ? 'primary' : ''"
@click="item2.level = '3'"
>严重</el-button
@ -159,17 +411,63 @@ export default {
type="textarea"
v-model="item.problemDescribe"
:rows="4"
:disabled="isDisabled"
placeholder="请输入内容"
/>
</div>
</div>
<div class="question-row w-full">
<div class="question-col flex-shrink-0">照片</div>
<div class="question-col flex-1">上传照片</div>
<div class="question-col flex-1">
<div class="flex flex-wrap">
<div
class="w-100 h-100 mr-12 mb-12"
v-for="(item, index) in item.siteSituationRecordsArr"
:key="index"
>
<el-image
style="width: 200px; min-height: 100px; height: auto"
:src="item"
:preview-src-list="[item]"
>
<template #error>
<div
class="w-full flex justify-center items-center"
style="
height: 100px;
border: 1px solid #f0f0f0;
font-style: italic;
color: #ccc;
"
>
图片加载失败
</div>
</template>
</el-image>
</div>
</div>
<el-upload
action="#"
:disabled="isDisabled"
:http-request="handleUpload"
:auto-upload="true"
:before-upload="beforeUpload"
:showFileList="false"
accept=".jpg,.png,.jpeg"
:maxLength="99"
>
<el-button
type="primary"
@click="handleClickItem(item)"
:disabled="isDisabled"
>上传</el-button
>
</el-upload>
</div>
</div>
</el-tab-pane>
</el-tabs>
<div class="mt-30 flex justify-end">
<div class="mt-30 flex justify-end" v-if="!isDisabled">
<el-button class="mr-12" @click="handleSave">保存</el-button>
<el-button type="primary" @click="handleSubmit">提交</el-button>
</div>
@ -196,16 +494,17 @@ export default {
.table-box {
width: 100%;
min-height: calc(100vh - 56px - 64px);
height: calc(100vh - 56px - 64px);
margin-top: 24px;
padding: 16px;
background-color: white;
overflow: auto;
.step-box {
position: relative;
height: 32px;
width: 120px;
background-color: #f0f0f0;
border: 1px solid #333;
border: 1px solid #999;
border-radius: 2px;
float: right;
display: flex;

352
src/views/sluice/runManage/supervisionInspetion/projectManage/projectReportPage.vue

@ -0,0 +1,352 @@
<template>
<div class="report-page">
<div class="sticky-top flex justify-between">
<el-button type="primary" @click="handleDownPdf">下载报告</el-button>
<el-button @click="$router.go(-1)">返回</el-button>
</div>
<div class="flex justify-center mt-16">
<div class="p-20" ref="pdfRef">
<div class="table-box border-l-t font-14">
<div class="text-center font-16 border-b-r p-10">
{{ formData.name }}
</div>
<div class="flex border-l-t w-full">
<div class="flex flex-1">
<div class="label border-b-r p-10 w-100">巡查时间</div>
<div class="value border-b-r flex-1 p-10">
{{ formData.startTime }}-{{ formData.doneTime }}
</div>
</div>
<div class="flex flex-1">
<div class="label border-b-r p-10 w-100">天气</div>
<div class="value border-b-r flex-1 p-10">
{{ formData.weather || "-" }}
</div>
</div>
</div>
<div class="flex border-l-t w-full">
<div class="flex flex-1">
<div class="label border-b-r p-10 w-100">检查人员</div>
<div class="value border-b-r flex-1 p-10">
{{ formData.patrolName || "-" }}
</div>
</div>
</div>
<div class="flex border-l-t w-full">
<div class="flex flex-1">
<div class="label border-b-r p-10 w-100">管理单位</div>
<div class="value border-b-r flex-1 p-10">
{{ formData.engineeringManagementUnit }}
</div>
</div>
<div class="flex flex-1">
<div class="label border-b-r p-10 w-100">水闸名称</div>
<div class="value border-b-r flex-1 p-10">
{{ formData.wagaName || "-" }}
</div>
</div>
</div>
<div class="flex border-l-t w-full">
<div
class="flex-1 border-b-r p-10 w-full flex justify-center items-center"
>
检查内容
</div>
<div class="w-300">
<div class="label border-b-r p-6 text-center">问题等级</div>
<div class="flex flex-shrink-0">
<div class="flex-1 border-b-r p-6 text-center"></div>
<div class="flex-1 border-b-r p-6 text-center">一般</div>
<div class="flex-1 border-b-r p-6 text-center">较重</div>
<div class="flex-1 border-b-r p-6 text-center">严重</div>
</div>
</div>
</div>
<div class="border-l-t w-full">
<div v-for="(item, index) in problemList" :key="index" class="flex">
<div class="w-p-10 border-b-r">
<div class="flex items-center p-10">{{ item.projectName }}</div>
</div>
<div class="w-p-90">
<div
v-for="(item2, index2) in item.children"
:key="index2 + '0'"
class="w-full flex"
>
<div class="flex-1 border-b-r p-10">{{ item2.content }}</div>
<div class="w-300 flex flex-shrink-0">
<div
class="flex-1 border-b-r p-10 flex justify-center items-center"
>
<i class="el-icon-check" v-if="item2.level === '0'"></i>
</div>
<div
class="flex-1 border-b-r p-10 flex justify-center items-center"
>
<i class="el-icon-check" v-if="item2.level === '1'"></i>
</div>
<div
class="flex-1 border-b-r p-10 flex justify-center items-center"
>
<i class="el-icon-check" v-if="item2.level === '2'"></i>
</div>
<div
class="flex-1 border-b-r p-10 flex justify-center items-center"
>
<i class="el-icon-check" v-if="item2.level === '3'"></i>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="border-l-t w-full">
<div class="flex">
<div class="w-p-10 border-b-r">
<div class="flex items-center p-10">问题描述</div>
</div>
<div class="w-p-90 border-b-r p-10">
{{
formData.describeTotal && formData.describeTotal.slice(0, -1)
}}
</div>
</div>
</div>
<div class="border-l-t w-full">
<div class="flex">
<div class="w-p-10 border-b-r">
<div class="flex items-center p-10">现场记录情况</div>
</div>
<div class="w-p-90 border-b-r p-10">
<el-image
v-for="item in formData.pictures"
:src="item"
style="width: auto"
class="mb-10 mr-10"
:preview-src-list="[item]"
>
<template #error>
<div
class="w-full flex justify-center items-center"
style="
height: 100px;
border: 1px solid #f0f0f0;
font-style: italic;
color: #ccc;
padding: 10px;
"
>
图片加载失败
</div>
</template>
</el-image>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="w-full" style="height: 200px">
<!-- 占位 -->
</div>
</div>
</template>
<script>
import html2canvas from "html2canvas";
import { jsPDF } from "jspdf";
import {
getEnableSuperviseWayData,
getSuperviseEngineeringReportDetailsData,
} from "@/api/sluice";
import { Loading } from "element-ui";
export default {
data() {
return {
problemList: [],
formData: {},
loadingInstance: null,
};
},
created() {
this.initData();
},
methods: {
//
async initData() {
const enableData = await getEnableSuperviseWayData({
wayId: this.$route.query.wayId,
});
if (enableData) {
let list = [];
enableData.data?.itemList?.forEach((item, index) => {
if (index === 0) {
list.push({
id: item.id,
projectId: item.projectId,
projectName: item.projectName,
problemDescribe: "",
siteSituationRecords: "",
siteSituationRecordsArr: [],
children: [{ ...item, level: null }],
});
} else {
let exitItem = list.find((v) => v.projectId === item.projectId);
if (!exitItem) {
list.push({
id: item.id,
projectId: item.projectId,
projectName: item.projectName,
problemDescribe: "",
siteSituationRecords: "",
siteSituationRecordsArr: [],
children: [{ ...item, level: null }],
});
} else {
exitItem.children.push({
...item,
level: null,
});
}
}
});
this.problemList = list;
console.log("this.problemList >>>>> ", this.problemList);
}
const detailRes = await getSuperviseEngineeringReportDetailsData(
this.$route.query.id
);
if (detailRes?.data && this.problemList.length) {
const { data } = detailRes;
this.formData = { ...data };
this.formData.problemList = [];
this.formData.pictures = [];
//
this.formData.describeTotal = "";
const { engineeringList, problemList } = data;
this.problemList.forEach((item) => {
let exitItem = engineeringList.find(
(v) => v.projectId === item.projectId
);
if (exitItem) {
item.newId = item.id === exitItem.id ? null : exitItem.id;
item.problemDescribe = exitItem.problemDescribe;
if (item.problemDescribe) {
this.formData.describeTotal += item.problemDescribe + ",";
}
item.siteSituationRecords = exitItem.siteSituationRecords;
item.siteSituationRecordsArr = exitItem.siteSituationRecords
? exitItem.siteSituationRecords.split(",")
: [];
if (item.siteSituationRecordsArr.length > 0) {
this.formData.pictures.push(...item.siteSituationRecordsArr);
}
item.children.forEach((item2) => {
let exitItem2 = problemList.find(
(v) => v.projectItemId === item2.id
);
if (exitItem2) {
item2.level = exitItem2.level;
item2.newId = item2.id === exitItem2.id ? null : exitItem2.id;
}
});
}
});
}
},
//
handleDownPdf() {
this.loadingInstance = Loading.service({
lock: true,
text: "正在生成PDF中...",
spinner: "el-icon-loading",
background: "rgba(0, 0, 0, 0.7)",
});
// A4pdf
const PDF_W = 592.28;
const PDF_H = 841.89;
html2canvas(this.$refs.pdfRef, {
useCORS: true,
scale: 2,
})
.then((canvas) => {
const width = canvas.width;
const height = canvas.height;
const pageHeight = (width / PDF_W) * PDF_H;
let leftHeight = height;
let position = 0;
var pageData = canvas.toDataURL("image/jpeg", 1.0);
const imgWidth = PDF_W;
const imgHeight = (PDF_W / width) * height;
let pdf = new jsPDF(undefined, "pt", "a4");
if (height < pageHeight) {
pdf.addImage(pageData, "JPEG", 0, position, imgWidth, imgHeight);
} else {
while (leftHeight > 0) {
pdf.addImage(pageData, "JPEG", 0, position, imgWidth, imgHeight);
leftHeight -= pageHeight;
position -= PDF_H;
if (leftHeight > 0) {
pdf.addPage();
}
}
}
let save = pdf.save("demo.pdf");
this.loadingInstance.close();
})
.catch((e) => {
console.log("e >>>>> ", e);
this.loadingInstance.close();
});
},
},
};
</script>
<style scoped lang="scss">
.report-page {
background-color: #fff;
height: 100%;
overflow: auto;
.table-box {
width: 1184px;
}
.sticky-top {
position: sticky;
top: 0;
background-color: #fff;
padding: 10px 24px;
}
}
.border-l-t {
border-left: 1px solid #ccc;
border-top: 1px solid #ccc;
}
.border-b-r {
border-bottom: 1px solid #ccc;
border-right: 1px solid #ccc;
}
.w-100 {
width: 100px;
}
.w-300 {
width: 300px;
}
.w-p-10 {
width: 10%;
}
.w-p-50 {
width: 50%;
}
.w-p-40 {
width: 40%;
}
.w-p-60 {
width: 60%;
}
.w-p-90 {
width: 90%;
}
</style>

984
src/views/sluice/runManage/supervisionInspetion/questionManage/index.vue

File diff suppressed because it is too large

8
src/views/sluice/runManage/supervisionInspetion/tasksManage/tasksDetails.vue

@ -1,13 +1,7 @@
<!-- 监督检查任务新增 -->
<script>
import dayjs from "dayjs";
import {
putDFPreventionControlPlan,
deleteDFMaintenancePlan,
postDFNewPreventionControlPlan,
postDFPreventionControlPlanList,
listUser,
} from "@/api/management";
import { listUser } from "@/api/management";
import {
getEnableSuperviseWayData,
getRunProjectList,

16
vue.config.js

@ -35,14 +35,14 @@ module.exports = {
port: 80,
open: true,
proxy: {
// [process.env.VUE_APP_BASE_API + '/run/']: {
// target: "http://172.16.34.27:18082",
// changeOrigin: true,
// // logLevel: 'debug',
// pathRewrite: {
// [process.env.VUE_APP_BASE_API +'/run/']: '/tianhui-admin-web/run/'
// }
// },
[process.env.VUE_APP_BASE_API + '/run/']: {
target: "http://172.16.34.27:18082",
changeOrigin: true,
// logLevel: 'debug',
pathRewrite: {
[process.env.VUE_APP_BASE_API +'/run/']: '/tianhui-admin-web/run/'
}
},
// 曹琪本地接口
// [process.env.VUE_APP_BASE_API]: {

Loading…
Cancel
Save