Browse Source

feat: 巡查记录接口对完

sy-water-data-board-ui
hejunjie 1 month ago
parent
commit
d5bbb2aa4f
  1. 48
      src/api/dike/patrolMaintenance.js
  2. 15
      src/views/dike/runManage/patrolMaintenance/InspectionRecords/index.vue
  3. 49
      src/views/dike/runManage/patrolMaintenance/acceptanceRecords/index.vue
  4. 183
      src/views/dike/runManage/patrolMaintenance/componentsDetails/defectDetails.vue
  5. 403
      src/views/dike/runManage/patrolMaintenance/componentsDetails/inspectionRecordDetails.vue
  6. 24
      src/views/dike/runManage/patrolMaintenance/defectList/index.vue
  7. 53
      src/views/dike/runManage/patrolMaintenance/maintenanceRecords/index.vue
  8. 2
      src/views/dike/runManage/patrolMaintenance/patrolItemsManage/index.vue
  9. 4
      vue.config.js

48
src/api/dike/patrolMaintenance.js

@ -11,6 +11,14 @@ export function postV2RecordList (data) {
data data
}) })
} }
// 堤防巡视检查记录新增或修改v2
export function postV2Record (data,commit) {
return request({
url: `/run/df/v2/record/${commit}`,
method: 'post',
data
})
}
// 堤防巡视检查记录详情v2 // 堤防巡视检查记录详情v2
export function gettV2Record (id) { export function gettV2Record (id) {
@ -38,6 +46,23 @@ export function postV2YhList (data) {
data data
}) })
} }
// 堤防养护详情v2
export function getV2Yh (id) {
return request({
url: `/run/df/v2/yh/${id}`,
method: 'get'
})
}
// 堤防养护新增或修改v2
export function postV2Yh (data, commit) {
return request({
url: `/run/df/v2/yh/${commit}`,
method: 'post',
data
})
}
/*************************************验收记录管理**************************************/ /*************************************验收记录管理**************************************/
// 审批列表 // 审批列表
export function postV2ApprovalList (data) { export function postV2ApprovalList (data) {
@ -47,3 +72,26 @@ export function postV2ApprovalList (data) {
data data
}) })
} }
// 审批通过
export function postV2ApprovalPassed (data, id) {
return request({
url: `/run/df/v2/approval/passed/${id}`,
method: 'post',
data
})
}
// 审批驳回
export function postV2ApprovalRejected (data, id) {
return request({
url: `/run/df/v2/approval/rejected/${id}`,
method: 'post',
data
})
}
// 审批意见
export function getV2ApprovalComment (formId) {
return request({
url: `/run/df/v2/approval/comment/${formId}`,
method: 'get'
})
}

15
src/views/dike/runManage/patrolMaintenance/InspectionRecords/index.vue

