| | |
| | | destroy-on-close |
| | | :close-on-click-modal="false" |
| | | > |
| | | <el-row class="detail-row-view" v-if="dialogType === 'view'"> |
| | | <el-col :span="12"> |
| | | <div class="label">飞手姓名</div> |
| | | <div class="val">{{ formData.flyerName }}</div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="label">飞手电话</div> |
| | | <div class="val">{{ formData.flyerPhone }}</div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="label">飞行时长(小时)</div> |
| | | <div class="val">{{ formData.flightHours }}</div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="label">技术特长</div> |
| | | <div class="val">{{ getDictLabel(formData.technicalStrength, dictObj.technicalStrength) }}</div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="label">擅长机型</div> |
| | | <div class="val">{{ getDictLabel(formData.skilledUavType, dictObj.skilledUavType) }}</div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="label">擅长任务类型</div> |
| | | <div class="val">{{ getTaskTypeLabel(formData.skilledTaskType, workOrderTypeXT) }}</div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="label">项目经验</div> |
| | | <div class="val">{{ formData.projectExperience }}</div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="label">飞手地址</div> |
| | | <div class="val">{{ formData.flyerAddress }}</div> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <div class="label">飞手证书</div> |
| | | <div class="val"> |
| | | <el-image |
| | | v-for="(item, index) in formData.certification" |
| | | :key="index" |
| | | :src="item" |
| | | :preview-src-list="formData.certification" |
| | | class="gd-image" |
| | | style="width: 100px; height: 100px; margin-right: 10px;" |
| | | /> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-form |
| | | ref="formRef" |
| | | :model="formData" |
| | | :rules="rules" |
| | | class="gd-form" |
| | | label-width="160px" |
| | | class="gd-dialog-form" |
| | | label-width="auto" |
| | | v-else |
| | | > |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="飞手姓名" prop="flyerId"> |
| | | <el-select |
| | | <el-select v-if="dialogType === 'add'" |
| | | class="gd-select" |
| | | popper-class="gd-select-popper" |
| | | v-model="formData.flyerId" |
| | | placeholder="请选择" |
| | | clearable |
| | | @change="handleChange" |
| | | :disabled="dialogType === 'view'" |
| | | > |
| | | <el-option |
| | | v-for="item in flyingHandList" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.id" |
| | | /> |
| | | </el-select> |
| | | <el-select v-else |
| | | class="gd-select" |
| | | popper-class="gd-select-popper" |
| | | v-model="formData.flyerId" |
| | | placeholder="请选择" |
| | | clearable |
| | | :disabled="dialogType === 'edit'" |
| | | > |
| | | <el-option |
| | | v-for="item in flyingHandEditList" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.id" |
| | |
| | | class="gd-input" |
| | | v-model="formData.flyerPhone" |
| | | placeholder="请输入" |
| | | :disabled="dialogType === 'view'" |
| | | :disabled="true" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | v-model.number="formData.flightHours" |
| | | placeholder="请输入" |
| | | type="number" |
| | | :disabled="dialogType === 'view'" |
| | | :disabled="true" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="擅长任务类型" prop="skilledTaskType"> |
| | | <el-select |
| | | class="gd-select" |
| | | popper-class="gd-select-popper" |
| | | <el-cascader |
| | | class="gd-cascader" |
| | | popper-class="gd-cascader-popper" |
| | | v-model="formData.skilledTaskType" |
| | | :options="workOrderTypeXT" |
| | | :props="{ ...taskTypeCascaderProps, multiple: true }" |
| | | placeholder="请选择" |
| | | :disabled="dialogType === 'view'" |
| | | > |
| | | <el-option |
| | | v-for="item in dictObj.skilledTaskType" |
| | | :key="item.dictKey" |
| | | :label="item.dictValue" |
| | | :value="item.dictKey" |
| | | /> |
| | | </el-select> |
| | | clearable |
| | | collapse-tags |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="项目经验" prop="projectExperience"> |
| | | <el-input |
| | | class="gd-input" |
| | | class="gd-input-text" |
| | | v-model="formData.projectExperience" |
| | | placeholder="请输入" |
| | | type="textarea" |
| | |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24" v-if="dialogType === 'view'"> |
| | | <el-form-item label="飞手证书" prop="certification"> |
| | | <el-image |
| | | v-for="(item, index) in formData.certification" |
| | | :key="index" |
| | | :src="item" |
| | | :preview-src-list="formData.certification" |
| | | class="gd-image" |
| | | style="width: 100px; height: 100px; margin-right: 10px;" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <template #footer> |
| | | <el-button color="#F2F3F5" @click="handleClose">取消</el-button> |
| | | <el-button v-if="dialogType !== 'view'" color="#F2F3F5" @click="handleClose">取消</el-button> |
| | | <el-button |
| | | v-if="dialogType !== 'view'" |
| | | type="primary" |
| | | color="#4C34FF" |
| | | @click="handleSubmit" |
| | | > |
| | | 确定 |
| | | 保存 |
| | | </el-button> |
| | | </template> |
| | | </el-dialog> |
| | |
| | | import { ref, reactive, computed, watch, inject } from 'vue' |
| | | import { submitFlyingHand } from './flyingHandApi' |
| | | import { ElMessage } from 'element-plus' |
| | | import { getDictLabel } from '@ztzf/utils' |
| | | import { |
| | | getTaskTypeLabel, |
| | | taskTypeCascaderProps, |
| | | } from '../orderManage/taskTypeOptions' |
| | | |
| | | import { fieldRules } from '@ztzf/utils' |
| | | |
| | |
| | | }) |
| | | |
| | | const dictObj = inject('dictObj') // 擅长任务类型 |
| | | const workOrderTypeXT = inject('workOrderTypeXT', ref([])) |
| | | |
| | | const flyingHandList = inject('flyingHandList') // 飞手列表 |
| | | const flyingHandEditList = inject('flyingHandEditList') // 飞手建档列表 |
| | | |
| | | |
| | | const emit = defineEmits(['update:modelValue', 'confirm']) |
| | | |
| | |
| | | const dialogTitle = computed(() => { |
| | | switch (props.dialogType) { |
| | | case 'add': |
| | | return '添加飞手信息' |
| | | return '飞手建档' |
| | | case 'edit': |
| | | return '编辑飞手信息' |
| | | return '编辑' |
| | | case 'view': |
| | | return '查看飞手信息' |
| | | return '查看' |
| | | default: |
| | | return '飞手信息' |
| | | } |
| | | }) |
| | | |
| | | const formRef = ref(null) |
| | | const formData = reactive({ |
| | | |
| | | const initForm = () => ({ |
| | | flyerName: '', |
| | | flyerId: '', |
| | | flyerPhone: '', |
| | |
| | | projectExperience: '', |
| | | technicalStrength: '', |
| | | skilledUavType: '', |
| | | skilledTaskType: [], |
| | | certification: [], // 证书 |
| | | regionCode: '', // 区域编码 |
| | | flyerAddress: '', // 飞手地址 |
| | | }) |
| | | |
| | | const formData = ref(initForm()) // 表单数据 |
| | | |
| | | |
| | | // const rules = { |
| | | // flyerId: fieldRules(true), |
| | | // flyerPhone: fieldRules(true, 50), |
| | | // flightHours: fieldRules(true, 50), |
| | | // technicalSkills: fieldRules(true, 50), |
| | | // skilledTaskType: fieldRules(true), |
| | | // projectExperience: fieldRules(true), |
| | | // technicalStrength: fieldRules(true), |
| | | // skilledUavType: fieldRules(true, 50), |
| | | // } |
| | | |
| | | const rules = { |
| | | flyerId: [ |
| | | { required: true, message: '请输入', trigger: 'blur' } |
| | | ], |
| | | flyerPhone: [ |
| | | { required: false, message: '请输入', trigger: 'blur' }, |
| | | { pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号', trigger: 'blur' } |
| | | ], |
| | | flightHours: [ |
| | | { required: true, message: '请输入', trigger: 'blur' }, |
| | | { type: 'number', min: 0, message: '飞行时长必须大于等于0', trigger: 'blur' } |
| | | ], |
| | | // flyerPhone: [ |
| | | // { required: true, message: '请输入', trigger: 'blur' }, |
| | | // { pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号', trigger: 'blur' } |
| | | // ], |
| | | // flightHours: [ |
| | | // { required: true, message: '请输入', trigger: 'blur' }, |
| | | // { type: 'number', min: 0, message: '飞行时长必须大于等于0', trigger: 'blur' } |
| | | // ], |
| | | technicalSkills: [ |
| | | { required: true, message: '请选择', trigger: 'change' } |
| | | ], |
| | |
| | | watch( |
| | | () => props.flyingHandData, |
| | | (newData) => { |
| | | formData.value = initForm() |
| | | if (newData) { |
| | | Object.assign(formData, newData) |
| | | formData.flightHours = Number(newData.flightHours) |
| | | Object.assign(formData.value, newData) |
| | | formData.value.flightHours = Number(newData.flightHours) |
| | | formData.value.skilledTaskType = newData.skilledTaskType || [] |
| | | } |
| | | }, |
| | | { deep: true, immediate: true } |
| | |
| | | // 处理选择飞手姓名 |
| | | function handleChange(val) { |
| | | const result = flyingHandList.value.find(item => item.id === val) || [] |
| | | formData.flyerName = result.name |
| | | formData.certification = formData.certification.concat(result.licenseFrontFileUrl || [], result.licenseBackFileUrl || []) |
| | | formData.value.flyerName = result.name |
| | | formData.value.regionCode = result.regionCode |
| | | formData.value.flyerPhone = result.phone |
| | | formData.value.flightHours = result.duration || 0 |
| | | formData.value.flyerAddress = result.address |
| | | // formData.value.certification = formData.value.certification.concat(result.licenseFrontFileUrl || [], result.licenseBackFileUrl || []) |
| | | } |
| | | |
| | | |
| | |
| | | function resetForm() { |
| | | formRef.value?.resetFields() |
| | | // 重置为默认值 |
| | | Object.assign(formData, { |
| | | Object.assign(formData.value, { |
| | | flyerName: '', |
| | | flyerPhone: '', |
| | | flightHours: 0, |
| | | projectExperience: '', |
| | | technicalStrength: '', |
| | | skilledUavType: '', |
| | | skilledTaskType: '' |
| | | skilledTaskType: [] |
| | | }) |
| | | } |
| | | |
| | |
| | | |
| | | try { |
| | | if (props.dialogType === 'add') { |
| | | await submitFlyingHand(formData) |
| | | await submitFlyingHand(formData.value) |
| | | ElMessage.success('添加成功') |
| | | } else if (props.dialogType === 'edit') { |
| | | await submitFlyingHand(formData) |
| | | await submitFlyingHand(formData.value) |
| | | ElMessage.success('编辑成功') |
| | | } |
| | | emit('confirm') |
| | |
| | | margin-bottom: 20px; |
| | | } |
| | | } |
| | | </style> |
| | | </style> |