gaoluyang
9 小时以前 076bb96b437258f0e8cdbe184040e1e302b60d4b
src/views/equipmentManagement/inspectionManagement/components/formDia.vue
@@ -1,102 +1,116 @@
<template>
  <div>
    <el-dialog :title="operationType === 'add' ? '新增巡检任务' : '编辑巡检任务'"
               v-model="dialogVisitable" width="800px" @close="cancel">
      <el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
        <el-row>
          <el-col :span="12">
            <el-form-item label="设备名称" prop="taskId">
              <el-select v-model="form.taskId" @change="setDeviceModel">
                <el-option
                  v-for="(item, index) in deviceOptions"
                  :key="index"
                  :label="item.deviceName"
                  :value="item.id"
                ></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="巡检人" prop="inspector">
              <el-select v-model="form.inspector" placeholder="请选择" multiple clearable>
                <el-option v-for="item in userList" :label="item.nickName" :value="item.userId" :key="item.userId"/>
              </el-select>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="备注" prop="remarks">
              <el-input v-model="form.remarks" placeholder="请输入备注" type="textarea" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="任务频率" prop="frequencyType">
              <el-select v-model="form.frequencyType" placeholder="请选择" clearable>
                <el-option label="每日" value="DAILY"/>
                <el-option label="每周" value="WEEKLY"/>
                <el-option label="每月" value="MONTHLY"/>
                <!-- <el-option label="季度" value="QUARTERLY"/> -->
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="12" v-if="form.frequencyType === 'DAILY' && form.frequencyType">
            <el-form-item label="日期" prop="frequencyDetail">
              <el-time-picker v-model="form.frequencyDetail" placeholder="选择时间" format="HH:mm"
                              value-format="HH:mm" />
            </el-form-item>
          </el-col>
          <el-col :span="12" v-if="form.frequencyType === 'WEEKLY' && form.frequencyType">
            <el-form-item label="日期" prop="frequencyDetail">
              <el-select v-model="form.week" placeholder="请选择" clearable style="width: 50%">
                <el-option label="周一" value="MON"/>
                <el-option label="周二" value="TUE"/>
                <el-option label="周三" value="WED"/>
                <el-option label="周四" value="THU"/>
                <el-option label="周五" value="FRI"/>
                <el-option label="周六" value="SAT"/>
                <el-option label="周日" value="SUN"/>
              </el-select>
              <el-time-picker v-model="form.time" placeholder="选择时间" format="HH:mm"
                              value-format="HH:mm"  style="width: 50%"/>
            </el-form-item>
          </el-col>
          <el-col :span="12" v-if="form.frequencyType === 'MONTHLY' && form.frequencyType">
            <el-form-item label="日期" prop="frequencyDetail">
              <el-date-picker
                  v-model="form.frequencyDetail"
                  type="datetime"
                  clearable
                  placeholder="选择开始日期"
                  format="DD,HH:mm"
                  value-format="DD,HH:mm"
              />
            </el-form-item>
          </el-col>
          <el-col :span="12" v-if="form.frequencyType === 'QUARTERLY' && form.frequencyType">
            <el-form-item label="日期" prop="frequencyDetail">
              <el-date-picker
                  v-model="form.frequencyDetail"
                  type="datetime"
                  clearable
                  placeholder="选择开始日期"
                  format="MM,DD,HH:mm"
                  value-format="MM,DD,HH:mm"
              />
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <template #footer>
        <div class="dialog-footer">
          <el-button @click="cancel">取消</el-button>
          <el-button type="primary" @click="submitForm">保存</el-button>
        </div>
      </template>
    </el-dialog>
  </div>
   <div>
      <el-dialog :title="operationType === 'add' ? '新增巡检任务' : '编辑巡检任务'"
                      v-model="dialogVisitable" width="800px" @close="cancel">
         <el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
            <el-row>
               <el-col :span="12">
                  <el-form-item label="设备名称" prop="taskId">
                     <el-select v-model="form.taskId" @change="setDeviceModel" filterable>
                        <el-option
                           v-for="(item, index) in deviceOptions"
                           :key="index"
                           :label="item.deviceName"
                           :value="item.id"
                        ></el-option>
                     </el-select>
                  </el-form-item>
               </el-col>
               <el-col :span="12">
                  <el-form-item label="巡检人" prop="inspector">
                     <el-select v-model="form.inspector"                 filterable
                                     default-first-option
                                     :reserve-keyword="false" placeholder="请选择" multiple clearable>
                        <el-option v-for="item in userList" :label="item.nickName" :value="item.userId" :key="item.userId"/>
                     </el-select>
                  </el-form-item>
               </el-col>
            </el-row>
            <el-row>
               <el-col :span="12">
                  <el-form-item label="备注" prop="remarks">
                     <el-input v-model="form.remarks" placeholder="请输入备注" type="textarea" />
                  </el-form-item>
               </el-col>
               <el-col :span="12">
                  <el-form-item label="登记时间" prop="dateStr">
                     <el-date-picker
                        v-model="form.dateStr"
                        type="date"
                        placeholder="选择登记日期"
                        format="YYYY-MM-DD"
                        value-format="YYYY-MM-DD"
                        style="width: 100%"
                     />
                  </el-form-item>
               </el-col>
            </el-row>
            <el-row>
               <el-col :span="12">
                  <el-form-item label="任务频率" prop="frequencyType">
                     <el-select v-model="form.frequencyType" placeholder="请选择" clearable>
                        <el-option label="每日" value="DAILY"/>
                        <el-option label="每周" value="WEEKLY"/>
                        <el-option label="每月" value="MONTHLY"/>
                        <!-- <el-option label="季度" value="QUARTERLY"/> -->
                     </el-select>
                  </el-form-item>
               </el-col>
               <el-col :span="12" v-if="form.frequencyType === 'DAILY' && form.frequencyType">
                  <el-form-item label="日期" prop="frequencyDetail">
                     <el-time-picker v-model="form.frequencyDetail" placeholder="选择时间" format="HH:mm"
                                             value-format="HH:mm" />
                  </el-form-item>
               </el-col>
               <el-col :span="12" v-if="form.frequencyType === 'WEEKLY' && form.frequencyType">
                  <el-form-item label="日期" prop="frequencyDetail">
                     <el-select v-model="form.week" placeholder="请选择" clearable style="width: 50%">
                        <el-option label="周一" value="MON"/>
                        <el-option label="周二" value="TUE"/>
                        <el-option label="周三" value="WED"/>
                        <el-option label="周四" value="THU"/>
                        <el-option label="周五" value="FRI"/>
                        <el-option label="周六" value="SAT"/>
                        <el-option label="周日" value="SUN"/>
                     </el-select>
                     <el-time-picker v-model="form.time" placeholder="选择时间" format="HH:mm"
                                             value-format="HH:mm"  style="width: 50%"/>
                  </el-form-item>
               </el-col>
               <el-col :span="12" v-if="form.frequencyType === 'MONTHLY' && form.frequencyType">
                  <el-form-item label="日期" prop="frequencyDetail">
                     <el-date-picker
                        v-model="form.frequencyDetail"
                        type="datetime"
                        clearable
                        placeholder="选择开始日期"
                        format="DD,HH:mm"
                        value-format="DD,HH:mm"
                     />
                  </el-form-item>
               </el-col>
               <el-col :span="12" v-if="form.frequencyType === 'QUARTERLY' && form.frequencyType">
                  <el-form-item label="日期" prop="frequencyDetail">
                     <el-date-picker
                        v-model="form.frequencyDetail"
                        type="datetime"
                        clearable
                        placeholder="选择开始日期"
                        format="MM,DD,HH:mm"
                        value-format="MM,DD,HH:mm"
                     />
                  </el-form-item>
               </el-col>
            </el-row>
         </el-form>
         <template #footer>
            <div class="dialog-footer">
               <el-button @click="cancel">取消</el-button>
               <el-button type="primary" @click="submitForm">保存</el-button>
            </div>
         </template>
      </el-dialog>
   </div>
