Admin.NET/WCS.Application/Entity/WcsOderTask.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Admin.NET/WCS.Application/Service/WcsOderTask/Dto/WcsOderTaskDto.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Admin.NET/WCS.Application/Service/WcsOderTask/Dto/WcsOderTaskInput.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Admin.NET/WCS.Application/Service/WcsOderTask/Dto/WcsOderTaskOutput.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Admin.NET/WCS.Application/Service/WcsOderTask/WcsOderTaskService.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Web/src/api/device/wcsOderTask.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Web/src/api/wcs/wcsDevice.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Web/src/views/device/sortPallet/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Web/src/views/device/wcsOderTask/component/editDialog.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Web/src/views/device/wcsOderTask/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Admin.NET/WCS.Application/Entity/WcsOderTask.cs
New file @@ -0,0 +1,83 @@ // Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。 // // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。 // // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! using Admin.NET.Core; namespace WCS.Application.Entity; /// <summary> /// WMS下发任务表 /// </summary> [SugarTable("WCSOderTask","WMS下发任务表")] [Tenant("1300000000001")] public class WcsOderTask : EntityBaseData { /// <summary> /// WMS下发单号 /// </summary> [SugarColumn(ColumnName = "OrderNo", ColumnDescription = "WMS下发单号", Length = 20)] public string? OrderNo { get; set; } /// <summary> /// 任务号 /// </summary> [SugarColumn(ColumnName = "TaskNo", ColumnDescription = "任务号", Length = 20)] public string? TaskNo { get; set; } /// <summary> /// 批次号 /// </summary> [SugarColumn(ColumnName = "LotNo", ColumnDescription = "批次号", Length = 50)] public string? LotNo { get; set; } /// <summary> /// 物料编码 /// </summary> [SugarColumn(ColumnName = "SkuNo", ColumnDescription = "物料编码", Length = 20)] public string? SkuNo { get; set; } /// <summary> /// 物料名称 /// </summary> [SugarColumn(ColumnName = "SkuName", ColumnDescription = "物料名称", Length = 50)] public string? SkuName { get; set; } /// <summary> /// 规格 /// </summary> [SugarColumn(ColumnName = "BoxType", ColumnDescription = "规格", Length = 20)] public string? BoxType { get; set; } /// <summary> /// 总箱数/计划箱数/预估箱数 /// </summary> [SugarColumn(ColumnName = "Qty", ColumnDescription = "总箱数/计划箱数/预估箱数")] public int? Qty { get; set; } /// <summary> /// 任务类型 /// </summary> [SugarColumn(ColumnName = "TaskType", ColumnDescription = "任务类型", Length = 3)] public TaskTypeEnum? TaskType { get; set; } /// <summary> /// 状态 /// </summary> [SugarColumn(ColumnName = "Status", ColumnDescription = "状态", Length = 3)] public TaskStatusEnum? Status { get; set; } /// <summary> /// 是否回馈成功 /// </summary> [SugarColumn(ColumnName = "IsSuccess", ColumnDescription = "是否回馈成功", Length = 3)] public TaskSuccessEnum? IsSuccess { get; set; } /// <summary> /// 异常信息 /// </summary> [SugarColumn(ColumnName = "Information", ColumnDescription = "异常信息", Length = 50)] public string? Information { get; set; } } Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs
@@ -292,6 +292,20 @@ } ).ToListAsync(); } /// <summary> /// 获取设备对应工位列表 /// </summary> /// <param name="entry"></param> /// <returns></returns> [HttpGet] [ApiDescriptionSettings(Name = "WcsPackStationPlcList")] [DisplayName("获取设备对应工位列表")] public async Task<List<WcsDevice>> WcsPackStationPlcList([FromQuery]WcsDeviceBaseInput entry) { return await _wcsDeviceRep.Context.Queryable<WcsDevice>() .Where(w => w.PlcId == entry.PlcId) .OrderBy(o => o.CreateTime) .ToListAsync(); } #endregion } Admin.NET/WCS.Application/Service/WcsOderTask/Dto/WcsOderTaskDto.cs
New file @@ -0,0 +1,89 @@ // Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。 // // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。 // // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! namespace WCS.Application; /// <summary> /// 分拣任务输出参数 /// </summary> public class WcsOderTaskDto { /// <summary> /// 主键Id /// </summary> public long Id { get; set; } /// <summary> /// WMS下发单号 /// </summary> public string? OrderNo { get; set; } /// <summary> /// 任务号 /// </summary> public string? TaskNo { 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 int? Qty { get; set; } /// <summary> /// 任务类型 /// </summary> public TaskTypeEnum TaskType { get; set; } /// <summary> /// 状态 /// </summary> public TaskStatusEnum Status { get; set; } /// <summary> /// 是否回馈成功 /// </summary> public TaskSuccessEnum IsSuccess { get; set; } /// <summary> /// 异常信息 /// </summary> public string? Information { get; set; } /// <summary> /// 创建时间 /// </summary> public DateTime? CreateTime { get; set; } /// <summary> /// 下发人 /// </summary> public int? CreateUser { get; set; } /// <summary> /// 软删除 /// </summary> public bool IsDelete { get; set; } } Admin.NET/WCS.Application/Service/WcsOderTask/Dto/WcsOderTaskInput.cs
New file @@ -0,0 +1,200 @@ // Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。 // // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。 // // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! using Admin.NET.Core; using System.ComponentModel.DataAnnotations; namespace WCS.Application; /// <summary> /// 分拣任务基础输入参数 /// </summary> public class WcsOderTaskBaseInput { /// <summary> /// WMS下发单号 /// </summary> public virtual string? OrderNo { get; set; } /// <summary> /// 任务号 /// </summary> public virtual string? TaskNo { 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 int? Qty { get; set; } /// <summary> /// 任务类型 /// </summary> public virtual TaskTypeEnum TaskType { get; set; } /// <summary> /// 状态 /// </summary> public virtual TaskStatusEnum Status { get; set; } /// <summary> /// 是否回馈成功 /// </summary> public virtual TaskSuccessEnum IsSuccess { get; set; } /// <summary> /// 异常信息 /// </summary> public virtual string? Information { get; set; } /// <summary> /// 创建时间 /// </summary> public virtual DateTime? CreateTime { get; set; } /// <summary> /// 下发人 /// </summary> public virtual int? CreateUser { get; set; } /// <summary> /// 软删除 /// </summary> public virtual bool IsDelete { get; set; } } /// <summary> /// 分拣任务分页查询输入参数 /// </summary> public class PageWcsOderTaskInput : BasePageInput { /// <summary> /// 关键字查询 /// </summary> public string? SearchKey { get; set; } /// <summary> /// WMS下发单号 /// </summary> public string? OrderNo { get; set; } /// <summary> /// 任务号 /// </summary> public string? TaskNo { 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 int? Qty { get; set; } /// <summary> /// 任务类型 /// </summary> public TaskTypeEnum? TaskType { get; set; } /// <summary> /// 状态 /// </summary> public TaskStatusEnum? Status { get; set; } /// <summary> /// 是否回馈成功 /// </summary> public TaskSuccessEnum? IsSuccess { get; set; } /// <summary> /// 异常信息 /// </summary> public string? Information { get; set; } /// <summary> /// 下发人 /// </summary> public string? CreateUserName { get; set; } } /// <summary> /// 分拣任务增加输入参数 /// </summary> public class AddWcsOderTaskInput : WcsOderTaskBaseInput { /// <summary> /// 软删除 /// </summary> [Required(ErrorMessage = "软删除不能为空")] public override bool IsDelete { get; set; } } /// <summary> /// 分拣任务删除输入参数 /// </summary> public class DeleteWcsOderTaskInput : BaseIdInput { } /// <summary> /// 分拣任务更新输入参数 /// </summary> public class UpdateWcsOderTaskInput : WcsOderTaskBaseInput { /// <summary> /// 主键Id /// </summary> [Required(ErrorMessage = "主键Id不能为空")] public long Id { get; set; } } /// <summary> /// 分拣任务主键查询输入参数 /// </summary> public class QueryByIdWcsOderTaskInput : DeleteWcsOderTaskInput { } Admin.NET/WCS.Application/Service/WcsOderTask/Dto/WcsOderTaskOutput.cs
New file @@ -0,0 +1,91 @@ // Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。 // // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。 // // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! namespace WCS.Application; /// <summary> /// 分拣任务输出参数 /// </summary> public class WcsOderTaskOutput { /// <summary> /// 主键Id /// </summary> public long Id { get; set; } /// <summary> /// WMS下发单号 /// </summary> public string? OrderNo { get; set; } /// <summary> /// 任务号 /// </summary> public string? TaskNo { 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 int? Qty { get; set; } /// <summary> /// 任务类型 /// </summary> public TaskTypeEnum TaskType { get; set; } /// <summary> /// 状态 /// </summary> public TaskStatusEnum Status { get; set; } /// <summary> /// 是否回馈成功 /// </summary> public TaskSuccessEnum IsSuccess { get; set; } /// <summary> /// 异常信息 /// </summary> public string? Information { get; set; } /// <summary> /// 创建时间 /// </summary> public DateTime? CreateTime { get; set; } /// <summary> /// 下发人 /// </summary> public int? CreateUser { get; set; } /// <summary> /// 软删除 /// </summary> public bool IsDelete { get; set; } } Admin.NET/WCS.Application/Service/WcsOderTask/WcsOderTaskService.cs
New file @@ -0,0 +1,135 @@ // Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。 // // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。 // // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! using Admin.NET.Core.Service; using Microsoft.AspNetCore.Http; using WCS.Application.Entity; namespace WCS.Application; /// <summary> /// 分拣任务服务 /// </summary> [ApiDescriptionSettings(ApplicationConst.GroupName, Order = 100)] public class WcsOderTaskService : IDynamicApiController, ITransient { private readonly SqlSugarRepository<WcsOderTask> _wcsOderTaskRep; public WcsOderTaskService(SqlSugarRepository<WcsOderTask> wcsOderTaskRep) { _wcsOderTaskRep = wcsOderTaskRep; } /// <summary> /// 分页查询分拣任务 /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost] [ApiDescriptionSettings(Name = "Page")] [DisplayName("分页查询分拣任务")] public async Task<SqlSugarPagedList<WcsOderTaskOutput>> Page(PageWcsOderTaskInput input) { input.SearchKey = input.SearchKey?.Trim(); var query = _wcsOderTaskRep.AsQueryable() .WhereIF(!string.IsNullOrEmpty(input.SearchKey), u => u.OrderNo.Contains(input.SearchKey) || u.TaskNo.Contains(input.SearchKey) || u.LotNo.Contains(input.SearchKey) || u.SkuNo.Contains(input.SearchKey) || u.SkuName.Contains(input.SearchKey) || u.BoxType.Contains(input.SearchKey) || u.Information.Contains(input.SearchKey) ) .WhereIF(!string.IsNullOrWhiteSpace(input.OrderNo), u => u.OrderNo.Contains(input.OrderNo.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.TaskNo), u => u.TaskNo.Contains(input.TaskNo.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(input.Qty>0, u => u.Qty == input.Qty) .WhereIF(input.TaskType.HasValue, u => u.TaskType == input.TaskType) .WhereIF(input.Status.HasValue, u => u.Status == input.Status) .WhereIF(input.IsSuccess.HasValue, u => u.IsSuccess == input.IsSuccess) .WhereIF(!string.IsNullOrWhiteSpace(input.Information), u => u.Information.Contains(input.Information.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.CreateUserName), u => u.OrderNo.Contains(input.CreateUserName.Trim())) .Select<WcsOderTaskOutput>(); 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(AddWcsOderTaskInput input) { var entity = input.Adapt<WcsOderTask>(); await _wcsOderTaskRep.InsertAsync(entity); return entity.Id; } /// <summary> /// 删除分拣任务 /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost] [ApiDescriptionSettings(Name = "Delete")] [DisplayName("删除分拣任务")] public async Task Delete(DeleteWcsOderTaskInput input) { var entity = await _wcsOderTaskRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002); await _wcsOderTaskRep.FakeDeleteAsync(entity); //假删除 //await _wcsOderTaskRep.DeleteAsync(entity); //真删除 } /// <summary> /// 更新分拣任务 /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpPost] [ApiDescriptionSettings(Name = "Update")] [DisplayName("更新分拣任务")] public async Task Update(UpdateWcsOderTaskInput input) { var entity = input.Adapt<WcsOderTask>(); await _wcsOderTaskRep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); } /// <summary> /// 获取分拣任务 /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpGet] [ApiDescriptionSettings(Name = "Detail")] [DisplayName("获取分拣任务")] public async Task<WcsOderTask> Detail([FromQuery] QueryByIdWcsOderTaskInput input) { return await _wcsOderTaskRep.GetFirstAsync(u => u.Id == input.Id); } /// <summary> /// 获取分拣任务列表 /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpGet] [ApiDescriptionSettings(Name = "List")] [DisplayName("获取分拣任务列表")] public async Task<List<WcsOderTaskOutput>> List([FromQuery] PageWcsOderTaskInput input) { return await _wcsOderTaskRep.AsQueryable().Select<WcsOderTaskOutput>().ToListAsync(); } } Web/src/api/device/wcsOderTask.ts
New file @@ -0,0 +1,50 @@ import request from '/@/utils/request'; enum Api { AddWcsOderTask = '/api/wcsOderTask/add', DeleteWcsOderTask = '/api/wcsOderTask/delete', UpdateWcsOderTask = '/api/wcsOderTask/update', PageWcsOderTask = '/api/wcsOderTask/page', DetailWcsOderTask = '/api/wcsOderTask/detail', } // 增加分拣任务 export const addWcsOderTask = (params?: any) => request({ url: Api.AddWcsOderTask, method: 'post', data: params, }); // 删除分拣任务 export const deleteWcsOderTask = (params?: any) => request({ url: Api.DeleteWcsOderTask, method: 'post', data: params, }); // 编辑分拣任务 export const updateWcsOderTask = (params?: any) => request({ url: Api.UpdateWcsOderTask, method: 'post', data: params, }); // 分页查询分拣任务 export const pageWcsOderTask = (params?: any) => request({ url: Api.PageWcsOderTask, method: 'post', data: params, }); // 详情分拣任务 export const detailWcsOderTask = (id: any) => request({ url: Api.DetailWcsOderTask, method: 'get', data: { id }, }); Web/src/api/wcs/wcsDevice.ts
@@ -10,6 +10,7 @@ ListWcsDevice = '/api/wcsDevice/list', GetWcsPackPlcList='/api/wcsDevice/WcsPackPlcList', GetWcsPackStationPlcList='/api/wcsDevice/WcsPackStationPlcList', } // 增加设备信息 @@ -76,4 +77,11 @@ request({ url: Api.GetWcsPackPlcList, method: 'get' }); }); export const GetWcsPackStationPlcList = (params?: any) => request({ url: Api.GetWcsPackStationPlcList, method: 'get', data: params }); Web/src/views/device/sortPallet/index.vue
@@ -18,7 +18,7 @@ <div class="card-container"> <el-card class="other-box-card" v-for="deviceInfo in devicePointData" :key="deviceInfo.id"> <div slot="header" class="linefix"> <span>{{ deviceInfo.name }}</span> <span>{{ deviceInfo.text }}</span> <div :class="['lineStatus', { 'device-status-0': deviceInfo.status === 0 }, { 'device-status-1': deviceInfo.status === 1 }]"></div> </div> <div class="otherValuefix" > @@ -29,6 +29,9 @@ <el-form-item label="任务号"> <el-input v-model="deviceInfo.taskNumber"></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-form-item> @@ -38,7 +41,7 @@ <el-form-item label="包装名称"> <el-input></el-input> </el-form-item> <el-form-item label="状态"> <el-form-item label="绑定状态"> <el-input></el-input> </el-form-item> <el-form-item label="抓箱品种"> @@ -75,90 +78,37 @@ <script lang="ts" setup> import { ref } from 'vue'; import { GetWcsPackPlcList } from '/@/api/wcs/wcsDevice'; import { GetWcsPackPlcList,GetWcsPackStationPlcList } from '/@/api/wcs/wcsDevice'; //设备数据 const deviceList=ref<any>([]); //设备对应工位数据 const devicePointData = ref<any>([]); const devicePointList=[ { id: 1, deviceId:586494087331909, name: '1号码垛机器人 1工位', taskNumber: 'T000001', taskType: '', plc: '', wcs: '', status: 0 }, { id: 2, deviceId:586494087331909, name: '1号码垛机器人 2工位', taskNumber: '', taskType: '', plc: '', wcs: '', status: 1 }, { id: 3, deviceId:586494087331909, name: '1号码垛机器人 3工位', taskNumber: '', taskType: '', plc: '', wcs: '', status: 1 }, { id: 4, deviceId:586494241939525, name: '2号码垛机器人 1工位', taskNumber: 'T000001', taskType: '', plc: '', wcs: '', status: 0 }, { id: 5, deviceId:586494241939525, name: '2号码垛机器人 2工位', taskNumber: '', taskType: '', plc: '', wcs: '', status: 1 }, { id: 6, deviceId:3, name: '3号机器人 1工位', taskNumber: 'T000001', taskType: '', plc: '', wcs: '', status: 0 } ]; let devicePointData = ref<any>([]); const selectedDeviceId=ref<any>(); // 查询操作 const handleQuery = async () => { //获取 const fetchStationData = async (plcId: any) => { const res2 = await GetWcsPackStationPlcList({ plcId }); devicePointData.value = res2.data.result; console.log('data:'+devicePointData.value); }; // 获取设备数据 const fetchPLCDeviceData = async () => { var res = await GetWcsPackPlcList(); deviceList.value = res.data.result; //输送线数据 selectedDeviceId.value = deviceList.value[0].id; devicePointData.value= devicePointList.filter(device => device.deviceId === selectedDeviceId.value); if (deviceList.value.length > 0) { selectedDeviceId.value = deviceList.value[0].id; await fetchStationData(selectedDeviceId.value); } }; handleQuery(); fetchPLCDeviceData(); //切换 function chooseDevice(id) { selectedDeviceId.value = id; devicePointData.value = devicePointList.filter(device => device.deviceId === id); fetchStationData(id); } </script> @@ -204,13 +154,13 @@ } .otherValuefix{ width: 100%; height: 500px; height: 540px; padding: 10px; border-bottom: 1px solid rgb(197, 195, 195); } .otherButtonfix{ width: 100%; height: 100px; height: 60px; display: flex; align-items: center; justify-content: center; Web/src/views/device/wcsOderTask/component/editDialog.vue
New file @@ -0,0 +1,211 @@ <template> <div class="wcsOderTask-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="请输入WMS下发单号" 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="taskNo"> <el-input v-model="ruleForm.taskNo" 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="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="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="taskType"> <el-select clearable v-model="ruleForm.taskType" placeholder="请选择任务类型"> <el-option v-for="(item,index) in dl('TaskTypeEnum')" :key="index" :value="Number(item.value)" :label="`${item.name} (${item.code}) [${item.value}]`"></el-option> </el-select> </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-select clearable v-model="ruleForm.status" placeholder="请选择状态"> <el-option v-for="(item,index) in dl('TaskStatusEnum')" :key="index" :value="Number(item.value)" :label="`${item.name} (${item.code}) [${item.value}]`"></el-option> </el-select> </el-form-item> </el-col> <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> </el-select> </el-form-item> </el-col> <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> <el-form-item label="异常信息" prop="information"> <el-input v-model="ruleForm.information" 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="createUser"> <el-input-number v-model="ruleForm.createUser" placeholder="请输入下发人" 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 { 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 { getAPI } from '/@/utils/axios-utils'; import { SysEnumApi } from '/@/api-services/api'; //父级传递来的参数 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 detailWcsOderTask(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 addWcsOderTask(values); } else { await updateWcsOderTask(values); } closeDialog(); } else { ElMessage({ message: `表单有${Object.keys(fields).length}处验证失败,请修改后再提交`, type: "error", }); } }); }; //将属性或者函数暴露给父组件 defineExpose({ openDialog }); </script> Web/src/views/device/wcsOderTask/index.vue
New file @@ -0,0 +1,280 @@ <template> <div class="wcsOderTask-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="请输入WMS下发单号"/> </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.taskNo" 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-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-select clearable="" v-model="queryParams.taskType" placeholder="请选择任务类型"> <el-option v-for="(item,index) in dl('TaskTypeEnum')" :key="index" :value="item.value" :label="`${item.name} (${item.code}) [${item.value}] `" /> </el-select> </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-select clearable="" v-model="queryParams.status" placeholder="请选择状态"> <el-option v-for="(item,index) in dl('TaskStatusEnum')" :key="index" :value="item.value" :label="`${item.name} (${item.code}) [${item.value}] `" /> </el-select> </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-select clearable="" v-model="queryParams.isSuccess" placeholder="请选择是否回馈成功"> <el-option v-for="(item,index) in dl('TaskSuccessEnum')" :key="index" :value="item.value" :label="`${item.name} (${item.code}) [${item.value}] `" /> </el-select> </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.information" 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.createUserName" 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="'wcsOderTask: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="openAddWcsOderTask" v-auth="'wcsOderTask: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="taskNo" 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="qty" label="总箱数/计划箱数/预估箱数" show-overflow-tooltip="" /> <el-table-column prop="taskType" label="任务类型" show-overflow-tooltip="" > <template #default="scope"> <el-tag :type="dv('TaskTypeEnum', scope.row.taskType)?.tagType"> {{dv('TaskTypeEnum', scope.row.taskType)?.name}}</el-tag> </template> </el-table-column> <el-table-column prop="status" label="状态" show-overflow-tooltip="" > <template #default="scope"> <el-tag :type="dv('TaskStatusEnum', scope.row.status)?.tagType"> {{dv('TaskStatusEnum', scope.row.status)?.name}}</el-tag> </template> </el-table-column> <el-table-column prop="isSuccess" label="是否回馈成功" show-overflow-tooltip="" > <template #default="scope"> <el-tag :type="dv('TaskSuccessEnum', scope.row.isSuccess)?.tagType"> {{dv('TaskSuccessEnum', scope.row.isSuccess)?.name}}</el-tag> </template> </el-table-column> <el-table-column prop="information" label="异常信息" show-overflow-tooltip="" /> <el-table-column prop="createUserName" label="下发人" show-overflow-tooltip="" /> <el-table-column label="操作" width="140" align="center" fixed="right" show-overflow-tooltip="" v-if="auth('wcsOderTask:update') || auth('wcsOderTask:delete')"> <template #default="scope"> <el-button icon="ele-Edit" size="small" text="" type="primary" @click="openEditWcsOderTask(scope.row)" v-auth="'wcsOderTask:update'"> 编辑 </el-button> <el-button icon="ele-Delete" size="small" text="" type="primary" @click="delWcsOderTask(scope.row)" v-auth="'wcsOderTask: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="printWcsOderTaskTitle" @reloadTable="handleQuery" /> <editDialog ref="editDialogRef" :title="editWcsOderTaskTitle" @reloadTable="handleQuery" /> </el-card> </div> </template> <script lang="ts" setup="" name="wcsOderTask"> import { ref } from "vue"; import { ElMessageBox, ElMessage } from "element-plus"; import { auth } from '/@/utils/authFunction'; 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 printDialog from '/@/views/system/print/component/hiprint/preview.vue' import editDialog from '/@/views/device/wcsOderTask/component/editDialog.vue' import { pageWcsOderTask, deleteWcsOderTask } from '/@/api/device/wcsOderTask'; import { getAPI } from '/@/utils/axios-utils'; import { SysEnumApi } from '/@/api-services/api'; import commonFunction from '/@/utils/commonFunction'; 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 printWcsOderTaskTitle = ref(""); const editWcsOderTaskTitle = ref(""); // 改变高级查询的控件显示状态 const changeAdvanceQueryUI = () => { showAdvanceQueryUI.value = !showAdvanceQueryUI.value; } // 查询操作 const handleQuery = async () => { loading.value = true; var res = await pageWcsOderTask(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 openAddWcsOderTask = () => { editWcsOderTaskTitle.value = '添加分拣任务'; editDialogRef.value.openDialog({}); }; // 打开打印页面 const openPrintWcsOderTask = async (row: any) => { printWcsOderTaskTitle.value = '打印分拣任务'; } // 打开编辑页面 const openEditWcsOderTask = (row: any) => { editWcsOderTaskTitle.value = '编辑分拣任务'; editDialogRef.value.openDialog(row); }; // 删除 const delWcsOderTask = (row: any) => { ElMessageBox.confirm(`确定要删除吗?`, "提示", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning", }) .then(async () => { await deleteWcsOderTask(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>