Browse Source

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

sy-water-data-board-ui
caoqi 9 months ago
parent
commit
7552abe8f5
  1. 8
      src/views/dike/runManage/enginerring/inspectionItems/index.vue
  2. 6
      src/views/dike/runManage/enginerring/inspectionPlan/components/PlanDetail.vue
  3. 8
      src/views/dike/runManage/enginerring/inspectionPlan/index.vue
  4. 8
      src/views/dike/runManage/enginerring/inspectionRecords/index.vue
  5. 2
      src/views/dike/runManage/enginerring/inspectionRouteManage/index.vue
  6. 63
      src/views/dike/runManage/maintenance/maintenancePlan/CreateMaintenancePlan.vue
  7. 566
      src/views/dike/runManage/maintenance/maintenancePlan/components/PlanDetail.vue
  8. 612
      src/views/dike/runManage/maintenance/maintenancePlan/index copy.vue
  9. 878
      src/views/dike/runManage/maintenance/maintenancePlan/index.vue
  10. 658
      src/views/dike/runManage/maintenance/maintenancePlanAccept/index.vue
  11. 668
      src/views/dike/runManage/maintenance/maintenancePlanAudit/index.vue
  12. 63
      src/views/dike/runManage/maintenance/maintenanceRecords/CreateMaintenanceRecord.vue
  13. 282
      src/views/dike/runManage/maintenance/maintenanceRecords/components/RecordDetail.vue
  14. 671
      src/views/dike/runManage/maintenance/maintenanceRecords/index.vue

8
src/views/dike/runManage/enginerring/inspectionItems/index.vue

