From bd9a631d2b597492307cd39f93c09cc3aa4db62d Mon Sep 17 00:00:00 2001
From: 张诺 <zhang_12370@163.com>
Date: 星期三, 07 一月 2026 15:23:14 +0800
Subject: [PATCH] 进销存·华玺砂浆》设备保修的新增保修添加金额和审批人开发 进销存·华玺砂浆》协同报销页面修改

---
 src/views/equipmentManagement/repair/Modal/RepairModal.vue |   33 ++++++++---
 src/views/equipmentManagement/repair/index.vue             |   48 +++++++++++++--
 src/hooks/usePaginationApi.jsx                             |    9 ++
 src/views/collaborativeApproval/approvalProcess/index.vue  |   10 +--
 src/views/equipmentManagement/repair/Form/RepairForm.vue   |   71 ++++++++++++++++++++---
 5 files changed, 135 insertions(+), 36 deletions(-)

diff --git a/src/hooks/usePaginationApi.jsx b/src/hooks/usePaginationApi.jsx
index f1e8967..4fe212e 100644
--- a/src/hooks/usePaginationApi.jsx
+++ b/src/hooks/usePaginationApi.jsx
@@ -76,6 +76,7 @@
   }
 
   async function getTableData() {
+
     // 濡傛灉杩欐鍜屼笂娆$殑filter涓嶅悓锛岄偅涔堝氨閲嶇疆椤电爜
     if (!isEqual(unref(filters), lastFilters)) {
       pagination.currentPage = 1;
@@ -87,7 +88,7 @@
       current: pagination.currentPage,
       size: pagination.pageSize
     }).then(({ code, data, msg, ...rest }) => {
-      if (code == 200) {
+      if (code === 200) {
         // pagination.currentPage = meta.current_page;
         // pagination.pageSize = meta.per_page;
         pagination.total = data.total;
@@ -99,7 +100,11 @@
         loading.value = false;
         ElMessage({ message: msg, type: "error" });
       }
-    });
+    }).catch(() => {
+        loading.value = false;
+        ElMessage({ message: msg, type: "error" });
+
+    }).finally(() => {});
   }
 
   function onSizeChange(val) {
diff --git a/src/views/collaborativeApproval/approvalProcess/index.vue b/src/views/collaborativeApproval/approvalProcess/index.vue
index 13e155b..cc90438 100644
--- a/src/views/collaborativeApproval/approvalProcess/index.vue
+++ b/src/views/collaborativeApproval/approvalProcess/index.vue
@@ -96,14 +96,12 @@
       }
     },
     formatType: (params) => {
-      if (params == 0) {
+      if (params === 0) {
         return "warning";
-      } else if (params == 1) {
-        return "primary";
-      } else if (params == 2) {
+      } else if (params === 2) {
         return "success";
-      } else if (params == 4) {
-        return "";
+      } else if (params === 3) {
+        return "danger";
       } else {
         return 'danger';
       }
diff --git a/src/views/equipmentManagement/repair/Form/RepairForm.vue b/src/views/equipmentManagement/repair/Form/RepairForm.vue
index 6697906..f374172 100644
--- a/src/views/equipmentManagement/repair/Form/RepairForm.vue
+++ b/src/views/equipmentManagement/repair/Form/RepairForm.vue
@@ -1,8 +1,8 @@
 <template>
-  <el-form :model="form" label-width="100px">
+  <el-form :model="form" ref="formModelRefs" :rules="rules" label-width="100px">
     <el-row>
       <el-col :span="12">
-        <el-form-item label="璁惧鍚嶇О">
+        <el-form-item label="璁惧鍚嶇О" prop="deviceLedgerId">
           <el-select v-model="form.deviceLedgerId" @change="setDeviceModel" filterable>
             <el-option
               v-for="(item, index) in deviceOptions"
@@ -14,7 +14,7 @@
         </el-form-item>
       </el-col>
       <el-col :span="12">
-        <el-form-item label="瑙勬牸鍨嬪彿">
+        <el-form-item label="瑙勬牸鍨嬪彿" prop="deviceModel">
           <el-input
             v-model="form.deviceModel"
             placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�"
@@ -23,7 +23,7 @@
         </el-form-item>
       </el-col>
       <el-col :span="12">
-        <el-form-item label="鎶ヤ慨鏃ユ湡">
+        <el-form-item label="鎶ヤ慨鏃ユ湡" prop="repairTime">
           <el-date-picker
             v-model="form.repairTime"
             placeholder="璇烽�夋嫨鎶ヤ慨鏃ユ湡"
@@ -36,15 +36,15 @@
         </el-form-item>
       </el-col>
       <el-col :span="12">
-        <el-form-item label="鎶ヤ慨浜�">
-          <el-input v-model="form.repairName" placeholder="璇疯緭鍏ユ姤淇汉" />
+        <el-form-item label="鎶ヤ慨浜哄憳" prop="repairName">
+          <el-input v-model="form.repairName" placeholder="璇疯緭鍏ユ姤淇汉鍛�" />
         </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-select v-model="form.status" prop="status">
             <el-option label="寰呯淮淇�" :value="0"></el-option>
             <el-option label="瀹岀粨" :value="1"></el-option>
             <el-option label="澶辫触" :value="2"></el-option>
@@ -53,8 +53,27 @@
       </el-col>
     </el-row>
     <el-row>
+      <el-col :span="12">
+        <el-form-item label="鎶ヤ慨閲戦" prop="maintenancePrice">
+          <el-input-number
+              style="width: 100%"
+              :min="0"
+              v-model="form.maintenancePrice"
+              placeholder="璇疯緭鍏ヤ繚淇噾棰�"
+          />
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item label="瀹℃壒浜哄憳" prop="approverId">
+          <el-select v-model="form.approverId" placeholder="璇烽�夋嫨瀹℃壒浜哄憳" clearable>
+            <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId" />
+          </el-select>
+        </el-form-item>
+      </el-col>
+    </el-row>
+    <el-row>
       <el-col :span="24">
-        <el-form-item label="鏁呴殰鐜拌薄">
+        <el-form-item label="鏁呴殰鐜拌薄" prop="remark">
           <el-input
             v-model="form.remark"
             :rows="2"
@@ -68,10 +87,12 @@
 </template>
 
 <script setup>
+import {onMounted} from "vue"
 import dayjs from "dayjs";
 import useFormData from "@/hooks/useFormData";
 import { getDeviceLedger } from "@/api/equipmentManagement/ledger";
 import useUserStore from "@/store/modules/user";
+import { userListNoPage } from "@/api/system/user.js";
 
 const { id } = defineProps(["id"])
 
@@ -81,10 +102,33 @@
 
 const userStore = useUserStore();
 const deviceOptions = ref([]);
+const formModelRefs = ref(null)
+const userList = ref(null)
 
 const loadDeviceName = async () => {
   const { data } = await getDeviceLedger();
   deviceOptions.value = data;
+};
+
+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" }],
+  maintenancePrice: [{ required: true, message: "璇疯緭鍏ヤ繚淇噾棰�", trigger: "blur" }],
+  approverId:[{required: true,message: "璇烽�夋嫨瀹℃壒浜�", trigger: "change"}]
+};
+
+// 鏍¢獙琛ㄥ崟鏄惁鍚堣
+const submitForm = async () => {
+  if (!formModelRefs.value) return false;
+
+  try {
+    await formModelRefs.value.validate();
+    return true; // 琛ㄥ崟楠岃瘉閫氳繃
+  } catch (error) {
+    return false; // 琛ㄥ崟楠岃瘉澶辫触
+  }
 };
 
 const { form, resetForm } = useFormData({
@@ -95,6 +139,7 @@
   repairName: userStore.nickName, // 鎶ヤ慨浜�
   remark: undefined, // 鏁呴殰鐜拌薄
   status: 0, // 鎶ヤ慨鐘舵��
+  maintenancePrice:0, // 淇濅慨閲戦
 });
 
 const setDeviceModel = (id) => {
@@ -114,17 +159,21 @@
   form.repairName = data.repairName;
   form.remark = data.remark;
   form.status = data.status;
+  form.maintenancePrice = data.maintenancePrice
 };
 
-// onMounted(() => {
-//   loadDeviceName();
-// });
+onMounted(async() => {
+  // loadDeviceName();
+  let userLists = await userListNoPage();
+  userList.value = userLists.data;
+});
 
 defineExpose({
   loadDeviceName,
   resetForm,
   getForm,
   setForm,
+  submitForm
 });
 </script>
 
diff --git a/src/views/equipmentManagement/repair/Modal/RepairModal.vue b/src/views/equipmentManagement/repair/Modal/RepairModal.vue
index c21b47a..e89b0ac 100644
--- a/src/views/equipmentManagement/repair/Modal/RepairModal.vue
+++ b/src/views/equipmentManagement/repair/Modal/RepairModal.vue
@@ -38,17 +38,32 @@
 } = useModal({ title: "璁惧鎶ヤ慨" });
 
 const sendForm = async () => {
-  loading.value = true;
-  const form = await repairFormRef.value.getForm();
-  const { code } = id.value
-    ? await editRepair({ id: unref(id), ...form })
-    : await addRepair(form);
-  if (code == 200) {
-    ElMessage.success(`${id ? "缂栬緫" : "鏂板"}鎶ヤ慨鎴愬姛`);
+  try {
+    // 寮�濮嬪姞杞�
+    loading.value = true;
+    // 鎻愪氦琛ㄥ崟骞惰幏鍙栨牎楠岀粨鏋�
+    const submitStatus = await repairFormRef.value.submitForm();
+    if (!submitStatus) {
+      // 濡傛灉琛ㄥ崟楠岃瘉澶辫触锛屽彇娑堝姞杞界姸鎬�
+      loading.value = false;
+      return;
+    }
+    // 鑾峰彇琛ㄥ崟鏁版嵁
+    const form = await repairFormRef.value.getForm();
+    // 鏍规嵁鏄惁鏈塈D鍐冲畾鏄紪杈戣繕鏄柊澧�
+    const { code } = id.value
+        ? await editRepair({ id: unref(id), ...form })
+        : await addRepair(form);
+    if (code === 200) {
+      ElMessage.success(`${id ? "缂栬緫" : "鏂板"}鎶ヤ慨鎴愬姛`);
+      emits("ok");
+    }
+  } catch (error) {
+  } finally {
+    // 鏃犺鎴愬姛杩樻槸澶辫触锛岄兘鍙栨秷鍔犺浇鐘舵��
+    loading.value = false;
     closeModal();
-    emits("ok");
   }
-  loading.value = false;
 };
 
 const openAdd = async () => {
diff --git a/src/views/equipmentManagement/repair/index.vue b/src/views/equipmentManagement/repair/index.vue
index 08cbcc2..de7f850 100644
--- a/src/views/equipmentManagement/repair/index.vue
+++ b/src/views/equipmentManagement/repair/index.vue
@@ -71,9 +71,10 @@
           <el-button
             type="primary"
             icon="Plus"
-            :disabled="multipleList.length !== 1"
+            :disabled="multipleList.length !== 1 || multipleList[0]?.status !== 1"
             @click="addMaintain"
           >
+
             鏂板缁翠慨
           </el-button>
           <el-button type="success" icon="Van" @click="addRepair">
@@ -86,7 +87,7 @@
             type="danger"
             icon="Delete"
             :disabled="multipleList.length <= 0"
-            @click="delRepairByIds(multipleList.map((item) => item.id))"
+            @click="delRepairByIds(multipleList)"
           >
             鎵归噺鍒犻櫎
           </el-button>
@@ -106,9 +107,12 @@
         @pagination="changePage"
       >
         <template #statusRef="{ row }">
-          <el-tag v-if="row.status === 2" type="danger">澶辫触</el-tag>
-          <el-tag v-if="row.status === 1" type="success">瀹岀粨</el-tag>
-          <el-tag v-if="row.status === 0" type="warning">寰呯淮淇�</el-tag>
+          <el-tag v-if="row.status === 5" type="danger">缁翠慨澶辫触</el-tag>
+          <el-tag v-if="row.status === 4" type="danger">缁翠慨鎴愬姛</el-tag>
+          <el-tag v-if="row.status === 3" type="danger">缁翠慨涓�</el-tag>
+          <el-tag v-if="row.status === 2" type="danger">瀹℃牳澶辫触</el-tag>
+          <el-tag v-if="row.status === 1" type="success">瀹℃牳閫氳繃</el-tag>
+          <el-tag v-if="row.status === 0" type="warning">瀹℃牳涓�</el-tag>
         </template>
         <template #operation="{ row }">
           <el-button
@@ -116,6 +120,7 @@
             text
             icon="editPen"
             @click="editRepair(row.id)"
+            :disabled="row.status !== 0"
           >
             缂栬緫
           </el-button>
@@ -123,7 +128,8 @@
             type="danger"
             text
             icon="delete"
-            @click="delRepairByIds(row.id)"
+            @click="delRepairByIds(row)"
+            :disabled="row.status !== 0"
           >
             鍒犻櫎
           </el-button>
@@ -270,6 +276,7 @@
 
 // 鏂板缁翠慨
 const addMaintain = () => {
+
   const row = multipleList.value[0];
   maintainModalRef.value.open(row.id, row);
 };
@@ -282,15 +289,40 @@
 
 // 鍗曡鍒犻櫎
 const delRepairByIds = async (ids) => {
+  let isDel = false
+  if(Array.isArray(ids)){
+    ids.forEach((item)=>{
+      if(item.status !== 0){
+        isDel = true
+      }
+    })
+  }else{
+    if(ids.status !== 0){
+      isDel = true
+    }
+  }
+
+  if(isDel){
+    ElMessage.warning("鍙兘鍒犻櫎瀹℃牳涓殑鎶ヤ慨鏁版嵁");
+    return
+  }
+
   ElMessageBox.confirm("纭鍒犻櫎鎶ヤ慨鏁版嵁, 姝ゆ搷浣滀笉鍙��?", "璀﹀憡", {
     confirmButtonText: "纭畾",
     cancelButtonText: "鍙栨秷",
     type: "warning",
   }).then(async () => {
-    const { code } = await delRepair(ids);
+    let idsList = ""
+    if(Array.isArray(ids)){
+      idsList = multipleList.value.map((item) => item.id);
+      console.log(idsList)
+    }else{
+      idsList = ids.id
+    }
+    const { code } = await delRepair(idsList);
     if (code === 200) {
       ElMessage.success("鍒犻櫎鎴愬姛");
-      getTableData();
+      await getTableData();
     }
   });
 };

--
Gitblit v1.9.3