zhangwencui
2 天以前 cc13825bb6b3f4185e3db8aa29e58990ee4e01c0
src/views/equipmentManagement/inspectionManagement/components/formDia.vue
@@ -1,90 +1,185 @@
<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">
               v-model="dialogVisitable"
               width="900px"
               @close="cancel">
      <el-form ref="formRef"
               :model="form"
               :rules="rules"
               label-width="180px">
        <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 label="巡检任务名称"
                          prop="taskName">
              <el-input v-model="form.taskName"
                        placeholder="请输入巡检任务名称"
                        type="textarea" />
              <!-- <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-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 label="必须拍照视为巡检成功"
                          prop="takePhone">
              <el-radio-group v-model="form.takePhone">
                <el-radio :label="true">是</el-radio>
                <el-radio :label="false">否</el-radio>
              </el-radio-group>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="上传相册照片"
                          prop="takeAlbum">
              <el-radio-group v-model="form.takeAlbum">
                <el-radio :label="false">不可</el-radio>
                <el-radio :label="true">可</el-radio>
              </el-radio-group>
            </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-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"
          <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-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-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-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-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-row>
          <el-col :span="12"
                  v-if="form.frequencyType === 'DAILY' && form.frequencyType">
            <el-form-item label="时限(小时)"
                          prop="inspectionDeadline">
              <el-input v-model="form.inspectionDeadline"
                        type="number"
                        placeholder="请输入备注">
              </el-input>
            </el-form-item>
          </el-col>
          <el-col :span="12"
                  v-if="form.frequencyType === 'WEEKLY' && form.frequencyType">
            <el-form-item label="时限(天)"
                          prop="inspectionDeadline">
              <el-input v-model="form.inspectionDeadline"
                        placeholder="请输入备注"
                        type="number">
              </el-input>
            </el-form-item>
          </el-col>
          <el-col :span="12"
                  v-if="form.frequencyType === 'MONTHLY' && form.frequencyType">
            <el-form-item label="时限(天)"
                          prop="inspectionDeadline">
              <el-input v-model="form.inspectionDeadline"
                        placeholder="请输入备注"
                        type="number">
              </el-input>
            </el-form-item>
          </el-col>
        </el-row>
@@ -92,7 +187,8 @@
      <template #footer>
        <div class="dialog-footer">
          <el-button @click="cancel">取消</el-button>
          <el-button type="primary" @click="submitForm">保存</el-button>
          <el-button type="primary"
                     @click="submitForm">保存</el-button>
        </div>
      </template>
    </el-dialog>
@@ -100,188 +196,205 @@
</template>
<script setup>
import {reactive, ref, getCurrentInstance, toRefs} from "vue";
import useUserStore from '@/store/modules/user'
import {addOrEditTimingTask} from "@/api/inspectionManagement/index.js";
import {userListNoPageByTenantId} from "@/api/system/user.js";
import { getDeviceLedger } from "@/api/equipmentManagement/ledger";
  import { reactive, ref, getCurrentInstance, toRefs } from "vue";
  import useUserStore from "@/store/modules/user";
  import { addOrEditTimingTask } from "@/api/inspectionManagement/index.js";
  import { userListNoPageByTenantId } from "@/api/system/user.js";
  import { getDeviceLedger } from "@/api/equipmentManagement/ledger";