@ -202,7 +202,13 @@ export default {
label="更新时间"
>
</el-table-column>
<el-table-column prop="address" align="center" label="操作">
<el-table-column
prop="address"
align="center"
label="操作"
fixed="right"
width="100"
>
<template slot-scope="scope">
<el-button
style="margin-right: 16px"

6
src/views/dike/runManage/enginerring/inspectionPlan/components/PlanDetail.vue

@ -1,5 +1,5 @@
<template>
<div class="route-detail-page">
<div class="detail-page">
<el-form
ref="formRef"
label-position="top"
@ -640,7 +640,7 @@ export default {
};
</script>
<style scoped lang="scss">
.route-detail-page {
.detail-page {
width: 100%;
max-width: 1300px;
padding: 16px;
@ -678,7 +678,7 @@ export default {
}
</style>
<style lang="scss">
.route-detail-page {
.detail-page {
.custom-select-cycleType {
.el-input__inner {
border-radius: 4px 0 0 4px;

8
src/views/dike/runManage/enginerring/inspectionPlan/index.vue

@ -496,7 +496,13 @@ export default {
sortable
label="创建时间"
/>
<el-table-column prop="operate" align="center" label="操作">
<el-table-column
prop="operate"
align="center"
label="操作"
fixed="right"
width="160"
>
<template slot-scope="scope">
<el-button
style="margin-right: 16px"

8
src/views/dike/runManage/enginerring/inspectionRecords/index.vue

@ -563,7 +563,13 @@ export default {
</template>
</el-table-column>
<el-table-column prop="opera" align="center" label="操作">
<el-table-column
prop="opera"
align="center"
label="操作"
fixed="right"
width="168"
>
<template slot-scope="scope">
<el-button
type="text"

2
src/views/dike/runManage/enginerring/inspectionRouteManage/index.vue

@ -286,6 +286,7 @@
align="center"
label="操作"
fixed="right"
width="100"
>
<template slot-scope="scope">
<el-button
@ -340,6 +341,7 @@
align="center"
label="操作"
fixed="right"
width="160"
>
<template slot-scope="scope">
<el-button

63
src/views/dike/runManage/maintenance/maintenancePlan/CreateMaintenancePlan.vue

@ -0,0 +1,63 @@
<template>
<div class="slider-right create-route-page">
<TopBackTitle></TopBackTitle>
<div class="slider-right-body">
<PlanDetail ref="formRef" :id="id" :canEdit="true"></PlanDetail>
<div class="bottom-btns">
<el-button type="primary" size="small" @click="handleSave(false)"
>保存</el-button
>
<el-button
type="primary"
size="small"
v-if="!id"
@click="handleSave(true)"
>保存并继续新增</el-button
>
<el-button size="small" @click="handleCancel">取消</el-button>
</div>
</div>
</div>
</template>
<script>
import TopBackTitle from "@/components/TopBackTitle/index.vue";
import PlanDetail from "./components/PlanDetail.vue";
export default {
components: {
TopBackTitle,
PlanDetail,
},
data() {
return {
id: this.$route.query.id,
};
},
created() {},
methods: {
handleSave(reset) {
this.$refs.formRef.submit(reset).then((res) => {
if (!reset) {
this.$router.go(-1);
}
});
},
handleCancel() {
//
this.$confirm("是否取消编辑?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
this.$router.go(-1);
})
.catch(() => {});
},
},
};
</script>
<style scoped lang="scss">
.create-route-page {
}
</style>

566
src/views/dike/runManage/maintenance/maintenancePlan/components/PlanDetail.vue

@ -0,0 +1,566 @@
<template>
<div class="detail-page">
<el-form
ref="formRef"
label-position="top"
:model="formData"
:rules="rules"
label-width="120px"
>
<div class="form-row-title">堤防选择</div>
<div class="flex items-start">
<el-form-item label="选择堤防" prop="dikeName">
<el-select
:disabled="!canEdit"
class="w-240"
size="small"
remote
filterable
reserve-keyword
:maxlength="50"
:remote-method="handleGetRemoteDikeMethod"
@focus="handleGetRemoteDikeMethod('')"
@change="handleChangeDike"
v-model="formData.dikeName"
placeholder="请选择堤防"
>
<el-option
v-for="item in dikeList"
:key="item.id"
:label="item.dikeName"
:value="item.dikeName"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="堤防类型" prop="dikeType" class="ml-24">
<el-select
v-model="formData.dikeType"
:disabled="true"
class="w-240"
size="small"
placeholder="请选择"
>
<el-option
v-for="item in projectTypeOptions"
:key="item.dictValue"
:label="item.dictLabel"
:value="item.dictValue"
></el-option>
</el-select>
</el-form-item>
</div>
<div class="form-row-title">维养计划</div>
<div class="flex items-start">
<el-form-item label="计划名称" prop="name">
<el-input
:disabled="!canEdit"
class="w-240"
size="small"
v-model="formData.name"
placeholder="请输入名称"
maxlength="50"
></el-input>
</el-form-item>
<el-form-item label="计划类型" prop="type" class="ml-24">
<el-select
:disabled="!canEdit"
size="small"
class="w-240"
v-model="formData.type"
placeholder="请选择"
>
<el-option
v-for="(item, index) in yhPlanTypeOptions"
:label="item.dictLabel"
:value="item.dictValue"
:key="index"
>
</el-option>
</el-select>
</el-form-item>
</div>
<div class="flex items-start">
<el-form-item label="计划开始/结束时间" prop="planTimeArr">
<el-date-picker
class=""
:disabled="!canEdit"
type="daterange"
size="small"
v-model="formData.planTimeArr"
placeholder="选择时间"
>
</el-date-picker>
</el-form-item>
</div>
<el-form
v-for="(subItem, subIndex) in formData.supplementList"
ref="supplementFormRef"
label-position="top"
:model="subItem"
:rules="supplementRules"
label-width="120px"
:key="subIndex"
>
<div class="flex items-center">
<el-form-item label="资金来源" prop="supplement">
<el-select
:disabled="!canEdit"
size="small"
class="w-240"
v-model="subItem.supplement"
placeholder="请选择"
>
<el-option
v-for="(item, index) in supplementOptions"
:label="item.dictLabel"
:value="item.dictValue"
:key="index"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="资金金额" prop="money" class="ml-24">
<el-input
:disabled="!canEdit"
class="w-240"
size="small"
type="number"
:min="0"
:max="9999999999"
v-model="subItem.money"
placeholder="请输入"
></el-input>
<span class="ml-8">万元</span>
</el-form-item>
<i
class="el-icon-circle-plus cursor-pointer mt-24 ml-12"
@click="handleAddSupplement(subIndex)"
style="font-size: 20px; color: #36b29e"
></i>
<i
class="el-icon-remove cursor-pointer mt-24 ml-12"
@click="handleDelSupplement(subIndex)"
v-if="formData.supplementList.length > 1"
style="font-size: 20px; color: #f26161"
></i>
</div>
</el-form>
<div class="flex items-start">
<el-form-item label="维养计划方案" prop="files">
<el-upload
:disabled="!canEdit"
class=""
action="#"
:http-request="handleUpload"
:before-upload="beforeUpload"
:before-remove="beforeRemove"
accept=".docx,.doc,.pdf"
:file-list="filesList"
>
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">
文件支持docxdocpdf文件大小100M以内文件数量不能超过5份
</div>
</el-upload>
</el-form-item>
</div>
<div class="flex items-center">
<el-form-item label="维养工程单位" prop="unitName">
<el-input
:disabled="!canEdit"
class="w-240"
size="small"
v-model="formData.unitName"
placeholder="请输入"
></el-input>
</el-form-item>
</div>
<div class="flex items-center">
<el-form-item label="维养负责人" prop="operator" class="">
<el-input
:disabled="!canEdit"
class="w-240"
size="small"
v-model="formData.frequency"
placeholder="请输入"
></el-input>
</el-form-item>
<el-form-item label="维养提醒" prop="reminderTime" class="ml-24">
<el-date-picker
class="custom-time-piker"
:disabled="!canEdit"
size="small"
type="datetime"
v-model="formData.reminderTime"
placeholder="选择时间"
>
</el-date-picker>
</el-form-item>
</div>
</el-form>
</div>
</template>
<script>
import { listUser } from "@/api/management";
import {
getProjectCheckingLineRoute,
getRunProjectList,
postProjectCheckingPlan,
putProjectCheckingPlan,
getProjectCheckingPlanDetails,
} from "@/api/dike";
import { uploadFileData } from "@/api/system/upload";
export default {
props: {
id: String,
canEdit: Boolean,
},
data() {
return {
formData: {
dikeName: "",
dikeCode: "",
dikeType: "",
type: "",
operator: "",
planTimeArr: "",
reminderTime: "",
supplementList: [
{
supplement: "",
money: 0,
},
],
files: [],
otherConfig: {
options: {},
},
},
rules: {
dikeName: [
{ required: true, message: "请选择堤防", trigger: "change" },
],
name: [{ required: true, message: "请输入计划名称", trigger: "blur" }],
type: [
{ required: true, message: "请选择计划类型", trigger: "change" },
],
supplement: [
{ required: true, message: "请选择资金类型", trigger: "change" },
],
type: [{ required: true, message: "请选择类型", trigger: "change" }],
reminderTime: [
{ required: true, message: "请选择", trigger: "change" },
],
frequency: [{ required: true, message: "请输入", trigger: "blur" }],
},
supplementRules: {
supplement: [
{ required: true, message: "请选择资金类型", trigger: "change" },
],
money: [{ required: true, message: "请输入金额", trigger: "blur" }],
},
filesList: [],
dikeList: [],
projectTypeOptions: [],
yhPlanTypeOptions: [], //
personnelList: [], //
supplementOptions: [], //
lineList: [], // 线
};
},
watch: {
id: {
handler(val) {
if (val) {
this.getDetail();
}
},
immediate: true,
},
},
created() {
this.searchUser();
this.getDicts("embankment_type").then((response) => {
this.projectTypeOptions = response.data;
});
this.getDicts("xs_yh_supplement").then((response) => {
this.supplementOptions = response.data;
});
this.getDicts("xs_yh_type").then((response) => {
this.yhPlanTypeOptions = response.data;
});
},
methods: {
getDetail() {
getProjectCheckingPlanDetails(this.id).then((res) => {
this.formData = res.data;
this.filesList = res.data.files.map((item) => {
return {
name: item,
url: item,
};
});
this.handleRemoteLineData(res.data.name);
});
},
handleChangeDike() {
let res = this.dikeList.find(
(v) => v.dikeName === this.formData.dikeName
);
this.formData.dikeCode = res.dikeCode;
this.formData.dikeType = res.dikeType;
this.formData.dikeName = res.dikeName;
this.formData.dutyHolder = res.dutyHolders.find(
(v) => v.dutyHolderType === "0"
)?.name;
},
handleGetRemoteDikeMethod(query) {
getRunProjectList({
pageSize: 10,
pageNum: 1,
data: {
dikeName: query,
},
}).then((res) => {
if (res) {
this.dikeList = res.records;
}
});
},
handleChangeLine(item, e) {
let res = this.lineList.find((v) => v.name === e);
item.lineId = res.id;
item.lineName = res.name;
},
//
beforeUpload(e) {
console.log("beforeUpload >>>>> ", e);
const { name, size } = e;
if (size > 100 * 1024 * 1024) {
this.$message.warning("文件大小不能超过100M");
return false;
}
if (!/\.(docx|doc|pdf)$/.test(name)) {
this.$message.warning("文件格式不正确");
return false;
}
if (this.formData.files?.length >= 5) {
// this.$message.warning("5");
this.$message({
message: "最多上传5份",
type: "warning",
});
return false;
}
return true;
},
handleUpload(e) {
const { file } = e;
let fData = new FormData();
fData.append("file", file);
uploadFileData(fData)
.then((res) => {
this.formData.files?.push(res.url);
})
.catch((err) => {
console.log("err >>>>> ", err);
});
},
beforeRemove(file, fileList) {
if (this.file) {
return this.$confirm(`确定移除 ${file.name}`);
}
},
//
handleAddSupplement(index) {
if (
this.formData.supplementList.length >= this.supplementOptions.length
) {
this.$message.warning("不能多于资金来源可选项最大数量");
return;
}
this.formData.supplementList.splice(index + 1, 0, {
supplement: "",
money: 0,
});
},
//
handleDelSupplement(index) {
this.formData.supplementList.splice(index, 1);
},
//
searchUser(e) {
listUser({
data: {
timeView: {
timeField: "create_time",
},
},
cv: {
name: "nickName",
type: "like",
value: e,
},
pageSize: 100,
pageNum: 1,
}).then((res) => {
this.personnelList = res.records.map((item) => {
return {
name: item.nickName,
uid: item.id,
};
});
});
},
handleRemoteLineData(e) {
getProjectCheckingLineRoute({
data: {
lineName: e,
},
pageNum: 1,
pageSize: 10,
}).then((res) => {
this.lineList = res.records;
});
},
submit(reset) {
console.log("提交表单 >>>> ", this.formData);
return new Promise((r, j) => {
Promise.all([
this.$refs.formRef.validate(),
...this.$refs.supplementFormRef.map((item) => item.validate()),
])
.then((res) => {
//
this.$confirm("确认提交吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
(this.id ? putProjectCheckingPlan : postProjectCheckingPlan)({
id: this.id || null,
...this.formData,
})
.then((res) => {
this.$message.success("提交成功");
if (reset) {
this.reset();
}
r();
})
.catch(() => {
j();
});
})
.catch(() => {});
})
.catch(() => {
j();
});
});
},
reset() {
this.formData = {
dikeName: "",
dikeCode: "",
dikeType: "",
operator: "",
reminderTime: "",
files: [],
otherConfig: {
options: {},
},
};
this.$refs.formRef.resetFields();
if (this.$refs.subFormRef) {
this.$refs.subFormRef.forEach((item) => {
item.resetFields();
});
}
},
},
};
</script>
<style scoped lang="scss">
.detail-page {
width: 100%;
max-width: 1300px;
padding: 16px;
padding-bottom: 78px;
border-radius: 6px;
background-color: #fff;
.form-row-title {
font-size: 16px;
font-weight: bold;
margin-bottom: 10px;
border-left: 4px solid #36b29e;
padding-left: 8px;
}
.w-100 {
width: 100px !important;
}
.w-240 {
width: 240px !important;
}
.plan-list-item {
position: relative;
border: 1px solid #ebeef5;
border-radius: 4px;
padding: 16px;
margin-top: 16px;
}
.del-btn {
cursor: pointer;
z-index: 1;
width: 18px;
font-size: 18px;
}
}
</style>
<style lang="scss">
.detail-page {
.custom-select-cycleType {
.el-input__inner {
border-radius: 4px 0 0 4px;
}
}
.custom-select-date {
.el-input__inner {
border-radius: 0;
}
}
.custom-time-piker {
.el-input__inner {
border-radius: 0 4px 4px 0;
}
}
}
.custom-select-date-popper {
width: 202px !important;
padding-left: 10px;
.el-select-dropdown__list {
display: flex;
flex-wrap: wrap;
.el-select-dropdown__item {
display: flex;
justify-content: center;
align-items: center;
padding: 0;
width: 42px;
height: 32px;
&.selected {
&::after {
display: none;
}
}
}
}
}
</style>

612
src/views/dike/runManage/maintenance/maintenancePlan/index copy.vue

@ -0,0 +1,612 @@
<!-- 维修计划管理-堤防 -->
<script>
import {
putDFMaintenancePlan,
deleteDFMaintenancePlan,
postDFMaintenancePlan,
postDFMaintenancePlanList,
getDFMaintenancePlan,
} from "@/api/management";
import { listJbxx } from "@/api/yg/dike/jbxx";
import { getDikeYhPlanList } from "@/api/dike";
import DikeBaseInfoDialog from "@/views/dike/runManage/components/DikeBaseInfoDialog/index.vue";
export default {
name: "InspectionItems",
components: { DikeBaseInfoDialog },
data() {
return {
//
baseInfoDialog: {
show: false,
id: "",
code: "",
},
searchInput: "",
dialogVisible: false,
prohibitEditing: false,
dikeLevel: [
{
id: 1,
label: "全部",
value: 1,
},
{
id: 2,
label: "一级",
value: 2,
},
{
id: 3,
label: "二级",
value: 3,
},
{
id: 4,
label: "三级",
value: 4,
},
{
id: 5,
label: "四级",
value: 5,
},
{
id: 6,
label: "五级及以下",
value: 6,
},
], //
embankmentList: [], //
searchLevel: 1, //
tableData: [], //
pageData: {
pageNum: 1, //
pageSize: 10, //
pageSizes: [10, 20, 50, 100],
total: 0, //
},
ruleForm: {
dikeCode: "",
name: "",
planTime: "",
nationalSupplement: 0,
selfSupplement: 0,
budget: 0,
location: "",
content: "",
},
rules: {
dikeCode: [
{ required: true, message: "请选择堤防名称", trigger: "blur" },
],
name: [
{ required: true, message: "请输入维养计划名称", trigger: "blur" },
{ max: 100, message: "名称最长为100个字符", trigger: "blur" },
],
planTime: [
{ required: true, message: "请选计划时间", trigger: "change" },
],
nationalSupplement: [
{ required: true, message: "请输入资金", trigger: "change" },
],
selfSupplement: [
{ required: true, message: "请输入资金", trigger: "change" },
],
location: [
{ required: true, message: "请输入具体地点", trigger: "change" },
],
content: [
{ required: true, message: "请输入维修养护内容", trigger: "change" },
],
},
tableHeight: null,
};
},
watch: {
dialogVisible(newVal, oldVal) {
if (oldVal) {
this.prohibitEditing = false;
}
},
},
methods: {
handleCurrentPageChange(page) {
this.pageData.pageNum = page;
this.getTableData();
},
handlePageSizeChange(pageSize) {
this.pageData.pageSize = pageSize;
this.getTableData();
},
//
deleteTableItem(row) {
deleteDFMaintenancePlan(row.id).then((res) => {
console.log("🚀res🚀", res);
this.getTableData();
this.$message.success("删除成功");
});
},
addPlan() {
this.ruleForm.dikeCode = this.$route.query.dikeCode;
this.dialogVisible = true;
},
//
viewOrEditPlanDetails(row, edit = false) {
if (!edit) {
this.prohibitEditing = true;
}
getDFMaintenancePlan(row.id).then((res) => {
console.log("🚀res🚀", res);
this.ruleForm = res.data;
this.ruleForm.budget =
res.data.nationalSupplement + res.data.selfSupplement;
this.dialogVisible = true;
});
},
//
goMaintenanceRecords(row) {
this.$router.push({
path: "maintenanceRecords",
query: {
name: row.name,
dikeCode: row.dikeCode,
dikeName: row.dikeName,
},
});
},
//
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
if (this.ruleForm.id) {
putDFMaintenancePlan(this.ruleForm).then(() => {
this.getTableData();
this.dialogVisible = false;
this.$message({
message: "保存成功",
type: "success",
});
});
} else {
postDFMaintenancePlan(this.ruleForm).then(() => {
this.getTableData();
this.dialogVisible = false;
this.$message({
message: "保存成功",
type: "success",
});
});
}
} else {
console.log("校验不通过");
return false;
}
});
},
//
resetForm(formName) {
this.$refs[formName].resetFields();
this.dialogVisible = false;
},
// dialog
closeDialog(ruleForm = "ruleForm") {
this.$refs[ruleForm].resetFields();
this.ruleForm = {
dikeCode: "",
name: "",
planTime: "",
nationalSupplement: 0,
selfSupplement: 0,
location: "",
budget: 0,
content: "",
};
},
//
calculateBudget() {
this.ruleForm.budget =
Number(this.ruleForm.selfSupplement) +
Number(this.ruleForm.nationalSupplement);
},
//
getTableData(value = "") {
getDikeYhPlanList({
data: {
dikeCode: this.$route.query.dikeCode,
name: this.searchInput,
},
cv: {
name: "name",
type: "like",
value,
},
pageSize: this.pageData.pageSize,
pageNum: this.pageData.pageNum,
params: {
orderBy: "update_time",
sort: "desc",
},
}).then((res) => {
if (res) {
this.tableData = res.records;
this.pageData.total = res.total;
}
});
},
//
resetSearch() {
this.searchInput = "";
this.searchLevel = 1;
this.getTableData();
},
getEmbData(dikeName = "") {
listJbxx({
pageNum: 1,
pageSize: 20,
ids: null,
data: {
embankmentName: dikeName,
endStationNumber: null,
embankmentType: null,
},
//
params: {
//
orderBy: "create_time",
// descasc
sort: "desc",
},
}).then((res) => {
this.embankmentList = res?.records || [];
});
},
handleChangeDike(value) {
let res = this.embankmentList.find((v) => v.dikeCode === value);
console.log("res >>>>> ", res);
this.baseInfoDialog.id = res?.id || "";
this.baseInfoDialog.code = this.ruleForm.dikeCode;
},
//
handleOpenDetails() {
console.log("this.baseInfoDialog >>>>> ", this.baseInfoDialog);
if (this.baseInfoDialog.id) {
this.baseInfoDialog.show = true;
} else {
this.$message.warning("缺少id");
}
},
//
handleOpenMap(dikeCode) {
if (dikeCode) {
}
},
},
mounted() {
//
this.getTableData();
this.getEmbData(this.$route.query.dikeName);
this.tableHeight = document.documentElement.clientHeight - 256;
},
};
</script>
<template>
<div class="slider-right">
<div class="top-title">
{{ $router.currentRoute.meta.title }} - {{ $route.query.dikeName }}
</div>
<div class="table-box" ref="containRef">
<div class="top-search">
<span>计划名称</span>
<el-input
class="search-input"
v-model="searchInput"
placeholder="请输入维养计划名称"
/>
<el-button class="search-btn" type="success" @click="getTableData()"
>搜索</el-button
>
<el-button @click="resetSearch()">重置</el-button>
<el-button
class="search-btn"
style="margin-right: 16px; margin-bottom: 8px; float: right"
type="success"
@click="addPlan"
v-hasPermi="['df:run:main:plan:add']"
>添加</el-button
>
</div>
<el-table class="table" :data="tableData" border>
<el-table-column type="index" align="center" label="序号" width="80" />
<el-table-column prop="name" align="center" label="维养计划名称" />
<el-table-column prop="dikeName" align="center" label="堤防名称" />
<el-table-column prop="location" align="center" label="具体地点" />
<el-table-column prop="content" align="center" label="维修养护内容" />
<el-table-column prop="nationalSupplement" align="center" label="国补">
<template #default="{ row }"
>{{ row.nationalSupplement }}万元</template
>
</el-table-column>
<el-table-column prop="selfSupplement" align="center" label="自筹">
<template #default="{ row }">{{ row.selfSupplement }}万元</template>
</el-table-column>
<el-table-column
prop="createTime"
align="center"
sortable
label="创建时间"
>
</el-table-column>
<el-table-column
prop="updateTime"
align="center"
sortable
label="更新时间"
>
</el-table-column>
<el-table-column prop="address" align="center" label="操作">
<template slot-scope="scope">
<el-button
@click="viewOrEditPlanDetails(scope.row)"
type="text"
size="small"
>查看</el-button
>
<el-button
@click="viewOrEditPlanDetails(scope.row, true)"
type="text"
size="small"
v-hasPermi="['df:run:main:plan:edit']"
>编辑</el-button
>
<el-button
style="margin-right: 9px"
type="text"
size="small"
v-hasPermi="['df:run:main:record:view']"
@click="goMaintenanceRecords(scope.row)"
>记录</el-button
>
<el-popconfirm
confirm-button-text="确定"
cancel-button-text="取消"
icon="el-icon-info"
icon-color="red"
title="确定删除吗?"
@confirm="deleteTableItem(scope.row)"
>
<el-button
style="color: red"
type="text"
size="small"
slot="reference"
v-hasPermi="['df:run:main:plan:delete']"
>删除</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="新增/编辑维养计划"
@close="closeDialog"
:visible.sync="dialogVisible"
width="720px"
>
<div style="display: flex; margin-bottom: 16px">
<div
style="
width: 5px;
height: 16px;
background-color: #31a08e;
margin-right: 8px;
"
></div>
<span style="font-weight: 600">基础信息</span>
</div>
<el-form
:model="ruleForm"
:rules="rules"
ref="ruleForm"
label-width="100px"
>
<el-form-item label-width="120px" label="堤防名称" prop="dikeCode">
<el-select
v-model="ruleForm.dikeCode"
:disabled="true"
placeholder="请选择"
@change="handleChangeDike"
>
<el-option
v-for="item in embankmentList"
:label="item.dikeName"
:value="item.dikeCode"
:key="item.id"
></el-option>
</el-select>
<el-button
:disabled="!ruleForm.dikeCode"
class="ml-6"
type="success"
size="small"
@click="handleOpenDetails"
>详情</el-button
>
<el-button :disabled="true" class="ml-6" type="info" size="small"
>打开地图</el-button
>
</el-form-item>
<div style="display: flex">
<el-form-item label-width="120px" label="维养计划名称" prop="name">
<el-input
style="width: 202px"
v-model="ruleForm.name"
placeholder="请输入"
:disabled="prohibitEditing"
/>
</el-form-item>
<el-form-item label-width="120px" label="计划时间" prop="planTime">
<el-date-picker
v-model="ruleForm.planTime"
type="month"
placeholder="选择月"
:disabled="prohibitEditing"
value-format="yyyy-MM-dd"
>
</el-date-picker>
</el-form-item>
</div>
<div style="display: flex">
<el-form-item
label-width="120px"
label="国补资金"
prop="nationalSupplement"
>
<el-input-number
style="width: 90px"
v-model="ruleForm.nationalSupplement"
:min="0"
:precision="4"
:controls="false"
@input="calculateBudget()"
placeholder="请输入"
:disabled="prohibitEditing"
/>
万元
</el-form-item>
<el-form-item
label-width="98px"
label="自筹资金"
prop="selfSupplement"
>
<el-input-number
style="width: 90px"
v-model="ruleForm.selfSupplement"
type="number"
:min="0"
:precision="4"
:controls="false"
@input="calculateBudget()"
placeholder="请输入"
:disabled="prohibitEditing"
/>
万元
</el-form-item>
<el-form-item label-width="98px" label="项目预算">
<el-input style="width: 90px" v-model="ruleForm.budget" disabled />
</el-form-item>
</div>
<el-form-item label-width="120px" label="具体地点" prop="location">
<el-input
style="width: 542px"
:autosize="{ minRows: 5 }"
type="textarea"
maxlength="500"
show-word-limit
v-model="ruleForm.location"
placeholder="请输入"
:disabled="prohibitEditing"
/>
</el-form-item>
<el-form-item label-width="120px" label="维修养护内容" prop="content">
<el-input
style="width: 542px"
:autosize="{ minRows: 5 }"
type="textarea"
maxlength="500"
show-word-limit
v-model="ruleForm.content"
placeholder="请输入"
:disabled="prohibitEditing"
/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button size="mini" @click="resetForm('ruleForm')"> </el-button>
<el-button
v-if="!prohibitEditing"
size="mini"
type="primary"
@click="submitForm('ruleForm')"
>保存</el-button
>
</div>
</el-dialog>
<DikeBaseInfoDialog
v-model="baseInfoDialog.show"
:id="baseInfoDialog.id"
:code="baseInfoDialog.code"
></DikeBaseInfoDialog>
</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 {
// height: calc(100% - 16px);
margin-top: 24px;
padding: 16px;
padding-bottom: 60px;
background-color: white;
.top-search {
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;
// }
}
.ml-6 {
margin-left: 6px;
}
/deep/.el-input__count {
height: 15px;
line-height: 15px;
margin-right: 10px;
margin-bottom: -4px;
}
</style>

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

File diff suppressed because it is too large

658
src/views/dike/runManage/maintenance/maintenancePlanAccept/index.vue

@ -0,0 +1,658 @@
<!-- 巡查计划管理-堤防 -->
<script>
import {
postDFInspectionPlan,
putDFInspectionPlan,
postDFInspectionProjectList,
getDFInspectionPlan,
deleteDFInspectionPlan,
listUser,
} from "@/api/management";
import { deleteProjectCheckingPlan, getDikeYhPlanList } from "@/api/dike";
import TopBackTitle from "@/components/TopBackTitle/index.vue";
import { getAreasData } from "@/api/areas/index";
import { uploadFileData } from "@/api/system/upload";
import { reqCountMixins } from "@/mixins/reqCount";
export default {
name: "InspectionItems",
components: {
TopBackTitle,
},
mixins: [reqCountMixins],
data() {
return {
paramsData: {
status: "",
adcd: "",
dikeName: "",
dikeType: "",
name: "",
planDateArr: [],
},
currentRow: {},
dialogVisible: false,
patrolType: [], //
personnelList: [], //
areasOptions: [],
embankmentTypeOptions: [],
examType: [], //
tableData: [], //
patrolTableData: [], //
pageData: {
pageNum: 1, //
pageSize: 10, //
pageSizes: [10, 20, 50, 100],
total: 0, //
},
tableCheckData: [], //
ruleForm: {
dikeCode: this.$route.query.dikeCode || "",
name: "",
type: "",
xcId: "",
frequency: "",
cycleType: "0",
isReminder: true,
reminderTime: "",
operators: [],
files: [], //
otherConfig: {
week: "",
time: "",
selectUser: [],
},
},
rules: {
name: [
{ required: true, message: "请输入计划名称", trigger: "change" },
{ max: 50, message: "名称最长为50个字符", trigger: "change" },
],
type: [
{ required: true, message: "请选择巡查类型", trigger: "change" },
],
xcId: [
{ required: true, message: "请选择巡查项目名称", trigger: "change" },
],
cycleType: [
{ required: true, message: "请选择巡查周期", trigger: "change" },
],
frequency: [
{ required: true, message: "请输入巡查次数", trigger: "blur" },
],
isReminder: [
{ required: true, message: "请选择消息提醒", trigger: "change" },
],
"otherConfig.time": [
{ required: true, message: "请选择检查时间", trigger: "change" },
],
reminderTime: [
{ required: true, message: "请选择提醒时间", trigger: "change" },
],
"otherConfig.selectUser": [
{ required: true, message: "请选择责任人", trigger: "change" },
],
},
};
},
computed: {
disabledUpload() {
return this.ruleForm?.files?.length >= 9;
},
},
methods: {
handleCurrentPageChange(page) {
this.pageData.pageNum = page;
this.getTableData();
},
handlePageSizeChange(pageSize) {
this.pageData.pageSize = pageSize;
this.getTableData();
},
handleAdd() {
this.$router.push({
path: "createMaintenancePlan",
});
},
//
getTreeData() {
getAreasData().then((items) => {
// console.log("getAreasData", 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;
});
},
//
handleCheck(row) {
this.currentRow = row;
this.dialogVisible = true;
},
//
handleEdit(row) {
this.$router.push({
path: "createInspectionPlan",
query: {
id: row.id,
},
});
},
//
deleteTableItem(row) {
deleteDFInspectionPlan(row.id).then((res) => {
this.getTableData();
this.$message.success("删除成功");
});
},
//
submitForm(formName) {
console.log("保存 >>> ", this.ruleForm);
this.$refs[formName].validate((valid) => {
if (valid) {
let user = [];
this.ruleForm.otherConfig.selectUser?.forEach((element) => {
let a = {
name: element.nickName,
uid: element.id,
};
user.push(a);
});
this.ruleForm.operators = user;
if (this.ruleForm.id) {
putDFInspectionPlan(this.ruleForm).then((res) => {
this.getTableData();
this.dialogVisible = false;
this.$message.success("更新成功");
});
} else {
postDFInspectionPlan(this.ruleForm).then((res) => {
this.getTableData();
this.dialogVisible = false;
this.$message.success("添加成功");
});
}
} else {
console.log("校验不通过");
return false;
}
});
},
//
changePatrolType(ruleForm, reset) {
if (reset) {
this.$set(ruleForm, "xcId", "");
}
setTimeout(() => {
this.$refs.ruleForm.validateField("frequency");
this.$refs.ruleForm.validateField("otherConfig.time");
}, 30);
postDFInspectionProjectList({
data: {
timeView: {
timeField: "create_time",
},
type: ruleForm.type,
},
cv: {
name: "name",
type: "like",
},
pageSize: 999,
pageNum: 1,
}).then((res) => {
this.patrolTableData = res.records;
});
},
//
getTableData() {
getDikeYhPlanList({
data: {
timeView: {
timeField: "create_time",
},
adcd: this.paramsData.adcd,
name: this.paramsData.name,
startTime: this.paramsData.planDateArr[0]
? this.paramsData.planDateArr[0] + " 00:00:00"
: "",
endTime: this.paramsData.planDateArr[1]
? this.paramsData.planDateArr[1] + " 23:59:59"
: "",
dikeName: this.paramsData.dikeName,
dikeType: this.paramsData.dikeType,
},
pageSize: this.pageData.pageSize,
pageNum: this.pageData.pageNum,
}).then((res) => {
if (res) {
this.tableData = res.records;
this.pageData.total = res.total;
}
});
},
//
handleDelAll() {
if (this.tableCheckData.length === 0) {
this.$message.warning("请选择要删除的数据");
return;
}
this.$confirm("是否删除选中的记录?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
console.log("删除");
const ids = this.tableCheckData.map((item) => item.id);
deleteProjectCheckingPlan(ids.join(",")).then((res) => {
if (res) {
this.$message.success("删除成功");
this.getTableData();
}
});
})
.catch(() => {
console.log("取消删除");
});
},
//
beforeUpload(e) {
console.log("beforeUpload >>>>> ", e);
if (this.ruleForm.files?.length >= 9) {
return false;
}
return true;
},
handleUpload(e) {
const { file } = e;
let formData = new FormData();
formData.append("file", file);
uploadFileData(formData)
.then((res) => {
console.log("上传结果 >>>>> ", res);
this.ruleForm.files.push(res.url);
})
.catch((err) => {
console.log("err >>>>> ", err);
});
},
handleDelFile(_url, index) {
this.ruleForm.files.splice(index, 1);
},
handleSelectionChange(e) {
this.tableCheckData = e || [];
},
handleChangeQuery() {
this.reqCountCalc();
this.pageData.pageNum = 1;
this.tableData = [];
this.getTableData();
},
handleResetQuery() {
this.paramsData.adcd = "";
this.paramsData.name = "";
this.paramsData.planDateArr = [];
this.paramsData.dikeName = "";
this.paramsData.dikeType = "";
this.reqCountCalc();
this.pageData.pageNum = 1;
this.getTableData();
},
getDikeTypeName(type) {
let name = "";
this.embankmentTypeOptions?.forEach((element) => {
if (element.dictValue === type) {
name = element.dictLabel;
}
});
return name || type;
},
},
created() {
this.getTreeData();
this.getDicts("embankment_type").then((response) => {
this.embankmentTypeOptions = response.data;
});
this.getDicts("xs_classfy").then((res) => {
if (res.data && Array.isArray(res.data)) {
res.data?.forEach((element) => {
element.dictValue = element.dictValue;
});
this.examType = res.data;
}
});
this.getDicts("xs_cycle_type").then((res) => {
this.patrolType = res.data;
});
},
mounted() {
//
this.getTableData();
},
};
</script>
<template>
<div class="slider-right">
<TopBackTitle :showBackBtn="false"></TopBackTitle>
<div class="table-box slider-right-body">
<div class="search-form flex flex-wrap">
<div class="search-item flex items-center">
<span class="search-label">行政区划</span>
<el-cascader
:options="areasOptions"
v-model="paramsData.adcd"
:props="{
emitPath: false,
checkStrictly: true,
}"
placeholder="请选择行政区划"
clearable
size="small"
class="w-202 ml-10"
>
</el-cascader>
</div>
<div class="search-item flex items-center">
<span class="search-label">堤防名称</span>
<el-input
clearable
size="small"
class="w-202 ml-10"
:maxlength="50"
v-model="paramsData.dikeName"
placeholder="请输入名称"
/>
</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.dikeType"
:popper-append-to-body="false"
filterable
placeholder="请选择"
>
<el-option label="全部" value=""> </el-option>
<el-option
:label="item.dictLabel"
:value="item.dictValue"
v-for="(item, index) in embankmentTypeOptions"
:key="index"
></el-option>
</el-select>
</div>
<div class="search-item flex items-center">
<span class="search-label">维养计划名称</span>
<el-input
clearable
size="small"
class="w-202 ml-10"
:maxlength="50"
v-model="paramsData.name"
placeholder="请输入名称"
/>
</div>
<div class="search-item flex items-center">
<span class="search-label">维养计划日期</span>
<el-date-picker
clearable
size="small"
class="ml-10"
v-model="paramsData.planDateArr"
type="daterange"
placeholder="开始日期"
value-format="yyyy-MM-dd"
></el-date-picker>
</div>
<div class="flex-1 flex justify-end search-item">
<el-button
size="small"
class="flex-shrink-0 myml-12"
type="success"
@click="handleChangeQuery"
>查询</el-button
>
<el-button
class="flex-shrink-0"
size="small"
@click="handleResetQuery"
>重置</el-button
>
</div>
</div>
<div class="line"></div>
<div class="flex justify-between mb-16">
<el-radio-group
v-model="paramsData.status"
@tab-click="handleChangeQuery"
>
<el-radio-button label="">全部</el-radio-button>
<el-radio-button label="1">待验收</el-radio-button>
<el-radio-button label="2">已驳回重整</el-radio-button>
<el-radio-button label="3">已通过验收</el-radio-button>
</el-radio-group>
<div>
<el-button type="primary" size="small" @click="handleAdd"
>新增</el-button
>
<el-button
type="danger"
size="small"
@click="handleDelAll"
v-hasPermi="['df:run:inspection:plan:delAll']"
>删除</el-button
>
</div>
</div>
<el-table
:data="tableData"
border
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column prop="dikeName" align="center" label="堤防名称" />
<el-table-column prop="dikeType" align="center" label="堤防类型">
<template slot-scope="scope">
<span>{{ getDikeTypeName(scope.row.dikeType) }}</span>
</template>
</el-table-column>
<el-table-column prop="name" align="center" label="维养计划名称" />
<el-table-column prop="name" align="center" label="维养类型" />
<el-table-column prop="name" align="center" label="完成维养时间" />
<el-table-column prop="unit" align="center" label="维养单位">
</el-table-column>
<el-table-column prop="unit" align="center" label="维养负责人">
</el-table-column>
<el-table-column prop="unit" align="center" label="资金使用">
</el-table-column>
<el-table-column prop="createTime" align="center" label="提交时间">
</el-table-column>
<el-table-column prop="doneTime" align="center" label="验收时间">
</el-table-column>
<el-table-column prop="auditContent" align="center" label="审批意见">
</el-table-column>
<el-table-column prop="auditContent" align="center" label="审批材料">
</el-table-column>
<el-table-column prop="status" align="center" label="状态">
<template slot-scope="scope">
<span
v-if="scope.row.status == 0"
style="color: #f56c6c; font-weight: 600"
>待提交</span
>
<span
v-else-if="scope.row.status == 1"
style="color: #67c23a; font-weight: 600"
>审批中</span
>
</template>
</el-table-column>
<el-table-column
prop="operate"
align="center"
label="操作"
fixed="right"
width="180"
>
<template slot-scope="scope">
<el-button
style="margin-right: 16px"
type="text"
size="small"
@click="handleCheck(scope.row)"
>查看</el-button
>
<el-button
style="margin-right: 16px"
@click="handleEdit(scope.row)"
type="text"
size="small"
>通过</el-button
>
<el-button
style="margin-right: 16px; color: red"
@click="handleEdit(scope.row)"
type="text"
size="small"
>驳回</el-button
>
</template>
</el-table-column>
</el-table>
<el-pagination
background
class="pagination"
style="margin-top: 16px; margin-right: 16px; float: right"
:current-page="pageData.pageNum"
:page-sizes="pageData.pageSizes"
layout="total, prev, pager, next, sizes, jumper"
:total="pageData.total"
@size-change="(e) => handlePageSizeChange(e)"
@current-change="(e) => handleCurrentPageChange(e)"
>
</el-pagination>
</div>
<el-drawer
title="计划详情"
:visible.sync="dialogVisible"
direction="rtl"
size="80%"
:destroy-on-close="true"
>
<div class="drawer-body">
<!-- <PlanDetail
ref="formRef"
:id="currentRow.id"
:canEdit="false"
></PlanDetail> -->
</div>
<div class="drawer-footer p-16">
<el-button size="mini" type="primary" @click="handleEdit(currentRow)"
>编辑</el-button
>
<el-button size="mini" @click="dialogVisible = false">取消</el-button>
</div>
</el-drawer>
</div>
</template>
<style scoped lang="less">
.search-form {
.search-item {
margin-bottom: 16px;
.search-label {
width: 100px;
text-align: right;
flex-shrink: 0;
}
}
}
.line {
background: #e5e5e5;
width: 100%;
height: 1px;
margin-top: 8px;
margin-bottom: 24px;
}
.top-title {
height: 50px;
background-color: white;
display: flex;
padding-left: 16px;
align-items: center;
font-weight: 600;
}
.table-box {
// height: calc(100% - 50px - 24px);
margin-top: 24px;
padding: 16px;
padding-bottom: 60px;
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;
}
}
}
.drawer-footer {
position: absolute;
left: 0;
bottom: 0;
width: 100%;
z-index: 2;
border-top: 1px solid #ebeef5;
background: #fff;
}
.drawer-body {
height: 100%;
padding: 0 16px;
padding-bottom: 72px;
overflow: auto;
}
</style>

