From b9e53d7500e3497f8659fc373e6c707071b6dfb7 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 27 二月 2026 13:57:56 +0800
Subject: [PATCH] 金鹰黄金 1.设备报修和保养添加审批流程 2.设备保养流程添加定任务管理

---
 src/views/equipmentManagement/repair/Modal/RepairModal.vue |  198 ++++++++++++++++++++++++++++++++-----------------
 1 files changed, 128 insertions(+), 70 deletions(-)

diff --git a/src/views/equipmentManagement/repair/Modal/RepairModal.vue b/src/views/equipmentManagement/repair/Modal/RepairModal.vue
index 9f86722..20c9c8d 100644
--- a/src/views/equipmentManagement/repair/Modal/RepairModal.vue
+++ b/src/views/equipmentManagement/repair/Modal/RepairModal.vue
@@ -1,10 +1,17 @@
 <template>
-  <el-dialog v-model="visible" :title="modalOptions.title" @close="close">
-    <el-form :model="form" :rules="rules" ref="formRef" label-width="100px">
+  <FormDialog
+    v-model="visible"
+    :title="id ? '缂栬緫璁惧鎶ヤ慨' : '鏂板璁惧鎶ヤ慨'"
+    width="800px"
+    @confirm="sendForm"
+    @cancel="handleCancel"
+    @close="handleClose"
+  >
+    <el-form :model="form" :rules="rules" label-width="100px" ref="formRef">
       <el-row>
         <el-col :span="12">
-          <el-form-item label="璁惧鍚嶇О" prop="deviceLedgerId">
-            <el-select v-model="form.deviceLedgerId" filterable allow-create default-first-option @change="setDeviceModel">
+          <el-form-item label="璁惧鍚嶇О">
+            <el-select v-model="form.deviceLedgerId" @change="setDeviceModel" filterable>
               <el-option
                 v-for="(item, index) in deviceOptions"
                 :key="index"
@@ -16,11 +23,15 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="瑙勬牸鍨嬪彿">
-            <el-input v-model="form.deviceModel" placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�" disabled />
+            <el-input
+              v-model="form.deviceModel"
+              placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�"
+              disabled
+            />
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="鎶ヤ慨鏃ユ湡" prop="repairTime">
+          <el-form-item label="鎶ヤ慨鏃ユ湡">
             <el-date-picker
               v-model="form.repairTime"
               placeholder="璇烽�夋嫨鎶ヤ慨鏃ユ湡"
@@ -33,82 +44,116 @@
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="鎶ヤ慨浜�" prop="repairName">
+          <el-form-item label="鎶ヤ慨浜�">
             <el-input v-model="form.repairName" placeholder="璇疯緭鍏ユ姤淇汉" />
           </el-form-item>
         </el-col>
+        <el-col :span="12">
+          <el-form-item label="瀹℃壒浜�" prop="auditName">
+            <el-select
+              v-model="form.auditName"
+              placeholder="璇烽�夋嫨瀹℃壒浜�"
+              filterable
+              clearable
+              style="width: 100%"
+            >
+              <el-option
+                v-for="user in userOptions"
+                :key="user.userId"
+                :label="user.nickName"
+                :value="user.nickName"
+              />
+            </el-select>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row v-if="id">
+        <el-col :span="12">
+          <el-form-item label="鎶ヤ慨鐘舵��">
+            <el-select v-model="form.status">
+              <el-option label="寰呯淮淇�" :value="0"></el-option>
+              <el-option label="瀹岀粨" :value="1"></el-option>
+              <el-option label="寰呭鏍�" :value="2"></el-option>
+              <el-option label="瀹℃牳涓嶉�氳繃" :value="3"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
         <el-col :span="24">
-          <el-form-item label="鏁呴殰鐜拌薄" prop="remark">
-            <el-input v-model="form.remark" :rows="2" type="textarea" placeholder="璇疯緭鍏ユ晠闅滅幇璞�" />
+          <el-form-item label="鏁呴殰鐜拌薄">
+            <el-input
+              v-model="form.remark"
+              :rows="2"
+              type="textarea"
+              placeholder="璇疯緭鍏ユ晠闅滅幇璞�"
+            />
           </el-form-item>
         </el-col>
       </el-row>
     </el-form>
-    <template #footer>
-			<el-button type="primary" @click="sendForm" :loading="loading">
-				{{ modalOptions.confirmText }}
-			</el-button>
-      <el-button @click="closeModal">{{ modalOptions.cancelText }}</el-button>
-    </template>
-  </el-dialog>
-  
+  </FormDialog>
 </template>
 
 <script setup>
-import { ref, nextTick } from "vue";
-import { useModal } from "@/hooks/useModal";
-import useFormData from "@/hooks/useFormData";
-import useUserStore from "@/store/modules/user";
+import FormDialog from "@/components/Dialog/FormDialog.vue";
 import {
   addRepair,
   editRepair,
   getRepairById,
 } from "@/api/equipmentManagement/repair";
-import { getDeviceLedger } from "@/api/equipmentManagement/ledger";
 import { ElMessage } from "element-plus";
+import dayjs from "dayjs";
+import useFormData from "@/hooks/useFormData";
+import { getDeviceLedger } from "@/api/equipmentManagement/ledger";
+import useUserStore from "@/store/modules/user";
+import { userListNoPageByTenantId } from "@/api/system/user";
 
 defineOptions({
   name: "璁惧鎶ヤ慨寮圭獥",
 });
 
 const emits = defineEmits(["ok"]);
