From 6c741f0281d29f2b689172f1cea8c398ca378a17 Mon Sep 17 00:00:00 2001
From: wxw <Administrator@DESKTOP-5BIMHQ3>
Date: 星期六, 07 九月 2024 15:57:50 +0800
Subject: [PATCH] 分拣任务新增功能增加物料选择;开发分拣码垛的绑定任务功能、结批功能

---
 Admin.NET/WCS.Application/Service/WcsCheckTask/Dto/WcsCheckTaskInput.cs  |  289 +++++
 Admin.NET/WCS.Application/Service/WcsOderTask/Dto/WcsOderTaskInput.cs    |   12 
 Admin.NET/WCS.Application/Service/WcsOderTask/WcsOderTaskService.cs      |    6 
 Web/src/api/device/wcsOderTask.ts                                        |    9 
 Web/src/api/wcs/wcsDevice.ts                                             |   27 
 Admin.NET/WCS.Application/Service/WcsBoxInfo/Dto/WcsBoxInfoOutput.cs     |  156 +++
 Admin.NET/WCS.Application/Service/WcsBoxInfo/Dto/WcsGroupBoxInfoDto.cs   |   69 +
 Web/src/api/main/wcsBoxInfo.ts                                           |   50 
 Admin.NET/WCS.Application/Service/WcsCheckTask/Dto/WcsCheckTaskDto.cs    |  149 ++
 Web/src/api/main/wcsCheckTask.ts                                         |   50 
 Web/src/views/main/wcsCheckTask/component/editDialog.vue                 |  233 ++++
 Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceTaskOrderDto.cs |   21 
 Web/src/views/main/wcsCheckTask/index.vue                                |  289 +++++
 Web/src/views/main/wcsBoxInfo/index.vue                                  |  296 +++++
 Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs          |   22 
 Admin.NET/WCS.Application/Service/WcsBoxInfo/Dto/WcsBoxInfoDto.cs        |  154 ++
 Admin.NET/WCS.Application/Service/WcsBoxInfo/WcsBoxInfoService.cs        |  179 +++
 Admin.NET/WCS.Application/Service/WcsBoxInfo/Dto/WcsBoxInfoInput.cs      |  307 +++++
 Web/src/views/device/sortPallet/index.vue                                |   94 +
 Admin.NET/WCS.Application/Service/WcsCheckTask/WcsCheckTaskService.cs    |  213 ++++
 Admin.NET/WCS.Application/Service/WcsCheckTask/Dto/WcsCheckTaskOutput.cs |  151 ++
 Web/src/views/device/wcsOderTask/component/editDialog.vue                |   69 +
 Web/src/views/main/wcsBoxInfo/component/editDialog.vue                   |  240 ++++
 23 files changed, 3,036 insertions(+), 49 deletions(-)