668
src/views/dike/runManage/maintenance/maintenancePlanAudit/index.vue

@ -0,0 +1,668 @@
<!-- 巡查计划管理-堤防 -->
<script>
import {
postDFInspectionPlan,
putDFInspectionPlan,
postDFInspectionProjectList,
getDFInspectionPlan,
deleteDFInspectionPlan,
listUser,
} from "@/api/management";
import { deleteProjectCheckingPlan, getDikeYhPlanList } from "@/api/dike";
import TopBackTitle from "@/components/TopBackTitle/index.vue";
import { getAreasData } from "@/api/areas/index";
import { uploadFileData } from "@/api/system/upload";
import { reqCountMixins } from "@/mixins/reqCount";
export default {
name: "InspectionItems",
components: {
TopBackTitle,
},
mixins: [reqCountMixins],
data() {
return {
paramsData: {
status: "",
adcd: "",
dikeName: "",
dikeType: "",
name: "",
planDateArr: [],
},
currentRow: {},
dialogVisible: false,
patrolType: [], //
personnelList: [], //
areasOptions: [],
embankmentTypeOptions: [],
examType: [], //
tableData: [], //
patrolTableData: [], //
pageData: {
pageNum: 1, //
pageSize: 10, //
pageSizes: [10, 20, 50, 100],
total: 0, //
},
tableCheckData: [], //
ruleForm: {
dikeCode: this.$route.query.dikeCode || "",
name: "",
type: "",
xcId: "",
frequency: "",
cycleType: "0",
isReminder: true,
reminderTime: "",
operators: [],
files: [], //
otherConfig: {
week: "",
time: "",
selectUser: [],
},
},
rules: {
name: [
{ required: true, message: "请输入计划名称", trigger: "change" },
{ max: 50, message: "名称最长为50个字符", trigger: "change" },
],
type: [
{ required: true, message: "请选择巡查类型", trigger: "change" },
],
xcId: [
{ required: true, message: "请选择巡查项目名称", trigger: "change" },
],
cycleType: [
{ required: true, message: "请选择巡查周期", trigger: "change" },
],
frequency: [
{ required: true, message: "请输入巡查次数", trigger: "blur" },
],
isReminder: [
{ required: true, message: "请选择消息提醒", trigger: "change" },
],
"otherConfig.time": [
{ required: true, message: "请选择检查时间", trigger: "change" },
],
reminderTime: [
{ required: true, message: "请选择提醒时间", trigger: "change" },
],
"otherConfig.selectUser": [
{ required: true, message: "请选择责任人", trigger: "change" },
],
},
};
},
computed: {
disabledUpload() {
return this.ruleForm?.files?.length >= 9;
},
},
methods: {
handleCurrentPageChange(page) {
this.pageData.pageNum = page;
this.getTableData();
},
handlePageSizeChange(pageSize) {
this.pageData.pageSize = pageSize;
this.getTableData();
},
handleAdd() {
this.$router.push({
path: "createMaintenancePlan",
});
},
//
getTreeData() {
getAreasData().then((items) => {
// console.log("getAreasData", 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;
});
},
//
handleCheck(row) {
this.currentRow = row;
this.dialogVisible = true;
},
//
handleEdit(row) {
this.$router.push({
path: "createInspectionPlan",
query: {
id: row.id,
},
});
},
//
deleteTableItem(row) {
deleteDFInspectionPlan(row.id).then((res) => {
this.getTableData();
this.$message.success("删除成功");
});
},
//
submitForm(formName) {
console.log("保存 >>> ", this.ruleForm);
this.$refs[formName].validate((valid) => {
if (valid) {
let user = [];
this.ruleForm.otherConfig.selectUser?.forEach((element) => {
let a = {
name: element.nickName,
uid: element.id,
};
user.push(a);
});
this.ruleForm.operators = user;
if (this.ruleForm.id) {
putDFInspectionPlan(this.ruleForm).then((res) => {
this.getTableData();
this.dialogVisible = false;
this.$message.success("更新成功");
});
} else {
postDFInspectionPlan(this.ruleForm).then((res) => {
this.getTableData();
this.dialogVisible = false;
this.$message.success("添加成功");
});
}
} else {
console.log("校验不通过");
return false;
}
});
},
//
changePatrolType(ruleForm, reset) {
if (reset) {
this.$set(ruleForm, "xcId", "");
}
setTimeout(() => {
this.$refs.ruleForm.validateField("frequency");
this.$refs.ruleForm.validateField("otherConfig.time");
}, 30);
postDFInspectionProjectList({
data: {
timeView: {
timeField: "create_time",
},
type: ruleForm.type,
},
cv: {
name: "name",
type: "like",
},
pageSize: 999,
pageNum: 1,
}).then((res) => {
this.patrolTableData = res.records;
});
},
//
getTableData() {
getDikeYhPlanList({
data: {
timeView: {
timeField: "create_time",
},
adcd: this.paramsData.adcd,
name: this.paramsData.name,
startTime: this.paramsData.planDateArr[0]
? this.paramsData.planDateArr[0] + " 00:00:00"
: "",
endTime: this.paramsData.planDateArr[1]
? this.paramsData.planDateArr[1] + " 23:59:59"
: "",
dikeName: this.paramsData.dikeName,
dikeType: this.paramsData.dikeType,
},
pageSize: this.pageData.pageSize,
pageNum: this.pageData.pageNum,
}).then((res) => {
if (res) {
this.tableData = res.records;
this.pageData.total = res.total;
}
});
},
//
handleDelAll() {
if (this.tableCheckData.length === 0) {
this.$message.warning("请选择要删除的数据");
return;
}
this.$confirm("是否删除选中的记录?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
console.log("删除");
const ids = this.tableCheckData.map((item) => item.id);
deleteProjectCheckingPlan(ids.join(",")).then((res) => {
if (res) {
this.$message.success("删除成功");
this.getTableData();
}
});
})
.catch(() => {
console.log("取消删除");
});
},
//
beforeUpload(e) {
console.log("beforeUpload >>>>> ", e);
if (this.ruleForm.files?.length >= 9) {
return false;
}
return true;
},
handleUpload(e) {
const { file } = e;
let formData = new FormData();
formData.append("file", file);
uploadFileData(formData)
.then((res) => {
console.log("上传结果 >>>>> ", res);
this.ruleForm.files.push(res.url);
})
.catch((err) => {
console.log("err >>>>> ", err);
});
},
handleDelFile(_url, index) {
this.ruleForm.files.splice(index, 1);
},
handleSelectionChange(e) {
this.tableCheckData = e || [];
},
handleChangeQuery() {
this.reqCountCalc();
this.pageData.pageNum = 1;
this.tableData = [];
this.getTableData();
},
handleResetQuery() {
this.paramsData.adcd = "";
this.paramsData.name = "";
this.paramsData.planDateArr = [];
this.paramsData.dikeName = "";
this.paramsData.dikeType = "";
this.reqCountCalc();
this.pageData.pageNum = 1;
this.getTableData();
},
getDikeTypeName(type) {
let name = "";
this.embankmentTypeOptions?.forEach((element) => {
if (element.dictValue === type) {
name = element.dictLabel;
}
});
return name || type;
},
},
created() {
this.getTreeData();
this.getDicts("embankment_type").then((response) => {
this.embankmentTypeOptions = response.data;
});
this.getDicts("xs_classfy").then((res) => {
if (res.data && Array.isArray(res.data)) {
res.data?.forEach((element) => {
element.dictValue = element.dictValue;
});
this.examType = res.data;
}
});
this.getDicts("xs_cycle_type").then((res) => {
this.patrolType = res.data;
});
},
mounted() {
//
this.getTableData();
},
};
</script>
<template>
<div class="slider-right">
<TopBackTitle :showBackBtn="false"></TopBackTitle>
<div class="table-box slider-right-body">
<div class="search-form flex flex-wrap">
<div class="search-item flex items-center">
<span class="search-label">行政区划</span>
<el-cascader
:options="areasOptions"
v-model="paramsData.adcd"
:props="{
emitPath: false,
checkStrictly: true,
}"
placeholder="请选择行政区划"
clearable
size="small"
class="w-202 ml-10"
>
</el-cascader>
</div>
<div class="search-item flex items-center">
<span class="search-label">堤防名称</span>
<el-input
clearable
size="small"
class="w-202 ml-10"
:maxlength="50"
v-model="paramsData.dikeName"
placeholder="请输入名称"
/>
</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.dikeType"
:popper-append-to-body="false"
filterable
placeholder="请选择"
>
<el-option label="全部" value=""> </el-option>
<el-option
:label="item.dictLabel"
:value="item.dictValue"
v-for="(item, index) in embankmentTypeOptions"
:key="index"
></el-option>
</el-select>
</div>
<div class="search-item flex items-center">
<span class="search-label">维养计划名称</span>
<el-input
clearable
size="small"
class="w-202 ml-10"
:maxlength="50"
v-model="paramsData.name"
placeholder="请输入名称"
/>
</div>
<div class="search-item flex items-center">
<span class="search-label">维养计划日期</span>
<el-date-picker
clearable
size="small"
class="ml-10"
v-model="paramsData.planDateArr"
type="daterange"
placeholder="开始日期"
value-format="yyyy-MM-dd"
></el-date-picker>
</div>
<div class="flex-1 flex justify-end search-item">
<el-button
size="small"
class="flex-shrink-0 myml-12"
type="success"
@click="handleChangeQuery"
>查询</el-button
>
<el-button
class="flex-shrink-0"
size="small"
@click="handleResetQuery"
>重置</el-button
>
</div>
</div>
<div class="line"></div>
<div class="flex justify-between mb-16">
<el-radio-group
v-model="paramsData.status"
@tab-click="handleChangeQuery"
>
<el-radio-button label="">全部</el-radio-button>
<el-radio-button label="1">待审批</el-radio-button>
<el-radio-button label="2">已驳回</el-radio-button>
<el-radio-button label="3">已通过</el-radio-button>
</el-radio-group>
<div>
<el-button type="primary" size="small" @click="handleAdd"
>新增</el-button
>
<el-button
type="danger"
size="small"
@click="handleDelAll"
v-hasPermi="['df:run:inspection:plan:delAll']"
>删除</el-button
>
</div>
</div>
<el-table
:data="tableData"
border
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column prop="dikeName" align="center" label="堤防名称" />
<el-table-column prop="dikeType" align="center" label="堤防类型">
<template slot-scope="scope">
<span>{{ getDikeTypeName(scope.row.dikeType) }}</span>
</template>
</el-table-column>
<el-table-column prop="name" align="center" label="维养计划名称" />
<el-table-column prop="name" align="center" label="维养类型" />
<el-table-column
prop="startDate"
align="center"
label="计划开始/结束时间"
>
<template slot-scope="scope">
<span>{{ scope.row.startDate }}</span>
</template>
</el-table-column>
<el-table-column prop="unit" align="center" label="维养单位">
</el-table-column>
<el-table-column prop="unit" align="center" label="维养负责人">
</el-table-column>
<el-table-column prop="unit" align="center" label="资金计划">
</el-table-column>
<el-table-column prop="unit" align="center" label="维修计划方案">
</el-table-column>
<el-table-column prop="createTime" align="center" label="提交时间">
</el-table-column>
<el-table-column prop="doneTime" align="center" label="审批时间">
</el-table-column>
<el-table-column prop="auditContent" align="center" label="审批意见">
</el-table-column>
<el-table-column prop="auditContent" align="center" label="审批材料">
</el-table-column>
<el-table-column prop="status" align="center" label="状态">
<template slot-scope="scope">
<span
v-if="scope.row.status == 0"
style="color: #f56c6c; font-weight: 600"
>待提交</span
>
<span
v-else-if="scope.row.status == 1"
style="color: #67c23a; font-weight: 600"
>审批中</span
>
</template>
</el-table-column>
<el-table-column
prop="operate"
align="center"
label="操作"
fixed="right"
width="180"
>
<template slot-scope="scope">
<el-button
style="margin-right: 16px"
type="text"
size="small"
@click="handleCheck(scope.row)"
>查看</el-button
>
<el-button
style="margin-right: 16px"
@click="handleEdit(scope.row)"
type="text"
size="small"
>通过</el-button
>
<el-button
style="margin-right: 16px; color: red"
@click="handleEdit(scope.row)"
type="text"
size="small"
>驳回</el-button
>
</template>
</el-table-column>
</el-table>
<el-pagination
background
class="pagination"
style="margin-top: 16px; margin-right: 16px; float: right"
:current-page="pageData.pageNum"
:page-sizes="pageData.pageSizes"
layout="total, prev, pager, next, sizes, jumper"
:total="pageData.total"
@size-change="(e) => handlePageSizeChange(e)"
@current-change="(e) => handleCurrentPageChange(e)"
>
</el-pagination>
</div>
<el-drawer
title="计划详情"
:visible.sync="dialogVisible"
direction="rtl"
size="80%"
:destroy-on-close="true"
>
<div class="drawer-body">
<!-- <PlanDetail
ref="formRef"
:id="currentRow.id"
:canEdit="false"
></PlanDetail> -->
</div>
<div class="drawer-footer p-16">
<el-button size="mini" type="primary" @click="handleEdit(currentRow)"
>编辑</el-button
>
<el-button size="mini" @click="dialogVisible = false">取消</el-button>
</div>
</el-drawer>
</div>
</template>
<style scoped lang="less">
.search-form {
.search-item {
margin-bottom: 16px;
.search-label {
width: 100px;
text-align: right;
flex-shrink: 0;
}
}
}
.line {
background: #e5e5e5;
width: 100%;
height: 1px;
margin-top: 8px;
margin-bottom: 24px;
}
.top-title {
height: 50px;
background-color: white;
display: flex;
padding-left: 16px;
align-items: center;
font-weight: 600;
}
.table-box {
// height: calc(100% - 50px - 24px);
margin-top: 24px;
padding: 16px;
padding-bottom: 60px;
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;
}
}
}
.drawer-footer {
position: absolute;
left: 0;
bottom: 0;
width: 100%;
z-index: 2;
border-top: 1px solid #ebeef5;
background: #fff;
}
.drawer-body {
height: 100%;
padding: 0 16px;
padding-bottom: 72px;
overflow: auto;
}
</style>

