From 898b21c72cba3770a6be3c2437f69accbb2bbc91 Mon Sep 17 00:00:00 2001
From: pan <antony1029@163.com>
Date: 星期六, 06 十二月 2025 04:19:19 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/ZhongRui/ALDbanyunxiangmu
---
项目代码/WIDESEA_WMSClient/src/router/viewGird.js | 5
项目代码/WIDESEA_WMSClient/src/views/stock/stockInfoDetailByMaterielSum.vue | 222 +++++++++
项目代码/WIDESEA_WMSClient/src/extension/check/recheckOrder.js | 75 +-
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoDetailController.cs | 10
项目代码/WIDESEA_WMSClient/src/extension/stock/stockInfoDetailByMaterielSum.js | 59 ++
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoDetailService.cs | 2
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IStockService/IStockDetailByMaterielService.cs | 20
项目代码/WIDESEA_WMSClient/src/extension/outbound/allocateoutboundOrder.js | 2
项目代码/WIDESEA_WMSClient/config/buttons.js | 9
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/StockDetailByMateriel.cs | 74 +++
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_StockService/StockDetailByMaterielService.cs | 12
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockDetailDtO.cs | 76 +++
项目代码/WIDESEA_WMSClient/src/extension/outbound/extend/newAllocateOrderDetail.vue | 797 +++++++++++++++++++++++++++++++++
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoDetailService.cs | 36 +
14 files changed, 1,367 insertions(+), 32 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/config/buttons.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/config/buttons.js"
index 32004c1..f2f74e6 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/config/buttons.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/config/buttons.js"
@@ -208,6 +208,15 @@
onClick: function () {
}
},
+{
+ name: "鍒嗘嫞",
+ // icon: 'el-icon-upload2',
+ class: '',
+ value: 'BatchOrder',
+ type: 'primary',
+ onClick: function () {
+ }
+},
]
export default buttons
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/check/recheckOrder.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/check/recheckOrder.js"
index c79a67f..3ddd214 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/check/recheckOrder.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/check/recheckOrder.js"
@@ -8,8 +8,8 @@
//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
import gridBody from './extend/StockSelect.vue'
import http from '@/api/http.js'
-import { h,createVNode, render,reactive,ref } from 'vue';
-import { ElDialog , ElForm, ElFormItem, ElInput, ElButton, ElMessage ,ElSelect ,ElOption } from 'element-plus'; // 寮曞叆ElMessage锛岃В鍐虫彁绀烘棤鍙嶅簲
+import { h, createVNode, render, reactive, ref } from 'vue';
+import { ElDialog, ElForm, ElFormItem, ElInput, ElButton, ElMessage, ElSelect, ElOption } from 'element-plus'; // 寮曞叆ElMessage锛岃В鍐虫彁绀烘棤鍙嶅簲
let extension = {
components: {
//鏌ヨ鐣岄潰鎵╁睍缁勪欢
@@ -22,36 +22,38 @@
modelFooter: ''
},
tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
- buttons: { view: [ {
- name: '缁勭洏',
- type: 'primary',
- value: '缁勭洏',
- onClick: function () { // 淇1锛氱Щ闄ゆ棤鐢╮ow鍙傛暟锛屽姞鏃ュ織璋冭瘯
- console.log('缁勭洏鎸夐挳琚偣鍑伙紝寮�濮嬫牎楠�');
- const selectedRows = this.$refs.table.getSelected();
-
- // 鏍¢獙1锛氭槸鍚﹂�変腑琛�
- if (selectedRows.length === 0) {
- console.log('鏍¢獙涓嶉�氳繃锛氭湭閫変腑浠讳綍鍗曟嵁');
- ElMessage.warning('璇烽�夋嫨涓�鏉″崟鎹�');
- return;
- }
- // 鏍¢獙2锛氭槸鍚﹂�変腑鍗曡
- if (selectedRows.length > 1) {
- console.log('鏍¢獙涓嶉�氳繃锛氶�変腑澶氳鍗曟嵁');
- ElMessage.warning('鍙兘閫夋嫨涓�鏉″崟鎹�');
- return;
- }
-
- const targetRow = selectedRows[0];
-
- this.$emit('openPalletDialog', targetRow.orderNo);
- }
- },], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+ buttons: {
+ view: [{
+ name: '缁勭洏',
+ type: 'primary',
+ value: '缁勭洏',
+ onClick: function () { // 淇1锛氱Щ闄ゆ棤鐢╮ow鍙傛暟锛屽姞鏃ュ織璋冭瘯
+ console.log('缁勭洏鎸夐挳琚偣鍑伙紝寮�濮嬫牎楠�');
+ const selectedRows = this.$refs.table.getSelected();
+
+ // 鏍¢獙1锛氭槸鍚﹂�変腑琛�
+ if (selectedRows.length === 0) {
+ console.log('鏍¢獙涓嶉�氳繃锛氭湭閫変腑浠讳綍鍗曟嵁');
+ ElMessage.warning('璇烽�夋嫨涓�鏉″崟鎹�');
+ return;
+ }
+ // 鏍¢獙2锛氭槸鍚﹂�変腑鍗曡
+ if (selectedRows.length > 1) {
+ console.log('鏍¢獙涓嶉�氳繃锛氶�変腑澶氳鍗曟嵁');
+ ElMessage.warning('鍙兘閫夋嫨涓�鏉″崟鎹�');
+ return;
+ }
+
+ const targetRow = selectedRows[0];
+
+ this.$emit('openPalletDialog', targetRow.orderNo);
+ }
+ },], box: [], detail: []
+ }, //鎵╁睍鐨勬寜閽�
methods: {
- //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+ //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
onInit() { //妗嗘灦鍒濆鍖栭厤缃墠锛�
- this.columns.push({
+ this.columns.push({
field: '鎿嶄綔',
title: '鎿嶄綔',
width: 90,
@@ -71,6 +73,19 @@
this.$refs.gridBody.open(row);
}
});
+ let EmptyTrayOutboundBtn = this.buttons.find(x => x.value == 'BatchOrder');
+ if (EmptyTrayOutboundBtn) {
+ EmptyTrayOutboundBtn.onClick = function () {
+ let rows = this.$refs.table.getSelected();
+ if (rows.length == 0) return this.$error("璇烽�夋嫨鏁版嵁!");
+ if (rows.length > 1) return this.$error("璇烽�夋嫨涓�鏉℃暟鎹�!");
+ this.$router.push({
+ path: '/outbound/picking',
+ query: { orderId: rows[0].id,orderNo:rows[0].orderNo}
+ })
+
+ }
+ }
},
onInited() {
//妗嗘灦鍒濆鍖栭厤缃悗
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/allocateoutboundOrder.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/allocateoutboundOrder.js"
index 487648b..76d2980 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/allocateoutboundOrder.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/allocateoutboundOrder.js"
@@ -4,7 +4,7 @@
import { h,createVNode, render,reactive ,ref } from 'vue';
import { ElDialog , ElForm, ElFormItem, ElInput, ElButton, ElMessage ,ElSelect, ElOption} from 'element-plus';
-import gridBody from './extend/outOrderDetail.vue'
+import gridBody from './extend/newAllocateOrderDetail.vue'
let extension = {
components: {
//鏌ヨ鐣岄潰鎵╁睍缁勪欢
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/extend/newAllocateOrderDetail.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/extend/newAllocateOrderDetail.vue"
new file mode 100644
index 0000000..620c0a1
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/extend/newAllocateOrderDetail.vue"
@@ -0,0 +1,797 @@
+<template>
+ <div>
+ <vol-box
+ v-model="showDetialBox"
+ :lazy="true"
+ width="75%"
+ :padding="15"
+ title="鍗曟嵁鏄庣粏淇℃伅"
+ >
+ <div class="box-head">
+ <el-alert :closable="false" style="width: 100%">
+ <el-row>
+ <el-col :span="16">
+ <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
+ type="primary"
+ size="small"
+ style="float: right; height: 20px; margin-right: 10px"
+ v-if="isBatch === 1"
+ @click="handleOpenBatchPicking"
+ >鍒嗘壒鎷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
+ type="primary"
+ size="small"
+ v-if="isBatch === 1"
+ style="float: right; height: 20px; margin-right: 10px"
+ @click="outboundbatch"
+ >鍒嗘壒鍑哄簱</el-link
+ >
+ <el-link
+ type="primary"
+ size="small"
+ style="float: right; height: 20px; margin-right: 10px"
+ @click="getData"
+ >鍒锋柊</el-link
+ ></el-col
+ >
+ </el-row>
+ </el-alert>
+ </div>
+ <div class="box-table" style="margin-top: 1%">
+ <el-table
+ ref="singleTable"
+ :data="tableData"
+ style="width: 100%; height: 100%"
+ highlight-current-row
+ @current-change="handleCurrentChange"
+ height="500px"
+ @row-click="handleRowClick"
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="55"> </el-table-column>
+ <el-table-column
+ label="搴忓彿"
+ type="index"
+ fixed="left"
+ width="55"
+ 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"
+ 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>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+ </vol-box>
+ <stock-select ref="child" @parentCall="parentCall"></stock-select>
+ <selected-stock
+ ref="selectedStock"
+ @parentCall="parentCall"
+ ></selected-stock>
+ <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';
+
+export default {
+ 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: "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,
+ 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",
+ },
+ ],
+ paginations: {
+ sort: "id",
+ order: "desc",
+ Foots: "",
+ total: 0,
+ // 2020.08.29澧炲姞鑷畾涔夊垎椤垫潯澶у皬
+ sizes: [30, 60, 100, 120],
+ size: 30, // 榛樿鍒嗛〉澶у皬
+ Wheres: [],
+ page: 1,
+ rows: 30,
+ },
+ searchFormOptions: [
+ [
+ {
+ title: "鍗曟嵁缂栧彿",
+ field: "allocation_code",
+ type: "like",
+ },
+ {
+ title: "鍗曟嵁绫诲瀷",
+ field: "allocation_type",
+ type: "select",
+ dataKey: "OrderType",
+ data: [],
+ },
+ {
+ title: "鍗曟嵁鐘舵��",
+ field: "allocation_state",
+ type: "select",
+ dataKey: "OrderState",
+ data: [],
+ },
+ ],
+ ],
+ searchFormFields: {
+ allocation_code: "",
+ allocation_type: "",
+ allocation_state: "",
+ },
+ dictionaryList: null,
+ };
+ },
+ methods: {
+ open(row) {
+ this.row = row;
+ this.showDetialBox = true;
+ console.log(this.row);
+ this.isBatch = row.isBatch;
+ this.getDictionaryData();
+ this.getData();
+ },
+ getData() {
+ var wheres = [{ name: "orderId", value: this.row.id }];
+ var param = {
+ page: this.paginations.page,
+ rows: this.paginations.rows,
+ sort: this.paginations.sort,
+ order: this.paginations.order,
+ wheres: JSON.stringify(wheres), // 鏌ヨ鏉′欢锛屾牸寮忎负[{ name: "瀛楁", value: "xx" }]
+ };
+ this.http
+ .post("api/AllocateOrderDetail/GetPageData", param, "鏌ヨ涓�")
+ .then((x) => {
+ this.tableData = x.rows;
+ });
+ },
+ 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);
+ }
+ },
+ lockstocks() {
+ if (this.selection.length === 0) {
+ return this.$message.error("璇烽�夋嫨鍗曟嵁鏄庣粏");
+ }
+ var keys = this.selection.map((item) => item.id); // 鑾峰彇閫変腑琛岀殑id
+ this.http
+ .post("api/OutboundOrderDetail/LockOutboundStocks", keys, "鏁版嵁澶勭悊涓�")
+ .then((x) => {
+ if (!x.status) return this.$message.error(x.message);
+ this.$message.success("鎿嶄綔鎴愬姛");
+ this.showDetialBox = false;
+ this.$emit("parentCall", ($vue) => {
+ $vue.getData();
+ });
+ });
+ },
+ // 鎵撳紑鎷i�夐〉闈�
+ 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() {
+ 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');
+ document.body.appendChild(mountNode);
+
+ // 2. 琛ㄥ崟鏁版嵁锛堥粯璁ら�変腑绔欏彴3锛�
+ const formData = reactive({
+ selectedPlatform: platformOptions[0].value // 榛樿缁戝畾銆岀珯鍙�3銆嶇殑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' }
+ ]
+ },
+ 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;
+ },
+ 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 // 鍑哄簱绔欏彴
+ };
+
+ // 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'
+ }
+ }, '纭畾鍑哄簱')
+ ])
+ ])
+ });
+
+ // 缁戝畾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);
+ }
+ },
+ 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'
+ }
+ }, [
+ // 鍑哄簱绔欏彴閫夋嫨椤癸紙鏍稿績琛ㄥ崟椤癸級
+ 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);
+},
+
+
+ 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
+ ) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ 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);
+ }
+ });
+ this.http
+ .post("api/Sys_Dictionary/GetVueDictionary", param, "鏌ヨ涓�")
+ .then((x) => {
+ if (x.length > 0) {
+ this.dictionaryList = x;
+ }
+ });
+ },
+ getDictionary(row, column) {
+ if (this.dictionaryList) {
+ var item = this.dictionaryList.find((x) => x.dicNo == column.bindKey);
+ if (item) {
+ var dicItem = item.data.find((x) => x.key == row[column.prop]);
+ console.log(dicItem);
+ if (dicItem) {
+ return dicItem.value;
+ } else {
+ return row[column.prop];
+ }
+ } else {
+ return row[column.prop];
+ }
+ }
+ },
+ },
+};
+</script>
+<style scoped>
+.text-button {
+ border: 0px;
+}
+</style>
+
+<style>
+.text-button:hover {
+ background-color: #f0f9eb !important;
+}
+
+.el-table .warning-row {
+ background: oldlace;
+}
+
+.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 {
+ background: #f0f9eb;
+}
+
+.box-table .el-table {
+ border: 1px solid #ebeef5;
+}
+</style>
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/stock/stockInfoDetailByMaterielSum.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/stock/stockInfoDetailByMaterielSum.js"
new file mode 100644
index 0000000..2d89d3f
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/stock/stockInfoDetailByMaterielSum.js"
@@ -0,0 +1,59 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+ components: {
+ //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+ gridHeader: '',
+ gridBody: '',
+ gridFooter: '',
+ //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+ modelHeader: '',
+ modelBody: '',
+ modelFooter: ''
+ },
+ tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+ buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+ methods: {
+ //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+ onInit() {
+ console.log(this)
+ },
+ onInited() {
+ //妗嗘灦鍒濆鍖栭厤缃悗
+ //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+ //this.detailOptions.columns.forEach(column=>{ });
+ },
+ searchBefore(param) {
+ //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+ //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+ return true;
+ },
+ searchAfter(result) {
+ //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+ return true;
+ },
+ addBefore(formData) {
+ //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+ return true;
+ },
+ updateBefore(formData) {
+ //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+ return true;
+ },
+ rowClick({ row, column, event }) {
+ //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+ this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+ },
+ modelOpenAfter(row) {
+ //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+ //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+ //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+ //(3)this.editFormFields.瀛楁='xxx';
+ //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+ //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+ }
+ }
+ };
+ export default extension;
+
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/router/viewGird.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/router/viewGird.js"
index 3896357..84f4804 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/router/viewGird.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/router/viewGird.js"
@@ -217,6 +217,11 @@
path: '/reCheckOrder',
name: 'Dt_ReCheckOrder',
component: () => import('@/views/check/ReCheckOrder.vue')
+ },
+ {
+ path: '/stockInfoDetailByMaterielSum',
+ name: 'Dt_StockInfoDetailss',
+ component: () => import('@/views/stock/stockInfoDetailByMaterielSum.vue')
}
]
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/stock/stockInfoDetailByMaterielSum.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/stock/stockInfoDetailByMaterielSum.vue"
new file mode 100644
index 0000000..0e48a14
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/stock/stockInfoDetailByMaterielSum.vue"
@@ -0,0 +1,222 @@
+<template>
+ <view-grid ref="grid" :columns="columns" :detail="detail" :editFormFields="editFormFields"
+ :editFormOptions="editFormOptions" :searchFormFields="searchFormFields" :searchFormOptions="searchFormOptions"
+ :table="table" :extend="extend">
+ </view-grid>
+</template>
+<script>
+import extend from "@/extension/stock/stockInfoDetailByMaterielSum.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+ setup() {
+ const table = ref({
+ key: "id",
+ footer: "Foots",
+ cnName: "搴撳瓨淇℃伅鏄庣粏",
+ name: "stockInfoDetail",
+ url: "/StockInfoDetail/",
+ sortName: "id",
+ });
+ const editFormFields = ref({
+ deviceCode: "",
+ deviceName: "",
+ deviceType: "",
+ deviceStatus: "",
+ deviceIp: "",
+ devicePort: "",
+ devicePlcType: "",
+ deviceRemark: "",
+ });
+ const editFormOptions = ref([
+ [
+ {
+ title: "鐗╂枡缂栧彿",
+ required: true,
+ field: "materielCode",
+ type: "string",
+ },
+ {
+ title: "鍗曟嵁缂栧彿",
+ required: true,
+ field: "materielName",
+ type: "string",
+ },
+ {
+ title: "鎵规鍙�",
+ required: true,
+ field: "orderNo",
+ type: "string",
+ },
+ {
+ title: "搴忓垪鍙�",
+ required: true,
+ field: "serialNumber",
+ type: "string",
+ },
+ ],
+
+ ]);
+ const searchFormFields = ref({
+ materielCode: "",
+ materielName: "",
+ orderNo: "",
+ });
+ const searchFormOptions = ref([
+ [
+ { title: "鐗╂枡缂栧彿", field: "materielCode" ,type:'like'},
+ { title: "鐗╂枡鍚嶇О", field: "materielName" ,type:'like'},
+ { title: "鍗曟嵁缂栧彿", field: "orderNo" ,type:'like'},
+ { title: "鎵樼洏鍙�", field: "palletCode" ,type:'like'},
+ ],
+ ]);
+ const columns = ref([
+ {
+ field: "id",
+ title: "Id",
+ type: "int",
+ width: 90,
+ hidden: true,
+ readonly: true,
+ require: true,
+ align: "left",
+ },
+ {
+ field: "stockId",
+ title: "搴撳瓨淇℃伅涓婚敭",
+ type: "string",
+ width: 90,
+ align: "left",
+ },
+ {
+ field: "materielCode",
+ title: "鐗╂枡缂栧彿",
+ type: "string",
+ width: 150,
+ align: "left",
+ },
+ {
+ field: "materielName",
+ title: "鐗╂枡鍚嶇О",
+ type: "string",
+ width: 150,
+ align: "left",
+ },
+ {
+ field: "orderNo",
+ title: "鍗曟嵁缂栧彿",
+ type: "decimal",
+ width: 90,
+ align: "left",
+ },
+ {
+ field: "batchNo",
+ title: "鎵规鍙�",
+ type: "string",
+ width: 90,
+ align: "left",
+ },
+ {
+ field: "serialNumber",
+ title: "搴忓垪鍙�",
+ type: "int",
+ width: 120,
+ align: "left",
+ },
+ {
+ field: "supplyCode",
+ title: "渚涘簲鍟嗙紪鍙�",
+ type: "string",
+ width: 120,
+ align: "left",
+ },
+ {
+ field: "warehouseCode",
+ title: "浠撳簱鍙�",
+ type: "string",
+ width: 120,
+ align: "left",
+ },
+ {
+ field: "barcode",
+ title: "鏉$爜",
+ type: "string",
+ width: 120,
+ align: "left",
+ },
+ {
+ field: "stockQuantity",
+ title: "搴撳瓨鏁伴噺",
+ type: "string",
+ width: 200,
+ align: "left",
+ },
+ {
+ field: "outboundQuantity",
+ title: "鍑哄簱鏁伴噺",
+ type: "string",
+ width: 180,
+ align: "left",
+ },
+ {
+ field: "status",
+ title: "搴撳瓨鏄庣粏鐘舵��",
+ type: "string",
+ width: 120,
+ align: "left",
+ bind: { key: "stockStatusEmun", data: [] },
+ },
+ {
+ field: "creater",
+ title: "鍒涘缓浜�",
+ type: "string",
+ width: 90,
+ align: "left",
+ },
+ {
+ field: "createDate",
+ title: "鍒涘缓鏃堕棿",
+ type: "datetime",
+ width: 160,
+ align: "left",
+ },
+ {
+ field: "modifier",
+ title: "淇敼浜�",
+ type: "string",
+ width: 100,
+ align: "left",
+ },
+ {
+ field: "modifyDate",
+ title: "淇敼鏃堕棿",
+ type: "datetime",
+ width: 160,
+ align: "left",
+ },
+ {
+ field: "remark",
+ title: "澶囨敞",
+ type: "string",
+ width: 100,
+ align: "left",
+ },
+ ]);
+ const detail = ref({
+ cnName: "#detailCnName",
+ table: "",
+ columns: [],
+ sortName: "",
+ });
+ return {
+ table,
+ extend,
+ editFormFields,
+ editFormOptions,
+ searchFormFields,
+ searchFormOptions,
+ columns,
+ detail,
+ };
+ },
+});
+</script>
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockDetailDtO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockDetailDtO.cs"
new file mode 100644
index 0000000..c82c12f
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_DTO/Stock/StockDetailDtO.cs"
@@ -0,0 +1,76 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_DTO.Stock
+{
+ public class StockDetailDtO
+ {
+
+ public int Id { get; set; }
+
+
+ public int StockId { get; set; }
+
+
+ public string MaterielCode { get; set; }
+
+
+ public string MaterielName { get; set; }
+
+
+ public string OrderNo { get; set; }
+
+
+ public string BatchNo { get; set; }
+
+
+ public string ProductionDate { get; set; }
+
+
+ public string EffectiveDate { get; set; }
+
+
+ public string SerialNumber { get; set; }
+
+
+ public decimal StockQuantity { get; set; }
+
+
+ public decimal OutboundQuantity { get; set; }
+
+
+ public int Status { get; set; }
+
+
+ public string Unit { get; set; }
+
+ public string InboundOrderRowNo { get; set; }
+
+
+ public string? SupplyCode { get; set; }
+
+ public string FactoryArea { get; set; }
+
+ public string? WarehouseCode { get; set; }
+
+
+ public string? Barcode { get; set; }
+
+
+
+ public string? BusinessType { get; set; }
+
+
+ public decimal BarcodeQty { get; set; }
+
+ public string BarcodeUnit { get; set; }
+
+ public DateTime? ValidDate { get; set; }
+
+ public string Remark { get; set; }
+
+ }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/IStockDetailByMaterielService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/IStockDetailByMaterielService.cs"
new file mode 100644
index 0000000..1e93b7a
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/IStockDetailByMaterielService.cs"
@@ -0,0 +1,20 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_DTO.Stock;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IStockService
+{
+ public interface IStockDetailByMaterielService : IService<StockDetailByMateriel>
+ {
+ IRepository<StockDetailByMateriel> Repository { get; }
+
+ PageGridData<StockDetailByMateriel> GetPageData2(PageDataOptions options);
+ }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoDetailService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoDetailService.cs"
index ff8345e..4a4d548 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoDetailService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoDetailService.cs"
@@ -14,5 +14,7 @@
bool ExistBarcodes(List<string> barcodes);
PageGridData<StockInfoDetailWithPalletDto> GetPageData2(PageDataOptions options);
+
+ PageGridData<StockDetailDtO> GetPageDataByMateriel(PageDataOptions options);
}
}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/StockDetailByMateriel.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/StockDetailByMateriel.cs"
new file mode 100644
index 0000000..3e31cd2
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/StockDetailByMateriel.cs"
@@ -0,0 +1,74 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Model.Models
+{
+ public class StockDetailByMateriel
+ {
+ public int Id { get; set; }
+
+
+ public int StockId { get; set; }
+
+
+ public string MaterielCode { get; set; }
+
+
+ public string MaterielName { get; set; }
+
+
+ public string OrderNo { get; set; }
+
+
+ public string BatchNo { get; set; }
+
+
+ public string ProductionDate { get; set; }
+
+
+ public string EffectiveDate { get; set; }
+
+
+ public string SerialNumber { get; set; }
+
+
+ public decimal StockQuantity { get; set; }
+
+
+ public decimal OutboundQuantity { get; set; }
+
+
+ public int Status { get; set; }
+
+
+ public string Unit { get; set; }
+
+ public string InboundOrderRowNo { get; set; }
+
+
+ public string? SupplyCode { get; set; }
+
+ public string FactoryArea { get; set; }
+
+ public string? WarehouseCode { get; set; }
+
+
+ public string? Barcode { get; set; }
+
+
+
+ public string? BusinessType { get; set; }
+
+
+ public decimal BarcodeQty { get; set; }
+
+ public string BarcodeUnit { get; set; }
+
+ public DateTime? ValidDate { get; set; }
+
+ public string Remark { get; set; }
+ }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockDetailByMaterielService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockDetailByMaterielService.cs"
new file mode 100644
index 0000000..15e4b18
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockDetailByMaterielService.cs"
@@ -0,0 +1,12 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_StockService
+{
+ internal class StockDetailByMaterielService
+ {
+ }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoDetailService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoDetailService.cs"
index 450f6a7..4371f76 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoDetailService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoDetailService.cs"
@@ -72,6 +72,42 @@
return new PageGridData<StockInfoDetailWithPalletDto> { Rows = dtoList, Total = lists.Total, Summary = lists.Summary };
}
+
+ public PageGridData<StockDetailDtO> GetPageDataByMateriel(PageDataOptions options)
+ {
+ PageGridData<Dt_StockInfoDetail> lists = base.GetPageData(options);
+
+ List<StockDetailDtO> dtoList = lists.Rows.GroupBy(detail => new { detail.MaterielCode, detail.BatchNo, detail.SupplyCode }).Select(group =>
+ {
+ var firstItem = group.First();
+ return new StockDetailDtO
+ {
+ Id = firstItem.Id,
+ StockId = firstItem.StockId,
+ MaterielCode = group.Key.MaterielCode,
+ MaterielName = firstItem.MaterielName,
+ OrderNo = firstItem.OrderNo,
+ BatchNo = group.Key.BatchNo,
+ ProductionDate = firstItem.ProductionDate,
+ EffectiveDate = firstItem.EffectiveDate,
+ SerialNumber = firstItem.SerialNumber,
+ // 鏍稿績锛氬褰撳墠鍒嗙粍鐨凷tockQuantity姹傚拰
+ StockQuantity = group.Sum(item => item.StockQuantity),
+ OutboundQuantity = firstItem.OutboundQuantity,
+ Status = firstItem.Status,
+ Unit = firstItem.Unit,
+ InboundOrderRowNo = firstItem.InboundOrderRowNo,
+ SupplyCode = group.Key.SupplyCode,
+ WarehouseCode = firstItem.WarehouseCode,
+ Barcode = firstItem.Barcode,
+ BusinessType = firstItem.BusinessType,
+ Remark = firstItem.Remark
+ };
+ }).ToList();
+
+
+ return new PageGridData<StockDetailDtO> { Rows = dtoList, Total = lists.Total, Summary = lists.Summary };
+ }
}
}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoDetailController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoDetailController.cs"
index e5de3a4..607f07b 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoDetailController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoDetailController.cs"
@@ -1,10 +1,12 @@
-锘縰sing Microsoft.AspNetCore.Http;
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using WIDESEA_Core;
using WIDESEA_Core.BaseController;
using WIDESEA_DTO.Stock;
using WIDESEA_IStockService;
using WIDESEA_Model.Models;
+using WIDESEA_StockService;
namespace WIDESEA_WMSServer.Controllers.Stock
{
@@ -28,5 +30,11 @@
return Json(result);
}
+
+ [HttpPost, Route("GetPageDataByMateriel"),AllowAnonymous]
+ public PageGridData<StockDetailDtO> GetPageDataByMateriel([FromBody] PageDataOptions options)
+ {
+ return Service.GetPageDataByMateriel(options);
+ }
}
}
--
Gitblit v1.9.3