<template>
|
<el-button
|
type="primary"
|
class="el-button-custom"
|
@click="dialogVisible = !dialogVisible"
|
>
|
新建任务
|
</el-button>
|
<CardDialog v-model="dialogVisible" title="新建走航任务">
|
<el-form
|
:inline="false"
|
:model="formObj"
|
ref="formRef"
|
:rules="rules"
|
label-position="right"
|
label-width="100px"
|
>
|
<el-form-item label="区县" prop="location">
|
<OptionLocation2
|
:level="3"
|
:initValue="false"
|
:checkStrictly="false"
|
:allOption="false"
|
v-model="formObj.location"
|
></OptionLocation2>
|
</el-form-item>
|
<el-form-item label="任务编号" prop="missionCode">
|
<el-input
|
size="small"
|
clearable
|
v-model="formObj.missionCode"
|
placeholder="任务编号"
|
/>
|
</el-form-item>
|
<OptionType v-model="formObj.deviceType"></OptionType>
|
<OptionDevice
|
:type="formObj.deviceType"
|
v-model="formObj.deviceCode"
|
></OptionDevice>
|
<OptionTime v-model="formObj.timeArray"></OptionTime>
|
<el-form-item>
|
<el-button
|
:disabled="!edit"
|
type="primary"
|
@click="onSubmit"
|
:loading="loading"
|
>提交</el-button
|
>
|
<el-button @click="onCancel">取消</el-button>
|
</el-form-item>
|
</el-form>
|
</CardDialog>
|
</template>
|
<script setup>
|
import moment from 'moment';
|
import { ref, reactive, computed } from 'vue';
|
import missionApi from '@/api/missionApi';
|
import thirdPartyDataApi from '@/api/thirdPartyDataApi';
|
import { useFormConfirm } from '@/composables/formConfirm';
|
import { useFetchData } from '@/composables/fetchData';
|
import { useMissionStore } from '@/stores/mission';
|
|
const missionStore = useMissionStore();
|
const dialogVisible = ref(false);
|
const { loading, fetchData } = useFetchData();
|
const rules = reactive({
|
location: [
|
{
|
required: true,
|
message: '区县不能为空',
|
trigger: 'change'
|
}
|
],
|
missionCode: [
|
{
|
required: true,
|
message: '任务编号不能为空',
|
trigger: 'blur'
|
}
|
],
|
timeArray: [
|
{
|
required: true,
|
// message: '时间不能为空',
|
trigger: 'change',
|
validator: (rule, value, callback) => {
|
if (value == null) {
|
callback(new Error('时间不能为空'));
|
} else {
|
const st = moment(value[0]);
|
const et = moment(value[1]);
|
const range = et.diff(st, 'second');
|
if (range > 12 * 60 * 60) {
|
callback(new Error('任务时长最多为12小时'));
|
}
|
}
|
callback();
|
}
|
}
|
]
|
});
|
const param = computed(() => {
|
return {
|
districtName: formObj.value.location.dName,
|
missionCode: formObj.value.missionCode,
|
deviceType: formObj.value.deviceType,
|
deviceCode: formObj.value.deviceCode,
|
startTime: formObj.value.timeArray[0],
|
endTime: formObj.value.timeArray[1]
|
};
|
});
|
// 创建任务
|
function createMission() {
|
fetchData((page, pageSize) => {
|
return missionApi.putNewMission(param.value).then((res) => {
|
dialogVisible.value = false;
|
missionStore.fetchMission();
|
// 通知服务端启动任务范围内的第三方数据获取任务
|
thirdPartyDataApi.fetchMissionData(param.value.missionCode);
|
});
|
});
|
}
|
const { formObj, formRef, edit, onSubmit, onCancel } = useFormConfirm({
|
submit: {
|
do: createMission
|
},
|
cancel: {
|
do: () => {
|
dialogVisible.value = false;
|
}
|
}
|
});
|
|
if (import.meta.env.VITE_DATA_MODE == 'jingan') {
|
formObj.value.location = {
|
pCode: '31',
|
pName: '上海市',
|
cCode: '3100',
|
cName: '上海市',
|
dCode: '310106',
|
dName: '静安区'
|
};
|
}
|
</script>
|
<style scoped>
|
/* .el-form-item {
|
margin-bottom: 0px;
|
} */
|
</style>
|