63
src/views/dike/runManage/maintenance/maintenanceRecords/CreateMaintenanceRecord.vue

@ -0,0 +1,63 @@
<template>
<div class="slider-right create-route-page">
<TopBackTitle></TopBackTitle>
<div class="slider-right-body">
<RecordDetail></RecordDetail>
<div class="bottom-btns">
<el-button type="primary" size="small" @click="handleSave(false)"
>保存</el-button
>
<el-button
type="primary"
size="small"
v-if="!id"
@click="handleSave(true)"
>保存并继续新增</el-button
>
<el-button size="small" @click="handleCancel">取消</el-button>
</div>
</div>
</div>
</template>
<script>
import TopBackTitle from "@/components/TopBackTitle/index.vue";
import RecordDetail from "./components/RecordDetail.vue";
export default {
components: {
TopBackTitle,
RecordDetail,
},
data() {
return {
id: this.$route.query.id,
};
},
created() {},
methods: {
handleSave(reset) {
this.$refs.formRef.submit(reset).then((res) => {
if (!reset) {
this.$router.go(-1);
}
});
},
handleCancel() {
//
this.$confirm("是否取消编辑?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
this.$router.go(-1);
})
.catch(() => {});
},
},
};
</script>
<style scoped lang="scss">
.create-route-page {
}
</style>