const { proxy } = getCurrentInstance()
const emit = defineEmits()
const userStore = useUserStore()
const dialogVisitable = ref(false);
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" },],
      dateStr: [{ required: true, message: "请选择登记时间", trigger: "change" }],
      frequencyType: [{ required: true, message: "请选择任务频率", trigger: "change" }],
      frequencyDetail: [
         {
            required: true,
            message: "请选择日期",
            trigger: "change",
            validator: (rule, value, callback) => {
               if (!form.value.frequencyType) {
                  callback()
                  return
               }
               if (form.value.frequencyType === 'WEEKLY') {
                  if (!form.value.week || !form.value.time) {
                     callback(new Error("请选择日期和时间"))
                  } else {
                     callback()
                  }
               } else {
                  if (!value) {
                     callback(new Error("请选择日期"))
                  } else {
                     callback()
                  }
               }
            }
         }
      ],
      week: [
         {
            required: true,
            message: "请选择星期",
            trigger: "change",
            validator: (rule, value, callback) => {
               if (form.value.frequencyType === 'WEEKLY' && !value) {
                  callback(new Error("请选择星期"))
               } else {
                  callback()
               }
            }
         }
      ],
      time: [
         {
            required: true,
            message: "请选择时间",
            trigger: "change",
            validator: (rule, value, callback) => {
               if (form.value.frequencyType === 'WEEKLY' && !value) {
                  callback(new Error("请选择时间"))
               } else {
                  callback()
               }
            }
         }
      ]
   }
})
const { form, rules } = toRefs(data)
const userList = ref([])
const loadDeviceName = async () => {
  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 openDialog = async (type, row) => {
  dialogVisitable.value = true
  operationType.value = type
  // 重置表单
  resetForm();
  // 加载用户列表
  userListNoPageByTenantId().then((res) => {
    userList.value = res.data;
  const { proxy } = getCurrentInstance();
  const emit = defineEmits();
  const userStore = useUserStore();
  const dialogVisitable = ref(false);
  const operationType = ref("add");
  const deviceOptions = ref([]);
  const data = reactive({
    form: {
      taskId: undefined,
      taskName: undefined,
      inspector: "",
      inspectorIds: "",
      remarks: "",
      frequencyType: "",
      frequencyDetail: "",
      week: "",
      time: "",
      takePhone: true,
      takeAlbum: false,
      inspectionDeadline: "",
    },
    rules: {
      // taskId: [{ required: true, message: "请选择设备", trigger: "change" }],
      taskName: [
        { required: true, message: "请输入巡检任务名称", trigger: "blur" },
      ],
      inspector: [{ required: true, message: "请输入巡检人", trigger: "blur" }],
      dateStr: [{ required: true, message: "请选择登记时间", trigger: "change" }],
      frequencyType: [
        { required: true, message: "请选择任务频率", trigger: "change" },
      ],
      frequencyDetail: [
        {
          required: true,
          message: "请选择日期",
          trigger: "change",
          validator: (rule, value, callback) => {
            if (!form.value.frequencyType) {
              callback();
              return;
            }
            if (form.value.frequencyType === "WEEKLY") {
              if (!form.value.week || !form.value.time) {
                callback(new Error("请选择日期和时间"));
              } else {
                callback();
              }
            } else {
              if (!value) {
                callback(new Error("请选择日期"));
              } else {
                callback();
              }
            }
          },
        },
      ],
      inspectionDeadline: [
        {
          required: true,
          message: "请输入时限",
          trigger: "blur",
        },
      ],
      week: [
        {
          required: true,
          message: "请选择星期",
          trigger: "change",
          validator: (rule, value, callback) => {
            if (form.value.frequencyType === "WEEKLY" && !value) {
              callback(new Error("请选择星期"));
            } else {
              callback();
            }
          },
        },
      ],
      time: [
        {
          required: true,
          message: "请选择时间",
          trigger: "change",
          validator: (rule, value, callback) => {
            if (form.value.frequencyType === "WEEKLY" && !value) {
              callback(new Error("请选择时间"));
            } else {
              callback();
            }
          },
        },
      ],
    },
  });
  // 加载设备列表
  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 { form, rules } = toRefs(data);
  const userList = ref([]);
  const loadDeviceName = async () => {
    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 cancel = () => {
  resetForm()
  dialogVisitable.value = false
  emit('closeDia')
}
  // 打开弹框
  const openDialog = async (type, row) => {
    dialogVisitable.value = true;
    operationType.value = type;
// 重置表单函数
const resetForm = () => {
  if (proxy.$refs.formRef) {
    proxy.$refs.formRef.resetFields()
  }
  // 重置表单数据确保设备信息正确重置
  form.value = {
    taskId: undefined,
    taskName: undefined,
    inspector: '',
    inspectorIds: '',
    remarks: '',
    frequencyType: '',
    frequencyDetail: '',
    week: '',
    time: ''
  }
}
    // 重置表单
    resetForm();
// 提交表单
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
    // 加载用户列表
    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");
  };
  // 重置表单函数
  const resetForm = () => {
    if (proxy.$refs.formRef) {
      proxy.$refs.formRef.resetFields();
    }
    // 重置表单数据确保设备信息正确重置
    form.value = {
      taskId: undefined,
      taskName: undefined,
      inspector: "",
      inspectorIds: "",
      remarks: "",
      frequencyType: "",
      frequencyDetail: "",
      week: "",
      time: "",
      takePhone: true,
      takeAlbum: false,
      inspectionDeadline: "",
    };
  };
  // 提交表单
  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("提交失败,请重试");
        }
        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 })
    });
  };
  defineExpose({ openDialog });
</script>
<style scoped>
</style>