From 075c5319285ab9896a74655c82cec7c1ae0e0196 Mon Sep 17 00:00:00 2001
From: pan <antony1029@163.com>
Date: 星期五, 12 十二月 2025 14:13:46 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/ZhongRui/ALDbanyunxiangmu
---
项目代码/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue | 487 ++++++++++++++++++++++++++++++++---------------------
1 files changed, 292 insertions(+), 195 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue"
index cc9b8be..1a7d1a0 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue"
@@ -60,7 +60,7 @@
<div class="box-table" style="margin-top: 1%">
<el-table
ref="singleTable"
- :data="tableData"
+ :data="groupedTableData"
style="width: 100%; height: 100%"
highlight-current-row
@current-change="handleCurrentChange"
@@ -77,38 +77,127 @@
align="center"
></el-table-column>
<el-table-column
- v-for="(item, index) in tableColumns.filter((x) => !x.hidden)"
- :key="index"
- :prop="item.prop"
- :label="item.title"
- :width="item.width"
+ prop="materielCode"
+ label="鐗╂枡缂栧彿"
+ width="120"
+ align="center"
+ ></el-table-column>
+ <el-table-column
+ prop="materielName"
+ label="鐗╂枡鍚嶇О"
+ width="150"
+ align="center"
+ ></el-table-column>
+ <el-table-column
+ prop="batchNo"
+ label="鎵规鍙�"
+ width="90"
+ align="center"
+ ></el-table-column>
+ <el-table-column
+ prop="supplyCode"
+ label="渚涘簲鍟嗙紪鍙�"
+ width="90"
+ align="center"
+ ></el-table-column>
+ <el-table-column
+ prop="orderQuantity"
+ label="鍗曟嵁鏁伴噺"
+ width="90"
+ align="center"
+ ></el-table-column>
+ <el-table-column
+ prop="lockQuantity"
+ label="閿佸畾鏁伴噺"
+ width="90"
+ align="center"
+ ></el-table-column>
+ <el-table-column
+ prop="overOutQuantity"
+ label="宸插嚭鏁伴噺"
+ width="90"
+ align="center"
+ ></el-table-column>
+ <el-table-column
+ prop="moveQty"
+ label="鎸枡鏁伴噺"
+ width="90"
+ align="center"
+ ></el-table-column>
+ <el-table-column
+ prop="unit"
+ label="鍗曚綅"
+ width="80"
+ align="center"
+ ></el-table-column>
+ <el-table-column
+ prop="orderDetailStatus"
+ label="璁㈠崟鏄庣粏鐘舵��"
+ width="90"
align="center"
>
<template #default="scoped">
- <div v-if="item.type == 'icon'">
- <el-tooltip
- class="item"
- effect="dark"
- :content="item.title"
- placement="bottom"
+ <el-tag size="small">
+ {{ getDictionaryForGroup(scoped.row) }}
+ </el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column
+ prop="assignStock"
+ label="鎸囧畾搴撳瓨"
+ width="90"
+ align="center"
+ :hidden="mainBusinessType !== '22'"
+ >
+ <template #default="scoped">
+ <el-tooltip
+ class="item"
+ effect="dark"
+ content="鎸囧畾搴撳瓨"
+ placement="bottom"
+ >
+ <el-link
+ type="primary"
+ :disabled="getButtonEnable('assignStock', scoped.row)"
+ @click="handleAssignStock(scoped.row)"
>
- <el-link
- type="primary"
- :disabled="getButtonEnable(item.prop, scoped.row)"
- @click="tableButtonClick(scoped.row, item)"
- >
- <i :class="item.icon" style="font-size: 22px"></i>
- </el-link>
- </el-tooltip>
- </div>
- <div v-else-if="item.type == 'tag'">
- <el-tag size="small">
- {{ getDictionary(scoped.row, item) }}
- </el-tag>
- </div>
- <div v-else>
- {{ scoped.row[item.prop] }}
- </div>
+ <i class="el-icon-s-grid" style="font-size: 22px"></i>
+ </el-link>
+ </el-tooltip>
+ </template>
+ </el-table-column>
+ <el-table-column
+ prop="viewDetail"
+ label="鍑哄簱璇︾粏"
+ width="90"
+ align="center"
+ >
+ <template #default="scoped">
+ <el-tooltip
+ class="item"
+ effect="dark"
+ content="鏌ョ湅鍑哄簱璇︾粏"
+ placement="bottom"
+ >
+ <el-link
+ type="primary"
+ @click="handleViewDetail(scoped.row)"
+ >
+ <i class="el-icon-s-operation" style="font-size: 22px"></i>
+ </el-link>
+ </el-tooltip>
+ </template>
+ </el-table-column>
+ <el-table-column
+ prop="detailCount"
+ label="鏄庣粏鏁伴噺"
+ width="80"
+ align="center"
+ >
+ <template #default="scoped">
+ <el-tag type="info" size="small">
+ {{ scoped.row.detailCount }}
+ </el-tag>
</template>
</el-table-column>
</el-table>
@@ -129,6 +218,7 @@
import StockSelect from "./StockSelect.vue";
import SelectedStock from "./SelectedStock.vue";
import NoStockOut from "./NoStockOut.vue";
+import { stationManager, STATION_STORAGE_KEY } from "@/../src/uitils/stationManager";
import { h, createVNode, render, reactive } from "vue";
import {
ElDialog,
@@ -151,129 +241,9 @@
flag: false,
currentRow: null,
selection: [],
- tableData: [],
- mainBusinessType: null, // 鏂板锛氬瓨鍌ㄤ富鍗曟嵁鐨刡usinessType
- tableColumns: [
- {
- prop: "id",
- title: "Id",
- type: "int",
- width: 90,
- hidden: true,
- },
- {
- prop: "orderId",
- title: "鍑哄簱鍗曚富閿�",
- type: "string",
- width: 90,
- hidden: true,
- },
- {
- prop: "materielCode",
- title: "鐗╂枡缂栧彿",
- type: "string",
- width: 120,
- },
- {
- prop: "materielName",
- title: "鐗╂枡鍚嶇О",
- type: "string",
- width: 150,
- },
- {
- prop: "batchNo",
- title: "鎵规鍙�",
- type: "string",
- width: 90,
- },
- {
- prop: "supplyCode",
- title: "渚涘簲鍟嗙紪鍙�",
- type: "string",
- width: 90,
- },
- {
- prop: "orderQuantity",
- title: "鍗曟嵁鏁伴噺",
- type: "string",
- width: 90,
- },
- {
- prop: "lockQuantity",
- title: "閿佸畾鏁伴噺",
- type: "int",
- width: 90,
- },
- {
- prop: "overOutQuantity",
- title: "宸插嚭鏁伴噺",
- type: "string",
- width: 90,
- },
- {
- prop: "moveQty",
- title: "鎸枡鏁伴噺",
- type: "string",
- width: 90,
- },
- {
- prop: "unit",
- title: "鍗曚綅",
- type: "string",
- width: 80,
- },
- {
- prop: "orderDetailStatus",
- title: "璁㈠崟鏄庣粏鐘舵��",
- type: "tag",
- width: 90,
- bindKey: "orderDetailStatusEnum",
- },
- {
- prop: "assignStock",
- title: "鎸囧畾搴撳瓨",
- type: "icon",
- width: 90,
- hidden: true, // 榛樿闅愯棌
- icon: "el-icon-s-grid",
- },
- {
- prop: "viewDetail",
- title: "鍑哄簱璇︾粏",
- type: "icon",
- width: 90,
- icon: "el-icon-s-operation",
- },
- {
- prop: "creater",
- title: "鍒涘缓浜�",
- type: "string",
- width: 90,
- },
- {
- prop: "createDate",
- title: "鍒涘缓鏃堕棿",
- type: "datetime",
- width: 160,
- },
- {
- prop: "modifier",
- title: "淇敼浜�",
- type: "string",
- width: 100,
- },
- {
- prop: "modifyDate",
- title: "淇敼鏃堕棿",
- type: "datetime",
- width: 160,
- },
- {
- prop: "remark",
- title: "澶囨敞",
- type: "string",
- },
- ],
+ tableData: [], // 鍘熷鏁版嵁
+ groupedTableData: [], // 鍒嗙粍鍚庣殑鏁版嵁
+ mainBusinessType: null, // 瀛樺偍涓诲崟鎹殑businessType
paginations: {
sort: "id",
order: "desc",
@@ -316,16 +286,62 @@
dictionaryList: null,
};
},
- methods: {
- toggleAssignStockColumn() {
- const assignStockColumn = this.tableColumns.find(
- (item) => item.prop === "assignStock"
- );
- if (assignStockColumn) {
- // businessType涓�22鏃舵樉绀猴紝鍚﹀垯闅愯棌
- assignStockColumn.hidden = this.mainBusinessType !=='22';
+ onMounted() {
+ // 浠庢湰鍦板瓨鍌ㄥ姞杞戒繚瀛樼殑绔欏彴鍊�
+ const savedStation = stationManager.getStation();
+ console.log(savedStation);
+ if (savedStation) {
+ outboundForm.selectedPlatform = savedStation;
+ } else if (stationOptions.length > 0) {
+ // 濡傛灉娌℃湁淇濆瓨鐨勫�硷紝浣跨敤绗竴涓�夐」
+ //stationValue.value = stationOptions[0].value;
}
},
+ methods: {
+ // 鏍规嵁鐗╂枡缂栧彿銆佹壒娆°�佷緵搴斿晢鍒嗙粍鏁版嵁
+ groupDataByMaterial() {
+ const groups = {};
+
+ this.tableData.forEach(item => {
+ // 鏋勫缓鍒嗙粍閿紝鎵规鍜屼緵搴斿晢鍙互涓虹┖
+ const groupKey = `${item.materielCode}_${item.batchNo || ''}_${item.supplyCode || ''}`;
+
+ if (!groups[groupKey]) {
+ // 鍒涘缓鏂板垎缁�
+ groups[groupKey] = {
+ materielCode: item.materielCode,
+ materielName: item.materielName,
+ batchNo: item.batchNo || '-',
+ supplyCode: item.supplyCode || '-',
+ orderQuantity: 0,
+ lockQuantity: 0,
+ overOutQuantity: 0,
+ moveQty: 0,
+ unit: item.unit,
+ orderDetailStatus: item.orderDetailStatus,
+ detailCount: 0,
+ originalDetails: [] // 淇濆瓨鍘熷鏄庣粏鏁版嵁
+ };
+ }
+
+ // 绱姞鏁伴噺
+ groups[groupKey].orderQuantity += item.orderQuantity || 0;
+ groups[groupKey].lockQuantity += item.lockQuantity || 0;
+ groups[groupKey].overOutQuantity += item.overOutQuantity || 0;
+ groups[groupKey].moveQty += item.moveQty || 0;
+ groups[groupKey].detailCount += 1;
+ groups[groupKey].originalDetails.push(item);
+
+ // 濡傛灉鐘舵�佷笉鍚岋紝鍙互鐢ㄧ涓�涓姸鎬佹垨鐗规畩澶勭悊
+ // 杩欓噷浣跨敤绗竴涓槑缁嗙殑鐘舵��
+ });
+
+ // 杞崲涓烘暟缁�
+ this.groupedTableData = Object.values(groups);
+
+ console.log('鍒嗙粍鍚庣殑鏁版嵁:', this.groupedTableData);
+ },
+
open(row) {
this.row = row;
this.showDetialBox = true;
@@ -334,8 +350,8 @@
this.mainBusinessType = row.businessType;
this.getDictionaryData();
this.getData();
- this.toggleAssignStockColumn();
},
+
getData() {
var wheres = [{ name: "orderId", value: this.row.id }];
var param = {
@@ -349,25 +365,66 @@
.post("api/OutboundOrderDetail/GetPageData", param, "鏌ヨ涓�")
.then((x) => {
this.tableData = x.rows;
- this.toggleAssignStockColumn(); // 鏁版嵁鍔犺浇鍚庨噸鏂扮‘璁ゅ垪鏄鹃殣
+ // 鍒嗙粍鏁版嵁
+ this.groupDataByMaterial();
});
},
- tableButtonClick(row, column) {
- if (column.prop == "assignStock") {
- this.$refs.child.open(row);
- } else if (column.prop == "NoStockOut") {
- this.$refs.NoStockOut.open(row);
+
+ // 閲嶇偣淇敼锛氬鐞嗘寚瀹氬簱瀛樼偣鍑讳簨浠� - 浼犻�掑畬鏁寸殑鍒嗙粍鏄庣粏淇℃伅
+ handleAssignStock(row) {
+ // 浼犻�掑畬鏁寸殑鍒嗙粍鏄庣粏鏁版嵁锛堝寘鍚墍鏈夊師濮嬫槑缁咺D鍜岀墿鏂欎俊鎭級
+ if (row.originalDetails && row.originalDetails.length > 0) {
+ this.$refs.child.open({
+ // 鐗╂枡鍩烘湰淇℃伅锛堝彇绗竴涓槑缁嗙殑淇℃伅锛�
+ materielCode: row.originalDetails[0].materielCode,
+ materielName: row.originalDetails[0].materielName,
+ // 鍒嗙粍鍚庣殑鎬婚渶姹傛暟閲�
+ qty: row.orderQuantity,
+ // 涓诲崟鎹紪鍙�
+ upperOrderNo: this.row.upperOrderNo,
+ // 鍏抽敭锛氬綋鍓嶅垎缁勭殑鎵�鏈夋槑缁咺D闆嗗悎
+ detailIds: row.originalDetails.map(detail => detail.id),
+ // 涓诲崟鎹甀D
+ mainOrderId: this.row.id,
+ // 瀹屾暣鍒嗙粍琛屼俊鎭紙澶囩敤锛�
+ groupRow: row
+ });
} else {
- this.$refs.selectedStock.open(row);
+ ElMessage.warning("璇ュ垎缁勬病鏈夋槑缁嗘暟鎹紝鏃犳硶鎸囧畾搴撳瓨");
}
},
+
+ handleViewDetail(row) {
+ // 鏌ョ湅鍒嗙粍鏄庣粏鐨勮缁嗕俊鎭�
+ if (row.originalDetails && row.originalDetails.length > 0) {
+ // 杩欓噷鍙互鎵撳紑涓�涓柊鐨勫脊绐楁樉绀烘墍鏈夋槑缁嗭紝鎴栬�呬娇鐢ㄧ涓�涓槑缁�
+ this.$refs.selectedStock.open(row.originalDetails[0]);
+ }
+ },
+
lockstocks() {
if (this.selection.length === 0) {
return this.$message.error("璇烽�夋嫨鍗曟嵁鏄庣粏");
}
- var keys = this.selection.map((item) => item.id);
+
+ // 鑾峰彇鎵�鏈夐�変腑鍒嗙粍鐨勫師濮嬫槑缁咺D
+ const detailIds = [];
+ this.selection.forEach(group => {
+ if (group.originalDetails && group.originalDetails.length > 0) {
+ group.originalDetails.forEach(detail => {
+ if (detail.id) {
+ detailIds.push(detail.id);
+ }
+ });
+ }
+ });
+
+ if (detailIds.length === 0) {
+ return this.$message.error("娌℃湁鎵惧埌鍙攣瀹氱殑鏄庣粏");
+ }
+
this.http
- .post("api/OutboundOrderDetail/LockOutboundStocks", keys, "鏁版嵁澶勭悊涓�")
+ .post("api/OutboundOrderDetail/LockOutboundStocks", detailIds, "鏁版嵁澶勭悊涓�")
.then((x) => {
if (!x.status) return this.$message.error(x.message);
this.$message.success("鎿嶄綔鎴愬姛");
@@ -377,22 +434,44 @@
});
});
},
+
handleOpenPicking() {
this.$router.push({
path: "/outbound/picking",
query: { orderId: this.row.id, orderNo: this.row.orderNo },
});
},
+
handleOpenBatchPicking() {
this.$router.push({
path: "/outbound/batchpicking",
query: { orderId: this.row.id, orderNo: this.row.orderNo },
});
},
+
outbound() {
+ const savedStation = stationManager.getStation();
+ console.log(savedStation);
if (this.selection.length === 0) {
return this.$message.error("璇烽�夋嫨鍗曟嵁鏄庣粏");
}
+
+ // 鑾峰彇鎵�鏈夐�変腑鍒嗙粍鐨勫師濮嬫槑缁咺D
+ const detailIds = [];
+ this.selection.forEach(group => {
+ if (group.originalDetails && group.originalDetails.length > 0) {
+ group.originalDetails.forEach(detail => {
+ if (detail.id) {
+ detailIds.push(detail.id);
+ }
+ });
+ }
+ });
+
+ if (detailIds.length === 0) {
+ return this.$message.error("娌℃湁鎵惧埌鍙嚭搴撶殑鏄庣粏");
+ }
+
const platformOptions = [
{ label: "绔欏彴2", value: "2-1" },
{ label: "绔欏彴3", value: "3-1" },
@@ -404,6 +483,9 @@
selectedPlatform: platformOptions[0].value,
});
+ if (savedStation) {
+ formData.selectedPlatform = savedStation;
+ }
const vnode = createVNode(
ElDialog,
{
@@ -448,7 +530,7 @@
},
}, [
h(ElSelect, {
- placeholder: "璇烽�夋嫨鍑哄簱绔欏彴锛�3-12锛�",
+ placeholder: "璇烽�夋嫨鍑哄簱绔欏彴",
modelValue: formData.selectedPlatform,
"onUpdate:modelValue": (val) => {
formData.selectedPlatform = val;
@@ -492,9 +574,8 @@
return;
}
- const keys = this.selection.map((item) => item.id);
const requestParams = {
- taskIds: keys,
+ taskIds: detailIds,
outboundPlatform: formData.selectedPlatform,
};
@@ -531,13 +612,26 @@
vnode.appContext = this.$.appContext;
render(vnode, mountNode);
},
+
outboundbatch() {
+ const savedStation = stationManager.getStation();
+ console.log(savedStation);
if (this.selection.length === 0) {
return this.$message.error("璇烽�夋嫨鍗曟嵁鏄庣粏");
}
if (this.selection.length > 1) {
return this.$message.error("鍙兘閫夋嫨涓�鏉″崟鎹槑缁嗚繘琛屽垎鎵瑰嚭搴�");
}
+
+ const selectedGroup = this.selection[0];
+ if (!selectedGroup.originalDetails || selectedGroup.originalDetails.length === 0) {
+ return this.$message.error("娌℃湁鎵惧埌鏄庣粏鏁版嵁");
+ }
+
+ // 鍒嗘壒鍑哄簱閫氬父閽堝鍗曚釜鏄庣粏
+ // 杩欓噷浣跨敤绗竴涓槑缁�
+ const selectedDetail = selectedGroup.originalDetails[0];
+
const platformOptions = [
{ label: "绔欏彴2", value: "2-1" },
{ label: "绔欏彴3", value: "3-1" },
@@ -549,7 +643,9 @@
selectedPlatform: platformOptions[0].value,
outboundDecimal: "",
});
-
+ if (savedStation) {
+ formData.selectedPlatform = savedStation;
+ }
const vnode = createVNode(
ElDialog,
{
@@ -608,7 +704,7 @@
},
}, [
h(ElSelect, {
- placeholder: "璇烽�夋嫨鍑哄簱绔欏彴锛�3-12锛�",
+ placeholder: "璇烽�夋嫨鍑哄簱绔欏彴",
modelValue: formData.selectedPlatform,
"onUpdate:modelValue": (val) => {
formData.selectedPlatform = val;
@@ -646,6 +742,7 @@
step: "0.01",
precision: 2,
min: 0.01,
+ max: selectedDetail.orderQuantity - selectedDetail.overOutQuantity - selectedDetail.lockQuantity - selectedDetail.moveQty,
}),
]),
h("div", {
@@ -677,9 +774,8 @@
return;
}
- const keys = this.selection.map((item) => item.id);
const requestParams = {
- orderDetailId: keys[0],
+ orderDetailId: selectedDetail.id,
outboundPlatform: formData.selectedPlatform,
batchQuantity: formData.outboundDecimal,
};
@@ -714,52 +810,52 @@
}
);
- vnode.appContext = this.$.appContext;
+ vnode.appContext = this.$appContext;
render(vnode, mountNode);
},
+
setCurrent(row) {
this.$refs.singleTable.setCurrentRow(row);
},
+
handleCurrentChange(val) {
this.currentRow = val;
},
+
getButtonEnable(propName, row) {
if (propName == "assignStock") {
if (
row.orderDetailStatus !== 0 &&
- row.orderDetailStatus !== 60 &&
- row.orderDetailStatus !== 70 &&
- row.orderDetailStatus !== 80
+ row.orderDetailStatus !== 70
) {
- return true;
- } else {
return false;
+ } else {
+ return true;
}
}
return false;
},
+
parentCall(fun) {
if (typeof fun != "function") {
return console.log("鎵╁睍缁勪欢闇�瑕佷紶鍏ヤ竴涓洖璋冩柟娉曟墠鑳借幏鍙栫埗绾ue瀵硅薄");
}
fun(this);
},
+
handleRowClick(row) {
this.$refs.singleTable.toggleRowSelection(row);
},
+
handleSelectionChange(val) {
this.selection = val;
},
+
getDictionaryData() {
if (this.dictionaryList) {
return;
}
- var param = [];
- this.tableColumns.forEach((x) => {
- if (x.type == "tag" && x.bindKey != "") {
- param.push(x.bindKey);
- }
- });
+ var param = ["orderDetailStatusEnum"];
this.http
.post("api/Sys_Dictionary/GetVueDictionary", param, "鏌ヨ涓�")
.then((x) => {
@@ -768,21 +864,22 @@
}
});
},
- getDictionary(row, column) {
+
+ getDictionaryForGroup(row) {
if (this.dictionaryList) {
- var item = this.dictionaryList.find((x) => x.dicNo == column.bindKey);
+ var item = this.dictionaryList.find((x) => x.dicNo == "orderDetailStatusEnum");
if (item) {
- var dicItem = item.data.find((x) => x.key == row[column.prop]);
+ var dicItem = item.data.find((x) => x.key == row.orderDetailStatus);
if (dicItem) {
return dicItem.value;
} else {
- return row[column.prop];
+ return row.orderDetailStatus;
}
} else {
- return row[column.prop];
+ return row.orderDetailStatus;
}
}
- return row[column.prop];
+ return row.orderDetailStatus;
},
},
};
--
Gitblit v1.9.3