From 3d9d458e631d8d6a070d579b2e3e260aea45ac58 Mon Sep 17 00:00:00 2001
From: zhang_12370 <z2864490065@outlook.com>
Date: 星期二, 24 六月 2025 13:54:51 +0800
Subject: [PATCH] 优化文档管理 优化采购管理渲染数据匹配接口字段 上传第一版主页
---
src/views/production/components/ProductionDialog.vue | 213 +++++++++++++++++++++++++++-------------------------
1 files changed, 111 insertions(+), 102 deletions(-)
diff --git a/src/views/production/components/ProductionDialog.vue b/src/views/production/components/ProductionDialog.vue
index 0cd330e..124e32f 100644
--- a/src/views/production/components/ProductionDialog.vue
+++ b/src/views/production/components/ProductionDialog.vue
@@ -1,25 +1,30 @@
<template>
<el-dialog
- v-model="dialogVisible"
- :title="dialogType === 'add' ? '鏂板鐢熶骇鍔犲伐' : '缂栬緫鐢熶骇鍔犲伐'"
- width="1200px"
- :close-on-click-modal="false"
- @close="handleClose"
+ v-model="dialogVisible"
+ :title="dialogType === 'add' ? '鏂板鐢熶骇鍔犲伐' : '缂栬緫鐢熶骇鍔犲伐'"
+ width="1200px"
+ :close-on-click-modal="false"
+ @close="handleClose"
>
<el-row :gutter="10" style="margin-bottom: 10px">
<el-col :span="3">
<el-button type="primary" @click="handlData"
- ><el-icon> <Plus /> </el-icon>閫夋嫨鏁版嵁</el-button
+ >
+ <el-icon>
+ <Plus/>
+ </el-icon>
+ 閫夋嫨鏁版嵁
+ </el-button
>
</el-col>
<el-col :span="4">
<el-button
- type="danger"
- @click="removeSelectedData"
- :disabled="tableData.length === 0"
+ type="danger"
+ @click="removeSelectedData"
+ :disabled="tableData.length === 0"
>
<el-icon>
- <Delete />
+ <Delete/>
</el-icon>
娓呯┖宸查��
</el-button>
@@ -34,15 +39,15 @@
</el-col>
</el-row>
<ETableModify
- :columns="columns"
- :showOperations="false"
- height="200"
- @cell-edit="handleCellEdit"
- :tableData="tableData"
- :showOverflowTooltip="false"
- @row-click="handleRowClick"
- :editableColumns="['usedQuantity']"
- @delete="handleRemoveItem"
+ :columns="columns"
+ :showOperations="false"
+ height="200"
+ @cell-edit="handleCellEdit"
+ :tableData="tableData"
+ :showOverflowTooltip="false"
+ @row-click="handleRowClick"
+ :editableColumns="['usedQuantity']"
+ @delete="handleRemoveItem"
/>
<div class="empty-table">
<h1>鐢熶骇鏄庣粏</h1>
@@ -50,7 +55,7 @@
<el-col :span="2">
<el-button type="primary" @click="addNewRow">
<el-icon>
- <Plus />
+ <Plus/>
</el-icon>
鏂板
</el-button>
@@ -65,60 +70,62 @@
</el-col> -->
</el-row>
<ProductionDetailsTable
- v-model="detailsTableData"
- :border="false"
- :show-operations="true"
- :auto-calculate="true"
- @input-change="handleDetailsChange"
- @delete-row="handleDeleteRow"
+ v-model="detailsTableData"
+ :border="false"
+ :show-operations="true"
+ :auto-calculate="true"
+ @input-change="handleDetailsChange"
+ @delete-row="handleDeleteRow"
/>
</div>
<template #footer>
<div class="dialog-footer">
<el-button
- @click="handleClose"
- v-if="dialogType === 'add' || dialogType === 'edit'"
- >鍙� 娑�</el-button
+ @click="handleClose"
+ v-if="dialogType === 'add' || dialogType === 'edit'"
+ >鍙� 娑�
+ </el-button
>
<!-- <el-button @click="handleReset" v-if="dialogType === 'edit'"
>閲� 缃�</el-button
> -->
<el-button type="primary" :loading="loading" @click="handleSubmit"
- >纭� 瀹�</el-button
+ >纭� 瀹�
+ </el-button
>
</div>
</template>
</el-dialog>
<el-dialog
- v-model="innerVisible"
- width="1000"
- title="閫夋嫨閰嶇疆鏁版嵁"
- center
- append-to-body
+ v-model="innerVisible"
+ width="1000"
+ title="閫夋嫨閰嶇疆鏁版嵁"
+ center
+ append-to-body
>
<div style="margin-bottom: 10px">
<el-alert
- v-if="tableData.length > 0"
- :title="`褰撳墠宸查�夋嫨 ${tableData.length} 鏉℃暟鎹甡"
- type="info"
- :closable="false"
- show-icon
+ v-if="tableData.length > 0"
+ :title="`褰撳墠宸查�夋嫨 ${tableData.length} 鏉℃暟鎹甡"
+ type="info"
+ :closable="false"
+ show-icon
/>
</div>
<ETable
- :showIndex="false"
- :showOverflowTooltip="false"
- @selection-change="handleSelectionChange"
- :showOperations="false"
- ref="etableRef"
- :columns="formalDatabaseColumns"
- :tableData="formalDatabaseData"
- :defaultSelectedIds="selectedIds"
- :rowKey="'id'"
- height="400"
- @cell-edit="handleCellEdit"
- :show-selection="true"
+ :showIndex="false"
+ :showOverflowTooltip="false"
+ @selection-change="handleSelectionChange"
+ :showOperations="false"
+ ref="etableRef"
+ :columns="formalDatabaseColumns"
+ :tableData="formalDatabaseData"
+ :defaultSelectedIds="selectedIds"
+ :rowKey="'id'"
+ height="400"
+ @cell-edit="handleCellEdit"
+ :show-selection="true"
/>
<el-row :gutter="24" style="margin-top: 15px">
<el-col :span="12">
@@ -129,9 +136,9 @@
<el-col :span="12" style="text-align: right">
<el-button @click="innerVisible = false">鍙栨秷</el-button>
<el-button
- type="primary"
- @click="handleSelectData"
- :disabled="formalDatabaseSelectedData.length === 0"
+ type="primary"
+ @click="handleSelectData"
+ :disabled="formalDatabaseSelectedData.length === 0"
>
纭畾娣诲姞
</el-button>
@@ -141,34 +148,34 @@
</template>
<script setup>
-import { ref, reactive, watch, onMounted, nextTick, computed } from "vue";
+import {ref, reactive, watch, onMounted, nextTick, computed} from "vue";
import ETable from "@/components/Table/ETable.vue";
import ETableModify from "@/components/Table/EtableModify.vue";
import ProductionDetailsTable from "./ProductionDetailsTable.vue";
-import { ElMessage, ElMessageBox, ElAlert, ElText } from "element-plus";
-import { Delete, Warning, Plus } from "@element-plus/icons-vue";
+import {ElMessage, ElMessageBox, ElAlert, ElText} from "element-plus";
+import {Delete, Warning, Plus} from "@element-plus/icons-vue";
import {
getOfficialAll,
addOrEditPM,
deleteProductionInventory,
} from "@/api/production/index.js";
-import { validateFormData, validateNumber, deepClone, createDefaultProductionRow } from "@/utils/production";
-import { useCoalData } from "./useCoalData";
+import {validateFormData, validateNumber, deepClone, createDefaultProductionRow} from "@/utils/production";
+import {useCoalData} from "./useCoalData";
import useUserStore from "@/store/modules/user";
// Props 鍜� Emits
const props = defineProps({
- visible: { type: Boolean, default: false },
- type: { type: String, default: "add" },
- rowData: { type: Object, default: () => ({}) },
+ visible: {type: Boolean, default: false},
+ type: {type: String, default: "add"},
+ rowData: {type: Object, default: () => ({})},
});
-const dialogVisible = defineModel("visible", { type: Boolean, default: false });
+const dialogVisible = defineModel("visible", {type: Boolean, default: false});
const emit = defineEmits(["update:visible", "success", "update:productionAndProcessing"]);
// 鐢ㄦ埛淇℃伅鍜岀叅绉嶆暟鎹�
const userStore = useUserStore();
-const { getCoalNameById } = useCoalData();
+const {getCoalNameById} = useCoalData();
let userInfo;
// 瀵硅瘽妗嗙姸鎬�
@@ -187,8 +194,8 @@
const copyForm = ref(null);
// 琛ㄦ牸鍒楅厤缃�
const columns = [
- { label: "鐓ょ", prop: "coal", minwidth: 120 },
- { label: "搴撳瓨鏁伴噺", prop: "inventoryQuantity", minwidth: 100 },
+ {label: "鐓ょ", prop: "coal", minwidth: 120},
+ {label: "搴撳瓨鏁伴噺", prop: "inventoryQuantity", minwidth: 100},
{
label: "浣跨敤鏁伴噺",
prop: "usedQuantity",
@@ -199,18 +206,18 @@
];
const formalDatabaseColumns = ref([
- { prop: "supplierName", label: "渚涘簲鍟嗗悕绉�", minwidth: 150 },
- { prop: "coal", label: "鐓ょ绫诲瀷", minwidth: 60 },
- { prop: "inventoryQuantity", label: "搴撳瓨鏁伴噺", minwidth: 80 },
- { prop: "unit", label: "鍗曚綅", minwidth: 20 },
- { prop: "priceExcludingTax", label: "鍗曚环锛堜笉鍚◣锛�", minwidth: 80 },
- { prop: "createTime", label: "鐧昏鏃ユ湡", width: 200 },
+ {prop: "supplierName", label: "渚涘簲鍟嗗悕绉�", minwidth: 150},
+ {prop: "coal", label: "鐓ょ绫诲瀷", minwidth: 60},
+ {prop: "inventoryQuantity", label: "搴撳瓨鏁伴噺", minwidth: 80},
+ {prop: "unit", label: "鍗曚綅", minwidth: 20},
+ {prop: "priceExcludingTax", label: "鍗曚环锛堜笉鍚◣锛�", minwidth: 80},
+ {prop: "createTime", label: "鐧昏鏃ユ湡", width: 200},
]);
// 宸ュ叿鍑芥暟
const debugIdMatching = () => {
if (formalDatabaseData.value.length > 0 && selectedIds.value.length > 0) {
const matchedRows = formalDatabaseData.value.filter((row) =>
- selectedIds.value.includes(row.id)
+ selectedIds.value.includes(row.id)
);
}
};
@@ -226,8 +233,8 @@
if (res.code === 200) {
formalDatabaseData.value = res.data;
const existingOfficialIds = tableData.value
- .map((item) => item.officialId)
- .filter((id) => id);
+ .map((item) => item.officialId)
+ .filter((id) => id);
selectedIds.value = existingOfficialIds;
debugIdMatching();
nextTick(() => {
@@ -252,7 +259,7 @@
try {
etableRef.value.clearSelection();
const rowsToSelect = formalDatabaseData.value.filter((row) =>
- ids.includes(row.id)
+ ids.includes(row.id)
);
if (rowsToSelect.length > 0) {
etableRef.value.setRowsSelection(rowsToSelect, true);
@@ -277,8 +284,8 @@
detailsTableData.value = data.productionList || [];
dialogType.value = "edit";
const existingOfficialIds = tableData.value
- .map((item) => item.officialId)
- .filter((id) => id);
+ .map((item) => item.officialId)
+ .filter((id) => id);
selectedIds.value = existingOfficialIds;
};
// 鐩戝惉瀵硅瘽妗嗙姸鎬侊紝鍦ㄦ墦寮�鏃惰缃�変腑鐘舵��
@@ -319,8 +326,8 @@
// 鏇存柊selectedIds锛岀‘淇濆寘鍚墍鏈夊綋鍓峵ableData涓殑officialId
const allOfficialIds = tableData.value
- .map((item) => item.officialId)
- .filter((id) => id);
+ .map((item) => item.officialId)
+ .filter((id) => id);
selectedIds.value = allOfficialIds;
// 鍏抽棴閫夋嫨瀵硅瘽妗�
@@ -348,13 +355,13 @@
// 楠岃瘉鐢熶骇鏄庣粏鏁版嵁
const detailsValidation = validateFormData(detailsTableData.value, [
"coalId",
- "productionQuantity",
+ "productionQuantity",
"laborCost",
"energyConsumptionCost",
"equipmentDepreciation",
"purchasePrice"
]);
-
+
if (!detailsValidation.isValid) {
ElMessage.warning(detailsValidation.message);
return;
@@ -400,13 +407,13 @@
const handleCellEdit = (row, prop, value) => {
if (prop === "usedQuantity") {
const validation = validateNumber(value, 0, Number(row.inventoryQuantity));
-
+
if (!validation.isValid) {
ElMessage.warning(validation.message);
row.usedQuantity = validation.value;
return;
}
-
+
row.usedQuantity = validation.value;
}
};
@@ -445,15 +452,15 @@
// 鍒犻櫎鍗曚釜宸查�夋暟鎹」
const handleRemoveItem = (row) => {
const index = tableData.value.findIndex(
- (item) => item.officialId === row.officialId
+ (item) => item.officialId === row.officialId
);
if (index > -1) {
tableData.value.splice(index, 1);
// 鏇存柊selectedIds
const updatedOfficialIds = tableData.value
- .map((item) => item.officialId)
- .filter((id) => id);
+ .map((item) => item.officialId)
+ .filter((id) => id);
selectedIds.value = updatedOfficialIds;
ElMessage.success("宸插垹闄ら�変腑椤�");
}
@@ -470,21 +477,22 @@
cancelButtonText: "鍙栨秷",
type: "warning",
})
- .then(async () => {
- if (dialogType.value === "edit") {
- let res = await deleteProductionInventory({
- productionInventoryList: tableData.value,
- });
- emit("update:productionAndProcessing", tableData.value, copyForm.value);
- }
- // [Vue warn]: Component emitted event "update:productionAndProcessing" but it is neither declared in the emits option nor as an "onUpdate:productionAndProcessing" prop.
+ .then(async () => {
+ if (dialogType.value === "edit") {
+ let res = await deleteProductionInventory({
+ productionInventoryList: tableData.value,
+ });
+ emit("update:productionAndProcessing", tableData.value, copyForm.value);
+ }
+ // [Vue warn]: Component emitted event "update:productionAndProcessing" but it is neither declared in the emits option nor as an "onUpdate:productionAndProcessing" prop.
- formalDatabaseSelectedData.value = [];
- tableData.value = [];
- selectedIds.value = [];
- ElMessage.success("宸叉竻绌烘墍鏈夋暟鎹�");
- })
- .catch(() => {});
+ formalDatabaseSelectedData.value = [];
+ tableData.value = [];
+ selectedIds.value = [];
+ ElMessage.success("宸叉竻绌烘墍鏈夋暟鎹�");
+ })
+ .catch(() => {
+ });
};
// 璁$畻鎬讳娇鐢ㄩ噺
@@ -507,6 +515,7 @@
.el-row > .el-col > h1 {
font-weight: bolder;
}
+
.empty-table > .el-row {
margin-bottom: 12px;
}
--
Gitblit v1.9.3