From 3d3addba8618bd44db53f7089732e3fae16bdfef Mon Sep 17 00:00:00 2001
From: zhang_12370 <z2864490065@outlook.com>
Date: 星期二, 15 七月 2025 18:01:28 +0800
Subject: [PATCH] 1、修改配置删除文件 2、优化设备领用 使用户归还完以后 无法重新选择使用中

---
 src/views/equipment/management/index.vue |  184 +++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 156 insertions(+), 28 deletions(-)

diff --git a/src/views/equipment/management/index.vue b/src/views/equipment/management/index.vue
index 2ceb04b..97ca889 100644
--- a/src/views/equipment/management/index.vue
+++ b/src/views/equipment/management/index.vue
@@ -30,16 +30,32 @@
 
       <!-- 鎿嶄綔鎸夐挳鍖� -->
       <el-row :gutter="24" class="table-toolbar">
-        <el-button :icon="Plus" type="primary" @click="handleAdd"
-          >鏂板缓</el-button
+        <el-button
+          :icon="Plus"
+          type="primary"
+          v-show="activeTab === 'management'"
+          @click="handleAdd"
+          >璁惧鏂板</el-button
         >
-        <el-button :icon="Delete" type="danger" @click="handleDelete"
+        <el-button
+          :icon="Plus"
+          type="primary"
+          v-show="activeTab === 'equipmentRequisition'"
+          @click="handleAdd"
+          >棰嗙敤</el-button
+        >
+        <el-button
+          :icon="Delete"
+          type="danger"
+          v-show="activeTab === 'management'"
+          @click="handleDelete"
           >鍒犻櫎</el-button
         >
       </el-row>
       <!-- 琛ㄦ牸缁勪欢 -->
       <div>
         <data-table
+          :showOverflowTooltip="false"
           :border="true"
           :columns="columns"
           :loading="loading"
@@ -72,8 +88,7 @@
               </el-tag>
             </template>
             <template v-else>
-              <el-tag size="small" type="primary">
-              </el-tag>
+              <el-tag size="small" type="primary"> </el-tag>
             </template>
           </template>
         </data-table>
@@ -87,18 +102,36 @@
         @pagination="handPagination"
       />
       <managementDialog
+        v-if="activeTab == 'management'"
         v-model:copyForm="copyForm"
         v-model:managementFormDialog="manaDialog"
         :addOrEdit="addOrEdit"
         :form="form"
         @submit="getList"
       ></managementDialog>
+      <EquipmentRequisition
+        v-if="activeTab == 'equipmentRequisition'"
+        v-model="equipmentRequisitionDialog"
+        :formData="form"
+        :maxQuantity="getMaxQuantity()"
+        :addOrEdit="addOrEdit"
+        :equipmentStatus="form.equipmentStatus"
+        @submit="onEquipmentRequisitionSubmit"
+      />
+      <!-- <UsageRecord
+        v-if="activeTab == 'usageRecord'"
+        v-model:copyForm="copyForm"
+        v-model:usageRecordDialog="usageRecordDialog"
+        :addOrEdit="addOrEdit"
+        :form="form"
+        @submit="getList"
+      /> -->
     </el-card>
   </div>
 </template>
 
 <script setup>
-import { computed, onMounted, reactive, ref } from "vue";
+import { computed, onMounted, reactive, ref, nextTick } from "vue";
 import { ElMessage } from "element-plus";
 import { Delete, Plus } from "@element-plus/icons-vue";
 
@@ -106,10 +139,16 @@
 import DataTable from "@/components/Table/ETable.vue";
 import Pagination from "@/components/Pagination";
 import managementDialog from "./mould/managementDialog.vue";
+import EquipmentRequisition from "./mould/equipmentRequisitionDialog.vue";
+import UsageRecord from "./mould/usageRecord.vue";
 
 // API 鏈嶅姟瀵煎叆
 import { useDelete } from "@/hooks/useDelete.js";
-import { getManagementList, delEquipment } from "@/api/equipment/management/index.js";
+import {
+  getManagementList,
+  delEquipment,
+} from "@/api/equipment/management/index.js";
+import { getUsageRecordList } from "@/api/equipment/requisition/index.js";
 
 // 鍝嶅簲寮忕姸鎬佺鐞�
 const form = ref({});
@@ -117,6 +156,8 @@
 const copyForm = ref({});
 const addOrEdit = ref("add");
 const manaDialog = ref(false);
+const equipmentRequisitionDialog = ref(false);
+const usageRecordDialog = ref(false);
 const loading = ref(false);
 const activeTab = ref("management");
 const selectedRows = ref([]);
