吉安感知网项目-前端
chenyao
2026-01-27 0b724713be5d2f9cdd2d41adca9aaec413a47189
applications/task-work-order/src/views/orderView/flyingHand/FlyingHandDialog.vue
@@ -16,12 +16,14 @@
      >
         <el-row>
            <el-col :span="12">
               <el-form-item label="飞手姓名" prop="flyerName">
               <el-form-item label="飞手姓名" prop="flyerId">
                  <el-select
                     class="gd-select"
                     popper-class="gd-select-popper"
                     v-model="formData.flyerName"
                     placeholder="请选择飞手姓名"
                     v-model="formData.flyerId"
                     placeholder="请选择"
                     clearable
                     @change="handleChange"
                     :disabled="dialogType === 'view'"
                  >
                     <el-option
@@ -38,7 +40,7 @@
                  <el-input
                  class="gd-input"
                     v-model="formData.flyerPhone"
                     placeholder="请输入飞手电话"
                     placeholder="请输入"
                     :disabled="dialogType === 'view'"
                  />
               </el-form-item>
@@ -48,7 +50,7 @@
                  <el-input
                     class="gd-input"
                     v-model.number="formData.flightHours"
                     placeholder="请输入飞行时长"
                     placeholder="请输入"
                     type="number"
                     :disabled="dialogType === 'view'"
                  />
@@ -60,7 +62,7 @@
                     class="gd-select"
                     popper-class="gd-select-popper"
                     v-model="formData.technicalStrength"
                     placeholder="请选择技术特长"
                     placeholder="请选择"
                     :disabled="dialogType === 'view'"
                  >
                     <el-option
@@ -78,7 +80,8 @@
                     class="gd-select"
                     popper-class="gd-select-popper"
                     v-model="formData.skilledUavType"
                     placeholder="请选择擅长机型"
                     placeholder="请选择"
                     :disabled="dialogType === 'view'"
                     clearable
                     @change="handleSearch"
                  >
@@ -97,7 +100,7 @@
                     class="gd-select"
                     popper-class="gd-select-popper"
                     v-model="formData.skilledTaskType"
                     placeholder="请选择擅长任务类型"
                     placeholder="请选择"
                     :disabled="dialogType === 'view'"
                  >
                     <el-option
@@ -114,10 +117,22 @@
                  <el-input
                     class="gd-input"
                     v-model="formData.projectExperience"
                     placeholder="请输入项目经验"
                     placeholder="请输入"
                     type="textarea"
                     rows="3"
                     :disabled="dialogType === 'view'"
                  />
               </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>
@@ -140,6 +155,8 @@
import { ref, reactive, computed, watch, inject } from 'vue'
import { submitFlyingHand } from './flyingHandApi'
import { ElMessage } from 'element-plus'
import { fieldRules } from '@ztzf/utils'
const props = defineProps({
   modelValue: {
@@ -184,39 +201,41 @@
const formRef = ref(null)
const formData = reactive({
   flyerName: '',
   flyerId: '',
   flyerPhone: '',
   flightHours: 0,
   projectExperience: '',
   technicalStrength: '',
   skilledUavType: ''
   skilledUavType: '',
   certification: [], // 证书
})
const rules = {
   flyerName: [
      { required: true, message: '请输入飞手姓名', trigger: 'blur' }
   flyerId: [
      { required: true, message: '请输入', trigger: 'blur' }
   ],
   flyerPhone: [
      { required: false, message: '请输入飞手电话', trigger: 'blur' },
      { required: false, message: '请输入', trigger: 'blur' },
      { pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号', trigger: 'blur' }
   ],
   flightHours: [
      { required: true, message: '请输入飞行时长', trigger: 'blur' },
      { required: true, message: '请输入', trigger: 'blur' },
      { type: 'number', min: 0, message: '飞行时长必须大于等于0', trigger: 'blur' }
   ],
   technicalSkills: [
      { required: true, message: '请选择技术特长', trigger: 'change' }
      { required: true, message: '请选择', trigger: 'change' }
   ],
   skilledTaskType: [
      { required: true, message: '请选择擅长任务类型', trigger: 'change' }
      { required: true, message: '请选择', trigger: 'change' }
   ],
   projectExperience: [
      { required: true, message: '请输入项目经验', trigger: 'blur' }
      { required: true, message: '请输入', trigger: 'blur' }
   ],
   technicalStrength: [
      { required: true, message: '请选择技术特长', trigger: 'change' }
      { required: true, message: '请选择', trigger: 'change' }
   ],
   skilledUavType: [
      { required: true, message: '请选择擅长机型', trigger: 'change' }
      { required: true, message: '请选择', trigger: 'change' }
   ]
}
@@ -226,6 +245,7 @@
   (newData) => {
      if (newData) {
         Object.assign(formData, newData)
         formData.flightHours = Number(newData.flightHours)
      }
   },
   { deep: true, immediate: true }
@@ -237,6 +257,15 @@
   resetForm()
}
// 处理选择飞手姓名
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 || [])
}
// 重置表单
function resetForm() {
   formRef.value?.resetFields()