282
src/views/dike/runManage/maintenance/maintenanceRecords/components/RecordDetail.vue

@ -0,0 +1,282 @@
<template>
<div class="record-detail">
<el-form :model="ruleForm" :rules="rules" ref="ruleForm">
<el-form-item label-width="130px" label="维养计划名称" prop="planId">
<el-select
v-model="ruleForm.planId"
filterable
remote
:remote-method="searchPlan"
placeholder="请输入"
@change="changeSelectPlan"
>
<el-option
v-for="item in planList"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<div style="display: flex">
<el-form-item label-width="130px" label="堤防名称">
<el-input v-model="planData.dikeName" disabled />
</el-form-item>
<el-form-item label-width="130px" label="计划时间">
<el-date-picker v-model="planData.planTime" type="month" disabled>
</el-date-picker>
</el-form-item>
</div>
<div style="display: flex">
<el-form-item label-width="130px" label="国补资金">
<div style="display: flex">
<el-input
v-model="planData.nationalSupplement"
type="number"
disabled
style="margin-right: 5px"
/>
<div style="width: 50px">万元</div>
</div>
</el-form-item>
<el-form-item label-width="90px" label="自筹资金">
<div style="display: flex">
<el-input
v-model="planData.selfSupplement"
type="number"
disabled
style="margin-right: 5px"
/>
<div style="width: 50px">万元</div>
</div>
</el-form-item>
<el-form-item label-width="90px" label="项目预算">
<el-input v-model="planData.budget" disabled />
</el-form-item>
</div>
<el-form-item label-width="130px" label="具体地点">
<el-input
:autosize="{ minRows: 5 }"
type="textarea"
maxlength="500"
show-word-limit
v-model="planData.location"
disabled
/>
</el-form-item>
<el-form-item label-width="130px" label="维修养护内容">
<el-input
:autosize="{ minRows: 5 }"
type="textarea"
maxlength="500"
show-word-limit
v-model="planData.content"
disabled
/>
</el-form-item>
<div style="display: flex; margin-bottom: 16px">
<div
style="
width: 5px;
height: 16px;
background-color: #31a08e;
margin-right: 8px;
"
></div>
<span style="font-weight: 600">维修养护记录</span>
</div>
<el-form-item label-width="130px" label="维修养护前" prop="before">
<el-input
v-model="ruleForm.before"
placeholder="请输入"
maxlength="100"
style="width: 202px"
/>
</el-form-item>
<el-form-item label-width="130px" label="维修养护过程" prop="middle">
<el-input
v-model="ruleForm.middle"
placeholder="请输入"
maxlength="100"
style="width: 202px"
/>
</el-form-item>
<el-form-item label-width="130px" label="维修养护结束后" prop="after">
<el-input
v-model="ruleForm.after"
placeholder="请输入"
maxlength="100"
style="width: 202px"
/>
</el-form-item>
<el-form-item
label-width="130px"
label="维修养护费用"
prop="maintenanceFunds"
>
<el-input-number
v-model="ruleForm.maintenanceFunds"
placeholder="请输入"
style="width: 165px"
:min="0"
:precision="4"
:controls="false"
/>
万元
</el-form-item>
<el-form-item label-width="130px" label="养护人员" prop="operators">
<!-- <el-input v-model="ruleForm.operators" placeholder="请输入" style="width: 202px;" /> -->
<el-select
v-model="ruleForm.selectUser"
multiple
filterable
remote
:remote-method="searchUser"
value-key="id"
placeholder="请输入关键词搜索用户"
prop="selectUser"
>
<el-option
v-for="item in personnelList"
:key="item.id"
:label="item.nickName"
:value="item"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label-width="130px" label="落实情况" prop="implement">
<el-input
:autosize="{ minRows: 5 }"
type="textarea"
maxlength="500"
show-word-limit
v-model="ruleForm.implement"
placeholder="请输入"
/>
</el-form-item>
<el-form-item label-width="130px" label="备注" prop="remark">
<el-input
:autosize="{ minRows: 5 }"
type="textarea"
maxlength="500"
show-word-limit
v-model="ruleForm.remark"
placeholder="请输入"
/>
</el-form-item>
</el-form>
</div>
</template>
<script>
import {
putDFMaintenanceRecords,
deleteDFMaintenanceRecords,
postDFMaintenanceRecords,
getDFMaintenanceRecords,
getDicts,
postDFMaintenancePlanList,
getDFMaintenancePlan,
listUser,
} from "@/api/management";
export default {
data() {
return {
ruleForm: {
name: "",
planId: "",
before: "",
middle: "",
after: "",
maintenanceFunds: 0,
operators: [],
selectUser: [],
implement: "",
remark: "",
status: "0",
},
rules: {
planId: [
{ required: false, message: "请输入维养计划名称", trigger: "blur" },
],
before: [
{ required: true, message: "请输入维修养护前", trigger: "blur" },
],
middle: [
{ required: true, message: "请输入维修养护过程", trigger: "blur" },
],
after: [
{ required: true, message: "请输入维修养护结束后", trigger: "blur" },
],
},
planList: [],
planData: {},
personnelList: [],
};
},
created() {},
methods: {
//
searchPlan(value) {
postDFMaintenancePlanList({
data: {
timeView: {
timeField: "create_time",
},
dikeCode: this.$route.query.dikeCode,
},
cv: {
name: "name",
type: "like",
value,
},
pageSize: 100,
pageNum: 1,
}).then((res) => {
if (res) {
this.planList = res.records;
}
});
},
//
changeSelectPlan() {
// let p = this.planList.find((item) => item.id === this.ruleForm.planId);
// this.baseInfoDialog.id = p?.dikeId;
// this.baseInfoDialog.code = p?.dikeCode;
// getDFMaintenancePlan(this.ruleForm.planId).then((res) => {
// if (res.data) {
// this.ruleForm.name = res.data.name;
// this.planData = res.data;
// this.planData.budget =
// res.data.nationalSupplement + res.data.selfSupplement;
// }
// });
},
//
searchUser(e) {
listUser({
data: {
timeView: {
timeField: "create_time",
},
},
cv: {
name: "nickName",
type: "like",
value: e,
},
pageSize: 100,
pageNum: 1,
}).then((res) => {
this.personnelList = res.records;
});
},
},
};
</script>
<style scoped lang="scss">
.record-detail {
}
</style>

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

