From 664df90a747e5a97b4e1131a5f958ded3176250c Mon Sep 17 00:00:00 2001
From: z8018 <1282578289@qq.com>
Date: 星期四, 25 十二月 2025 11:23:35 +0800
Subject: [PATCH] Merge branch 'htq20251215' of http://115.159.85.185:8098/r/ZhongRui/ALDbanyunxiangmu into htq20251215
---
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_BasicService/MESOperation/FeedbackMesService.cs | 31
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Allocate/AllocateOrderController.cs | 2
项目代码/WIDESEA_WMSClient/src/extension/stock/stockView.js | 172 +
项目代码/WIDESEA_WMSClient/src/extension/outbound/outboundOrder.js | 3
项目代码/WIDESEA_WMSClient/src/router/viewGird.js | 12
项目代码/WIDESEA_WMSClient/src/views/inbound/takeStockOrderDetail.vue | 254 ++
项目代码/WIDESEA_WMSClient/public/static/webconfig.js | 7
项目代码/WIDESEA_WMSClient/src/extension/taskinfo/task.js | 26
项目代码/WIDESEA_WMSClient/src/views/taskinfo/task.vue | 28
项目代码/WIDESEA_WMSClient/src/views/record/stockQuantityChangeRecord.vue | 456 ++--
项目代码/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue | 103
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_MenuController.cs | 3
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Jobs/InventoryLockJob.cs | 14
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs | 10
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_InboundService/InboundService.cs | 1
项目代码/WIDESEA_WMSClient/package-lock.json | 174 -
项目代码/WIDESEA_WMSClient/src/extension/inbound/extend/OrderStockTake.vue | 868 +++++++++
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IInboundService/ITakeStockOrderService.cs | 24
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/TakeStockOrderDetailController.cs | 16
项目代码/WIDESEA_WMSClient/src/extension/inbound/extend/allocateOrderDetail.vue | 276 +-
项目代码/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue | 8
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_InboundService/TakeStockOrderDetailService.cs | 21
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs | 2
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IInboundService/ITakeStockOrderDetailService.cs | 14
项目代码/WIDESEA_WMSClient/src/views/inbound/takeStockOrder.vue | 291 +++
项目代码/WIDESEA_WMSClient/src/extension/inbound/takeStockOrder.js | 83
项目代码/WMS无仓储版/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db | 0
项目代码/WIDESEA_WMSClient/src/views/Login.vue | 4
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Properties/PublishProfiles/FolderProfile2.pubxml | 15
项目代码/WMS无仓储版/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-shm | 0
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_DTO/Inbound/CompleteStockTakeDTO.cs | 23
项目代码/WMS无仓储版/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db | 0
项目代码/WIDESEA_WMSClient/src/views/outbound/allocateoutboundOrder.vue | 122
项目代码/WMS无仓储版/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-wal | 0
项目代码/WIDESEA_WMSClient/src/views/taskinfo/task_hty.vue | 45
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs | 134 +
项目代码/WIDESEA_WMSClient/src/extension/inbound/takeStockOrderDetail.js | 58
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_InboundService/TakeStockOrderService.cs | 252 ++
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/TakeStockOrderController.cs | 57
项目代码/WMS无仓储版/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-wal | 0
项目代码/WIDESEA_WMSClient/src/views/charts/wms-dashboard.vue | 725 ++++++++
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_TakeStockOrderDetail.cs | 21
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_SystemService/Sys_DictionaryService.cs | 48
项目代码/WIDESEA_WMSClient/src/extension/outbound/allocateoutboundOrder.js | 286 ---
项目代码/WMS无仓储版/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-shm | 0
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_BasicService/ESSApiService.cs | 52
项目代码/WIDESEA_WMSClient/config/buttons.js | 19
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Jobs/QuartzJobMildd.cs | 28
项目代码/WIDESEA_WMSClient/src/extension/outbound/extend/newAllocateOrderDetail.vue | 482 +---
49 files changed, 3,916 insertions(+), 1,354 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 b3561d6..26a9f2e 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"
@@ -275,7 +275,24 @@
type: 'primary',
onClick: function () {
}
-}
+},{
+ name: "閫� 瀹� 搴� 瀛� 鐩� 鐐�",
+ icon: '',
+ class: '',
+ value: 'SelectStockTake',
+ type: 'warning',
+ onClick: function () {
+ }
+},
+,{
+ name: "鍗� 鎹� 鐩� 鐐� 鎿� 浣�",
+ icon: '',
+ class: '',
+ value: 'OrderStockTake',
+ type: 'warning',
+ 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/package-lock.json" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/package-lock.json"
index 053131a..55513a8 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/package-lock.json"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/package-lock.json"
@@ -3612,6 +3612,11 @@
"dev": true,
"optional": true
},
+ "@popperjs/core": {
+ "version": "npm:@sxzz/popperjs-es@2.11.7",
+ "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
+ "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ=="
+ },
"@soda/friendly-errors-webpack-plugin": {
"version": "1.8.0",
"resolved": "https://registry.npm.taobao.org/@soda/friendly-errors-webpack-plugin/download/@soda/friendly-errors-webpack-plugin-1.8.0.tgz?cache=0&sync_timestamp=1607927406873&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40soda%2Ffriendly-errors-webpack-plugin%2Fdownload%2F%40soda%2Ffriendly-errors-webpack-plugin-1.8.0.tgz",
@@ -4386,87 +4391,6 @@
"webpack-chain": "^6.4.0",
"webpack-dev-server": "^3.11.0",
"webpack-merge": "^4.2.2"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "optional": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "optional": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true,
- "optional": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "optional": true
- },
- "loader-utils": {
- "version": "2.0.4",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/loader-utils/-/loader-utils-2.0.4.tgz",
- "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
- "dev": true,
- "optional": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^2.1.2"
- }
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "optional": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "vue-loader-v16": {
- "version": "npm:vue-loader@16.8.3",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/vue-loader/-/vue-loader-16.8.3.tgz",
- "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
- "dev": true,
- "optional": true,
- "requires": {
- "chalk": "^4.1.0",
- "hash-sum": "^2.0.0",
- "loader-utils": "^2.0.0"
- }
- }
}
},
"@vue/cli-shared-utils": {
@@ -7637,13 +7561,6 @@
"lodash-unified": "^1.0.2",
"memoize-one": "^6.0.0",
"normalize-wheel-es": "^1.2.0"
- },
- "dependencies": {
- "@popperjs/core": {
- "version": "npm:@sxzz/popperjs-es@2.11.7",
- "resolved": "https://mirrors.huaweicloud.com/repository/npm/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
- "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ=="
- }
}
},
"element-ui": {
@@ -15471,6 +15388,87 @@
}
}
},
+ "vue-loader-v16": {
+ "version": "npm:vue-loader@16.8.3",
+ "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
+ "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chalk": "^4.1.0",
+ "hash-sum": "^2.0.0",
+ "loader-utils": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "optional": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "optional": true
+ },
+ "loader-utils": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
+ "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ }
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
"vue-qrcode": {
"version": "2.2.2",
"resolved": "https://registry.npmmirror.com/vue-qrcode/-/vue-qrcode-2.2.2.tgz",
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/public/static/webconfig.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/public/static/webconfig.js"
new file mode 100644
index 0000000..c8cba7b
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/public/static/webconfig.js"
@@ -0,0 +1,7 @@
+window.webConfig = {
+ "webApiBaseUrl": "http://localhost:9291/",
+ "webApiProduction":"http://localhost:9291/"
+
+ // "webApiBaseUrl": "http://172.19.69.152:9291/",
+ // "webApiProduction":"http://172.19.69.152:9291/"
+}
\ 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/inbound/extend/OrderStockTake.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/OrderStockTake.vue"
new file mode 100644
index 0000000..5f1f0be
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/OrderStockTake.vue"
@@ -0,0 +1,868 @@
+<template>
+ <div>
+ <vol-box
+ v-model="showStockTakeBox"
+ :lazy="true"
+ :width="isMobile ? '95%' : '70%'"
+ :padding="24"
+ title="搴撳瓨鐩樼偣鎿嶄綔"
+ class="custom-vol-box"
+ >
+ <div class="stock-take-container">
+ <div class="receipt-info">
+ <el-tag type="primary" size="small" class="receipt-tag">
+ 褰撳墠鐩樼偣鍗曟嵁鍙凤細<span class="receipt-no">{{ orderNo }}</span>
+ </el-tag>
+ </div>
+
+ <!-- 鏍稿績杈撳叆琛ㄥ崟 -->
+ <el-form
+ :model="formData"
+ ref="formRef"
+ label-width="100px"
+ class="stock-take-form"
+ @submit.prevent
+ >
+ <!-- 鏂欑鍙疯緭鍏ユ -->
+ <el-form-item
+ label="鏂欑鍙凤細"
+ name="boxNo"
+ :rules="[
+ {
+ required: true,
+ message: '璇锋壂鎻忔垨杈撳叆鏂欑鍙�',
+ trigger: 'blur',
+ },
+ { validator: validateBoxNo, trigger: 'blur' },
+ ]"
+ class="form-item"
+ >
+ <el-input
+ ref="boxNoInputRef"
+ v-model="formData.boxNo"
+ placeholder="璇蜂娇鐢ㄦ壂鐮佹灙鎵弿鏂欑鍙凤紝鎴栨墜鍔ㄨ緭鍏�"
+ clearable
+ @keydown.enter="debouncedHandleBoxNoScan"
+ @blur="handleBoxNoBlur"
+ :disabled="loading"
+ class="custom-input"
+ :class="{ 'has-value': formData.boxNo.trim() }"
+ >
+ <template #append>
+ <el-button
+ icon="Search"
+ type="primary"
+ size="small"
+ @click="handleBoxNoScan"
+ :disabled="!formData.boxNo.trim() || loading"
+ class="input-btn"
+ ></el-button>
+ </template>
+ </el-input>
+ </el-form-item>
+
+ <!-- 鏉$爜杈撳叆妗� -->
+ <el-form-item
+ label="鐩樼偣鏉$爜锛�"
+ name="barcode"
+ :rules="[
+ { required: true, message: '璇锋壂鎻忔垨杈撳叆鏉$爜', trigger: 'blur' },
+ { validator: validateBarcode, trigger: 'blur' },
+ ]"
+ class="form-item"
+ >
+ <el-input
+ ref="barcodeInputRef"
+ v-model="formData.barcode"
+ placeholder="璇蜂娇鐢ㄦ壂鐮佹灙鎵弿鏉$爜锛屾垨鎵嬪姩杈撳叆"
+ clearable
+ @keydown.enter="debouncedHandleBarcodeScan"
+ :disabled="!formData.boxNo.trim() || loading"
+ class="custom-input"
+ :class="{ 'has-value': formData.barcode.trim() }"
+ >
+ <template #append>
+ <el-button
+ icon="Search"
+ type="primary"
+ size="small"
+ @click="handleBarcodeScan"
+ :disabled="
+ !formData.boxNo.trim() ||
+ !formData.barcode.trim() ||
+ loading
+ "
+ class="input-btn"
+ ></el-button>
+ </template>
+ </el-input>
+ </el-form-item>
+
+ <!-- 搴撳瓨鏁伴噺妗嗭紙鍙锛� -->
+ <el-form-item
+ label="搴撳瓨鏁伴噺锛�"
+ name="stockQuantity"
+ class="form-item"
+ >
+ <el-input
+ v-model="formData.stockQuantity"
+ placeholder="鎵弿鏉$爜鍚庤嚜鍔ㄥ~鍏�"
+ readonly
+ class="custom-input custom-readonly-input"
+ :class="{ 'has-value': formData.stockQuantity }"
+ ></el-input>
+ </el-form-item>
+
+ <!-- 瀹為檯鐩樼偣鏁伴噺 -->
+ <el-form-item
+ label="瀹為檯鐩樼偣鏁伴噺锛�"
+ name="actualQuantity"
+ :rules="[
+ {
+ required: true,
+ message: '璇疯緭鍏ュ疄闄呯洏鐐规暟閲�',
+ trigger: 'blur',
+ },
+ { type: 'number', message: '璇疯緭鍏ユ湁鏁堢殑鏁板瓧', trigger: 'blur' },
+ { validator: validateActualQuantity, trigger: 'blur' },
+ ]"
+ class="form-item"
+ >
+ <el-input
+ v-model.number="formData.actualQuantity"
+ placeholder="璇疯緭鍏ュ疄闄呯洏鐐规暟閲忥紙澶т簬0锛�"
+ type="number"
+ clearable
+ @keydown.enter="handleStockTakeComplete"
+ :disabled="!formData.stockQuantity || loading"
+ class="custom-input"
+ :class="{ 'has-value': formData.actualQuantity }"
+ ></el-input>
+ </el-form-item>
+ </el-form>
+
+ <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
+ <div class="action-buttons">
+ <el-button
+ type="info"
+ size="small"
+ @click="handleBoxReturn"
+ :disabled="!formData.boxNo.trim() || loading"
+ class="return-btn"
+ >
+ <Return /> 鏂欑鍥炲簱
+ </el-button>
+ <el-button
+ type="primary"
+ size="small"
+ @click="handleStockTakeComplete"
+ :disabled="
+ loading ||
+ !formData.boxNo.trim() ||
+ !formData.barcode.trim() ||
+ !formData.stockQuantity ||
+ !formData.actualQuantity
+ "
+ class="complete-btn"
+ >
+ <Check /> 鐩樼偣瀹屾垚
+ </el-button>
+ <el-button
+ type="text"
+ size="small"
+ @click="handleCancel"
+ :disabled="loading"
+ class="cancel-btn"
+ >
+ 鍙栨秷
+ </el-button>
+ </div>
+ </div>
+ </vol-box>
+ </div>
+</template>
+
+<script setup>
+import { ref, reactive, onMounted, nextTick, watch, defineEmits, computed } from "vue";
+import { ElMessage, ElTag, ElMessageBox } from "element-plus";
+import { Search, Check, Return } from "@element-plus/icons-vue";
+
+import VolBox from "@/components/basic/VolBox.vue";
+import http from "@/api/http";
+
+// 鍝嶅簲寮忓彉閲� - 鍗曟嵁鍙�
+const orderNo = ref("");
+
+// 鏆撮湶浜嬩欢
+const emit = defineEmits(["close", "refresh", "box-returned"]);
+
+// 鍝嶅簲寮忔暟鎹�
+const showStockTakeBox = ref(false);
+const formData = reactive({
+ boxNo: "", // 鏂欑鍙�
+ barcode: "", // 鐩樼偣鏉$爜
+ stockQuantity: "", // 搴撳瓨鏁伴噺锛堝彧璇伙級
+ actualQuantity: "", // 瀹為檯鐩樼偣鏁伴噺
+});
+const loading = ref(false);
+const formRef = ref(null);
+
+// 妯℃澘寮曠敤
+const boxNoInputRef = ref(null);
+const barcodeInputRef = ref(null);
+
+// 妫�娴嬫槸鍚︿负绉诲姩绔�
+const isMobile = computed(() => {
+ return window.innerWidth < 768;
+});
+
+// 缁勪欢鎸傝浇鏃惰仛鐒﹀埌鏂欑鍙疯緭鍏ユ
+onMounted(() => {
+ nextTick(() => {
+ boxNoInputRef.value?.focus();
+ });
+ // 鐩戝惉绐楀彛澶у皬鍙樺寲
+ window.addEventListener("resize", () => {});
+});
+
+// 鐩戝惉鏂欑鍙峰彉鍖栵紝娓呯┖鍚庣画鐩稿叧瀛楁
+watch(
+ () => formData.boxNo,
+ (newVal) => {
+ if (!newVal.trim()) {
+ formData.barcode = "";
+ formData.stockQuantity = "";
+ formData.actualQuantity = "";
+ }
+ },
+ { immediate: true }
+);
+
+// 闃叉姈鍑芥暟
+const debounce = (fn, delay = 100) => {
+ let timer = null;
+ return (...args) => {
+ if (timer) clearTimeout(timer);
+ timer = setTimeout(() => {
+ fn.apply(this, args);
+ }, delay);
+ };
+};
+
+// 鎵撳紑寮圭獥骞舵帴鏀跺崟鎹彿
+const open = (receiptNo) => {
+ showStockTakeBox.value = true;
+ orderNo.value = receiptNo;
+ // 閲嶇疆琛ㄥ崟
+ formData.boxNo = "";
+ formData.barcode = "";
+ formData.stockQuantity = "";
+ formData.actualQuantity = "";
+ nextTick(() => {
+ boxNoInputRef.value?.focus();
+ });
+};
+
+// 鍏抽棴寮圭獥
+const handleCancel = (e) => {
+ e.stopPropagation();
+ e.preventDefault();
+ showStockTakeBox.value = false;
+ emit("close");
+ orderNo.value = "";
+};
+
+// 鏂欑鍙烽獙璇侊紙浼樺寲锛氭湁鍊兼椂浠呴獙璇侀暱搴︼紝鏃犲�兼椂瑙﹀彂蹇呭~锛�
+const validateBoxNo = (rule, value, callback) => {
+ // 鏈夊�兼椂楠岃瘉闀垮害
+ if (value && value.trim().length < 3) {
+ callback(new Error("鏂欑鍙烽暱搴︿笉鑳藉皯浜�3浣�"));
+ }
+ // 鏃犲�兼椂鐢眗equired瑙勫垯澶勭悊锛岃繖閲屼笉閲嶅鎻愮ず
+ else {
+ callback();
+ }
+};
+
+// 鏉$爜楠岃瘉锛堜紭鍖栵細鏈夊�兼椂浠呴獙璇侀暱搴︼級
+const validateBarcode = (rule, value, callback) => {
+ if (value && value.trim().length < 6) {
+ callback(new Error("鏉$爜闀垮害涓嶈兘灏戜簬6浣�"));
+ } else {
+ callback();
+ }
+};
+
+// 瀹為檯鐩樼偣鏁伴噺楠岃瘉锛堜紭鍖栵細鏈夊�兼椂楠岃瘉鍚堟硶鎬э級
+const validateActualQuantity = (rule, value, callback) => {
+ if (value === null || value === undefined) {
+ callback(new Error("璇疯緭鍏ュ疄闄呯洏鐐规暟閲�"));
+ } else if (value <= 0) {
+ callback(new Error("瀹為檯鐩樼偣鏁伴噺蹇呴』澶т簬0"));
+ } else if (!Number.isInteger(value)) {
+ callback(new Error("瀹為檯鐩樼偣鏁伴噺蹇呴』鏄暣鏁�"));
+ } else {
+ callback();
+ }
+};
+
+// 鏂欑鍙峰け鐒﹀鐞�
+const handleBoxNoBlur = () => {
+ if (formData.boxNo.trim() && boxNoInputRef.value?.input) {
+ boxNoInputRef.value.input.select();
+ }
+};
+
+// 鏂欑鍙锋壂鎻忛獙璇侊紙鍚庣鎺ュ彛锛�
+const validateBoxNoApi = async (boxNo) => {
+ try {
+ const res = await http.post(
+ `/api/TakeStockOrder/ValidateBoxNo?orderNo=${encodeURIComponent(
+ orderNo.value
+ )}&boxNo=${encodeURIComponent(boxNo)}`,
+ "楠岃瘉鏂欑鍙蜂腑..."
+ );
+
+ if (!res.status) {
+ throw new Error(res.message || "鏂欑鍙烽獙璇佸け璐�");
+ }
+ return res.data;
+ } catch (error) {
+ throw error;
+ }
+};
+
+// 鏂欑鍙锋壂鎻忓鐞�
+const handleBoxNoScan = async () => {
+ if (!formRef.value) return;
+ // 鎵嬪姩瑙﹀彂楠岃瘉锛堜粎楠岃瘉褰撳墠瀛楁锛�
+ const valid = await formRef.value.validateField("boxNo");
+ if (valid !== true) return;
+
+ const boxNo = formData.boxNo.trim();
+ if (!boxNo) return;
+
+ try {
+ loading.value = true;
+ await validateBoxNoApi(boxNo);
+ ElMessage.success(`鏂欑鍙� ${boxNo} 楠岃瘉閫氳繃`);
+ nextTick(() => {
+ barcodeInputRef.value?.focus();
+ });
+ } catch (error) {
+ ElMessage.error(error.message);
+ nextTick(() => {
+ if (boxNoInputRef.value?.input) {
+ boxNoInputRef.value.input.select();
+ }
+ });
+ } finally {
+ loading.value = false;
+ }
+};
+
+// 鏉$爜鎵弿楠岃瘉锛堝悗绔帴鍙o級
+const validateBarcodeApi = async (boxNo, barcode) => {
+ try {
+ const res = await http.post(
+ `/api/TakeStockOrder/ValidateBarcode?boxNo=${encodeURIComponent(
+ boxNo
+ )}&barcode=${encodeURIComponent(barcode)}`,
+ "楠岃瘉鏉$爜涓�..."
+ );
+
+ if (!res.status) {
+ throw new Error(res.message || "鏉$爜楠岃瘉澶辫触");
+ }
+
+ if (
+ res.data?.stockQuantity === undefined ||
+ res.data?.stockQuantity === null
+ ) {
+ throw new Error("鏈煡璇㈠埌璇ユ潯鐮佺殑搴撳瓨鏁伴噺");
+ }
+
+ return res.data;
+ } catch (error) {
+ throw error;
+ }
+};
+
+// 鏉$爜鎵弿澶勭悊
+const handleBarcodeScan = async () => {
+ if (!formRef.value) return;
+ const valid = await formRef.value.validateField("barcode");
+ if (valid !== true) return;
+
+ const boxNo = formData.boxNo.trim();
+ const barcode = formData.barcode.trim();
+ if (!boxNo || !barcode) return;
+
+ try {
+ loading.value = true;
+ const result = await validateBarcodeApi(boxNo, barcode);
+ formData.stockQuantity = result.stockQuantity;
+ ElMessage.success(
+ `鏉$爜 ${barcode} 楠岃瘉閫氳繃锛屽簱瀛樻暟閲忥細${result.stockQuantity}`
+ );
+ nextTick(() => {
+ const actualQuantityInput = document.querySelector(
+ ".form-item:last-child .el-input__inner"
+ );
+ actualQuantityInput?.focus();
+ });
+ } catch (error) {
+ ElMessage.error(error.message);
+ nextTick(() => {
+ if (barcodeInputRef.value?.input) {
+ barcodeInputRef.value.input.select();
+ }
+ });
+ } finally {
+ loading.value = false;
+ }
+};
+
+// 鐩樼偣瀹屾垚鎻愪氦
+const handleStockTakeComplete = async () => {
+ if (!formRef.value) return;
+ // 鍏ㄨ〃鍗曢獙璇�
+ const valid = await formRef.value.validate();
+ if (!valid) return;
+
+ const { boxNo, barcode, actualQuantity, stockQuantity } = formData;
+ const receiptNo = orderNo.value;
+
+ try {
+ loading.value = true;
+
+ const res = await http.post(
+ "/api/TakeStockOrder/CompleteStockTake",
+ {
+ orderNo: receiptNo,
+ boxNo,
+ barcode,
+ actualQuantity,
+ stockQuantity,
+ },
+ {
+ loadingText: "鎻愪氦鐩樼偣鏁版嵁涓�...",
+ }
+ );
+
+ if (res.status) {
+ ElMessage.success("鐩樼偣瀹屾垚锛屾彁浜ゆ垚鍔燂紒");
+ formData.barcode = "";
+ formData.stockQuantity = "";
+ formData.actualQuantity = "";
+ nextTick(() => {
+ barcodeInputRef.value?.focus();
+ });
+ emit("refresh");
+ } else {
+ throw new Error(res.message || "鐩樼偣鎻愪氦澶辫触");
+ }
+ } catch (error) {
+ ElMessage.error(error.message || "缃戠粶寮傚父锛屾彁浜ゅけ璐�");
+ } finally {
+ loading.value = false;
+ }
+};
+
+// 鏂欑鍥炲簱鍔熻兘
+const handleBoxReturn = async () => {
+ const boxNo = formData.boxNo.trim();
+ if (!boxNo) {
+ ElMessage.warning("璇峰厛杈撳叆鎴栨壂鎻忔枡绠卞彿");
+ return;
+ }
+
+ try {
+ await ElMessageBox.confirm(`纭畾灏嗘枡绠便��${boxNo}銆戝洖搴撳悧锛焋, "鍥炲簱纭", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "info",
+ center: true,
+ confirmButtonClass: "el-button--primary",
+ cancelButtonClass: "el-button--text",
+ });
+
+ loading.value = true;
+
+ const res = await http.post(
+ `/api/TakeStockOrder/ReturnBox?boxNo=${encodeURIComponent(boxNo)}&orderNo=${encodeURIComponent(
+ orderNo.value
+ )}`,
+ "鏂欑鍥炲簱涓�..."
+ );
+
+ if (res.status) {
+ ElMessage.success(`鏂欑銆�${boxNo}銆戝洖搴撴垚鍔燂紒`);
+ formData.boxNo = "";
+ formData.barcode = "";
+ formData.stockQuantity = "";
+ formData.actualQuantity = "";
+ nextTick(() => {
+ boxNoInputRef.value?.focus();
+ });
+ emit("box-returned", boxNo);
+ } else {
+ throw new Error(res.message || "鏂欑鍥炲簱澶辫触");
+ }
+ } catch (error) {
+ if (error.name !== "Cancel") {
+ ElMessage.error(error.message);
+ }
+ } finally {
+ loading.value = false;
+ }
+};
+
+// 甯﹂槻鎶栫殑鎵弿澶勭悊
+const debouncedHandleBoxNoScan = debounce(async (e) => {
+ e.stopPropagation();
+ e.preventDefault();
+ await handleBoxNoScan();
+}, 100);
+
+const debouncedHandleBarcodeScan = debounce(async (e) => {
+ e.stopPropagation();
+ e.preventDefault();
+ await handleBarcodeScan();
+}, 100);
+
+// 鏆撮湶鏂规硶
+defineExpose({
+ open,
+});
+</script>
+
+<style scoped>
+/* 涓诲鍣ㄦ牱寮� - 浼樺寲闂磋窛鍜屽搷搴斿紡 */
+.stock-take-container {
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ gap: 16px;
+ padding: 8px 0;
+}
+
+/* 鍗曟嵁淇℃伅鏍峰紡 - 浼樺寲瑙嗚灞傜骇 */
+.receipt-info {
+ margin-bottom: 4px;
+}
+
+.receipt-tag {
+ padding: 8px 16px;
+ font-size: 14px;
+ background-color: #e8f4f8 !important;
+ border-color: #409eff !important;
+ color: #1989fa !important;
+ border-radius: 8px;
+ box-shadow: 0 2px 8px rgba(64, 158, 255, 0.1);
+}
+
+.receipt-no {
+ font-weight: 600;
+ color: #1989fa;
+ margin-left: 6px;
+}
+
+/* 琛ㄥ崟鏍峰紡 - 浼樺寲闃村奖鍜屽唴杈硅窛 */
+.stock-take-form {
+ width: 100%;
+ background-color: #ffffff;
+ padding: 20px;
+ border-radius: 12px;
+ box-shadow: 0 2px 12px rgba(64, 158, 255, 0.06);
+ border: 1px solid #f0f8fb;
+}
+
+.form-item {
+ margin-bottom: 16px;
+}
+
+/* 杈撳叆妗嗘牳蹇冩牱寮� - 浼樺寲鐘舵�佹樉绀� */
+.custom-input {
+ width: 100%;
+ position: relative;
+}
+
+/* 鏈夊�兼椂闅愯棌鍗犱綅绗� + 浼樺寲杈规 */
+.custom-input.has-value :deep(.el-input__inner) {
+ --el-input-placeholder-color: transparent; /* 闅愯棌鍗犱綅绗� */
+ border-color: #8cc5ff; /* 娴呰摑杈规锛屽尯鍒嗘棤鍊肩姸鎬� */
+ background-color: #ffffff;
+}
+
+.custom-input :deep(.el-input__inner) {
+ border-radius: 8px;
+ border-color: #e5f0fa;
+ transition: all 0.2s ease;
+ height: 42px;
+ line-height: 42px;
+ font-size: 14px;
+ background-color: #f8fbff;
+ padding: 0 12px;
+}
+
+/* 鑱氱劍鏍峰紡浼樺寲 */
+.custom-input :deep(.el-input__inner:focus) {
+ border-color: #409eff;
+ box-shadow: 0 0 0 3px rgba(64, 158, 255, 0.1);
+ background-color: #ffffff;
+ outline: none;
+}
+
+/* 娓呴櫎鎸夐挳鏍峰紡浼樺寲 */
+.custom-input :deep(.el-input__clear) {
+ color: #91c9f7;
+ width: 18px;
+ height: 18px;
+}
+
+.custom-input :deep(.el-input__clear:hover) {
+ color: #409eff;
+}
+
+/* 鍙杈撳叆妗嗘牱寮� - 澧炲己鍖哄垎搴� */
+.custom-readonly-input :deep(.el-input__inner) {
+ background-color: #f0f8fb;
+ color: #1989fa;
+ font-weight: 500;
+ cursor: default;
+ border-color: #d1e7fd;
+ padding-right: 12px;
+}
+
+/* 杈撳叆妗嗘寜閽牱寮� - 浼樺寲灏哄鍜宧over鏁堟灉 */
+.input-btn {
+ border-radius: 0 8px 8px 0 !important;
+ height: 42px;
+ width: 48px;
+ background-color: #409eff;
+ border-color: #409eff;
+ transition: all 0.2s ease;
+}
+
+.input-btn:hover {
+ background-color: #1989fa !important;
+ border-color: #1989fa !important;
+ box-shadow: 0 2px 8px rgba(64, 158, 255, 0.2);
+ transform: translateY(-1px);
+}
+
+/* 琛ㄥ崟楠岃瘉閿欒鏍峰紡 - 鍏抽敭锛氭湁鍊兼椂涓嶆樉绀洪敊璇竟妗� */
+.form-item :deep(.el-form-item__error) {
+ font-size: 12px;
+ color: #f56c6c;
+ margin-top: 4px;
+ /* 浠呭湪杈撳叆妗嗕负绌轰笖楠岃瘉澶辫触鏃舵樉绀� */
+ display: none;
+}
+
+/* 鍙湁杈撳叆妗嗕负绌� + 楠岃瘉澶辫触鏃舵樉绀洪敊璇彁绀� */
+.form-item:deep(.el-form-item--error) .custom-input:not(.has-value) + .el-form-item__error {
+ display: block;
+}
+
+/* 鏈夊�兼椂鍗充娇楠岃瘉澶辫触锛屼篃涓嶆樉绀洪敊璇竟妗� */
+.custom-input.has-value :deep(.el-input__inner.el-input__inner--error) {
+ border-color: #8cc5ff;
+ box-shadow: none;
+}
+
+/* 鎿嶄綔鎸夐挳鍖哄煙 - 浼樺寲闂磋窛鍜屽搷搴斿紡 */
+.action-buttons {
+ display: flex;
+ justify-content: flex-end;
+ gap: 10px;
+ margin-top: 20px;
+ flex-wrap: wrap;
+}
+
+/* 鍥炲簱鎸夐挳鏍峰紡 - 浼樺寲浜や簰 */
+.return-btn {
+ border-radius: 8px;
+ padding: 9px 20px;
+ font-size: 14px;
+ font-weight: 500;
+ background-color: #e8f4f8;
+ border-color: #409eff;
+ color: #1989fa;
+ transition: all 0.2s ease;
+}
+
+.return-btn:hover {
+ background-color: #d1e7fd !important;
+ border-color: #1989fa !important;
+ color: #1989fa !important;
+ transform: translateY(-1px);
+ box-shadow: 0 2px 8px rgba(64, 158, 255, 0.15);
+}
+
+.return-btn:disabled {
+ background-color: #f0f8fb !important;
+ border-color: #b3d8ff !important;
+ color: #91c9f7 !important;
+ cursor: not-allowed;
+ transform: none;
+ box-shadow: none;
+}
+
+/* 鐩樼偣瀹屾垚鎸夐挳鏍峰紡 - 浼樺寲浜や簰 */
+.complete-btn {
+ border-radius: 8px;
+ padding: 9px 20px;
+ font-size: 14px;
+ font-weight: 500;
+ background-color: #409eff;
+ border-color: #409eff;
+ transition: all 0.2s ease;
+}
+
+.complete-btn:hover {
+ background-color: #1989fa !important;
+ border-color: #1989fa !important;
+ transform: translateY(-1px);
+ box-shadow: 0 2px 8px rgba(64, 158, 255, 0.2);
+}
+
+.complete-btn:disabled {
+ background-color: #a0cfff !important;
+ border-color: #a0cfff !important;
+ color: #ffffff !important;
+ cursor: not-allowed;
+ transform: none;
+ box-shadow: none;
+}
+
+/* 鍙栨秷鎸夐挳鏍峰紡 - 浼樺寲鐐瑰嚮鍖哄煙 */
+.cancel-btn {
+ color: #666666;
+ font-size: 14px;
+ transition: all 0.2s ease;
+ padding: 9px 20px;
+ border-radius: 8px;
+ min-width: 80px;
+}
+
+.cancel-btn:hover {
+ color: #1989fa !important;
+ background-color: #f0f8fb !important;
+}
+
+/* 寮圭獥鏁翠綋鏍峰紡 - 浼樺寲鍦嗚鍜岄槾褰� */
+.custom-vol-box {
+ border-radius: 16px !important;
+ overflow: hidden;
+ box-shadow: 0 8px 24px rgba(64, 158, 255, 0.12);
+}
+
+.custom-vol-box :deep(.el-dialog__header) {
+ background-color: #e8f4f8;
+ border-bottom: 1px solid #d1e7fd;
+ padding: 16px 24px;
+}
+
+.custom-vol-box :deep(.el-dialog__title) {
+ color: #1989fa;
+ font-size: 18px;
+ font-weight: 600;
+}
+
+.custom-vol-box :deep(.el-dialog__body) {
+ padding: 16px 24px;
+}
+
+/* 鍝嶅簲寮忛�傞厤 - 灏忓睆骞曚紭鍖� */
+@media (max-width: 768px) {
+ .stock-take-form {
+ padding: 16px;
+ }
+
+ .form-item {
+ margin-bottom: 12px;
+ }
+
+ .action-buttons {
+ justify-content: center;
+ }
+
+ .custom-vol-box :deep(.el-dialog__header) {
+ padding: 12px 16px;
+ }
+
+ .custom-vol-box :deep(.el-dialog__body) {
+ padding: 12px 16px;
+ }
+}
+</style>
+
+<style>
+/* 鍏ㄥ眬琛ュ厖鏍峰紡 - 缁熶竴涓婚 */
+.el-tag--primary {
+ --el-tag-bg-color: #e8f4f8;
+ --el-tag-border-color: #409eff;
+ --el-tag-text-color: #1989fa;
+}
+
+/* 鍗犱綅绗︽牱寮� - 缁熶竴棰滆壊 */
+.el-input__inner::-webkit-input-placeholder {
+ color: #b3d8ff;
+ font-size: 13px;
+}
+
+.el-input__inner::-moz-placeholder {
+ color: #b3d8ff;
+ font-size: 13px;
+}
+
+.el-input__inner:-ms-input-placeholder {
+ color: #b3d8ff;
+ font-size: 13px;
+}
+
+.el-input__inner::placeholder {
+ color: #b3d8ff;
+ font-size: 13px;
+}
+
+/* 淇℃伅鎸夐挳鍏ㄥ眬鏍峰紡 */
+.el-button--info {
+ --el-button-bg-color: #e8f4f8;
+ --el-button-border-color: #409eff;
+ --el-button-text-color: #1989fa;
+ --el-button-hover-bg-color: #d1e7fd;
+ --el-button-hover-border-color: #1989fa;
+ --el-button-hover-text-color: #1989fa;
+}
+
+/* 纭寮圭獥鏍峰紡浼樺寲 */
+.el-message-box {
+ border-radius: 12px !important;
+ box-shadow: 0 4px 20px rgba(64, 158, 255, 0.15);
+}
+
+.el-message-box__header {
+ border-bottom: 1px solid #f0f8fb;
+ padding: 12px 20px;
+}
+
+.el-message-box__title {
+ color: #1989fa;
+ font-size: 16px;
+ font-weight: 600;
+}
+
+.el-message-box__content {
+ color: #666666;
+ font-size: 14px;
+ padding: 16px 20px;
+}
+
+.el-message-box__btns {
+ padding: 12px 20px;
+ border-top: 1px solid #f0f8fb;
+}
+</style>
\ 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/inbound/extend/allocateOrderDetail.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/allocateOrderDetail.vue"
index 1bdbfaf..e170fa5 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/allocateOrderDetail.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/allocateOrderDetail.vue"
@@ -315,149 +315,149 @@
});
},
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);
+ // 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);
- const formData = reactive({
- selectedPlatform: platformOptions[0].value,
- });
+ // const formData = reactive({
+ // selectedPlatform: platformOptions[0].value,
+ // });
- 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;
- }
+ // 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;
+ // }
- const keys = this.selection.map((item) => item.id);
- const requestParams = {
- detailIds: keys,
- outboundTargetLocation: formData.selectedPlatform,
- outboundQuantity: 1,
- operator: "",
- orderNo: this.row.orderNo,
- };
+ // const keys = this.selection.map((item) => item.id);
+ // const requestParams = {
+ // detailIds: keys,
+ // outboundTargetLocation: formData.selectedPlatform,
+ // outboundQuantity: 1,
+ // operator: "",
+ // orderNo: this.row.orderNo,
+ // };
- this.http
- .post(
- "api/Outbound/ProcessPickingOutbound",
- 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/Outbound/ProcessPickingOutbound",
+ // 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);
+ // vnode.appContext = this.$.appContext;
+ // render(vnode, mountNode);
},
outboundbatch() {
if (this.selection.length === 0) {
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/takeStockOrder.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/takeStockOrder.js"
new file mode 100644
index 0000000..cae7d0a
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/takeStockOrder.js"
@@ -0,0 +1,83 @@
+// 鑷畾涔夋墿灞曚笟鍔′唬鐮�
+import gridBody from "./extend/OrderStockTake.vue";
+
+let extension = {
+ components: {
+ // 鏌ヨ鐣岄潰鎵╁睍缁勪欢锛氬皢鑷畾涔夊脊绐楁敞鍐屼负 gridBody 缁勪欢
+ gridHeader: '',
+ gridBody: gridBody, // 瀵瑰簲浣犵殑鐩樼偣寮圭獥缁勪欢
+ gridFooter: '',
+ // 鏂板缓/缂栬緫寮瑰嚭妗嗘墿灞曠粍浠讹紙姝ゅ涓嶇敤锛岀暀绌猴級
+ modelHeader: '',
+ modelBody: '',
+ modelFooter: ''
+ },
+ tableAction: '', // 鏃犻渶鎸囧畾琛ㄥ悕锛堥粯璁ら�傜敤褰撳墠椤甸潰琛ㄦ牸锛�
+ buttons: { view: [], box: [], detail: [] }, // 鎵╁睍鎸夐挳锛堝闇�棰濆娣诲姞鍙湪姝ら厤缃級
+ methods: {
+ onInit() {
+ // 鎵惧埌 value 涓� "OrderStockTake" 鐨勬寜閽紙闇�鍦ㄦ鏋朵腑鎻愬墠閰嶇疆璇ユ寜閽級
+ let OrderStockTakeBtn = this.buttons.find(x => x.value === 'OrderStockTake');
+ if (OrderStockTakeBtn) {
+ // 閲嶅啓鎸夐挳鐐瑰嚮浜嬩欢
+ OrderStockTakeBtn.onClick = function () {
+ // 1. 鑾峰彇琛ㄦ牸閫変腑琛屾暟鎹�
+ let rows = this.$refs.table.getSelected();
+ if (rows.length === 0) return this.$error("璇烽�夋嫨涓�鏉$洏鐐瑰崟鎹暟鎹紒");
+ if (rows.length > 1) return this.$error("鍙兘閫夋嫨涓�鏉$洏鐐瑰崟鎹暟鎹紒");
+
+ const selectedReceiptNo = rows[0].orderNo;
+ if (!selectedReceiptNo) return this.$error("閫変腑鐨勫崟鎹己灏戞湁鏁堢殑鍗曟嵁鍙凤紒");
+
+ // 3. 璋冪敤鑷畾涔夊脊绐楃殑 open 鏂规硶锛屽苟浼犻�掑崟鎹彿锛堟牳蹇冿細缁欏脊绐椾紶鍙傦級
+ this.$refs.gridBody.open(selectedReceiptNo);
+ };
+ }
+
+ // 4. 鐩戝惉鑷畾涔夊脊绐楃殑浜嬩欢锛堝悓姝ヤ富椤甸潰鏁版嵁锛�
+ this.$nextTick(() => {
+ const stockTakeComp = this.$refs.gridBody;
+ if (stockTakeComp) {
+ // 鐩戝惉寮圭獥鐨� "refresh" 浜嬩欢锛堢洏鐐瑰畬鎴愬悗鍒锋柊涓婚〉闈級
+ stockTakeComp.$on('refresh', () => {
+ this.$refs.table.reload(); // 鍒锋柊琛ㄦ牸鏁版嵁
+ });
+
+ // 鐩戝惉寮圭獥鐨� "box-returned" 浜嬩欢锛堟枡绠卞洖搴撳悗鍙寜闇�澶勭悊锛�
+ stockTakeComp.$on('box-returned', (boxNo) => {
+ this.$success(`鏂欑銆�${boxNo}銆戝洖搴撴垚鍔燂紝琛ㄦ牸灏嗗埛鏂帮紒`);
+ this.$refs.table.reload(); // 鍥炲簱鍚庝篃鍒锋柊琛ㄦ牸锛堝彲閫夛紝鏍规嵁涓氬姟闇�姹傦級
+ });
+ }
+ });
+ },
+ onInited() {
+ // 妗嗘灦鍒濆鍖栧畬鎴愬悗鎵ц锛堝闇�閰嶇疆鏄庣粏琛ㄥ彲鍦ㄦ鎿嶄綔锛�
+ },
+ searchBefore(param) {
+ // 鏌ヨ鍓嶆嫤鎴細鍙坊鍔犻澶栨煡璇㈡潯浠讹紙濡傛潈闄愯繃婊わ級
+ return true;
+ },
+ searchAfter(result) {
+ // 鏌ヨ鍚庢暟鎹鐞嗭紙濡傛牸寮忓寲鏃ユ湡銆佺姸鎬佹樉绀猴級
+ return true;
+ },
+ addBefore(formData) {
+ // 鏂板缓淇濆瓨鍓嶅鐞嗭紙姝ゅ涓嶇敤锛�
+ return true;
+ },
+ updateBefore(formData) {
+ // 缂栬緫淇濆瓨鍓嶅鐞嗭紙姝ゅ涓嶇敤锛�
+ return true;
+ },
+ rowClick({ row, column, event }) {
+ // 鍗曞嚮琛岄�変腑褰撳墠琛岋紙浼樺寲鐢ㄦ埛浣撻獙锛�
+ this.$refs.table.$refs.table.toggleRowSelection(row);
+ },
+ modelOpenAfter(row) {
+ // 鏂板缓/缂栬緫寮圭獥鎵撳紑鍚庡鐞嗭紙姝ゅ涓嶇敤锛�
+ }
+ }
+};
+
+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/extension/inbound/takeStockOrderDetail.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/takeStockOrderDetail.js"
new file mode 100644
index 0000000..24e1d94
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/takeStockOrderDetail.js"
@@ -0,0 +1,58 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+ components: {
+ //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+ gridHeader: '',
+ gridBody: '',
+ gridFooter: '',
+ //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+ modelHeader: '',
+ modelBody: '',
+ modelFooter: ''
+ },
+ tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+ buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+ methods: {
+ //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+ onInit() {
+ },
+ 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/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 836d54c..25f7268 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"
@@ -1,9 +1,5 @@
//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
-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';
-
import gridBody from './extend/newAllocateOrderDetail.vue'
let extension = {
components: {
@@ -17,287 +13,7 @@
modelFooter: ''
},
tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
- buttons: { view: [
- /* {
- name: '鍑哄簱',
- type: 'primary',
- value: '鍑哄簱',
- onClick: function () { // 淇锛氱敤ElMessage鏇夸唬this.$message
- const selectedRows = this.$refs.table.getSelected();
- if (selectedRows.length === 0) {
- ElMessage.warning('璇峰厛閫夋嫨瑕佺敓鎴愪换鍔$殑琛�');
- return;
- }
- if (selectedRows.length > 1) {
- ElMessage.warning('鍙兘閫夋嫨涓�琛�');
- return;
- }
-
-
- // 鎵�鏈夋牎楠岄�氳繃锛岃Е鍙戜富缁勪欢鎵撳紑鍑哄簱寮圭獥
- console.log('鎵�鏈夋牎楠岄�氳繃锛岃Е鍙憃penOutboundDialog浜嬩欢锛屽崟鎹暟鎹細', selectedRows[0]);
-
- this.$emit('openOutboundDialog', {
- transNo: selectedRows[0].transNo, // 鍑哄簱鍗曠紪鍙�
- createDate: selectedRows[0].createDate || new Date().toLocaleDateString() // 鍑哄簱鏃ユ湡
- });
- }
- }, */
- {
- name: '绌烘墭鐩樺嚭搴�',
- type: 'primary',
- value: '绌烘墭鐩樺嚭搴�',
- onClick: function () {
-
-
- const platformOptions = Array.from({ length: 1 }, (_, i) => {
- const num = 1;
- return { label: `绔欏彴${num}`, value: `1-2` };
- });
-
- const quantityOptions = Array.from({ length: 6 }, (_, i) => ({
- label: (i + 1).toString(),
- value: i + 1
- }));
-
- const warehouseOptions = ref([]);
- const isLoadingWarehouses = ref(false);
-
- const getWarehouseList = async () => {
- isLoadingWarehouses.value = true;
- try {
- const { data, status } = await http.post('/api/LocationInfo/GetLocationTypes');
- if (status && Array.isArray(data)) {
- // 鏍煎紡鍖栦粨搴撻�夐」锛氶�傞厤ElSelect鐨刲abel-value鏍煎紡
- warehouseOptions.value = data.map(item => ({
- label: item.locationTypeDesc,
- value: item.locationType
- }));
- } else {
- ElMessage.error('鑾峰彇鍖哄煙鍒楄〃澶辫触');
- warehouseOptions.value = [];
- }
- } catch (err) {
- ElMessage.error('鍖哄煙鏁版嵁璇锋眰寮傚父锛岃绋嶅悗閲嶈瘯');
- warehouseOptions.value = [];
- } finally {
- isLoadingWarehouses.value = false;
- }
- };
-
- const mountNode = document.createElement('div');
- document.body.appendChild(mountNode);
-
-
- const formData = reactive({
- warehouseCode:'',
- palletCode: '',
- selectedPlatform: platformOptions[0].value,
- quantity:1
- });
-
- const vnode = createVNode(ElDialog, {
- title: '绌烘墭鐩樺嚭搴�',
- width: '500px',
- modelValue: true,
- appendToBody: true,
- onOpened: async () => {
- await getWarehouseList();
- const inputRef = vnode.component.refs.boxCodeInput;
- inputRef?.focus();
- },
- 'onUpdate:modelValue': (isVisible) => {
- if (!isVisible) {
- render(null, mountNode);
- document.body.removeChild(mountNode);
- }
- },
- style: {
- padding: '20px 0',
- borderRadius: '8px'
- }
- }, {
- default: () => h(ElForm, {
- model: formData,
- rules: {
- warehouseCode:[
- { required: true, message: '璇烽�夋嫨鍖哄煙', trigger: ['change', 'blur'] }
- ],
- palletCode: [
- { type: 'string', message: '鏂欑鍙峰繀椤讳负瀛楃涓�', trigger: 'blur' }
- ],
- selectedPlatform: [
- { required: true, message: '璇烽�夋嫨鍑哄簱绔欏彴', trigger: 'change' }
- ],
- quantity:[
- { required: true, message: '璇烽�夋嫨绌虹鏁伴噺', trigger: 'change'}
- ]
- },
- ref: 'batchOutForm',
- labelWidth: '100px',
- style: {
- padding: '0 30px',
- }
- },
- [
- // h(ElFormItem, {
- // label: '浠撳簱鍖哄煙',
- // prop: 'warehouseCode',
- // style: {
- // marginBottom: '24px'
- // }
- // }, [
- // h(ElSelect, {
- // placeholder: '璇烽�夋嫨浠撳簱鍖哄煙',
- // modelValue: formData.warehouseCode,
- // 'onUpdate:modelValue': (val) => {
- // formData.warehouseCode = val;
- // },
- // style: {
- // width: '100%',
- // height: '40px',
- // borderRadius: '4px',
- // borderColor: '#dcdfe6'
- // }
- // }, warehouseOptions.value.map(platform =>
- // h(ElOption, { label: platform.label, value: platform.value })
- // ))
- // ]),
- 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:'quantity',
- // style:{
- // marginBottom:'24px'
- // }
- // },[h(ElSelect,{
- // placeholder:'璇烽�夋嫨绌虹鏁伴噺',
- // modelValue:formData.quantity,
- // 'onUpdate:modelValue':(val)=>{
- // formData.quantity=val;
- // },
- // style:{
- // width:'100%',
- // height:'40px',
- // borderRadius:'4px',
- // borderColor:'#dcdfe6'
- // },
- // filterable:false
- // },
- // quantityOptions.map(option=>
- // h(ElOption,{
- // label:option.label,
- // value:option.value
- // })
- // )
- // )]),
- h(ElFormItem, {
- label: '鏂欑鍙�',
- prop: 'palletCode',
- style: {
- marginBottom: '16px'
- }
- }, [
- h(ElInput, {
- type: 'text',
- placeholder: '鍙�夎緭鍏ユ枡绠卞彿锛屼笉濉垯鑷姩鍒嗛厤绌烘枡绠�',
- modelValue: formData.palletCode,
- 'onUpdate:modelValue': (val) => {
- formData.palletCode = val;
- },
- style: {
- width: '100%',
- height: '40px',
- borderRadius: '4px',
- borderColor: '#dcdfe6'
- },
- attrs: {
- placeholderStyle: 'color: #909399;'
- }
- })
- ]),
-
- 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.batchOutForm;
- try {
- await formRef.validate();
- } catch (err) {
- return;
- }
-
- http.post('/api/Task/PalletOutboundTask?palletCode='+formData.palletCode+'&endStation='+formData.selectedPlatform, {
-
- }).then(({ data, status, message }) => {
- if (status) {
-
- ElMessage.success(`鍑哄簱鎴愬姛`);
- this.refresh();
- render(null, mountNode);
- document.body.removeChild(mountNode);
- } else {
- ElMessage.error(message || data?.message || '鍑哄簱澶辫触');
- }
- }).catch(() => {
- ElMessage.error('璇锋眰澶辫触锛岃绋嶅悗閲嶈瘯');
- });
- },
- style: {
- borderRadius: '4px',
- padding: '8px 20px'
- }
- }, '纭畾')
- ])
- ])
- });
-
- vnode.appContext = this.$.appContext;
- render(vnode, mountNode);
- }
-}
- ], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+ buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
methods: {
//涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
onInit() {
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"
index 77d3fad..a4f1a20 100644
--- "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"
@@ -55,6 +55,7 @@
<stock-select ref="child" @parentCall="parentCall"></stock-select>
<selected-stock ref="selectedStock" @parentCall="parentCall"></selected-stock>
<NoStockOut ref="NoStockOut" @parentCall="parentCall"></NoStockOut>
+ <DirectOutbound ref="DirectOutbound" @parentCall="parentCall"></DirectOutbound>
</div>
</template>
@@ -64,20 +65,10 @@
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 DirectOutbound from "./DirectOutbound.vue";
export default {
- components: { VolBox, VolForm, StockSelect, SelectedStock, NoStockOut },
+ components: { VolBox, VolForm, StockSelect, SelectedStock, NoStockOut, DirectOutbound },
data() {
return {
row: null,
@@ -324,337 +315,166 @@
});
},
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);
+ // 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);
- const formData = reactive({
- selectedPlatform: platformOptions[0].value,
- });
+ // const formData = reactive({
+ // selectedPlatform: platformOptions[0].value,
+ // });
- 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;
- }
+ // 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;
+ // }
- const keys = this.selection.map((item) => item.id);
- const requestParams = {
- detailIds: keys,
- outboundTargetLocation: formData.selectedPlatform,
- outboundQuantity: 1,
- operator: "",
- orderNo: this.row.orderNo,
- };
+ // const keys = this.selection.map((item) => item.id);
+ // const requestParams = {
+ // detailIds: keys,
+ // outboundTargetLocation: formData.selectedPlatform,
+ // outboundQuantity: 1,
+ // operator: "",
+ // orderNo: this.row.orderNo,
+ // };
- this.http
- .post(
- "api/Outbound/ProcessPickingOutbound",
- 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/Outbound/ProcessPickingOutbound",
+ // 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);
+ // 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);
- const formData = reactive({
- selectedPlatform: platformOptions[0].value,
- outboundDecimal: "",
- });
+ const keys = this.selection.map((item) => item.id);
+ const requestParams = {
+ detailIds: keys,
+ outboundQuantity: this.selection[0].orderQuantity - this.selection[0].lockQuantity,
+ operator: "",
+ orderNo: this.row.orderNo,
+ isBatch: this.isBatch
+ };
+ console.log(requestParams);
+ this.$refs.DirectOutbound.open(requestParams);
- 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: "璇烽�夋嫨鍑哄簱绔欏彴锛�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",
- precision: 2,
- min: 0.01,
- }),
- ]),
- 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 keys = this.selection.map((item) => item.id);
- const requestParams = {
- detailIds: keys,
- outboundTargetLocation: formData.selectedPlatform,
- outboundQuantity: formData.outboundDecimal,
- operator: "",
- orderNo: this.row.orderNo,
- };
-
- this.http
- .post(
- "api/Outbound/ProcessPickingOutbound",
- 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);
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/outboundOrder.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/outboundOrder.js"
index be51ac6..6fa1f60 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/outboundOrder.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/outboundOrder.js"
@@ -385,10 +385,13 @@
if (rows.length == 0) return this.$error("璇烽�夋嫨鏁版嵁!");
if (rows.length > 1) return this.$error("璇烽�夋嫨涓�鏉℃暟鎹�!");
+
// 纭繚閫変腑琛屾湁id锛堟牴鎹疄闄呰〃鏍兼暟鎹瓧娈佃皟鏁达紝姣斿rows[0].detailId绛夛級
const selectedId = rows[0].id || rows[0].detailId;
if (!selectedId) return this.$error("閫変腑鏁版嵁缂哄皯蹇呰ID瀛楁!");
+ if(rows[0].orderStatus!=0&&rows[0].orderStatus!=1)return this.$error("璇ュ崟鎹凡缁忓畬鎴�");
+
const platformOptions = [
{ label: "绔欏彴2", value: "2-1" },
{ label: "绔欏彴3", value: "3-1" },
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/stock/stockView.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/stock/stockView.js"
index c58c825..62c338f 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/stock/stockView.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/stock/stockView.js"
@@ -1,4 +1,5 @@
-
+import { createVNode, render, h, reactive } from 'vue';
+import { ElDialog, ElForm, ElFormItem, ElSelect, ElOption, ElButton, ElMessage, ElLoading } from 'element-plus';
let extension = {
components: {
//鏌ヨ鐣岄潰鎵╁睍缁勪欢
@@ -156,6 +157,175 @@
}
}
})
+
+ let SelectTake = this.buttons.find(x => x.value == 'SelectStockTake');
+if (SelectTake) {
+ // 鏀逛负绠ご鍑芥暟纭繚this鎸囧悜Vue缁勪欢瀹炰緥
+ SelectTake.onClick = async () => {
+ // 鑾峰彇閫変腑鏁版嵁锛堜笌鍘熼�昏緫涓�鑷达紝纭繚鏄暟缁勬牸寮忥級
+ let stockViews = this.$refs.table.getSelected();
+
+ // 鏁版嵁鏍¢獙锛氳嚦灏戦�夋嫨涓�鏉℃暟鎹�
+ if (stockViews.length === 0) return ElMessage.error("璇烽�夋嫨闇�瑕佹搷浣滅殑鏁版嵁!");
+
+ // 绔欏彴閫夐」锛堝彲鏍规嵁瀹為檯涓氬姟璋冩暣閫夐」鍊硷級
+ const stationOptions = [
+ { label: "绔欏彴2", value: "2-1" },
+ { label: "绔欏彴3", value: "3-1" },
+ { label: "绔欏彴4", value: "4-1" },
+ ];
+
+ // 鍒涘缓寮圭獥鎸傝浇鑺傜偣
+ const mountNode = document.createElement("div");
+ document.body.appendChild(mountNode);
+
+ // 琛ㄥ崟鏁版嵁锛堢粦瀹氶�変腑鐨勭珯鍙帮級
+ const formData = reactive({
+ outStation: stationOptions[0].value, // 榛樿閫変腑绗竴涓珯鍙�
+ });
+
+ // 鍒涘缓寮圭獥VNode
+ 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: {
+ outStation: [
+ { required: true, message: "璇烽�夋嫨鍑哄簱绔欏彴", trigger: "change" },
+ ],
+ },
+ ref: "stockTakeForm", // 琛ㄥ崟ref鏍囪瘑
+ labelWidth: "100px",
+ style: {
+ padding: "0 30px",
+ },
+ },
+ [
+ // 绔欏彴閫夋嫨涓嬫媺妗�
+ h(ElFormItem, {
+ label: "鍑哄簱绔欏彴",
+ prop: "outStation",
+ style: { marginBottom: "24px" },
+ }, [
+ h(ElSelect, {
+ placeholder: "璇烽�夋嫨鍑哄簱绔欏彴",
+ modelValue: formData.outStation,
+ "onUpdate:modelValue": (val) => {
+ formData.outStation = val;
+ },
+ style: {
+ width: "100%",
+ height: "40px",
+ borderRadius: "4px",
+ borderColor: "#dcdfe6",
+ },
+ }, stationOptions.map((station) =>
+ h(ElOption, { label: station.label, value: station.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 () => {
+ // 纭繚琛ㄥ崟ref宸叉寕杞�
+ await this.$nextTick();
+ const formRef = vnode.component.refs.stockTakeForm;
+
+ if (!formRef) {
+ ElMessage.error("琛ㄥ崟鍒濆鍖栧け璐ワ紝璇烽噸璇�");
+ return;
+ }
+
+ // 琛ㄥ崟楠岃瘉
+ try {
+ await formRef.validate();
+ } catch (err) {
+ return;
+ }
+
+ // 鏋勯�犺姹傚弬鏁帮細
+ // 1. 璇锋眰浣擄細鐩存帴浼犻�抯tockViews鏁扮粍锛堝搴斿悗绔疞ist<StockViewDTO>锛�
+ // 2. outStation锛氶�氳繃鏌ヨ鍙傛暟浼犻�掞紙鍥犲悗绔湭鎸囧畾[FromBody]鎺ユ敹璇ュ弬鏁帮級
+ const requestBody = stockViews; // 鐩存帴浼犻�掗�変腑鏁扮粍锛堢‘淇濇暟缁勫唴瀵硅薄缁撴瀯涓嶴tockViewDTO涓�鑷达級
+ const outStation = formData.outStation;
+
+ // 鎺ュ彛璇锋眰锛歅ost鏂瑰紡锛岃姹備綋浼爏tockViews鏁扮粍锛宱utStation鎷煎埌URL鏌ヨ鍙傛暟
+ try {
+ // 鎷兼帴鏌ヨ鍙傛暟锛堝鏋渙utStation鏈夌壒娈婂瓧绗︼紝鍙娇鐢╡ncodeURIComponent澶勭悊锛�
+ const url = `api/Task/TakeOutbound?outStation=${encodeURIComponent(outStation)}`;
+
+ const x = await this.http.post(
+ url, // 甯︽煡璇㈠弬鏁扮殑URL
+ requestBody, // 璇锋眰浣擄細stockViews鏁扮粍
+ "鏁版嵁澶勭悊涓�"
+ );
+
+ if (!x.status) {
+ ElMessage.error(x.message || "搴撳瓨鎿嶄綔澶辫触");
+ return;
+ }
+
+ ElMessage.success("鎿嶄綔鎴愬姛");
+ this.refresh(); // 鍘熷埛鏂伴�昏緫淇濈暀
+ } catch (error) {
+ console.error("搴撳瓨鎺ュ彛璇锋眰澶辫触锛�", error);
+ ElMessage.error("璇锋眰澶辫触锛岃绋嶅悗閲嶈瘯");
+ } finally {
+ // 鏃犺鎴愬姛澶辫触锛屽叧闂脊绐�
+ render(null, mountNode);
+ document.body.removeChild(mountNode);
+ }
+ },
+ style: { borderRadius: "4px", padding: "8px 20px" },
+ }, "纭畾鎿嶄綔"),
+ ]),
+ ]),
+ }
+ );
+
+ // 缁戝畾app涓婁笅鏂囷紙纭繚寮圭獥鍐呯粍浠舵甯稿伐浣滐級
+ vnode.appContext = this.$.appContext;
+ render(vnode, mountNode);
+ };
+}
},
onInited() {
//妗嗘灦鍒濆鍖栭厤缃悗
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/taskinfo/task.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/taskinfo/task.js"
index f5c8e2e..3f548de 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/taskinfo/task.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/taskinfo/task.js"
@@ -15,31 +15,7 @@
modelFooter: ''
},
tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
- buttons: { view: [
- {
- name: '閲嶄笅浠诲姟',
- type: 'primary',
- value: '閲嶄笅浠诲姟',
- onClick: async function () {
- const selectRows = this.$refs.table.getSelected();
- if (selectRows.length == 0) return ElMessage.warning('璇烽�夋嫨涓�鏉′换鍔�');
- if (selectRows.length > 1) return ElMessage.warning('鍙兘閫夋嫨涓�鏉′换鍔�');
- const taskNum = selectRows[0].taskId;
- try{
- const response = await http.post('api/Task/RecreateTasks?taskNums='+taskNum, '浠诲姟閲嶄笅涓�...');
- const { status, message ,data} = response;
- if (status) {
- ElMessage.success(`閲嶄笅浠诲姟鎴愬姛`);
- this.refresh();
- }else{
- ElMessage.error(`閲嶄笅浠诲姟澶辫触锛�${message}`);
- }
- }catch(err){
- ElMessage.error(`閲嶄笅浠诲姟寮傚父锛�${err.message}`);
- }
- }
- }
- ], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+ buttons: { view: [ ], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
methods: {
//涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
onInit() {
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 9b747c8..727c0c8 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"
@@ -239,6 +239,18 @@
component: () => import('@/views/system/Log.vue'),
meta: {
}
+ }, {
+ path: '/takeStockOrder',
+ name: 'takeStockOrder',
+ component: () => import('@/views/inbound/takeStockOrder.vue')
+ }, {
+ path: '/takeStockOrderDetail',
+ name: 'takeStockOrderDetail',
+ component: () => import('@/views/inbound/takeStockOrderDetail.vue')
+ }, {
+ path: '/dashboard',
+ name: 'dashboard',
+ component: () => import('@/views/charts/wms-dashboard.vue')
}
]
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/Login.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/Login.vue"
index 99d69b8..91b5e8d 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/Login.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/Login.vue"
@@ -68,8 +68,8 @@
const codeImgSrc = ref("");
const value = ref("");
const userInfo = reactive({
- userName: "admin",
- password: "123456",
+ userName: "",
+ password: "",
verificationCode: "1234",
UUID: undefined,
});
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/charts/wms-dashboard.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/charts/wms-dashboard.vue"
new file mode 100644
index 0000000..5271c53
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/charts/wms-dashboard.vue"
@@ -0,0 +1,725 @@
+<template>
+ <div class="wms-dashboard">
+ <!-- 椤堕儴鏍囬鏍� -->
+ <div class="header">
+ <h1>WMS浠撳偍鍙鍖栧浘琛ㄧ湅鏉�</h1>
+ <div class="header-right">
+ <span>2025-12-24 16:11:44</span>
+ <el-select v-model="month" placeholder="鏈湀" style="margin-left: 10px; width: 80px;">
+ <el-option label="鏈湀" value="month"></el-option>
+ <el-option label="涓婃湀" value="lastMonth"></el-option>
+ </el-select>
+ <el-button type="primary" style="margin-left: 10px;" @click="refreshCharts">鍒锋柊</el-button>
+ </div>
+ </div>
+
+ <!-- 缁熻鍗$墖鍖哄煙 -->
+ <el-row :gutter="20" class="stats-card-row">
+ <el-col :span="6">
+ <el-card class="stats-card">
+ <div class="card-title">鎬诲簱瀛橈紙浠讹級</div>
+ <div class="card-value">269,225</div>
+ <div class="card-change"><el-tag type="success">鈫� 2.1% 杈冩槰鏃�</el-tag></div>
+ </el-card>
+ </el-col>
+ <el-col :span="6">
+ <el-card class="stats-card">
+ <div class="card-title">寰呭嚭搴撹鍗�</div>
+ <div class="card-value">425</div>
+ <div class="card-change"><el-tag type="warning">鈫� 5.3% 杈�1灏忔椂鍓�</el-tag></div>
+ </el-card>
+ </el-col>
+ <el-col :span="6">
+ <el-card class="stats-card">
+ <div class="card-title">浠婃棩浣滀笟瀹屾垚鐜�</div>
+ <div class="card-value">93.9%</div>
+ <div class="card-change"><el-tag type="success">鈫� 1.8% 杈冩槰鏃�</el-tag></div>
+ </el-card>
+ </el-col>
+ <el-col :span="6">
+ <el-card class="stats-card">
+ <div class="card-title">鏈鐞嗗紓甯�</div>
+ <div class="card-value">7</div>
+ <div class="card-change"><el-tag type="danger">鈫� 1 杈�30鍒嗛挓鍓�</el-tag></div>
+ </el-card>
+ </el-col>
+ </el-row>
+
+ <!-- 鍥捐〃鍖哄煙锛堢涓�琛岋級 -->
+ <el-row :gutter="20" class="chart-row">
+ <el-col :span="12">
+ <el-card class="chart-card">
+ <div class="chart-title">搴撳瓨搴撲綅鍒嗗竷锛堝浘鍍忓寲鍗犳瘮锛�<el-button type="text" class="view-btn">鍒囨崲瑙嗗浘</el-button></div>
+ <div ref="inventoryPieRef" class="chart-container"></div>
+ </el-card>
+ </el-col>
+ <el-col :span="12">
+ <el-card class="chart-card">
+ <div class="chart-title">杩�7鏃ュ嚭鍏ュ簱瓒嬪娍锛堝浘鍍忓寲璧板娍锛�
+ <el-button-group class="btn-group">
+ <el-button type="primary" size="small">鍏ㄩ儴</el-button>
+ <el-button type="default" size="small">鍏ュ簱</el-button>
+ <el-button type="default" size="small">鍑哄簱</el-button>
+ </el-button-group>
+ </div>
+ <div ref="stockTrendRef" class="chart-container"></div>
+ </el-card>
+ </el-col>
+ </el-row>
+
+ <!-- 鍥捐〃鍖哄煙锛堢浜岃锛� -->
+ <el-row :gutter="20" class="chart-row">
+ <el-col :span="8">
+ <el-card class="chart-card">
+ <div class="chart-title">搴撲綅鍒╃敤鐜�</div>
+ <div ref="locationRateRef" class="chart-container"></div>
+ </el-card>
+ </el-col>
+ <el-col :span="8">
+ <el-card class="chart-card">
+ <div class="chart-title">浣滀笟绫诲瀷鍒嗗竷<el-button type="text" class="view-btn">鏌ョ湅璇︽儏</el-button></div>
+ <div ref="operationRadarRef" class="chart-container"></div>
+ </el-card>
+ </el-col>
+ <el-col :span="8">
+ <el-card class="chart-card">
+ <div class="chart-title">寮傚父绫诲瀷缁熻瓒嬪娍<el-button type="text" class="view-btn">绛涢��</el-button></div>
+ <div ref="exceptionTrendRef" class="chart-container"></div>
+ </el-card>
+ </el-col>
+ </el-row>
+
+ <!-- 琛ㄦ牸鍖哄煙 -->
+ <el-row :gutter="20" class="table-row">
+ <el-col :span="12">
+ <el-card class="table-card">
+ <div class="table-title">璁㈠崟澶勭悊杩涘害<el-select v-model="orderType" placeholder="閫�璐у叆搴�"
+ style="width: 100px; margin-left: 10px;">
+ <el-option label="閫�璐у叆搴�" value="return"></el-option>
+ <el-option label="鏅�氬嚭搴�" value="normal"></el-option>
+ </el-select></div>
+ <el-table :data="orderList" border style="width: 100%;">
+ <el-table-column prop="orderNo" label="璁㈠崟鍙�" />
+ <el-table-column prop="type" label="绫诲瀷" />
+ <el-table-column prop="priority" label="浼樺厛绾�">
+ <template #default="scope">
+ <el-tag
+ :type="scope.row.priority === '绱ф��' ? 'danger' : scope.row.priority === '鍔犳��' ? 'warning' : 'success'">
+ {{ scope.row.priority }}
+ </el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column prop="progress" label="杩涘害">
+ <template #default="scope">
+ <el-progress :percentage="scope.row.progress" :color="scope.row.progressColor" />
+ </template>
+ </el-table-column>
+ </el-table>
+ <div class="table-pagination">
+ <el-button type="text">鍔犺浇鏇村璁㈠崟</el-button>
+ <el-pagination layout="prev, pager, next, jumper" :current-page="1" :total="50" />
+ </div>
+ </el-card>
+ </el-col>
+ <el-col :span="12">
+ <el-card class="table-card">
+ <div class="table-title">瀹炴椂浣滀笟鐩戞帶
+ <el-button-group class="btn-group">
+ <el-button type="primary" size="small">鍏ㄩ儴浣滀笟</el-button>
+ <el-button type="default" size="small">鍏ュ簱</el-button>
+ <el-button type="default" size="small">鍑哄簱</el-button>
+ <el-button type="default" size="small">鐩樼偣</el-button>
+ </el-button-group>
+ </div>
+ <el-table :data="operationList" border style="width: 100%;">
+ <el-table-column prop="opNo" label="浣滀笟鍗曞彿" />
+ <el-table-column prop="opType" label="浣滀笟绫诲瀷" />
+ <el-table-column prop="operator" label="鎿嶄綔浜哄憳" />
+ <el-table-column prop="startTime" label="寮�濮嬫椂闂�" />
+ <el-table-column prop="status" label="褰撳墠鐘舵��">
+ <template #default="scope">
+ <el-tag :type="scope.row.status === '澶勭悊涓�' ? 'info' : scope.row.status === '宸插畬鎴�' ? 'success' : 'danger'">
+ {{ scope.row.status }}
+ </el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔"><el-button type="text">璇︽儏</el-button></el-table-column>
+ </el-table>
+ <div class="table-pagination">
+ <el-pagination layout="prev, pager, next, jumper" :current-page="1" :total="50" />
+ </div>
+ </el-card>
+ </el-col>
+ </el-row>
+ </div>
+</template>
+
+<script setup>
+import { ref, onMounted, onUnmounted, nextTick } from 'vue';
+import * as echarts from 'echarts';
+
+// 鍝嶅簲寮忔暟鎹�
+const month = ref('month');
+const orderType = ref('return');
+
+// 妯℃嫙鏁版嵁
+const orderList = ref([
+ { orderNo: 'OD20251224001', type: '鏅�氬嚭搴�', priority: '绱ф��', progress: 60, progressColor: '#ff4d4f' },
+ { orderNo: 'OD20251224002', type: '閫�璐у叆搴�', priority: '鏅��', progress: 80, progressColor: '#1890ff' },
+ { orderNo: 'OD20251224003', type: '璋冩嫧璁㈠崟', priority: '鍔犳��', progress: 40, progressColor: '#faad14' },
+ { orderNo: 'OD20251224004', type: '鏅�氬嚭搴�', priority: '甯歌', progress: 100, progressColor: '#52c41a' }
+]);
+const operationList = ref([
+ { opNo: 'JW251224001', opType: '鍏ュ簱', operator: '寮犱笁', startTime: '15:30:22', status: '澶勭悊涓�' },
+ { opNo: 'CK251224002', opType: '鍑哄簱', operator: '鏉庡洓', startTime: '15:25:10', status: '宸插畬鎴�' },
+ { opNo: 'PD251224003', opType: '鐩樼偣', operator: '鐜嬩簲', startTime: '15:20:05', status: '寰呯‘璁�' },
+ { opNo: 'SC251224005', opType: '涓婃灦', operator: '瀛欎竷', startTime: '15:10:18', status: '寮傚父' }
+]);
+
+// 鍥捐〃瀹瑰櫒
+const inventoryPieRef = ref(null);
+const stockTrendRef = ref(null);
+const locationRateRef = ref(null);
+const operationRadarRef = ref(null);
+const exceptionTrendRef = ref(null);
+
+// 鍥捐〃瀹炰緥
+let inventoryPieChart = null;
+let stockTrendChart = null;
+let locationRateChart = null;
+let operationRadarChart = null;
+let exceptionTrendChart = null;
+
+// 鍒濆鍖栧簱瀛樺簱浣嶅垎甯冮ゼ鍥�
+const initInventoryPie = () => {
+ if (!inventoryPieRef.value) return;
+
+ if (inventoryPieChart) {
+ inventoryPieChart.dispose();
+ }
+
+ inventoryPieChart = echarts.init(inventoryPieRef.value);
+ const option = {
+ tooltip: {
+ trigger: 'item',
+ formatter: '{a} <br/>{b}: {c}%'
+ },
+ legend: {
+ bottom: 0,
+ left: 'center',
+ data: ['甯告俯鍖篈鍖�', '鍐疯棌鍖築鍖�', '淇濈◣鍖篊鍖�', '娈嬫鍝佸尯D鍖�']
+ },
+ series: [{
+ name: '搴撳瓨搴撲綅鍒嗗竷',
+ type: 'pie',
+ radius: ['40%', '70%'],
+ center: ['50%', '40%'],
+ avoidLabelOverlap: false,
+ itemStyle: {
+ borderRadius: 10,
+ borderColor: '#fff',
+ borderWidth: 2
+ },
+ label: {
+ show: false,
+ position: 'center'
+ },
+ emphasis: {
+ label: {
+ show: true,
+ fontSize: 20,
+ fontWeight: 'bold'
+ }
+ },
+ labelLine: {
+ show: false
+ },
+ data: [
+ { value: 48.7, name: '甯告俯鍖篈鍖�', itemStyle: { color: '#5470c6' } },
+ { value: 29.2, name: '鍐疯棌鍖築鍖�', itemStyle: { color: '#91cc75' } },
+ { value: 21.9, name: '淇濈◣鍖篊鍖�', itemStyle: { color: '#fac858' } },
+ { value: 2.2, name: '娈嬫鍝佸尯D鍖�', itemStyle: { color: '#ee6666' } }
+ ]
+ }]
+ };
+
+ inventoryPieChart.setOption(option);
+ return inventoryPieChart;
+};
+
+// 鍒濆鍖栬繎7鏃ュ嚭鍏ュ簱瓒嬪娍鍥�
+const initStockTrend = () => {
+ if (!stockTrendRef.value) return;
+
+ if (stockTrendChart) {
+ stockTrendChart.dispose();
+ }
+
+ stockTrendChart = echarts.init(stockTrendRef.value);
+ const option = {
+ tooltip: {
+ trigger: 'axis',
+ axisPointer: {
+ type: 'cross'
+ }
+ },
+ legend: {
+ data: ['鍏ュ簱閲�', '鍑哄簱閲�'],
+ top: 10
+ },
+ grid: {
+ left: '3%',
+ right: '4%',
+ bottom: '3%',
+ top: '15%',
+ containLabel: true
+ },
+ xAxis: {
+ type: 'category',
+ boundaryGap: true,
+ data: ['12-18', '12-19', '12-20', '12-21', '12-22', '12-23', '12-24']
+ },
+ yAxis: {
+ type: 'value',
+ name: '鏁伴噺锛堝崈浠讹級',
+ max: 25
+ },
+ series: [
+ {
+ name: '鍏ュ簱閲�',
+ type: 'bar',
+ barWidth: '30%',
+ data: [10, 12, 10, 12, 10, 12, 12],
+ itemStyle: { color: '#52c41a' }
+ },
+ {
+ name: '鍑哄簱閲�',
+ type: 'bar',
+ barWidth: '30%',
+ data: [16, 18, 14, 18, 16, 18, 20],
+ itemStyle: { color: '#1890ff' }
+ }
+ ]
+ };
+
+ stockTrendChart.setOption(option);
+ return stockTrendChart;
+};
+
+// 鍒濆鍖栧簱浣嶅埄鐢ㄧ巼鐜舰鍥�
+const initLocationRate = () => {
+ if (!locationRateRef.value) return;
+
+ if (locationRateChart) {
+ locationRateChart.dispose();
+ }
+
+ locationRateChart = echarts.init(locationRateRef.value);
+ const option = {
+ tooltip: {
+ formatter: '{a} <br/>{b} : {c}%'
+ },
+ series: [{
+ name: '搴撲綅鍒╃敤鐜�',
+ type: 'gauge',
+ min: 0,
+ max: 100,
+ splitNumber: 10,
+ radius: '90%',
+ center: ['50%', '55%'],
+ startAngle: 180,
+ endAngle: 0,
+ progress: {
+ show: true,
+ width: 20,
+ itemStyle: {
+ color: '#1890ff'
+ }
+ },
+ axisLine: {
+ lineStyle: {
+ width: 20,
+ color: [[1, 'rgba(200,200,200,0.3)']]
+ }
+ },
+ axisTick: {
+ distance: -30,
+ splitNumber: 5,
+ lineStyle: {
+ width: 2,
+ color: '#999'
+ }
+ },
+ splitLine: {
+ distance: -30,
+ length: 14,
+ lineStyle: {
+ width: 3,
+ color: '#999'
+ }
+ },
+ axisLabel: {
+ distance: -20,
+ color: '#999',
+ fontSize: 12
+ },
+ anchor: {
+ show: false
+ },
+ title: {
+ show: true,
+ offsetCenter: [0, '30%'],
+ fontSize: 16,
+ fontWeight: 'bold'
+ },
+ detail: {
+ valueAnimation: true,
+ formatter: '{value}%',
+ fontSize: 20,
+ fontWeight: 'bold',
+ offsetCenter: [0, '70%']
+ },
+ data: [{
+ value: 86.2,
+ name: '搴撲綅鍒╃敤鐜�'
+ }]
+ }]
+ };
+
+ locationRateChart.setOption(option);
+ return locationRateChart;
+};
+
+// 鍒濆鍖栦綔涓氱被鍨嬮浄杈惧浘
+const initOperationRadar = () => {
+ if (!operationRadarRef.value) return;
+
+ if (operationRadarChart) {
+ operationRadarChart.dispose();
+ }
+
+ operationRadarChart = echarts.init(operationRadarRef.value);
+ const option = {
+ tooltip: {
+ trigger: 'item'
+ },
+ legend: {
+ show: false
+ },
+ radar: {
+ indicator: [
+ { name: '鍑哄簱浣滀笟', max: 100 },
+ { name: '鍏ュ簱浣滀笟', max: 100 },
+ { name: '璋冩嫧浣滀笟', max: 100 },
+ { name: '鐩樼偣浣滀笟', max: 100 }
+ ],
+ shape: 'circle',
+ splitNumber: 5,
+ axisName: {
+ color: '#666'
+ },
+ splitLine: {
+ lineStyle: {
+ color: 'rgba(0,0,0,0.1)'
+ }
+ },
+ splitArea: {
+ show: true,
+ areaStyle: {
+ color: ['rgba(255,255,255,0.8)', 'rgba(200,200,200,0.2)']
+ }
+ }
+ },
+ series: [{
+ name: '浣滀笟绫诲瀷鍒嗗竷',
+ type: 'radar',
+ symbolSize: 8,
+ areaStyle: {
+ color: 'rgba(24,144,255,0.3)'
+ },
+ lineStyle: {
+ width: 2
+ },
+ itemStyle: {
+ color: '#1890ff'
+ },
+ data: [{
+ value: [45, 30, 15, 10],
+ name: '浣滀笟鍗犳瘮',
+ label: {
+ show: true,
+ formatter: function (params) {
+ return params.value + '%';
+ }
+ }
+ }]
+ }]
+ };
+
+ operationRadarChart.setOption(option);
+ return operationRadarChart;
+};
+
+// 鍒濆鍖栧紓甯歌秼鍔挎姌绾垮浘
+const initExceptionTrend = () => {
+ if (!exceptionTrendRef.value) return;
+
+ if (exceptionTrendChart) {
+ exceptionTrendChart.dispose();
+ }
+
+ exceptionTrendChart = echarts.init(exceptionTrendRef.value);
+ const option = {
+ tooltip: {
+ trigger: 'axis',
+ axisPointer: {
+ type: 'cross'
+ }
+ },
+ legend: {
+ data: ['搴撳瓨涓嶈冻', '璁㈠崟瓒呮椂', '搴撲綅寮傚父', '鐩樼偣宸紓'],
+ top: 10
+ },
+ grid: {
+ left: '3%',
+ right: '4%',
+ bottom: '3%',
+ top: '15%',
+ containLabel: true
+ },
+ xAxis: {
+ type: 'category',
+ boundaryGap: false,
+ data: ['12-18', '12-19', '12-20', '12-21', '12-22', '12-23', '12-24']
+ },
+ yAxis: {
+ type: 'value',
+ name: '寮傚父鏁伴噺'
+ },
+ series: [
+ {
+ name: '搴撳瓨涓嶈冻',
+ type: 'line',
+ smooth: true,
+ symbol: 'circle',
+ symbolSize: 8,
+ data: [10, 11, 9, 12, 10, 13, 12],
+ itemStyle: { color: '#ff4d4f' },
+ lineStyle: {
+ width: 3
+ }
+ },
+ {
+ name: '璁㈠崟瓒呮椂',
+ type: 'line',
+ smooth: true,
+ symbol: 'circle',
+ symbolSize: 8,
+ data: [8, 9, 7, 8, 7, 9, 8],
+ itemStyle: { color: '#faad14' },
+ lineStyle: {
+ width: 3
+ }
+ },
+ {
+ name: '搴撲綅寮傚父',
+ type: 'line',
+ smooth: true,
+ symbol: 'circle',
+ symbolSize: 8,
+ data: [4, 5, 2, 4, 3, 5, 4],
+ itemStyle: { color: '#722ed1' },
+ lineStyle: {
+ width: 3
+ }
+ },
+ {
+ name: '鐩樼偣宸紓',
+ type: 'line',
+ smooth: true,
+ symbol: 'circle',
+ symbolSize: 8,
+ data: [2, 3, 1, 2, 1, 3, 2],
+ itemStyle: { color: '#13c2c2' },
+ lineStyle: {
+ width: 3
+ }
+ }
+ ]
+ };
+
+ exceptionTrendChart.setOption(option);
+ return exceptionTrendChart;
+};
+
+// 鍒锋柊鎵�鏈夊浘琛�
+const refreshCharts = () => {
+ const charts = [
+ initInventoryPie,
+ initStockTrend,
+ initLocationRate,
+ initOperationRadar,
+ initExceptionTrend
+ ];
+
+ charts.forEach(initFunc => {
+ const chart = initFunc();
+ if (chart) {
+ chart.resize();
+ }
+ });
+};
+
+// 鐩戝惉绐楀彛澶у皬鍙樺寲
+const handleResize = () => {
+ const charts = [
+ inventoryPieChart,
+ stockTrendChart,
+ locationRateChart,
+ operationRadarChart,
+ exceptionTrendChart
+ ];
+
+ charts.forEach(chart => {
+ if (chart) {
+ chart.resize();
+ }
+ });
+};
+
+// 鎸傝浇鍚庡垵濮嬪寲鍥捐〃
+onMounted(() => {
+ nextTick(() => {
+ initInventoryPie();
+ initStockTrend();
+ initLocationRate();
+ initOperationRadar();
+ initExceptionTrend();
+
+ window.addEventListener('resize', handleResize);
+ });
+});
+
+// 缁勪欢鍗歌浇鏃舵竻鐞�
+onUnmounted(() => {
+ const charts = [
+ inventoryPieChart,
+ stockTrendChart,
+ locationRateChart,
+ operationRadarChart,
+ exceptionTrendChart
+ ];
+
+ charts.forEach(chart => {
+ if (chart) {
+ chart.dispose();
+ }
+ });
+
+ window.removeEventListener('resize', handleResize);
+});
+</script>
+
+<style scoped>
+.wms-dashboard {
+ padding: 20px;
+ background: #f5f7fa;
+ min-height: 100vh;
+ box-sizing: border-box;
+}
+
+.header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 20px;
+ background: white;
+ padding: 15px 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
+}
+
+.stats-card-row,
+.chart-row,
+.table-row {
+ margin-bottom: 20px;
+}
+
+.stats-card {
+ height: 120px;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ padding: 0 20px;
+ transition: all 0.3s ease;
+}
+
+.stats-card:hover {
+ transform: translateY(-2px);
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
+}
+
+.card-title {
+ font-size: 14px;
+ color: #666;
+ margin-bottom: 8px;
+}
+
+.card-value {
+ font-size: 28px;
+ font-weight: bold;
+ margin: 8px 0 4px;
+ color: #333;
+}
+
+.card-change {
+ margin-top: 8px;
+}
+
+.chart-card {
+ height: 320px;
+ padding: 15px;
+ display: flex;
+ flex-direction: column;
+}
+
+.chart-container {
+ width: 100%;
+ height: 100%;
+ min-height: 250px;
+ flex: 1;
+}
+
+.chart-title,
+.table-title {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 15px;
+ font-size: 16px;
+ font-weight: bold;
+ color: #333;
+}
+
+.view-btn {
+ font-size: 12px;
+}
+
+.table-pagination {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-top: 15px;
+}
+
+.btn-group {
+ margin-left: 10px;
+}
+
+/* 纭繚鍥捐〃瀹瑰櫒鏈夋槑纭昂瀵� */
+:deep(.el-card__body) {
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+}
+</style>
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/inbound/takeStockOrder.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/inbound/takeStockOrder.vue"
new file mode 100644
index 0000000..88f8af2
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/inbound/takeStockOrder.vue"
@@ -0,0 +1,291 @@
+
+<template>
+ <!-- <div>
+ <assemble-dist></assemble-dist>
+ </div> -->
+ <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/inbound/takeStockOrder.js";
+ import { ref, defineComponent } from "vue";
+ // import AssembleDistVue from '../charts/AssembleDist.vue';
+ export default defineComponent({
+ // components: {
+ // 'assemble-dist': AssembleDistVue,
+ // },
+ setup() {
+ //浣跨敤缁勪欢AssembleDist
+ const table = ref({
+ key: "id",
+ footer: "Foots",
+ cnName: "鐩樼偣鍗�",
+ name: "takeStockOrder",
+ url: "/TakeStockOrder/",
+ sortName: "id",
+ });
+
+ const searchFormFields = ref({
+ orderNo:""
+ });
+ const searchFormOptions = ref([
+ [
+ { title: "鍗曟嵁缂栧彿", field: "orderNo", type: "like" },
+ ]
+ ]);
+
+ const editFormFields = ref({
+ orderNo:"",
+ warehouseId: "",
+ remark:""
+ });
+ const editFormOptions = ref([
+ [
+ {
+ field: "orderNo",
+ title: "鍗曟嵁缂栧彿",
+ type: "string",
+ readonly: "true",
+ },
+ {
+ title: "浠撳簱",
+ field: "warehouseId",
+ type: "select",
+ dataKey: "warehouses",
+ data: [],
+ required: true,
+ },
+ {
+ field: "remark",
+ title: "澶囨敞",
+ type: "string",
+ }
+ ]
+ ]);
+ const columns = ref([
+ {
+ field: "id",
+ title: "Id",
+ type: "int",
+ width: 90,
+ hidden: true,
+ readonly: true,
+ require: true,
+ align: "left",
+ },
+ {
+ field: "orderNo",
+ title: "鐩樼偣鍗曞彿",
+ type: "string",
+ width: 150,
+ align: "left",
+ },
+ {
+ field: "takeStockStatus",
+ title: "鐩樼偣鐘舵��",
+ type: "string",
+ width: 120,
+ align: "left",
+ bind: { key: "takeStockStatusEnum", data: [] },
+ },
+ {
+ field: "allPalletCode",
+ title: "鍗曟嵁鐩樼偣鎵樼洏",
+ type: "string",
+ width: 600,
+ align: "left",
+ },
+ {
+ 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: "鐩樼偣鏄庣粏",
+ table: "Dt_TakeStockOrderDetail",
+ columns: [
+ {
+ field: "id",
+ title: "Id",
+ type: "int",
+ width: 90,
+ hidden: true,
+ readonly: true,
+ require: true,
+ align: "left",
+ },
+ {
+ field: "takeStockId",
+ title: "鐩樼偣鍗曚富閿�",
+ type: "string",
+ width: 90,
+ align: "left",
+ hidden: true,
+ },
+ {
+ field: "takePalletCode",
+ title: "鐩樼偣鎵樼洏",
+ type: "string",
+ width: 150,
+ align: "left",
+ required: true,
+ },
+ {
+ field: "takeDetalStatus",
+ title: "鐩樼偣鏄庣粏鐘舵��",
+ type: "int",
+ width: 130,
+ align: "left",
+ bind: { key: "takeStockDetailStatusEnum", data: [] },
+ },
+ {
+ field: "materielCode",
+ title: "鐗╂枡缂栫爜",
+ type: "string",
+ width: 110,
+ align: "left",
+ required: true,
+ },
+ {
+ field: "materielName",
+ title: "鐗╂枡鍚嶇О",
+ type: "string",
+ width: 120,
+ align: "left",
+ required: true,
+ },
+ {
+ field: "batchNo",
+ title: "鎵规鍙�",
+ type: "string",
+ width: 130,
+ align: "left",
+ required: true,
+ },
+ {
+ field: "materielSpec",
+ title: "鐗╂枡鍚嶇О",
+ type: "string",
+ width: 120,
+ align: "left",
+ required: true,
+ },
+ {
+ field: "sysQty",
+ title: "璐﹂潰鏁伴噺",
+ type: "decimal",
+ width: 90,
+ align: "left",
+ required: true,
+ edit: { type: "decimal" }
+ },
+ {
+ field: "qty",
+ title: "瀹炵洏鏁伴噺",
+ type: "decimal",
+ width: 90,
+ align: "left",
+ required: true,
+ edit: { type: "decimal" }
+ },
+ {
+ field: "unit",
+ title: "鍗曚綅",
+ type: "string",
+ width: 90,
+ align: "left",
+ },
+ {
+ 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",
+ },
+ ],
+ sortName: "id",
+ key: "id",
+ });
+ 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/WIDESEA_WMSClient/src/views/inbound/takeStockOrderDetail.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/inbound/takeStockOrderDetail.vue"
new file mode 100644
index 0000000..28acfed
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/inbound/takeStockOrderDetail.vue"
@@ -0,0 +1,254 @@
+
+<template>
+ <!-- <div>
+ <assemble-dist></assemble-dist>
+ </div> -->
+ <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/inbound/takeStockOrderDetail.js";
+ import { ref, defineComponent } from "vue";
+ // import AssembleDistVue from '../charts/AssembleDist.vue';
+ export default defineComponent({
+ // components: {
+ // 'assemble-dist': AssembleDistVue,
+ // },
+ setup() {
+ //浣跨敤缁勪欢AssembleDist
+ const table = ref({
+ key: "id",
+ footer: "Foots",
+ cnName: "鐩樼偣鍗�",
+ name: "TakeStockOrderDetail",
+ url: "/TakeStockOrderDetail/",
+ sortName: "id",
+ });
+
+ const searchFormFields = ref({
+ orderNo:""
+ });
+ const searchFormOptions = ref([
+ [
+ { title: "鐩樼偣鍗曟嵁", field: "takeStockNo", type: "like" },
+ { title: "鐩樼偣鏂欑", field: "takePalletCode", type: "like" },
+ { title: "鐗╂枡缂栧彿", field: "materielCode", type: "like" },
+ { title: "鎵规鍙�", field: "batchNo", type: "like" },
+
+ ],
+ [
+ { title: "鏉$爜", field: "barcode", type: "like" },
+ { title: "浠撳簱", field: "warehouseCode", type: "like" },
+ { title: "鍘傚尯", field: "factoryArea", type: "like" },
+ { title: "渚涘簲鍟嗙紪鍙�", field: "supplyCode", type: "like" },
+ ],
+ [
+ { title: "鍒涘缓浜�", field: "creater", type: "like" },
+ { title: "鍒涘缓鏃堕棿", field: "createDate", type: "datetime" },
+ ]
+ ]);
+
+ const editFormFields = ref({
+ orderNo:"",
+ warehouseId: "",
+ remark:""
+ });
+ const editFormOptions = ref([
+ [
+ {
+ field: "orderNo",
+ title: "鍗曟嵁缂栧彿",
+ type: "string",
+ readonly: "true",
+ },
+ {
+ title: "浠撳簱",
+ field: "warehouseId",
+ type: "select",
+ dataKey: "warehouses",
+ data: [],
+ required: true,
+ },
+ {
+ field: "remark",
+ title: "澶囨敞",
+ type: "string",
+ }
+ ]
+ ]);
+ const columns = ref([
+ {
+ field: "id",
+ title: "Id",
+ type: "int",
+ width: 90,
+ hidden: true,
+ readonly: true,
+ require: true,
+ align: "left",
+ },
+ {
+ field: "takeStockId",
+ title: "鐩樼偣鍗曚富閿�",
+ type: "string",
+ width: 90,
+ align: "left",
+ hidden: true,
+ },
+ {
+ field: "takeStockNo",
+ title: "鐩樼偣鍗曟嵁",
+ type: "string",
+ width: 145,
+ align: "left",
+ },
+ {
+ field: "takePalletCode",
+ title: "鐩樼偣鏂欑",
+ type: "string",
+ width: 110,
+ align: "left",
+ required: true,
+ },
+
+ {
+ field: "materielCode",
+ title: "鐗╂枡缂栫爜",
+ type: "string",
+ width: 130,
+ align: "left",
+ required: true,
+ },
+ {
+ field: "materielName",
+ title: "鐗╂枡鍚嶇О",
+ type: "string",
+ width: 120,
+ align: "left",
+ required: true,
+ },
+ {
+ field: "batchNo",
+ title: "鎵规鍙�",
+ type: "string",
+ width: 130,
+ align: "left",
+ required: true,
+ },
+ {
+ field: "barcode",
+ title: "鏉$爜",
+ type: "string",
+ width: 120,
+ align: "left",
+ required: true,
+ },
+ {
+ field: "sysQty",
+ title: "璐﹂潰鏁伴噺",
+ type: "decimal",
+ width: 90,
+ align: "left",
+ required: true,
+ edit: { type: "decimal" }
+ },
+ {
+ field: "qty",
+ title: "瀹炵洏鏁伴噺",
+ type: "decimal",
+ width: 90,
+ align: "left",
+ required: true,
+ edit: { type: "decimal" }
+ },
+ {
+ field: "unit",
+ title: "鍗曚綅",
+ type: "string",
+ width: 90,
+ align: "left",
+ },
+ {
+ field: "takeDetalStatus",
+ title: "鐩樼偣鏄庣粏鐘舵��",
+ type: "int",
+ width: 130,
+ align: "left",
+ bind: { key: "takeStockDetailStatusEnum", data: [] },
+ },
+ {
+ field: "warehouseCode",
+ title: "浠撳簱缂栧彿",
+ type: "string",
+ width: 90,
+ align: "left",
+ },
+ {
+ field: "factoryArea",
+ title: "鍘傚尯",
+ type: "string",
+ width: 90,
+ align: "left",
+ },
+ {
+ field: "supplyCode",
+ title: "渚涘簲鍟嗙紪鍙�",
+ type: "string",
+ width: 90,
+ align: "left",
+ },
+ {
+ field: "creater",
+ title: "鍒涘缓浜�",
+ type: "string",
+ width: 90,
+ align: "left",
+ },
+ {
+ field: "createDate",
+ title: "鍒涘缓鏃堕棿",
+ type: "datetime",
+ width: 160,
+ align: "left",
+ },
+ {
+ field: "remark",
+ title: "澶囨敞",
+ type: "string",
+ width: 100,
+ align: "left",
+ },
+ ]);
+ const detail = ref({
+ cnName: "鐩樼偣鏄庣粏",
+ table: "Dt_TakeStockOrderDetail",
+ columns: [
+
+ ],
+ sortName: "id",
+ key: "id",
+ });
+ 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/WIDESEA_WMSClient/src/views/outbound/allocateoutboundOrder.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/outbound/allocateoutboundOrder.vue"
index 5e5f89d..2a9ad08 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/outbound/allocateoutboundOrder.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/outbound/allocateoutboundOrder.vue"
@@ -1,39 +1,15 @@
<template>
- <view-grid
- ref="grid"
- @openOutboundDialog="handleOpenOutboundDialog"
- :columns="columns"
- :detail="detail"
- :editFormFields="editFormFields"
- :editFormOptions="editFormOptions"
- :searchFormFields="searchFormFields"
- :searchFormOptions="searchFormOptions"
- :table="table"
- :extend="extend"
- >
+ <view-grid ref="grid" @openOutboundDialog="handleOpenOutboundDialog" :columns="columns" :detail="detail"
+ :editFormFields="editFormFields" :editFormOptions="editFormOptions" :searchFormFields="searchFormFields"
+ :searchFormOptions="searchFormOptions" :table="table" :extend="extend">
</view-grid>
- <!-- 鍑哄簱鎿嶄綔寮圭獥 -->
- <OutboundDialog
- v-model:visible="outboundVisible"
- :selected-document="selectedOutboundDocument"
- @outbound-success="handleOutboundSuccess"
- ></OutboundDialog>
</template>
- <script>
+<script>
import extend from "@/extension/outbound/allocateoutboundOrder.js";
-import ViewGrid from '@/components/basic/ViewGrid/ViewGrid.vue';
import { ref, defineComponent } from "vue";
-import { ElMessage } from "element-plus";
-import OutboundDialog from "@/extension/outbound/extend/OutBound.vue"; // 寮曞叆鍑哄簱寮圭獥缁勪欢
-
export default defineComponent({
- components: {
- // 鍏抽敭淇2锛氱粍浠舵敞鍐屽悕涓庢ā鏉挎爣绛惧悕閫傞厤锛坘ebab-case瀵瑰簲view-grid锛�
- viewGrid: ViewGrid, // 娉ㄥ唽涓簁ebab-case锛屾ā鏉跨敤<view-grid>
- OutboundDialog // 娉ㄥ唽鍑哄簱寮圭獥缁勪欢
- },
setup() {
const table = ref({
key: "id",
@@ -45,11 +21,11 @@
});
const editFormFields = ref({
orderType: "",
- orderNo:"",
+ orderNo: "",
upperOrderNo: "",
orderStatus: "",
remark: "",
- warehouseId:""
+ warehouseId: ""
});
const editFormOptions = ref([
[
@@ -62,11 +38,11 @@
data: [],
},
{
- field: "orderNo",
- title: "鍗曟嵁缂栧彿",
- type: "string",
- readonly:true
- },
+ field: "orderNo",
+ title: "鍗曟嵁缂栧彿",
+ type: "string",
+ readonly: true
+ },
{
title: "涓婃父鍗曟嵁缂栧彿",
field: "upperOrderNo",
@@ -220,7 +196,7 @@
type: "string",
width: 120,
align: "left",
- hidden:true
+ hidden: true
},
{
field: "departmentName",
@@ -401,41 +377,41 @@
sortName: "id",
key: "id",
});
- // 璋冩嫧寮圭獥鐩稿叧
- const outboundVisible = ref(false);
- const selectedOutboundDocument = ref({}); // 瀛樺偍閫変腑鐨勮皟鎷ㄥ崟鏁版嵁
+ // 璋冩嫧寮圭獥鐩稿叧
+ // const outboundVisible = ref(false);
+ // const selectedOutboundDocument = ref({}); // 瀛樺偍閫変腑鐨勮皟鎷ㄥ崟鏁版嵁
- // 鎵撳紑璋冩嫧寮圭獥锛堜粠鎵╁睍閰嶇疆鐨勬寜閽簨浠惰Е鍙戯級
- const handleOpenOutboundDialog = (docData) => {
- selectedOutboundDocument.value = docData; // 淇濆瓨閫変腑鐨勫崟鎹暟鎹�
- outboundVisible.value = true; // 鏄剧ず寮圭獥
- };
+ // // 鎵撳紑璋冩嫧寮圭獥锛堜粠鎵╁睍閰嶇疆鐨勬寜閽簨浠惰Е鍙戯級
+ // const handleOpenOutboundDialog = (docData) => {
+ // selectedOutboundDocument.value = docData; // 淇濆瓨閫変腑鐨勫崟鎹暟鎹�
+ // outboundVisible.value = true; // 鏄剧ず寮圭獥
+ // };
- // 璋冩嫧鎴愬姛鍚庣殑鍥炶皟
- const handleOutboundSuccess = (docNo) => {
- ElMessage.success(`鍗曟嵁 ${docNo} 璋冩嫧鎴愬姛`);
- gridRef.value?.refresh(); // 鍒锋柊琛ㄦ牸鏁版嵁
- };
+ // // 璋冩嫧鎴愬姛鍚庣殑鍥炶皟
+ // const handleOutboundSuccess = (docNo) => {
+ // ElMessage.success(`鍗曟嵁 ${docNo} 璋冩嫧鎴愬姛`);
+ // gridRef.value?.refresh(); // 鍒锋柊琛ㄦ牸鏁版嵁
+ // };
- // 鍒濆鍖栨墿灞曢厤缃細涓鸿皟鎷ㄦ寜閽坊鍔犱簨浠惰Е鍙戦�昏緫
- const initExtension = () => {
- // 鎵惧埌"璋冩嫧"鎸夐挳骞剁粦瀹氭墦寮�寮圭獥鐨勯�昏緫
- const outboundBtn = extend.buttons.view.find(btn => btn.name === '鍑哄簱');
- if (outboundBtn) {
- const originalOnClick = outboundBtn.onClick;
- outboundBtn.onClick = function() {
- // 鍏堟墽琛屽師鏈夋牎楠岄�昏緫
- const selectedRows = this.$refs.table.getSelected();
- if (selectedRows.length === 1) {
- // 鏍¢獙閫氳繃鍚庯紝瑙﹀彂涓荤粍浠剁殑鍑哄簱寮圭獥浜嬩欢
- this.$emit('openOutboundDialog', selectedRows[0]);
- } else {
- // 鍘熸湁閫昏緫宸插鐞嗘彁绀猴紝鏃犻渶閲嶅
- originalOnClick.call(this);
- }
- };
- }
- };
+ // // 鍒濆鍖栨墿灞曢厤缃細涓鸿皟鎷ㄦ寜閽坊鍔犱簨浠惰Е鍙戦�昏緫
+ // const initExtension = () => {
+ // // 鎵惧埌"璋冩嫧"鎸夐挳骞剁粦瀹氭墦寮�寮圭獥鐨勯�昏緫
+ // const outboundBtn = extend.buttons.view.find(btn => btn.name === '鍑哄簱');
+ // if (outboundBtn) {
+ // const originalOnClick = outboundBtn.onClick;
+ // outboundBtn.onClick = function () {
+ // // 鍏堟墽琛屽師鏈夋牎楠岄�昏緫
+ // const selectedRows = this.$refs.table.getSelected();
+ // if (selectedRows.length === 1) {
+ // // 鏍¢獙閫氳繃鍚庯紝瑙﹀彂涓荤粍浠剁殑鍑哄簱寮圭獥浜嬩欢
+ // this.$emit('openOutboundDialog', selectedRows[0]);
+ // } else {
+ // // 鍘熸湁閫昏緫宸插鐞嗘彁绀猴紝鏃犻渶閲嶅
+ // originalOnClick.call(this);
+ // }
+ // };
+ // }
+ // };
return {
table,
extend,
@@ -445,11 +421,11 @@
searchFormOptions,
columns,
detail,
- // 鍑哄簱鐩稿叧
- outboundVisible,
- selectedOutboundDocument,
- handleOpenOutboundDialog,
- handleOutboundSuccess
+ // 鍑哄簱鐩稿叧
+ // outboundVisible,
+ // selectedOutboundDocument,
+ // handleOpenOutboundDialog,
+ // handleOutboundSuccess
};
},
});
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue"
index 99010c3..5db27f5 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue"
@@ -1,39 +1,16 @@
<template>
- <view-grid
- ref="grid"
- @openOutboundDialog="handleOpenOutboundDialog"
- :columns="columns"
- :detail="detail"
- :editFormFields="editFormFields"
- :editFormOptions="editFormOptions"
- :searchFormFields="searchFormFields"
- :searchFormOptions="searchFormOptions"
- :table="table"
- :extend="extend"
- >
+ <view-grid ref="grid" @openOutboundDialog="handleOpenOutboundDialog" :columns="columns" :detail="detail"
+ :editFormFields="editFormFields" :editFormOptions="editFormOptions" :searchFormFields="searchFormFields"
+ :searchFormOptions="searchFormOptions" :table="table" :extend="extend">
</view-grid>
- <!-- 鍑哄簱鎿嶄綔寮圭獥 -->
- <OutboundDialog
- v-model:visible="outboundVisible"
- :selected-document="selectedOutboundDocument"
- @outbound-success="handleOutboundSuccess"
- ></OutboundDialog>
</template>
- <script>
+<script>
import extend from "@/extension/outbound/outboundOrder.js";
-import ViewGrid from '@/components/basic/ViewGrid/ViewGrid.vue';
import { ref, defineComponent } from "vue";
-import { ElMessage } from "element-plus";
-import OutboundDialog from "@/extension/outbound/extend/OutBound.vue"; // 寮曞叆鍑哄簱寮圭獥缁勪欢
-
export default defineComponent({
- components: {
- // 鍏抽敭淇2锛氱粍浠舵敞鍐屽悕涓庢ā鏉挎爣绛惧悕閫傞厤锛坘ebab-case瀵瑰簲view-grid锛�
- viewGrid: ViewGrid, // 娉ㄥ唽涓簁ebab-case锛屾ā鏉跨敤<view-grid>
- OutboundDialog // 娉ㄥ唽鍑哄簱寮圭獥缁勪欢
- },
+
setup() {
const table = ref({
key: "id",
@@ -45,20 +22,20 @@
});
const editFormFields = ref({
orderType: "",
- orderNo:"",
+ orderNo: "",
upperOrderNo: "",
orderStatus: "",
remark: "",
- warehouseId:""
+ warehouseId: ""
});
const editFormOptions = ref([
[
{
- field: "orderNo",
- title: "鍗曟嵁缂栧彿",
- type: "string",
- readonly:true
- },
+ field: "orderNo",
+ title: "鍗曟嵁缂栧彿",
+ type: "string",
+ readonly: true
+ },
{
title: "涓婃父鍗曟嵁缂栧彿",
field: "upperOrderNo",
@@ -104,9 +81,9 @@
title: "鎿嶄綔鑰�",
field: "operator",
type: "string",
- hidden:true,
+ hidden: true,
readonly: true,
-
+
},
],
]);
@@ -182,7 +159,7 @@
width: 150,
align: "left",
bind: { key: "outOrderType", data: [] },
- hidden:true
+ hidden: true
},
{
field: "businessType",
@@ -219,7 +196,7 @@
field: "returnToMESStatus",
title: "鍥炰紶MES鐘舵��",
width: 120,
- bind: { key: "createType", data:[{key:0, value:"鏈洖浼�"},{key:1, value:"宸插洖浼犳垚鍔�"},{key:2, value:"鍥炰紶澶辫触"}]},
+ bind: { key: "createType", data: [{ key: 0, value: "鏈洖浼�" }, { key: 1, value: "宸插洖浼犳垚鍔�" }, { key: 2, value: "鍥炰紶澶辫触" }] },
},
{
field: "factoryArea",
@@ -234,7 +211,7 @@
type: "string",
width: 120,
align: "left",
- hidden:true
+ hidden: true
},
{
field: "departmentName",
@@ -350,7 +327,7 @@
width: 90,
align: "left",
edit: { type: "number" },
- readonly:true
+ readonly: true
},
{
field: "rowNo",
@@ -359,7 +336,7 @@
width: 90,
align: "left",
edit: { type: "number" },
- readonly:true
+ readonly: true
},
{
field: "lockQuantity",
@@ -383,7 +360,7 @@
align: "left",
edit: { type: "select" },
bind: { key: "orderDetailStatusEnum", data: [] },
- readonly:true
+ readonly: true
},
{
field: "creater",
@@ -424,41 +401,6 @@
sortName: "id",
key: "id",
});
- // 鍑哄簱寮圭獥鐩稿叧
- const outboundVisible = ref(false);
- const selectedOutboundDocument = ref({}); // 瀛樺偍閫変腑鐨勫嚭搴撳崟鏁版嵁
-
- // 鎵撳紑鍑哄簱寮圭獥锛堜粠鎵╁睍閰嶇疆鐨勬寜閽簨浠惰Е鍙戯級
- const handleOpenOutboundDialog = (docData) => {
- selectedOutboundDocument.value = docData; // 淇濆瓨閫変腑鐨勫崟鎹暟鎹�
- outboundVisible.value = true; // 鏄剧ず寮圭獥
- };
-
- // 鍑哄簱鎴愬姛鍚庣殑鍥炶皟
- const handleOutboundSuccess = (docNo) => {
- ElMessage.success(`鍗曟嵁 ${docNo} 鍑哄簱鎴愬姛`);
- gridRef.value?.refresh(); // 鍒锋柊琛ㄦ牸鏁版嵁
- };
-
- // 鍒濆鍖栨墿灞曢厤缃細涓哄嚭搴撴寜閽坊鍔犱簨浠惰Е鍙戦�昏緫
- const initExtension = () => {
- // 鎵惧埌"鍑哄簱"鎸夐挳骞剁粦瀹氭墦寮�寮圭獥鐨勯�昏緫
- const outboundBtn = extend.buttons.view.find(btn => btn.name === '鍑哄簱');
- if (outboundBtn) {
- const originalOnClick = outboundBtn.onClick;
- outboundBtn.onClick = function() {
- // 鍏堟墽琛屽師鏈夋牎楠岄�昏緫
- const selectedRows = this.$refs.table.getSelected();
- if (selectedRows.length === 1) {
- // 鏍¢獙閫氳繃鍚庯紝瑙﹀彂涓荤粍浠剁殑鍑哄簱寮圭獥浜嬩欢
- this.$emit('openOutboundDialog', selectedRows[0]);
- } else {
- // 鍘熸湁閫昏緫宸插鐞嗘彁绀猴紝鏃犻渶閲嶅
- originalOnClick.call(this);
- }
- };
- }
- };
return {
table,
extend,
@@ -468,11 +410,6 @@
searchFormOptions,
columns,
detail,
- // 鍑哄簱鐩稿叧
- outboundVisible,
- selectedOutboundDocument,
- handleOpenOutboundDialog,
- handleOutboundSuccess
};
},
});
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/record/stockQuantityChangeRecord.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/record/stockQuantityChangeRecord.vue"
index 7e8e7dd..2e9884a 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/record/stockQuantityChangeRecord.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/record/stockQuantityChangeRecord.vue"
@@ -1,225 +1,237 @@
<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/record/stockQuantityChangeRecord.js";
- import { ref, defineComponent } from "vue";
- export default defineComponent({
- setup() {
- const table = ref({
- key: "id",
- footer: "Foots",
- cnName: "搴撳瓨鍙樺姩淇℃伅璁板綍",
- name: "stockQuantityChangeRecord",
- url: "/StockQuantityChangeRecord/",
- sortName: "id",
- });
- const editFormFields = ref({
-
- });
- const editFormOptions = ref([
-
- ]);
- const searchFormFields = ref({
- palleCode: "",
- materielCode: "",
- orderNo: "",
- });
- const searchFormOptions = ref([
- [
- { title: "鎵樼洏鍙�", field: "palleCode" ,type:"like"},
- { title: "鐗╂枡缂栧彿", field: "materielCode",type:"like" },
- { title: "鍗曟嵁缂栧彿", field: "orderNo" ,type:"like"},
- { title: "鍙樺姩绫诲瀷", field: "changeType" ,type: "selectList",dataKey: "stockChangeType",data: [],},
- ],
- [
- { title: "鎵规鍙�", field: "batchNo" ,type:"like"},
- { title: "浠诲姟鍙�", field: "taskNum" ,type:"like"},
- { title: "搴忓垪鍙�", field: "serilNumber" ,type:"like"},
- ],
- ]);
- const columns = ref([
- {
- field: "id",
- title: "Id",
- type: "int",
- width: 90,
- hidden: true,
- readonly: true,
- require: true,
- align: "left",
- },
- {
- field: "stockDetailId",
- title: "搴撳瓨鏄庣粏ID",
- type: "string",
- width: 90,
- align: "left",
- },
- {
- field: "palleCode",
- title: "鎵樼洏缂栧彿",
- type: "string",
- width: 150,
- align: "left",
- },
- {
- field: "materielCode",
- title: "鐗╂枡缂栧彿",
- type: "string",
- width: 150,
- align: "left",
- },
- {
- field: "materielName",
- title: "鐗╂枡鍚嶇О",
- type: "decimal",
- width: 90,
- align: "left",
- },
- {
- field: "barcode",
- title: "鏉$爜",
- type: "string",
- width: 150,
- align: "left",
- },
- {
- field: "batchNo",
- title: "鎵规鍙�",
- type: "string",
- width: 90,
- align: "left",
- },
- {
- field: "serilNumber",
- title: "搴忓垪鍙�",
- type: "int",
- width: 280,
- align: "left",
- },
- {
- field: "orderNo",
- title: "鍗曟嵁缂栧彿",
- type: "string",
- width: 150,
- align: "left",
- },
- {
- field: "taskNum",
- title: "浠诲姟鍙�",
- type: "string",
- width: 90,
- align: "left",
- },
- {
- field: "changeType",
- title: "鍙樺姩绫诲瀷",
- type: "int",
- width: 120,
- align: "left",
- bind: { key: "stockChangeType", data: [] },
- },
- {
- field: "changeQuantity",
- title: "鍙樺姩鏁伴噺",
- type: "string",
- width: 100,
- align: "left",
- },
- {
- field: "beforeQuantity",
- title: "鍙樺姩鍓嶅簱瀛橀噺",
- type: "string",
- width: 100,
- align: "left",
- },
- {
- field: "afterQuantity",
- title: "鍙樺姩鍚庡簱瀛橀噺",
- type: "string",
- width: 100,
- align: "left",
- },
- {
- 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: "orderId",
- title: "鍗曟嵁涓婚敭",
- type: "string",
- width: 180,
- align: "left",
- },
- {
- field: "orderDetailId",
- title: "鍗曟嵁鏄庣粏涓婚敭",
- type: "string",
- width: 120,
- 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>
+ <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/record/stockQuantityChangeRecord.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+ setup() {
+ const table = ref({
+ key: "id",
+ footer: "Foots",
+ cnName: "搴撳瓨鍙樺姩淇℃伅璁板綍",
+ name: "stockQuantityChangeRecord",
+ url: "/StockQuantityChangeRecord/",
+ sortName: "id",
+ });
+ const editFormFields = ref({
+
+ });
+ const editFormOptions = ref([
+
+ ]);
+ const searchFormFields = ref({
+ palleCode: "",
+ materielCode: "",
+ orderNo: "",
+ });
+ const searchFormOptions = ref([
+ [
+ { title: "鎵樼洏鍙�", field: "palleCode", type: "like" },
+ { title: "鐗╂枡缂栧彿", field: "materielCode", type: "like" },
+ { title: "鍗曟嵁缂栧彿", field: "orderNo", type: "like" },
+ // { title: "鍙樺姩绫诲瀷", field: "changeType", type: "selectList", dataKey: "stockChangeType", data: [], },
+ ],
+ [
+ { title: "鍘熸潯鐮�", field: "originalSerilNumber", type: "like" },
+ { title: "浠诲姟鍙�", field: "taskNum", type: "like" },
+ { title: "鎵规鍙�", field: "batchNo", type: "like" },
+ ],
+ ]);
+ const columns = ref([
+ {
+ field: "id",
+ title: "Id",
+ type: "int",
+ width: 90,
+ hidden: true,
+ readonly: true,
+ require: true,
+ align: "left",
+ },
+ {
+ field: "stockDetailId",
+ title: "搴撳瓨鏄庣粏ID",
+ type: "string",
+ width: 90,
+ align: "left",
+ }, {
+ field: "taskNum",
+ title: "浠诲姟鍙�",
+ type: "string",
+ width: 70,
+ align: "left",
+ },
+ {
+ field: "palleCode",
+ title: "鎵樼洏缂栧彿",
+ type: "string",
+ width: 120,
+ align: "left",
+ },
+ {
+ field: "materielCode",
+ title: "鐗╂枡缂栧彿",
+ type: "string",
+ width: 150,
+ align: "left",
+ },
+ // {
+ // field: "materielName",
+ // title: "鐗╂枡鍚嶇О",
+ // type: "decimal",
+ // width: 90,
+ // align: "left",
+ // },
+ {
+ field: "originalSerilNumber",
+ title: "鍘熸潯鐮�",
+ type: "string",
+ width: 180,
+ align: "left",
+ },
+ {
+ field: "newSerilNumber",
+ title: "鏂版潯鐮�",
+ type: "string",
+ width: 180,
+ align: "left",
+ },
+
+ // {
+ // field: "serilNumber",
+ // title: "搴忓垪鍙�",
+ // type: "int",
+ // width: 280,
+ // align: "left",
+ // },
+ {
+ field: "remark",
+ title: "澶囨敞",
+ type: "string",
+ width: 280,
+ align: "left",
+ },
+ {
+ field: "batchNo",
+ title: "鎵规鍙�",
+ type: "string",
+ width: 150,
+ align: "left",
+ },
+ {
+ field: "orderNo",
+ title: "鍗曟嵁缂栧彿",
+ type: "string",
+ width: 150,
+ align: "left",
+ },
+
+ // {
+ // field: "changeType",
+ // title: "鍙樺姩绫诲瀷",
+ // type: "int",
+ // width: 120,
+ // align: "left",
+ // bind: { key: "stockChangeType", data: [] },
+ // },
+ {
+ field: "changeQuantity",
+ title: "鍙樺姩鏁伴噺",
+ type: "string",
+ width: 100,
+ align: "left",
+ },
+ {
+ field: "beforeQuantity",
+ title: "鍙樺姩鍓嶅簱瀛橀噺",
+ type: "string",
+ width: 100,
+ align: "left",
+ },
+ {
+ field: "afterQuantity",
+ title: "鍙樺姩鍚庡簱瀛橀噺",
+ type: "string",
+ width: 100,
+ align: "left",
+ },
+ {
+ 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",
+ hidden: true,
+ },
+ {
+ field: "modifyDate",
+ title: "淇敼鏃堕棿",
+ type: "datetime",
+ width: 160,
+ align: "left",
+ hidden: true,
+ },
+ {
+ field: "orderId",
+ title: "鍗曟嵁涓婚敭",
+ type: "string",
+ width: 180,
+ align: "left",
+ hidden: true,
+ },
+ {
+ field: "orderDetailId",
+ title: "鍗曟嵁鏄庣粏涓婚敭",
+ type: "string",
+ width: 120,
+ align: "left",
+ hidden: true,
+ },
+ {
+ field: "remark",
+ title: "澶囨敞",
+ type: "string",
+ width: 100,
+ align: "left",
+ hidden: true,
+ },
+ ]);
+ 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/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue"
index 48529e7..6aee2bd 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/stock/stockInfoDetail.vue"
@@ -114,14 +114,14 @@
field: "orderNo",
title: "鍗曟嵁缂栧彿",
type: "decimal",
- width: 90,
+ width: 150,
align: "left",
},
{
field: "batchNo",
title: "鎵规鍙�",
type: "string",
- width: 90,
+ width: 150,
align: "left",
},
{
@@ -130,6 +130,7 @@
type: "int",
width: 120,
align: "left",
+ hidden: true,
},
{
field: "supplyCode",
@@ -163,7 +164,7 @@
field: "outboundQuantity",
title: "鍑哄簱鏁伴噺",
type: "string",
- width: 180,
+ width: 120,
align: "left",
},
{
@@ -208,6 +209,7 @@
type: "string",
width: 100,
align: "left",
+ hidden: true,
},
]);
const detail = ref({
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/taskinfo/task.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/taskinfo/task.vue"
index e69ad6d..4785cf7 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/taskinfo/task.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/taskinfo/task.vue"
@@ -1,19 +1,11 @@
<template>
- <view-grid
- ref="grid"
- :columns="columns"
- :detail="detail"
- :editFormFields="editFormFields"
- :editFormOptions="editFormOptions"
- :searchFormFields="searchFormFields"
- :searchFormOptions="searchFormOptions"
- :table="table"
- :extend="extend"
- >
+ <view-grid ref="grid" :columns="columns" :detail="detail" :editFormFields="editFormFields"
+ :editFormOptions="editFormOptions" :searchFormFields="searchFormFields" :searchFormOptions="searchFormOptions"
+ :table="table" :extend="extend">
</view-grid>
</template>
- <script>
+<script>
import extend from "@/extension/taskinfo/task.js";
import { ref, defineComponent } from "vue";
export default defineComponent({
@@ -45,17 +37,16 @@
[
{ title: "浠诲姟鍙�", field: "taskNum", type: "int" },
{ title: "鎵樼洏缂栧彿", field: "palletCode", type: "like" },
- { title: "鍒涘缓浜�", field: "creater", type: "like" },
+ // { title: "鍒涘缓浜�", field: "creater", type: "like" },
],
[
- //{ title: "浠诲姟绫诲瀷",field: "taskType",type: "selectList",dataKey: "taskType",data: [],},
- { title: "浠诲姟鐘舵��",field: "taskStatus",type: "selectList",dataKey: "taskStatusEnum",data: [],},
- { title: "宸烽亾鍙�", field: "roadway", type: "like" },
+ { title: "浠诲姟绫诲瀷", field: "taskType", type: "selectList", dataKey: "taskType", data: [], },
+ { title: "浠诲姟鐘舵��", field: "taskStatus", type: "selectList", dataKey: "taskStatusEnum", data: [], },
],
[
{ title: "璧峰鍦板潃", field: "sourceAddress", type: "like" },
{ title: "鐩爣鍦板潃", field: "targetAddress", type: "like" },
- { title: "鍒涘缓鏃堕棿", field: "createDate", type: "datetime" },
+ // { title: "鍒涘缓鏃堕棿", field: "createDate", type: "datetime" },
],
]);
const columns = ref([
@@ -89,6 +80,7 @@
type: "string",
width: 120,
align: "left",
+ hidden: true,
},
{
field: "taskType",
@@ -161,7 +153,7 @@
type: "datetime",
width: 160,
align: "left",
- hidden:true,
+ hidden: true,
},
{
field: "wMSId",
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/taskinfo/task_hty.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/taskinfo/task_hty.vue"
index dab85d1..93aa854 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/taskinfo/task_hty.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/taskinfo/task_hty.vue"
@@ -1,19 +1,11 @@
<template>
- <view-grid
- ref="grid"
- :columns="columns"
- :detail="detail"
- :editFormFields="editFormFields"
- :editFormOptions="editFormOptions"
- :searchFormFields="searchFormFields"
- :searchFormOptions="searchFormOptions"
- :table="table"
- :extend="extend"
- >
+ <view-grid ref="grid" :columns="columns" :detail="detail" :editFormFields="editFormFields"
+ :editFormOptions="editFormOptions" :searchFormFields="searchFormFields" :searchFormOptions="searchFormOptions"
+ :table="table" :extend="extend">
</view-grid>
</template>
- <script>
+<script>
import extend from "@/extension/taskinfo/task_hty.js";
import { ref, defineComponent } from "vue";
export default defineComponent({
@@ -42,20 +34,20 @@
createDate: "",
});
const searchFormOptions = ref([
- [
+ [
{ title: "浠诲姟鍙�", field: "taskNum", type: "int" },
{ title: "鎵樼洏缂栧彿", field: "palletCode", type: "like" },
- { title: "鍒涘缓浜�", field: "creater", type: "like" },
+ // { title: "鍒涘缓浜�", field: "creater", type: "like" },
],
[
- //{ title: "浠诲姟绫诲瀷",field: "taskType",type: "selectList",dataKey: "taskType",data: [],},
- { title: "浠诲姟鐘舵��",field: "taskStatus",type: "selectList",dataKey: "taskStatusEnum",data: [],},
- { title: "宸烽亾鍙�", field: "roadway", type: "like" },
+ { title: "浠诲姟绫诲瀷", field: "taskType", type: "selectList", dataKey: "taskType", data: [], },
+ { title: "浠诲姟鐘舵��", field: "taskStatus", type: "selectList", dataKey: "taskStatusEnum", data: [], },
+ // { title: "宸烽亾鍙�", field: "roadway", type: "like" },
],
[
{ title: "璧峰鍦板潃", field: "sourceAddress", type: "like" },
{ title: "鐩爣鍦板潃", field: "targetAddress", type: "like" },
- { title: "鍒涘缓鏃堕棿", field: "createDate", type: "datetime" },
+ // { title: "鍒涘缓鏃堕棿", field: "createDate", type: "datetime" },
],
]);
const columns = ref([
@@ -89,15 +81,16 @@
type: "string",
width: 120,
align: "left",
+ hidden: true,
},
- // {
- // field: "taskType",
- // title: "浠诲姟绫诲瀷",
- // type: "int",
- // width: 120,
- // align: "left",
- // bind: { key: "taskType", data: [] },
- // },
+ {
+ field: "taskType",
+ title: "浠诲姟绫诲瀷",
+ type: "int",
+ width: 120,
+ align: "left",
+ bind: { key: "taskType", data: [] },
+ },
{
field: "taskStatus",
title: "浠诲姟鐘舵��",
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/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db" "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/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db"
index 1703298..b2b7a4a 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/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db"
+++ "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/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db"
Binary files differ
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/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-shm" "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/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-shm"
index 980ad64..fe34919 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/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-shm"
+++ "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/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-shm"
Binary files differ
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/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-wal" "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/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-wal"
index feb4e45..6d88039 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/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-wal"
+++ "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/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/CodeChunks.db-wal"
Binary files differ
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/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db" "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/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db"
index c728edd..09d2b95 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/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db"
+++ "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/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db"
Binary files differ
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/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-shm" "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/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-shm"
index 2ff55fe..71af9a3 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/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-shm"
+++ "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/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-shm"
Binary files differ
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/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-wal" "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/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-wal"
index 9cf8e51..40980eb 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/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-wal"
+++ "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/.vs/WIDESEA_WMSServer/CopilotIndices/17.14.1231.31060/SemanticSymbols.db-wal"
Binary files differ
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_BasicService/ESSApiService.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_BasicService/ESSApiService.cs"
index 659a98c..0ee3520 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_BasicService/ESSApiService.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_BasicService/ESSApiService.cs"
@@ -8,6 +8,8 @@
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.LogHelper;
using WIDESEA_DTO.Basic;
using WIDESEA_IBasicService;
@@ -66,6 +68,8 @@
var result = await PostAsync<TaskModel, ApiResponse<TasksData>>(url, request);
if (result != null && result.Code == 0)
{
+ _logger.LogInformation(result.Serialize());
+
return true;
}
return false;
@@ -76,31 +80,45 @@
return false;
}
}
-
+
private async Task<TResponse> PostAsync<TRequest, TResponse>(string url, TRequest request)
{
-
- string json = JsonConvert.SerializeObject(request, new JsonSerializerSettings
+ TResponse response1 = (TResponse)Activator.CreateInstance(typeof(TResponse));
+ try
{
- ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver()
- });
- var content = new StringContent(json, Encoding.UTF8, "application/json");
- var _client = _httpClientFactory.CreateClient("ESSUrl");
- _client.DefaultRequestHeaders.Clear();
+ string json = JsonConvert.SerializeObject(request, new JsonSerializerSettings
+ {
+ ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver()
+ });
+ var content = new StringContent(json, Encoding.UTF8, "application/json");
+ var _client = _httpClientFactory.CreateClient("ESSUrl");
+ _client.DefaultRequestHeaders.Clear();
- _client.DefaultRequestHeaders.Add("Accept", "application/json");
+ _client.DefaultRequestHeaders.Add("Accept", "application/json");
- using var response = await _client.PostAsync(url, content);
- string body = await response.Content.ReadAsStringAsync();
- _logger.LogInformation($"ESSAPI post : {_client.BaseAddress} {url} {body}");
- if (!response.IsSuccessStatusCode)
- {
- throw new HttpRequestException(body);
+ using var response = await _client.PostAsync(url, content);
+ string body = await response.Content.ReadAsStringAsync();
+ _logger.LogInformation($"ESSAPI post : {_client.BaseAddress} {url} {body}");
+ if (!response.IsSuccessStatusCode)
+ {
+ throw new HttpRequestException(body);
+ }
+
+ response1 = JsonConvert.DeserializeObject<TResponse>(body);
+
+ return response1;
}
-
- return JsonConvert.DeserializeObject<TResponse>(body);
+ catch (Exception ex)
+ {
+ Logger.Add(request == null ? "" : JsonConvert.SerializeObject(request), response1 == null ? ex.ToString() : JsonConvert.SerializeObject(response1));
+ throw new Exception(ex.Message);
+ }
+ finally
+ {
+ Logger.Add(request == null ? "" : JsonConvert.SerializeObject(request), response1 == null ? "" : JsonConvert.SerializeObject(response1));
+ }
}
}
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_BasicService/MESOperation/FeedbackMesService.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_BasicService/MESOperation/FeedbackMesService.cs"
index 8f2dd52..bc18e9c 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_BasicService/MESOperation/FeedbackMesService.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_BasicService/MESOperation/FeedbackMesService.cs"
@@ -12,6 +12,7 @@
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Helper;
using WIDESEA_Core.HttpContextUser;
+using WIDESEA_Core.LogHelper;
using WIDESEA_Core.Util;
using WIDESEA_DTO.Base;
using WIDESEA_DTO.ReturnMES;
@@ -42,12 +43,13 @@
public WebResponseContent OutboundFeedback(string orderNo)
{
+ WebResponseContent webResponse = new WebResponseContent();
try
{
Dt_OutboundOrder outboundOrder = _outboundOrderRepository.Db.Queryable<Dt_OutboundOrder>().Where(x => x.OrderNo == orderNo).Includes(x => x.Details).First();
if (outboundOrder == null)
{
- return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑鍑哄簱鍗曚俊鎭�");
+ return webResponse = WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑鍑哄簱鍗曚俊鎭�");
}
List<Dt_MesReturnRecord> returnRecords = BaseDal.QueryData(x => x.OrderNo == orderNo && x.OrderId == outboundOrder.Id && x.ReturnStatus == 2);
@@ -91,12 +93,12 @@
MaterialOutboundReturnDTO? returnDTO = BuildOutboundFeedbackData(outboundOrder);
if (returnDTO == null)
{
- return WebResponseContent.Instance.Error($"鏋勫缓鍥炶皟瀵硅薄澶辫触");
+ return webResponse = WebResponseContent.Instance.Error($"鏋勫缓鍥炶皟瀵硅薄澶辫触");
}
if (returnDTO.Details.Count <= 0)
{
- return WebResponseContent.Instance.Error($"璇ュ崟鎹棤鏄庣粏鍙洖浼�");
+ return webResponse = WebResponseContent.Instance.Error($"璇ュ崟鎹棤鏄庣粏鍙洖浼�");
}
string apiUrl = AppSettings.GetValue("MaterialOutboundFeedbackUrl");
@@ -116,18 +118,18 @@
Dt_AllocateOrder allocateOrder = _allocateRepository.QueryFirst(x => x.OrderNo == outboundOrder.OrderNo);
if (allocateOrder == null)
{
- return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑璋冩嫧鍗�");
+ return webResponse = WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑璋冩嫧鍗�");
}
AllocationReturnDTO? returnDTO = BuildAllocationFeedbackData(outboundOrder, allocateOrder.FromWarehouse, allocateOrder.ToWarehouse);
if (returnDTO == null)
{
- return WebResponseContent.Instance.Error($"鏋勫缓鍥炶皟瀵硅薄澶辫触");
+ return webResponse = WebResponseContent.Instance.Error($"鏋勫缓鍥炶皟瀵硅薄澶辫触");
}
if (returnDTO.Details.Count <= 0)
{
- return WebResponseContent.Instance.Error($"璇ュ崟鎹棤鏄庣粏鍙洖浼�");
+ return webResponse = WebResponseContent.Instance.Error($"璇ュ崟鎹棤鏄庣粏鍙洖浼�");
}
string apiUrl = AppSettings.GetValue("AllocationFeedbackUrl"); ;
@@ -141,6 +143,8 @@
lineNos = returnDTO.Details.Select(x => x.LineNo).ToList();
httpResponseResult = _httpClientHelper.Post<MesResponseDTO>(apiUrl, requestData);
httpResponseResult.ApiUrl = apiUrl;
+
+ Logger.Add(requestData, httpResponseResult.Serialize());
}
bool isSuccess = httpResponseResult.IsSuccess && httpResponseResult.Data.Code == "200";
@@ -210,14 +214,19 @@
_unitOfWorkManage.CommitTran();
int successCount = returnRecords.Where(x => x.ReturnStatus == 1).Count() + (isSuccess ? 1 : 0);
int failCount = returnRecords.Where(x => x.ReturnStatus == 2).Count() + (isSuccess ? 1 : 0);
- WebResponseContent responseContent = new WebResponseContent();
- responseContent.Status = true;
- responseContent.Message = $"鍥炶皟鎴愬姛鏉℃暟锛歿successCount}锛屽洖璋冨け璐ユ潯鏁帮細{failCount}";
- return responseContent;
+
+ webResponse.Status = true;
+ webResponse.Message = $"鍥炶皟鎴愬姛鏉℃暟锛歿successCount}锛屽洖璋冨け璐ユ潯鏁帮細{failCount}";
+
+ return webResponse;
}
catch (Exception ex)
{
- return WebResponseContent.Instance.Error(ex.Message);
+ return webResponse = WebResponseContent.Instance.Error(ex.Message);
+ }
+ finally
+ {
+ Logger.Add(orderNo, webResponse.Serialize());
}
}
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/Inbound/CompleteStockTakeDTO.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/Inbound/CompleteStockTakeDTO.cs"
new file mode 100644
index 0000000..0ea1bed
--- /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/Inbound/CompleteStockTakeDTO.cs"
@@ -0,0 +1,23 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+
+namespace WIDESEA_DTO.Inbound
+{
+ public class CompleteStockTakeDTO
+ {
+
+ public string orderNo { get; set; }
+
+ public string boxNo { get; set; }
+
+ public string barcode { get; set; }
+
+ public decimal actualQuantity { get; set; }
+
+ public decimal stockQuantity { 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_IInboundService/ITakeStockOrderDetailService.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_IInboundService/ITakeStockOrderDetailService.cs"
new file mode 100644
index 0000000..3e7ec4e
--- /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_IInboundService/ITakeStockOrderDetailService.cs"
@@ -0,0 +1,14 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IInboundService
+{
+ public interface ITakeStockOrderDetailService:IService<Dt_TakeStockOrderDetail>
+ {
+ }
+}
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_IInboundService/ITakeStockOrderService.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_IInboundService/ITakeStockOrderService.cs"
new file mode 100644
index 0000000..74387b8
--- /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_IInboundService/ITakeStockOrderService.cs"
@@ -0,0 +1,24 @@
+锘縰sing Microsoft.AspNetCore.Mvc;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_DTO.Inbound;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IInboundService
+{
+ public interface ITakeStockOrderService : IService<Dt_TakeStockOrder>
+ {
+ WebResponseContent ValidateBoxNo(string orderNo, string boxNo);
+
+ WebResponseContent ValidateBarcode(string boxNo, string barcode);
+
+ WebResponseContent CompleteStockTake([FromBody] CompleteStockTakeDTO completeStockTakeDTO);
+
+ WebResponseContent ReturnBox(string orderNo, string boxNo);
+ }
+}
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_InboundService/InboundService.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_InboundService/InboundService.cs"
index 9721aff..f621cae 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_InboundService/InboundService.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_InboundService/InboundService.cs"
@@ -120,6 +120,7 @@
StockId = stockInfo == null ? 0 : stockInfo.Id,
Barcode = item.Barcode,
MaterielCode = item.MaterielCode,
+ MaterielName = item.MaterielName,
BatchNo = item.BatchNo,
Unit = item.Unit,
InboundOrderRowNo = item.lineNo,
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_InboundService/TakeStockOrderDetailService.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_InboundService/TakeStockOrderDetailService.cs"
new file mode 100644
index 0000000..f5f7395
--- /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_InboundService/TakeStockOrderDetailService.cs"
@@ -0,0 +1,21 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_IInboundService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_InboundService
+{
+ public class TakeStockOrderDetailService : ServiceBase<Dt_TakeStockOrderDetail, IRepository<Dt_TakeStockOrderDetail>>, ITakeStockOrderDetailService
+
+ {
+ public IRepository<Dt_TakeStockOrderDetail> Repository => BaseDal;
+ public TakeStockOrderDetailService(IRepository<Dt_TakeStockOrderDetail> BaseDal) : base(BaseDal)
+ {
+ }
+ }
+}
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_InboundService/TakeStockOrderService.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_InboundService/TakeStockOrderService.cs"
new file mode 100644
index 0000000..d98ba61
--- /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_InboundService/TakeStockOrderService.cs"
@@ -0,0 +1,252 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core;
+using WIDESEA_IInboundService;
+using WIDESEA_Model.Models;
+using WIDESEA_Common.OrderEnum;
+using WIDESEA_Core.Helper;
+using Microsoft.AspNetCore.Mvc.RazorPages;
+using WIDESEA_Core.Enums;
+using SqlSugar;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Common.StockEnum;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_DTO.Inbound;
+using WIDESEA_DTO.ReturnMES;
+using MailKit.Search;
+using static System.Collections.Specialized.BitVector32;
+using WIDESEA_Common.CommonEnum;
+using WIDESEA_Common.TaskEnum;
+using WIDESEA_IBasicService;
+
+namespace WIDESEA_InboundService
+{
+ public class TakeStockOrderService : ServiceBase<Dt_TakeStockOrder, IRepository<Dt_TakeStockOrder>>, ITakeStockOrderService
+ {
+ public IRepository<Dt_TakeStockOrder> Repository => BaseDal;
+ private readonly IUnitOfWorkManage _unitOfWorkManage;
+ private readonly IRepository<Dt_TakeStockOrder> _takeStockOrder;
+ private readonly IRepository<Dt_StockInfo> _stockInfoRepository;
+ private readonly IRepository<Dt_TakeStockOrderDetail> _takeStockOrderDetail;
+ private readonly IRepository<Dt_Task> _taskRepository;
+ private readonly ILocationInfoService _locationInfoService;
+ public TakeStockOrderService(IRepository<Dt_TakeStockOrder> BaseDal, IUnitOfWorkManage unitOfWorkManage,IRepository<Dt_TakeStockOrder> takeStockOrder,IRepository<Dt_StockInfo> stockInfoRepository,IRepository<Dt_TakeStockOrderDetail> takeStockOrderDetail,IRepository<Dt_Task> taskRepository,ILocationInfoService locationInfoService) : base(BaseDal)
+ {
+ _unitOfWorkManage = unitOfWorkManage;
+ _takeStockOrder = takeStockOrder;
+ _stockInfoRepository = stockInfoRepository;
+ _takeStockOrderDetail = takeStockOrderDetail;
+ _taskRepository = taskRepository;
+ _locationInfoService = locationInfoService;
+ }
+
+ public WebResponseContent ValidateBoxNo(string orderNo, string boxNo)
+ {
+ try
+ {
+ Dt_StockInfo stockInfo = _stockInfoRepository.QueryFirst(x => x.PalletCode == boxNo);
+ if (stockInfo == null) {
+ return WebResponseContent.Instance.Error("鏈壘鍒拌鎵樼洏搴撳瓨");
+ }
+ if(stockInfo.StockStatus != StockStatusEmun.鐩樼偣鍑哄簱瀹屾垚.ObjToInt())
+ {
+ return WebResponseContent.Instance.Error("璇ユ墭鐩樺浜庨潪鐩樼偣鐘舵�侊紝璇锋鏌ョ洏鐐逛换鍔�");
+ }
+ Dt_TakeStockOrder takeStockOrder = _takeStockOrder.QueryFirst(x=>x.OrderNo == orderNo);
+ if (takeStockOrder == null)
+ {
+ return WebResponseContent.Instance.Error("鏈壘鍒拌鐩樼偣鍗曟嵁");
+ }
+ if (takeStockOrder.AllPalletCode.Contains(","))
+ {
+ var remarkValues = takeStockOrder.AllPalletCode
+ .Split(',')
+ .Select(s => s.Trim())
+ .Where(s => !string.IsNullOrWhiteSpace(s))
+ .ToList();
+ if (remarkValues.Count == 0)
+ {
+ return WebResponseContent.Instance.Error("鐩樼偣鍗曠鍙蜂粎鍖呭惈閫楀彿锛屾棤鏈夋晥绠卞彿鏁版嵁");
+ }
+
+ bool isMatch = remarkValues.Any(val => val.Equals(boxNo, StringComparison.OrdinalIgnoreCase));
+ if (!isMatch)
+ {
+ return WebResponseContent.Instance.Error($"绠卞彿銆恵boxNo}銆戞湭鍦ㄧ洏鐐瑰崟绠卞彿銆恵takeStockOrder.Remark}銆戜腑鎵惧埌鍖归厤椤�");
+ }
+ }
+ else
+ {
+ bool isMatch = takeStockOrder.Remark.Trim().Equals(boxNo, StringComparison.OrdinalIgnoreCase);
+ if (!isMatch)
+ {
+ return WebResponseContent.Instance.Error($"绠卞彿銆恵boxNo}銆戜笌鐩樼偣鍗曠鍙枫�恵takeStockOrder.Remark}銆戜笉鍖归厤");
+ }
+ }
+
+ return WebResponseContent.Instance.OK();
+ }
+ catch(Exception ex)
+ {
+ return WebResponseContent.Instance.Error(ex.Message);
+ }
+ }
+
+ public WebResponseContent ValidateBarcode(string boxNo, string barcode)
+ {
+ try
+ {
+ Dt_StockInfo stockInfo = _stockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == boxNo).Includes(x => x.Details).First();
+ if(stockInfo == null)
+ {
+ return WebResponseContent.Instance.Error("鏈壘鍒拌鏂欑搴撳瓨淇℃伅");
+ }
+ if(stockInfo.Details == null)
+ {
+ return WebResponseContent.Instance.Error("鏈壘鍒拌鏂欑搴撳瓨");
+ }
+ List<string> barcodes = stockInfo.Details.Select(x => x.Barcode).ToList();
+
+ bool isMatch = barcodes.Any(val => val.Equals(barcode, StringComparison.OrdinalIgnoreCase));
+ if (!isMatch)
+ {
+ return WebResponseContent.Instance.Error($"鏉$爜銆恵barcode}銆戞湭鍦ㄣ�恵boxNo}銆戞枡绠辨潯鐮佷腑鎵惧埌鍖归厤椤�");
+ }
+ var stockDetail = stockInfo.Details.FirstOrDefault(x=>x.Barcode == barcode);
+
+ var resultData = new { stockQuantity = stockDetail.StockQuantity };
+
+ return WebResponseContent.Instance.OK(data:resultData);
+ }
+ catch(Exception ex)
+ {
+ return WebResponseContent.Instance.Error(ex.Message);
+ }
+ }
+
+ public WebResponseContent CompleteStockTake([FromBody] CompleteStockTakeDTO completeStockTakeDTO)
+ {
+ try
+ {
+ Dt_TakeStockOrder takeStockOrder = _takeStockOrder.QueryFirst(x=>x.OrderNo == completeStockTakeDTO.orderNo);
+ if (takeStockOrder == null)
+ {
+ return WebResponseContent.Instance.Error("鏈壘鍒拌鐩樼偣鍗曟嵁");
+ }
+ Dt_StockInfo stockInfo = _stockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == completeStockTakeDTO.boxNo).Includes(x=>x.Details).First();
+ if(stockInfo == null)
+ {
+ return WebResponseContent.Instance.Error("鏈壘鍒拌鎵樼洏搴撳瓨");
+ }
+ Dt_StockInfoDetail stockInfoDetail = stockInfo.Details.FirstOrDefault(x => x.Barcode == completeStockTakeDTO.barcode);
+ if(stockInfoDetail == null)
+ {
+ return WebResponseContent.Instance.Error("鏉$爜搴撳瓨鏁版嵁鏈壘鍒板尮閰嶆暟鎹�");
+ }
+ Dt_TakeStockOrderDetail takeStockOrderDetail = new Dt_TakeStockOrderDetail()
+ {
+ TakeStockId = takeStockOrder.Id,
+ MaterielCode = stockInfoDetail.MaterielCode,
+ MaterielName = stockInfoDetail.MaterielName??"",
+ BatchNo = stockInfoDetail.BatchNo,
+ TakePalletCode = completeStockTakeDTO.boxNo,
+ TakeDetalStatus = TakeStockDetailStatusEnum.鐩樼偣瀹屾垚.ObjToInt(),
+ Unit = stockInfoDetail.Unit,
+ SysQty = completeStockTakeDTO.stockQuantity,
+ Qty =completeStockTakeDTO.actualQuantity,
+ Remark = completeStockTakeDTO.stockQuantity-completeStockTakeDTO.actualQuantity>=0 ?"鐩樹簭":"鐩樼泩",
+ barcode = completeStockTakeDTO.barcode,
+ WarehouseCode = stockInfoDetail.WarehouseCode??"",
+ FactoryArea = stockInfoDetail.FactoryArea,
+ SupplyCode = stockInfoDetail.SupplyCode??"",
+ TakeStockNo = takeStockOrder.OrderNo,
+
+ };
+ _unitOfWorkManage.BeginTran();
+ _takeStockOrderDetail.AddData(takeStockOrderDetail);
+ _unitOfWorkManage.CommitTran();
+ return WebResponseContent.Instance.OK();
+ }
+ catch (Exception ex)
+ {
+ _unitOfWorkManage.RollbackTran();
+ return WebResponseContent.Instance.Error(ex.Message);
+ }
+ }
+
+ public WebResponseContent ReturnBox(string orderNo, string boxNo)
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ Dt_TakeStockOrder takeStockOrder = _takeStockOrder.QueryFirst(x=>x.OrderNo == orderNo);
+ if(takeStockOrder == null)
+ {
+ return content.Error("鏈壘鍒拌鐩樼偣鍗曟嵁");
+ }
+ var stock = _stockInfoRepository.QueryFirst(x => x.PalletCode == boxNo);
+
+ if (stock == null)
+ {
+ return content.Error($"鏈壘鍒版墭鐩榹boxNo}搴撳瓨淇℃伅涓嶅厑璁稿洖搴�");
+ }
+
+ var task = _taskRepository.QueryFirst(x => x.PalletCode == boxNo);
+
+
+ if (task != null)
+ {
+ return content.Error($"鎵樼洏{boxNo}瀛樺湪浠诲姟鍥炲簱澶辫触!");
+ }
+ if(stock.StockStatus != StockStatusEmun.鐩樼偣鍑哄簱瀹屾垚.ObjToInt())
+ {
+ return content.Error("璇ユ墭鐩樼姸鎬佷笉瀵�,涓嶅厑璁哥洏鐐瑰叆搴�");
+ }
+ stock.StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt();
+
+ takeStockOrder.TakeStockStatus = TakeStockStatusEnum.鐩樼偣瀹屾垚.ObjToInt();
+ // 鍒嗛厤鏂拌揣浣�
+ var newLocation = _locationInfoService.AssignLocation(stock.LocationType);
+
+ var newTask = new Dt_Task()
+ {
+ CurrentAddress = takeStockOrder.Remark,
+ Grade = 0,
+ PalletCode = boxNo,
+ NextAddress = "",
+ OrderNo = takeStockOrder.OrderNo,
+ Roadway = newLocation.RoadwayNo,
+ SourceAddress = takeStockOrder.Remark,
+ TargetAddress = newLocation.LocationCode,
+ TaskStatus = (int)TaskStatusEnum.New,
+ TaskType = TaskTypeEnum.InInventory.ObjToInt(),
+ PalletType = stock.PalletType,
+ WarehouseId = stock.WarehouseId
+ };
+ _unitOfWorkManage.BeginTran();
+ _stockInfoRepository.UpdateData(stock);
+ _takeStockOrder.UpdateData(takeStockOrder);
+ _taskRepository.AddData(newTask);
+ _unitOfWorkManage.CommitTran();
+
+ //var moveResult = await _eSSApiService.MoveContainerAsync(new MoveContainerRequest
+ //{
+ // slotCode = movestations[station],
+ // containerCode = palletCode
+ //});
+ return content.OK();
+
+ }
+ catch (Exception ex)
+ {
+ _unitOfWorkManage.RollbackTran();
+ return content.Error(ex.Message);
+ }
+ }
+ }
+
+}
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/Inbound/Dt_TakeStockOrderDetail.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/Inbound/Dt_TakeStockOrderDetail.cs"
index 2c6c80b..487b615 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_Model/Models/Inbound/Dt_TakeStockOrderDetail.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/Inbound/Dt_TakeStockOrderDetail.cs"
@@ -1,4 +1,5 @@
-锘縰sing SqlSugar;
+锘縰sing Magicodes.ExporterAndImporter.Core;
+using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -18,108 +19,126 @@
/// 涓婚敭
/// </summary>
[SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+ [ExporterHeader(DisplayName = "涓婚敭")]
public int Id { get; set; }
/// <summary>
/// 鐩樼偣鍗曚富閿�
/// </summary>
[SugarColumn(IsNullable = false, ColumnDescription = "鐩樼偣鍗曚富閿�")]
+ [ExporterHeader(DisplayName = "鐩樼偣鍗曚富閿�")]
public int TakeStockId { get; set; }
/// <summary>
/// 鐗╂枡缂栫爜
/// </summary>
[SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鐗╂枡缂栫爜")]
+ [ExporterHeader(DisplayName = "鐗╂枡缂栫爜")]
public string MaterielCode { get; set; }
/// <summary>
/// 鐗╂枡鍚嶇О
/// </summary>
[SugarColumn(IsNullable = false, Length = 200, ColumnDescription = "鐗╂枡鍚嶇О")]
+ [ExporterHeader(DisplayName = "鐗╂枡鍚嶇О")]
public string MaterielName { get; set; }
/// <summary>
/// 鎵规鍙�
/// </summary>
[SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎵规鍙�")]
+ [ExporterHeader(DisplayName = "鎵规鍙�")]
public string BatchNo { get; set; }
/// <summary>
/// 鐗╂枡瑙勬牸
/// </summary>
[SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "鐗╂枡瑙勬牸")]
+ [ExporterHeader(DisplayName = "鐗╂枡瑙勬牸")]
public string MaterielSpec { get; set; }
/// <summary>
/// 鍘熶粨浣�
/// </summary>
[SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鍘熶粨浣�")]
+ [ExporterHeader(DisplayName = "鍘熶粨浣�")]
public string LocationCode { get; set; }
/// <summary>
/// 鐩樼偣鎵樼洏
/// </summary>
[SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鐩樼偣鎵樼洏")]
+ [ExporterHeader(DisplayName = "鐩樼偣鎵樼洏")]
public string TakePalletCode { get; set; }
/// <summary>
/// 鐩樼偣鏄庣粏鐘舵��
/// </summary>
[SugarColumn(IsNullable = true, ColumnDescription = "鐩樼偣鏄庣粏鐘舵��")]
+ [ExporterHeader(DisplayName = "鐩樼偣鏄庣粏鐘舵��")]
public int TakeDetalStatus { get; set; }
/// <summary>
/// 鍗曚綅
/// </summary>
[SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鍗曚綅")]
+ [ExporterHeader(DisplayName = "鍗曚綅")]
public string Unit { get; set; }
/// <summary>
/// 璐﹂潰鏁伴噺
/// </summary>
[SugarColumn(IsNullable = true, ColumnDescription = "璐﹂潰鏁伴噺")]
+ [ExporterHeader(DisplayName = "璐﹂潰鏁伴噺")]
public decimal SysQty { get; set; }
/// <summary>
/// 瀹炵洏鏁伴噺
/// </summary>
[SugarColumn(IsNullable = true, ColumnDescription = "瀹炵洏鏁伴噺")]
+ [ExporterHeader(DisplayName = "瀹炵洏鏁伴噺")]
public decimal Qty { get; set; }
/// <summary>
/// 澶囨敞
/// </summary>
[SugarColumn(IsNullable = true, Length = 500, ColumnDescription = "澶囨敞")]
+ [ExporterHeader(DisplayName = "澶囨敞")]
public string Remark { get; set; }
/// <summary>
/// 鏉$爜
/// </summary>
[SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鏉$爜")]
+ [ExporterHeader(DisplayName = "鏉$爜")]
public string barcode { get; set; }
/// <summary>
/// 鐗╂枡浠撳簱
/// </summary>
[SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "鐗╂枡浠撳簱")]
+ [ExporterHeader(DisplayName = "鐗╂枡浠撳簱")]
public string WarehouseCode { get; set; }
/// <summary>
/// 鍘傚尯
/// </summary>
[SugarColumn(IsNullable = true, Length = 10, ColumnDescription = "鍘傚尯")]
+ [ExporterHeader(DisplayName = "鍘傚尯")]
public string FactoryArea { get; set; }
/// <summary>
/// 渚涘簲鍟嗙紪鍙�
/// </summary>
[SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "渚涘簲鍟嗙紪鍙�")]
+ [ExporterHeader(DisplayName = "渚涘簲鍟嗙紪鍙�")]
public string SupplyCode { get; set; }
/// <summary>
/// 鐩樼偣鍗曞崟鎹�
/// </summary>
[SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鐩樼偣鍗曞崟鎹�")]
+ [ExporterHeader(DisplayName = "鐩樼偣鍗曞崟鎹�")]
public string TakeStockNo { 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_OutboundService/OutboundService.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_OutboundService/OutboundService.cs"
index f725af2..c7cd1e8 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_OutboundService/OutboundService.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_OutboundService/OutboundService.cs"
@@ -1435,7 +1435,7 @@
List<Barcodes> barcodesList = new List<Barcodes>();
Barcodes barcodes = new Barcodes
{
- Barcode = newBarcode,
+ Barcode = isUnpacked ? newBarcode : stockDetail?.Barcode,
Qty = barcodeQuantity,
SupplyCode = stockDetail?.SupplyCode ?? "",
BatchNo = stockDetail?.BatchNo ?? "",
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_SystemService/Sys_DictionaryService.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_SystemService/Sys_DictionaryService.cs"
index 3e3aea1..5b4bdcb 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_SystemService/Sys_DictionaryService.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_SystemService/Sys_DictionaryService.cs"
@@ -295,6 +295,54 @@
result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
}
break;
+ case "takeStockStatusEnum":
+ {
+ List<object> data = new List<object>();
+ Type type = typeof(TakeStockStatusEnum);
+ List<int> enums = Enum.GetValues(typeof(TakeStockStatusEnum)).Cast<int>().ToList();
+ int index = 0;
+ foreach (var item in enums)
+ {
+ FieldInfo? fieldInfo = typeof(TakeStockStatusEnum).GetField(((TakeStockStatusEnum)item).ToString());
+ DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
+ if (description != null)
+ {
+ data.Add(new { key = item.ToString(), value = description.Description });
+ }
+ else
+ {
+ data.Add(new { key = item.ToString(), value = item.ToString() });
+ }
+ index++;
+ }
+
+ result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
+ }
+ break;
+ case "takeStockDetailStatusEnum":
+ {
+ List<object> data = new List<object>();
+ Type type = typeof(TakeStockDetailStatusEnum);
+ List<int> enums = Enum.GetValues(typeof(TakeStockDetailStatusEnum)).Cast<int>().ToList();
+ int index = 0;
+ foreach (var item in enums)
+ {
+ FieldInfo? fieldInfo = typeof(TakeStockDetailStatusEnum).GetField(((TakeStockDetailStatusEnum)item).ToString());
+ DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
+ if (description != null)
+ {
+ data.Add(new { key = item.ToString(), value = description.Description });
+ }
+ else
+ {
+ data.Add(new { key = item.ToString(), value = item.ToString() });
+ }
+ index++;
+ }
+
+ result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
+ }
+ break;
}
return result;
}
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_TaskInfoService/TaskService.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_TaskInfoService/TaskService.cs"
index 107197e..fb53ba9 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_TaskInfoService/TaskService.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_TaskInfoService/TaskService.cs"
@@ -94,6 +94,7 @@
private readonly IRepository<Dt_AllocateMaterialInfo_Hty> _allocateMaterialInfo_Hty;
private readonly HttpClientHelper _httpClientHelper;
private readonly IBasicService _basicService;
+ private readonly IRepository<Dt_TakeStockOrder> _takeStockOrder;
public IRepository<Dt_Task> Repository => BaseDal;
private Dictionary<string, SqlSugar.OrderByType> _taskOrderBy = new()
@@ -113,7 +114,7 @@
public List<int> TaskOutboundTypes => typeof(TaskTypeEnum).GetEnumIndexList();
- public TaskService(IRepository<Dt_Task> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_StockInfo> stockRepository, ILocationInfoService locationInfoService, IInboundOrderService inboundOrderService, ILocationStatusChangeRecordService locationStatusChangeRecordService, IESSApiService eSSApiService, ILogger<TaskService> logger, IStockService stockService, IRecordService recordService, IInboundOrderDetailService inboundOrderDetailService, IOutboundOrderService outboundOrderService, IOutboundOrderDetailService outboundOrderDetailService, IInvokeMESService invokeMESService, IOutStockLockInfoService outStockLockInfoService, IAllocateService allocateService, IRepository<Dt_OutboundBatch> outboundBatchRepository, IRepository<Dt_ReCheckOrder> reCheckOrderRepository, IRepository<Dt_AllocateOrderDetail> allocateOrderDetailRepository, IRepository<Dt_AllocateOrder> allocateOrderRepository, IMaterialUnitService materialUnitService, ITask_HtyService task_HtyService, IRepository<Dt_AllocateMaterialInfo> allocateMaterialInfo, IRepository<Dt_AllocateMaterialInfo_Hty> allocateMaterialInfo_Hty, HttpClientHelper httpClientHelper, IBasicService basicService) : base(BaseDal)
+ public TaskService(IRepository<Dt_Task> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_StockInfo> stockRepository, ILocationInfoService locationInfoService, IInboundOrderService inboundOrderService, ILocationStatusChangeRecordService locationStatusChangeRecordService, IESSApiService eSSApiService, ILogger<TaskService> logger, IStockService stockService, IRecordService recordService, IInboundOrderDetailService inboundOrderDetailService, IOutboundOrderService outboundOrderService, IOutboundOrderDetailService outboundOrderDetailService, IInvokeMESService invokeMESService, IOutStockLockInfoService outStockLockInfoService, IAllocateService allocateService, IRepository<Dt_OutboundBatch> outboundBatchRepository, IRepository<Dt_ReCheckOrder> reCheckOrderRepository, IRepository<Dt_AllocateOrderDetail> allocateOrderDetailRepository, IRepository<Dt_AllocateOrder> allocateOrderRepository, IMaterialUnitService materialUnitService, ITask_HtyService task_HtyService, IRepository<Dt_AllocateMaterialInfo> allocateMaterialInfo, IRepository<Dt_AllocateMaterialInfo_Hty> allocateMaterialInfo_Hty, HttpClientHelper httpClientHelper, IBasicService basicService,IRepository<Dt_TakeStockOrder> takeStockOrder) : base(BaseDal)
{
_mapper = mapper;
_unitOfWorkManage = unitOfWorkManage;
@@ -141,6 +142,7 @@
_allocateMaterialInfo_Hty = allocateMaterialInfo_Hty;
_httpClientHelper = httpClientHelper;
_basicService = basicService;
+ _takeStockOrder = takeStockOrder;
}
public async Task TaskStatusChange(string taskNum, TaskStatusEnum taskStatusEnum)
@@ -591,6 +593,7 @@
_stockService.StockInfoService.Db.UpdateNav(stock).IncludesAllFirstLayer().ExecuteCommand();
+ task.TaskStatus = (int)TaskStatusEnum.Finish;
var result = _task_HtyService.DeleteAndMoveIntoHty(task, OperateTypeEnum.鑷姩瀹屾垚);
if (!result)
{
@@ -1849,5 +1852,134 @@
return TaskCompleted(TaskNum);
}
+ /// <summary>
+ /// 鐩樼偣鍑哄簱瀹屾垚
+ /// </summary>
+ public WebResponseContent OutInventoryTaskCompleted(Dt_Task task)
+ {
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+ task = BaseDal.QueryFirst(x => x.TaskNum == task.TaskNum);
+ if (task == null)
+ {
+ return WebResponseContent.Instance.Error("鏈壘鍒颁换鍔′俊鎭�");
+ }
+ var SourceAddress = task.SourceAddress;
+ Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x=>x.PalletCode == task.PalletCode);
+ Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == SourceAddress);
+ if (stockInfo == null) return WebResponseContent.Instance.Error("鏈壘鍒板簱瀛樹俊鎭�");
+ if (locationInfo == null) return WebResponseContent.Instance.Error("鏈壘鍒拌揣浣嶄俊鎭�");
+ //鑾峰彇瀵瑰簲鐩樼偣鍗�
+ Dt_TakeStockOrder takeStockOrder = _takeStockOrder.Db.Queryable<Dt_TakeStockOrder>().Where(x => x.OrderNo == task.OrderNo).Includes(x => x.Details).First();
+ if (takeStockOrder == null)
+ {
+ return content.Error($"鐩樼偣鍗晎task.OrderNo}涓嶅瓨鍦�");
+ }
+ if (takeStockOrder.TakeStockStatus != TakeStockStatusEnum.鐩樼偣涓�.ObjToInt())
+ {
+ return content.Error($"鐩樼偣鍗晎task.OrderNo}鐩樼偣宸插畬鎴愭垨鏈紑濮�");
+ }
+ if (stockInfo.StockStatus != StockStatusEmun.鍑哄簱閿佸畾.ObjToInt())
+ {
+ return content.Error($"{stockInfo.PalletCode}搴撳瓨鐘舵�佷笉姝g‘");
+ }
+ if (locationInfo.LocationStatus != LocationStatusEnum.Lock.ObjToInt())
+ {
+ return content.Error($"{locationInfo.LocationCode}璐т綅鐘舵�佷笉姝g‘");
+ }
+
+ stockInfo.StockStatus = StockStatusEmun.鐩樼偣鍑哄簱瀹屾垚.ObjToInt();
+ stockInfo.LocationCode = "";
+ task.TaskStatus = TaskStatusEnum.Finish.ObjToInt();
+ int beforeStatus = locationInfo.LocationStatus;
+ locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
+ _unitOfWorkManage.BeginTran();
+ //璐т綅鍙樺姩璁板綍
+ _basicService.LocationInfoService.UpdateData(locationInfo);
+ _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, beforeStatus, LocationStatusEnum.Free.ObjToInt(), takeStockOrder?.OrderNo ?? "", task.TaskNum);
+ _stockRepository.UpdateData(stockInfo);
+ BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
+ _unitOfWorkManage.CommitTran();
+ content.OK();
+ }
+ catch (Exception ex)
+ {
+ _unitOfWorkManage.RollbackTran();
+ content.Error(ex.Message);
+ }
+ return content;
+ }
+
+ /// <summary>
+ /// 鐩樼偣鍏ュ簱瀹屾垚
+ /// </summary>
+ /// <param name="task"></param>
+ /// <returns></returns>
+ public async Task<WebResponseContent> InInventoryTaskCompleted(Dt_Task task)
+ {
+
+ WebResponseContent content = new WebResponseContent();
+ try
+ {
+
+ Dt_LocationInfo locationInfo = _locationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress);
+ if (locationInfo == null)
+ {
+ return content.Error($"鏈壘鍒板搴旂殑缁堢偣璐т綅淇℃伅");
+ }
+ Dt_StockInfo stockInfo = _stockRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == task.PalletCode && x.WarehouseId == task.WarehouseId).First();
+ if (stockInfo == null)
+ {
+ return WebResponseContent.Instance.Error($"鏈壘鍒版墭鐩樺搴旂殑缁勭洏淇℃伅");
+ }
+
+ if (!string.IsNullOrEmpty(stockInfo.LocationCode))
+ {
+ return WebResponseContent.Instance.Error($"璇ユ墭鐩樺凡缁戝畾璐т綅");
+ }
+ if (locationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt())
+ {
+ return WebResponseContent.Instance.Error($"璐т綅鐘舵�佷笉姝g‘");
+ }
+
+
+ var beforelocationStatus = locationInfo.LocationStatus;
+ locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
+
+
+ stockInfo.LocationCode = locationInfo.LocationCode;
+ stockInfo.PalletCode = task.PalletCode;
+ stockInfo.LocationCode = task.TargetAddress;
+ stockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+ task.TaskStatus = TaskStatusEnum.Finish.ObjToInt();
+
+ _unitOfWorkManage.BeginTran();
+ _locationInfoService.Repository.UpdateData(locationInfo);
+ _stockRepository.UpdateData(stockInfo);
+ var result = _task_HtyService.DeleteAndMoveIntoHty(task, OperateTypeEnum.浜哄伐鍒犻櫎);
+ _unitOfWorkManage.CommitTran();
+
+ if (!result)
+ {
+ await Db.Deleteable(task).ExecuteCommandAsync();
+ }
+ try
+ {
+ _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, beforelocationStatus, StockChangeType.Inbound.ObjToInt(), "", task.TaskNum);
+ }
+ catch (Exception ex)
+ {
+ _logger.LogInformation($"InEmptyTaskCompleted AddLocationStatusChangeRecord : {ex.Message} ");
+ }
+ return content;
+ }
+ catch (Exception ex)
+ {
+ _unitOfWorkManage.RollbackTran();
+ return await Task.FromResult(WebResponseContent.Instance.Error(ex.Message));
+ }
+ }
}
}
+
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_TaskInfoService/TaskService_Outbound.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_TaskInfoService/TaskService_Outbound.cs"
index e85a591..87f4d36 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_TaskInfoService/TaskService_Outbound.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_TaskInfoService/TaskService_Outbound.cs"
@@ -393,7 +393,7 @@
TargetAddress = outStation,
TaskStatus = TaskStatusEnum.New.ObjToInt(),
TaskType = taskType.ObjToInt(),
- // TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
+ //TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
PalletType = stockInfo.PalletType,
WarehouseId = stockInfo.WarehouseId,
};
@@ -1127,7 +1127,7 @@
}
//鑾峰彇璐т綅
List<string> locStrs = stockInfos.Select(x => x.LocationCode).ToList();
- List<Dt_LocationInfo> locationInfos = (List<Dt_LocationInfo>)_locationInfoService.Db.Queryable<Dt_LocationInfo>().Where(x => locStrs.Contains(x.LocationCode));
+ List<Dt_LocationInfo> locationInfos =_locationInfoService.Db.Queryable<Dt_LocationInfo>().Where(x => locStrs.Contains(x.LocationCode)).ToList();
if (stockInfos.Count != locationInfos.Count)
{
string? locStr = locStrs.FirstOrDefault(x => !locationInfos.Select(x => x.LocationCode).ToList().Contains(x));
@@ -1138,7 +1138,9 @@
WarehouseId = stockInfos.FirstOrDefault().WarehouseId,
TakeStockStatus = TakeStockStatusEnum.鐩樼偣涓�.ObjToInt(),
OrderNo = CreateCodeByRule(nameof(RuleCodeEnum.PDCodeRule)),
- Details = new List<Dt_TakeStockOrderDetail>()
+ AllPalletCode = string.Join(",", stockInfos.Select(item => item.PalletCode).Where(palletCode => !string.IsNullOrEmpty(palletCode))),
+ Remark = outStation
+
};
foreach (var item in stockInfos)
{
@@ -1172,7 +1174,7 @@
_unitOfWorkManage.BeginTran();
//鏇存柊搴撳瓨鐘舵��
_stockRepository.UpdateData(stockInfos);
- BaseDal.Db.InsertNav(takeStockOrder);
+ _takeStockOrder.AddData(takeStockOrder);
//鏂板缓浠诲姟
BaseDal.AddData(tasks);
_locationInfoService.UpdateData(locationInfos);
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/Allocate/AllocateOrderController.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/Allocate/AllocateOrderController.cs"
index 81a2421..ac3c3e1 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/Allocate/AllocateOrderController.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/Allocate/AllocateOrderController.cs"
@@ -71,7 +71,7 @@
{
return WebResponseContent.Instance.Error($"鏉$爜涓嶈兘涓虹┖");
}
- var materialName = _materialInfoRepository.QueryFirst(x => x.MaterielCode == detailDto.materialCode).MaterielName;
+ var materialName = _materialInfoRepository.QueryFirst(x => x.MaterielCode == detailDto.MaterialCode).MaterielName;
if (detailDto.Barcodes != null && detailDto.Barcodes.Any())
{
foreach (var barcodeDto in detailDto.Barcodes)
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/Inbound/TakeStockOrderController.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/Inbound/TakeStockOrderController.cs"
new file mode 100644
index 0000000..3db09d1
--- /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_WMSServer/Controllers/Inbound/TakeStockOrderController.cs"
@@ -0,0 +1,57 @@
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseController;
+using WIDESEA_DTO.Inbound;
+using WIDESEA_IInboundService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Inbound
+{
+ /// <summary>
+ /// 鐩樼偣鍗�
+ /// </summary>
+ [Route("api/TakeStockOrder")]
+ [ApiController]
+ public class TakeStockOrderController : ApiBaseController<ITakeStockOrderService, Dt_TakeStockOrder>
+ {
+ public TakeStockOrderController(ITakeStockOrderService service) : base(service)
+ {
+ }
+ /// <summary>
+ /// 鏂欑楠岃瘉
+ /// </summary>
+ [HttpPost,HttpGet, Route("ValidateBoxNo"), AllowAnonymous]
+ public WebResponseContent ValidateBoxNo(string orderNo , string boxNo)
+ {
+ return Service.ValidateBoxNo(orderNo,boxNo);
+ }
+
+ /// <summary>
+ /// 鏉$爜楠岃瘉
+ /// </summary>
+ [HttpPost, HttpGet, Route("ValidateBarcode"), AllowAnonymous]
+ public WebResponseContent ValidateBarcode( string boxNo,string barcode)
+ {
+ return Service.ValidateBarcode(boxNo, barcode);
+ }
+
+ /// <summary>
+ /// 鐩樼偣瀹屾垚璁板綍
+ /// </summary>
+ [HttpPost, HttpGet, Route("CompleteStockTake"), AllowAnonymous]
+ public WebResponseContent CompleteStockTake([FromBody] CompleteStockTakeDTO completeStockTakeDTO)
+ {
+ return Service.CompleteStockTake(completeStockTakeDTO);
+ }
+ /// <summary>
+ /// 鐩樼偣鏂欑鍥炲簱
+ /// </summary>
+ [HttpPost, HttpGet, Route("ReturnBox"), AllowAnonymous]
+ public WebResponseContent ReturnBox(string orderNo, string boxNo)
+ {
+ return Service.ReturnBox(orderNo, boxNo);
+ }
+ }
+}
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/Inbound/TakeStockOrderDetailController.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/Inbound/TakeStockOrderDetailController.cs"
new file mode 100644
index 0000000..b40a957
--- /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_WMSServer/Controllers/Inbound/TakeStockOrderDetailController.cs"
@@ -0,0 +1,16 @@
+锘縰sing Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core.BaseController;
+using WIDESEA_IInboundService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers.Inbound
+{
+ [Route("api/TakeStockOrderDetail")]
+ [ApiController]
+ public class TakeStockOrderDetailController : ApiBaseController<ITakeStockOrderDetailService, Dt_TakeStockOrderDetail>
+ {
+ public TakeStockOrderDetailController(ITakeStockOrderDetailService service) : base(service)
+ {
+ }
+ }
+}
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/System/Sys_MenuController.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/System/Sys_MenuController.cs"
index d6dcb2f..77ab064 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/System/Sys_MenuController.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/System/Sys_MenuController.cs"
@@ -39,7 +39,8 @@
[HttpPost, Route("save")]
public ActionResult Save([FromBody] Sys_Menu menu)
{
- if (App.User.UserId == 1)
+ //瓒呯骇绠$悊鍛樹篃鑳戒慨鏀硅彍鍗�
+ if (App.User.RoleId == 1)
{
return Json(Service.Save(menu));
}
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/Jobs/InventoryLockJob.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/Jobs/InventoryLockJob.cs"
index 495eef0..ec6e218 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/Jobs/InventoryLockJob.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/Jobs/InventoryLockJob.cs"
@@ -22,13 +22,13 @@
{
// 绗竴姝ワ細鏇存柊ValidDate鐨勫師鐢烻QL锛圫QL Server锛�
- string updateSql = @"
- UPDATE s
- SET s.ValidDate = DATEADD(DAY, m.ValidityDays, s.CreateDate)
- FROM Dt_StockInfoDetail s
- INNER JOIN Dt_MaterialExpirationDate m ON SUBSTRING(s.MaterielCode, 1, 6) = m.MaterialCode
- WHERE s.ValidDate IS NULL";
- int updateValidDateResult = _db.Ado.ExecuteCommand(updateSql);
+ // string updateSql = @"
+ //UPDATE s
+ //SET s.ValidDate = DATEADD(DAY, m.ValidityDays, s.CreateDate)
+ //FROM Dt_StockInfoDetail s
+ //INNER JOIN Dt_MaterialExpirationDate m ON SUBSTRING(s.MaterielCode, 1, 6) = m.MaterialCode
+ //WHERE s.ValidDate IS NULL";
+ // int updateValidDateResult = _db.Ado.ExecuteCommand(updateSql);
// 绗簩姝ワ細鏇存柊杩囨湡鐘舵�佺殑鍘熺敓SQL
string updateStatusSql = @"
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/Jobs/QuartzJobMildd.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/Jobs/QuartzJobMildd.cs"
index e179ff3..09e3e2e 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/Jobs/QuartzJobMildd.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/Jobs/QuartzJobMildd.cs"
@@ -21,20 +21,20 @@
{
var allQzServices = new List<TasksQz>()
{
- //new TasksQz()
- //{
- // Id = 1,
- // AssemblyName = "WIDESEA_WMSServer",
- // ClassName = "AgvTaskJob",
- // CreateTime = DateTime.Now,
- // IntervalSecond = 3,
- // IsDeleted = false,
- // IsStart = false,
- // JobGroup = "WIDESEA_WMSServer",
- // Name = "AgvTaskJob",
- // TriggerType = 0
- //},
-
+ new TasksQz()
+ {
+ Id = 1,
+ AssemblyName = "WIDESEA_WMSServer",
+ ClassName = "AgvTaskJob",
+ CreateTime = DateTime.Now,
+ IntervalSecond = 3,
+ IsDeleted = false,
+ IsStart = false,
+ JobGroup = "WIDESEA_WMSServer",
+ Name = "AgvTaskJob",
+ TriggerType = 0
+ },
+
};
foreach (var item in allQzServices)
{
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/Properties/PublishProfiles/FolderProfile2.pubxml" "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/Properties/PublishProfiles/FolderProfile2.pubxml"
new file mode 100644
index 0000000..19f43e1
--- /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_WMSServer/Properties/PublishProfiles/FolderProfile2.pubxml"
@@ -0,0 +1,15 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<!-- https://go.microsoft.com/fwlink/?LinkID=208121. -->
+<Project>
+ <PropertyGroup>
+ <DeleteExistingFiles>false</DeleteExistingFiles>
+ <ExcludeApp_Data>false</ExcludeApp_Data>
+ <LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
+ <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
+ <LastUsedPlatform>Any CPU</LastUsedPlatform>
+ <PublishProvider>FileSystem</PublishProvider>
+ <PublishUrl>bin\Release\net6.0\publish\</PublishUrl>
+ <WebPublishMethod>FileSystem</WebPublishMethod>
+ <_TargetId>Folder</_TargetId>
+ </PropertyGroup>
+</Project>
\ No newline at end of file
--
Gitblit v1.9.3