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 | 1138 +++++++++++++++++++++++++++++++++--------------------------
1 files changed, 633 insertions(+), 505 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 d796938..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"
@@ -14,35 +14,34 @@
<span>宸查�変腑 {{ selection.length }} 椤�</span>
</el-col>
<el-col :span="8">
- <!-- <el-link
- type="primary"
- size="small"
- style="float: right; height: 20px"
- @click="lockstocks"
- >閿佸畾搴撳瓨</el-link> -->
-
<el-link
type="primary"
size="small"
+ v-if="isBatch === 0"
style="float: right; height: 20px"
@click="handleOpenPicking"
- >鎷i��</el-link>
- <el-link
+ >鎷i��</el-link
+ >
+ <el-link
type="primary"
size="small"
style="float: right; height: 20px; margin-right: 10px"
+ v-if="isBatch === 1"
@click="handleOpenBatchPicking"
- >鍒嗘壒鎷i��</el-link>
+ >鍒嗘壒鎷i��</el-link
+ >
<el-link
type="primary"
size="small"
+ v-if="isBatch === 0"
style="float: right; height: 20px; margin-right: 10px"
@click="outbound"
>鐩存帴鍑哄簱</el-link
>
- <el-link
+ <el-link
type="primary"
size="small"
+ v-if="isBatch === 1"
style="float: right; height: 20px; margin-right: 10px"
@click="outboundbatch"
>鍒嗘壒鍑哄簱</el-link
@@ -53,15 +52,15 @@
style="float: right; height: 20px; margin-right: 10px"
@click="getData"
>鍒锋柊</el-link
- ></el-col
- >
+ >
+ </el-col>
</el-row>
</el-alert>
</div>
<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"
@@ -78,33 +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-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>
+ <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)"
+ >
+ <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>
@@ -118,155 +211,46 @@
<NoStockOut ref="NoStockOut" @parentCall="parentCall"></NoStockOut>
</div>
</template>
+
<script>
import VolBox from "@/components/basic/VolBox.vue";
import VolForm from "@/components/basic/VolForm.vue";
import StockSelect from "./StockSelect.vue";
import SelectedStock from "./SelectedStock.vue";
import NoStockOut from "./NoStockOut.vue";
-import { h,createVNode, render,reactive } from 'vue';
-import { ElDialog , ElForm, ElFormItem, ElSelect,ElOption, ElButton, ElInput, ElMessage } from 'element-plus';
-import { th } from 'element-plus/es/locale';
+import { stationManager, STATION_STORAGE_KEY } from "@/../src/uitils/stationManager";
+import { h, createVNode, render, reactive } from "vue";
+import {
+ ElDialog,
+ ElForm,
+ ElFormItem,
+ ElSelect,
+ ElOption,
+ ElButton,
+ ElInput,
+ ElMessage,
+} from "element-plus";
export default {
- components: { VolBox, VolForm, StockSelect, SelectedStock,NoStockOut},
+ components: { VolBox, VolForm, StockSelect, SelectedStock, NoStockOut },
data() {
return {
row: null,
+ isBatch: 0,
showDetialBox: false,
flag: false,
currentRow: null,
selection: [],
- tableData: [],
- 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: 150,
- },
- {
- prop: "materielName",
- title: "鐗╂枡鍚嶇О",
- type: "string",
- width: 150,
- },
- {
- prop: "batchNo",
- title: "鎵规鍙�",
- type: "string",
- width: 90,
- },
- {
- prop: "supplyCode",
- title: "渚涘簲鍟嗙紪鍙�",
- type: "string",
- width: 150,
- },
- {
- prop: "orderQuantity",
- title: "鍗曟嵁鏁伴噺",
- type: "string",
- width: 90,
- },
- {
- prop: "lockQuantity",
- title: "閿佸畾鏁伴噺",
- type: "int",
- width: 90,
- },
- {
- prop: "overOutQuantity",
- title: "宸插嚭鏁伴噺",
- type: "string",
- width: 90,
- },
- {
- prop: "unit",
- title: "鍗曚綅",
- type: "string",
- width: 90,
- },
- {
- prop: "orderDetailStatus",
- title: "璁㈠崟鏄庣粏鐘舵��",
- type: "tag",
- width: 90,
- bindKey: "orderDetailStatusEnum",
- },
- {
- prop: "assignStock",
- title: "鎸囧畾搴撳瓨",
- type: "icon",
- width: 90,
- icon: "el-icon-s-grid",
- },
- {
- prop: "NoStockOut",
- title: "鏃犲簱瀛樺嚭搴�",
- type: "icon",
- width: 100,
- icon: "el-icon-setting",
- },
- {
- 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",
Foots: "",
total: 0,
- // 2020.08.29澧炲姞鑷畾涔夊垎椤垫潯澶у皬
sizes: [30, 60, 100, 120],
- size: 30, // 榛樿鍒嗛〉澶у皬
+ size: 30,
Wheres: [],
page: 1,
rows: 30,
@@ -302,13 +286,72 @@
dictionaryList: null,
};
},
+ 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;
+ console.log("涓诲崟鎹暟鎹細", this.row);
+ this.isBatch = row.isBatch;
+ this.mainBusinessType = row.businessType;
this.getDictionaryData();
this.getData();
},
+
getData() {
var wheres = [{ name: "orderId", value: this.row.id }];
var param = {
@@ -316,31 +359,72 @@
rows: this.paginations.rows,
sort: this.paginations.sort,
order: this.paginations.order,
- wheres: JSON.stringify(wheres), // 鏌ヨ鏉′欢锛屾牸寮忎负[{ name: "瀛楁", value: "xx" }]
+ wheres: JSON.stringify(wheres),
};
this.http
.post("api/OutboundOrderDetail/GetPageData", param, "鏌ヨ涓�")
.then((x) => {
this.tableData = x.rows;
+ // 鍒嗙粍鏁版嵁
+ this.groupDataByMaterial();
});
},
- tableButtonClick(row, column) {
- if (column.prop == "assignStock") {
- this.$refs.child.open(row);
- } else if (column.prop == "NoStockOut") {
- this.$refs.NoStockOut.open(row);
- }else{
- //鐐瑰嚮鎵撳紑鍑哄簱璇︽儏
- this.$refs.selectedStock.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 {
+ 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); // 鑾峰彇閫変腑琛岀殑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("鎿嶄綔鎴愬姛");
@@ -350,384 +434,428 @@
});
});
},
- // 鎵撳紑鎷i�夐〉闈�
- handleOpenPicking() {
+
+ handleOpenPicking() {
this.$router.push({
- path: '/outbound/picking',
- query: { orderId: this.row.id ,orderNo:this.row.orderNo}
- })
+ 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}})
+ 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("璇烽�夋嫨鍗曟嵁鏄庣粏");
}
- const platformOptions = [{label:'绔欏彴2',value:'2-1'},{label:'绔欏彴3',value:'3-1'}];
- const mountNode = document.createElement('div');
+
+ // 鑾峰彇鎵�鏈夐�変腑鍒嗙粍鐨勫師濮嬫槑缁咺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" },
+ ];
+ const mountNode = document.createElement("div");
document.body.appendChild(mountNode);
- // 2. 琛ㄥ崟鏁版嵁锛堥粯璁ら�変腑绔欏彴3锛�
const formData = reactive({
- selectedPlatform: platformOptions[0].value // 榛樿缁戝畾銆岀珯鍙�3銆嶇殑value
+ selectedPlatform: platformOptions[0].value,
});
- // 3. 鍔ㄦ�佸垱寤哄脊绐楃粍浠�
- const vnode = createVNode(ElDialog, {
- title: '鍑哄簱鎿嶄綔 - 閫夋嫨鍑哄簱绔欏彴',
- width: '500px',
- modelValue: true,
- appendToBody: true,
- 'onUpdate:modelValue': (isVisible) => {
- if (!isVisible) {
- render(null, mountNode);
- document.body.removeChild(mountNode);
- }
- },
- style: {
- padding: '20px 0',
- borderRadius: '8px'
- }
- }, {
- default: () => h(ElForm, {
- model: formData,
- rules: {
- selectedPlatform: [
- { required: true, message: '璇烽�夋嫨鍑哄簱绔欏彴', trigger: 'change' }
- ]
+ if (savedStation) {
+ formData.selectedPlatform = savedStation;
+ }
+ const vnode = createVNode(
+ ElDialog,
+ {
+ title: "鍑哄簱鎿嶄綔 - 閫夋嫨鍑哄簱绔欏彴",
+ width: "500px",
+ modelValue: true,
+ appendToBody: true,
+ "onUpdate:modelValue": (isVisible) => {
+ if (!isVisible) {
+ render(null, mountNode);
+ document.body.removeChild(mountNode);
+ }
},
- ref: 'outboundForm',
- labelWidth: '100px',
style: {
- padding: '0 30px'
- }
- }, [
- // 鍑哄簱绔欏彴閫夋嫨椤癸紙鏍稿績琛ㄥ崟椤癸級
- h(ElFormItem, {
- label: '鍑哄簱绔欏彴',
- prop: 'selectedPlatform',
- style: {
- marginBottom: '24px'
- }
- }, [
- h(ElSelect, {
- placeholder: '璇烽�夋嫨鍑哄簱绔欏彴锛�3-12锛�',
- modelValue: formData.selectedPlatform,
- 'onUpdate:modelValue': (val) => {
- formData.selectedPlatform = val;
+ padding: "20px 0",
+ borderRadius: "8px",
+ },
+ },
+ {
+ default: () =>
+ h(
+ ElForm,
+ {
+ model: formData,
+ rules: {
+ selectedPlatform: [
+ { required: true, message: "璇烽�夋嫨鍑哄簱绔欏彴", trigger: "change" },
+ ],
+ },
+ ref: "outboundForm",
+ labelWidth: "100px",
+ style: {
+ padding: "0 30px",
+ },
},
- style: {
- width: '100%',
- height: '40px',
- borderRadius: '4px',
- borderColor: '#dcdfe6'
- }
- }, platformOptions.map(platform =>
- h(ElOption, { label: platform.label, value: platform.value })
- ))
- ]),
- // 搴曢儴鎸夐挳鍖�
- h('div', {
- style: {
- textAlign: 'right',
- marginTop: '8px',
- paddingRight: '4px'
- }
- }, [
- h(ElButton, {
- type: 'text',
- onClick: () => {
- render(null, mountNode);
- document.body.removeChild(mountNode);
- ElMessage.info('鍙栨秷鍑哄簱鎿嶄綔');
- },
- style: {
- marginRight: '8px',
- color: '#606266'
- }
- }, '鍙栨秷'),
- h(ElButton, {
- type: 'primary',
- onClick: async () => {
- const formRef = vnode.component.refs.outboundForm;
- try {
- // 琛ㄥ崟鏍¢獙
- await formRef.validate();
- } catch (err) {
- return;
- }
+ [
+ h(ElFormItem, {
+ label: "鍑哄簱绔欏彴",
+ prop: "selectedPlatform",
+ style: {
+ marginBottom: "24px",
+ },
+ }, [
+ h(ElSelect, {
+ placeholder: "璇烽�夋嫨鍑哄簱绔欏彴",
+ modelValue: formData.selectedPlatform,
+ "onUpdate:modelValue": (val) => {
+ formData.selectedPlatform = val;
+ },
+ style: {
+ width: "100%",
+ height: "40px",
+ borderRadius: "4px",
+ borderColor: "#dcdfe6",
+ },
+ }, platformOptions.map((platform) =>
+ h(ElOption, { label: platform.label, value: platform.value })
+ )),
+ ]),
+ h("div", {
+ style: {
+ textAlign: "right",
+ marginTop: "8px",
+ paddingRight: "4px",
+ },
+ }, [
+ h(ElButton, {
+ type: "text",
+ onClick: () => {
+ render(null, mountNode);
+ document.body.removeChild(mountNode);
+ ElMessage.info("鍙栨秷鍑哄簱鎿嶄綔");
+ },
+ style: {
+ marginRight: "8px",
+ color: "#606266",
+ },
+ }, "鍙栨秷"),
+ h(ElButton, {
+ type: "primary",
+ onClick: async () => {
+ const formRef = vnode.component.refs.outboundForm;
+ try {
+ await formRef.validate();
+ } catch (err) {
+ return;
+ }
- // 4. 鏋勯�犺姹傚弬鏁帮紙閫変腑鍗曟嵁ID + 閫夋嫨鐨勫嚭搴撶珯鍙帮級
- const keys = this.selection.map((item) => item.id);
- const requestParams = {
- taskIds: keys,
- outboundPlatform: formData.selectedPlatform // 鍑哄簱绔欏彴
- };
+ const requestParams = {
+ taskIds: detailIds,
+ outboundPlatform: formData.selectedPlatform,
+ };
- // 5. 璋冪敤鍑哄簱鎺ュ彛
- this.http
- .post("api/Task/GenerateOutboundTasks", requestParams, "鏁版嵁澶勭悊涓�")
- .then((x) => {
- if (!x.status) return ElMessage.error(x.message);
-
- ElMessage.success("鎿嶄綔鎴愬姛");
- this.showDetialBox = false; // 鍏抽棴璇︽儏妗�
- this.$emit("parentCall", ($vue) => {
- $vue.getData(); // 閫氱煡鐖剁粍浠跺埛鏂�
- });
- // 鍏抽棴寮圭獥
- render(null, mountNode);
- document.body.removeChild(mountNode);
- })
- .catch(() => {
- ElMessage.error('璇锋眰澶辫触锛岃绋嶅悗閲嶈瘯');
- });
- },
- style: {
- borderRadius: '4px',
- padding: '8px 20px'
- }
- }, '纭畾鍑哄簱')
- ])
- ])
- });
+ this.http
+ .post(
+ "api/Task/GenerateOutboundTasks",
+ requestParams,
+ "鏁版嵁澶勭悊涓�"
+ )
+ .then((x) => {
+ if (!x.status) return ElMessage.error(x.message);
+ ElMessage.success("鎿嶄綔鎴愬姛");
+ this.showDetialBox = false;
+ this.$emit("parentCall", ($vue) => {
+ $vue.getData();
+ });
+ render(null, mountNode);
+ document.body.removeChild(mountNode);
+ })
+ .catch(() => {
+ ElMessage.error("璇锋眰澶辫触锛岃绋嶅悗閲嶈瘯");
+ });
+ },
+ style: {
+ borderRadius: "4px",
+ padding: "8px 20px",
+ },
+ }, "纭畾鍑哄簱"),
+ ]),
+ ]),
+ }
+ );
- // 缁戝畾app涓婁笅鏂囷紝纭繚El缁勪欢姝e父宸ヤ綔
vnode.appContext = this.$.appContext;
render(vnode, mountNode);
},
+
outboundbatch() {
- if (this.selection.length === 0) {
- return this.$message.error("璇烽�夋嫨鍗曟嵁鏄庣粏");
- }
- if (this.selection.length>1) {
- return this.$message.error("鍙兘閫夋嫨涓�鏉″崟鎹槑缁嗚繘琛屽垎鎵瑰嚭搴�");
- }
- const platformOptions = [{label:'绔欏彴2',value:'2-1'},{label:'绔欏彴3',value:'3-1'}];
- const mountNode = document.createElement('div');
- document.body.appendChild(mountNode);
-
- // 2. 琛ㄥ崟鏁版嵁锛堥粯璁ら�変腑绔欏彴3锛屾柊澧炲皬鏁板瓧娈碉級
- const formData = reactive({
- selectedPlatform: platformOptions[0].value, // 榛樿缁戝畾銆岀珯鍙�3銆嶇殑value
- outboundDecimal: '' // 鏂板锛氬皬鏁拌緭鍏ユ瀛楁
- });
-
- // 3. 鍔ㄦ�佸垱寤哄脊绐楃粍浠�
- const vnode = createVNode(ElDialog, {
- title: '鍑哄簱鎿嶄綔 - 閫夋嫨鍑哄簱绔欏彴',
- width: '500px',
- modelValue: true,
- appendToBody: true,
- 'onUpdate:modelValue': (isVisible) => {
- if (!isVisible) {
- render(null, mountNode);
- document.body.removeChild(mountNode);
+ const savedStation = stationManager.getStation();
+ console.log(savedStation);
+ if (this.selection.length === 0) {
+ return this.$message.error("璇烽�夋嫨鍗曟嵁鏄庣粏");
}
- },
- style: {
- padding: '20px 0',
- borderRadius: '8px'
- }
- }, {
- default: () => h(ElForm, {
- model: formData,
- rules: {
- selectedPlatform: [
- { required: true, message: '璇烽�夋嫨鍑哄簱绔欏彴', trigger: 'change' }
- ],
- // 鏂板锛氬皬鏁板瓧娈甸獙璇佽鍒欙紙蹇呭~ + 鏈夋晥灏忔暟鏍煎紡锛�
- outboundDecimal: [
- { required: true, message: '璇疯緭鍏ュ皬鏁版暟鍊�', trigger: 'blur' },
- {
- validator: (rule, value, callback) => {
- // 楠岃瘉瑙勫垯锛氭鏁般�佹敮鎸佸皬鏁扮偣鍚庢渶澶�2浣嶏紙鍙牴鎹渶姹傝皟鏁村皬鏁颁綅鏁帮級
- const decimalReg = /^(([1-9]\d*)|0)(\.\d{1,2})?$/;
- if (value && !decimalReg.test(value)) {
- callback(new Error('璇疯緭鍏ユ湁鏁堢殑灏忔暟锛堟鏁帮紝鏈�澶�2浣嶅皬鏁帮級'));
- } else {
- callback();
- }
- },
- trigger: 'blur'
- }
- ]
- },
- ref: 'outboundForm',
- labelWidth: '100px',
- style: {
- padding: '0 30px'
+ if (this.selection.length > 1) {
+ return this.$message.error("鍙兘閫夋嫨涓�鏉″崟鎹槑缁嗚繘琛屽垎鎵瑰嚭搴�");
}
- }, [
- // 鍑哄簱绔欏彴閫夋嫨椤癸紙鏍稿績琛ㄥ崟椤癸級
- h(ElFormItem, {
- label: '鍑哄簱绔欏彴',
- prop: 'selectedPlatform',
- style: {
- marginBottom: '24px'
- }
- }, [
- h(ElSelect, {
- placeholder: '璇烽�夋嫨鍑哄簱绔欏彴锛�3-12锛�',
- modelValue: formData.selectedPlatform,
- 'onUpdate:modelValue': (val) => {
- formData.selectedPlatform = val;
- },
- style: {
- width: '100%',
- height: '40px',
- borderRadius: '4px',
- borderColor: '#dcdfe6'
- }
- }, platformOptions.map(platform =>
- h(ElOption, { label: platform.label, value: platform.value })
- ))
- ]),
- // 鏂板锛氬皬鏁拌緭鍏ユ琛ㄥ崟椤�
- h(ElFormItem, {
- label: '鍑哄簱鏁�', // 鍙牴鎹笟鍔¢渶姹備慨鏀规爣绛惧悕锛堝鈥滃嚭搴撴暟閲忊�濃�滈噸閲忊�濈瓑锛�
- prop: 'outboundDecimal',
- style: {
- marginBottom: '24px'
- }
- }, [
- h(ElInput, {
- type: 'number', // 鏁板瓧绫诲瀷锛屽師鐢熸敮鎸佸皬鏁拌緭鍏�
- placeholder: '璇疯緭鍏ュ皬鏁版暟鍊硷紙鏈�澶�2浣嶅皬鏁帮級',
- modelValue: formData.outboundDecimal,
- 'onUpdate:modelValue': (val) => {
- formData.outboundDecimal = val;
- },
- style: {
- width: '100%',
- height: '40px',
- borderRadius: '4px',
- borderColor: '#dcdfe6'
- },
- step: '0.01', // 姝ラ暱0.01锛岀偣鍑讳笂涓嬬澶存椂鎸�0.01澧炲噺
- precision: 2, // 闄愬埗鏈�澶氳緭鍏�2浣嶅皬鏁帮紙Element Plus灞炴�э級
- min: 0.01, // 鍙�夛細闄愬埗鏈�灏忓�间负0.01锛岄伩鍏嶈緭鍏�0鎴栬礋鏁�
- })
- ]),
- // 搴曢儴鎸夐挳鍖�
- h('div', {
- style: {
- textAlign: 'right',
- marginTop: '8px',
- paddingRight: '4px'
- }
- }, [
- h(ElButton, {
- type: 'text',
- onClick: () => {
- render(null, mountNode);
- document.body.removeChild(mountNode);
- ElMessage.info('鍙栨秷鍒嗘壒鍑哄簱鎿嶄綔');
- },
- style: {
- marginRight: '8px',
- color: '#606266'
- }
- }, '鍙栨秷'),
- h(ElButton, {
- type: 'primary',
- onClick: async () => {
- const formRef = vnode.component.refs.outboundForm;
- try {
- // 琛ㄥ崟鏍¢獙锛堜細鍚屾椂鏍¢獙鍑哄簱绔欏彴鍜屽皬鏁板瓧娈碉級
- await formRef.validate();
- } catch (err) {
- return;
- }
-console.log(this.selection);
- // 4. 鏋勯�犺姹傚弬鏁帮紙鏂板灏忔暟瀛楁锛�
- const keys = this.selection.map((item) => item.id);
- const requestParams = {
- orderDetailId: keys[0], // 鍒嗘壒鍑哄簱浠呮敮鎸佸崟鏉℃槑缁�
- outboundPlatform: formData.selectedPlatform, // 鍑哄簱绔欏彴
- batchQuantity: formData.outboundDecimal // 鏂板锛氬皬鏁板瓧娈典紶缁欏悗绔�
- };
-
- // 5. 璋冪敤鍑哄簱鎺ュ彛
- this.http
- .post("api/Task/GenerateOutboundBatchTasks", requestParams, "鏁版嵁澶勭悊涓�")
- .then((x) => {
- if (!x.status) return ElMessage.error(x.message);
-
- ElMessage.success("鎿嶄綔鎴愬姛");
- this.showDetialBox = false; // 鍏抽棴璇︽儏妗�
- this.$emit("parentCall", ($vue) => {
- $vue.getData(); // 閫氱煡鐖剁粍浠跺埛鏂�
- });
- // 鍏抽棴寮圭獥
- render(null, mountNode);
- document.body.removeChild(mountNode);
- })
- .catch(() => {
- ElMessage.error('璇锋眰澶辫触锛岃绋嶅悗閲嶈瘯');
- });
- },
- style: {
- borderRadius: '4px',
- padding: '8px 20px'
- }
- }, '纭畾鍒嗘壒鍑哄簱')
- ])
- ])
- });
-
- // 缁戝畾app涓婁笅鏂囷紝纭繚El缁勪欢姝e父宸ヤ綔
- vnode.appContext = this.$.appContext;
- render(vnode, mountNode);
-},
+ 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" },
+ ];
+ const mountNode = document.createElement("div");
+ document.body.appendChild(mountNode);
+ const formData = reactive({
+ selectedPlatform: platformOptions[0].value,
+ outboundDecimal: "",
+ });
+ if (savedStation) {
+ formData.selectedPlatform = savedStation;
+ }
+ const vnode = createVNode(
+ ElDialog,
+ {
+ title: "鍑哄簱鎿嶄綔 - 閫夋嫨鍑哄簱绔欏彴",
+ width: "500px",
+ modelValue: true,
+ appendToBody: true,
+ "onUpdate:modelValue": (isVisible) => {
+ if (!isVisible) {
+ render(null, mountNode);
+ document.body.removeChild(mountNode);
+ }
+ },
+ style: {
+ padding: "20px 0",
+ borderRadius: "8px",
+ },
+ },
+ {
+ default: () =>
+ h(
+ ElForm,
+ {
+ model: formData,
+ rules: {
+ selectedPlatform: [
+ { required: true, message: "璇烽�夋嫨鍑哄簱绔欏彴", trigger: "change" },
+ ],
+ outboundDecimal: [
+ { required: true, message: "璇疯緭鍏ュ皬鏁版暟鍊�", trigger: "blur" },
+ {
+ validator: (rule, value, callback) => {
+ const decimalReg = /^(([1-9]\d*)|0)(\.\d{1,2})?$/;
+ if (value && !decimalReg.test(value)) {
+ callback(new Error("璇疯緭鍏ユ湁鏁堢殑灏忔暟锛堟鏁帮紝鏈�澶�2浣嶅皬鏁帮級"));
+ } else {
+ callback();
+ }
+ },
+ trigger: "blur",
+ },
+ ],
+ },
+ ref: "outboundForm",
+ labelWidth: "100px",
+ style: {
+ padding: "0 30px",
+ },
+ },
+ [
+ h(ElFormItem, {
+ label: "鍑哄簱绔欏彴",
+ prop: "selectedPlatform",
+ style: {
+ marginBottom: "24px",
+ },
+ }, [
+ h(ElSelect, {
+ placeholder: "璇烽�夋嫨鍑哄簱绔欏彴",
+ modelValue: formData.selectedPlatform,
+ "onUpdate:modelValue": (val) => {
+ formData.selectedPlatform = val;
+ },
+ style: {
+ width: "100%",
+ height: "40px",
+ borderRadius: "4px",
+ borderColor: "#dcdfe6",
+ },
+ }, platformOptions.map((platform) =>
+ h(ElOption, { label: platform.label, value: platform.value })
+ )),
+ ]),
+ h(ElFormItem, {
+ label: "鍑哄簱鏁�",
+ prop: "outboundDecimal",
+ style: {
+ marginBottom: "24px",
+ },
+ }, [
+ h(ElInput, {
+ type: "number",
+ placeholder: "璇疯緭鍏ュ皬鏁版暟鍊硷紙鏈�澶�2浣嶅皬鏁帮級",
+ modelValue: formData.outboundDecimal,
+ "onUpdate:modelValue": (val) => {
+ formData.outboundDecimal = val;
+ },
+ style: {
+ width: "100%",
+ height: "40px",
+ borderRadius: "4px",
+ borderColor: "#dcdfe6",
+ },
+ step: "0.01",
+ precision: 2,
+ min: 0.01,
+ max: selectedDetail.orderQuantity - selectedDetail.overOutQuantity - selectedDetail.lockQuantity - selectedDetail.moveQty,
+ }),
+ ]),
+ h("div", {
+ style: {
+ textAlign: "right",
+ marginTop: "8px",
+ paddingRight: "4px",
+ },
+ }, [
+ h(ElButton, {
+ type: "text",
+ onClick: () => {
+ render(null, mountNode);
+ document.body.removeChild(mountNode);
+ ElMessage.info("鍙栨秷鍒嗘壒鍑哄簱鎿嶄綔");
+ },
+ style: {
+ marginRight: "8px",
+ color: "#606266",
+ },
+ }, "鍙栨秷"),
+ h(ElButton, {
+ type: "primary",
+ onClick: async () => {
+ const formRef = vnode.component.refs.outboundForm;
+ try {
+ await formRef.validate();
+ } catch (err) {
+ return;
+ }
+
+ const requestParams = {
+ orderDetailId: selectedDetail.id,
+ outboundPlatform: formData.selectedPlatform,
+ batchQuantity: formData.outboundDecimal,
+ };
+
+ this.http
+ .post(
+ "api/Task/GenerateOutboundBatchTasks",
+ requestParams,
+ "鏁版嵁澶勭悊涓�"
+ )
+ .then((x) => {
+ if (!x.status) return ElMessage.error(x.message);
+ ElMessage.success("鎿嶄綔鎴愬姛");
+ this.showDetialBox = false;
+ this.$emit("parentCall", ($vue) => {
+ $vue.getData();
+ });
+ render(null, mountNode);
+ document.body.removeChild(mountNode);
+ })
+ .catch(() => {
+ ElMessage.error("璇锋眰澶辫触锛岃绋嶅悗閲嶈瘯");
+ });
+ },
+ style: {
+ borderRadius: "4px",
+ padding: "8px 20px",
+ },
+ }, "纭畾鍒嗘壒鍑哄簱"),
+ ]),
+ ]),
+ }
+ );
+
+ 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) => {
@@ -736,25 +864,27 @@
}
});
},
- 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]);
- console.log(dicItem);
+ 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.orderDetailStatus;
},
},
};
</script>
+
<style scoped>
.text-button {
border: 0px;
@@ -772,12 +902,10 @@
.box-table .el-table tbody tr:hover > td {
background-color: #d8e0d4 !important;
- /* color: #ffffff; */
}
.box-table .el-table tbody tr.current-row > td {
background-color: #f0f9eb !important;
- /* color: #ffffff; */
}
.el-table .success-row {
@@ -787,4 +915,4 @@
.box-table .el-table {
border: 1px solid #ebeef5;
}
-</style>
+</style>
\ No newline at end of file
--
Gitblit v1.9.3