</template>
<script setup>
@@ -113,115 +127,117 @@
const operationType = ref('add');
const deviceOptions = ref([]);
const data = reactive({
  form: {
    taskId: undefined,
    taskName: undefined,
    inspector: '',
    inspectorIds: '',
    remarks: '',
    frequencyType: '',
    frequencyDetail: '',
    week: '',
    time: ''
  },
  rules: {
    taskId: [{ required: true, message: "请选择设备", trigger: "change" },],
    inspector: [{ required: true, message: "请输入巡检人", trigger: "blur" },],
  }
   form: {
      taskId: undefined,
      taskName: undefined,
      inspector: '',
      inspectorIds: '',
      remarks: '',
      frequencyType: '',
      frequencyDetail: '',
      week: '',
      time: '',
      dateStr: ''
   },
   rules: {
      taskId: [{ required: true, message: "请选择设备", trigger: "change" },],
      inspector: [{ required: true, message: "请输入巡检人", trigger: "blur" },],
      dateStr: [{ required: true, message: "请选择登记时间", trigger: "change" }]
   }
})
const { form, rules } = toRefs(data)
const userList = ref([])
const loadDeviceName = async () => {
  const { data } = await getDeviceLedger();
  deviceOptions.value = data;
   const { data } = await getDeviceLedger();
   deviceOptions.value = data;
};
const setDeviceModel = (id) => {
  const option = deviceOptions.value.find((item) => item.id === id);
  if (option) {
    form.value.taskName = option.deviceName;
  }
   const option = deviceOptions.value.find((item) => item.id === id);
   if (option) {
      form.value.taskName = option.deviceName;
   }
}
// 打开弹框
const openDialog = async (type, row) => {
  dialogVisitable.value = true
  operationType.value = type
  // 重置表单
  resetForm();
  // 加载用户列表
  userListNoPageByTenantId().then((res) => {
    userList.value = res.data;
  });
  // 加载设备列表
  await loadDeviceName();
  if (type === 'edit' && row) {
    form.value = {...row}
    form.value.inspector = form.value.inspectorIds.split(',').map(Number)
    // 如果有设备ID,自动设置设备信息
    if (form.value.taskId) {
      setDeviceModel(form.value.taskId);
    }
  }
   dialogVisitable.value = true
   operationType.value = type
   // 重置表单
   resetForm();
   // 加载用户列表
   userListNoPageByTenantId().then((res) => {
      userList.value = res.data;
   });
   // 加载设备列表
   await loadDeviceName();
   if (type === 'edit' && row) {
      form.value = {...row}
      form.value.inspector = form.value.inspectorIds.split(',').map(Number)
      // 如果有设备ID,自动设置设备信息
      if (form.value.taskId) {
         setDeviceModel(form.value.taskId);
      }
   }
}
// 关闭对话框
const cancel = () => {
  resetForm()
  dialogVisitable.value = false
  emit('closeDia')
   resetForm()
   dialogVisitable.value = false
   emit('closeDia')
}
// 重置表单函数
const resetForm = () => {
  if (proxy.$refs.formRef) {
    proxy.$refs.formRef.resetFields()
  }
  // 重置表单数据确保设备信息正确重置
  form.value = {
    taskId: undefined,
    taskName: undefined,
    inspector: '',
    inspectorIds: '',
    remarks: '',
    frequencyType: '',
    frequencyDetail: '',
    week: '',
    time: ''
  }
   if (proxy.$refs.formRef) {
      proxy.$refs.formRef.resetFields()
   }
   // 重置表单数据确保设备信息正确重置
   form.value = {
      taskId: undefined,
      taskName: undefined,
      inspector: '',
      inspectorIds: '',
      remarks: '',
      frequencyType: '',
      frequencyDetail: '',
      week: '',
      time: ''
   }
}
// 提交表单
const submitForm = () => {
  proxy.$refs["formRef"].validate(async valid => {
    if (valid) {
      try {
        form.value.inspectorIds = form.value.inspector.join(',')
        delete form.value.inspector
        if (form.value.frequencyType === 'WEEKLY') {
          let frequencyDetail = ''
          frequencyDetail = form.value.week + ',' + form.value.time
          form.value.frequencyDetail = frequencyDetail
        }
        let res = await userStore.getInfo()
        form.value.registrantId = res.user.userId
        await addOrEditTimingTask(form.value)
        cancel()
        proxy.$modal.msgSuccess('提交成功')
      } catch (error) {
        proxy.$modal.msgError('提交失败,请重试')
      }
    }
  })
   proxy.$refs["formRef"].validate(async valid => {
      if (valid) {
         try {
            form.value.inspectorIds = form.value.inspector.join(',')
            delete form.value.inspector
            if (form.value.frequencyType === 'WEEKLY') {
               let frequencyDetail = ''
               frequencyDetail = form.value.week + ',' + form.value.time
               form.value.frequencyDetail = frequencyDetail
            }
            let res = await userStore.getInfo()
            form.value.registrantId = res.user.userId
            await addOrEditTimingTask(form.value)
            cancel()
            proxy.$modal.msgSuccess('提交成功')
         } catch (error) {
            proxy.$modal.msgError('提交失败,请重试')
         }
      }
   })
}
defineExpose({ openDialog })
</script>