From f606f0dd0bba1e666c7de2f1bb56a3a641b65581 Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期四, 30 四月 2026 16:32:43 +0800
Subject: [PATCH] 增加结束订单功能,并在生产订单和报工页面限制已结束订单的编辑操作
---
src/views/productionManagement/productionOrder/components/MaterialDetailDialog.vue | 5 +-
src/views/productionManagement/processRoute/processRouteItem/index.vue | 20 ++++++----
src/views/productionManagement/productionOrder/index.vue | 53 +++++++++++++++++++++++---
src/api/productionManagement/productionOrder.js | 9 ++++
src/components/PIMTable/PIMTable.vue | 5 ++
src/views/productionManagement/workOrderManagement/index.vue | 4 ++
6 files changed, 80 insertions(+), 16 deletions(-)
diff --git a/src/api/productionManagement/productionOrder.js b/src/api/productionManagement/productionOrder.js
index 688abfc..9b5751d 100644
--- a/src/api/productionManagement/productionOrder.js
+++ b/src/api/productionManagement/productionOrder.js
@@ -45,6 +45,15 @@
});
}
+// 鐢熶骇璁㈠崟-淇敼
+export function updateProductOrder(data) {
+ return request({
+ url: "/productionOrder/updateOrder",
+ method: "post",
+ data: data,
+ });
+}
+
export function delProductOrder(ids) {
return request({
url: `/productionOrder/delete`,
diff --git a/src/components/PIMTable/PIMTable.vue b/src/components/PIMTable/PIMTable.vue
index 61df179..f99b1eb 100644
--- a/src/components/PIMTable/PIMTable.vue
+++ b/src/components/PIMTable/PIMTable.vue
@@ -21,6 +21,7 @@
class="lims-table">
<el-table-column align="center"
type="selection"
+ :selectable="selectable"
width="55"
v-if="isSelection" />
<el-table-column align="center"
@@ -258,6 +259,10 @@
type: Boolean,
default: false,
},
+ selectable: {
+ type: Function,
+ default: () => true,
+ },
isShowPagination: {
type: Boolean,
default: true,
diff --git a/src/views/productionManagement/processRoute/processRouteItem/index.vue b/src/views/productionManagement/processRoute/processRouteItem/index.vue
index fd1a6a8..6d64c30 100644
--- a/src/views/productionManagement/processRoute/processRouteItem/index.vue
+++ b/src/views/productionManagement/processRoute/processRouteItem/index.vue
@@ -68,7 +68,8 @@
style="margin-right: 10px;">
鍗$墖瑙嗗浘
</el-button>
- <el-button type="primary"
+ <el-button v-if="editable"
+ type="primary"
@click="handleAdd">鏂板</el-button>
</div>
</div>
@@ -133,12 +134,12 @@
link
size="small"
@click="handleEdit(scope.row)"
- :disabled="scope.row.isComplete">缂栬緫</el-button>
+ :disabled="scope.row.isComplete || !editable">缂栬緫</el-button>
<el-button type="danger"
link
size="small"
@click="handleDelete(scope.row)"
- :disabled="scope.row.isComplete">鍒犻櫎</el-button>
+ :disabled="scope.row.isComplete || !editable">鍒犻櫎</el-button>
</template>
</el-table-column>
</el-table>
@@ -152,7 +153,8 @@
style="margin-right: 10px;">
琛ㄦ牸瑙嗗浘
</el-button>
- <el-button type="primary"
+ <el-button v-if="editable"
+ type="primary"
@click="handleAdd">鏂板</el-button>
</div>
</div>
@@ -196,7 +198,7 @@
link
size="small"
@click="handleEdit(item)"
- :disabled="item.isComplete">缂栬緫</el-button>
+ :disabled="item.isComplete || !editable">缂栬緫</el-button>
<el-button type="info"
link
size="small"
@@ -205,7 +207,7 @@
link
size="small"
@click="handleDelete(item)"
- :disabled="item.isComplete">鍒犻櫎</el-button>
+ :disabled="item.isComplete || !editable">鍒犻櫎</el-button>
</div>
</div>
</div>
@@ -216,7 +218,7 @@
style="margin-top: 20px;">
<div class="section-title">BOM 缁撴瀯</div>
<div class="section-actions"
- v-if="pageType === 'order'">
+ v-if="pageType === 'order' && editable">
<el-button v-if="!bomDataValue.isEdit"
type="primary"
@click="bomDataValue.isEdit = true">
@@ -447,7 +449,6 @@
@confirm="handleProductSelect"
single />
<!-- 鍙傛暟鍒楄〃瀵硅瘽妗� -->
- <!-- :editable="!routeInfo.status" -->
<ProcessParamListDialog v-model="showParamListDialog"
:title="`${currentProcess ? (currentProcess.processName || currentProcess.technologyOperationName || currentProcess.operationName) : ''} - 鍙傛暟鍒楄〃`"
:route-id="routeId"
@@ -455,6 +456,7 @@
:process="currentProcess"
:page-type="pageType"
:param-list="paramList"
+ :editable="editable"
@getsyncProcessParamItem="getsyncProcessParamItem"
@refresh="refreshParamList" />
</div>
@@ -509,6 +511,7 @@
const routeId = computed(() => route.query.id);
const orderId = computed(() => route.query.orderId);
const pageType = computed(() => route.query.type);
+ const editable = computed(() => route.query.editable !== "false");
const tableLoading = ref(false);
const tableData = ref([]);
@@ -878,6 +881,7 @@
// 鍒濆鍖栨嫋鎷芥帓搴�
const initSortable = () => {
destroySortable();
+ if (!editable.value) return;
if (viewMode.value === "table") {
// 琛ㄦ牸瑙嗗浘鐨勬嫋鎷芥帓搴�
diff --git a/src/views/productionManagement/productionOrder/components/MaterialDetailDialog.vue b/src/views/productionManagement/productionOrder/components/MaterialDetailDialog.vue
index e9b2646..370815e 100644
--- a/src/views/productionManagement/productionOrder/components/MaterialDetailDialog.vue
+++ b/src/views/productionManagement/productionOrder/components/MaterialDetailDialog.vue
@@ -55,14 +55,15 @@
controls-position="right"
placeholder="杈撳叆瀹為檯鏁伴噺"
style="width: 100%;"
- :disabled="row.returned"
+ :disabled="row.returned || orderRow?.end"
@change="val => handleActualQtyChange(row, val)" />
</template>
</el-table-column>
</el-table>
<template #footer>
<span class="dialog-footer">
- <el-button type="warning"
+ <el-button v-if="!orderRow?.end"
+ type="warning"
:loading="materialReturnConfirming"
:disabled="!canOpenReturnSummary"
@click="openReturnSummaryDialog">
diff --git a/src/views/productionManagement/productionOrder/index.vue b/src/views/productionManagement/productionOrder/index.vue
index 00996ba..93fc177 100644
--- a/src/views/productionManagement/productionOrder/index.vue
+++ b/src/views/productionManagement/productionOrder/index.vue
@@ -40,6 +40,8 @@
value="3" />
<el-option label="宸插彇娑�"
value="4" />
+ <el-option label="宸茬粨鏉�"
+ value="5" />
</el-select>
</el-form-item>
<el-form-item>
@@ -65,6 +67,7 @@
:tableLoading="tableLoading"
:row-class-name="tableRowClassName"
:isSelection="true"
+ :selectable="row => !row.endOrder"
@selection-change="handleSelectionChange"
@pagination="pagination">
<template #completionStatus="{ row }">
@@ -210,6 +213,7 @@
listProcessBom,
delProductOrder,
getProductOrderSource,
+ updateProductOrder,
} from "@/api/productionManagement/productionOrder.js";
import { listMain as getOrderProcessRouteMain } from "@/api/productionManagement/productProcessRoute.js";
import MaterialLedgerDialog from "@/views/productionManagement/productionOrder/components/MaterialLedgerDialog.vue";
@@ -243,7 +247,7 @@
prop: "npsNo",
width: "150px",
},
- // 1.寰呭紑濮嬨��2.杩涜涓��3.宸插畬鎴愩��4.宸插彇娑�
+ // 1.寰呭紑濮嬨��2.杩涜涓��3.宸插畬鎴愩��4.宸插彇娑堛��5.宸茬粨鏉�
{
label: "鐘舵��",
prop: "status",
@@ -256,6 +260,8 @@
? "杩涜涓�"
: val === 3
? "宸插畬鎴�"
+ : val === 5
+ ? "宸茬粨鏉�"
: "宸插彇娑�",
formatType: val =>
val === 1
@@ -264,7 +270,9 @@
? "warning"
: val === 3
? "success"
- : "danger",
+ : val === 5
+ ? "danger"
+ : "info",
},
{
label: "浜у搧鍚嶇О",
@@ -319,7 +327,7 @@
label: "鎿嶄綔",
align: "center",
fixed: "right",
- width: 260,
+ width: 280,
operation: [
{
name: "宸ヨ壓璺嚎",
@@ -332,7 +340,7 @@
{
name: "缁戝畾宸ヨ壓璺嚎",
type: "text",
- showHide: row => !row.processRouteCode,
+ showHide: row => !row.processRouteCode && !row.endOrder,
clickFun: row => {
openBindRouteDialog(row, "add");
},
@@ -340,7 +348,7 @@
{
name: "鏇存崲宸ヨ壓璺嚎",
type: "text",
- showHide: row => row.processRouteCode,
+ showHide: row => row.processRouteCode && !row.endOrder,
clickFun: row => {
openBindRouteDialog(row, "change");
},
@@ -356,6 +364,7 @@
name: "棰嗘枡",
type: "text",
color: "#5EC7AB",
+ showHide: row => !row.endOrder,
clickFun: row => {
openMaterialDialog(row);
},
@@ -364,6 +373,7 @@
name: "琛ユ枡",
type: "text",
color: "#5EC7AB",
+ showHide: row => !row.endOrder,
clickFun: row => {
openMaterialSupplementDialog(row);
},
@@ -379,7 +389,8 @@
{
name: "鎵撳嵃棰嗘枡鍗�",
type: "text",
- color: "#409eff",
+ color: "#5EC7AB",
+ showHide: row => !row.endOrder,
clickFun: row => {
handlePrint(row);
},
@@ -397,6 +408,15 @@
model: row.model,
},
});
+ },
+ },
+ {
+ name: "缁撴潫璁㈠崟",
+ type: "text",
+ color: "red",
+ showHide: row => !row.endOrder,
+ clickFun: row => {
+ handleEndOrder(row);
},
},
],
@@ -642,6 +662,7 @@
quantity: row.quantity || 0,
orderId,
type: "order",
+ editable: !row.endOrder,
},
});
} catch (e) {
@@ -736,6 +757,26 @@
});
};
+ // 缁撴潫璁㈠崟
+ const handleEndOrder = row => {
+ ElMessageBox.confirm(`鏄惁纭缁撴潫璁㈠崟锛�${row.npsNo}锛焋, "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ })
+ .then(() => {
+ const params = {
+ id: row.id,
+ endOrder: true,
+ };
+ updateProductOrder(params).then(() => {
+ proxy.$modal.msgSuccess("缁撴潫璁㈠崟鎴愬姛");
+ getList();
+ });
+ })
+ .catch(() => {});
+ };
+
const handleConfirmRoute = () => {};
onMounted(() => {
diff --git a/src/views/productionManagement/workOrderManagement/index.vue b/src/views/productionManagement/workOrderManagement/index.vue
index bb09a10..9eb232d 100644
--- a/src/views/productionManagement/workOrderManagement/index.vue
+++ b/src/views/productionManagement/workOrderManagement/index.vue
@@ -244,6 +244,7 @@
@refresh="getList" />
<FileList v-if="fileDialogVisible"
v-model:visible="fileDialogVisible"
+ :editable="!currentWorkOrderRow?.endOrder"
:record-type="'production_operation_task'"
:record-id="currentWorkOrderId" />
</div>
@@ -370,6 +371,7 @@
clickFun: row => {
showReportDialog(row);
},
+ showHide: row => !row.endOrder,
disabled: row => {
if (row.planQuantity <= 0) return true;
if (!row.userIds) return false;
@@ -631,9 +633,11 @@
const printTransferCard = () => {
window.print();
};
+ const currentWorkOrderRow = ref(null);
const openWorkOrderFiles = row => {
currentWorkOrderId.value = row.id;
+ currentWorkOrderRow.value = row;
fileDialogVisible.value = true;
};
--
Gitblit v1.9.3