@ -155,7 +155,7 @@
}}</span> }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="dutyHolderName" align="center" label="责任人" /> <el-table-column prop="createName" align="center" label="责任人" />
<el-table-column <el-table-column
prop="startDate" prop="startDate"
align="center" align="center"
@ -187,6 +187,7 @@
<el-button <el-button
type="text" type="text"
size="small" size="small"
:disabled="!scope.row.status === '1'"
@click="handleEditDetails(scope.row, true)" @click="handleEditDetails(scope.row, true)"
>编辑</el-button >编辑</el-button
> >
@ -221,9 +222,7 @@ export default {
mixins: [calcTableHeight], mixins: [calcTableHeight],
data() { data() {
return { return {
tableData: [{ tableData: [],
id: 1
}],
maintenanceStatus: [], maintenanceStatus: [],
maintenanceCategory: [], maintenanceCategory: [],
maintenanceType: [], maintenanceType: [],
@ -269,7 +268,7 @@ export default {
handleCheckDetails(row) { handleCheckDetails(row) {
this.$router.push({ this.$router.push({
path: "inspectionRecordDetails", path: "inspectionRecordDetails",
query: { id: row.id, checkingId: row.checkingId }, query: { id: row.id, checkingId: row.checkingId, mode: "check" },
}); });
}, },
handleEditDetails(row) { handleEditDetails(row) {
@ -287,7 +286,6 @@ export default {
}, },
// //
handleChangeQuery() { handleChangeQuery() {
this.reqCountCalc();
this.pageData.pageNum = 1; this.pageData.pageNum = 1;
this.getTableData(); this.getTableData();
}, },
@ -299,7 +297,6 @@ export default {
this.paramsData.dutyHolder = ""; this.paramsData.dutyHolder = "";
this.paramsData.category = ""; this.paramsData.category = "";
this.paramsData.status = ""; this.paramsData.status = "";
this.reqCountCalc();
this.pageData.pageNum = 1; this.pageData.pageNum = 1;
this.getTableData(); this.getTableData();
}, },
@ -328,9 +325,7 @@ export default {
pageNum: this.pageData.pageNum, pageNum: this.pageData.pageNum,
}).then((res) => { }).then((res) => {
if (res) { if (res) {
this.tableData = [{ this.tableData = res.records;
id: 1
}];
this.pageData.total = res.total; this.pageData.total = res.total;
} }
}); });

49
src/views/dike/runManage/patrolMaintenance/acceptanceRecords/index.vue

@ -109,6 +109,27 @@
</el-option> </el-option>
</el-select> </el-select>
</div> </div>
<div class="search-item flex items-center">
<span class="search-label">问题等级</span>
<el-select
clearable
size="small"
class="w-202 ml-10"
v-model="paramsData.problemLevel"
:popper-append-to-body="false"
filterable
placeholder="请选择"
>
<el-option label="全部" value=""> </el-option>
<el-option
v-for="item in maintenanceLevel"
:key="item.dictValue"
:label="item.dictLabel"
:value="item.dictValue"
>
</el-option>
</el-select>
</div>
<div class="flex-1 flex justify-end search-item"> <div class="flex-1 flex justify-end search-item">
<el-button <el-button
size="small" size="small"
@ -155,6 +176,14 @@
}}</span> }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="level" align="center" label="问题等级">
<template slot-scope="scope">
<span>{{
getDictLabelName(scope.row.level, "maintenanceLevel")
}}</span>
</template>
</el-table-column>
<el-table-column prop="dutyHolderName" align="center" label="责任人" /> <el-table-column prop="dutyHolderName" align="center" label="责任人" />
<el-table-column <el-table-column
prop="startDate" prop="startDate"
@ -181,9 +210,15 @@
<el-button <el-button
type="text" type="text"
size="small" size="small"
@click="handleCheckDetails(scope.row, false)" @click="handleCheckDetails(scope.row, 'check')"
>查看</el-button >查看</el-button
> >
<el-button
type="text"
size="small"
@click=" (scope.row, 'edit')"
>编辑</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -218,12 +253,14 @@ export default {
maintenanceStatus: [], maintenanceStatus: [],
maintenanceCategory: [], maintenanceCategory: [],
maintenanceType: [], maintenanceType: [],
maintenanceLevel: [],
paramsData: { paramsData: {
name: "", name: "",
type: "", type: "",
time: [], time: [],
dutyHolder: '', dutyHolder: '',
category: '', category: '',
problemLevel: '',
status: '' status: ''
}, },
pageData: { pageData: {
@ -244,6 +281,9 @@ export default {
this.getDicts("patrol_maintenance_type").then((response) => { this.getDicts("patrol_maintenance_type").then((response) => {
this.maintenanceType = response.data; this.maintenanceType = response.data;
}); });
this.getDicts("patrol_maintenance_level").then((response) => {
this.maintenanceLevel = response.data;
});
}, },
mounted() { mounted() {
this.getTableData() this.getTableData()
@ -258,9 +298,10 @@ export default {
this.getTableData(); this.getTableData();
}, },
handleCheckDetails() { handleCheckDetails(row, mode) {
this.$router.push({ this.$router.push({
path: "defectDetails", path: "defectDetails",
query: { id: row.id, formId: row.formId , mode: mode, module: 'acceptance' },
}); });
}, },
getDictLabelName(type, dictListName) { getDictLabelName(type, dictListName) {
@ -272,7 +313,6 @@ export default {
}, },
// //
handleChangeQuery() { handleChangeQuery() {
this.reqCountCalc();
this.pageData.pageNum = 1; this.pageData.pageNum = 1;
this.getTableData(); this.getTableData();
}, },
@ -284,7 +324,7 @@ export default {
this.paramsData.dutyHolder = ""; this.paramsData.dutyHolder = "";
this.paramsData.category = ""; this.paramsData.category = "";
this.paramsData.status = ""; this.paramsData.status = "";
this.reqCountCalc(); this.paramsData.problemLevel = "";
this.pageData.pageNum = 1; this.pageData.pageNum = 1;
this.getTableData(); this.getTableData();
}, },
@ -295,6 +335,7 @@ export default {
dutyHolder: this.paramsData.dutyHolder, dutyHolder: this.paramsData.dutyHolder,
category: this.paramsData.category, category: this.paramsData.category,
status: this.paramsData.status, status: this.paramsData.status,
problemLevel: this.paramsData.problemLevel,
startTime: this.paramsData.time && this.paramsData.time.length > 1 ? this.paramsData.time[0] : '', startTime: this.paramsData.time && this.paramsData.time.length > 1 ? this.paramsData.time[0] : '',
endTime: this.paramsData.time && this.paramsData.time.length > 1 ? this.paramsData.time[1] : '', endTime: this.paramsData.time && this.paramsData.time.length > 1 ? this.paramsData.time[1] : '',
} }

183
src/views/dike/runManage/patrolMaintenance/componentsDetails/defectDetails.vue

@ -8,46 +8,57 @@
<el-row> <el-row>
<el-col :span="8"> <el-col :span="8">
<div class="tc-text2">堤防名称</div> <div class="tc-text2">堤防名称</div>
<div class="tc-text1">123</div> <div class="tc-text1">{{ form.dikeName }}</div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="tc-text2">堤防巡查责任人</div> <div class="tc-text2">堤防巡查责任人</div>
<div class="tc-text1">123</div> <div class="tc-text1">{{ form.createName }}</div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="tc-text2">巡查类别</div> <div class="tc-text2">巡查类别</div>
<div class="tc-text1">123</div> <div class="tc-text1">
{{getDictLabelName(form.category, "maintenanceCategory") }}
</div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="tc-text2">堤防巡查开始/结束时间</div> <div class="tc-text2">堤防巡查开始/结束时间</div>
<div class="tc-text1">123</div> <div class="tc-text1">{{ form.time[0] }}/{{ form.time[1] }}</div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="tc-text2">巡查部位</div> <div class="tc-text2">巡查部位</div>
<div class="tc-text1">123</div> <div class="tc-text1">{{ form.partsName }}</div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="tc-text2">问题位置</div> <div class="tc-text2">问题位置</div>
<div class="tc-text1">123</div> <div class="tc-text1">{{ form.position }}</div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="tc-text2">问题等级</div> <div class="tc-text2">问题等级</div>
<div class="tc-text1">123</div> <div class="tc-text1">
{{getDictLabelName(form.problemLevel, "maintenanceLevel") }}
</div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="tc-text2">具体描述</div> <div class="tc-text2">具体描述</div>
<div class="tc-text1">123</div> <div class="tc-text1">{{ form.content }}</div>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<div class="tc-text2">缺陷图片</div> <div class="tc-text2">缺陷图片</div>
<div class="tc-text1">123</div> <div class="tc-text1">
<el-image
v-for="item in form.problemImages"
style="width: 40px; height: 40px;"
:src="item"
:preview-src-list="form.problemImages">
</el-image>
</div>
</el-col> </el-col>
</el-row> </el-row>
</div> </div>
<div class="form-row-title">养护记录</div> <div class="form-row-title">养护记录</div>
<el-form ref="form" :model="form" :rules="rules" label-width="120px" label-position="top"> <el-form ref="form" :model="form" :rules="rules" label-width="120px" label-position="top">
<el-row gutter="48"> <el-row :gutter="48">
<el-col span="8"> <el-col :span="8">
<el-form-item label="维养责任人:" prop="name"> <el-form-item label="维养责任人:" prop="name">
<el-input <el-input
placeholder="请输入内容" placeholder="请输入内容"
@ -55,7 +66,7 @@
</el-input> </el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col span="8"> <el-col :span="8">
<el-form-item label="维养开始/结束时间:" prop="projectName"> <el-form-item label="维养开始/结束时间:" prop="projectName">
<el-date-picker <el-date-picker
size="small" size="small"
@ -73,7 +84,7 @@
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col span="16"> <el-col :span="16">
<el-form-item label="维养详情:" prop="describe"> <el-form-item label="维养详情:" prop="describe">
<el-input <el-input
type="textarea" type="textarea"
@ -103,8 +114,8 @@
<div class="form-row-title">验收意见</div> <div class="form-row-title">验收意见</div>
<el-form ref="form" :model="form" :rules="rules" label-width="120px" label-position="right"> <el-form ref="form" :model="form" :rules="rules" label-width="120px" label-position="right">
<el-row gutter="48"> <el-row :gutter="48">
<el-col span="8"> <el-col :span="8">
<el-form-item label="复核人:" prop="name"> <el-form-item label="复核人:" prop="name">
<el-input <el-input
placeholder="请输入内容" placeholder="请输入内容"
@ -112,7 +123,7 @@
</el-input> </el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col span="8"> <el-col :span="8">
<el-form-item label="复核时间:" prop="projectName"> <el-form-item label="复核时间:" prop="projectName">
<el-date-picker <el-date-picker
size="small" size="small"
@ -130,7 +141,7 @@
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col span="16"> <el-col :span="16">
<el-form-item label="复核意见:" prop="describe"> <el-form-item label="复核意见:" prop="describe">
<el-input <el-input
type="textarea" type="textarea"
@ -145,6 +156,21 @@
</el-row> </el-row>
</el-form> </el-form>
</div> </div>
<div class="bottom-btns" v-if="$route.query.mode !== 'check'">
<el-button type="danger" v-if="$route.query.module === 'acceptance'" @click="handleAccept(true)"
>通过</el-button
>
<el-button type="danger" v-if="$route.query.module === 'acceptance'" @click="handleAccept(false)"
>驳回</el-button
>
<el-button type="primary" v-if="$route.query.module === 'maintenance'" @click="handleSave(true)"
>保存并提交</el-button
>
<el-button type="primary" v-if="$route.query.module === 'maintenance'" @click="handleSave(false)"
>保存</el-button
>
<el-button @click="$router.go(-1)" v-if="$route.query.module === 'maintenance'">返回</el-button>
</div>
</div> </div>
</template> </template>
<script> <script>
@ -152,6 +178,8 @@ import TopBackTitle from "@/components/TopBackTitle/index.vue";
import {calcTableHeight} from "@/mixins/calcTableHeight"; import {calcTableHeight} from "@/mixins/calcTableHeight";
import SyMixMap from "@/views/components/SyMixMap.vue"; import SyMixMap from "@/views/components/SyMixMap.vue";
import {getRecordDetails, getRecordTraceList} from "@/api/dike"; import {getRecordDetails, getRecordTraceList} from "@/api/dike";
import {getV2Yh, postV2Yh, getV2ApprovalComment, gettV2Record, postV2ApprovalPassed, postV2ApprovalRejected} from "@/api/dike/patrolMaintenance";
import {getDictMapData} from "@/api/system/dict/data";
export default { export default {
components: { components: {
@ -163,17 +191,29 @@ export default {
return { return {
entries: {}, entries: {},
traceList: [], traceList: [],
maintenanceCategory: [],
maintenanceLevel: [],
tableData: [{ tableData: [{
nspectionLocation: '堤坡与戗台', nspectionLocation: '堤坡与戗台',
inspectionContent: '是否坚实平整', inspectionContent: '是否坚实平整',
}], }],
form: { form: {
name: '张三', createName: '',
projectName: '项目名称内容', name: '',
dikeName: '堤防名称内容', dikeName: '',
inspectionCategory: '工程巡查', category: '',
parts: '',
partsName: '',
content: '',
position: '',
problemImages: '',
problemLevel: '',
createUid: '',
dikeCode: '',
dikeType: '',
type: '',
time: [], time: [],
describe: '', scope: '',
}, },
rules: { rules: {
name: [{required: true}], name: [{required: true}],
@ -186,35 +226,91 @@ export default {
}; };
}, },
created() { created() {
this.getDicts("patrol_maintenance_category").then((response) => {
this.maintenanceCategory = response.data;
});
this.getDicts("patrol_maintenance_level").then((response) => {
this.maintenanceLevel = response.data;
});
}, },
mounted() { mounted() {
this.initData() this.initData()
}, },
methods: { methods: {
async initData() { async initData() {
const res = await getRecordDetails(17); const checking = await gettV2Record(this.$route.query.recordId)
this.entries = res.data?.entries ? JSON.parse(res.data.entries) : {}; console.log('checking',checking)
getRecordTraceList({ this.form.createName = checking.data.createName
data: { this.form.name = checking.data.name
recordId: 17, this.form.dikeName = checking.data.dikeName
}, this.form.category = checking.data.category
params: { this.form.createUid = checking.data.createUid
orderBy: "create_time", this.form.dikeCode = checking.data.dikeCode
sort: "desc", // this.form.dikeType = checking.data.dikeType
}, this.form.type = checking.data.type
pageNum: 1, this.form.time[0] = checking.data.startDate
pageSize: 100, this.form.time[1] = checking.data.endDate
}).then((res) => { console.log(checking)
this.traceList = checking.data.problems.forEach(item => {
res.records if(item.id === this.$route.query.defectId) {
?.map((v) => { this.form.content = item.content
return [v.longitude, v.latitude]; this.form.position = item.position
this.form.parts = item.parts
getDictMapData("df_xs_c_classfy").then((res) => {
let parts = ''
item.parts.forEach((part) => {
if (parts) {
parts = parts + ':' + part
} else {
parts = part
}
}) })
?.reverse() || []; this.form.partsName = res.data[parts]
}); })
this.form.problemLevel = item.problemLevel
this.form.problemImages = item.problemImages
}
})
// if (this.$route.query.fromId) {
// const ApprovalComment = await getV2ApprovalComment(this.$route.query.fromId)
// } else {
// const ApprovalComment = await getV2ApprovalComment(0)
// }
},
console.log('this.traceList', this.traceList) getDictLabelName(type, dictListName) {
console.log('this.entries', this.entries) if (!this[dictListName]) return "";
return (
this[dictListName].find((item) => item.dictValue === type)?.dictLabel ||
""
);
},
handleAccept() {
},
handleSave(commit) {
const data = {
category: this.form.category,
checkingId: this.form.category,
checkingName: this.form.category,
createName: this.form.category,
createUid: this.form.category,
dikeCode: this.form.dikeCode,
dikeName: this.form.dikeName,
dikeType: this.form.dikeType,
startDate: this.form.dikeType,
endDate: this.form.dikeType,
doc: this.form.dikeType,
problems: this.form.dikeType,
scope: this.form.dikeType,
status: this.form.dikeType,
type: this.form.dikeType,
}
console.log(data)
// postV2Yh(data, commit).then(res => {
// this.$message.success('')
// this.$router.go(-1)
// })
} }
}, },
}; };
@ -225,6 +321,7 @@ export default {
height: calc(100% - 50px - 24px); height: calc(100% - 50px - 24px);
margin-top: 24px; margin-top: 24px;
padding: 16px; padding: 16px;
padding-bottom: 80px;
background-color: white; background-color: white;
overflow: auto; overflow: auto;
} }

403
src/views/dike/runManage/patrolMaintenance/componentsDetails/inspectionRecordDetails.vue

@ -1,45 +1,46 @@
<template> <template>
<div class="slider-right"> <div class="slider-right">
<!-- <div class="top-title">{{ $router.currentRoute.meta.title }}</div> -->
<TopBackTitle></TopBackTitle> <TopBackTitle></TopBackTitle>
<div class="table-box"> <div class="table-box">
<div class="form-row-title">巡查路线</div> <div class="form-row-title">巡查路线</div>
<div class="patrol-box"> <div class="patrol-box">
<el-form ref="form" :model="form" :rules="rules" label-width="120px" label-position="right"> <el-form ref="form" :model="form" :rules="rules" label-width="120px" label-position="right">
<el-form-item label="巡查人:" prop="name"> <el-form-item label="巡查人:" prop="createName">
{{ form.name }} {{ form.createName }}
</el-form-item> </el-form-item>
<el-form-item label="巡查项目名称:" prop="projectName"> <el-form-item label="巡查项目名称:" prop="name">
{{ form.projectName }} {{ form.name }}
</el-form-item> </el-form-item>
<el-form-item label="巡查堤防名称:" prop="dikeName"> <el-form-item label="巡查堤防名称:" prop="dikeName">
{{ form.dikeName }} {{ form.dikeName }}
</el-form-item> </el-form-item>
<el-form-item label="巡查类别:" prop="inspectionCategory"> <el-form-item label="巡查类别:" prop="category">
{{ form.inspectionCategory }} {{ getDictLabelName(form.category, "maintenanceCategory") }}
</el-form-item> </el-form-item>
<el-form-item label="巡查时间:" prop="time"> <el-form-item label="巡查时间:" prop="time">
<el-date-picker <el-date-picker
size="small" size="small"
class="ml-10" class="ml-10"
:disabled="$route.query.mode === 'check'"
v-model="form.time" v-model="form.time"
type="daterange" type="daterange"
value-format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss"
range-separator="至" range-separator="至"
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
> >
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="巡查范围:" prop="describe"> <el-form-item label="巡查范围:" prop="scope">
<el-input <el-input
type="textarea" type="textarea"
:disabled="$route.query.mode === 'check'"
:rows="4" :rows="4"
placeholder="请输入内容" placeholder="请输入内容"
maxlength="200" maxlength="200"
show-word-limit show-word-limit
resize="none" resize="none"
v-model="form.describe"> v-model="form.scope">
</el-input> </el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -60,47 +61,63 @@
style="margin-bottom: 16px;" style="margin-bottom: 16px;"
border border
> >
<el-table-column prop="parts" align="center" label="巡查部位" /> <el-table-column prop="name" align="center" label="巡查部位" />
<el-table-column prop="content" align="center" label="检查内容" /> <el-table-column prop="content" align="center" label="检查内容" />
</el-table> </el-table>
<div class="form-row-title">缺陷问题列表</div> <div class="form-row-title">缺陷问题列表</div>
<div class="flex-1 flex justify-end search-item"> <div class="flex-1 flex justify-end search-item" style="margin-bottom: 16px;">
<el-button <el-button
size="small" size="small"
:disabled="$route.query.mode === 'check'"
class="flex-shrink-0 myml-12" class="flex-shrink-0 myml-12"
type="success" type="success"
@click="addProblems" @click="addProblems"
>新增</el-button >新增</el-button
> >
<el-button <el-button
type="danger"
:disabled="$route.query.mode === 'check'"
class="flex-shrink-0" class="flex-shrink-0"
size="small"
@click="delProblems" @click="delProblems"
size="small"
>删除</el-button >删除</el-button
> >
</div> </div>
<el-table <el-table
:height="tableHeight" :height="tableHeight"
:data="problemsData" :data="problemsData"
@selection-change="handleSelectionChange"
border border
> >
<el-table-column type="selection" width="55"></el-table-column> <el-table-column type="selection" width="55"></el-table-column>
<el-table-column prop="parts" align="center" label="巡查部位" /> <el-table-column prop="parts" label="巡查部位">
<!-- <el-table-column prop="content" label="检查内容">--> <template slot-scope="scope">
<!-- <template slot-scope="scope">--> <el-select
<!-- <el-input--> clearable
<!-- :disabled="!canEdit"--> size="small"
<!-- v-model="scope.row.content"--> class="w-202 ml-10"
<!-- placeholder="请输入"--> :disabled="$route.query.mode === 'check'"
<!-- ></el-input>--> v-model="scope.row.parts"
<!-- </template>--> filterable
<!-- </el-table-column>--> placeholder="请选择"
>
<el-option
v-for="item in tableData"
:key="item.id"
:label="item.name"
:value="item.parts"
>
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column prop="problemLevel" label="问题等级"> <el-table-column prop="problemLevel" label="问题等级">
<template slot-scope="scope"> <template slot-scope="scope">
<el-select <el-select
clearable clearable
size="small" size="small"
class="w-202 ml-10" class="w-202 ml-10"
:disabled="$route.query.mode === 'check'"
v-model="scope.row.problemLevel" v-model="scope.row.problemLevel"
filterable filterable
placeholder="请选择" placeholder="请选择"
@ -118,6 +135,7 @@
<el-table-column prop="position" label="具体位置"> <el-table-column prop="position" label="具体位置">
<template slot-scope="scope"> <template slot-scope="scope">
<el-input <el-input
:disabled="$route.query.mode === 'check'"
v-model="scope.row.position" v-model="scope.row.position"
placeholder="请输入" placeholder="请输入"
></el-input> ></el-input>
@ -126,13 +144,38 @@
<el-table-column prop="content" label="具体描述"> <el-table-column prop="content" label="具体描述">
<template slot-scope="scope"> <template slot-scope="scope">
<el-input <el-input
:disabled="$route.query.mode === 'check'"
v-model="scope.row.content" v-model="scope.row.content"
placeholder="请输入" placeholder="请输入"
></el-input> ></el-input>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="inspectionContent" align="center" label="缺陷照片" /> <el-table-column align="center" label="缺陷照片">
<el-table-column prop="inspectionContent" align="center" label="维养状态" /> <template slot-scope="scope">
<div class="imgBox">
<div
class="imgList"
v-for="item in scope.row.problemImages"
>
<el-image
style="width: 40px; height: 40px;"
:src="item"
:preview-src-list="scope.row.problemImages">
</el-image>
<div class="delImg" v-if="$route.query.mode !== 'check'" @click="delImage(item, scope.row.problemImages)">
×
</div>
</div>
</div>
</template>
</el-table-column>
<el-table-column prop="status" align="center" label="维养状态">
<template slot-scope="scope">
<span>{{
getDictLabelName(scope.row.status, "maintenanceStatus")
}}</span>
</template>
</el-table-column>
<el-table-column <el-table-column
prop="opera" prop="opera"
align="center" align="center"
@ -141,44 +184,63 @@
width="168" width="168"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <div style="display:flex;">
style="margin-right: 16px" <el-upload
type="text" class=""
size="small" action="#"
@click="handleCheckDetails(scope.row, false)" :http-request="(e) => {handleUploadProject(e, scope.row)}"
>上传图片</el-button :before-upload="(e) => {beforeUploadProject(e, scope.row)}"
> :show-file-list="false"
accept=".png,.jpg,.jpeg"
<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"
v-hasPermi="['df:run:checking:item:delete']"
>删除</el-button
> >
</el-popconfirm> <el-button :disabled="$route.query.mode === 'check'" size="small" style="margin-right: 10px;" type="text">上传图片</el-button>
</el-upload>
<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"
:disabled="$route.query.mode === 'check'"
slot="reference"
v-hasPermi="['df:run:checking:item:delete']"
>删除</el-button
>
</el-popconfirm>
</div>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
<div class="bottom-btns" v-if="$route.query.mode !== 'check'">
<el-button type="primary" @click="handleSave(true)"
>保存并提交</el-button
>
<el-button type="primary" @click="handleSave(false)"
>保存</el-button
>
<el-button @click="$router.go(-1)">返回</el-button>
</div>
</div> </div>
</template> </template>
<script> <script>
import { intersection } from "lodash";
import TopBackTitle from "@/components/TopBackTitle/index.vue"; import TopBackTitle from "@/components/TopBackTitle/index.vue";
import {calcTableHeight} from "@/mixins/calcTableHeight"; import {calcTableHeight} from "@/mixins/calcTableHeight";
import SyMixMap from "@/views/components/SyMixMap.vue"; import SyMixMap from "@/views/components/SyMixMap.vue";
import {getCheckingDictTree, getRecordDetails, getRecordTraceList, getV2PatrolChecking} from "@/api/dike"; import {
import {gettV2Record} from "@/api/dike/patrolMaintenance"; getRecordDetails,
getRecordTraceList,
getV2PatrolChecking
} from "@/api/dike";
import {gettV2Record, postV2Record} from "@/api/dike/patrolMaintenance";
import { uploadFileData } from "@/api/system/upload";
import {getDictMapData} from "@/api/system/dict/data";
export default { export default {
components: { components: {
@ -191,30 +253,30 @@ export default {
entries: {}, entries: {},
maintenanceStatus: [], maintenanceStatus: [],
maintenanceLevel: [], maintenanceLevel: [],
maintenanceCategory: [],
traceList: [], traceList: [],
problemsData: [{ problemsCheckData: [],
nspectionLocation: '堤坡与戗台', problemsData: [],
inspectionContent: '是否坚实平整', tableData: [],
}],
tableData: [{
nspectionLocation: '堤坡与戗台',
inspectionContent: '是否坚实平整',
}],
form: { form: {
name: '张三', createName: '',
projectName: '项目名称内容', name: '',
dikeName: '堤防名称内容', dikeName: '',
inspectionCategory: '工程巡查', category: '',
createUid: '',
dikeCode: '',
dikeType: '',
type: '',
time: [], time: [],
describe: '', scope: '',
}, },
rules: { rules: {
createName: [{required: true}],
name: [{required: true}], name: [{required: true}],
projectName: [{required: true}],
dikeName: [{required: true}], dikeName: [{required: true}],
inspectionCategory: [{required: true}], category: [{required: true}],
time: [{required: true}], time: [{required: true}],
describe: [{required: true}], scope: [{required: true}],
} }
}; };
}, },
@ -222,6 +284,9 @@ export default {
this.getDicts("patrol_maintenance_status").then((response) => { this.getDicts("patrol_maintenance_status").then((response) => {
this.maintenanceStatus = response.data; this.maintenanceStatus = response.data;
}); });
this.getDicts("patrol_maintenance_category").then((response) => {
this.maintenanceCategory = response.data;
});
this.getDicts("patrol_maintenance_level").then((response) => { this.getDicts("patrol_maintenance_level").then((response) => {
this.maintenanceLevel = response.data; this.maintenanceLevel = response.data;
}); });
@ -235,16 +300,38 @@ export default {
this.getMapData() this.getMapData()
}, },
async getDetail() { async getDetail() {
console.log(this.$route.query.id) if (this.$route.query.id) {
const details = await gettV2Record(this.$route.query.id); const details = await gettV2Record(this.$route.query.id);
const checking = await getV2PatrolChecking(22); this.form.time[0] = details.data.startDate
console.log(checking) this.form.time[1] = details.data.endDate
this.tableData = checking.data.items; this.form.scope = details.data.scope
const dictData = await getCheckingDictTree("df_xs_c_classfy"); this.problemsData = details.data.problems
let _xcTreeData = this.transformArr(dictData?.data); this.form.time = [...this.form.time]
this.matchXcTreeData(_xcTreeData, this.tableData); }
console.log(_xcTreeData) const checking = await getV2PatrolChecking(this.$route.query.checkingId);
console.log(this.tableData) this.form.createName = checking.data.createName
this.form.name = checking.data.name
this.form.dikeName = checking.data.dikeName
this.form.category = checking.data.category
this.form.createUid = checking.data.createUid
this.form.dikeCode = checking.data.dikeCode
this.form.dikeType = checking.data.dikeType
this.form.type = checking.data.type
const items = checking.data.items
getDictMapData("df_xs_c_classfy").then((res) => {
items.forEach(item => {
let parts = ''
item.parts.forEach((part) => {
if (parts) {
parts = parts + ':' + part
} else {
parts = part
}
})
item.name = res.data[parts]
})
this.tableData = items
});
}, },
async getMapData() { async getMapData() {
// //
@ -269,61 +356,104 @@ export default {
?.reverse() || []; ?.reverse() || [];
}); });
}, },
// //
transformArr(treeList) { handleUploadProject(e, row) {
// const { file } = e;
function deepCalc(item, part = []) { let fData = new FormData();
item.parts = [...part, item.key]; fData.append("file", file);
if (item.children?.length) { uploadFileData(fData)
item.children.forEach((v) => { .then((res) => {
if (!v.children || v.children.length === 0) { row.problemImages.push(res.url);
v.parts = [...item.parts, v.key]; })
v.content = v.remark || ""; .catch((err) => {
delete v.children; console.log("err >>>>> ", err);
} else { });
deepCalc(v, item.parts); },
} //
}); beforeUploadProject(e, row) {
} else { const { name, size } = e;
delete item.children; if (!/\.(jpg|png|jpeg)$/.test(name)) {
} this.$message.warning("文件格式不正确");
return false;
} }
treeList.forEach((item) => { if (row.problemImages?.length >= 3) {
deepCalc(item); this.$message({
}); message: "最多上传3份",
return treeList; type: "warning",
});
return false;
}
return true;
}, },
// delImage(img, problemImages) {
matchXcTreeData(treeData, dataList) { const index = problemImages.indexOf(img)
treeData.forEach((v) => { problemImages.splice(index, 1)
if (!v.children?.length) { problemImages
for (const item of dataList) {
v.id = item.id;
if (intersection(v.parts, item.parts).length === v.parts.length) {
//
v.content = item.content || "";
break;
}
}
} else {
this.matchXcTreeData(v.children, dataList);
}
});
}, },
addProblems() { addProblems() {
this.problemsData.push({ this.problemsData.push({
problemLevel: '1', problemLevel: '1',
partsId: this.tableData[0].parts,
poistion: '', poistion: '',
content: '', content: '',
problemImages: [], problemImages: [],
status: '1', status: '4',
}) })
}, },
getDictLabelName(type, dictListName) {
if (!this[dictListName]) return "";
return (
this[dictListName].find((item) => item.dictValue === type)?.dictLabel ||
""
);
},
handleSelectionChange(e) {
this.problemsCheckData = e || [];
},
delProblems() { delProblems() {
this.$confirm("是否删除选中的问题?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
this.problemsCheckData.forEach((Check) => {
const index = this.problemsData.indexOf(Check)
this.problemsData.splice(index, 1)
})
})
.catch(() => {
console.log("取消删除");
});
}, },
deleteTableItem() { deleteTableItem(row) {
const index = this.problemsData.indexOf(row)
this.problemsData.splice(index, 1)
},
handleSave(commit) {
const data = {
category: this.form.category,
checkingId: this.$route.query.checkingId,
checkingName: this.form.name,
createName: this.form.createName,
createUid: this.form.createUid,
dikeName: this.form.dikeName,
dikeCode: this.form.dikeCode,
dikeType: this.form.dikeType,
scope: this.form.scope,
problems: this.problemsData,
startDate: this.form.time && this.form.time.length > 1 ? this.form.time[0] : '',
endDate: this.form.time && this.form.time.length > 1 ? this.form.time[1] : '',
type: this.form.type,
}
if (this.$route.query.id) {
data.id = this.$route.query.id
}
console.log(data);
postV2Record(data,commit).then(res => {
this.$message.success('保存成功')
this.$router.go(-1)
})
} }
}, },
}; };
@ -334,6 +464,7 @@ export default {
height: calc(100% - 50px - 24px); height: calc(100% - 50px - 24px);
margin-top: 24px; margin-top: 24px;
padding: 16px; padding: 16px;
padding-bottom: 80px;
background-color: white; background-color: white;
overflow: auto; overflow: auto;
} }
@ -357,4 +488,36 @@ export default {
height: 100%; height: 100%;
} }
} }
.imgBox {
display: flex;
padding: 10px;
.imgList {
position: relative;
margin-right: 10px;
&:hover {
.delImg {
display: flex;
}
}
.el-image {
border-radius: 4px;
}
.delImg {
display: none;
position: absolute;
top: 0;
right: 0;
justify-content: center;
align-items: center;
width: 14px;
height: 14px;
color: #ffffff;
cursor: pointer;
background: rgba(0, 0, 0, 0.6);
}
}
}
.el-upload-list {
display: none;
}
</style> </style>