@ -13,24 +13,22 @@ import {
import { getDikeYhRecordList, updateYhRecordStatus } from "@/api/dike";
import DikeBaseInfoDialog from "@/views/dike/runManage/components/DikeBaseInfoDialog/index.vue";
import TopBackTitle from "@/components/TopBackTitle/index.vue";
export default {
name: "InspectionItems",
components: { DikeBaseInfoDialog },
components: { TopBackTitle, DikeBaseInfoDialog },
data() {
return {
//
baseInfoDialog: {
show: false,
id: "",
code: "",
paramsData: {
adcd: "",
dikeName: "",
dikeType: "",
name: "",
planDateArr: [],
},
tableHeight: null,
createTimeArr: [],
updateTimeArr: [],
repairCostArr: ["", ""],
selectStatus: "", //
searchInput: "",
areasOptions: [],
embankmentTypeOptions: [],
dialogVisible: false,
prohibitEditing: false,
statusList: [], //
@ -45,7 +43,6 @@ export default {
location: "",
content: "",
}, //
planList: [],
tableData: [], //
pageData: {
pageNum: 1, //
@ -53,33 +50,6 @@ export default {
pageSizes: [10, 20, 50, 100],
total: 0, //
},
ruleForm: {
name: "",
planId: "",
before: "",
middle: "",
after: "",
maintenanceFunds: 0,
operators: [],
selectUser: [],
implement: "",
remark: "",
status: "0",
},
rules: {
planId: [
{ required: false, message: "请输入维养计划名称", trigger: "blur" },
],
before: [
{ required: true, message: "请输入维修养护前", trigger: "blur" },
],
middle: [
{ required: true, message: "请输入维修养护过程", trigger: "blur" },
],
after: [
{ required: true, message: "请输入维修养护结束后", trigger: "blur" },
],
},
};
},
watch: {
@ -105,14 +75,12 @@ export default {
this.$message.success("删除成功");
});
},
//
handleOpenDetails() {
if (this.baseInfoDialog.id) {
this.baseInfoDialog.show = true;
} else {
this.$message.warning("缺少id");
}
handleAdd() {
this.$router.push({
path: "createMaintenanceRecord",
});
},
handleDelAll() {},
//
viewOrEditPlanDetails(row, edit = false) {
if (!edit) {
@ -182,6 +150,7 @@ export default {
this.$refs.ruleForm.resetFields();
this.dialogVisible = false;
},
handleConfirmAccept(row) {},
//
submitForm(formName, confirm = false) {
this.$refs[formName].validate((valid) => {
@ -232,61 +201,7 @@ export default {
}
});
},
//
searchPlan(value) {
postDFMaintenancePlanList({
data: {
timeView: {
timeField: "create_time",
},
dikeCode: this.$route.query.dikeCode,
},
cv: {
name: "name",
type: "like",
value,
},
pageSize: 100,
pageNum: 1,
}).then((res) => {
if (res) {
this.planList = res.records;
}
});
},
//
changeSelectPlan() {
let p = this.planList.find((item) => item.id === this.ruleForm.planId);
this.baseInfoDialog.id = p?.dikeId;
this.baseInfoDialog.code = p?.dikeCode;
getDFMaintenancePlan(this.ruleForm.planId).then((res) => {
if (res.data) {
this.ruleForm.name = res.data.name;
this.planData = res.data;
this.planData.budget =
res.data.nationalSupplement + res.data.selfSupplement;
}
});
},
//
searchUser(e) {
listUser({
data: {
timeView: {
timeField: "create_time",
},
},
cv: {
name: "nickName",
type: "like",
value: e,
},
pageSize: 100,
pageNum: 1,
}).then((res) => {
this.personnelList = res.records;
});
},
// dialog
closeDialog(ruleForm = "ruleForm") {
console.log("触发关闭dialog", ruleForm);
@ -309,22 +224,19 @@ export default {
getTableData() {
getDikeYhRecordList({
data: {
startCreatedTime: this.createTimeArr[0]
? this.createTimeArr[0] + " 00:00:00"
: "",
endCreatedTime: this.createTimeArr[1]
? this.createTimeArr[1] + " 23:59:59"
: "",
startUpdateTime: this.updateTimeArr[0]
? this.updateTimeArr[0] + " 00:00:00"
timeView: {
timeField: "create_time",
},
adcd: this.paramsData.adcd,
dikeName: this.paramsData.dikeName,
dikeType: this.paramsData.dikeType,
name: this.paramsData.name,
startDate: this.paramsData.planDateArr[0]
? this.paramsData.planDateArr[0] + " 00:00:00"
: "",
endUpdateTime: this.updateTimeArr[1]
? this.updateTimeArr[1] + " 23:59:59"
endDate: this.paramsData.planDateArr[1]
? this.paramsData.planDateArr[1] + " 23:59:59"
: "",
minRepairCost: this.repairCostArr[0],
maxRepairCost: this.repairCostArr[1],
status: this.selectStatus,
dikeCode: this.$route.query.dikeCode,
},
cv: {
name: "name",
@ -339,20 +251,27 @@ export default {
}
});
},
handleChangeQuery() {
this.pageData.pageNum = 1;
this.getTableData();
},
//
resetSearch() {
this.createTimeArr = [];
this.updateTimeArr = [];
this.repairCostArr = ["", ""];
this.selectStatus = "";
handleResetQuery() {
this.paramsData = {
adcd: "",
dikeName: "",
dikeType: "",
name: "",
planDateArr: [],
};
this.pagination.pageNum = 1;
this.tableData = [];
this.getTableData();
},
},
mounted() {
this.tableHeight = window.innerHeight - 300;
//
this.getTableData();
this.searchPlan("");
//
getDicts("xs_yh_record_status").then((res) => {
if (res.data && Array.isArray(res.data)) {
@ -365,73 +284,106 @@ export default {
<template>
<div class="slider-right">
<div class="top-title">
{{ $router.currentRoute.meta.title }} - {{ $route.query.dikeName }}
</div>
<div class="table-box">
<div class="top-search">
<div class="flex items-start">
<div>
<div>
<span>创建时间</span>
<el-date-picker
v-model="createTimeArr"
class="w-360"
type="daterange"
range-separator="至"
value-format="yyyy-MM-dd"
start-placeholder="开始日期"
end-placeholder="结束日期"
>
</el-date-picker>
<span class="ml-30">更新时间</span>
<el-date-picker
v-model="updateTimeArr"
type="daterange"
class="w-360"
range-separator="至"
value-format="yyyy-MM-dd"
start-placeholder="开始日期"
end-placeholder="结束日期"
></el-date-picker>
</div>
<div class="mt-12">
<span>维修费用</span>
<el-input v-model="repairCostArr[0]" class="w-160"></el-input>
<span> - </span>
<el-input class="w-160" v-model="repairCostArr[1]"></el-input>
<span class="ml-30">维修状态</span>
<el-select
v-model="selectStatus"
class="w-360"
placeholder="请选择"
>
<el-option label="全部" value="" />
<el-option
v-for="item in statusList"
:label="item.dictLabel"
:value="item.dictValue"
:key="item.id"
></el-option>
</el-select>
</div>
</div>
<TopBackTitle :showBackBtn="false"></TopBackTitle>
<div class="table-box slider-right-body">
<div class="search-form flex flex-wrap">
<div class="search-item flex items-center">
<span class="search-label">行政区划</span>
<el-cascader
:options="areasOptions"
v-model="paramsData.adcd"
:props="{
emitPath: false,
checkStrictly: true,
}"
placeholder="请选择行政区划"
clearable
size="small"
class="w-202 ml-10"
>
</el-cascader>
</div>
<div class="search-item flex items-center">
<span class="search-label">堤防名称</span>
<el-input
clearable
size="small"
class="w-202 ml-10"
:maxlength="50"
v-model="paramsData.dikeName"
placeholder="请输入名称"
/>
</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.dikeType"
:popper-append-to-body="false"
filterable
placeholder="请选择"
>
<el-option label="全部" value=""> </el-option>
<el-option
:label="item.dictLabel"
:value="item.dictValue"
v-for="(item, index) in embankmentTypeOptions"
:key="index"
></el-option>
</el-select>
</div>
<div class="search-item flex items-center">
<span class="search-label">维养计划名称</span>
<el-input
clearable
size="small"
class="w-202 ml-10"
:maxlength="50"
v-model="paramsData.name"
placeholder="请输入名称"
/>
</div>
<div class="search-item flex items-center">
<span class="search-label">维养计划日期</span>
<el-date-picker
clearable
size="small"
class="ml-10"
v-model="paramsData.planDateArr"
type="daterange"
placeholder="开始日期"
value-format="yyyy-MM-dd"
></el-date-picker>
</div>
<div class="flex-1 flex justify-end search-item">
<el-button
class="search-btn !ml-24"
size="small"
class="flex-shrink-0 myml-12"
type="success"
@click="getTableData()"
>搜索</el-button
@click="handleChangeQuery"
>查询</el-button
>
<el-button
class="flex-shrink-0"
size="small"
@click="handleResetQuery"
>重置</el-button
>
</div>
</div>
<div class="line"></div>
<div class="flex justify-end mb-16">
<div>
<el-button type="primary" size="small" @click="handleAdd"
>新增</el-button
>
<el-button type="danger" size="small" @click="handleDelAll"
>删除</el-button
>
<el-button @click="resetSearch()">重置</el-button>
</div>
<el-button
class="search-btn"
style="margin-right: 16px; margin-bottom: 8px"
type="success"
@click="dialogVisible = true"
v-hasPermi="['df:run:main:record:add']"
>添加</el-button
>
</div>
<el-table class="table" :data="tableData" border>
<el-table-column type="index" align="center" label="序号" width="100" />
@ -444,12 +396,7 @@ export default {
align="center"
label="维修养护费用"
/>
<el-table-column prop="status" align="center" label="状态">
<template slot-scope="scope">
<span v-if="scope.row.status == '0'" class="is-save">已保存</span>
<span v-else class="is-confirm">已确认</span>
</template>
</el-table-column>
<el-table-column
prop="createTime"
align="center"
@ -457,14 +404,19 @@ export default {
label="创建时间"
>
</el-table-column>
<el-table-column prop="status" align="center" label="状态">
<template slot-scope="scope">
<span v-if="scope.row.status == '0'" class="is-save">已保存</span>
<span v-else class="is-confirm">已确认</span>
</template>
</el-table-column>
<el-table-column
prop="updateTime"
prop="operate"
fixed="right"
width="180"
align="center"
sortable
label="更新时间"
label="操作"
>
</el-table-column>
<el-table-column prop="address" align="center" label="操作">
<template slot-scope="scope">
<el-button
@click="viewOrEditPlanDetails(scope.row)"
@ -485,12 +437,12 @@ export default {
cancel-button-text="取消"
icon="el-icon-info"
icon-color="red"
title="确定确认吗?"
title="确认提交吗?"
class="ml-10"
@confirm="confirmPlanDetails(scope.row)"
@confirm="handleConfirmAccept(scope.row)"
>
<el-button type="text" size="small" slot="reference"
>确认</el-button
>提交验收</el-button
>
</el-popconfirm>
<el-popconfirm
@ -526,299 +478,34 @@ export default {
>
</el-pagination>
</div>
<!-- 弹窗 -->
<el-dialog
title="新增/编辑维养记录"
@close="closeDialog"
:visible.sync="dialogVisible"
width="720px"
>
<div style="display: flex; margin-bottom: 16px">
<div
style="
width: 5px;
height: 16px;
background-color: #31a08e;
margin-right: 8px;
"
></div>
<span style="font-weight: 600">基础信息</span>
</div>
<el-form :model="ruleForm" :rules="rules" ref="ruleForm">
<el-form-item label-width="130px" label="维养计划名称" prop="planId">
<el-select
v-model="ruleForm.planId"
filterable
remote
:remote-method="searchPlan"
placeholder="请输入"
@change="changeSelectPlan"
:disabled="prohibitEditing"
>
<el-option
v-for="item in planList"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
</el-select>
<el-button
:disabled="!ruleForm.planId"
class="!ml-10"
type="success"
size="small"
@click="handleOpenDetails"
>详情</el-button
>
<el-button :disabled="true" class="ml-6" type="info" size="small"
>打开地图</el-button
>
</el-form-item>
<div style="display: flex">
<el-form-item label-width="130px" label="堤防名称">
<el-input v-model="planData.dikeName" disabled />
</el-form-item>
<el-form-item label-width="130px" label="计划时间">
<el-date-picker v-model="planData.planTime" type="month" disabled>
</el-date-picker>
</el-form-item>
</div>
<div style="display: flex">
<el-form-item label-width="130px" label="国补资金">
<div style="display: flex">
<el-input
v-model="planData.nationalSupplement"
type="number"
disabled
style="margin-right: 5px"
/>
<div style="width: 50px">万元</div>
</div>
</el-form-item>
<el-form-item label-width="90px" label="自筹资金">
<div style="display: flex">
<el-input
v-model="planData.selfSupplement"
type="number"
disabled
style="margin-right: 5px"
/>
<div style="width: 50px">万元</div>
</div>
</el-form-item>
<el-form-item label-width="90px" label="项目预算">
<el-input v-model="planData.budget" disabled />
</el-form-item>
</div>
<el-form-item label-width="130px" label="具体地点">
<el-input
:autosize="{ minRows: 5 }"
type="textarea"
maxlength="500"
show-word-limit
v-model="planData.location"
disabled
/>
</el-form-item>
<el-form-item label-width="130px" label="维修养护内容">
<el-input
:autosize="{ minRows: 5 }"
type="textarea"
maxlength="500"
show-word-limit
v-model="planData.content"
disabled
/>
</el-form-item>
<div style="display: flex; margin-bottom: 16px">
<div
style="
width: 5px;
height: 16px;
background-color: #31a08e;
margin-right: 8px;
"
></div>
<span style="font-weight: 600">维修养护记录</span>
</div>
<el-form-item label-width="130px" label="维修养护前" prop="before">
<el-input
v-model="ruleForm.before"
placeholder="请输入"
maxlength="100"
style="width: 202px"
:disabled="prohibitEditing"
/>
</el-form-item>
<el-form-item label-width="130px" label="维修养护过程" prop="middle">
<el-input
v-model="ruleForm.middle"
placeholder="请输入"
maxlength="100"
style="width: 202px"
:disabled="prohibitEditing"
/>
</el-form-item>
<el-form-item label-width="130px" label="维修养护结束后" prop="after">
<el-input
v-model="ruleForm.after"
placeholder="请输入"
maxlength="100"
style="width: 202px"
:disabled="prohibitEditing"
/>
</el-form-item>
<el-form-item
label-width="130px"
label="维修养护费用"
prop="maintenanceFunds"
>
<el-input-number
v-model="ruleForm.maintenanceFunds"
placeholder="请输入"
style="width: 165px"
:min="0"
:precision="4"
:controls="false"
:disabled="prohibitEditing"
/>
万元
</el-form-item>
<el-form-item label-width="130px" label="养护人员" prop="operators">
<!-- <el-input v-model="ruleForm.operators" placeholder="请输入" style="width: 202px;" /> -->
<el-select
v-model="ruleForm.selectUser"
multiple
filterable
remote
:remote-method="searchUser"
value-key="id"
:disabled="prohibitEditing"
placeholder="请输入关键词搜索用户"
prop="selectUser"
>
<el-option
v-for="item in personnelList"
:key="item.id"
:label="item.nickName"
:value="item"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label-width="130px" label="落实情况" prop="implement">
<el-input
:autosize="{ minRows: 5 }"
type="textarea"
maxlength="500"
show-word-limit
v-model="ruleForm.implement"
placeholder="请输入"
:disabled="prohibitEditing"
/>
</el-form-item>
<el-form-item label-width="130px" label="备注" prop="remark">
<el-input
:autosize="{ minRows: 5 }"
type="textarea"
maxlength="500"
show-word-limit
v-model="ruleForm.remark"
placeholder="请输入"
:disabled="prohibitEditing"
/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button size="mini" @click="resetForm('ruleForm')"> </el-button>
<el-button
v-if="!prohibitEditing"
size="mini"
type="primary"
@click="submitForm('ruleForm')"
>保存</el-button
>
<el-button
v-if="this.ruleForm.status == '0' && prohibitEditing"
size="mini"
type="primary"
@click="submitForm('ruleForm', true)"
>确认</el-button
>
</div>
</el-dialog>
<DikeBaseInfoDialog
v-model="baseInfoDialog.show"
:id="baseInfoDialog.id"
:code="baseInfoDialog.code"
></DikeBaseInfoDialog>
</div>
</template>
<style scoped lang="less">
.top-title {
height: 50px;
background-color: white;
display: flex;
padding-left: 16px;
align-items: center;
font-weight: 600;
.search-form {
.search-item {
margin-bottom: 16px;
.search-label {
width: 100px;
text-align: right;
flex-shrink: 0;
}
}
}
.line {
background: #e5e5e5;
width: 100%;
height: 1px;
margin-top: 8px;
margin-bottom: 24px;
}
.table-box {
width: 100%;
// height: calc(100% - 16px);
// height: calc(100% - 50px - 24px);
margin-top: 24px;
padding: 16px;
padding-bottom: 60px;
background-color: white;
.top-search {
display: flex;
align-items: flex-start;
justify-content: space-between;
width: 100% !important;
margin-bottom: 8px;
.search-input {
width: 300px;
margin-right: 10px;
}
}
.table {
.is-confirm {
background-color: #ebf7f5;
border-radius: 4px;
color: #36b29e;
padding: 0px 6px;
}
.is-save {
background-color: #f8f9fb;
border: 1px solid #bfbfbf;
border-radius: 4px;
color: #bfbfbf;
padding: 0px 6px;
}
}
}
.search-btn {
margin-left: 10px;
background-color: #37b29e;
border: none;
&:hover {
background-color: #5ac6b9;
}
&:active {
background-color: #2b8070;
}
}
.w-160 {
@ -831,10 +518,20 @@ export default {
width: 360px;
}
/deep/.el-input__count {
height: 15px;
line-height: 15px;
margin-right: 10px;
margin-bottom: -4px;
.drawer-footer {
position: absolute;
left: 0;
bottom: 0;
width: 100%;
z-index: 2;
border-top: 1px solid #ebeef5;
background: #fff;
}
.drawer-body {
height: 100%;
padding: 0 16px;
padding-bottom: 72px;
overflow: auto;
}
</style>

Loading…
Cancel
Save