From a43becd99dec4696ed629b9f549819b7d788a022 Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期六, 11 十月 2025 13:38:27 +0800
Subject: [PATCH] yys 修改是否为耗材字段名称
---
src/views/equipment/management/index.vue | 222 ++++++++++++++++++++++++++++++++++++-------------------
1 files changed, 145 insertions(+), 77 deletions(-)
diff --git a/src/views/equipment/management/index.vue b/src/views/equipment/management/index.vue
index 656e162..bd63979 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"
@@ -112,14 +142,15 @@
:title="dialogTableTitle"
:table-data="dialogTableData"
:columns="dialogTableColumns"
- width="60%"
+ width="70%"
+ height="500px"
/>
</el-card>
</div>
</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,8 +169,35 @@
} 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 });
+const initFormState = () => ({ isConsumables: false });
const state = reactive({
form: initFormState(),
@@ -150,25 +208,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 +228,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 = {
@@ -202,8 +254,8 @@
columns: [
{ prop: "equipmentNo", label: "璁惧缂栧彿", minWidth: 100 },
{ prop: "equipmentName", label: "璁惧鍚嶇О", minWidth: 100 },
- { prop: "consumables", label: "鑰楁潗",
- formatter: (row) => (row.consumables ? "鏄�" : "鍚�"), minWidth: 100 },
+ { prop: "isConsumables", label: "鑰楁潗",
+ formatter: (row) => (row.isConsumables ? "鏄�" : "鍚�"), minWidth: 100 },
{ prop: "quantity", label: "鎬绘暟閲�", minWidth: 100 },
{ prop: "usedNo", label: "宸蹭娇鐢ㄦ暟閲�", minWidth: 100 },
{ prop: "specification", label: "瑙勬牸鍨嬪彿", minWidth: 100 },
@@ -229,37 +281,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 +340,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 +360,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);
@@ -347,19 +387,19 @@
const resetState = () => {
form.value = {
- consumables: false,
+ isConsumables: false,
};
addOrEdit.value = "add";
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();
};
@@ -372,7 +412,7 @@
const handleAdd = () => {
addOrEdit.value = "add";
form.value = {
- consumables: false,
+ isConsumables: false,
};
title.value = `鏂板${currentTabConfig.value.label}`;
// 閫氱敤鐨�
@@ -422,13 +462,10 @@
// 璋冪敤璇︽儏鎺ュ彛鑾峰彇鏁版嵁
const { data, code } = await getUsageDetailList(row.id);
-
if (code === 200 && data) {
- console.log('璁惧鎿嶄綔璁板綍:', data);
-
// 澶勭悊鏁扮粍鏁版嵁锛岀洿鎺ユ樉绀烘搷浣滆褰曞垪琛�
- if (Array.isArray(data.records)) {
- dialogTableData.value = data.records;
+ if (Array.isArray(data)) {
+ dialogTableData.value = data;
dialogTableColumns.value = [
{ prop: 'equipmentNo', label: '璁惧缂栧彿', minWidth: 100 },
{ prop: 'equipmentName', label: '璁惧鍚嶇О', minWidth: 120 },
@@ -446,7 +483,6 @@
];
} else {
ElMessage.warning('鏆傛棤鎿嶄綔璁板綍');
- dialogTableVisible.value = false;
}
} else {
ElMessage.error('鑾峰彇璇︽儏鏁版嵁澶辫触');
@@ -476,7 +512,7 @@
const handPagination = (val) => {
pageNum.value = val.page;
- pageSizes.value = val.limit;
+ pageSize.value = val.limit;
getList();
};
@@ -489,8 +525,8 @@
deleteApi: () => currentTabConfig.value.deleteApi,
selectedRows: selectedRows,
getList: () => getList(),
- tableData: tableData,
- total: total,
+ tableData,
+ total,
confirmText: "纭鍒犻櫎閫変腑鐨勬暟鎹悧锛�",
successText: "鍒犻櫎鎴愬姛",
});
@@ -508,10 +544,13 @@
// 璁惧棰嗙敤寮圭獥鎻愪氦澶勭悊
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) {
+ } else if (formData.equipmentStatus === EQUIPMENT_STATUS.USING) {
ElMessage.success("璁惧棰嗙敤鎴愬姛");
+ } else {
+ ElMessage.success("鎿嶄綔鎴愬姛");
}
equipmentRequisitionDialog.value = false;
nextTick(() => {
@@ -526,8 +565,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 +642,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