-const {
-  id,
-  visible,
-  loading,
-  openModal,
-  modalOptions,
-  handleConfirm,
-  closeModal,
-} = useModal({ title: "璁惧鎶ヤ慨" });
+
+const id = ref();
+const visible = ref(false);
+const loading = ref(false);
+const formRef = ref();
 
 const userStore = useUserStore();
 const deviceOptions = ref([]);
-const formRef = ref();
-const { form, resetForm } = useFormData({
-  deviceLedgerId: undefined, // 璁惧Id
-  deviceName: undefined, // 璁惧鍚嶇О
-  deviceModel: undefined, // 瑙勬牸鍨嬪彿
-  repairTime: undefined, // 鎶ヤ慨鏃ユ湡
-  repairName: userStore.nickName, // 鎶ヤ慨浜�
-  remark: undefined, // 鏁呴殰鐜拌薄
-});
-
-const rules = {
-  deviceLedgerId: [{ required: true, message: "璇烽�夋嫨璁惧鍚嶇О", trigger: "change" }],
-  repairTime: [{ required: true, message: "璇烽�夋嫨鎶ヤ慨鏃ユ湡", trigger: "change" }],
-  repairName: [{ required: true, message: "璇疯緭鍏ユ姤淇汉", trigger: "blur" }],
-  remark: [{ required: true, message: "璇疯緭鍏ユ晠闅滅幇璞�", trigger: "blur" }],
-};
+const userOptions = ref([]);
 
 const loadDeviceName = async () => {
   const { data } = await getDeviceLedger();
   deviceOptions.value = data;
 };
 
-const setDeviceModel = (id) => {
-  const option = deviceOptions.value.find((item) => item.id === id);
-  form.deviceModel = option ? option.deviceModel : undefined;
+const loadUserOptions = async () => {
+  const res = await userListNoPageByTenantId();
+  userOptions.value = res?.data ?? [];
+};
+
+const { form, resetForm } = useFormData({
+  deviceLedgerId: undefined, // 璁惧Id
+  deviceName: undefined, // 璁惧鍚嶇О
+  deviceModel: undefined, // 瑙勬牸鍨嬪彿
+  repairTime: dayjs().format("YYYY-MM-DD"), // 鎶ヤ慨鏃ユ湡锛岄粯璁ゅ綋澶�
+  repairName: userStore.nickName, // 鎶ヤ慨浜�
+  auditName: undefined, // 瀹℃壒浜�
+  remark: undefined, // 鏁呴殰鐜拌薄
+  status: 0, // 鎶ヤ慨鐘舵��
+});
+
+const rules = {
+  auditName: [
+    { required: true, message: "璇烽�夋嫨瀹℃壒浜�", trigger: "change" },
+  ],
+};
+
+const setDeviceModel = (deviceId) => {
+  const option = deviceOptions.value.find((item) => item.id === deviceId);
+  form.deviceModel = option.deviceModel;
 };
 
 const setForm = (data) => {
@@ -116,44 +161,55 @@
   form.deviceName = data.deviceName;
   form.deviceModel = data.deviceModel;
   form.repairTime = data.repairTime;
-  form.repairName = data.repairName ?? userStore.nickName;
+  form.repairName = data.repairName;
+  form.auditName = data.auditName;
   form.remark = data.remark;
+  form.status = data.status;
 };
 
 const sendForm = async () => {
-  await formRef.value.validate(async (valid) => {
+  await formRef.value?.validate(async (valid) => {
     if (!valid) return;
     loading.value = true;
-    const payload = { ...form };
-    const { code } = id.value
-      ? await editRepair({ id: id.value, ...payload })
-      : await addRepair(payload);
-    if (code == 200) {
-      ElMessage.success(`${id.value ? "缂栬緫" : "鏂板"}鎶ヤ慨鎴愬姛`);
-      closeModal();
-      emits("ok");
+    try {
+      const { code } = id.value
+        ? await editRepair({ id: unref(id), ...form })
+        : await addRepair(form);
+      if (code == 200) {
+        ElMessage.success(`${id.value ? "缂栬緫" : "鏂板"}鎶ヤ慨鎴愬姛`);
+        visible.value = false;
+        emits("ok");
+      }
+    } finally {
+      loading.value = false;
     }
-    loading.value = false;
   });
 };
 
+const handleCancel = () => {
+  resetForm();
+  visible.value = false;
+};
+
+const handleClose = () => {
+  resetForm();
+  visible.value = false;
+};
+
 const openAdd = async () => {
-  openModal();
+  id.value = undefined;
+  visible.value = true;
   await nextTick();
-  await loadDeviceName();
+  await Promise.all([loadDeviceName(), loadUserOptions()]);
 };
 
 const openEdit = async (editId) => {
   const { data } = await getRepairById(editId);
-  openModal(editId);
+  id.value = editId;
+  visible.value = true;
   await nextTick();
-  await loadDeviceName();
+  await Promise.all([loadDeviceName(), loadUserOptions()]);
   setForm(data);
-};
-
-const close = () => {
-  resetForm();
-  closeModal();
 };
 
 defineExpose({
@@ -161,3 +217,5 @@
   openEdit,
 });
 </script>
+
+<style lang="scss" scoped></style>

--
Gitblit v1.9.3