<template>
|
<el-dialog
|
style="pointer-events: auto"
|
:model-value="modelValue"
|
@update:modelValue="handleDialogChange"
|
width="50%"
|
:close-on-click-modal="false"
|
:close-on-press-escape="false"
|
destroy-on-close
|
>
|
<template #header>
|
<span> {{ create ? '发布线索任务' : '更新线索任务' }}</span>
|
</template>
|
<el-form
|
label-width="120px"
|
label-position="right"
|
:rules="rules"
|
:model="formObj"
|
ref="formRef"
|
>
|
<el-form-item label="线索编号" prop="clueId">
|
<el-input
|
v-model="formObj.clueId"
|
placeholder="请输入线索编号"
|
class="w-200"
|
:disabled="true"
|
></el-input>
|
</el-form-item>
|
<el-form-item label="任务时间" prop="taskTime">
|
<el-date-picker
|
v-model="formObj.taskTime"
|
type="date"
|
placeholder="选择日期"
|
/>
|
</el-form-item>
|
<el-form-item label="区县" prop="_location">
|
<OptionLocation
|
:level="3"
|
:initValue="false"
|
:checkStrictly="false"
|
:allOption="false"
|
v-model="formObj._location"
|
></OptionLocation>
|
</el-form-item>
|
<el-form-item label="响应级别" prop="responseLevel">
|
<OptionResponseLevel
|
v-model="formObj.responseLevel"
|
></OptionResponseLevel>
|
</el-form-item>
|
<el-form-item label="出行方式" prop="travelMode">
|
<OptionTravelMode
|
v-model="formObj.travelMode"
|
></OptionTravelMode>
|
</el-form-item>
|
<el-form-item label="无人机" prop="hasUav">
|
<el-switch
|
v-model="formObj.hasUav"
|
inline-prompt
|
active-text="有"
|
inactive-text="无"
|
/>
|
</el-form-item>
|
<el-form-item label="执行人" prop="executorIds">
|
<OptionExecutors
|
v-model="formObj.executorIds"
|
></OptionExecutors>
|
</el-form-item>
|
</el-form>
|
<template #footer>
|
<el-button @click="onCancel">取消</el-button>
|
<el-button
|
:disabled="!edit"
|
type="primary"
|
:loading="loading"
|
@click="onSubmit"
|
>确定</el-button
|
>
|
</template>
|
</el-dialog>
|
</template>
|
<script setup>
|
import { ref, reactive, watch, onMounted } from 'vue';
|
import { useFormConfirm } from '@/composables/formConfirm';
|
import clueTaskApi from '@/api/clue/clueTaskApi';
|
|
const props = defineProps({
|
modelValue: Boolean,
|
clueData: Object,
|
clueTask: Object,
|
create: {
|
type: Boolean,
|
default: true
|
},
|
// 自定义创建方法
|
onCreate: Function,
|
// 自定义更新方法
|
onUpdate: Function
|
});
|
|
const emits = defineEmits(['update:modelValue', 'onSubmit']);
|
|
function handleDialogChange(value) {
|
emits('update:modelValue', value);
|
}
|
|
const { formObj, formRef, edit, onSubmit, onCancel, clear } =
|
useFormConfirm({
|
submit: {
|
do: submit
|
},
|
cancel: {
|
do: cancel
|
}
|
});
|
const loading = ref(false);
|
// 表单检查规则
|
const rules = reactive({
|
// clueId: [
|
// {
|
// required: true,
|
// message: '线索编号不能为空',
|
// trigger: 'blur'
|
// }
|
// ],
|
taskTime: [
|
{
|
required: true,
|
message: '线索时间不能为空',
|
trigger: 'change'
|
}
|
],
|
_location: [
|
{
|
required: true,
|
message: '区县不能为空',
|
trigger: 'change'
|
}
|
],
|
responseLevel: [
|
{
|
required: true,
|
message: '响应级别不能为空',
|
trigger: 'change'
|
}
|
],
|
executorIds: [
|
{
|
required: true,
|
message: '执行人不能为空',
|
trigger: 'change'
|
}
|
]
|
});
|
|
function submit() {
|
const param = getParams();
|
return props.create
|
? props.onCreate
|
? props.onCreate(param)
|
: createClueTask(param)
|
: props.onUpdate
|
? props.onUpdate(param)
|
: updateClueTask(param);
|
}
|
|
function cancel() {
|
emits('update:modelValue', false);
|
}
|
|
function createClueTask(param) {
|
return clueTaskApi
|
.createClueTask(param)
|
.then(() => {
|
emits('update:modelValue', false);
|
emits('onSubmit');
|
// clear();
|
})
|
.finally(() => {
|
loading.value = false;
|
});
|
}
|
|
function updateClueTask(param) {
|
return clueTaskApi
|
.updateClueTask(param)
|
.then(() => {
|
emits('update:modelValue', false);
|
emits('onSubmit');
|
// clear();
|
})
|
.finally(() => {
|
loading.value = false;
|
});
|
}
|
|
function getParams() {
|
return {
|
guid: formObj.value.guid,
|
clueId: formObj.value.clueId,
|
taskTime: formObj.value.taskTime,
|
provinceCode: formObj.value._location.pCode,
|
provinceName: formObj.value._location.pName,
|
cityCode: formObj.value._location.cCode,
|
cityName: formObj.value._location.cName,
|
districtCode: formObj.value._location.dCode,
|
districtName: formObj.value._location.dName,
|
townCode: formObj.value._location.tCode,
|
townName: formObj.value._location.tName,
|
responseLevel: formObj.value.responseLevel,
|
travelMode: formObj.value.travelMode,
|
hasUav: formObj.value.hasUav,
|
executorIds: formObj.value.executorIds.join(';')
|
};
|
}
|
|
// watch(
|
// () => props.clueData,
|
// (nV, oV) => {
|
// if (nV && nV != oV) {
|
// formObj.value.clueId = nV.cid;
|
// }
|
// }
|
// );
|
|
// watch(
|
// () => props.clueTask,
|
// (nV, oV) => {
|
// if (nV && nV != oV) {
|
// formObj.value.guid = nV.guid;
|
// formObj.value.clueId = nV.clueId;
|
// formObj.value.taskTime = nV.taskTime;
|
// formObj.value._location = {
|
// pCode: nV.provinceCode,
|
// pName: nV.provinceName,
|
// cCode: nV.cityCode,
|
// cName: nV.cityName,
|
// dCode: nV.districtCode,
|
// dName: nV.districtName,
|
// tCode: nV.townCode,
|
// tName: nV.townName
|
// };
|
// formObj.value.responseLevel = nV.responseLevel;
|
// formObj.value.travelMode = nV.travelMode;
|
// formObj.value.hasUav = nV.hasUav;
|
// formObj.value.executorIds = nV.executorIds.split(';');
|
// }
|
// }
|
// );
|
|
watch(
|
() => [props.modelValue, props.clueData, props.clueTask],
|
(nV, oV) => {
|
const [m, d, t] = nV;
|
if (m) {
|
formObj.value = {
|
taskTime: new Date(),
|
_location: {
|
pCode: '31',
|
pName: '上海市',
|
cCode: '3100',
|
cName: '上海市',
|
dCode: '310106',
|
dName: '静安区',
|
tCode: undefined,
|
tName: undefined
|
}
|
};
|
if (d) {
|
formObj.value.clueId = d.cid;
|
}
|
if (t) {
|
formObj.value.guid = t.guid;
|
formObj.value.clueId = t.clueId;
|
formObj.value.taskTime = t.taskTime;
|
formObj.value._location = {
|
pCode: t.provinceCode,
|
pName: t.provinceName,
|
cCode: t.cityCode,
|
cName: t.cityName,
|
dCode: t.districtCode,
|
dName: t.districtName,
|
tCode: t.townCode,
|
tName: t.townName
|
};
|
formObj.value.responseLevel = t.responseLevel;
|
formObj.value.travelMode = t.travelMode;
|
formObj.value.hasUav = t.hasUav;
|
formObj.value.executorIds = t.executorIds.split(';');
|
}
|
}
|
}
|
);
|
</script>
|