1 changed files with 619 additions and 0 deletions
@ -0,0 +1,619 @@ |
|||
<template> |
|||
<div class="route-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 |
|||
: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> |
|||
<el-form-item label="堤防巡查责任人" prop="dutyHolder" class="ml-24"> |
|||
<el-input |
|||
class="w-240" |
|||
size="small" |
|||
v-model="formData.dutyHolder" |
|||
:disabled="true" |
|||
placeholder="" |
|||
></el-input> |
|||
</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"> |
|||
<div class="w-240"> |
|||
<el-radio-group :disabled="!canEdit" v-model="formData.type"> |
|||
<el-radio label="0">年度计划</el-radio> |
|||
<el-radio label="1">月度计划</el-radio> |
|||
</el-radio-group> |
|||
</div> |
|||
</el-form-item> |
|||
<el-form-item label="巡查提醒" prop="cycleType" class="ml-24"> |
|||
<el-select |
|||
:disabled="!canEdit" |
|||
size="small" |
|||
class="w-100" |
|||
v-model="formData.cycleType" |
|||
placeholder="请选择" |
|||
@change="handleChangeRemindType" |
|||
> |
|||
<el-option label="每月提醒" value="1"> </el-option> |
|||
<el-option label="每周提醒" value="2"> </el-option> |
|||
<el-option label="每日提醒" value="3"> </el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item |
|||
label="" |
|||
style="padding-top: 46px" |
|||
prop="otherConfig.reminderDays" |
|||
v-if="formData.cycleType == '1'" |
|||
> |
|||
<el-select |
|||
:disabled="!canEdit" |
|||
size="small" |
|||
multiple |
|||
v-model="formData.otherConfig.reminderDays" |
|||
placeholder="请选择" |
|||
> |
|||
<el-option |
|||
v-for="item in 31" |
|||
:key="item" |
|||
:label="`${item}日`" |
|||
:value="item" |
|||
> |
|||
</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item |
|||
label="" |
|||
style="padding-top: 46px" |
|||
v-else-if="formData.cycleType == '2'" |
|||
prop="otherConfig.reminderWeeks" |
|||
> |
|||
<el-checkbox-group |
|||
:disabled="!canEdit" |
|||
size="small" |
|||
v-model="formData.otherConfig.reminderWeeks" |
|||
> |
|||
<el-checkbox-button :label="1">周一</el-checkbox-button> |
|||
<el-checkbox-button :label="2">周二</el-checkbox-button> |
|||
<el-checkbox-button :label="3">周三</el-checkbox-button> |
|||
<el-checkbox-button :label="4">周四</el-checkbox-button> |
|||
<el-checkbox-button :label="5">周五</el-checkbox-button> |
|||
<el-checkbox-button :label="6">周六</el-checkbox-button> |
|||
<el-checkbox-button :label="7">周日</el-checkbox-button> |
|||
</el-checkbox-group> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="" style="padding-top: 46px" prop="reminderTime"> |
|||
<el-time-picker |
|||
:disabled="!canEdit" |
|||
size="small" |
|||
v-model="formData.reminderTime" |
|||
value-format="2024-06-05 HH:mm:ss" |
|||
placeholder="选择时间" |
|||
> |
|||
</el-time-picker> |
|||
</el-form-item> |
|||
</div> |
|||
<div> |
|||
<el-form-item label="巡查频率" prop="frequency"> |
|||
<el-input |
|||
:disabled="!canEdit" |
|||
class="w-240" |
|||
type="number" |
|||
size="small" |
|||
v-model="formData.frequency" |
|||
placeholder="请输入" |
|||
:max="999" |
|||
:min="0" |
|||
></el-input> |
|||
<span class="ml-4">次/月</span> |
|||
</el-form-item> |
|||
</div> |
|||
<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" |
|||
:limit="5" |
|||
:file-list="filesList" |
|||
> |
|||
<el-button size="small" type="primary">点击上传</el-button> |
|||
<div slot="tip" class="el-upload__tip"> |
|||
文件支持docx、doc、pdf,文件大小100M以内,文件数量不能超过5份 |
|||
</div> |
|||
</el-upload> |
|||
</el-form-item> |
|||
</div> |
|||
<div |
|||
class="plan-list-item" |
|||
v-for="(item, index) in formData.contents" |
|||
:key="index" |
|||
> |
|||
<div class="flex justify-between"> |
|||
<div style="color: #262626; font-size: 16px; font-weight: 700"> |
|||
子项{{ index + 1 }} |
|||
</div> |
|||
<el-popconfirm |
|||
v-if="formData.contents.length > 1" |
|||
:disabled="!canEdit" |
|||
title="确定删除?" |
|||
@confirm="handleDelPlanItem(index)" |
|||
> |
|||
<el-button slot="reference" type="danger" plain size="small" |
|||
>删除</el-button |
|||
> |
|||
</el-popconfirm> |
|||
</div> |
|||
<div class="flex items-start flex-wrap"> |
|||
<el-form-item label="子项名称" prop="subItemName"> |
|||
<el-input |
|||
:disabled="!canEdit" |
|||
class="w-240" |
|||
size="small" |
|||
v-model="item.name" |
|||
placeholder="请输入名称" |
|||
maxlength="50" |
|||
></el-input> |
|||
</el-form-item> |
|||
<el-form-item |
|||
label="计划周期(起止)" |
|||
prop="planDateTimeArr" |
|||
class="ml-24" |
|||
> |
|||
<el-date-picker |
|||
:disabled="!canEdit" |
|||
size="small" |
|||
v-model="item.planDateTimeArr" |
|||
type="daterange" |
|||
range-separator="至" |
|||
value-format="yyyy-MM-dd" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
> |
|||
</el-date-picker> |
|||
</el-form-item> |
|||
<el-form-item label="巡查人员" prop="operator" class="ml-24"> |
|||
<el-select |
|||
:disabled="!canEdit" |
|||
class="w-240" |
|||
v-model="item.operator" |
|||
multiple |
|||
filterable |
|||
remote |
|||
:remote-method="searchUser" |
|||
value-key="id" |
|||
placeholder="请输入关键词搜索用户" |
|||
> |
|||
<el-option |
|||
v-for="item in personnelList" |
|||
:key="item.id" |
|||
:label="item.name" |
|||
:value="item" |
|||
> |
|||
</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
</div> |
|||
<el-form-item label="巡查范围" prop="scope"> |
|||
<!-- <el-radio></el-radio> --> |
|||
<div>暂无数据</div> |
|||
</el-form-item> |
|||
<el-form-item label="巡查路线(推荐)" prop="lineId"> |
|||
<el-select |
|||
:disabled="!canEdit" |
|||
class="w-240" |
|||
v-model="item.lineId" |
|||
filterable |
|||
remote |
|||
:remote-method="handleRemoteLineData" |
|||
value-key="id" |
|||
placeholder="请输入关键词搜索路线" |
|||
> |
|||
<el-option |
|||
v-for="item in lineList" |
|||
:key="item.id" |
|||
:label="item.name" |
|||
:value="item.id" |
|||
> |
|||
</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="巡查重点检查部位和内容" prop="remark"> |
|||
<el-input |
|||
:disabled="!canEdit" |
|||
size="small" |
|||
type="textarea" |
|||
:rows="3" |
|||
v-model="item.remark" |
|||
:maxlength="500" |
|||
></el-input> |
|||
</el-form-item> |
|||
</div> |
|||
<div |
|||
class="flex justify-start !mt-16" |
|||
v-if="canEdit && formData.contents.length <= 50" |
|||
> |
|||
<el-button |
|||
class="w-120" |
|||
type="primary" |
|||
@click="handleAddNewPlan" |
|||
icon="el-icon-plus" |
|||
>新增子项</el-button |
|||
> |
|||
</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: "", |
|||
operator: "", |
|||
cycleType: "1", |
|||
reminderTime: "", |
|||
files: [], |
|||
otherConfig: { |
|||
options: {}, |
|||
reminderDays: [], |
|||
reminderWeeks: [], |
|||
}, |
|||
contents: [ |
|||
{ |
|||
planDateTimeArr: [], |
|||
startDate: "", |
|||
endDate: "", |
|||
operator: [], |
|||
scope: "", |
|||
lineId: "", |
|||
remark: "", |
|||
status: "0", |
|||
}, |
|||
], |
|||
}, |
|||
rules: { |
|||
dikeName: [ |
|||
{ required: true, message: "请选择堤防", trigger: "change" }, |
|||
], |
|||
name: [{ required: true, message: "请输入计划名称", trigger: "blur" }], |
|||
type: [ |
|||
{ required: true, message: "请选择计划类型", trigger: "change" }, |
|||
], |
|||
cycleType: [ |
|||
{ required: true, message: "请选择类型", trigger: "change" }, |
|||
], |
|||
"otherConfig.reminderDays": [ |
|||
{ required: true, message: "请选择", trigger: "change" }, |
|||
], |
|||
"otherConfig.reminderWeeks": [ |
|||
{ required: true, message: "请选择", trigger: "change" }, |
|||
], |
|||
reminderTime: [ |
|||
{ required: true, message: "请选择", trigger: "change" }, |
|||
], |
|||
frequency: [{ required: true, message: "请输入", trigger: "blur" }], |
|||
}, |
|||
filesList: [], |
|||
dikeList: [], |
|||
projectTypeOptions: [], |
|||
personnelList: [], // 人员列表 |
|||
lineList: [], // 线路列表 |
|||
}; |
|||
}, |
|||
watch: { |
|||
id: { |
|||
handler(val) { |
|||
if (val) { |
|||
this.getDetail(); |
|||
} |
|||
}, |
|||
immediate: true, |
|||
}, |
|||
}, |
|||
created() { |
|||
this.searchUser(); |
|||
this.getDicts("embankment_type").then((response) => { |
|||
this.projectTypeOptions = response.data; |
|||
}); |
|||
}, |
|||
methods: { |
|||
getDetail() { |
|||
getProjectCheckingPlanDetails(this.id).then((res) => { |
|||
console.log("res >>>>> ", res); |
|||
this.formData = res.data; |
|||
this.formData.contents?.forEach((v) => { |
|||
if (v.startDate && v.endDate) { |
|||
v.planDateTimeArr = [v.startDate, v.endDate]; |
|||
} |
|||
}); |
|||
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.dutyHolders = res.dutyHolders; |
|||
}, |
|||
handleGetRemoteDikeMethod(query) { |
|||
console.log("query >>>>> ", query); |
|||
getRunProjectList({ |
|||
pageSize: 10, |
|||
pageNum: 1, |
|||
cv: { |
|||
name: "dikeName", |
|||
type: "like", |
|||
value: query, |
|||
}, |
|||
}).then((res) => { |
|||
if (res) { |
|||
this.dikeList = res.records; |
|||
} |
|||
}); |
|||
}, |
|||
// 上传前 |
|||
beforeUpload(e) { |
|||
if (this.formData.files?.length >= 5) { |
|||
this.$message.warning("最多上传5份"); |
|||
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}?`); |
|||
} |
|||
}, |
|||
handleChangeRemindType() { |
|||
this.formData.remindTime = ""; |
|||
this.formData.remindDay = []; |
|||
}, |
|||
handleAddNewPlan() { |
|||
this.formData.contents.push({ |
|||
planDateTimeArr: [], |
|||
startDate: "", |
|||
endDate: "", |
|||
operator: [], |
|||
scope: "", |
|||
lineId: "", |
|||
remark: "", |
|||
status: "0", |
|||
}); |
|||
}, |
|||
handleDelPlanItem(index) { |
|||
this.formData.contents.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 { |
|||
id: item.id, |
|||
name: item.nickName, |
|||
uid: item.uuid, |
|||
}; |
|||
}); |
|||
}); |
|||
}, |
|||
handleRemoteLineData(e) { |
|||
getProjectCheckingLineRoute({ |
|||
data: { |
|||
name: e, |
|||
}, |
|||
pageNum: 1, |
|||
pageSize: 50, |
|||
}).then((res) => { |
|||
this.lineList = res.records; |
|||
}); |
|||
}, |
|||
submit(reset) { |
|||
console.log("提交表单 >>>> ", this.formData); |
|||
return new Promise((r, j) => { |
|||
this.$refs.formRef.validate((valid) => { |
|||
if (valid) { |
|||
this.formData.contents.forEach((item) => { |
|||
item.startDate = item.planDateTimeArr[0] |
|||
? item.planDateTimeArr[0] + " 00:00:00" |
|||
: ""; |
|||
item.endDate = item.planDateTimeArr[1] |
|||
? item.planDateTimeArr[1] + " 23:59:59" |
|||
: ""; |
|||
}); |
|||
(this.id ? putProjectCheckingPlan : postProjectCheckingPlan)({ |
|||
id: this.id || null, |
|||
...this.formData, |
|||
}) |
|||
.then((res) => { |
|||
this.$message.success("提交成功"); |
|||
if (reset) { |
|||
this.reset(); |
|||
} |
|||
r(); |
|||
}) |
|||
.catch(() => { |
|||
j(); |
|||
}); |
|||
} else { |
|||
j(); |
|||
} |
|||
}); |
|||
}); |
|||
}, |
|||
reset() { |
|||
this.formData = { |
|||
dikeName: "", |
|||
dikeCode: "", |
|||
dikeType: "", |
|||
operator: "", |
|||
cycleType: "1", |
|||
reminderTime: "", |
|||
files: [], |
|||
otherConfig: { |
|||
options: {}, |
|||
reminderDays: [], |
|||
reminderWeeks: [], |
|||
}, |
|||
contents: [ |
|||
{ |
|||
planDateTimeArr: [], |
|||
startDate: "", |
|||
endDate: "", |
|||
operator: [], |
|||
scope: "", |
|||
lineId: "", |
|||
remark: "", |
|||
}, |
|||
], |
|||
}; |
|||
|
|||
this.$refs.formRef.resetFields(); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
<style scoped lang="scss"> |
|||
.route-detail-page { |
|||
width: 100%; |
|||
max-width: 1232px; |
|||
padding: 16px; |
|||
padding-bottom: 78px; |
|||
border-radius: 6px; |
|||
.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> |
Loading…
Reference in new issue