diff --git a/Admin.NET/WCS.Application/Service/WcsBoxInfo/Dto/WcsBoxInfoDto.cs b/Admin.NET/WCS.Application/Service/WcsBoxInfo/Dto/WcsBoxInfoDto.cs
new file mode 100644
index 0000000..34660b4
--- /dev/null
+++ b/Admin.NET/WCS.Application/Service/WcsBoxInfo/Dto/WcsBoxInfoDto.cs
@@ -0,0 +1,154 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+namespace WCS.Application;
+
+    /// <summary>
+    /// 绠辩爜鏄庣粏琛ㄨ緭鍑哄弬鏁�
+    /// </summary>
+    public class WcsBoxInfoDto
+    {
+        /// <summary>
+        /// 涓婚敭Id
+        /// </summary>
+        public long Id { get; set; }
+        
+        /// <summary>
+        /// 鎵樼洏鍙�
+        /// </summary>
+        public string? PalletNo { get; set; }
+        
+        /// <summary>
+        /// 鐗╂枡缂栫爜
+        /// </summary>
+        public string? SkuNo { get; set; }
+        
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
+        public string? SkuName { get; set; }
+        
+        /// <summary>
+        /// 鎵规鍙�
+        /// </summary>
+        public string? LotNo { get; set; }
+        
+        /// <summary>
+        /// 鎵规鎻忚堪
+        /// </summary>
+        public string? LotText { get; set; }
+        
+        /// <summary>
+        /// 渚涘簲鍟嗕唬鐮�
+        /// </summary>
+        public string? Custom { get; set; }
+        
+        /// <summary>
+        /// 渚涘簲鍟嗗悕绉�
+        /// </summary>
+        public string? CustomName { get; set; }
+        
+        /// <summary>
+        /// 鐢熶骇鏃ユ湡
+        /// </summary>
+        public DateTime? ProductionTime { get; set; }
+        
+        /// <summary>
+        /// 杩囨湡鏃ユ湡
+        /// </summary>
+        public DateTime? ExpirationTime { get; set; }
+        
+        /// <summary>
+        /// 浜х嚎
+        /// </summary>
+        public string? LineNo { get; set; }
+        
+        /// <summary>
+        /// 鐗╂枡瑙勬牸
+        /// </summary>
+        public string? Standard { get; set; }
+        
+        /// <summary>
+        /// 鍖呰瑙勬牸
+        /// </summary>
+        public string? PackageStandard { get; set; }
+        
+        /// <summary>
+        /// 鍖呰鍗曚綅
+        /// </summary>
+        public string? PackUnit { get; set; }
+        
+        /// <summary>
+        /// 瀛樺偍鏈熻嚦
+        /// </summary>
+        public DateTime? StoreTime { get; set; }
+        
+        /// <summary>
+        /// 闆剁鏍囪
+        /// </summary>
+        public string? BitBoxMark { get; set; }
+        
+        /// <summary>
+        /// 绠辩爜
+        /// </summary>
+        public string? BoxNo { get; set; }
+        
+        /// <summary>
+        /// 鐩掔爜
+        /// </summary>
+        public string? BoxNo2 { get; set; }
+        
+        /// <summary>
+        /// 鍖呰绾у埆
+        /// </summary>
+        public string? Level { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+        public DateTime? CreateTime { get; set; }
+        
+        /// <summary>
+        /// 鏇存柊鏃堕棿
+        /// </summary>
+        public DateTime? UpdateTime { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰匢d
+        /// </summary>
+        public long? CreateUserId { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呭鍚�
+        /// </summary>
+        public string? CreateUserName { get; set; }
+        
+        /// <summary>
+        /// 淇敼鑰匢d
+        /// </summary>
+        public long? UpdateUserId { get; set; }
+        
+        /// <summary>
+        /// 淇敼鑰呭鍚�
+        /// </summary>
+        public string? UpdateUserName { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呴儴闂↖d
+        /// </summary>
+        public long? CreateOrgId { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呴儴闂ㄥ悕绉�
+        /// </summary>
+        public string? CreateOrgName { get; set; }
+        
+        /// <summary>
+        /// 杞垹闄�
+        /// </summary>
+        public bool IsDelete { get; set; }
+        
+    }
diff --git a/Admin.NET/WCS.Application/Service/WcsBoxInfo/Dto/WcsBoxInfoInput.cs b/Admin.NET/WCS.Application/Service/WcsBoxInfo/Dto/WcsBoxInfoInput.cs
new file mode 100644
index 0000000..d2c7835
--- /dev/null
+++ b/Admin.NET/WCS.Application/Service/WcsBoxInfo/Dto/WcsBoxInfoInput.cs
@@ -0,0 +1,307 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+using Admin.NET.Core;
+using System.ComponentModel.DataAnnotations;
+
+namespace WCS.Application;
+
+    /// <summary>
+    /// 绠辩爜鏄庣粏琛ㄥ熀纭�杈撳叆鍙傛暟
+    /// </summary>
+    public class WcsBoxInfoBaseInput
+    {
+        /// <summary>
+        /// 鎵樼洏鍙�
+        /// </summary>
+        public virtual string? PalletNo { get; set; }
+        
+        /// <summary>
+        /// 鐗╂枡缂栫爜
+        /// </summary>
+        public virtual string? SkuNo { get; set; }
+        
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
+        public virtual string? SkuName { get; set; }
+        
+        /// <summary>
+        /// 鎵规鍙�
+        /// </summary>
+        public virtual string? LotNo { get; set; }
+        
+        /// <summary>
+        /// 鎵规鎻忚堪
+        /// </summary>
+        public virtual string? LotText { get; set; }
+        
+        /// <summary>
+        /// 渚涘簲鍟嗕唬鐮�
+        /// </summary>
+        public virtual string? Custom { get; set; }
+        
+        /// <summary>
+        /// 渚涘簲鍟嗗悕绉�
+        /// </summary>
+        public virtual string? CustomName { get; set; }
+        
+        /// <summary>
+        /// 鐢熶骇鏃ユ湡
+        /// </summary>
+        public virtual DateTime? ProductionTime { get; set; }
+        
+        /// <summary>
+        /// 杩囨湡鏃ユ湡
+        /// </summary>
+        public virtual DateTime? ExpirationTime { get; set; }
+        
+        /// <summary>
+        /// 浜х嚎
+        /// </summary>
+        public virtual string? LineNo { get; set; }
+        
+        /// <summary>
+        /// 鐗╂枡瑙勬牸
+        /// </summary>
+        public virtual string? Standard { get; set; }
+        
+        /// <summary>
+        /// 鍖呰瑙勬牸
+        /// </summary>
+        public virtual string? PackageStandard { get; set; }
+        
+        /// <summary>
+        /// 鍖呰鍗曚綅
+        /// </summary>
+        public virtual string? PackUnit { get; set; }
+        
+        /// <summary>
+        /// 瀛樺偍鏈熻嚦
+        /// </summary>
+        public virtual DateTime? StoreTime { get; set; }
+        
+        /// <summary>
+        /// 闆剁鏍囪
+        /// </summary>
+        public virtual string? BitBoxMark { get; set; }
+        
+        /// <summary>
+        /// 绠辩爜
+        /// </summary>
+        public virtual string? BoxNo { get; set; }
+        
+        /// <summary>
+        /// 鐩掔爜
+        /// </summary>
+        public virtual string? BoxNo2 { get; set; }
+        
+        /// <summary>
+        /// 鍖呰绾у埆
+        /// </summary>
+        public virtual string? Level { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+        public virtual DateTime? CreateTime { get; set; }
+        
+        /// <summary>
+        /// 鏇存柊鏃堕棿
+        /// </summary>
+        public virtual DateTime? UpdateTime { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰匢d
+        /// </summary>
+        public virtual long? CreateUserId { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呭鍚�
+        /// </summary>
+        public virtual string? CreateUserName { get; set; }
+        
+        /// <summary>
+        /// 淇敼鑰匢d
+        /// </summary>
+        public virtual long? UpdateUserId { get; set; }
+        
+        /// <summary>
+        /// 淇敼鑰呭鍚�
+        /// </summary>
+        public virtual string? UpdateUserName { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呴儴闂↖d
+        /// </summary>
+        public virtual long? CreateOrgId { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呴儴闂ㄥ悕绉�
+        /// </summary>
+        public virtual string? CreateOrgName { get; set; }
+        
+        /// <summary>
+        /// 杞垹闄�
+        /// </summary>
+        public virtual bool IsDelete { get; set; }
+        
+    }
+
+    /// <summary>
+    /// 绠辩爜鏄庣粏琛ㄥ垎椤垫煡璇㈣緭鍏ュ弬鏁�
+    /// </summary>
+    public class PageWcsBoxInfoInput : BasePageInput
+    {
+        /// <summary>
+        /// 鍏抽敭瀛楁煡璇�
+        /// </summary>
+        public string? SearchKey { get; set; }
+
+        /// <summary>
+        /// 鎵樼洏鍙�
+        /// </summary>
+        public string? PalletNo { get; set; }
+        
+        /// <summary>
+        /// 鐗╂枡缂栫爜
+        /// </summary>
+        public string? SkuNo { get; set; }
+        
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
+        public string? SkuName { get; set; }
+        
+        /// <summary>
+        /// 鎵规鍙�
+        /// </summary>
+        public string? LotNo { get; set; }
+        
+        /// <summary>
+        /// 鎵规鎻忚堪
+        /// </summary>
+        public string? LotText { get; set; }
+        
+        /// <summary>
+        /// 渚涘簲鍟嗕唬鐮�
+        /// </summary>
+        public string? Custom { get; set; }
+        
+        /// <summary>
+        /// 渚涘簲鍟嗗悕绉�
+        /// </summary>
+        public string? CustomName { get; set; }
+        
+        /// <summary>
+        /// 鐢熶骇鏃ユ湡
+        /// </summary>
+        public DateTime? ProductionTime { get; set; }
+        
+        /// <summary>
+         /// 鐢熶骇鏃ユ湡鑼冨洿
+         /// </summary>
+         public DateTime?[] ProductionTimeRange { get; set; } 
+        /// <summary>
+        /// 杩囨湡鏃ユ湡
+        /// </summary>
+        public DateTime? ExpirationTime { get; set; }
+        
+        /// <summary>
+         /// 杩囨湡鏃ユ湡鑼冨洿
+         /// </summary>
+         public DateTime?[] ExpirationTimeRange { get; set; } 
+        /// <summary>
+        /// 浜х嚎
+        /// </summary>
+        public string? LineNo { get; set; }
+        
+        /// <summary>
+        /// 鐗╂枡瑙勬牸
+        /// </summary>
+        public string? Standard { get; set; }
+        
+        /// <summary>
+        /// 鍖呰瑙勬牸
+        /// </summary>
+        public string? PackageStandard { get; set; }
+        
+        /// <summary>
+        /// 鍖呰鍗曚綅
+        /// </summary>
+        public string? PackUnit { get; set; }
+        
+        /// <summary>
+        /// 瀛樺偍鏈熻嚦
+        /// </summary>
+        public DateTime? StoreTime { get; set; }
+        
+        /// <summary>
+         /// 瀛樺偍鏈熻嚦鑼冨洿
+         /// </summary>
+         public DateTime?[] StoreTimeRange { get; set; } 
+        /// <summary>
+        /// 闆剁鏍囪
+        /// </summary>
+        public string? BitBoxMark { get; set; }
+        
+        /// <summary>
+        /// 绠辩爜
+        /// </summary>
+        public string? BoxNo { get; set; }
+        
+        /// <summary>
+        /// 鐩掔爜
+        /// </summary>
+        public string? BoxNo2 { get; set; }
+        
+        /// <summary>
+        /// 鍖呰绾у埆
+        /// </summary>
+        public string? Level { get; set; }
+        
+    }
+
+    /// <summary>
+    /// 绠辩爜鏄庣粏琛ㄥ鍔犺緭鍏ュ弬鏁�
+    /// </summary>
+    public class AddWcsBoxInfoInput : WcsBoxInfoBaseInput
+    {
+        /// <summary>
+        /// 杞垹闄�
+        /// </summary>
+        [Required(ErrorMessage = "杞垹闄や笉鑳戒负绌�")]
+        public override bool IsDelete { get; set; }
+        
+    }
+
+    /// <summary>
+    /// 绠辩爜鏄庣粏琛ㄥ垹闄よ緭鍏ュ弬鏁�
+    /// </summary>
+    public class DeleteWcsBoxInfoInput : BaseIdInput
+    {
+    }
+
+    /// <summary>
+    /// 绠辩爜鏄庣粏琛ㄦ洿鏂拌緭鍏ュ弬鏁�
+    /// </summary>
+    public class UpdateWcsBoxInfoInput : WcsBoxInfoBaseInput
+    {
+        /// <summary>
+        /// 涓婚敭Id
+        /// </summary>
+        [Required(ErrorMessage = "涓婚敭Id涓嶈兘涓虹┖")]
+        public long Id { get; set; }
+        
+    }
+
+    /// <summary>
+    /// 绠辩爜鏄庣粏琛ㄤ富閿煡璇㈣緭鍏ュ弬鏁�
+    /// </summary>
+    public class QueryByIdWcsBoxInfoInput : DeleteWcsBoxInfoInput
+    {
+
+    }
diff --git a/Admin.NET/WCS.Application/Service/WcsBoxInfo/Dto/WcsBoxInfoOutput.cs b/Admin.NET/WCS.Application/Service/WcsBoxInfo/Dto/WcsBoxInfoOutput.cs
new file mode 100644
index 0000000..2d2787b
--- /dev/null
+++ b/Admin.NET/WCS.Application/Service/WcsBoxInfo/Dto/WcsBoxInfoOutput.cs
@@ -0,0 +1,156 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+namespace WCS.Application;
+
+/// <summary>
+/// 绠辩爜鏄庣粏琛ㄨ緭鍑哄弬鏁�
+/// </summary>
+public class WcsBoxInfoOutput
+{
+    /// <summary>
+    /// 涓婚敭Id
+    /// </summary>
+    public long Id { get; set; }
+    
+    /// <summary>
+    /// 鎵樼洏鍙�
+    /// </summary>
+    public string? PalletNo { get; set; }
+    
+    /// <summary>
+    /// 鐗╂枡缂栫爜
+    /// </summary>
+    public string? SkuNo { get; set; }
+    
+    /// <summary>
+    /// 鐗╂枡鍚嶇О
+    /// </summary>
+    public string? SkuName { get; set; }
+    
+    /// <summary>
+    /// 鎵规鍙�
+    /// </summary>
+    public string? LotNo { get; set; }
+    
+    /// <summary>
+    /// 鎵规鎻忚堪
+    /// </summary>
+    public string? LotText { get; set; }
+    
+    /// <summary>
+    /// 渚涘簲鍟嗕唬鐮�
+    /// </summary>
+    public string? Custom { get; set; }
+    
+    /// <summary>
+    /// 渚涘簲鍟嗗悕绉�
+    /// </summary>
+    public string? CustomName { get; set; }
+    
+    /// <summary>
+    /// 鐢熶骇鏃ユ湡
+    /// </summary>
+    public DateTime? ProductionTime { get; set; }
+    
+    /// <summary>
+    /// 杩囨湡鏃ユ湡
+    /// </summary>
+    public DateTime? ExpirationTime { get; set; }
+    
+    /// <summary>
+    /// 浜х嚎
+    /// </summary>
+    public string? LineNo { get; set; }
+    
+    /// <summary>
+    /// 鐗╂枡瑙勬牸
+    /// </summary>
+    public string? Standard { get; set; }
+    
+    /// <summary>
+    /// 鍖呰瑙勬牸
+    /// </summary>
+    public string? PackageStandard { get; set; }
+    
+    /// <summary>
+    /// 鍖呰鍗曚綅
+    /// </summary>
+    public string? PackUnit { get; set; }
+    
+    /// <summary>
+    /// 瀛樺偍鏈熻嚦
+    /// </summary>
+    public DateTime? StoreTime { get; set; }
+    
+    /// <summary>
+    /// 闆剁鏍囪
+    /// </summary>
+    public string? BitBoxMark { get; set; }
+    
+    /// <summary>
+    /// 绠辩爜
+    /// </summary>
+    public string? BoxNo { get; set; }
+    
+    /// <summary>
+    /// 鐩掔爜
+    /// </summary>
+    public string? BoxNo2 { get; set; }
+    
+    /// <summary>
+    /// 鍖呰绾у埆
+    /// </summary>
+    public string? Level { get; set; }
+    
+    /// <summary>
+    /// 鍒涘缓鏃堕棿
+    /// </summary>
+    public DateTime? CreateTime { get; set; }
+    
+    /// <summary>
+    /// 鏇存柊鏃堕棿
+    /// </summary>
+    public DateTime? UpdateTime { get; set; }
+    
+    /// <summary>
+    /// 鍒涘缓鑰匢d
+    /// </summary>
+    public long? CreateUserId { get; set; }
+    
+    /// <summary>
+    /// 鍒涘缓鑰呭鍚�
+    /// </summary>
+    public string? CreateUserName { get; set; }
+    
+    /// <summary>
+    /// 淇敼鑰匢d
+    /// </summary>
+    public long? UpdateUserId { get; set; }
+    
+    /// <summary>
+    /// 淇敼鑰呭鍚�
+    /// </summary>
+    public string? UpdateUserName { get; set; }
+    
+    /// <summary>
+    /// 鍒涘缓鑰呴儴闂↖d
+    /// </summary>
+    public long? CreateOrgId { get; set; }
+    
+    /// <summary>
+    /// 鍒涘缓鑰呴儴闂ㄥ悕绉�
+    /// </summary>
+    public string? CreateOrgName { get; set; }
+    
+    /// <summary>
+    /// 杞垹闄�
+    /// </summary>
+    public bool IsDelete { get; set; }
+    
+    }
+ 
+
diff --git a/Admin.NET/WCS.Application/Service/WcsBoxInfo/Dto/WcsGroupBoxInfoDto.cs b/Admin.NET/WCS.Application/Service/WcsBoxInfo/Dto/WcsGroupBoxInfoDto.cs
new file mode 100644
index 0000000..6061587
--- /dev/null
+++ b/Admin.NET/WCS.Application/Service/WcsBoxInfo/Dto/WcsGroupBoxInfoDto.cs
@@ -0,0 +1,69 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WCS.Application.Service.WcsBoxInfo.Dto;
+public class WcsGroupBoxInfoDto
+{
+    /// <summary>
+    /// 鐗╂枡缂栫爜
+    /// </summary>
+    public string? SkuNo { get; set; }
+
+    /// <summary>
+    /// 鐗╂枡鍚嶇О
+    /// </summary>
+    public string? SkuName { get; set; }
+
+    /// <summary>
+    /// 鎵规鍙�
+    /// </summary>
+    public string? LotNo { get; set; }
+
+    /// <summary>
+    /// 鎵规鎻忚堪
+    /// </summary>
+    public string? LotText { get; set; }
+
+    /// <summary>
+    /// 渚涘簲鍟嗕唬鐮�
+    /// </summary>
+    public string? Custom { get; set; }
+
+    /// <summary>
+    /// 渚涘簲鍟嗗悕绉�
+    /// </summary>
+    public string? CustomName { get; set; }
+
+    /// <summary>
+    /// 鐢熶骇鏃ユ湡
+    /// </summary>
+    public DateTime? ProductionTime { get; set; }
+
+    /// <summary>
+    /// 杩囨湡鏃ユ湡
+    /// </summary>
+    public DateTime? ExpirationTime { get; set; }
+
+    /// <summary>
+    /// 鐗╂枡瑙勬牸
+    /// </summary>
+    public string? Standard { get; set; }
+
+    /// <summary>
+    /// 鍖呰瑙勬牸
+    /// </summary>
+    public string? PackageStandard { get; set; }
+
+    /// <summary>
+    /// 鍖呰鍗曚綅
+    /// </summary>
+    public string? PackUnit { get; set; }
+
+    /// <summary>
+    /// 瀛樺偍鏈熻嚦
+    /// </summary>
+    public DateTime? StoreTime { get; set; }
+}
diff --git a/Admin.NET/WCS.Application/Service/WcsBoxInfo/WcsBoxInfoService.cs b/Admin.NET/WCS.Application/Service/WcsBoxInfo/WcsBoxInfoService.cs
new file mode 100644
index 0000000..0f7685b
--- /dev/null
+++ b/Admin.NET/WCS.Application/Service/WcsBoxInfo/WcsBoxInfoService.cs
@@ -0,0 +1,179 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+using Admin.NET.Core.Service;
+using Microsoft.AspNetCore.Http;
+using System.Security.AccessControl;
+using WCS.Application.Entity;
+using WCS.Application.Service.WcsBoxInfo.Dto;
+namespace WCS.Application;
+
+/// <summary>
+/// 绠辩爜鏄庣粏琛ㄦ湇鍔�
+/// </summary>
+[ApiDescriptionSettings(ApplicationConst.GroupName, Order = 100)]
+public class WcsBoxInfoService : IDynamicApiController, ITransient
+{
+    private readonly SqlSugarRepository<WcsBoxInfo> _wcsBoxInfoRep;
+    public WcsBoxInfoService(SqlSugarRepository<WcsBoxInfo> wcsBoxInfoRep)
+    {
+        _wcsBoxInfoRep = wcsBoxInfoRep;
+    }
+
+    /// <summary>
+    /// 鍒嗛〉鏌ヨ绠辩爜鏄庣粏琛�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    [ApiDescriptionSettings(Name = "Page")]
+    [DisplayName("鍒嗛〉鏌ヨ绠辩爜鏄庣粏琛�")]
+    public async Task<SqlSugarPagedList<WcsBoxInfoOutput>> Page(PageWcsBoxInfoInput input)
+    {
+		input.SearchKey = input.SearchKey?.Trim();
+        var query = _wcsBoxInfoRep.AsQueryable()
+            .WhereIF(!string.IsNullOrEmpty(input.SearchKey), u =>
+                u.PalletNo.Contains(input.SearchKey)
+                || u.SkuNo.Contains(input.SearchKey)
+                || u.SkuName.Contains(input.SearchKey)
+                || u.LotNo.Contains(input.SearchKey)
+                || u.LotText.Contains(input.SearchKey)
+                || u.Custom.Contains(input.SearchKey)
+                || u.CustomName.Contains(input.SearchKey)
+                || u.LineNo.Contains(input.SearchKey)
+                || u.Standard.Contains(input.SearchKey)
+                || u.PackageStandard.Contains(input.SearchKey)
+                || u.PackUnit.Contains(input.SearchKey)
+                || u.BitBoxMark.Contains(input.SearchKey)
+                || u.BoxNo.Contains(input.SearchKey)
+                || u.BoxNo2.Contains(input.SearchKey)
+                || u.Level.Contains(input.SearchKey)
+            )
+            .WhereIF(!string.IsNullOrWhiteSpace(input.PalletNo), u => u.PalletNo.Contains(input.PalletNo.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.SkuNo), u => u.SkuNo.Contains(input.SkuNo.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.SkuName), u => u.SkuName.Contains(input.SkuName.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.LotNo), u => u.LotNo.Contains(input.LotNo.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.LotText), u => u.LotText.Contains(input.LotText.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.Custom), u => u.Custom.Contains(input.Custom.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.CustomName), u => u.CustomName.Contains(input.CustomName.Trim()))
+            .WhereIF(input.ProductionTimeRange != null && input.ProductionTimeRange.Length == 2, u => u.ProductionTime >= input.ProductionTimeRange[0] && u.ProductionTime <= input.ProductionTimeRange[1])
+            .WhereIF(input.ExpirationTimeRange != null && input.ExpirationTimeRange.Length == 2, u => u.ExpirationTime >= input.ExpirationTimeRange[0] && u.ExpirationTime <= input.ExpirationTimeRange[1])
+            .WhereIF(!string.IsNullOrWhiteSpace(input.LineNo), u => u.LineNo.Contains(input.LineNo.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.Standard), u => u.Standard.Contains(input.Standard.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.PackageStandard), u => u.PackageStandard.Contains(input.PackageStandard.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.PackUnit), u => u.PackUnit.Contains(input.PackUnit.Trim()))
+            .WhereIF(input.StoreTimeRange != null && input.StoreTimeRange.Length == 2, u => u.StoreTime >= input.StoreTimeRange[0] && u.StoreTime <= input.StoreTimeRange[1])
+            .WhereIF(!string.IsNullOrWhiteSpace(input.BitBoxMark), u => u.BitBoxMark.Contains(input.BitBoxMark.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.BoxNo), u => u.BoxNo.Contains(input.BoxNo.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.BoxNo2), u => u.BoxNo2.Contains(input.BoxNo2.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.Level), u => u.Level.Contains(input.Level.Trim()))
+            .Select<WcsBoxInfoOutput>();
+		return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize);
+    }
+
+    /// <summary>
+    /// 澧炲姞绠辩爜鏄庣粏琛�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    [ApiDescriptionSettings(Name = "Add")]
+    [DisplayName("澧炲姞绠辩爜鏄庣粏琛�")]
+    public async Task<long> Add(AddWcsBoxInfoInput input)
+    {
+        var entity = input.Adapt<WcsBoxInfo>();
+        await _wcsBoxInfoRep.InsertAsync(entity);
+        return entity.Id;
+    }
+
+    /// <summary>
+    /// 鍒犻櫎绠辩爜鏄庣粏琛�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    [ApiDescriptionSettings(Name = "Delete")]
+    [DisplayName("鍒犻櫎绠辩爜鏄庣粏琛�")]
+    public async Task Delete(DeleteWcsBoxInfoInput input)
+    {
+        var entity = await _wcsBoxInfoRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
+        await _wcsBoxInfoRep.FakeDeleteAsync(entity);   //鍋囧垹闄�
+        //await _wcsBoxInfoRep.DeleteAsync(entity);   //鐪熷垹闄�
+    }
+
+    /// <summary>
+    /// 鏇存柊绠辩爜鏄庣粏琛�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    [ApiDescriptionSettings(Name = "Update")]
+    [DisplayName("鏇存柊绠辩爜鏄庣粏琛�")]
+    public async Task Update(UpdateWcsBoxInfoInput input)
+    {
+        var entity = input.Adapt<WcsBoxInfo>();
+        await _wcsBoxInfoRep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
+    }
+
+    /// <summary>
+    /// 鑾峰彇绠辩爜鏄庣粏琛�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpGet]
+    [ApiDescriptionSettings(Name = "Detail")]
+    [DisplayName("鑾峰彇绠辩爜鏄庣粏琛�")]
+    public async Task<WcsBoxInfo> Detail([FromQuery] QueryByIdWcsBoxInfoInput input)
+    {
+        return await _wcsBoxInfoRep.GetFirstAsync(u => u.Id == input.Id);
+    }
+
+    /// <summary>
+    /// 鑾峰彇绠辩爜鏄庣粏琛ㄥ垪琛�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpGet]
+    [ApiDescriptionSettings(Name = "List")]
+    [DisplayName("鑾峰彇绠辩爜鏄庣粏琛ㄥ垪琛�")]
+    public async Task<List<WcsBoxInfoOutput>> List([FromQuery] PageWcsBoxInfoInput input)
+    {
+        return await _wcsBoxInfoRep.AsQueryable().Select<WcsBoxInfoOutput>().ToListAsync();
+    }
+
+
+
+    /// <summary>
+    /// 鑾峰彇绠辩爜鏄庣粏琛ㄥ垪琛�
+    /// </summary>
+    /// <returns></returns>
+    [HttpGet]
+    [ApiDescriptionSettings(Name = "GroupSkuList")]
+    [DisplayName("鑾峰彇鍒嗙粍绠辩爜淇℃伅")]
+    public async Task<List<WcsGroupBoxInfoDto>> GroupSkuList()
+    {
+        return await _wcsBoxInfoRep.AsQueryable()
+            .Select<WcsBoxInfo>()
+            .GroupBy(m => new { m.SkuNo, m.SkuName, m.LotNo, m.LotText, m.Custom, m.CustomName, m.ProductionTime, m.ExpirationTime, m.Standard, m.PackageStandard, m.PackUnit, m.StoreTime })
+            .Select(a => new WcsGroupBoxInfoDto()
+            {
+                SkuNo = a.SkuNo,
+                SkuName = a.SkuName,
+                LotNo = a.LotNo,
+                LotText = a.LotText,
+                Custom = a.Custom,
+                CustomName = a.CustomName,
+                ProductionTime = a.ProductionTime,
+                ExpirationTime = a.ExpirationTime,
+                Standard = a.Standard,
+                PackageStandard = a.PackageStandard,
+                PackUnit = a.PackUnit,
+                StoreTime = a.StoreTime
+            })
+            .ToListAsync();
+    }
+
+}
diff --git a/Admin.NET/WCS.Application/Service/WcsCheckTask/Dto/WcsCheckTaskDto.cs b/Admin.NET/WCS.Application/Service/WcsCheckTask/Dto/WcsCheckTaskDto.cs
new file mode 100644
index 0000000..77e43e1
--- /dev/null
+++ b/Admin.NET/WCS.Application/Service/WcsCheckTask/Dto/WcsCheckTaskDto.cs
@@ -0,0 +1,149 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+namespace WCS.Application;
+
+    /// <summary>
+    /// 鍒嗘嫞浠诲姟琛ㄨ緭鍑哄弬鏁�
+    /// </summary>
+    public class WcsCheckTaskDto
+    {
+        /// <summary>
+        /// 涓婚敭Id
+        /// </summary>
+        public long Id { get; set; }
+        
+        /// <summary>
+        /// WMS涓嬪彂鍗曞彿
+        /// </summary>
+        public string? OrderNo { get; set; }
+        
+        /// <summary>
+        /// 鏈哄櫒浜虹紪鍙�
+        /// </summary>
+        public string? RoboatNo { get; set; }
+        
+        /// <summary>
+        /// 鍒嗘嫞绾跨紪鍙�
+        /// </summary>
+        public string? LineNO { get; set; }
+        
+        /// <summary>
+        /// 鐮佺洏宸ヤ綅鍙�
+        /// </summary>
+        public string? Port { get; set; }
+        
+        /// <summary>
+        /// 鎵规鍙�
+        /// </summary>
+        public string? LotNo { get; set; }
+        
+        /// <summary>
+        /// 鐗╂枡缂栫爜
+        /// </summary>
+        public string? SkuNo { get; set; }
+        
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
+        public string? SkuName { get; set; }
+        
+        /// <summary>
+        /// 瑙勬牸
+        /// </summary>
+        public string? BoxType { get; set; }
+        
+        /// <summary>
+        /// 宸ヤ綅缁戝畾鐘舵��
+        /// </summary>
+        public string? Status { get; set; }
+        
+        /// <summary>
+        /// 鍝佺鍙�
+        /// </summary>
+        public string? PZNo { get; set; }
+        
+        /// <summary>
+        /// 鎵樼洏鍙�
+        /// </summary>
+        public string? PalletNo { get; set; }
+        
+        /// <summary>
+        /// 鎻掔爜鏁伴噺
+        /// </summary>
+        public int? BoxInsert { get; set; }
+        
+        /// <summary>
+        /// 鎵樼洏涓婄鏁伴噺
+        /// </summary>
+        public int? BoxCount { get; set; }
+        
+        /// <summary>
+        /// 鎬荤鏁�/璁″垝绠辨暟/棰勪及绠辨暟
+        /// </summary>
+        public int? Qty { get; set; }
+        
+        /// <summary>
+        /// 宸茬爜绠辨暟
+        /// </summary>
+        public int? FinishQty { get; set; }
+        
+        /// <summary>
+        /// 缁戝畾鏃堕棿
+        /// </summary>
+        public DateTime? BindTime { get; set; }
+        
+        /// <summary>
+        /// 缁戝畾鑰匢d
+        /// </summary>
+        public long? BindUserId { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+        public DateTime? CreateTime { get; set; }
+        
+        /// <summary>
+        /// 鏇存柊鏃堕棿
+        /// </summary>
+        public DateTime? UpdateTime { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰匢d
+        /// </summary>
+        public long? CreateUserId { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呭鍚�
+        /// </summary>
+        public string? CreateUserName { get; set; }
+        
+        /// <summary>
+        /// 淇敼鑰匢d
+        /// </summary>
+        public long? UpdateUserId { get; set; }
+        
+        /// <summary>
+        /// 淇敼鑰呭鍚�
+        /// </summary>
+        public string? UpdateUserName { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呴儴闂↖d
+        /// </summary>
+        public long? CreateOrgId { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呴儴闂ㄥ悕绉�
+        /// </summary>
+        public string? CreateOrgName { get; set; }
+        
+        /// <summary>
+        /// 杞垹闄�
+        /// </summary>
+        public bool IsDelete { get; set; }
+        
+    }
diff --git a/Admin.NET/WCS.Application/Service/WcsCheckTask/Dto/WcsCheckTaskInput.cs b/Admin.NET/WCS.Application/Service/WcsCheckTask/Dto/WcsCheckTaskInput.cs
new file mode 100644
index 0000000..f9ec4c8
--- /dev/null
+++ b/Admin.NET/WCS.Application/Service/WcsCheckTask/Dto/WcsCheckTaskInput.cs
@@ -0,0 +1,289 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+using Admin.NET.Core;
+using System.ComponentModel.DataAnnotations;
+
+namespace WCS.Application;
+
+    /// <summary>
+    /// 鍒嗘嫞浠诲姟琛ㄥ熀纭�杈撳叆鍙傛暟
+    /// </summary>
+    public class WcsCheckTaskBaseInput
+    {
+        /// <summary>
+        /// WMS涓嬪彂鍗曞彿
+        /// </summary>
+        public virtual string? OrderNo { get; set; }
+        
+        /// <summary>
+        /// 鏈哄櫒浜虹紪鍙�
+        /// </summary>
+        public virtual string? RoboatNo { get; set; }
+        
+        /// <summary>
+        /// 鍒嗘嫞绾跨紪鍙�
+        /// </summary>
+        public virtual string? LineNO { get; set; }
+        
+        /// <summary>
+        /// 鐮佺洏宸ヤ綅鍙�
+        /// </summary>
+        public virtual string? Port { get; set; }
+        
+        /// <summary>
+        /// 鎵规鍙�
+        /// </summary>
+        public virtual string? LotNo { get; set; }
+        
+        /// <summary>
+        /// 鐗╂枡缂栫爜
+        /// </summary>
+        public virtual string? SkuNo { get; set; }
+        
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
+        public virtual string? SkuName { get; set; }
+        
+        /// <summary>
+        /// 瑙勬牸
+        /// </summary>
+        public virtual string? BoxType { get; set; }
+        
+        /// <summary>
+        /// 宸ヤ綅缁戝畾鐘舵��
+        /// </summary>
+        public virtual string? Status { get; set; }
+        
+        /// <summary>
+        /// 鍝佺鍙�
+        /// </summary>
+        public virtual string? PZNo { get; set; }
+        
+        /// <summary>
+        /// 鎵樼洏鍙�
+        /// </summary>
+        public virtual string? PalletNo { get; set; }
+        
+        /// <summary>
+        /// 鎻掔爜鏁伴噺
+        /// </summary>
+        public virtual int? BoxInsert { get; set; }
+        
+        /// <summary>
+        /// 鎵樼洏涓婄鏁伴噺
+        /// </summary>
+        public virtual int? BoxCount { get; set; }
+        
+        /// <summary>
+        /// 鎬荤鏁�/璁″垝绠辨暟/棰勪及绠辨暟
+        /// </summary>
+        public virtual int? Qty { get; set; }
+        
+        /// <summary>
+        /// 宸茬爜绠辨暟
+        /// </summary>
+        public virtual int? FinishQty { get; set; }
+        
+        /// <summary>
+        /// 缁戝畾鏃堕棿
+        /// </summary>
+        public virtual DateTime? BindTime { get; set; }
+        
+        /// <summary>
+        /// 缁戝畾鑰匢d
+        /// </summary>
+        public virtual long? BindUserId { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+        public virtual DateTime? CreateTime { get; set; }
+        
+        /// <summary>
+        /// 鏇存柊鏃堕棿
+        /// </summary>
+        public virtual DateTime? UpdateTime { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰匢d
+        /// </summary>
+        public virtual long? CreateUserId { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呭鍚�
+        /// </summary>
+        public virtual string? CreateUserName { get; set; }
+        
+        /// <summary>
+        /// 淇敼鑰匢d
+        /// </summary>
+        public virtual long? UpdateUserId { get; set; }
+        
+        /// <summary>
+        /// 淇敼鑰呭鍚�
+        /// </summary>
+        public virtual string? UpdateUserName { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呴儴闂↖d
+        /// </summary>
+        public virtual long? CreateOrgId { get; set; }
+        
+        /// <summary>
+        /// 鍒涘缓鑰呴儴闂ㄥ悕绉�
+        /// </summary>
+        public virtual string? CreateOrgName { get; set; }
+        
+        /// <summary>
+        /// 杞垹闄�
+        /// </summary>
+        public virtual bool IsDelete { get; set; }
+        
+    }
+
+    /// <summary>
+    /// 鍒嗘嫞浠诲姟琛ㄥ垎椤垫煡璇㈣緭鍏ュ弬鏁�
+    /// </summary>
+    public class PageWcsCheckTaskInput : BasePageInput
+    {
+        /// <summary>
+        /// 鍏抽敭瀛楁煡璇�
+        /// </summary>
+        public string? SearchKey { get; set; }
+
+        /// <summary>
+        /// WMS涓嬪彂鍗曞彿
+        /// </summary>
+        public string? OrderNo { get; set; }
+        
+        /// <summary>
+        /// 鏈哄櫒浜虹紪鍙�
+        /// </summary>
+        public string? RoboatNo { get; set; }
+        
+        /// <summary>
+        /// 鍒嗘嫞绾跨紪鍙�
+        /// </summary>
+        public string? LineNO { get; set; }
+        
+        /// <summary>
+        /// 鐮佺洏宸ヤ綅鍙�
+        /// </summary>
+        public string? Port { get; set; }
+        
+        /// <summary>
+        /// 鎵规鍙�
+        /// </summary>
+        public string? LotNo { get; set; }
+        
+        /// <summary>
+        /// 鐗╂枡缂栫爜
+        /// </summary>
+        public string? SkuNo { get; set; }
+        
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
+        public string? SkuName { get; set; }
+        
+        /// <summary>
+        /// 瑙勬牸
+        /// </summary>
+        public string? BoxType { get; set; }
+        
+        /// <summary>
+        /// 宸ヤ綅缁戝畾鐘舵��
+        /// </summary>
+        public string? Status { get; set; }
+        
+        /// <summary>
+        /// 鍝佺鍙�
+        /// </summary>
+        public string? PZNo { get; set; }
+        
+        /// <summary>
+        /// 鎵樼洏鍙�
+        /// </summary>
+        public string? PalletNo { get; set; }
+        
+        /// <summary>
+        /// 鎻掔爜鏁伴噺
+        /// </summary>
+        public int? BoxInsert { get; set; }
+        
+        /// <summary>
+        /// 鎵樼洏涓婄鏁伴噺
+        /// </summary>
+        public int? BoxCount { get; set; }
+        
+        /// <summary>
+        /// 鎬荤鏁�/璁″垝绠辨暟/棰勪及绠辨暟
+        /// </summary>
+        public int? Qty { get; set; }
+        
+        /// <summary>
+        /// 宸茬爜绠辨暟
+        /// </summary>
+        public int? FinishQty { get; set; }
+        
+        /// <summary>
+        /// 缁戝畾鏃堕棿
+        /// </summary>
+        public DateTime? BindTime { get; set; }
+        
+        /// <summary>
+         /// 缁戝畾鏃堕棿鑼冨洿
+         /// </summary>
+         public DateTime?[] BindTimeRange { get; set; } 
+        /// <summary>
+        /// 缁戝畾鑰匢d
+        /// </summary>
+        public long? BindUserId { get; set; }
+        
+    }
+
+    /// <summary>
+    /// 鍒嗘嫞浠诲姟琛ㄥ鍔犺緭鍏ュ弬鏁�
+    /// </summary>
+    public class AddWcsCheckTaskInput : WcsCheckTaskBaseInput
+    {
+        /// <summary>
+        /// 杞垹闄�
+        /// </summary>
+        [Required(ErrorMessage = "杞垹闄や笉鑳戒负绌�")]
+        public override bool IsDelete { get; set; }
+        
+    }
+
+    /// <summary>
+    /// 鍒嗘嫞浠诲姟琛ㄥ垹闄よ緭鍏ュ弬鏁�
+    /// </summary>
+    public class DeleteWcsCheckTaskInput : BaseIdInput
+    {
+    }
+
+    /// <summary>
+    /// 鍒嗘嫞浠诲姟琛ㄦ洿鏂拌緭鍏ュ弬鏁�
+    /// </summary>
+    public class UpdateWcsCheckTaskInput : WcsCheckTaskBaseInput
+    {
+        /// <summary>
+        /// 涓婚敭Id
+        /// </summary>
+        [Required(ErrorMessage = "涓婚敭Id涓嶈兘涓虹┖")]
+        public long Id { get; set; }
+        
+    }
+
+    /// <summary>
+    /// 鍒嗘嫞浠诲姟琛ㄤ富閿煡璇㈣緭鍏ュ弬鏁�
+    /// </summary>
+    public class QueryByIdWcsCheckTaskInput : DeleteWcsCheckTaskInput
+    {
+
+    }
diff --git a/Admin.NET/WCS.Application/Service/WcsCheckTask/Dto/WcsCheckTaskOutput.cs b/Admin.NET/WCS.Application/Service/WcsCheckTask/Dto/WcsCheckTaskOutput.cs
new file mode 100644
index 0000000..66e3483
--- /dev/null
+++ b/Admin.NET/WCS.Application/Service/WcsCheckTask/Dto/WcsCheckTaskOutput.cs
@@ -0,0 +1,151 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+namespace WCS.Application;
+
+/// <summary>
+/// 鍒嗘嫞浠诲姟琛ㄨ緭鍑哄弬鏁�
+/// </summary>
+public class WcsCheckTaskOutput
+{
+    /// <summary>
+    /// 涓婚敭Id
+    /// </summary>
+    public long Id { get; set; }
+    
+    /// <summary>
+    /// WMS涓嬪彂鍗曞彿
+    /// </summary>
+    public string? OrderNo { get; set; }
+    
+    /// <summary>
+    /// 鏈哄櫒浜虹紪鍙�
+    /// </summary>
+    public string? RoboatNo { get; set; }
+    
+    /// <summary>
+    /// 鍒嗘嫞绾跨紪鍙�
+    /// </summary>
+    public string? LineNO { get; set; }
+    
+    /// <summary>
+    /// 鐮佺洏宸ヤ綅鍙�
+    /// </summary>
+    public string? Port { get; set; }
+    
+    /// <summary>
+    /// 鎵规鍙�
+    /// </summary>
+    public string? LotNo { get; set; }
+    
+    /// <summary>
+    /// 鐗╂枡缂栫爜
+    /// </summary>
+    public string? SkuNo { get; set; }
+    
+    /// <summary>
+    /// 鐗╂枡鍚嶇О
+    /// </summary>
+    public string? SkuName { get; set; }
+    
+    /// <summary>
+    /// 瑙勬牸
+    /// </summary>
+    public string? BoxType { get; set; }
+    
+    /// <summary>
+    /// 宸ヤ綅缁戝畾鐘舵��
+    /// </summary>
+    public string? Status { get; set; }
+    
+    /// <summary>
+    /// 鍝佺鍙�
+    /// </summary>
+    public string? PZNo { get; set; }
+    
+    /// <summary>
+    /// 鎵樼洏鍙�
+    /// </summary>
+    public string? PalletNo { get; set; }
+    
+    /// <summary>
+    /// 鎻掔爜鏁伴噺
+    /// </summary>
+    public int? BoxInsert { get; set; }
+    
+    /// <summary>
+    /// 鎵樼洏涓婄鏁伴噺
+    /// </summary>
+    public int? BoxCount { get; set; }
+    
+    /// <summary>
+    /// 鎬荤鏁�/璁″垝绠辨暟/棰勪及绠辨暟
+    /// </summary>
+    public int? Qty { get; set; }
+    
+    /// <summary>
+    /// 宸茬爜绠辨暟
+    /// </summary>
+    public int? FinishQty { get; set; }
+    
+    /// <summary>
+    /// 缁戝畾鏃堕棿
+    /// </summary>
+    public DateTime? BindTime { get; set; }
+    
+    /// <summary>
+    /// 缁戝畾鑰匢d
+    /// </summary>
+    public long? BindUserId { get; set; }
+    
+    /// <summary>
+    /// 鍒涘缓鏃堕棿
+    /// </summary>
+    public DateTime? CreateTime { get; set; }
+    
+    /// <summary>
+    /// 鏇存柊鏃堕棿
+    /// </summary>
+    public DateTime? UpdateTime { get; set; }
+    
+    /// <summary>
+    /// 鍒涘缓鑰匢d
+    /// </summary>
+    public long? CreateUserId { get; set; }
+    
+    /// <summary>
+    /// 鍒涘缓鑰呭鍚�
+    /// </summary>
+    public string? CreateUserName { get; set; }
+    
+    /// <summary>
+    /// 淇敼鑰匢d
+    /// </summary>
+    public long? UpdateUserId { get; set; }
+    
+    /// <summary>
+    /// 淇敼鑰呭鍚�
+    /// </summary>
+    public string? UpdateUserName { get; set; }
+    
+    /// <summary>
+    /// 鍒涘缓鑰呴儴闂↖d
+    /// </summary>
+    public long? CreateOrgId { get; set; }
+    
+    /// <summary>
+    /// 鍒涘缓鑰呴儴闂ㄥ悕绉�
+    /// </summary>
+    public string? CreateOrgName { get; set; }
+    
+    /// <summary>
+    /// 杞垹闄�
+    /// </summary>
+    public bool IsDelete { get; set; }
+    
+    }
+ 
+
diff --git a/Admin.NET/WCS.Application/Service/WcsCheckTask/WcsCheckTaskService.cs b/Admin.NET/WCS.Application/Service/WcsCheckTask/WcsCheckTaskService.cs
new file mode 100644
index 0000000..7963543
--- /dev/null
+++ b/Admin.NET/WCS.Application/Service/WcsCheckTask/WcsCheckTaskService.cs
@@ -0,0 +1,213 @@
+锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆�
+//
+// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆�
+//
+// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
+
+using Admin.NET.Core.Service;
+using AngleSharp.Dom;
+using Elastic.Clients.Elasticsearch.Tasks;
+using Microsoft.AspNetCore.Http;
+using WCS.Application.Entity;
+namespace WCS.Application;
+
+/// <summary>
+/// 鍒嗘嫞浠诲姟琛ㄦ湇鍔�
+/// </summary>
+[ApiDescriptionSettings(ApplicationConst.GroupName, Order = 100)]
+public class WcsCheckTaskService : IDynamicApiController, ITransient
+{
+    private readonly SqlSugarRepository<WcsCheckTask> _wcsCheckTaskRep;
+    private readonly SqlSugarRepository<WcsDevice> _wcsDeviceRep;
+    private readonly SqlSugarRepository<WcsOderTask> _wcsOderTaskRep;
+    public WcsCheckTaskService(SqlSugarRepository<WcsCheckTask> wcsCheckTaskRep, SqlSugarRepository<WcsDevice> wcsDeviceRep, SqlSugarRepository<WcsOderTask> wcsOderTaskRep)
+    {
+        _wcsCheckTaskRep = wcsCheckTaskRep;
+        _wcsDeviceRep = wcsDeviceRep;
+        _wcsOderTaskRep = wcsOderTaskRep;
+    }
+
+    /// <summary>
+    /// 鍒嗛〉鏌ヨ鍒嗘嫞浠诲姟琛�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    [ApiDescriptionSettings(Name = "Page")]
+    [DisplayName("鍒嗛〉鏌ヨ鍒嗘嫞浠诲姟琛�")]
+    public async Task<SqlSugarPagedList<WcsCheckTaskOutput>> Page(PageWcsCheckTaskInput input)
+    {
+		input.SearchKey = input.SearchKey?.Trim();
+        var query = _wcsCheckTaskRep.AsQueryable()
+            .WhereIF(!string.IsNullOrEmpty(input.SearchKey), u =>
+                u.OrderNo.Contains(input.SearchKey)
+                || u.RoboatNo.Contains(input.SearchKey)
+                || u.LineNO.Contains(input.SearchKey)
+                || u.Port.Contains(input.SearchKey)
+                || u.LotNo.Contains(input.SearchKey)
+                || u.SkuNo.Contains(input.SearchKey)
+                || u.SkuName.Contains(input.SearchKey)
+                || u.BoxType.Contains(input.SearchKey)
+                || u.Status.Contains(input.SearchKey)
+                || u.PZNo.Contains(input.SearchKey)
+                || u.PalletNo.Contains(input.SearchKey)
+            )
+            .WhereIF(!string.IsNullOrWhiteSpace(input.OrderNo), u => u.OrderNo.Contains(input.OrderNo.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.RoboatNo), u => u.RoboatNo.Contains(input.RoboatNo.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.LineNO), u => u.LineNO.Contains(input.LineNO.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.Port), u => u.Port.Contains(input.Port.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.LotNo), u => u.LotNo.Contains(input.LotNo.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.SkuNo), u => u.SkuNo.Contains(input.SkuNo.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.SkuName), u => u.SkuName.Contains(input.SkuName.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.BoxType), u => u.BoxType.Contains(input.BoxType.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.Status), u => u.Status.Contains(input.Status.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.PZNo), u => u.PZNo.Contains(input.PZNo.Trim()))
+            .WhereIF(!string.IsNullOrWhiteSpace(input.PalletNo), u => u.PalletNo.Contains(input.PalletNo.Trim()))
+            .WhereIF(input.BoxInsert>0, u => u.BoxInsert == input.BoxInsert)
+            .WhereIF(input.BoxCount>0, u => u.BoxCount == input.BoxCount)
+            .WhereIF(input.Qty>0, u => u.Qty == input.Qty)
+            .WhereIF(input.FinishQty>0, u => u.FinishQty == input.FinishQty)
+            .WhereIF(input.BindTimeRange != null && input.BindTimeRange.Length == 2, u => u.BindTime >= input.BindTimeRange[0] && u.BindTime <= input.BindTimeRange[1])
+            .WhereIF(input.BindUserId>0, u => u.BindUserId == input.BindUserId)
+            .Select<WcsCheckTaskOutput>();
+		return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize);
+    }
+
+    /// <summary>
+    /// 澧炲姞鍒嗘嫞浠诲姟琛�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    [ApiDescriptionSettings(Name = "Add")]
+    [DisplayName("澧炲姞鍒嗘嫞浠诲姟琛�")]
+    public async Task<long> Add(AddWcsCheckTaskInput input)
+    {
+        var entity = input.Adapt<WcsCheckTask>();
+        await _wcsCheckTaskRep.InsertAsync(entity);
+        return entity.Id;
+    }
+
+    /// <summary>
+    /// 鍒犻櫎鍒嗘嫞浠诲姟琛�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    [ApiDescriptionSettings(Name = "Delete")]
+    [DisplayName("鍒犻櫎鍒嗘嫞浠诲姟琛�")]
+    public async Task Delete(DeleteWcsCheckTaskInput input)
+    {
+        var entity = await _wcsCheckTaskRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
+        await _wcsCheckTaskRep.FakeDeleteAsync(entity);   //鍋囧垹闄�
+        //await _wcsCheckTaskRep.DeleteAsync(entity);   //鐪熷垹闄�
+    }
+
+    /// <summary>
+    /// 鏇存柊鍒嗘嫞浠诲姟琛�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    [ApiDescriptionSettings(Name = "Update")]
+    [DisplayName("鏇存柊鍒嗘嫞浠诲姟琛�")]
+    public async Task Update(UpdateWcsCheckTaskInput input)
+    {
+        var entity = input.Adapt<WcsCheckTask>();
+        await _wcsCheckTaskRep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
+    }
+
+    /// <summary>
+    /// 鑾峰彇鍒嗘嫞浠诲姟琛�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpGet]
+    [ApiDescriptionSettings(Name = "Detail")]
+    [DisplayName("鑾峰彇鍒嗘嫞浠诲姟琛�")]
+    public async Task<WcsCheckTask> Detail([FromQuery] QueryByIdWcsCheckTaskInput input)
+    {
+        return await _wcsCheckTaskRep.GetFirstAsync(u => u.Id == input.Id);
+    }
+
+    /// <summary>
+    /// 鑾峰彇鍒嗘嫞浠诲姟琛ㄥ垪琛�
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpGet]
+    [ApiDescriptionSettings(Name = "List")]
+    [DisplayName("鑾峰彇鍒嗘嫞浠诲姟琛ㄥ垪琛�")]
+    public async Task<List<WcsCheckTaskOutput>> List([FromQuery] PageWcsCheckTaskInput input)
+    {
+        return await _wcsCheckTaskRep.AsQueryable().Select<WcsCheckTaskOutput>().ToListAsync();
+    }
+
+    /// <summary>
+    /// 鎵嬪姩缁戝畾浠诲姟鍒癙LC
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    [HttpPost]
+    [ApiDescriptionSettings(Name = "BindTaskForPLC")]
+    [DisplayName("鎵嬪姩缁戝畾浠诲姟鍒癙LC")]
+    public async Task BindTaskForPLC(BindTaskPLCInput input)
+    {
+        var deviceInfo = await _wcsDeviceRep.GetByIdAsync(input.deviceId);
+        if (deviceInfo == null)
+        {
+            throw Oops.Oh("璁惧宸ヤ綅淇℃伅涓嶅瓨鍦�");
+        }
+        var taskInfo = await _wcsOderTaskRep.GetByIdAsync(input.oderTaskId);
+        if (taskInfo == null)
+        {
+            throw Oops.Oh("浠诲姟淇℃伅涓嶅瓨鍦�");
+        }
+        if (taskInfo.Status > TaskStatusEnum.Doing)
+        {
+            throw Oops.Oh("浠诲姟鐘舵�佸紓甯�");
+        }
+        //鍒嗘嫞浠诲姟淇℃伅
+        var checkTaskInfo = await _wcsCheckTaskRep.Context.Queryable<WcsCheckTask>().Where(w => w.Port == deviceInfo.StationNum).FirstAsync();
+        if (checkTaskInfo == null)
+        {
+            throw Oops.Oh("鍒嗘嫞浠诲姟淇℃伅涓嶅瓨鍦�");
+        }
+        if (checkTaskInfo.Status != "0")
+        {
+            throw Oops.Oh("璇ュ伐浣嶅凡缁戝畾浠诲姟锛岃鍕垮啀娆$粦瀹�");
+        }
+        checkTaskInfo.OrderNo = taskInfo.OrderNo;
+        checkTaskInfo.LotNo = taskInfo.LotNo;
+        checkTaskInfo.SkuNo = taskInfo.SkuNo;
+        checkTaskInfo.SkuName = taskInfo.SkuName;
+        checkTaskInfo.BoxType = taskInfo.BoxType;
+        checkTaskInfo.Qty = taskInfo.Qty;
+        checkTaskInfo.Status = "1";//宸茬粦瀹�
+        //鏇存柊鍒嗘嫞浠诲姟
+        await _wcsCheckTaskRep.AsUpdateable(checkTaskInfo).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
+    }
+
+    [HttpPost]
+    [ApiDescriptionSettings(Name = "CloseTaskForPLC")]
+    [DisplayName("浠诲姟缁撴壒")]
+    public async Task CloseTaskForPLC(BindTaskPLCInput input)
+    {
+        #region 璇锋眰PLC鎺ュ彛
+        #endregion
+        //鍒嗘嫞浠诲姟淇℃伅
+        var checkTaskList = _wcsCheckTaskRep.Context.Queryable<WcsCheckTask>().Where(w => w.LotNo == input.lotNo && w.Status == "1").ToList();
+        foreach (var item in checkTaskList)
+        {
+            item.OrderNo = "";
+            item.LotNo = "";
+            item.SkuNo = "";
+            item.SkuName = "";
+            item.BoxType = "";
+            item.Qty = 0;
+            item.Status = "0";//鏈粦瀹�           
+        }
+        //鏇存柊鍒嗘嫞浠诲姟
+        await _wcsCheckTaskRep.AsUpdateable(checkTaskList).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
+    }
+}
diff --git a/Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceTaskOrderDto.cs b/Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceTaskOrderDto.cs
new file mode 100644
index 0000000..8099e82
--- /dev/null
+++ b/Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceTaskOrderDto.cs
@@ -0,0 +1,21 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WCS.Application.Service.WcsDevice.Dto;
+public class WcsDeviceTaskOrderDto
+{
+    public long Id { get; set; }
+    public string Text { get; set; }
+    public string? OrderNo { get; set; }
+    public string? LotNo { get; set; }
+    public string? SkuNo { get; set; }
+    public string? SkuName { get; set; }
+    public string? Status { get; set; }
+    /// <summary>
+    /// 鎬荤鏁�/璁″垝绠辨暟/棰勪及绠辨暟
+    /// </summary>
+    public int? Qty { get; set; }
+}
diff --git a/Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs b/Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs
index dce21ac..713e769 100644
--- a/Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs
+++ b/Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs
@@ -1,6 +1,8 @@
 锘�
 using Admin.NET.Core.Service;
 using Elastic.Clients.Elasticsearch;
+using WCS.Application.Entity;
+using WCS.Application.Service.WcsDevice.Dto;
 
 namespace WCS.Application;
 
@@ -302,11 +304,23 @@
     [HttpGet]
     [ApiDescriptionSettings(Name = "WcsPackStationPlcList")]
     [DisplayName("鑾峰彇璁惧瀵瑰簲宸ヤ綅鍒楄〃")]
-    public async Task<List<WcsDevice>> WcsPackStationPlcList([FromQuery]WcsDeviceBaseInput entry)
-    {
+    public async Task<List<WcsDeviceTaskOrderDto>> WcsPackStationPlcList([FromQuery]WcsDeviceBaseInput entry)
+    {       
         return await _wcsDeviceRep.Context.Queryable<WcsDevice>()
-                .Where(w => w.PlcId == entry.PlcId)
-                .OrderBy(o => o.CreateTime)
+                .LeftJoin<WcsCheckTask>((device, task) => device.StationNum == task.Port)
+                .Where((device, task) => device.PlcId == entry.PlcId)
+                .OrderBy((device, task) => device.CreateTime)
+                .Select((device, task) => new WcsDeviceTaskOrderDto()
+                {
+                    Id=device.Id,
+                    Text=device.Text,
+                    OrderNo=task.OrderNo,
+                    LotNo=task.LotNo,
+                    SkuNo=task.SkuNo,
+                    SkuName=task.SkuName,
+                    Status=task.Status,
+                    Qty=task.Qty
+                })
                 .ToListAsync();
     }
     #endregion
diff --git a/Admin.NET/WCS.Application/Service/WcsOderTask/Dto/WcsOderTaskInput.cs b/Admin.NET/WCS.Application/Service/WcsOderTask/Dto/WcsOderTaskInput.cs
index c6833de..17e567c 100644
--- a/Admin.NET/WCS.Application/Service/WcsOderTask/Dto/WcsOderTaskInput.cs
+++ b/Admin.NET/WCS.Application/Service/WcsOderTask/Dto/WcsOderTaskInput.cs
@@ -198,3 +198,15 @@
     {
 
     }
+
+    /// <summary>
+    /// 缁戝畾浠诲姟鍒癙LC鍙傛暟
+    /// </summary>
+    public class BindTaskPLCInput
+    {
+        public long deviceId { get; set; }
+
+        public long oderTaskId { get; set; }
+
+        public string lotNo { get; set; }
+}
\ No newline at end of file
diff --git a/Admin.NET/WCS.Application/Service/WcsOderTask/WcsOderTaskService.cs b/Admin.NET/WCS.Application/Service/WcsOderTask/WcsOderTaskService.cs
index 6b52677..2ae22c5 100644
--- a/Admin.NET/WCS.Application/Service/WcsOderTask/WcsOderTaskService.cs
+++ b/Admin.NET/WCS.Application/Service/WcsOderTask/WcsOderTaskService.cs
@@ -5,6 +5,7 @@
 // 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛�
 
 using Admin.NET.Core.Service;
+using AngleSharp.Dom;
 using Microsoft.AspNetCore.Http;
 using WCS.Application.Entity;
 namespace WCS.Application;
@@ -127,9 +128,4 @@
     {
         return await _wcsOderTaskRep.AsQueryable().Select<WcsOderTaskOutput>().ToListAsync();
     }
-
-
-
-
-
 }
diff --git a/Web/src/api/device/wcsOderTask.ts b/Web/src/api/device/wcsOderTask.ts
index b4f1a69..f05c09d 100644
--- a/Web/src/api/device/wcsOderTask.ts
+++ b/Web/src/api/device/wcsOderTask.ts
@@ -5,6 +5,8 @@
   UpdateWcsOderTask = '/api/wcsOderTask/update',
   PageWcsOderTask = '/api/wcsOderTask/page',
   DetailWcsOderTask = '/api/wcsOderTask/detail',
+
+  GetGroupSkuList = '/api/WcsBoxInfo/GroupSkuList',
 }
 
 // 澧炲姞鍒嗘嫞浠诲姟
@@ -47,4 +49,11 @@
 			data: { id },
 		});
 
+// 鍒嗛〉鏌ヨ鍒嗘嫞浠诲姟
+export const GetGroupSkuList = () => 
+	request({
+			url: Api.GetGroupSkuList,
+			method: 'get',
+		});
+
 
diff --git a/Web/src/api/main/wcsBoxInfo.ts b/Web/src/api/main/wcsBoxInfo.ts
new file mode 100644
index 0000000..b607e0b
--- /dev/null
+++ b/Web/src/api/main/wcsBoxInfo.ts
@@ -0,0 +1,50 @@
+锘縤mport request from '/@/utils/request';
+enum Api {
+  AddWcsBoxInfo = '/api/wcsBoxInfo/add',
+  DeleteWcsBoxInfo = '/api/wcsBoxInfo/delete',
+  UpdateWcsBoxInfo = '/api/wcsBoxInfo/update',
+  PageWcsBoxInfo = '/api/wcsBoxInfo/page',
+  DetailWcsBoxInfo = '/api/wcsBoxInfo/detail',
+}
+
+// 澧炲姞绠辩爜鏄庣粏琛�
+export const addWcsBoxInfo = (params?: any) =>
+	request({
+		url: Api.AddWcsBoxInfo,
+		method: 'post',
+		data: params,
+	});
+
+// 鍒犻櫎绠辩爜鏄庣粏琛�
+export const deleteWcsBoxInfo = (params?: any) => 
+	request({
+			url: Api.DeleteWcsBoxInfo,
+			method: 'post',
+			data: params,
+		});
+
+// 缂栬緫绠辩爜鏄庣粏琛�
+export const updateWcsBoxInfo = (params?: any) => 
+	request({
+			url: Api.UpdateWcsBoxInfo,
+			method: 'post',
+			data: params,
+		});
+
+// 鍒嗛〉鏌ヨ绠辩爜鏄庣粏琛�
+export const pageWcsBoxInfo = (params?: any) => 
+	request({
+			url: Api.PageWcsBoxInfo,
+			method: 'post',
+			data: params,
+		});
+
+// 璇︽儏绠辩爜鏄庣粏琛�
+export const detailWcsBoxInfo = (id: any) => 
+	request({
+			url: Api.DetailWcsBoxInfo,
+			method: 'get',
+			data: { id },
+		});
+
+
diff --git a/Web/src/api/main/wcsCheckTask.ts b/Web/src/api/main/wcsCheckTask.ts
new file mode 100644
index 0000000..c81d130
--- /dev/null
+++ b/Web/src/api/main/wcsCheckTask.ts
@@ -0,0 +1,50 @@
+锘縤mport request from '/@/utils/request';
+enum Api {
+  AddWcsCheckTask = '/api/wcsCheckTask/add',
+  DeleteWcsCheckTask = '/api/wcsCheckTask/delete',
+  UpdateWcsCheckTask = '/api/wcsCheckTask/update',
+  PageWcsCheckTask = '/api/wcsCheckTask/page',
+  DetailWcsCheckTask = '/api/wcsCheckTask/detail',
+}
+
+// 澧炲姞鍒嗘嫞浠诲姟琛�
+export const addWcsCheckTask = (params?: any) =>
+	request({
+		url: Api.AddWcsCheckTask,
+		method: 'post',
+		data: params,
+	});
+
+// 鍒犻櫎鍒嗘嫞浠诲姟琛�
+export const deleteWcsCheckTask = (params?: any) => 
+	request({
+			url: Api.DeleteWcsCheckTask,
+			method: 'post',
+			data: params,
+		});
+
+// 缂栬緫鍒嗘嫞浠诲姟琛�
+export const updateWcsCheckTask = (params?: any) => 
+	request({
+			url: Api.UpdateWcsCheckTask,
+			method: 'post',
+			data: params,
+		});
+
+// 鍒嗛〉鏌ヨ鍒嗘嫞浠诲姟琛�
+export const pageWcsCheckTask = (params?: any) => 
+	request({
+			url: Api.PageWcsCheckTask,
+			method: 'post',
+			data: params,
+		});
+
+// 璇︽儏鍒嗘嫞浠诲姟琛�
+export const detailWcsCheckTask = (id: any) => 
+	request({
+			url: Api.DetailWcsCheckTask,
+			method: 'get',
+			data: { id },
+		});
+
+
diff --git a/Web/src/api/wcs/wcsDevice.ts b/Web/src/api/wcs/wcsDevice.ts
index dde139f..4561735 100644
--- a/Web/src/api/wcs/wcsDevice.ts
+++ b/Web/src/api/wcs/wcsDevice.ts
@@ -11,6 +11,8 @@
 
   GetWcsPackPlcList='/api/wcsDevice/WcsPackPlcList',
   GetWcsPackStationPlcList='/api/wcsDevice/WcsPackStationPlcList',
+  BindTaskForPLC='/api/WcsCheckTask/BindTaskForPLC',
+  CloseTaskForPLC='/api/WcsCheckTask/CloseTaskForPLC',
 }
 
 // 澧炲姞璁惧淇℃伅
@@ -75,13 +77,28 @@
 
 export const GetWcsPackPlcList = () =>
 	request({
-	url: Api.GetWcsPackPlcList,
-	method: 'get'
+		url: Api.GetWcsPackPlcList,
+		method: 'get'
 });
 
 export const GetWcsPackStationPlcList = (params?: any) =>
 	request({
-	url: Api.GetWcsPackStationPlcList,
-	method: 'get',
-	data: params
+		url: Api.GetWcsPackStationPlcList,
+		method: 'get',
+		data: params
+});
+
+// 鎵嬪姩缁戝畾浠诲姟鍒癙LC
+export const BindTaskForPLC = (params?: any) => 
+	request({
+		url: Api.BindTaskForPLC,
+		method: 'post',
+		data: params,
+});
+//浠诲姟缁撴壒
+export const CloseTaskForPLC = (params?: any) => 
+	request({
+		url: Api.CloseTaskForPLC,
+		method: 'post',
+		data: params,
 });
\ No newline at end of file
diff --git a/Web/src/views/device/sortPallet/index.vue b/Web/src/views/device/sortPallet/index.vue
index 2a94f23..1612713 100644
--- a/Web/src/views/device/sortPallet/index.vue
+++ b/Web/src/views/device/sortPallet/index.vue
@@ -19,53 +19,51 @@
                     <el-card class="other-box-card" v-for="deviceInfo in devicePointData" :key="deviceInfo.id">
                         <div slot="header" class="linefix">
                             <span>{{ deviceInfo.text }}</span>
-                            <div :class="['lineStatus', { 'device-status-0': deviceInfo.status === 0 }, { 'device-status-1': deviceInfo.status === 1 }]"></div>
+                            <div :class="['lineStatus', 'device-status-0']"></div>
+                            <!-- <div :class="['lineStatus', { 'device-status-0': deviceInfo.status === 0 }, { 'device-status-1': deviceInfo.status === 1 }]"></div> -->
                         </div>
                         <div class="otherValuefix" >
                             <el-form label-position="left" label-width="90px">
                                 <el-form-item label="WMS鏄庣粏鍗曞彿">
-                                    <el-input></el-input>
+                                    <el-input v-model="deviceInfo.orderNo" readonly></el-input>
                                 </el-form-item>
-                                <el-form-item label="浠诲姟鍙�">
-                                    <el-input v-model="deviceInfo.taskNumber"></el-input>
-                                </el-form-item>
+                                <!-- <el-form-item label="浠诲姟鍙�">
+                                    <el-input v-model=""></el-input>
+                                </el-form-item> -->
                                 <el-form-item label="鎵规鍙�">
-                                    <el-input></el-input>
+                                    <el-input v-model="deviceInfo.lotNo" readonly></el-input>
                                 </el-form-item>
                                 <el-form-item label="鐗╂枡缂栫爜">
-                                    <el-input></el-input>
+                                    <el-input v-model="deviceInfo.skuNo" readonly></el-input>
                                 </el-form-item>
                                 <el-form-item label="鐗╂枡鍚嶇О">
-                                    <el-input></el-input>
-                                </el-form-item>
-                                <el-form-item label="鍖呰鍚嶇О">
-                                    <el-input></el-input>
+                                    <el-input v-model="deviceInfo.skuName" readonly></el-input>
                                 </el-form-item>
                                 <el-form-item label="缁戝畾鐘舵��">
-                                    <el-input></el-input>
+                                    <el-input :value="deviceInfo.status === '0' ? '鏈粦瀹�' : '宸茬粦瀹�'" readonly></el-input>
                                 </el-form-item>
                                 <el-form-item label="鎶撶鍝佺">
-                                    <el-input></el-input>
+                                    <el-input readonly></el-input>
                                 </el-form-item>
                                 <el-form-item label="鎵樼洏鍙�">
-                                    <el-input></el-input>
+                                    <el-input readonly></el-input>
                                 </el-form-item>
                                 <el-form-item label="鎻掔爜鏁伴噺">
-                                    <el-input></el-input>
+                                    <el-input readonly></el-input>
                                 </el-form-item>                               
                                 <el-form-item label="鎵樼洏涓婄鏁伴噺">
-                                    <el-input></el-input>
+                                    <el-input readonly></el-input>
                                 </el-form-item>
                                 <el-form-item label="WMS涓嬪彂鏁伴噺">
-                                    <el-input></el-input>
+                                    <el-input v-model="deviceInfo.qty" readonly></el-input>
                                 </el-form-item>
                             </el-form>
                         </div>
                         <div class="otherButtonfix">
                             <el-form label-position="left">
                                 <el-form-item>
-                                    <el-button type="primary" @click="openBindDialog()">缁戝畾</el-button>
-                                    <el-button>缁撴壒</el-button>
+                                    <el-button type="primary" @click="openBindDialog(deviceInfo.id)">缁戝畾</el-button>
+                                    <el-button @click="closeBindDialog(deviceInfo.lotNo)">缁撴壒</el-button>
                                 </el-form-item>
                             </el-form>
                         </div>
@@ -80,9 +78,7 @@
                 :data="bindData" 
                 highlight-current-row 
                 @row-click="handleRowClick"                
-                >
-                <el-table-column type="selection" width="55"/>
-                
+                >                
                 <el-table-column prop="orderNo" label="WMS涓嬪彂鍗曞彿"  show-overflow-tooltip="" />
                 <el-table-column prop="taskNo" label="浠诲姟鍙�"  show-overflow-tooltip="" />
                 <el-table-column prop="lotNo" label="鎵规鍙�"  show-overflow-tooltip="" />
@@ -101,8 +97,9 @@
   
 <script lang="ts" setup>
 import { ref } from 'vue';
-import { GetWcsPackPlcList,GetWcsPackStationPlcList } from '/@/api/wcs/wcsDevice';
+import { GetWcsPackPlcList,GetWcsPackStationPlcList,BindTaskForPLC,CloseTaskForPLC } from '/@/api/wcs/wcsDevice';
 import { pageWcsOderTask } from '/@/api/device/wcsOderTask';
+import { ElMessageBox,ElMessage } from 'element-plus';
 
 //璁惧鏁版嵁
 const deviceList=ref<any>([]);
@@ -110,6 +107,8 @@
 const devicePointData = ref<any>([]);
 //閫変腑璁惧ID
 const selectedDeviceId=ref<any>();
+//閫変腑宸ヤ綅ID
+const selectedStationId=ref<any>();
 
 const bindDialogVisible = ref(false);
 const bindData = ref<any>([]);
@@ -141,7 +140,7 @@
 //鍒囨崲璁惧
 function chooseDevice(id) {
     selectedDeviceId.value = id;
-    fetchStationData(id);
+    fetchStationData(selectedDeviceId.value);
 }
 
 const handleQuery = async () => {
@@ -150,9 +149,13 @@
     tableParams.value.total = res.data.result?.total;
   };
 //鎵撳紑缁戝畾寮规
-function openBindDialog() {
+function openBindDialog(id) {
+    selectedStationId.value=null;
+    selectedRow.value=null;
+    
+    selectedStationId.value=id;
     bindDialogVisible.value = true;
-    // Mock data for binding
+
     handleQuery();
 }
 //鐐瑰嚮琛屾椂璁剧疆閫変腑琛�
@@ -163,13 +166,46 @@
 //纭缁戝畾鎿嶄綔
 function confirmBinding() {
     if (selectedRow.value) {
-        console.log('Selected Row:', selectedRow.value);
-        // Do binding logic here
+        //鎵嬪姩缁戝畾浠诲姟鍒癙LC
+        bindTaskForPLC(selectedStationId.value,selectedRow.value.id);
+
         bindDialogVisible.value = false;
     } else {
-        console.error('No row selected');
+        ElMessage.error('璇烽�夋嫨瑕佺粦瀹氱殑浠诲姟锛�');
     }
 }
+const bindTaskForPLC = async (deviceId: any,oderTaskId:any) => {
+    const res = await BindTaskForPLC({ deviceId,oderTaskId });
+    if(res.status==200){
+        ElMessage.success('缁戝畾鎴愬姛锛�');
+        // 鍒锋柊
+        fetchStationData(selectedDeviceId.value);
+    }
+}
+//缁撴壒鎿嶄綔
+function closeBindDialog(lotNo){
+    if(lotNo==''){
+        ElMessage.error('璇ュ伐浣嶆湭缁戝畾浠诲姟锛�');
+        return;
+    }
+    ElMessageBox.confirm(`纭畾瀵硅鎵规浠诲姟缁撴壒鍚�?`, '鎻愮ず', {
+		confirmButtonText: '纭畾',
+		cancelButtonText: '鍙栨秷',
+		type: 'warning',
+	})
+    .then(async () => {
+        closeTaskForPLC(lotNo);
+    })
+    .catch(() => {});
+}
+const closeTaskForPLC = async (lotNo: string) => {
+    const res = await CloseTaskForPLC({ lotNo });
+    if(res.status==200){
+        ElMessage.success('缁撴壒鎴愬姛锛�');
+        // 鍒锋柊
+        fetchStationData(selectedDeviceId.value);
+    }
+}   
 
 </script>
 
diff --git a/Web/src/views/device/wcsOderTask/component/editDialog.vue b/Web/src/views/device/wcsOderTask/component/editDialog.vue
index 757ff67..29bd0c4 100644
--- a/Web/src/views/device/wcsOderTask/component/editDialog.vue
+++ b/Web/src/views/device/wcsOderTask/component/editDialog.vue
@@ -42,8 +42,8 @@
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 						<el-form-item label="鐗╂枡鍚嶇О" prop="skuName">
-							<el-input v-model="ruleForm.skuName" placeholder="璇疯緭鍏ョ墿鏂欏悕绉�" maxlength="50" show-word-limit clearable />
-							
+							<el-input v-model="ruleForm.skuName" placeholder="璇疯緭鍏ョ墿鏂欏悕绉�" maxlength="50" show-word-limit clearable/>
+							<el-button type="primary" icon="el-icon-search" @click="openBindDialog()">鎼滅储鐗╂枡</el-button>
 						</el-form-item>
 						
 					</el-col>
@@ -81,7 +81,7 @@
 						</el-form-item>
 						
 					</el-col>
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+					<!-- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 						<el-form-item label="鏄惁鍥為鎴愬姛" prop="isSuccess">
 							<el-select clearable v-model="ruleForm.isSuccess" placeholder="璇烽�夋嫨鏄惁鍥為鎴愬姛">
 								<el-option v-for="(item,index) in dl('TaskSuccessEnum')" :key="index" :value="Number(item.value)" :label="`${item.name} (${item.code}) [${item.value}]`"></el-option>
@@ -104,7 +104,7 @@
 							
 						</el-form-item>
 						
-					</el-col>
+					</el-col> -->
 				</el-row>
 			</el-form>
 			<template #footer>
@@ -114,6 +114,32 @@
 				</span>
 			</template>
 		</el-dialog>
+
+		<!-- 缁戝畾浠诲姟寮规 -->
+		<el-dialog v-model="bindDialogVisible" title="閫夋嫨鏁版嵁">
+            <el-table
+                :data="bindBoxData" 
+                highlight-current-row 
+                @row-click="handleRowClick"                
+                >                
+                <el-table-column prop="skuNo" label="鐗╂枡缂栫爜"  show-overflow-tooltip="" />
+                <el-table-column prop="skuName" label="鐗╂枡鍚嶇О"  show-overflow-tooltip="" />
+                <el-table-column prop="lotNo" label="鎵规鍙�"  show-overflow-tooltip="" />
+                <el-table-column prop="lotText" label="鎵规鎻忚堪"  show-overflow-tooltip="" />
+                <el-table-column prop="custom" label="渚涘簲鍟嗕唬鐮�"  show-overflow-tooltip="" />
+                <el-table-column prop="customName" label="渚涘簲鍟嗗悕绉�"  show-overflow-tooltip="" />
+                <el-table-column prop="productionTime" label="鐢熶骇鏃ユ湡"  show-overflow-tooltip="" />
+				<el-table-column prop="expirationTime" label="杩囨湡鏃ユ湡"  show-overflow-tooltip="" />
+				<el-table-column prop="standard" label="鐗╂枡瑙勬牸"  show-overflow-tooltip="" />
+				<el-table-column prop="packageStandard" label="鍖呰瑙勬牸"  show-overflow-tooltip="" />
+				<el-table-column prop="packUnit" label="鍖呰鍗曚綅"  show-overflow-tooltip="" />
+				<el-table-column prop="storeTime" label="瀛樺偍鏈熻嚦"  show-overflow-tooltip="" />
+            </el-table>
+            <div slot="footer" class="dialog-footer">
+                <el-button @click="bindDialogVisible = false">鍙栨秷</el-button>
+                <el-button type="primary" @click="confirmBinding">纭</el-button>
+            </div>
+        </el-dialog>
 	</div>
 </template>
 <style lang="scss" scoped>
@@ -129,7 +155,7 @@
 	import { getDictDataItem as di, getDictDataList as dl } from '/@/utils/dict-utils';
 	import { getDictLabelByVal as dv } from '/@/utils/dict-utils';
   	import { formatDate } from '/@/utils/formatTime';
-	import { addWcsOderTask, updateWcsOderTask, detailWcsOderTask } from "/@/api/device/wcsOderTask";
+	import { addWcsOderTask, updateWcsOderTask, detailWcsOderTask,GetGroupSkuList } from "/@/api/device/wcsOderTask";
 	import { getAPI } from '/@/utils/axios-utils';
 	import { SysEnumApi } from '/@/api-services/api';
 
@@ -153,6 +179,10 @@
 	onMounted(() => {
 
 	});
+
+	const bindDialogVisible = ref(false);
+	const bindBoxData = ref<any>([]);
+	const selectedRow = ref<any>(null);
 
 	// 鎵撳紑寮圭獥
 	const openDialog = async (row: any) => {
@@ -198,10 +228,37 @@
 	};
 
 
+	const handleQuery = async () => {
+		var res = await GetGroupSkuList();
+		console.log('res:'+res)
+		bindBoxData.value = res.data.result;
+	};
+	//鎵撳紑缁戝畾寮规
+	function openBindDialog() {
+		selectedRow.value=null;
+		
+		bindDialogVisible.value = true;
 
+		handleQuery();
+	}
 
+	//鐐瑰嚮琛屾椂璁剧疆閫変腑琛�
+	function handleRowClick(row) {
+		selectedRow.value = row;
+	}
 
-
+	//纭閫夋嫨鐗╂枡鎿嶄綔
+	function confirmBinding() {
+		if (selectedRow.value) {
+			ruleForm.value.skuNo=selectedRow.value.skuNo;
+			ruleForm.value.skuName=selectedRow.value.skuName;
+			ruleForm.value.lotNo=selectedRow.value.lotNo;
+			ruleForm.value.Standard=selectedRow.value.Standard;
+			bindDialogVisible.value = false;
+		} else {
+			ElMessage.error('璇烽�夋嫨鐗╂枡锛�');
+		}
+	}
 	//灏嗗睘鎬ф垨鑰呭嚱鏁版毚闇茬粰鐖剁粍浠�
 	defineExpose({ openDialog });
 </script>
diff --git a/Web/src/views/main/wcsBoxInfo/component/editDialog.vue b/Web/src/views/main/wcsBoxInfo/component/editDialog.vue
new file mode 100644
index 0000000..856893c
--- /dev/null
+++ b/Web/src/views/main/wcsBoxInfo/component/editDialog.vue
@@ -0,0 +1,240 @@
+锘�<template>
+	<div class="wcsBoxInfo-container">
+		<el-dialog v-model="isShowDialog" :width="800" draggable="" :close-on-click-modal="false">
+			<template #header>
+				<div style="color: #fff">
+					<!--<el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle"> <ele-Edit /> </el-icon>-->
+					<span>{{ props.title }}</span>
+				</div>
+			</template>
+			<el-form :model="ruleForm" ref="ruleFormRef" label-width="auto" :rules="rules">
+				<el-row :gutter="35">
+					<el-form-item v-show="false">
+						<el-input v-model="ruleForm.id" />
+					</el-form-item>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鎵樼洏鍙�" prop="palletNo">
+							<el-input v-model="ruleForm.palletNo" placeholder="璇疯緭鍏ユ墭鐩樺彿" maxlength="20" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鐗╂枡缂栫爜" prop="skuNo">
+							<el-input v-model="ruleForm.skuNo" placeholder="璇疯緭鍏ョ墿鏂欑紪鐮�" maxlength="20" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鐗╂枡鍚嶇О" prop="skuName">
+							<el-input v-model="ruleForm.skuName" placeholder="璇疯緭鍏ョ墿鏂欏悕绉�" maxlength="20" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鎵规鍙�" prop="lotNo">
+							<el-input v-model="ruleForm.lotNo" placeholder="璇疯緭鍏ユ壒娆″彿" maxlength="20" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鎵规鎻忚堪" prop="lotText">
+							<el-input v-model="ruleForm.lotText" placeholder="璇疯緭鍏ユ壒娆℃弿杩�" maxlength="50" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="渚涘簲鍟嗕唬鐮�" prop="custom">
+							<el-input v-model="ruleForm.custom" placeholder="璇疯緭鍏ヤ緵搴斿晢浠g爜" maxlength="20" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="渚涘簲鍟嗗悕绉�" prop="customName">
+							<el-input v-model="ruleForm.customName" placeholder="璇疯緭鍏ヤ緵搴斿晢鍚嶇О" maxlength="50" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鐢熶骇鏃ユ湡" prop="productionTime">
+							<el-date-picker v-model="ruleForm.productionTime" type="date" placeholder="鐢熶骇鏃ユ湡" />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="杩囨湡鏃ユ湡" prop="expirationTime">
+							<el-date-picker v-model="ruleForm.expirationTime" type="date" placeholder="杩囨湡鏃ユ湡" />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="浜х嚎" prop="lineNo">
+							<el-input v-model="ruleForm.lineNo" placeholder="璇疯緭鍏ヤ骇绾�" maxlength="20" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鐗╂枡瑙勬牸" prop="standard">
+							<el-input v-model="ruleForm.standard" placeholder="璇疯緭鍏ョ墿鏂欒鏍�" maxlength="20" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鍖呰瑙勬牸" prop="packageStandard">
+							<el-input v-model="ruleForm.packageStandard" placeholder="璇疯緭鍏ュ寘瑁呰鏍�" maxlength="20" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鍖呰鍗曚綅" prop="packUnit">
+							<el-input v-model="ruleForm.packUnit" placeholder="璇疯緭鍏ュ寘瑁呭崟浣�" maxlength="20" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="瀛樺偍鏈熻嚦" prop="storeTime">
+							<el-date-picker v-model="ruleForm.storeTime" type="date" placeholder="瀛樺偍鏈熻嚦" />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="闆剁鏍囪" prop="bitBoxMark">
+							<el-input v-model="ruleForm.bitBoxMark" placeholder="璇疯緭鍏ラ浂绠辨爣璁�" maxlength="3" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="绠辩爜" prop="boxNo">
+							<el-input v-model="ruleForm.boxNo" placeholder="璇疯緭鍏ョ鐮�" maxlength="30" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鐩掔爜" prop="boxNo2">
+							<el-input v-model="ruleForm.boxNo2" placeholder="璇疯緭鍏ョ洅鐮�" maxlength="30" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鍖呰绾у埆" prop="level">
+							<el-input v-model="ruleForm.level" placeholder="璇疯緭鍏ュ寘瑁呯骇鍒�" maxlength="3" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+				</el-row>
+			</el-form>
+			<template #footer>
+				<span class="dialog-footer">
+					<el-button @click="cancel">鍙� 娑�</el-button>
+					<el-button type="primary" @click="submit">纭� 瀹�</el-button>
+				</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+<style lang="scss" scoped>
+:deep(.el-select),
+:deep(.el-input-number) {
+	width: 100%;
+}
+</style>
+<script lang="ts" setup>
+	import { ref,onMounted } from "vue";
+	import { ElMessage } from "element-plus";
+	import type { FormRules } from "element-plus";
+  	import { formatDate } from '/@/utils/formatTime';
+	import { addWcsBoxInfo, updateWcsBoxInfo, detailWcsBoxInfo } from "/@/api/main/wcsBoxInfo";
+
+	//鐖剁骇浼犻�掓潵鐨勫弬鏁�
+	var props = defineProps({
+		title: {
+		type: String,
+		default: "",
+	},
+	});
+	//鐖剁骇浼犻�掓潵鐨勫嚱鏁帮紝鐢ㄤ簬鍥炶皟
+	const emit = defineEmits(["reloadTable"]);
+	const ruleFormRef = ref();
+	const isShowDialog = ref(false);
+	const ruleForm = ref<any>({});
+	//鑷娣诲姞鍏朵粬瑙勫垯
+	const rules = ref<FormRules>({
+	});
+
+	// 椤甸潰鍔犺浇鏃�
+	onMounted(() => {
+
+	});
+
+	// 鎵撳紑寮圭獥
+	const openDialog = async (row: any) => {
+		// ruleForm.value = JSON.parse(JSON.stringify(row));
+		// 鏀圭敤detail鑾峰彇鏈�鏂版暟鎹潵缂栬緫
+		let rowData = JSON.parse(JSON.stringify(row));
+		if (rowData.id)
+			ruleForm.value = (await detailWcsBoxInfo(rowData.id)).data.result;
+		else
+			ruleForm.value = rowData;
+		isShowDialog.value = true;
+	};
+
+	// 鍏抽棴寮圭獥
+	const closeDialog = () => {
+		emit("reloadTable");
+		isShowDialog.value = false;
+	};
+
+	// 鍙栨秷
+	const cancel = () => {
+		isShowDialog.value = false;
+	};
+
+	// 鎻愪氦
+	const submit = async () => {
+		ruleFormRef.value.validate(async (isValid: boolean, fields?: any) => {
+			if (isValid) {
+				let values = ruleForm.value;
+				if (ruleForm.value.id == undefined || ruleForm.value.id == null || ruleForm.value.id == "" || ruleForm.value.id == 0) {
+					await addWcsBoxInfo(values);
+				} else {
+					await updateWcsBoxInfo(values);
+				}
+				closeDialog();
+			} else {
+				ElMessage({
+					message: `琛ㄥ崟鏈�${Object.keys(fields).length}澶勯獙璇佸け璐ワ紝璇蜂慨鏀瑰悗鍐嶆彁浜,
+					type: "error",
+				});
+			}
+		});
+	};
+
+
+
+
+
+
+	//灏嗗睘鎬ф垨鑰呭嚱鏁版毚闇茬粰鐖剁粍浠�
+	defineExpose({ openDialog });
+</script>
+
+
+
+
diff --git a/Web/src/views/main/wcsBoxInfo/index.vue b/Web/src/views/main/wcsBoxInfo/index.vue
new file mode 100644
index 0000000..431b2bd
--- /dev/null
+++ b/Web/src/views/main/wcsBoxInfo/index.vue
@@ -0,0 +1,296 @@
+锘�<template>
+  <div class="wcsBoxInfo-container">
+    <el-card shadow="hover" :body-style="{ paddingBottom: '0' }"> 
+      <el-form :model="queryParams" ref="queryForm" labelWidth="90">
+        <el-row>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
+            <el-form-item label="鍏抽敭瀛�">
+              <el-input v-model="queryParams.searchKey" clearable="" placeholder="璇疯緭鍏ユā绯婃煡璇㈠叧閿瓧"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="鎵樼洏鍙�">
+              <el-input v-model="queryParams.palletNo" clearable="" placeholder="璇疯緭鍏ユ墭鐩樺彿"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="鐗╂枡缂栫爜">
+              <el-input v-model="queryParams.skuNo" clearable="" placeholder="璇疯緭鍏ョ墿鏂欑紪鐮�"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="鐗╂枡鍚嶇О">
+              <el-input v-model="queryParams.skuName" clearable="" placeholder="璇疯緭鍏ョ墿鏂欏悕绉�"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="鎵规鍙�">
+              <el-input v-model="queryParams.lotNo" clearable="" placeholder="璇疯緭鍏ユ壒娆″彿"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="鎵规鎻忚堪">
+              <el-input v-model="queryParams.lotText" clearable="" placeholder="璇疯緭鍏ユ壒娆℃弿杩�"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="渚涘簲鍟嗕唬鐮�">
+              <el-input v-model="queryParams.custom" clearable="" placeholder="璇疯緭鍏ヤ緵搴斿晢浠g爜"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="渚涘簲鍟嗗悕绉�">
+              <el-input v-model="queryParams.customName" clearable="" placeholder="璇疯緭鍏ヤ緵搴斿晢鍚嶇О"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="鐢熶骇鏃ユ湡">
+              <el-date-picker type="daterange" v-model="queryParams.productionTimeRange"  value-format="YYYY-MM-DD HH:mm:ss" start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡" :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" />
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="杩囨湡鏃ユ湡">
+              <el-date-picker type="daterange" v-model="queryParams.expirationTimeRange"  value-format="YYYY-MM-DD HH:mm:ss" start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡" :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" />
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="浜х嚎">
+              <el-input v-model="queryParams.lineNo" clearable="" placeholder="璇疯緭鍏ヤ骇绾�"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="鐗╂枡瑙勬牸">
+              <el-input v-model="queryParams.standard" clearable="" placeholder="璇疯緭鍏ョ墿鏂欒鏍�"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="鍖呰瑙勬牸">
+              <el-input v-model="queryParams.packageStandard" clearable="" placeholder="璇疯緭鍏ュ寘瑁呰鏍�"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="鍖呰鍗曚綅">
+              <el-input v-model="queryParams.packUnit" clearable="" placeholder="璇疯緭鍏ュ寘瑁呭崟浣�"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="瀛樺偍鏈熻嚦">
+              <el-date-picker type="daterange" v-model="queryParams.storeTimeRange"  value-format="YYYY-MM-DD HH:mm:ss" start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡" :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" />
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="闆剁鏍囪">
+              <el-input v-model="queryParams.bitBoxMark" clearable="" placeholder="璇疯緭鍏ラ浂绠辨爣璁�"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="绠辩爜">
+              <el-input v-model="queryParams.boxNo" clearable="" placeholder="璇疯緭鍏ョ鐮�"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="鐩掔爜">
+              <el-input v-model="queryParams.boxNo2" clearable="" placeholder="璇疯緭鍏ョ洅鐮�"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="鍖呰绾у埆">
+              <el-input v-model="queryParams.level" clearable="" placeholder="璇疯緭鍏ュ寘瑁呯骇鍒�"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
+            <el-form-item >
+              <el-button-group style="display: flex; align-items: center;">
+                <el-button type="primary"  icon="ele-Search" @click="handleQuery" v-auth="'wcsBoxInfo:page'"> 鏌ヨ </el-button>
+                      <el-button icon="ele-Refresh" @click="() => queryParams = {}"> 閲嶇疆 </el-button>
+                        <el-button icon="ele-ZoomIn" @click="changeAdvanceQueryUI" v-if="!showAdvanceQueryUI" style="margin-left:5px;"> 楂樼骇鏌ヨ </el-button>
+                        <el-button icon="ele-ZoomOut" @click="changeAdvanceQueryUI" v-if="showAdvanceQueryUI" style="margin-left:5px;"> 闅愯棌 </el-button>
+                <el-button type="primary" style="margin-left:5px;" icon="ele-Plus" @click="openAddWcsBoxInfo" v-auth="'wcsBoxInfo:add'"> 鏂板 </el-button>
+                
+              </el-button-group>
+            </el-form-item>
+            
+          </el-col>
+        </el-row>
+      </el-form>
+    </el-card>
+    <el-card class="full-table" shadow="hover" style="margin-top: 5px">
+      <el-table
+				:data="tableData"
+				style="width: 100%"
+				v-loading="loading"
+				tooltip-effect="light"
+                				row-key="id"
+                @sort-change="sortChange"
+				border="">
+        <el-table-column type="index" label="搴忓彿" width="55" align="center"/>
+        <el-table-column prop="palletNo" label="鎵樼洏鍙�"  show-overflow-tooltip="" />
+        <el-table-column prop="skuNo" label="鐗╂枡缂栫爜"  show-overflow-tooltip="" />
+        <el-table-column prop="skuName" label="鐗╂枡鍚嶇О"  show-overflow-tooltip="" />
+        <el-table-column prop="lotNo" label="鎵规鍙�"  show-overflow-tooltip="" />
+        <el-table-column prop="lotText" label="鎵规鎻忚堪"  show-overflow-tooltip="" />
+        <el-table-column prop="custom" label="渚涘簲鍟嗕唬鐮�"  show-overflow-tooltip="" />
+        <el-table-column prop="customName" label="渚涘簲鍟嗗悕绉�"  show-overflow-tooltip="" />
+        <el-table-column prop="productionTime" label="鐢熶骇鏃ユ湡"  show-overflow-tooltip="" />
+        <el-table-column prop="expirationTime" label="杩囨湡鏃ユ湡"  show-overflow-tooltip="" />
+        <el-table-column prop="lineNo" label="浜х嚎"  show-overflow-tooltip="" />
+        <el-table-column prop="standard" label="鐗╂枡瑙勬牸"  show-overflow-tooltip="" />
+        <el-table-column prop="packageStandard" label="鍖呰瑙勬牸"  show-overflow-tooltip="" />
+        <el-table-column prop="packUnit" label="鍖呰鍗曚綅"  show-overflow-tooltip="" />
+        <el-table-column prop="storeTime" label="瀛樺偍鏈熻嚦"  show-overflow-tooltip="" />
+        <el-table-column prop="bitBoxMark" label="闆剁鏍囪"  show-overflow-tooltip="" />
+        <el-table-column prop="boxNo" label="绠辩爜"  show-overflow-tooltip="" />
+        <el-table-column prop="boxNo2" label="鐩掔爜"  show-overflow-tooltip="" />
+        <el-table-column prop="level" label="鍖呰绾у埆"  show-overflow-tooltip="" />
+        <el-table-column label="鎿嶄綔" width="140" align="center" fixed="right" show-overflow-tooltip="" v-if="auth('wcsBoxInfo:update') || auth('wcsBoxInfo:delete')">
+          <template #default="scope">
+            <el-button icon="ele-Edit" size="small" text="" type="primary" @click="openEditWcsBoxInfo(scope.row)" v-auth="'wcsBoxInfo:update'"> 缂栬緫 </el-button>
+            <el-button icon="ele-Delete" size="small" text="" type="primary" @click="delWcsBoxInfo(scope.row)" v-auth="'wcsBoxInfo:delete'"> 鍒犻櫎 </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <el-pagination
+				v-model:currentPage="tableParams.page"
+				v-model:page-size="tableParams.pageSize"
+				:total="tableParams.total"
+				:page-sizes="[10, 20, 50, 100, 200, 500]"
+				size="small"
+				background=""
+				@size-change="handleSizeChange"
+				@current-change="handleCurrentChange"
+				layout="total, sizes, prev, pager, next, jumper"
+	/>
+      <printDialog
+        ref="printDialogRef"
+        :title="printWcsBoxInfoTitle"
+        @reloadTable="handleQuery" />
+      <editDialog
+        ref="editDialogRef"
+        :title="editWcsBoxInfoTitle"
+        @reloadTable="handleQuery"
+      />
+    </el-card>
+  </div>
+</template>
+
+<script lang="ts" setup="" name="wcsBoxInfo">
+  import { ref } from "vue";
+  import { ElMessageBox, ElMessage } from "element-plus";
+  import { auth } from '/@/utils/authFunction';
+
+  import { formatDate } from '/@/utils/formatTime';
+
+
+  import printDialog from '/@/views/system/print/component/hiprint/preview.vue'
+  import editDialog from '/@/views/main/wcsBoxInfo/component/editDialog.vue'
+  import { pageWcsBoxInfo, deleteWcsBoxInfo } from '/@/api/main/wcsBoxInfo';
+
+  const showAdvanceQueryUI = ref(false);
+  const printDialogRef = ref();
+  const editDialogRef = ref();
+  const loading = ref(false);
+  const tableData = ref<any>([]);
+  const queryParams = ref<any>({});
+  const tableParams = ref({
+    page: 1,
+    pageSize: 10,
+    total: 0,
+  });
+
+  const printWcsBoxInfoTitle = ref("");
+  const editWcsBoxInfoTitle = ref("");
+
+  // 鏀瑰彉楂樼骇鏌ヨ鐨勬帶浠舵樉绀虹姸鎬�
+  const changeAdvanceQueryUI = () => {
+    showAdvanceQueryUI.value = !showAdvanceQueryUI.value;
+  }
+
+  // 鏌ヨ鎿嶄綔
+  const handleQuery = async () => {
+    loading.value = true;
+    var res = await pageWcsBoxInfo(Object.assign(queryParams.value, tableParams.value));
+    tableData.value = res.data.result?.items ?? [];
+    tableParams.value.total = res.data.result?.total;
+    loading.value = false;
+  };
+
+  // 鍒楁帓搴�
+  const sortChange = async (column: any) => {
+	queryParams.value.field = column.prop;
+	queryParams.value.order = column.order;
+	await handleQuery();
+  };
+
+  // 鎵撳紑鏂板椤甸潰
+  const openAddWcsBoxInfo = () => {
+    editWcsBoxInfoTitle.value = '娣诲姞绠辩爜鏄庣粏琛�';
+    editDialogRef.value.openDialog({});
+  };
+
+  // 鎵撳紑鎵撳嵃椤甸潰
+  const openPrintWcsBoxInfo = async (row: any) => {
+    printWcsBoxInfoTitle.value = '鎵撳嵃绠辩爜鏄庣粏琛�';
+  }
+  
+  // 鎵撳紑缂栬緫椤甸潰
+  const openEditWcsBoxInfo = (row: any) => {
+    editWcsBoxInfoTitle.value = '缂栬緫绠辩爜鏄庣粏琛�';
+    editDialogRef.value.openDialog(row);
+  };
+
+  // 鍒犻櫎
+  const delWcsBoxInfo = (row: any) => {
+    ElMessageBox.confirm(`纭畾瑕佸垹闄ゅ悧?`, "鎻愮ず", {
+    confirmButtonText: "纭畾",
+    cancelButtonText: "鍙栨秷",
+    type: "warning",
+  })
+  .then(async () => {
+    await deleteWcsBoxInfo(row);
+    handleQuery();
+    ElMessage.success("鍒犻櫎鎴愬姛");
+  })
+  .catch(() => {});
+  };
+
+  // 鏀瑰彉椤甸潰瀹归噺
+  const handleSizeChange = (val: number) => {
+    tableParams.value.pageSize = val;
+    handleQuery();
+  };
+
+  // 鏀瑰彉椤电爜搴忓彿
+  const handleCurrentChange = (val: number) => {
+    tableParams.value.page = val;
+    handleQuery();
+  };
+
+  handleQuery();
+</script>
+<style scoped>
+:deep(.el-input),
+:deep(.el-select),
+:deep(.el-input-number) {
+	width: 100%;
+}
+</style>
+
diff --git a/Web/src/views/main/wcsCheckTask/component/editDialog.vue b/Web/src/views/main/wcsCheckTask/component/editDialog.vue
new file mode 100644
index 0000000..5ed38e0
--- /dev/null
+++ b/Web/src/views/main/wcsCheckTask/component/editDialog.vue
@@ -0,0 +1,233 @@
+锘�<template>
+	<div class="wcsCheckTask-container">
+		<el-dialog v-model="isShowDialog" :width="800" draggable="" :close-on-click-modal="false">
+			<template #header>
+				<div style="color: #fff">
+					<!--<el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle"> <ele-Edit /> </el-icon>-->
+					<span>{{ props.title }}</span>
+				</div>
+			</template>
+			<el-form :model="ruleForm" ref="ruleFormRef" label-width="auto" :rules="rules">
+				<el-row :gutter="35">
+					<el-form-item v-show="false">
+						<el-input v-model="ruleForm.id" />
+					</el-form-item>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="WMS涓嬪彂鍗曞彿" prop="orderNo">
+							<el-input v-model="ruleForm.orderNo" placeholder="璇疯緭鍏MS涓嬪彂鍗曞彿" maxlength="20" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鏈哄櫒浜虹紪鍙�" prop="roboatNo">
+							<el-input v-model="ruleForm.roboatNo" placeholder="璇疯緭鍏ユ満鍣ㄤ汉缂栧彿" maxlength="5" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鍒嗘嫞绾跨紪鍙�" prop="lineNO">
+							<el-input v-model="ruleForm.lineNO" placeholder="璇疯緭鍏ュ垎鎷g嚎缂栧彿" maxlength="5" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鐮佺洏宸ヤ綅鍙�" prop="port">
+							<el-input v-model="ruleForm.port" placeholder="璇疯緭鍏ョ爜鐩樺伐浣嶅彿" maxlength="5" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鎵规鍙�" prop="lotNo">
+							<el-input v-model="ruleForm.lotNo" placeholder="璇疯緭鍏ユ壒娆″彿" maxlength="50" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鐗╂枡缂栫爜" prop="skuNo">
+							<el-input v-model="ruleForm.skuNo" placeholder="璇疯緭鍏ョ墿鏂欑紪鐮�" maxlength="20" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鐗╂枡鍚嶇О" prop="skuName">
+							<el-input v-model="ruleForm.skuName" placeholder="璇疯緭鍏ョ墿鏂欏悕绉�" maxlength="50" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="瑙勬牸" prop="boxType">
+							<el-input v-model="ruleForm.boxType" placeholder="璇疯緭鍏ヨ鏍�" maxlength="20" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="宸ヤ綅缁戝畾鐘舵��" prop="status">
+							<el-input v-model="ruleForm.status" placeholder="璇疯緭鍏ュ伐浣嶇粦瀹氱姸鎬�" maxlength="2" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鍝佺鍙�" prop="pZNo">
+							<el-input v-model="ruleForm.pZNo" placeholder="璇疯緭鍏ュ搧绉嶅彿" maxlength="10" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鎵樼洏鍙�" prop="palletNo">
+							<el-input v-model="ruleForm.palletNo" placeholder="璇疯緭鍏ユ墭鐩樺彿" maxlength="20" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鎻掔爜鏁伴噺" prop="boxInsert">
+							<el-input-number v-model="ruleForm.boxInsert" placeholder="璇疯緭鍏ユ彃鐮佹暟閲�" clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鎵樼洏涓婄鏁伴噺" prop="boxCount">
+							<el-input-number v-model="ruleForm.boxCount" placeholder="璇疯緭鍏ユ墭鐩樹笂绠辨暟閲�" clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="鎬荤鏁�/璁″垝绠辨暟/棰勪及绠辨暟" prop="qty">
+							<el-input-number v-model="ruleForm.qty" placeholder="璇疯緭鍏ユ�荤鏁�/璁″垝绠辨暟/棰勪及绠辨暟" clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="宸茬爜绠辨暟" prop="finishQty">
+							<el-input-number v-model="ruleForm.finishQty" placeholder="璇疯緭鍏ュ凡鐮佺鏁�" clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="缁戝畾鏃堕棿" prop="bindTime">
+							<el-date-picker v-model="ruleForm.bindTime" type="date" placeholder="缁戝畾鏃堕棿" />
+							
+						</el-form-item>
+						
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="缁戝畾鑰匢d" prop="bindUserId">
+							<el-input v-model="ruleForm.bindUserId" placeholder="璇疯緭鍏ョ粦瀹氳�匢d" maxlength="19" show-word-limit clearable />
+							
+						</el-form-item>
+						
+					</el-col>
+				</el-row>
+			</el-form>
+			<template #footer>
+				<span class="dialog-footer">
+					<el-button @click="cancel">鍙� 娑�</el-button>
+					<el-button type="primary" @click="submit">纭� 瀹�</el-button>
+				</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+<style lang="scss" scoped>
+:deep(.el-select),
+:deep(.el-input-number) {
+	width: 100%;
+}
+</style>
+<script lang="ts" setup>
+	import { ref,onMounted } from "vue";
+	import { ElMessage } from "element-plus";
+	import type { FormRules } from "element-plus";
+  	import { formatDate } from '/@/utils/formatTime';
+	import { addWcsCheckTask, updateWcsCheckTask, detailWcsCheckTask } from "/@/api/main/wcsCheckTask";
+
+	//鐖剁骇浼犻�掓潵鐨勫弬鏁�
+	var props = defineProps({
+		title: {
+		type: String,
+		default: "",
+	},
+	});
+	//鐖剁骇浼犻�掓潵鐨勫嚱鏁帮紝鐢ㄤ簬鍥炶皟
+	const emit = defineEmits(["reloadTable"]);
+	const ruleFormRef = ref();
+	const isShowDialog = ref(false);
+	const ruleForm = ref<any>({});
+	//鑷娣诲姞鍏朵粬瑙勫垯
+	const rules = ref<FormRules>({
+	});
+
+	// 椤甸潰鍔犺浇鏃�
+	onMounted(() => {
+
+	});
+
+	// 鎵撳紑寮圭獥
+	const openDialog = async (row: any) => {
+		// ruleForm.value = JSON.parse(JSON.stringify(row));
+		// 鏀圭敤detail鑾峰彇鏈�鏂版暟鎹潵缂栬緫
+		let rowData = JSON.parse(JSON.stringify(row));
+		if (rowData.id)
+			ruleForm.value = (await detailWcsCheckTask(rowData.id)).data.result;
+		else
+			ruleForm.value = rowData;
+		isShowDialog.value = true;
+	};
+
+	// 鍏抽棴寮圭獥
+	const closeDialog = () => {
+		emit("reloadTable");
+		isShowDialog.value = false;
+	};
+
+	// 鍙栨秷
+	const cancel = () => {
+		isShowDialog.value = false;
+	};
+
+	// 鎻愪氦
+	const submit = async () => {
+		ruleFormRef.value.validate(async (isValid: boolean, fields?: any) => {
+			if (isValid) {
+				let values = ruleForm.value;
+				if (ruleForm.value.id == undefined || ruleForm.value.id == null || ruleForm.value.id == "" || ruleForm.value.id == 0) {
+					await addWcsCheckTask(values);
+				} else {
+					await updateWcsCheckTask(values);
+				}
+				closeDialog();
+			} else {
+				ElMessage({
+					message: `琛ㄥ崟鏈�${Object.keys(fields).length}澶勯獙璇佸け璐ワ紝璇蜂慨鏀瑰悗鍐嶆彁浜,
+					type: "error",
+				});
+			}
+		});
+	};
+
+
+
+
+
+
+	//灏嗗睘鎬ф垨鑰呭嚱鏁版毚闇茬粰鐖剁粍浠�
+	defineExpose({ openDialog });
+</script>
+
+
+
+
diff --git a/Web/src/views/main/wcsCheckTask/index.vue b/Web/src/views/main/wcsCheckTask/index.vue
new file mode 100644
index 0000000..1330be9
--- /dev/null
+++ b/Web/src/views/main/wcsCheckTask/index.vue
@@ -0,0 +1,289 @@
+锘�<template>
+  <div class="wcsCheckTask-container">
+    <el-card shadow="hover" :body-style="{ paddingBottom: '0' }"> 
+      <el-form :model="queryParams" ref="queryForm" labelWidth="90">
+        <el-row>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
+            <el-form-item label="鍏抽敭瀛�">
+              <el-input v-model="queryParams.searchKey" clearable="" placeholder="璇疯緭鍏ユā绯婃煡璇㈠叧閿瓧"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="WMS涓嬪彂鍗曞彿">
+              <el-input v-model="queryParams.orderNo" clearable="" placeholder="璇疯緭鍏MS涓嬪彂鍗曞彿"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="鏈哄櫒浜虹紪鍙�">
+              <el-input v-model="queryParams.roboatNo" clearable="" placeholder="璇疯緭鍏ユ満鍣ㄤ汉缂栧彿"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="鍒嗘嫞绾跨紪鍙�">
+              <el-input v-model="queryParams.lineNO" clearable="" placeholder="璇疯緭鍏ュ垎鎷g嚎缂栧彿"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="鐮佺洏宸ヤ綅鍙�">
+              <el-input v-model="queryParams.port" clearable="" placeholder="璇疯緭鍏ョ爜鐩樺伐浣嶅彿"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="鎵规鍙�">
+              <el-input v-model="queryParams.lotNo" clearable="" placeholder="璇疯緭鍏ユ壒娆″彿"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="鐗╂枡缂栫爜">
+              <el-input v-model="queryParams.skuNo" clearable="" placeholder="璇疯緭鍏ョ墿鏂欑紪鐮�"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="鐗╂枡鍚嶇О">
+              <el-input v-model="queryParams.skuName" clearable="" placeholder="璇疯緭鍏ョ墿鏂欏悕绉�"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="瑙勬牸">
+              <el-input v-model="queryParams.boxType" clearable="" placeholder="璇疯緭鍏ヨ鏍�"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="宸ヤ綅缁戝畾鐘舵��">
+              <el-input v-model="queryParams.status" clearable="" placeholder="璇疯緭鍏ュ伐浣嶇粦瀹氱姸鎬�"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="鍝佺鍙�">
+              <el-input v-model="queryParams.pZNo" clearable="" placeholder="璇疯緭鍏ュ搧绉嶅彿"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="鎵樼洏鍙�">
+              <el-input v-model="queryParams.palletNo" clearable="" placeholder="璇疯緭鍏ユ墭鐩樺彿"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="鎻掔爜鏁伴噺">
+              <el-input-number v-model="queryParams.boxInsert"  clearable="" placeholder="璇疯緭鍏ユ彃鐮佹暟閲�"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="鎵樼洏涓婄鏁伴噺">
+              <el-input-number v-model="queryParams.boxCount"  clearable="" placeholder="璇疯緭鍏ユ墭鐩樹笂绠辨暟閲�"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="鎬荤鏁�/璁″垝绠辨暟/棰勪及绠辨暟">
+              <el-input-number v-model="queryParams.qty"  clearable="" placeholder="璇疯緭鍏ユ�荤鏁�/璁″垝绠辨暟/棰勪及绠辨暟"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="宸茬爜绠辨暟">
+              <el-input-number v-model="queryParams.finishQty"  clearable="" placeholder="璇疯緭鍏ュ凡鐮佺鏁�"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="缁戝畾鏃堕棿">
+              <el-date-picker type="daterange" v-model="queryParams.bindTimeRange"  value-format="YYYY-MM-DD HH:mm:ss" start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡" :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" />
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI">
+            <el-form-item label="缁戝畾鑰匢d">
+              <el-input v-model="queryParams.bindUserId" clearable="" placeholder="璇疯緭鍏ョ粦瀹氳�匢d"/>
+              
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10">
+            <el-form-item >
+              <el-button-group style="display: flex; align-items: center;">
+                <el-button type="primary"  icon="ele-Search" @click="handleQuery" v-auth="'wcsCheckTask:page'"> 鏌ヨ </el-button>
+                      <el-button icon="ele-Refresh" @click="() => queryParams = {}"> 閲嶇疆 </el-button>
+                        <el-button icon="ele-ZoomIn" @click="changeAdvanceQueryUI" v-if="!showAdvanceQueryUI" style="margin-left:5px;"> 楂樼骇鏌ヨ </el-button>
+                        <el-button icon="ele-ZoomOut" @click="changeAdvanceQueryUI" v-if="showAdvanceQueryUI" style="margin-left:5px;"> 闅愯棌 </el-button>
+                <el-button type="primary" style="margin-left:5px;" icon="ele-Plus" @click="openAddWcsCheckTask" v-auth="'wcsCheckTask:add'"> 鏂板 </el-button>
+                
+              </el-button-group>
+            </el-form-item>
+            
+          </el-col>
+        </el-row>
+      </el-form>
+    </el-card>
+    <el-card class="full-table" shadow="hover" style="margin-top: 5px">
+      <el-table
+				:data="tableData"
+				style="width: 100%"
+				v-loading="loading"
+				tooltip-effect="light"
+                				row-key="id"
+                @sort-change="sortChange"
+				border="">
+        <el-table-column type="index" label="搴忓彿" width="55" align="center"/>
+        <el-table-column prop="orderNo" label="WMS涓嬪彂鍗曞彿"  show-overflow-tooltip="" />
+        <el-table-column prop="roboatNo" label="鏈哄櫒浜虹紪鍙�"  show-overflow-tooltip="" />
+        <el-table-column prop="lineNO" label="鍒嗘嫞绾跨紪鍙�"  show-overflow-tooltip="" />
+        <el-table-column prop="port" label="鐮佺洏宸ヤ綅鍙�"  show-overflow-tooltip="" />
+        <el-table-column prop="lotNo" label="鎵规鍙�"  show-overflow-tooltip="" />
+        <el-table-column prop="skuNo" label="鐗╂枡缂栫爜"  show-overflow-tooltip="" />
+        <el-table-column prop="skuName" label="鐗╂枡鍚嶇О"  show-overflow-tooltip="" />
+        <el-table-column prop="boxType" label="瑙勬牸"  show-overflow-tooltip="" />
+        <el-table-column prop="status" label="宸ヤ綅缁戝畾鐘舵��"  show-overflow-tooltip="" />
+        <el-table-column prop="pZNo" label="鍝佺鍙�"  show-overflow-tooltip="" />
+        <el-table-column prop="palletNo" label="鎵樼洏鍙�"  show-overflow-tooltip="" />
+        <el-table-column prop="boxInsert" label="鎻掔爜鏁伴噺"  show-overflow-tooltip="" />
+        <el-table-column prop="boxCount" label="鎵樼洏涓婄鏁伴噺"  show-overflow-tooltip="" />
+        <el-table-column prop="qty" label="鎬荤鏁�/璁″垝绠辨暟/棰勪及绠辨暟"  show-overflow-tooltip="" />
+        <el-table-column prop="finishQty" label="宸茬爜绠辨暟"  show-overflow-tooltip="" />
+        <el-table-column prop="bindTime" label="缁戝畾鏃堕棿"  show-overflow-tooltip="" />
+        <el-table-column prop="bindUserId" label="缁戝畾鑰匢d"  show-overflow-tooltip="" />
+        <el-table-column label="鎿嶄綔" width="140" align="center" fixed="right" show-overflow-tooltip="" v-if="auth('wcsCheckTask:update') || auth('wcsCheckTask:delete')">
+          <template #default="scope">
+            <el-button icon="ele-Edit" size="small" text="" type="primary" @click="openEditWcsCheckTask(scope.row)" v-auth="'wcsCheckTask:update'"> 缂栬緫 </el-button>
+            <el-button icon="ele-Delete" size="small" text="" type="primary" @click="delWcsCheckTask(scope.row)" v-auth="'wcsCheckTask:delete'"> 鍒犻櫎 </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <el-pagination
+				v-model:currentPage="tableParams.page"
+				v-model:page-size="tableParams.pageSize"
+				:total="tableParams.total"
+				:page-sizes="[10, 20, 50, 100, 200, 500]"
+				size="small"
+				background=""
+				@size-change="handleSizeChange"
+				@current-change="handleCurrentChange"
+				layout="total, sizes, prev, pager, next, jumper"
+	/>
+      <printDialog
+        ref="printDialogRef"
+        :title="printWcsCheckTaskTitle"
+        @reloadTable="handleQuery" />
+      <editDialog
+        ref="editDialogRef"
+        :title="editWcsCheckTaskTitle"
+        @reloadTable="handleQuery"
+      />
+    </el-card>
+  </div>
+</template>
+
+<script lang="ts" setup="" name="wcsCheckTask">
+  import { ref } from "vue";
+  import { ElMessageBox, ElMessage } from "element-plus";
+  import { auth } from '/@/utils/authFunction';
+
+  import { formatDate } from '/@/utils/formatTime';
+
+
+  import printDialog from '/@/views/system/print/component/hiprint/preview.vue'
+  import editDialog from '/@/views/main/wcsCheckTask/component/editDialog.vue'
+  import { pageWcsCheckTask, deleteWcsCheckTask } from '/@/api/main/wcsCheckTask';
+
+  const showAdvanceQueryUI = ref(false);
+  const printDialogRef = ref();
+  const editDialogRef = ref();
+  const loading = ref(false);
+  const tableData = ref<any>([]);
+  const queryParams = ref<any>({});
+  const tableParams = ref({
+    page: 1,
+    pageSize: 10,
+    total: 0,
+  });
+
+  const printWcsCheckTaskTitle = ref("");
+  const editWcsCheckTaskTitle = ref("");
+
+  // 鏀瑰彉楂樼骇鏌ヨ鐨勬帶浠舵樉绀虹姸鎬�
+  const changeAdvanceQueryUI = () => {
+    showAdvanceQueryUI.value = !showAdvanceQueryUI.value;
+  }
+
+  // 鏌ヨ鎿嶄綔
+  const handleQuery = async () => {
+    loading.value = true;
+    var res = await pageWcsCheckTask(Object.assign(queryParams.value, tableParams.value));
+    tableData.value = res.data.result?.items ?? [];
+    tableParams.value.total = res.data.result?.total;
+    loading.value = false;
+  };
+
+  // 鍒楁帓搴�
+  const sortChange = async (column: any) => {
+	queryParams.value.field = column.prop;
+	queryParams.value.order = column.order;
+	await handleQuery();
+  };
+
+  // 鎵撳紑鏂板椤甸潰
+  const openAddWcsCheckTask = () => {
+    editWcsCheckTaskTitle.value = '娣诲姞鍒嗘嫞浠诲姟琛�';
+    editDialogRef.value.openDialog({});
+  };
+
+  // 鎵撳紑鎵撳嵃椤甸潰
+  const openPrintWcsCheckTask = async (row: any) => {
+    printWcsCheckTaskTitle.value = '鎵撳嵃鍒嗘嫞浠诲姟琛�';
+  }
+  
+  // 鎵撳紑缂栬緫椤甸潰
+  const openEditWcsCheckTask = (row: any) => {
+    editWcsCheckTaskTitle.value = '缂栬緫鍒嗘嫞浠诲姟琛�';
+    editDialogRef.value.openDialog(row);
+  };
+
+  // 鍒犻櫎
+  const delWcsCheckTask = (row: any) => {
+    ElMessageBox.confirm(`纭畾瑕佸垹闄ゅ悧?`, "鎻愮ず", {
+    confirmButtonText: "纭畾",
+    cancelButtonText: "鍙栨秷",
+    type: "warning",
+  })
+  .then(async () => {
+    await deleteWcsCheckTask(row);
+    handleQuery();
+    ElMessage.success("鍒犻櫎鎴愬姛");
+  })
+  .catch(() => {});
+  };
+
+  // 鏀瑰彉椤甸潰瀹归噺
+  const handleSizeChange = (val: number) => {
+    tableParams.value.pageSize = val;
+    handleQuery();
+  };
+
+  // 鏀瑰彉椤电爜搴忓彿
+  const handleCurrentChange = (val: number) => {
+    tableParams.value.page = val;
+    handleQuery();
+  };
+
+  handleQuery();
+</script>
+<style scoped>
+:deep(.el-input),
+:deep(.el-select),
+:deep(.el-input-number) {
+	width: 100%;
+}
+</style>
+

--
Gitblit v1.8.0