24
src/views/dike/runManage/patrolMaintenance/defectList/index.vue

@ -115,7 +115,7 @@
clearable clearable
size="small" size="small"
class="w-202 ml-10" class="w-202 ml-10"
v-model="paramsData.level" v-model="paramsData.problemLevel"
:popper-append-to-body="false" :popper-append-to-body="false"
filterable filterable
placeholder="请选择" placeholder="请选择"
@ -209,13 +209,13 @@
<el-button <el-button
type="text" type="text"
size="small" size="small"
@click="handleCheckDetails(scope.row, false)" @click="handleCheckDetails(scope.row, 'receive')"
>领单</el-button >领单</el-button
> >
<el-button <el-button
type="text" type="text"
size="small" size="small"
@click="handleCheckDetails(scope.row, true)" @click="handleCheckDetails(scope.row, 'check')"
>查看</el-button >查看</el-button
> >
</template> </template>
@ -248,9 +248,7 @@ export default {
mixins: [calcTableHeight], mixins: [calcTableHeight],
data() { data() {
return { return {
tableData: [{ tableData: [],
id: 1
}],
maintenanceStatus: [], maintenanceStatus: [],
maintenanceCategory: [], maintenanceCategory: [],
maintenanceType: [], maintenanceType: [],
@ -261,7 +259,8 @@ export default {
time: [], time: [],
dutyHolder: '', dutyHolder: '',
category: '', category: '',
status: '' status: '',
problemLevel: ''
}, },
pageData: { pageData: {
pageNum: 1, // pageNum: 1, //
@ -297,9 +296,10 @@ export default {
this.pageData.pageSize = pageSize; this.pageData.pageSize = pageSize;
this.getTableData(); this.getTableData();
}, },
handleCheckDetails() { handleCheckDetails(row, mode) {
this.$router.push({ this.$router.push({
path: "defectDetails", path: "defectDetails",
query: { recordId: row.recordId, defectId: row.id , mode: mode, module: 'maintenance' },
}); });
}, },
getDictLabelName(type, dictListName) { getDictLabelName(type, dictListName) {
@ -311,7 +311,6 @@ export default {
}, },
// //
handleChangeQuery() { handleChangeQuery() {
this.reqCountCalc();
this.pageData.pageNum = 1; this.pageData.pageNum = 1;
this.getTableData(); this.getTableData();
}, },
@ -323,7 +322,7 @@ export default {
this.paramsData.dutyHolder = ""; this.paramsData.dutyHolder = "";
this.paramsData.category = ""; this.paramsData.category = "";
this.paramsData.status = ""; this.paramsData.status = "";
this.reqCountCalc(); this.paramsData.problemLevel = "";
this.pageData.pageNum = 1; this.pageData.pageNum = 1;
this.getTableData(); this.getTableData();
}, },
@ -334,6 +333,7 @@ export default {
dutyHolder: this.paramsData.dutyHolder, dutyHolder: this.paramsData.dutyHolder,
category: this.paramsData.category, category: this.paramsData.category,
status: this.paramsData.status, status: this.paramsData.status,
problemLevel: this.paramsData.problemLevel,
startTime: this.paramsData.time && this.paramsData.time.length > 1 ? this.paramsData.time[0] : '', startTime: this.paramsData.time && this.paramsData.time.length > 1 ? this.paramsData.time[0] : '',
endTime: this.paramsData.time && this.paramsData.time.length > 1 ? this.paramsData.time[1] : '', endTime: this.paramsData.time && this.paramsData.time.length > 1 ? this.paramsData.time[1] : '',
} }
@ -352,9 +352,7 @@ export default {
pageNum: this.pageData.pageNum, pageNum: this.pageData.pageNum,
}).then((res) => { }).then((res) => {
if (res) { if (res) {
this.tableData = [{ this.tableData = res.records;
id: 1
}];
this.pageData.total = res.total; this.pageData.total = res.total;
} }
}); });

53
src/views/dike/runManage/patrolMaintenance/maintenanceRecords/index.vue

@ -109,6 +109,27 @@
</el-option> </el-option>
</el-select> </el-select>
</div> </div>
<div class="search-item flex items-center">
<span class="search-label">问题等级</span>
<el-select
clearable
size="small"
class="w-202 ml-10"
v-model="paramsData.problemLevel"
:popper-append-to-body="false"
filterable
placeholder="请选择"
>
<el-option label="全部" value=""> </el-option>
<el-option
v-for="item in maintenanceLevel"
:key="item.dictValue"
:label="item.dictLabel"
:value="item.dictValue"
>
</el-option>
</el-select>
</div>
<div class="flex-1 flex justify-end search-item"> <div class="flex-1 flex justify-end search-item">
<el-button <el-button
size="small" size="small"
@ -155,6 +176,14 @@
}}</span> }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="level" align="center" label="问题等级">
<template slot-scope="scope">
<span>{{
getDictLabelName(scope.row.level, "maintenanceLevel")
}}</span>
</template>
</el-table-column>
<el-table-column prop="dutyHolderName" align="center" label="责任人" /> <el-table-column prop="dutyHolderName" align="center" label="责任人" />
<el-table-column <el-table-column
prop="startDate" prop="startDate"
@ -181,15 +210,21 @@
<el-button <el-button
type="text" type="text"
size="small" size="small"
@click="handleCheckDetails(scope.row, false)" @click="handleCheckDetails(scope.row, 'check')"
>查看</el-button >查看</el-button
> >
<el-button <el-button
type="text" type="text"
size="small" size="small"
@click="handleCheckDetails(scope.row, true)" @click="handleCheckDetails(scope.row, 'edit')"
>编辑</el-button >编辑</el-button
> >
<el-button
type="text"
size="small"
@click="handleCheckDetails(scope.row, 'receive')"
>领单</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -222,6 +257,7 @@ export default {
tableData: [], tableData: [],
maintenanceStatus: [], maintenanceStatus: [],
maintenanceCategory: [], maintenanceCategory: [],
maintenanceLevel: [],
maintenanceType: [], maintenanceType: [],
paramsData: { paramsData: {
name: "", name: "",
@ -229,7 +265,8 @@ export default {
time: [], time: [],
dutyHolder: '', dutyHolder: '',
category: '', category: '',
status: '' status: '',
problemLevel: ''
}, },
pageData: { pageData: {
pageNum: 1, // pageNum: 1, //
@ -249,6 +286,9 @@ export default {
this.getDicts("patrol_maintenance_type").then((response) => { this.getDicts("patrol_maintenance_type").then((response) => {
this.maintenanceType = response.data; this.maintenanceType = response.data;
}); });
this.getDicts("patrol_maintenance_level").then((response) => {
this.maintenanceLevel = response.data;
});
}, },
mounted() { mounted() {
this.getTableData() this.getTableData()
@ -262,9 +302,10 @@ export default {
this.pageData.pageSize = pageSize; this.pageData.pageSize = pageSize;
this.getTableData(); this.getTableData();
}, },
handleCheckDetails() { handleCheckDetails(row, mode) {
this.$router.push({ this.$router.push({
path: "defectDetails", path: "defectDetails",
query: { id: row.id, mode: mode, module: 'maintenance' },
}); });
}, },
getDictLabelName(type, dictListName) { getDictLabelName(type, dictListName) {
@ -276,7 +317,6 @@ export default {
}, },
// //
handleChangeQuery() { handleChangeQuery() {
this.reqCountCalc();
this.pageData.pageNum = 1; this.pageData.pageNum = 1;
this.getTableData(); this.getTableData();
}, },
@ -288,7 +328,7 @@ export default {
this.paramsData.dutyHolder = ""; this.paramsData.dutyHolder = "";
this.paramsData.category = ""; this.paramsData.category = "";
this.paramsData.status = ""; this.paramsData.status = "";
this.reqCountCalc(); this.paramsData.problemLevel = "";
this.pageData.pageNum = 1; this.pageData.pageNum = 1;
this.getTableData(); this.getTableData();
}, },
@ -299,6 +339,7 @@ export default {
dutyHolder: this.paramsData.dutyHolder, dutyHolder: this.paramsData.dutyHolder,
category: this.paramsData.category, category: this.paramsData.category,
status: this.paramsData.status, status: this.paramsData.status,
problemLevel: this.paramsData.problemLevel,
startTime: this.paramsData.time && this.paramsData.time.length > 1 ? this.paramsData.time[0] : '', startTime: this.paramsData.time && this.paramsData.time.length > 1 ? this.paramsData.time[0] : '',
endTime: this.paramsData.time && this.paramsData.time.length > 1 ? this.paramsData.time[1] : '', endTime: this.paramsData.time && this.paramsData.time.length > 1 ? this.paramsData.time[1] : '',
} }

2
src/views/dike/runManage/patrolMaintenance/patrolItemsManage/index.vue

@ -106,7 +106,7 @@ export default {
this.$router.push({ this.$router.push({
path: "inspectionRecordDetails", path: "inspectionRecordDetails",
query: { query: {
id: row.id, checkingId: row.id,
}, },
}); });
}, },

4
vue.config.js

@ -81,8 +81,8 @@ module.exports = {
}, },
[process.env.VUE_APP_BASE_API]: { [process.env.VUE_APP_BASE_API]: {
// target: "http://shuili-admin.product.dev.com:30115", // target: "http://shuili-admin.product.dev.com:30115",
// target: "http://shuili.product.dev.com:30115/", target: "http://shuili.product.dev.com:30115/",
target: 'http://172.16.34.80:18082/', // target: 'http://172.16.34.80:18082/',
// target: 'http://172.16.32.62:18888/', // target: 'http://172.16.32.62:18888/',
// target: "http://172.16.34.27:18082", // target: "http://172.16.34.27:18082",
changeOrigin: true, changeOrigin: true,

Loading…
Cancel
Save