From 9f880b5f6d08ad418ba11f4280505c7a41ec3807 Mon Sep 17 00:00:00 2001 From: 张诺 <2864490065@qq.com> Date: 星期四, 24 七月 2025 10:38:22 +0800 Subject: [PATCH] 完善 设备领用 用户归还完毕不显示归还按钮 --- src/views/equipment/management/index.vue | 202 ++++++++++++++++++++++++++++++++++---------------- 1 files changed, 137 insertions(+), 65 deletions(-) diff --git a/src/views/equipment/management/index.vue b/src/views/equipment/management/index.vue index 656e162..26930d9 100644 --- a/src/views/equipment/management/index.vue +++ b/src/views/equipment/management/index.vue @@ -49,18 +49,33 @@ type="danger" v-show="activeTab === 'management'" @click="handleDelete" - >鍒犻櫎</el-button + :disabled="selectedCount === 0" + >鍒犻櫎 {{ selectedCount > 0 ? `(${selectedCount})` : '' }}</el-button > </el-row> <!-- 琛ㄦ牸缁勪欢 --> - <div> + <div class="table-container"> + <!-- 鍔犺浇鐘舵�� --> + <el-skeleton v-if="loading" animated> + <template #template> + <el-skeleton-item variant="h1" style="width: 40%" /> + <div style="padding: 14px;"> + <el-skeleton-item variant="text" /> + <el-skeleton-item variant="text" /> + <el-skeleton-item variant="text" /> + </div> + </template> + </el-skeleton> + + <!-- 鏁版嵁琛ㄦ牸 --> <data-table + v-else :showOverflowTooltip="false" :border="true" :columns="columns" :loading="loading" style="width: 100%; height: calc(100vh - 29em)" - :show-selection="true" + :show-selection="activeTab === 'management'" :table-data="tableData" @edit="handleEdit" @viewRow="handleView" @@ -70,12 +85,27 @@ :operationsWidth="getOperationsWidth()" :customButtons="getCustomButtons()" > + <!-- 绌虹姸鎬佹彃妲� --> + <template #empty> + <el-empty + :description="`鏆傛棤${currentTabConfig?.label || ''}鏁版嵁`" + :image-size="120" + > + <template #description> + <p>鏆傛棤{{ currentTabConfig?.label || '' }}鏁版嵁</p> + <p v-if="queryParams.searchAll" class="text-secondary"> + 灏濊瘯璋冩暣鎼滅储鏉′欢鎴� + <el-button type="primary" link @click="resetQuery">娓呯┖鎼滅储</el-button> + </p> + </template> + </el-empty> + </template> </data-table> </div> <pagination v-if="total > 0" :layout="'total, prev, pager, next, jumper'" - :limit="pageSizes" + :limit="pageSize" :page="pageNum" :total="total" @pagination="handPagination" @@ -119,7 +149,7 @@ </template> <script setup> -import { computed, onMounted, reactive, ref, nextTick } from "vue"; +import { computed, onMounted, reactive, ref, nextTick, toRefs } from "vue"; import { ElMessage } from "element-plus"; import { Delete, Plus } from "@element-plus/icons-vue"; @@ -138,6 +168,33 @@ } from "@/api/equipment/management/index.js"; import { getUsageRecordList, getUsageDetailList } from "@/api/equipment/requisition/index.js"; +// 璁惧鐘舵�佹灇涓� +const EQUIPMENT_STATUS = { + USING: 1, // 浣跨敤涓� + PARTIAL_RETURN: 2, // 閮ㄥ垎褰掕繕 + RETURNED: 3 // 宸插綊杩� +}; + +// 鑾峰彇鐘舵�佹枃鏈� +const getStatusText = (status) => { + switch(status) { + case EQUIPMENT_STATUS.USING: return "浣跨敤涓�"; + case EQUIPMENT_STATUS.PARTIAL_RETURN: return "閮ㄥ垎褰掕繕"; + case EQUIPMENT_STATUS.RETURNED: return "宸插綊杩�"; + default: return "鏈煡鐘舵��"; + } +}; + +// 鑾峰彇鐘舵�侀鑹� +const getStatusColor = (status) => { + switch(status) { + case EQUIPMENT_STATUS.USING: return '#409eff'; // 钃濊壊 + case EQUIPMENT_STATUS.PARTIAL_RETURN: return '#e6a23c'; // 姗欒壊 + case EQUIPMENT_STATUS.RETURNED: return '#67c23a'; // 缁胯壊 + default: return '#909399'; // 鐏拌壊 + } +}; + // 鍝嶅簲寮忕姸鎬佺鐞� - 浣跨敤瑙f瀯鍜岄粯璁ゅ�� const initFormState = () => ({ consumables: false }); @@ -150,25 +207,10 @@ activeTab: "management", selectedRows: [], tableData: [], - // 寮圭獥鐘舵�� - dialogs: { - management: false, - equipmentRequisition: false, - usageRecord: false, - detailTable: false, - }, - // 璇︽儏琛ㄦ牸鐘舵�� - detailTable: { - data: [], - columns: [], - title: "", - }, // 鍒嗛〉鐘舵�� - pagination: { - pageNum: 1, - pageSize: 10, - total: 0, - }, + pageNum: 1, + pageSize: 10, + total: 0, // 鏌ヨ鍙傛暟 queryParams: { searchAll: "", @@ -185,11 +227,20 @@ activeTab, selectedRows, tableData, - dialogs, - detailTable, - pagination, + pageNum, + pageSize, + total, queryParams, } = toRefs(state); + +// 娣诲姞缂哄け鐨勫搷搴斿紡鍙橀噺 +const manaDialog = ref(false); +const equipmentRequisitionDialog = ref(false); +const usageRecordDialog = ref(false); +const dialogTableVisible = ref(false); +const dialogTableTitle = ref(''); +const dialogTableData = ref([]); +const dialogTableColumns = ref([]); // 鏍囩椤甸厤缃� - 渚夸簬鍚庣画鎵╁睍 const tabsConfig = { @@ -229,37 +280,14 @@ prop: "equipmentStatus", label: "浣跨敤鐘舵��", minWidth: 100, - formatter: (row) => (row.equipmentStatus == 1 ? "浣跨敤涓�" : "宸插綊杩�"), + formatter: (row) => getStatusText(row.equipmentStatus), + cellStyle: (row) => ({ color: getStatusColor(row.equipmentStatus) }), }, - { 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 }, - // ] - // }, - - // 鍚庣画鍙互鍦ㄨ繖閲屾坊鍔犳柊鐨勬爣绛鹃〉閰嶇疆 }; // 鏍囩椤垫暟鎹� @@ -311,8 +339,8 @@ type: 'success', size: 'small', link: true, - show: (row) => row.equipmentStatus == 1 || row.equipmentStatus == 2, // 鍙湁浣跨敤涓殑璁惧鎵嶆樉绀哄綊杩樻寜閽� - disabled: (row) => false, + show: (row) => row.equipmentStatus === EQUIPMENT_STATUS.USING || row.equipmentStatus === EQUIPMENT_STATUS.PARTIAL_RETURN, + disabled: (row) => row.equipmentStatus === EQUIPMENT_STATUS.RETURNED, }); } @@ -331,9 +359,20 @@ } }; const handleReturn = (row) => { + // 妫�鏌ヨ澶囩姸鎬� + if (row.equipmentStatus === EQUIPMENT_STATUS.RETURNED) { + ElMessage.warning('璇ヨ澶囧凡褰掕繕瀹屾垚锛屾棤闇�鍐嶆褰掕繕'); + return; + } + + if (row.equipmentStatus !== EQUIPMENT_STATUS.USING && row.equipmentStatus !== EQUIPMENT_STATUS.PARTIAL_RETURN) { + ElMessage.warning('璇ヨ澶囧綋鍓嶇姸鎬佷笉鏀寔褰掕繕鎿嶄綔'); + return; + } + form.value = { ...row }; addOrEdit.value = "return"; // 璁剧疆涓哄綊杩樻ā寮� - title.value = `褰掕繕璁惧`; + title.value = `褰掕繕璁惧 - ${row.equipmentName || ''}`; copyForm.value = { ...row }; equipmentRequisitionDialog.value = true; console.log("褰掕繕璁惧锛�", row); @@ -353,13 +392,13 @@ loading.value = true; tableData.value = []; pageNum.value = 1; - pageSizes.value = 10; + pageSize.value = 10; total.value = 0; - queryParams.searchAll = ""; + queryParams.value.searchAll = ""; }; const resetQuery = () => { - queryParams.searchAll = ""; + queryParams.value.searchAll = ""; pageNum.value = 1; getList(); }; @@ -476,7 +515,7 @@ const handPagination = (val) => { pageNum.value = val.page; - pageSizes.value = val.limit; + pageSize.value = val.limit; getList(); }; @@ -489,8 +528,8 @@ deleteApi: () => currentTabConfig.value.deleteApi, selectedRows: selectedRows, getList: () => getList(), - tableData: tableData, - total: total, + tableData, + total, confirmText: "纭鍒犻櫎閫変腑鐨勬暟鎹悧锛�", successText: "鍒犻櫎鎴愬姛", }); @@ -508,10 +547,14 @@ // 璁惧棰嗙敤寮圭獥鎻愪氦澶勭悊 const onEquipmentRequisitionSubmit = (formData) => { - if (formData.equipmentStatus == 2) { - ElMessage.success("璁惧褰掕繕鎴愬姛"); - } else { + if (formData.equipmentStatus === EQUIPMENT_STATUS.RETURNED) { + ElMessage.success("璁惧宸插畬鍏ㄥ綊杩�"); + } else if (formData.equipmentStatus === EQUIPMENT_STATUS.PARTIAL_RETURN) { + ElMessage.success("璁惧閮ㄥ垎褰掕繕鎴愬姛"); + } else if (formData.equipmentStatus === EQUIPMENT_STATUS.USING) { ElMessage.success("璁惧棰嗙敤鎴愬姛"); + } else { + ElMessage.success("鎿嶄綔鎴愬姛"); } equipmentRequisitionDialog.value = false; nextTick(() => { @@ -526,8 +569,8 @@ loading.value = true; const apiParams = { current: pageNum.value, - pageSize: pageSizes.value, - searchAll: queryParams.searchAll, + pageSize: pageSize.value, + searchAll: queryParams.value.searchAll, }; const { data, code } = await currentTabConfig.value.api(apiParams); @@ -603,4 +646,33 @@ .main-container { background: red !important; } + +/* 璁惧鐘舵�佹牱寮� */ +.status-using { + color: #409eff; + font-weight: 500; +} + +.status-partial-return { + color: #e6a23c; + font-weight: 500; +} + +.status-returned { + color: #67c23a; + font-weight: 500; +} + +.status-unknown { + color: #909399; + font-weight: 500; +} + +/* 鐘舵�佹爣绛炬牱寮� */ +:deep(.el-table .cell .status-tag) { + font-size: 12px; + padding: 2px 6px; + border-radius: 4px; + white-space: nowrap; +} </style> -- Gitblit v1.9.3