@@ -129,7 +170,7 @@
 
 // 鏌ヨ鍙傛暟
 const queryParams = reactive({
-  searchAll: ""
+  searchAll: "",
 });
 
 // 鏍囩椤甸厤缃� - 渚夸簬鍚庣画鎵╁睍
@@ -141,21 +182,59 @@
     api: getManagementList,
     deleteApi: delEquipment,
     columns: [
-      { prop: "equipmentId", label: "璁惧缂栧彿", minWidth: 100 },
+      { prop: "equipmentNo", label: "璁惧缂栧彿", minWidth: 100 },
       { prop: "equipmentName", label: "璁惧鍚嶇О", minWidth: 100 },
-      { prop: "quantity", label: "鏁伴噺", minWidth: 100 },
+      { prop: "quantity", label: "鎬绘暟閲�", minWidth: 100 },
+      { prop: "usedNo", label: "宸蹭娇鐢ㄦ暟閲�", minWidth: 100 },
       { prop: "specification", label: "瑙勬牸鍨嬪彿", minWidth: 100 },
-      { 
-        prop: "usageStatus", 
-        label: "浣跨敤鐘舵��", 
-        minWidth: 100,
-        formatter: (row) => row.usageStatus == 1 ? "鍚敤" : "绂佺敤"
-      },
-      { prop: "usingDepartment", label: "浣跨敤閮ㄩ棬", minWidth: 100 },
       { prop: "purchaseDate", label: "閲囪喘鏃ユ湡", minWidth: 100 },
       { prop: "purchasePrice", label: "閲囪喘浠锋牸", minWidth: 100 },
-    ]
-  }
+    ],
+  },
+  equipmentRequisition: {
+    label: "璁惧棰嗙敤",
+    searchPlaceholder: "璁惧缂栧彿/璁惧鍚嶇О/瑙勬牸鍨嬪彿",
+    showSearch: true,
+    api: getUsageRecordList,
+    deleteApi: null,
+    columns: [
+      { prop: "userName", label: "棰嗙敤浜�", minWidth: 100 },
+      { prop: "equipmentNo", label: "璁惧缂栧彿", minWidth: 100 },
+      { prop: "equipmentName", label: "璁惧鍚嶇О", minWidth: 100 },
+      { prop: "usageQuantity", label: "棰嗙敤鏁伴噺", minWidth: 100 },
+      {
+        prop: "equipmentStatus",
+        label: "浣跨敤鐘舵��",
+        minWidth: 100,
+        formatter: (row) => (row.equipmentStatus == "0" ? "浣跨敤涓�" : "宸插綊杩�"),
+      },
+      { prop: "usageStartTime", label: "浣跨敤寮�濮嬫椂闂�", minWidth: 100 },
+      { prop: "usageEndTime", label: "浣跨敤缁撴潫鏃堕棿", minWidth: 100 },
+      { prop: "remarks", label: "澶囨敞", minWidth: 100 },
+    ],
+  },
+  // usageRecord:{
+  //   label: "棰嗙敤璁板綍",
+  //   searchPlaceholder: "璁惧缂栧彿/璁惧鍚嶇О/瑙勬牸鍨嬪彿",
+  //   showSearch: true,
+  //   api: getManagementList,
+  //   deleteApi: delEquipment,
+  //   columns: [
+  //     { prop: "equipmentId", label: "璁惧缂栧彿", minWidth: 100 },
+  //     { prop: "equipmentName", label: "璁惧鍚嶇О", minWidth: 100 },
+  //     { prop: "quantity", label: "鏁伴噺", minWidth: 100 },
+  //     { prop: "specification", label: "瑙勬牸鍨嬪彿", minWidth: 100 },
+  //     {
+  //       prop: "usageStatus",
+  //       label: "浣跨敤鐘舵��",
+  //       minWidth: 100,
+  //       formatter: (row) => row.usageStatus == 1 ? "鍚敤" : "绂佺敤"
+  //     },
+  //     { prop: "purchaseDate", label: "閲囪喘鏃ユ湡", minWidth: 100 },
+  //     { prop: "purchasePrice", label: "閲囪喘浠锋牸", minWidth: 100 },
+  //   ]
+  // },
+
   // 鍚庣画鍙互鍦ㄨ繖閲屾坊鍔犳柊鐨勬爣绛鹃〉閰嶇疆
 };
 
@@ -163,7 +242,7 @@
 const tabs = reactive(
   Object.entries(tabsConfig).map(([name, config]) => ({
     name,
-    label: config.label
+    label: config.label,
   }))
 );
 
