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