@@ -171,8 +250,12 @@
 const currentTabConfig = computed(() => tabsConfig[activeTab.value]);
 
 // 璁$畻灞炴��
-const searchPlaceholder = computed(() => currentTabConfig.value?.searchPlaceholder || "璇疯緭鍏ユ悳绱俊鎭�");
-const shouldShowSearch = computed(() => currentTabConfig.value?.showSearch || false);
+const searchPlaceholder = computed(
+  () => currentTabConfig.value?.searchPlaceholder || "璇疯緭鍏ユ悳绱俊鎭�"
+);
+const shouldShowSearch = computed(
+  () => currentTabConfig.value?.showSearch || false
+);
 const columns = computed(() => currentTabConfig.value?.columns || []);
 const selectedCount = computed(() => selectedRows.value.length);
 
@@ -209,7 +292,15 @@
   addOrEdit.value = "add";
   form.value = {};
   title.value = `鏂板${currentTabConfig.value.label}`;
-  manaDialog.value = true;
+  // 閫氱敤鐨�
+  copyForm.value = {};
+  if (activeTab.value === "equipmentRequisition") {
+    equipmentRequisitionDialog.value = true;
+  } else if (activeTab.value === "usageRecord") {
+    usageRecordDialog.value = true;
+  } else {
+    manaDialog.value = true;
+  }
 };
 
 const handleEdit = (row) => {
@@ -217,7 +308,13 @@
   addOrEdit.value = "edit";
   title.value = `缂栬緫${currentTabConfig.value.label}`;
   copyForm.value = { ...row };
-  manaDialog.value = true;
+  if (activeTab.value === "equipmentRequisition") {
+    equipmentRequisitionDialog.value = true;
+  } else if (activeTab.value === "usageRecord") {
+    usageRecordDialog.value = true;
+  } else {
+    manaDialog.value = true;
+  }
 };
 
 const handleView = (row) => {
@@ -225,7 +322,13 @@
   addOrEdit.value = "viewRow";
   title.value = `鏌ョ湅${currentTabConfig.value.label}`;
   copyForm.value = { ...row };
-  manaDialog.value = true;
+  if (activeTab.value === "equipmentRequisition") {
+    equipmentRequisitionDialog.value = true;
+  } else if (activeTab.value === "usageRecord") {
+    usageRecordDialog.value = true;
+  } else {
+    manaDialog.value = true;
+  }
 };
 
 const handPagination = (val) => {
@@ -238,7 +341,6 @@
   selectedRows.value = selection;
 };
 
-
 // 鍒犻櫎澶勭悊
 const { handleDeleteBatch: handleDelete } = useDelete({
   deleteApi: () => currentTabConfig.value.deleteApi,
@@ -249,6 +351,32 @@
   confirmText: "纭鍒犻櫎閫変腑鐨勬暟鎹悧锛�",
   successText: "鍒犻櫎鎴愬姛",
 });
+
+// 鑾峰彇璁惧鏈�澶у彲棰嗙敤鏁伴噺
+const getMaxQuantity = () => {
+  if (form.value.equipmentId) {
+    const equipment = tableData.value.find(
+      (item) => item.equipmentId === form.value.equipmentId
+    );
+    return equipment ? equipment.quantity : null;
+  }
+  return null;
+};
+
+// 璁惧棰嗙敤寮圭獥鎻愪氦澶勭悊
+const onEquipmentRequisitionSubmit = (formData) => {
+  console.log("璁惧棰嗙敤鎻愪氦鏁版嵁锛�", formData);
+  if (formData.equipmentStatus == "1") {
+    ElMessage.success("璁惧褰掕繕鎴愬姛");
+  } else {
+    ElMessage.success("璁惧棰嗙敤鎴愬姛");
+  }
+  equipmentRequisitionDialog.value = false;
+  nextTick(() => {
+    form.value = {};
+    getList();
+  });
+};
 
 // 鏁版嵁鑾峰彇
 const getList = async () => {
@@ -263,7 +391,7 @@
     const { data, code } = await currentTabConfig.value.api(apiParams);
 
     if (code !== 200) {
-      ElMessage.error("鑾峰彇鏁版嵁澶辫触锛�" + (data?.msg || "鏈煡閿欒"));
+      // ElMessage.error("鑾峰彇鏁版嵁澶辫触锛�" + (data?.msg || "鏈煡閿欒"));
       return;
     }
 
@@ -302,7 +430,7 @@
   flex-wrap: wrap;
   gap: 10px;
 }
-.app-container{
+.app-container {
   padding: 18px !important;
 }
 /* 鍝嶅簲寮忚〃鏍� */

--
Gitblit v1.9.3