huanghongfeng
2025-04-22 3d66dd8990bd68d5521611ee58af2b9ccc299090
预选
已删除5个文件
已修改20个文件
已添加98个文件
33339 ■■■■■ 文件已修改
项目代码/DB/wcs.sql 4848 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/DB/wms.sql 22572 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.metadata.v7.bin 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.metadata.v9.bin 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.projects.v7.bin 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.projects.v9.bin 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/DesignTimeBuild/.dtbcache.v2 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/read.lock 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.futdcache.v2 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.suo 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoRepository/obj/Debug/net6.0/WIDESEAWCS_BasicInfoRepository.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/obj/Debug/net6.0/WIDESEAWCS_BasicInfoService.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/obj/Debug/net6.0/WIDESEAWCS_DTO.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_IBasicInfoRepository/obj/Debug/net6.0/WIDESEAWCS_IBasicInfoRepository.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_IBasicInfoService/obj/Debug/net6.0/WIDESEAWCS_IBasicInfoService.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_IProcessService/obj/Debug/net6.0/WIDESEAWCS_IProcessService.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemRepository/obj/Debug/net6.0/WIDESEAWCS_ISystemRepository.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/obj/Debug/net6.0/WIDESEAWCS_ISystemServices.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoRepository/obj/Debug/net6.0/WIDESEAWCS_ITaskInfoRepository.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/obj/Debug/net6.0/WIDESEAWCS_ITaskInfoService.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfo_HtyRepository/obj/Debug/net6.0/WIDESEAWCS_ITaskInfo_HtyRepository.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfo_HtyService/obj/Debug/net6.0/WIDESEAWCS_ITaskInfo_HtyService.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/obj/Debug/net6.0/WIDESEAWCS_Model.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_ProcessParameters/obj/Debug/net6.0/WIDESEAWCS_IProcessRepository.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_ProcessRepository/obj/Debug/net6.0/WIDESEAWCS_ProcessRepository.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_ProcessService/obj/Debug/net6.0/WIDESEAWCS_ProcessService.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/obj/Debug/net6.0/WIDESEAWCS_QuartzJob.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/obj/Debug/net6.0/WIDESEAWCS_Server.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_SignalR/obj/Debug/net6.0/WIDESEAWCS_SignalR.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/obj/Debug/net6.0/WIDESEAWCS_SystemRepository.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/obj/Debug/net6.0/WIDESEAWCS_SystemServices.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoRepository/obj/Debug/net6.0/WIDESEAWCS_TaskInfoRepository.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/obj/Debug/net6.0/WIDESEAWCS_TaskInfoService.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfo_HtyRepository/obj/Debug/net6.0/WIDESEAWCS_TaskInfo_HtyRepository.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfo_HtyService/obj/Debug/net6.0/WIDESEAWCS_TaskInfo_HtyService.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/obj/Debug/net6.0/WIDESEAWCS_Tasks.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/node_modules.zip 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/public/wcslogo.png 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/public/wms_d.png 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/assets/imgs/wcs_logo.png 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/assets/imgs/wms_d.png 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/assets/imgs/wms_x.png 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/components/DeviceLine.vue 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/components/DeviceLineVo.vue 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/components/DeviceStacker.vue 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/extension/basicinfo/extend/addrouters.vue 351 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/extension/basicinfo/extend/routerview.vue 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/extension/quartzJob/extend/importDevicePro.vue 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/extension/taskinfo/extend/taskExecuteDetail.vue 259 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/Devicestatus/Craftlibrary/AgingLibrary.vue 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/Devicestatus/Craftlibrary/FormationLibrary.vue 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/Devicestatus/Craftlibrary/Staticlibrary.vue 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/Devicestatus/Craftlibrary/Twoletters.vue 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/Devicestatus/Craftlibrary/Volume.vue 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/Devicestatus/Craftlibrary/baozhuang.vue 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/Devicestatus/Craftlibrary/hightemperature.vue 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/Devicestatus/Craftlibrary/roomtemperature.vue 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/Devicestatus/indexLibrary.vue 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/basicinfo/Dt_needBarcode.vue 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/basicinfo/router.vue 265 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/builder/coder.vue 658 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/charts/bigdata.vue 258 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/charts/bigdata/IviewCircle.vue 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/charts/bigdata/head_bg.png 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/charts/bigdata/layout.less 197 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/charts/chart.vue 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/charts/flex.vue 386 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/charts/formChart.vue 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/quartzJob/deviceInfo.vue 365 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/quartzJob/deviceProtocol.vue 229 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/quartzJob/deviceProtocolDetail.vue 207 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/quartzJob/dispatchInfo.vue 247 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/system/Sys_Role1.vue 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/taskinfo/task.vue 252 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/taskinfo/task_Hty.vue 246 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/widesea_wms/basicinfo/Dt_SelectionStandards.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSClient/src/views/widesea_wms/check/Dt_CheckResult.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/ProjectEvaluation/widesea_wmsserver.metadata.v7.bin 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/ProjectEvaluation/widesea_wmsserver.metadata.v9.bin 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/ProjectEvaluation/widesea_wmsserver.projects.v7.bin 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/ProjectEvaluation/widesea_wmsserver.projects.v9.bin 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/DesignTimeBuild/.dtbcache.v2 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/read.lock 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/.futdcache.v2 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/.suo 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/fileList.bin 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_BusinessServices/obj/Release/net6.0/WIDESEA_BusinessServices.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_BusinessesRepository/obj/Release/net6.0/WIDESEA_BusinessesRepository.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Common/obj/Release/net6.0/WIDESEA_Common.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_DTO/obj/Release/net6.0/WIDESEA_DTO.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_IBusinessServices/obj/Release/net6.0/WIDESEA_IBusinessServices.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_IBusinessesRepository/obj/Release/net6.0/WIDESEA_IBusinessesRepository.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_IRepository/obj/Release/net6.0/WIDESEA_IRepository.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_IServices/obj/Release/net6.0/WIDESEA_IServices.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_IStoragIntegrationServices/ToAPP/IToAPPService.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_IStoragIntegrationServices/obj/Release/net6.0/WIDESEA_IStoragIntegrationServices.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicRepository/obj/Release/net6.0/WIDESEA_IStorageBasicRepository.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/Stock/IDt_WheelsStockService.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/obj/Release/net6.0/WIDESEA_IStorageBasicServices.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_IStorageOutOrderRepository/obj/Release/net6.0/WIDESEA_IStorageOutOrderRepository.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_IStorageOutOrderService/obj/Release/net6.0/WIDESEA_IStorageOutOrderServices.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskRepository/obj/Release/net6.0/WIDESEA_IStorageTaskRepository.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskService/obj/Release/net6.0/WIDESEA_IStorageTaskServices.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/GZ_ZC/OldWheelsStock/Dt_WheelsStock_Old.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Model/obj/Release/net6.0/WIDESEA_Model.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Repository/obj/Release/net6.0/WIDESEA_Repository.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Services/obj/Release/net6.0/WIDESEA_Services.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationServices/ToAPP/Partial/SaveCZInfo.cs 373 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationServices/ToAPP/ToAPPService.cs 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationServices/ZY/Partial/ZY_GetCLInfo.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationServices/obj/Release/net6.0/WIDESEA_StoragIntegrationServices.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicRepository/obj/Release/net6.0/WIDESEA_StorageBasicRepository.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/Stock/Dt_WheelsStockService.cs 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/WIDESEA_StorageBasicServices.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/obj/Release/net6.0/WIDESEA_StorageBasicServices.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderRepository/obj/Release/net6.0/WIDESEA_StorageOutOrderRepository.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderServices/obj/Release/net6.0/WIDESEA_StorageOutOrderServices.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskRepository/obj/Release/net6.0/WIDESEA_StorageTaskRepository.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/obj/Release/net6.0/WIDESEA_StorageTaskServices.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/APP/ToAPPController.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/obj/Release/net6.0/WIDESEA_WMSServer.csproj.CopyComplete 补丁 | 查看 | 原始文档 | blame | 历史
ÏîÄ¿´úÂë/DB/wcs.sql
¶Ô±ÈÐÂÎļþ
ÎļþÌ«´ó
ÏîÄ¿´úÂë/DB/wms.sql
¶Ô±ÈÐÂÎļþ
ÎļþÌ«´ó
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.metadata.v7.bin
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.metadata.v9.bin
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.projects.v7.bin
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.projects.v9.bin
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/DesignTimeBuild/.dtbcache.v2
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/read.lock
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.futdcache.v2
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.suo
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoRepository/obj/Debug/net6.0/WIDESEAWCS_BasicInfoRepository.csproj.CopyComplete
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/obj/Debug/net6.0/WIDESEAWCS_BasicInfoService.csproj.CopyComplete
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/obj/Debug/net6.0/WIDESEAWCS_DTO.csproj.CopyComplete
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_IBasicInfoRepository/obj/Debug/net6.0/WIDESEAWCS_IBasicInfoRepository.csproj.CopyComplete
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_IBasicInfoService/obj/Debug/net6.0/WIDESEAWCS_IBasicInfoService.csproj.CopyComplete
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_IProcessService/obj/Debug/net6.0/WIDESEAWCS_IProcessService.csproj.CopyComplete
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemRepository/obj/Debug/net6.0/WIDESEAWCS_ISystemRepository.csproj.CopyComplete
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/obj/Debug/net6.0/WIDESEAWCS_ISystemServices.csproj.CopyComplete
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoRepository/obj/Debug/net6.0/WIDESEAWCS_ITaskInfoRepository.csproj.CopyComplete
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/obj/Debug/net6.0/WIDESEAWCS_ITaskInfoService.csproj.CopyComplete
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfo_HtyRepository/obj/Debug/net6.0/WIDESEAWCS_ITaskInfo_HtyRepository.csproj.CopyComplete
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfo_HtyService/obj/Debug/net6.0/WIDESEAWCS_ITaskInfo_HtyService.csproj.CopyComplete
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/obj/Debug/net6.0/WIDESEAWCS_Model.csproj.CopyComplete
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_ProcessParameters/obj/Debug/net6.0/WIDESEAWCS_IProcessRepository.csproj.CopyComplete
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_ProcessRepository/obj/Debug/net6.0/WIDESEAWCS_ProcessRepository.csproj.CopyComplete
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_ProcessService/obj/Debug/net6.0/WIDESEAWCS_ProcessService.csproj.CopyComplete
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/obj/Debug/net6.0/WIDESEAWCS_QuartzJob.csproj.CopyComplete
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
@@ -14,7 +14,7 @@
  //"ConnectionString": "HTI6FB1H05Krd07mNm9yBCNhofW6edA5zLs9TY~MNthRYW3kn0qKbMIsGp~3yyPDF1YZUCPBQx8U0Jfk4PH~ajNFXVIwlH85M3F~v_qKYQ3CeAz3q1mLVDn8O5uWt1~3Ut2V3KRkEwYHvW2oMDN~QIDXPxDgXN0R2oTIhc9dNu7QNaLEknblqmHhjaNSSpERdDVZIgHnMKejU_SL49tralBkZmDNi0hmkbL~837j1NWe37u9fJKmv91QPb~16JsuI9uu0EvNZ06g6PuZfOSAeFH9GMMIZiketdcJG3tHelo=",
  //"ConnectionString": "Data Source=127.0.0.1;Initial Catalog=WIDESEA_WCS2F08;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=True",
  //"ConnectionString": "Data Source=192.168.20.251;Initial Catalog=WIDESEA_WCSDB;User ID=sa;Password=123456@gy;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  "ConnectionString": "Data Source=.\\LIULEI;Initial Catalog=MX_LDY_WCS;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  "ConnectionString": "Data Source=.;Initial Catalog=ZCLDY_WIDESEAWCS;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  //"ConnectionString": "Data Source=127.0.0.1;Initial Catalog=WIDESEA_WCS2F08;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=True",
  //"ConnectionString": "Data Source=192.168.20.251;Initial Catalog=WIDESEA_WCSDB;User ID=sa;Password=123456@gy;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  //"ConnectionString": "Data Source=192.168.5.251;Initial Catalog=WIDESEAWCS_TEST;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/obj/Debug/net6.0/WIDESEAWCS_Server.csproj.CopyComplete
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_SignalR/obj/Debug/net6.0/WIDESEAWCS_SignalR.csproj.CopyComplete
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/obj/Debug/net6.0/WIDESEAWCS_SystemRepository.csproj.CopyComplete
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/obj/Debug/net6.0/WIDESEAWCS_SystemServices.csproj.CopyComplete
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoRepository/obj/Debug/net6.0/WIDESEAWCS_TaskInfoRepository.csproj.CopyComplete
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/obj/Debug/net6.0/WIDESEAWCS_TaskInfoService.csproj.CopyComplete
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfo_HtyRepository/obj/Debug/net6.0/WIDESEAWCS_TaskInfo_HtyRepository.csproj.CopyComplete
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfo_HtyService/obj/Debug/net6.0/WIDESEAWCS_TaskInfo_HtyService.csproj.CopyComplete
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/obj/Debug/net6.0/WIDESEAWCS_Tasks.csproj.CopyComplete
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/node_modules.zip
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/public/wcslogo.png
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/public/wms_d.png
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/assets/imgs/wcs_logo.png
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/assets/imgs/wms_d.png
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/assets/imgs/wms_x.png
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/components/DeviceLine.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,84 @@
<template>
    <div class="Linebox" >
        <div class="card">
            <div class="card-header">
                <div id="lines2">
                    <div class="card-body">{{ device.deviceName }}<br />
                        -{{ device.childDeviceCode }}-
                    </div>
                </div>
            </div>
            <div class="card-body">
                <ul class="list-group lis">
                    <li class="list-group-item list-group-item-dark">读取信号</li>
                    <li class="list-group-item list-group-item-secondary">任务号:{{
                        device.data.command.taskNum }}</li>
                    <li class="list-group-item list-group-item-secondary">托盘号:{{
                        device.data.command.barcode }}</li>
                    <li class="list-group-item list-group-item-secondary">终点地址:{{
                        device.data.command.targetAddress }}</li>
                    <li :class="getSignalClass(device.data.writeInteractiveSignal[6])">扫码站台入库请求</li>
                    <li :class="getSignalClass(device.data.writeInteractiveSignal[4])">堆垛机出库站台请求</li>
                    <li :class="getSignalClass(device.data.writeInteractiveSignal[2])">堆垛机入库站台请求</li>
                    <li :class="getSignalClass(device.data.writeInteractiveSignal[0])">线体出库口请求</li>
                </ul>
                <ul class="list-group lis">
                    <li class="list-group-item list-group-item-dark">写入信号</li>
                    <li class="list-group-item list-group-item-secondary">任务号:{{
                        device.data.commandWrite.taskNum }}</li>
                    <li class="list-group-item list-group-item-secondary">托盘号:{{
                        device.data.commandWrite.barcode }}</li>
                    <li class="list-group-item list-group-item-secondary">终点地址:{{
                        device.data.commandWrite.targetAddress }}</li>
                    <li :class="getSignalClass(device.data.writeInteractiveSignal[7])">扫码站台入库请求</li>
                    <li :class="getSignalClass(device.data.writeInteractiveSignal[5])">堆垛机出库站台请求</li>
                    <li :class="getSignalClass(device.data.writeInteractiveSignal[3])">堆垛机入库站台请求</li>
                    <li :class="getSignalClass(device.data.writeInteractiveSignal[1])">线体出库口请求</li>
                </ul>
            </div>
        </div>
    </div>
</template>
<script setup>
import { defineProps } from "vue";
// å®šä¹‰ç»„件属性
const props = defineProps({
    device: {
        type: Object,
        required: true
    }
});
// èŽ·å–ä¿¡å·ç±»å
const getSignalClass = (signal) => {
    // console.log("🚀 ~ getSignalClass ~ signal:", signal)
    return signal !== true ? 'list-group-item list-group-item-danger' : 'list-group-item list-group-item-success';
};
</script>
<style scoped>
/* .Stackerbox{
    width: 220px;
    float: left;
} */
.Linebox{
  width: 500px;
  float: left;
}
.box1{
  float: left;
}
.card-body{
  text-align: center;
  border-radius: 6% ;
}
.Stacker{
  background-color: burlywood;
}
.lis{
  float: left;
  width: 233px;
}
</style>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/components/DeviceLineVo.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
<template>
     <div class="Linebox">
    <div class="card">
      <div class="card-header">
        <div id="lines2" >
          <div class="card-body">{{device.deviceName}}<br/>
            -{{ device.data.childDeviceCode }}-
          </div>
        </div>
      </div>
      <div class="card-body">
        <ul class="list-group lis">
          <li class="list-group-item list-group-item-dark">读取信号</li>
          <li class="list-group-item list-group-item-secondary">任务号:{{ device.data.commandAfter.conveyorLineTaskNum }}</li>
          <li class="list-group-item list-group-item-secondary">托盘号:{{ device.data.commandAfter.conveyorLineBarcode }}</li>
          <li class="list-group-item list-group-item-secondary">终点地址:{{ device.data.commandAfter.conveyorLineTargetAddress }}</li>
          <li class="list-group-item list-group-item-secondary">是否有盘:{{ device.data.commandAfter.hasPallet }}</li>
          <li class="list-group-item list-group-item-secondary">报警代码:{{ device.data.commandAfter.conveyorLineAlarm }}</li>
          <li class="list-group-item list-group-item-secondary">请求反馈:{{ device.data.commandAfter.responState }}</li>
          <li  :class="device.data.commandAfter.interactiveSignal !=0 ? 'list-group-item list-group-item-success'  :'list-group-item list-group-item-danger'">交互信号</li>
        </ul>
      </div>
    </div>
</div>
</template>
<script setup>
import { defineProps } from "vue";
// å®šä¹‰ç»„件属性
const props = defineProps({
    device: {
        type: Object,
        required: true
    }
});
// èŽ·å–ä¿¡å·ç±»å
const getSignalClass = (signal) => {
    // console.log("🚀 ~ getSignalClass ~ signal:", signal)
    return signal !== true ? 'list-group-item list-group-item-danger' : 'list-group-item list-group-item-success';
};
</script>
<style scoped>
.Stackerbox {
  width: 220px;
  float: left;
}
.Linebox {
  width: 300px;
  float: left;
}
.box1 {
  float: left;
}
.card-body {
  text-align: center;
  border-radius: 6%;
}
.Stacker {
  background-color: burlywood;
}
.lis {
  float: left;
  width: 266px;
}
</style>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/components/DeviceStacker.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,57 @@
<template>
    <div class="Stackerbox">
        <div class="card">
          <div class="card-header">
            <div>
              <div class="card-body Stacker">
                {{ Stacker.deviceName }}
              </div>
            </div>
          </div>
          <div class="card-body">
            <ul class="list-group">
              <li class="list-group-item list-group-item-secondary">
                ä»»åŠ¡å·ï¼š{{ Stacker.data.currentTaskNum || '暂无任务号' }}
              </li>
              <li :class="getStatusClass(Stacker.data.stackerCraneAutoStatusDes)">
                å·¥ä½œæ¨¡å¼ï¼š{{ Stacker.data.stackerCraneAutoStatusDes }}
              </li>
              <li :class="getStatusClass(Stacker.data.stackerCraneStatusDes)">
                è®¾å¤‡çŠ¶æ€ï¼š{{ Stacker.data.stackerCraneStatusDes }}
              </li>
              <li :class="getStatusClass(Stacker.data.stackerCraneWorkStatusDes)">
                å·¥ä½œçŠ¶æ€ï¼š{{ Stacker.data.stackerCraneWorkStatusDes }}
              </li>
            </ul>
          </div>
        </div>
      </div>
</template>
<script setup>
import { defineProps } from "vue";
// å®šä¹‰ç»„件属性
const props = defineProps({
    Stacker: {
        type: Object,
        required: true
    }
});
// èŽ·å–çŠ¶æ€ç±»åï¼ˆä¼˜åŒ–çŠ¶æ€åˆ¤æ–­ï¼‰
const getStatusClass = (status) => {
  if (status === '正常' || status === '自动' || status === '待机') {
    return 'list-group-item list-group-item-success';
  }
  if (status === '故障' || status === '停机') {
    return 'list-group-item list-group-item-danger';
  }
  return 'list-group-item list-group-item-warning'; // é»˜è®¤è­¦å‘ŠçŠ¶æ€
};
</script>
<style lang="scss" scoped>
</style>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/extension/basicinfo/extend/addrouters.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,351 @@
<template>
  <div>
    <vol-box
      v-model="showDetialBox"
      :lazy="true"
      :width="width"
      :padding="15"
      title="路由配置"
      :footer="true"
    >
      <el-row height="50">
        <el-col :span="24">
          <div class="grid-content right-text">
            <!-- <el-link type="primary" @click="deleteNode">移除节点</el-link> -->
            <el-link type="primary" @click="addNode">添加节点</el-link>
          </div>
          <div class="grid-content right-text"></div>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="6">
          <div
            class="grid-content"
            style="font-weight: bold; font-size: 18px; margin-left: 5%"
          >
            <el-form :rules="routeTypeRules" :model="routerType">
              <el-form-item label="路由类型" label-width="120" prop="type">
                <el-select
                  v-model="routerType.type"
                  filterable
                  placeholder="请选择"
                >
                  <el-option
                    v-for="item in routerTypes"
                    :key="item.key"
                    :label="item.value"
                    :value="item.key"
                  >
                    <span style="float: left">{{ item.value }}</span>
                    <span
                      style="float: right; color: #8492a6; font-size: 13px"
                      >{{ item.key }}</span
                    >
                  </el-option>
                </el-select>
              </el-form-item>
            </el-form>
          </div>
        </el-col>
      </el-row>
      <div style="overflow-x: auto">
        <el-row style="margin-top: 3%">
          <el-col :span="24">
            <el-steps align-center :active="routers.length">
              <el-step
                v-for="(router, index) in routers"
                :title="getTitle(index)"
                :key="index"
                icon=""
                description="111"
                style="min-width: 280px"
              >
                <template v-slot:description="{}">
                  <div>
                    <el-form
                      :rules="rules"
                      class="demo-ruleForm"
                      :model="router"
                      label-width="110px"
                      style="margin-top: 1%"
                      ref="router"
                    >
                      <el-form-item
                        label="位置编号"
                        placeholder="请选择位置编号"
                        prop="positionCode"
                      >
                        <el-select
                          filterable
                          v-model="router.positionCode"
                          @change="deviceCodeChange"
                        >
                          <el-option
                            v-for="deviceCode in filterDeviceCodes"
                            :key="deviceCode.key"
                            :label="deviceCode.key"
                            :value="deviceCode.key"
                          />
                        </el-select>
                      </el-form-item>
                      <el-form-item
                        v-show="
                          index == routers.length - 1 &&
                          !router.positionCode.includes('SC')
                        "
                        label="子位置编号"
                        prop="childPositionCode"
                      >
                        <el-select
                          filterable
                          v-model="router.childPositionCode"
                          @change="childDeviceCodeChange"
                        >
                          <el-option
                            v-for="childDeviceCode in filterChildDeviceCodes"
                            :key="childDeviceCode.key"
                            :label="childDeviceCode.key"
                            :value="childDeviceCode.key"
                          />
                        </el-select>
                      </el-form-item>
                      <el-form-item
                        v-show="
                          router.positionCode.includes('SC') ||
                          router.childPositionCode.includes('SC')
                        "
                        label="堆垛机行"
                        prop="sCRow"
                      >
                        <el-input v-model="router.sCRow"></el-input>
                      </el-form-item>
                      <el-form-item
                        v-show="
                          router.positionCode.includes('SC') ||
                          router.childPositionCode.includes('SC')
                        "
                        label="堆垛机列"
                        prop="sCColumn"
                      >
                        <el-input v-model="router.sCColumn"></el-input>
                      </el-form-item>
                      <el-form-item
                        v-show="
                          router.positionCode.includes('SC') ||
                          router.childPositionCode.includes('SC')
                        "
                        label="堆垛机层"
                        prop="sCLayer"
                      >
                        <el-input v-model="router.sCLayer"></el-input>
                      </el-form-item>
                    </el-form>
                  </div>
                </template>
              </el-step>
            </el-steps>
          </el-col>
        </el-row>
      </div>
      <template #footer>
        <div>
          <el-button plain type="danger" @click="save"
            ><i class="el-icon-check"></i>保 å­˜</el-button
          >
          <el-button type="primary" size="mini" @click="showDetialBox = false"
            ><i class="el-icon-close"></i>关闭</el-button
          >
        </div>
      </template>
    </vol-box>
  </div>
</template>
    <script>
import VolBox from "@/components/basic/VolBox.vue";
import { el } from "element-plus/es/locale";
export default {
  components: { VolBox },
  data() {
    return {
      width: 1200,
      active: 0,
      showDetialBox: false,
      routerTypes: [],
      routerType: { type: "" },
      deviceCodes: [],
      filterDeviceCodes: [],
      childDeviceCodes: [],
      filterChildDeviceCodes: [],
      routers: [
        {
          positionCode: "",
          childPositionCode: "",
          sCRow: "",
          sCColumn: "",
          sCLayer: "",
        },
        {
          positionCode: "",
          childPositionCode: "",
          sCRow: "",
          sCColumn: "",
          sCLayer: "",
        },
      ],
      rules: {
        positionCode: [
          { required: true, message: "请选择位置编号", trigger: "change" },
        ],
      },
      routeTypeRules: {
        type: [
          { required: true, message: "请选择路由类型", trigger: "change" },
        ],
      },
    };
  },
  methods: {
    open() {
      this.routerTypes = [];
      this.routerType = { type: "" };
      this.deviceCode = "";
      this.deviceCodes = [];
      this.filterDeviceCodes = [];
      this.childDeviceCodes = [];
      this.filterChildDeviceCodes = [];
      this.routers = [
        {
          positionCode: "",
          childPositionCode: "",
          sCRow: "",
          sCColumn: "",
          sCLayer: "",
        },
        {
          positionCode: "",
          childPositionCode: "",
          sCRow: "",
          sCColumn: "",
          sCLayer: "",
        },
      ];
      this.showDetialBox = true;
      this.getData();
    },
    getData() {
      this.http.post("/api/Router/GetBaseRouterInfo", {}, true).then((x) => {
        if (!x.status) return this.$message.error(x.message);
        this.routerTypes = x.data.routerTypes;
        this.deviceCodes = x.data.deviceCodes;
        x.data.areaInfos.forEach((v) => {
          this.deviceCodes.push(v);
        });
        this.filterDeviceCodes = this.deviceCodes;
        this.childDeviceCodes = this.deviceCodes;
        this.filterChildDeviceCodes = this.deviceCodes;
      });
    },
    addNode() {
      this.routers.push({
        positionCode: "",
        childPositionCode: "",
        childPosiDeviceCode: "",
        sCRow: "",
        sCColumn: "",
        sCLayer: "",
      });
    },
    deleteNode() {
      this.routers.splice(this.routers.length - 1, 1);
    },
    getTitle(index) {
      if (index === 0) {
        return "起点";
      } else if (index === this.routers.length - 1) {
        return "终点";
      } else {
        return "子节点" + index;
      }
    },
    save() {
      this.$refs.router.forEach((x) => {
        console.log(x);
        x.validate((valid) => {
          if (!valid) {
            return false;
          }
        });
      });
      this.http
        .post(
          "/api/Router/AddRouters?routerType=" + this.routerType.type,
          this.routers,
          true
        )
        .then((x) => {
          if (!x.status) return this.$message.error(x.message);
          this.$message.success("操作成功");
          this.$emit("parentCall", ($vue) => {
            $vue.refresh();
          });
          this.showDetialBox = false;
        });
    },
    deviceCodeChange(value) {
      var positionCodes = [];
      this.routers.forEach((x) => {
        if (x.positionCode && x.positionCode != "") {
          positionCodes.push(x.positionCode);
        }
      });
      this.filterDeviceCodes = this.deviceCodes.filter(
        (x) => !positionCodes.includes(x.key)
      );
    },
    childDeviceCodeChange(value) {
      var positionCodes = [];
      this.routers.forEach((x) => {
        if (x.childPositionCode && x.childPositionCode != "") {
          positionCodes.push(x.childPositionCode);
        }
      });
      this.filterChildDeviceCodes = this.childDeviceCodes.filter(
        (x) => !positionCodes.includes(x.key)
      );
    },
  },
  created() {},
};
</script>
    <style scoped>
.el-col {
  border-radius: 4px;
}
.grid-content {
  border-radius: 4px;
  min-height: 36px;
}
.content-text {
  display: flex;
  align-items: center;
  justify-content: center;
}
.left-text {
  display: flex;
  align-items: center;
  justify-content: flex-start;
}
.right-text {
  display: flex;
  align-items: center;
  justify-content: flex-end;
}
</style>
    <style>
.el-step.is-center .el-step__description {
  padding-left: 5%;
  padding-right: 5%;
}
</style>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/extension/basicinfo/extend/routerview.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,96 @@
<template>
  <div>
    <vol-box
      v-model="showDetialBox"
      :lazy="true"
      width="1200px"
      :padding="15"
      title="完整路由查看"
    >
      <div
        style="margin-bottom: 1%"
        v-for="(item, index) in routerDatas"
        :key="index"
      >
        <el-row>
          <el-col>
            <div
              class="grid-content right-text"
              style="font-weight: bold; font-size: 18px"
            >
              <span>{{ item.type == "Out" ? "出库路由" : "入库路由" }}</span>
            </div>
          </el-col>
        </el-row>
        <el-steps :active="item.routes.length" align-center simple>
          <el-step
            v-for="itemRouter in item.routes"
            :key="itemRouter"
            :title="itemRouter"
            icon=""
          ></el-step>
        </el-steps>
      </div>
    </vol-box>
  </div>
</template>
  <script>
import VolBox from "@/components/basic/VolBox.vue";
export default {
  components: { VolBox },
  data() {
    return {
      active: 0,
      showDetialBox: false,
      routerDatas: [],
    };
  },
  methods: {
    open() {
      this.showDetialBox = true;
      this.getData();
    },
    getData() {
      this.http.post("/api/Router/GetAllWholeRouters", {}, true).then((x) => {
        if (!x.status) return this.$message.error(x.message);
        this.routerDatas = x.data;
      });
    },
  },
  created() {},
};
</script>
  <style scoped>
.el-col {
  border-radius: 4px;
}
.grid-content {
  border-radius: 4px;
  min-height: 36px;
}
.content-text {
  display: flex;
  align-items: center;
  justify-content: center;
}
.left-text {
  display: flex;
  align-items: center;
  justify-content: flex-start;
}
</style>
  <style>
.el-table .warning-row {
  background: #fcf1e2;
}
.el-table .success-row {
  background: #f0f9eb;
}
.el-table .error-row {
  background: #fde2e2;
}
</style>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/extension/quartzJob/extend/importDevicePro.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,116 @@
<template>
  <div>
    <vol-box
      v-model="showDetialBox"
      :lazy="true"
      :height="350"
      :width="600"
      :padding="15"
      title="设备协议信息-导入"
    >
      <upload-excel
        ref="upload_excel"
        :url="url"
        :template="template"
      ></upload-excel>
    </vol-box>
  </div>
</template>
    <script>
import VolBox from "@/components/basic/VolBox.vue";
import UploadExcel from "@/components/basic/UploadExcel.vue";
export default {
  components: { VolBox, UploadExcel },
  data() {
    return {
      showDetialBox: false,
      url: "",
      template: {
        url: "", //模板下载路径,如果没有模板路径,则不显示下载模板功能
        fileName: "设备协议信息导入模板", //下载模板的文件名
      },
    };
  },
  methods: {
    open() {
      this.template.url = `${this.http.ipAddress}api/DeviceProtocol/DownLoadTemplate`;
      this.url = `${this.http.ipAddress}api/DeviceProtocol/GetImportData`;
      this.showDetialBox = true;
      this.$nextTick(() => {
        this.$refs.upload_excel.upload = this.upload;
        console.log(this.$refs.upload_excel);
      });
    },
    upload() {
      console.log("upload");
      let _url = this.url;
      if (!_url) {
        return this.$Message.error("没有配置好Url");
      }
      if (!this.$refs.upload_excel.file) {
        return this.$Message.error("请选择文件");
      }
      var formData = new FormData();
      formData.append("fileInput", this.$refs.upload_excel.file);
      if (!this.$refs.upload_excel.importExcelBefore(formData)) {
        return;
      }
      this.$refs.upload_excel.loadingStatus = true;
      this.http.post(_url, formData).then(
        (x) => {
          // this.$refs.uploadFile.clearFiles();
          this.$refs.upload_excel.loadingStatus = false;
          this.$refs.upload_excel.file = null;
          if (x.status) {
            this.$emit("parentCall", ($vue) => {
              $vue.$refs.detail.rowData.push(...x.data);
            });
          }
          this.message = x.message;
          this.resultClass = x.status ? "v-r-success" : "v-r-error";
        },
        (error) => {
          this.$refs.upload_excel.loadingStatus = false;
        }
      );
    },
  },
  created() {},
};
</script>
    <style scoped>
.el-col {
  border-radius: 4px;
}
.grid-content {
  border-radius: 4px;
  min-height: 36px;
}
.content-text {
  display: flex;
  align-items: center;
  justify-content: center;
}
.left-text {
  display: flex;
  align-items: center;
  justify-content: flex-start;
}
</style>
    <style>
.el-table .warning-row {
  background: #fcf1e2;
}
.el-table .success-row {
  background: #f0f9eb;
}
.el-table .error-row {
  background: #fde2e2;
}
</style>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/extension/taskinfo/extend/taskExecuteDetail.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,259 @@
<template>
  <div>
    <vol-box
      v-model="showDetialBox"
      :lazy="true"
      width="1200px"
      :padding="15"
      title="任务详情"
    >
      <el-row height="50">
        <el-col :span="24">
          <div class="grid-content right-text">
            <el-link type="primary" @click="switchView">切换视图</el-link>
          </div>
        </el-col>
      </el-row>
      <div :style="{ height: height }">
        <div v-if="viewType == 1">
          <el-row height="50">
            <el-col :span="8">
              <div
                class="grid-content content-text"
                style="font-weight: bold; font-size: 18px"
              >
                <span>任务编号:{{ row.taskNum }}</span>
              </div>
            </el-col>
            <el-col :span="8">
              <div
                class="grid-content content-text"
                style="font-weight: bold; font-size: 18px"
              >
                <span>托盘编号:{{ row.palletCode }}</span>
              </div>
            </el-col>
            <el-col :span="8">
              <div
                class="grid-content content-text"
                style="font-weight: bold; font-size: 18px"
              >
                <span>任务状态:{{ row.taskState }}</span>
              </div>
            </el-col>
          </el-row>
          <div style="height: 100px; margin-top: 3%">
            <el-steps :active="active" align-center finish-status="success">
              <el-step
                v-for="item in steps"
                :key="item.title"
                :title="item.title"
                :description="item.description"
              ></el-step>
            </el-steps>
          </div>
          <el-row height="50" v-show="previousShow || nextShow">
            <el-col :span="8">
              <div v-show="previousShow" class="grid-content content-text">
                <el-button type="danger" @click="previous"
                  >回滚到上一步</el-button
                >
              </div>
            </el-col>
            <el-col :span="8">
              <div v-show="recoveryShow" class="grid-content content-text">
                <el-button type="primary" @click="recovery">任务挂起恢复</el-button>
              </div>
            </el-col>
            <el-col :span="8">
              <div v-show="nextShow" class="grid-content content-text">
                <el-button type="warning" @click="next">跳转到下一步</el-button>
              </div>
            </el-col>
          </el-row>
        </div>
        <div v-else>
          <el-table
            :data="tableData"
            style="width: 100%"
            :row-class-name="tableRowClassName"
          >
            <el-table-column type="index" width="50"> </el-table-column>
            <el-table-column prop="taskNum" label="任务号" width="90">
            </el-table-column>
            <el-table-column prop="taskState" label="任务状态" width="90">
            </el-table-column>
            <el-table-column prop="currentAddress" label="当前位置" width="90">
            </el-table-column>
            <el-table-column prop="nextAddress" label="下一位置" width="90">
            </el-table-column>
            <el-table-column prop="isManual" label="是否人工操作" width="120">
            </el-table-column>
            <el-table-column prop="isNormal" label="是否正常" width="90">
            </el-table-column>
            <el-table-column prop="description" label="描述"> </el-table-column>
            <el-table-column prop="createDate" label="创建时间" width="180">
            </el-table-column>
            <el-table-column prop="remark" label="备注" width="180">
            </el-table-column>
          </el-table>
        </div>
      </div>
    </vol-box>
  </div>
</template>
<script>
import VolBox from "@/components/basic/VolBox.vue";
export default {
  components: { VolBox },
  data() {
    return {
      active: 0,
      showDetialBox: false,
      row: {},
      steps: [],
      viewType: 1,
      height: "200px",
      tableData: [],
      previousShow: false,
      nextShow: false,
      recoveryShow: true,
    };
  },
  methods: {
    open(row) {
      this.row = row;
      this.showDetialBox = true;
      if (this.viewType == 1) {
        this.getSteps();
      } else {
        this.getDetailDatas();
      }
      this.$emit("parentCall", ($vue) => {
        var previousButton = $vue.buttons.find((x) => x.value == "Previous");
        this.previousShow = previousButton != null;
        var nextButton = $vue.buttons.find((x) => x.value == "Next");
        this.nextShow = nextButton != null;
      });
    },
    getSteps() {
      this.http
        .post(
          "/api/TaskExecuteDetail/GetDetailInfo?taskNum=" + this.row.taskNum,
          {},
          true
        )
        .then((x) => {
          if (!x.status) return this.$message.error(x.message);
          this.steps = x.data.list;
          this.active = x.data.active;
        });
    },
    getDetailDatas() {
      this.http
        .post(
          "/api/TaskExecuteDetail/GetDetailDatas?taskNum=" + this.row.taskNum,
          {},
          true
        )
        .then((x) => {
          if (!x.status) return this.$message.error(x.message);
          this.tableData = x.data;
        });
    },
    previous() {
      this.http
        .post(
          "/api/Task/RollbackTaskStatusToLast?taskNum=" + this.row.taskNum,
          {},
          true
        )
        .then((x) => {
          if (!x.status) return this.$message.error(x.message);
          this.$message.success("操作成功");
          this.getSteps();
        });
    },
    recovery(){
      this.http
        .post(
          "/api/Task/TaskStatusRecovery?taskNum=" + this.row.taskNum,
          {},
          true
        )
        .then((x) => {
          if (!x.status) return this.$message.error(x.message);
          this.$message.success("操作成功");
          this.getSteps();
        });
    },
    next() {
      this.http
        .post(
          "/api/Task/UpdateTaskStatusToNext?taskNum=" + this.row.taskNum,
          {},
          true
        )
        .then((x) => {
          if (!x.status) return this.$message.error(x.message);
          this.$message.success("操作成功");
          this.getSteps();
        });
    },
    switchView() {
      this.viewType = this.viewType == 1 ? 2 : 1;
      if (this.viewType == 2) {
        this.height = "600px";
        this.getDetailDatas();
      } else {
        this.height = "200px";
      }
    },
    tableRowClassName({ row, rowIndex }) {
      if (!row.isNormal) {
        return "error-row";
      } else if (row.isManual) {
        return "warning-row";
      }
      return "success-row";
    },
  },
  created() {},
};
</script>
<style scoped>
.el-col {
  border-radius: 4px;
}
.grid-content {
  border-radius: 4px;
  min-height: 36px;
}
.content-text {
  display: flex;
  align-items: center;
  justify-content: center;
}
.right-text {
  display: flex;
  align-items: center;
  justify-content: flex-end;
}
</style>
<style>
.el-table .warning-row {
  background: #fcf1e2;
}
.el-table .success-row {
  background: #f0f9eb;
}
.el-table .error-row {
  background: #fde2e2;
}
</style>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/Devicestatus/Craftlibrary/AgingLibrary.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,102 @@
<template>
  <el-row>
    <el-col :span="3">
      <device-stacker v-for="stacker in Stackers" :key="stacker.deviceName" :Stacker="stacker"></device-stacker>
    </el-col>
    <el-col :span="21">
      <device-line v-for="device in devices" :key="device.deviceName" :device="device" />
    </el-col>
  </el-row>
</template>
<script setup>
import { onMounted, reactive, toRefs } from "vue";
import eventBus from "@/uitils/eventBus";
import DeviceLine from "@/components/DeviceLine.vue";
import DeviceStacker from "@/components/DeviceStacker.vue";
// å †åž›æœº
const Stackers = reactive([]);
// è®¾å¤‡åˆ—表(修改重复设备名称)
const devices = reactive([]);
const intToBitArrayFromBinaryString = (num, numBits) => {
  let binaryString = num.toString(2).padStart(numBits, '0');
  return Array.from({ length: numBits }, (_, index) => binaryString[index] === '1');
};
// ç›‘听设备数据变化
onMounted(() => {
  eventBus.on('locationData', eventData => {
    console.log(eventData)
    if (eventData.deviceName === "陈化入库输送线" || eventData.deviceName === "陈化入库输送线") {
      if (devices.length <= 0) {
        devices.push({ deviceName: eventData.deviceName, data: eventData.data, childDeviceCode: eventData.childDeviceCode });
      }
      else {
        const device = devices.find(c => c.childDeviceCode == eventData.childDeviceCode)
        if (device) {
          const number = eventData.data.commandWrite.writeInteractiveSignal;
          const writeInteractiveSignal = intToBitArrayFromBinaryString(number, 8)
          eventData.data.writeInteractiveSignal = writeInteractiveSignal;
          device.data = eventData.data
        }
        else {
          const number = eventData.data.commandWrite.writeInteractiveSignal;
          const writeInteractiveSignal = intToBitArrayFromBinaryString(number, 8)
          eventData.data.writeInteractiveSignal = writeInteractiveSignal;
          devices.push({ deviceName: eventData.deviceName, data: eventData.data, childDeviceCode: eventData.childDeviceCode });
        }
      }
    }
  });
  eventBus.on('stackerData', eventData => {
    if (eventData.deviceName.indexOf("陈化") != -1) {
      if (Stackers.length == 0) {
        Stackers.push({ deviceName: eventData.deviceName, data: eventData.data });
      }
      else {
        const Stacker = Stackers.find(c => c.deviceName == eventData.deviceName);
        if (Stacker) {
          Stacker.data = eventData.data
        }
        else {
          Stackers.push({ deviceName: eventData.deviceName, data: eventData.data });
        }
      }
    }
  })
});
</script>
<style scoped>
.Stackerbox {
  width: 220px;
  float: left;
}
.Linebox {
  width: 500px;
  float: left;
}
.box1 {
  float: left;
}
.card-body {
  text-align: center;
  border-radius: 6%;
}
.Stacker {
  background-color: burlywood;
}
.lis {
  float: left;
  width: 233px;
}
</style>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/Devicestatus/Craftlibrary/FormationLibrary.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
<template>
  <el-row>
    <el-col :span="24">
      <device-line v-for="device in devices" :key="device.deviceName" :device="device" />
    </el-col>
  </el-row>
</template>
<script setup>
import { onMounted, reactive, toRefs } from "vue";
import eventBus from "@/uitils/eventBus";
import DeviceLine from "@/components/DeviceLine.vue";
// è®¾å¤‡åˆ—表(修改重复设备名称)
const devices = reactive([]);
const intToBitArrayFromBinaryString = (num, numBits) => {
  let binaryString = num.toString(2).padStart(numBits, '0');
  return Array.from({ length: numBits }, (_, index) => binaryString[index] === '1');
};
// ç›‘听设备数据变化
onMounted(() => {
  eventBus.on('locationData', eventData => {
    if (eventData.deviceName === "化成入库输送线") {
      if (devices.length <= 0) {
        devices.push({ deviceName: eventData.deviceName, data: eventData.data, childDeviceCode: eventData.childDeviceCode });
      }
      else {
        const device = devices.find(c => c.childDeviceCode == eventData.childDeviceCode)
        if (device) {
          const number = eventData.data.commandWrite.writeInteractiveSignal;
          const writeInteractiveSignal = intToBitArrayFromBinaryString(number, 8)
          eventData.data.writeInteractiveSignal = writeInteractiveSignal;
          device.data = eventData.data
        }
        else {
          const number = eventData.data.commandWrite.writeInteractiveSignal;
          const writeInteractiveSignal = intToBitArrayFromBinaryString(number, 8)
          eventData.data.writeInteractiveSignal = writeInteractiveSignal;
          devices.push({ deviceName: eventData.deviceName, data: eventData.data, childDeviceCode: eventData.childDeviceCode });
        }
      }
    }
  });
});
</script>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/Devicestatus/Craftlibrary/Staticlibrary.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,96 @@
<template>
  <el-row>
    <el-col :span="3">
      <device-stacker v-for="stacker in Stackers" :key="stacker.deviceName" :Stacker="stacker"></device-stacker>
    </el-col>
    <el-col :span="21">
      <device-line v-for="device in devices" :key="device.deviceName" :device="device" />
    </el-col>
  </el-row>
</template>
<script setup>
import { onMounted, reactive, toRefs } from "vue";
import eventBus from "@/uitils/eventBus";
import DeviceLine from "@/components/DeviceLine.vue";
import DeviceStacker from "@/components/DeviceStacker.vue";
// å †åž›æœº
const Stackers = reactive([]);
// è®¾å¤‡åˆ—表(修改重复设备名称)
const devices = reactive([]);
const intToBitArrayFromBinaryString = (num, numBits) => {
  let binaryString = num.toString(2).padStart(numBits, '0');
  return Array.from({ length: numBits }, (_, index) => binaryString[index] === '1');
};
// ç›‘听设备数据变化
onMounted(() => {
  eventBus.on('locationData', eventData => {
    console.log(eventData)
    if (eventData.deviceName === "静置输送线") {
      if (devices.length <= 0) {
        devices.push({ deviceName: eventData.deviceName, data: eventData.data, childDeviceCode: eventData.childDeviceCode });
      }
      else {
        const device = devices.find(c => c.childDeviceCode == eventData.childDeviceCode)
        if (device) {
          const number = eventData.data.commandWrite.writeInteractiveSignal;
          const writeInteractiveSignal = intToBitArrayFromBinaryString(number, 8)
          eventData.data.writeInteractiveSignal = writeInteractiveSignal;
          device.data = eventData.data
        }
        else {
          const number = eventData.data.commandWrite.writeInteractiveSignal;
          const writeInteractiveSignal = intToBitArrayFromBinaryString(number, 8)
          eventData.data.writeInteractiveSignal = writeInteractiveSignal;
          devices.push({ deviceName: eventData.deviceName, data: eventData.data, childDeviceCode: eventData.childDeviceCode });
        }
      }
    }
  });
  eventBus.on('stackerData', eventData => {
    if (eventData.deviceName.indexOf("静置") != -1) {
      if (Stackers.length == 0) {
        Stackers.push({ deviceName: eventData.deviceName, data: eventData.data });
      }
      else {
        const Stacker = Stackers.find(c => c.deviceName == eventData.deviceName);
        if (Stacker) {
          Stacker.data = eventData.data
        }
        else {
          Stackers.push({ deviceName: eventData.deviceName, data: eventData.data });
        }
      }
    }
  })
});
</script>
<style scoped>
.Stackerbox {
  width: 220px;
  float: left;
}
.Linebox {
  width: 500px;
  float: left;
}
.box1 {
  float: left;
}
.card-body {
  text-align: center;
  border-radius: 6%;
}
.Stacker {
  background-color: burlywood;
}
</style>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/Devicestatus/Craftlibrary/Twoletters.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
<template>
  <el-row>
    <el-col :span="24">
      <device-line v-for="device in devices" :key="device.deviceName" :device="device" />
    </el-col>
  </el-row>
</template>
<script setup>
import { onMounted, reactive, toRefs } from "vue";
import eventBus from "@/uitils/eventBus";
import DeviceLine from "@/components/DeviceLine.vue";
// è®¾å¤‡åˆ—表(修改重复设备名称)
const devices = reactive([]);
const intToBitArrayFromBinaryString = (num, numBits) => {
  let binaryString = num.toString(2).padStart(numBits, '0');
  return Array.from({ length: numBits }, (_, index) => binaryString[index] === '1');
};
// ç›‘听设备数据变化
onMounted(() => {
  eventBus.on('locationData', eventData => {
    if (eventData.deviceName === "二封输送线") {
      if (devices.length <= 0) {
        devices.push({ deviceName: eventData.deviceName, data: eventData.data, childDeviceCode: eventData.childDeviceCode });
      }
      else {
        const device = devices.find(c => c.childDeviceCode == eventData.childDeviceCode)
        if (device) {
          const number = eventData.data.commandWrite.writeInteractiveSignal;
          const writeInteractiveSignal = intToBitArrayFromBinaryString(number, 8)
          eventData.data.writeInteractiveSignal = writeInteractiveSignal;
          device.data = eventData.data
        }
        else {
          const number = eventData.data.commandWrite.writeInteractiveSignal;
          const writeInteractiveSignal = intToBitArrayFromBinaryString(number, 8)
          eventData.data.writeInteractiveSignal = writeInteractiveSignal;
          devices.push({ deviceName: eventData.deviceName, data: eventData.data, childDeviceCode: eventData.childDeviceCode });
        }
      }
    }
  });
});
</script>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/Devicestatus/Craftlibrary/Volume.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,58 @@
<template>
  <el-row>
    <el-col :span="3">
      <device-stacker v-for="stacker in Stackers" :key="stacker.deviceName" :Stacker="stacker"></device-stacker>
    </el-col>
    <el-col :span="21">
      <DeviceLineVo v-for="device in devices" :key="device.deviceName" :device="device" />
    </el-col>
  </el-row>
</template>
<script setup>
import { onMounted, ref, reactive, toRaw } from "vue";
import eventBus from "@/uitils/eventBus";
import DeviceLineVo from "@/components/DeviceLineVo.vue";
import DeviceStacker from "@/components/DeviceStacker.vue";
// å †åž›æœº
const Stackers = reactive([]);
var i = 0;
// è®¾å¤‡åˆ—表(修改重复设备名称)
const devices = reactive([]);
const num = reactive([])
onMounted(() => {
  eventBus.on('locationData', eventData => {
    if (eventData.deviceName.indexOf("分容") != -1) {
      if (devices.length <= 0) {
        devices.push({ deviceName: eventData.deviceName, data: eventData.data, childDeviceCode: eventData.data.childDeviceCode });
      }
      else {
        const device = devices.find(c => c.childDeviceCode == eventData.data.childDeviceCode)
        if (device) {
          device.data = eventData.data
        } else {
          devices.push({ deviceName: eventData.deviceName, data: eventData.data, childDeviceCode: eventData.data.childDeviceCode });
        }
      }
    }
  })
  eventBus.on('stackerData', eventData => {
    // if (eventData.deviceName == "分容3号堆垛机"||eventData.deviceName == "分容2号堆垛机") {
    console.log(eventData.deviceName)
    if (eventData.deviceName.indexOf("分容") != -1) {
      if (Stackers.length == 0) {
        Stackers.push({ deviceName: eventData.deviceName, data: eventData.data });
      }
      else {
        const Stacker = Stackers.find(c => c.deviceName == eventData.deviceName);
        if (Stacker) {
          Stacker.data = eventData.data
        }
        else {
          Stackers.push({ deviceName: eventData.deviceName, data: eventData.data });
        }
      }
    }
  })
})
</script>
<style scoped></style>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/Devicestatus/Craftlibrary/baozhuang.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
<template>
  <el-row>
    <el-col :span="21">
      <DeviceLineVo v-for="device in devices" :key="device.deviceName" :device="device" />
    </el-col>
  </el-row>
</template>
<script setup>
import { onMounted, ref, reactive, toRaw } from "vue";
import eventBus from "@/uitils/eventBus";
import DeviceLineVo from "@/components/DeviceLineVo.vue";
import DeviceStacker from "@/components/DeviceStacker.vue";
// å †åž›æœº
const Stackers = reactive([]);
var  i=0;
// è®¾å¤‡åˆ—表(修改重复设备名称)
const devices = reactive([]);
const num = reactive([])
onMounted(() => {
  eventBus.on('stackerData', eventData => {
    if (eventData.deviceName === "包装出库输送线") {
    if (devices.length <= 0) {
        devices.push({ deviceName: eventData.deviceName, data: eventData.data, childDeviceCode: eventData.data.childDeviceCode });
      }
      else {
        const device = devices.find(c => c.childDeviceCode == eventData.data.childDeviceCode)
        if(device){
          device.data = eventData.data
        }else{
          devices.push({ deviceName: eventData.deviceName, data: eventData.data, childDeviceCode: eventData.data.childDeviceCode });
        }
      }
    }
  })
})
</script>
<style scoped>
</style>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/Devicestatus/Craftlibrary/hightemperature.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,60 @@
<template>
  <el-row>
    <el-col :span="3">
      <device-stacker v-for="stacker in Stackers" :key="stacker.deviceName" :Stacker="stacker"></device-stacker>
    </el-col>
    <el-col :span="21">
      <DeviceLineVo v-for="device in devices" :key="device.deviceName" :device="device" />
    </el-col>
  </el-row>
</template>
<script setup>
import { onMounted, ref, reactive, toRaw } from "vue";
import eventBus from "@/uitils/eventBus";
import DeviceLineVo from "@/components/DeviceLineVo.vue";
import DeviceStacker from "@/components/DeviceStacker.vue";
// å †åž›æœº
const Stackers = reactive([]);
var i = 0;
// è®¾å¤‡åˆ—表(修改重复设备名称)
const devices = reactive([]);
const num = reactive([])
onMounted(() => {
  eventBus.on('locationData', eventData => {
    // console.log(eventData)
    console.log(eventData)
    if (eventData.deviceName.indexOf("老化") != -1) {
      if (devices.length <= 0) {
        devices.push({ deviceName: eventData.deviceName, data: eventData.data, childDeviceCode: eventData.data.childDeviceCode });
      }
      else {
        const device = devices.find(c => c.childDeviceCode == eventData.data.childDeviceCode)
        if (device) {
          device.data = eventData.data
        } else {
          devices.push({ deviceName: eventData.deviceName, data: eventData.data, childDeviceCode: eventData.data.childDeviceCode });
        }
      }
    }
  })
  eventBus.on('stackerData', eventData => {
    if (eventData.deviceName.indexOf("老化") != -1) {
      if (Stackers.length == 0) {
        Stackers.push({ deviceName: eventData.deviceName, data: eventData.data });
      }
      else {
        const Stacker = Stackers.find(c => c.deviceName == eventData.deviceName);
        if (Stacker) {
          Stacker.data = eventData.data
        }
        else {
          Stackers.push({ deviceName: eventData.deviceName, data: eventData.data });
        }
      }
    }
  })
})
</script>
<style scoped></style>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/Devicestatus/Craftlibrary/roomtemperature.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
<template>
  <el-row>
    <el-col :span="3">
      <device-stacker v-for="stacker in Stackers" :key="stacker.deviceName" :Stacker="stacker"></device-stacker>
    </el-col>
    <el-col :span="21">
      <DeviceLineVo v-for="device in devices" :key="device.deviceName" :device="device" />
    </el-col>
  </el-row>
</template>
<script setup>
import { onMounted, ref, reactive, toRaw } from "vue";
import eventBus from "@/uitils/eventBus";
import DeviceLineVo from "@/components/DeviceLineVo.vue";
import DeviceStacker from "@/components/DeviceStacker.vue";
// å †åž›æœº
const Stackers = reactive([]);
var i = 0;
// è®¾å¤‡åˆ—表(修改重复设备名称)
const devices = reactive([]);
const num = reactive([])
onMounted(() => {
  eventBus.on('locationData', eventData => {
    // console.log(eventData)
    console.log(eventData)
    if (eventData.deviceName.indexOf("常温") != -1) {
      if (devices.length <= 0) {
        devices.push({ deviceName: eventData.deviceName, data: eventData.data, childDeviceCode: eventData.data.childDeviceCode });
      }
      else {
        const device = devices.find(c => c.childDeviceCode == eventData.data.childDeviceCode)
        if (device) {
          device.data = eventData.data
        } else {
          devices.push({ deviceName: eventData.deviceName, data: eventData.data, childDeviceCode: eventData.data.childDeviceCode });
        }
      }
    }
  })
  eventBus.on('stackerData', eventData => {
    if (eventData.deviceName.indexOf("常温") != -1) {
      if (Stackers.length == 0) {
        Stackers.push({ deviceName: eventData.deviceName, data: eventData.data });
      }
      else {
        const Stacker = Stackers.find(c => c.deviceName == eventData.deviceName);
        if (Stacker) {
          Stacker.data = eventData.data
        }
        else {
          Stackers.push({ deviceName: eventData.deviceName, data: eventData.data });
        }
      }
    }
  })
})
</script>
<style scoped></style>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/Devicestatus/indexLibrary.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
<template>
    <!--导航区 -->
    <div  class="nav-bar">
       <RouterLink class="navlink" to="/AgingLibrary" >陈化库</RouterLink>
       <RouterLink class="navlink" to="/FormationLibrary" >化成库</RouterLink>
       <RouterLink class="navlink" to="/StaticLibrary" >静置库</RouterLink>
       <RouterLink class="navlink" to="/Twoletters" >二封</RouterLink>
       <RouterLink class="navlink" to="/Volume" >分容库</RouterLink>
       <RouterLink class="navlink" to="/highTemperature" >老化库</RouterLink>
       <RouterLink class="navlink" to="/roomTemperature" >常温库</RouterLink>
       <RouterLink class="navlink" to="/Baozhuang" >包装</RouterLink>
    </div>
     <!--注意事项-->
    <div class="area">
           <RouterView :key="$route.fullPath" ></RouterView>
    </div>
</template>
<script setup>
 import { RouterView,RouterLink } from 'vue-router';
</script>
<style>
.nav-bar {
  display: flex;
  justify-content: space-around;
  align-items: center;
  height: 50px;
  background-color: #f5f5f5;
  border-bottom: 1px solid #ccc;
}
.navlink {
    width: 100px;
    height: 100%;
      text-decoration:none;
      text-align: center;
      display: flex;
         justify-content: center;
         align-items: center;
      color: rgb(0, 195, 255);
       }
.navlink:hover{
   background-color: rgb(0, 195, 255);
   color: #ffffff;
}
</style>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/basicinfo/Dt_needBarcode.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,93 @@
<!--
*Author:jxx
 *Contact:283591387@qq.com
 *代码由框架生成,任何更改都可能导致被代码生成器覆盖
 *业务请在@/extension/widesea_wms/basicinfo/Dt_AreaInfo.js此处编写
 -->
<template>
    <view-grid ref="grid" :columns="columns" :detail="detail" :editFormFields="editFormFields"
        :editFormOptions="editFormOptions" :searchFormFields="searchFormFields" :searchFormOptions="searchFormOptions"
        :table="table" :extend="extend">
    </view-grid>
</template>
<script>
import extend from "@/extension/basicinfo/Dt_needBarcode.js";
import { ref, defineComponent } from "vue";
export default defineComponent({
    setup() {
        const table = ref({
            key: 'areaID',
            footer: "Foots",
            cnName: '在途数据',
            name: 'basicinfo/dt_needBarcode',
            url: "/dt_needBarcode/",
            sortName: "AreaCode"
        });
        const editFormFields = ref({
            "id":"",
            "toArea": "",
            "fromArea": "",
            "barcodeType": "",
            "productLine": "",
            "inLineNum": "",
            "cacheNum":""
        });
        const editFormOptions = ref([
            [
                { "title": "在途数量", "field": "inLineNum", type: "text" },
                { "title": "可缓存数量", "field": "cacheNum", type: "text" },
            ]
        ]);
        const searchFormFields = ref({
            "iD":"",
            "toArea": "",
            "fromArea": "",
            "barcodeType": "",
            "productLine": "",
            "inLineNum": "",
            "cacheNum":""
        });
        const searchFormOptions = ref([
            [
                { "title": "目标库区", "field": "toArea", type: "text" },
                { "title": "来源库区", "field": "fromArea", type: "text" },
                { "title": "托盘类型", "field": "barcodeType", type: "text" },
            ],
            [
                { "title": "所属产线", "field": "productLine", type: "text" },
                { "title": "在途数量", "field": "inLineNum", type: "text" },
                { "title": "可缓存数量", "field": "cacheNum", type: "text" },
            ]
        ]);
        const columns = ref([{ field: 'iD', title: '主键', type: 'int', sort: true, hidden: true, width: 110, readonly: true, require: true, align: 'left' },
        { field: 'toArea', title: '目标库区', type: 'string', sort: true, width: 110, require: true, align: 'left', sort: true },
        { field: 'fromArea', title: '来源库区', type: 'string', sort: true, width: 110, align: 'left' },
        { field: 'barcodeType', title: '托盘类型', type: 'string', sort: true, width: 110, align: 'left' },
        { field: 'productLine', title: '所属产线', type: 'string', sort: true, width: 110, align: 'left',bind: { key: "ProductionLine", data: [] } },
        { field: 'inLineNum', title: '在途数量', type: 'int', sort: true, width: 110, align: 'left' },
        { field: 'cacheNum', title: '可缓存数量', type: 'int', sort: true, width: 100,  align: 'left' },
        { field: 'creater', title: '创建人', type: 'string', sort: true, width: 110, align: 'left' },
        { field: 'createDate', title: '创建时间', type: 'datetime', sort: true, width: 150, align: 'left', sort: true },
        { field: 'modifier', title: '修改人', type: 'string', sort: true, width: 100,  align: 'left' },
        { field: 'modifyDate', title: '修改时间', type: 'datetime', sort: true, width: 150,  align: 'left', sort: true },
        ]);
        const detail = ref({
            cnName: "#detailCnName",
            table: "#detailTable",
            columns: [],
            sortName: "",
            key: ""
        });
        return {
            table,
            extend,
            editFormFields,
            editFormOptions,
            searchFormFields,
            searchFormOptions,
            columns,
            detail,
        };
    },
});
</script>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/basicinfo/router.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,265 @@
<template>
  <view-grid
    ref="grid"
    :columns="columns"
    :detail="detail"
    :editFormFields="editFormFields"
    :editFormOptions="editFormOptions"
    :searchFormFields="searchFormFields"
    :searchFormOptions="searchFormOptions"
    :table="table"
    :extend="extend"
  >
  </view-grid>
</template>
    <script>
import extend from "@/extension/basicinfo/router.js";
import { ref, defineComponent } from "vue";
export default defineComponent({
  setup() {
    const table = ref({
      key: "id",
      footer: "Foots",
      cnName: "路由配置信息",
      name: "router",
      url: "/Router/",
      sortName: "createDate",
    });
    const editFormFields = ref({
      // name: "",
      // jobGroup: "",
      // assemblyName: "",
      // className: "",
      // intervalSecond: "",
      // beginTime: "",
      // endTime: "",
      // remark: "",
    });
    const editFormOptions = ref([
      // [
      //   {
      //     title: "任务名称",
      //     required: true,
      //     field: "name",
      //     type: "string",
      //   },
      //   {
      //     title: "任务分组",
      //     required: true,
      //     field: "jobGroup",
      //     type: "select",
      //     dataKey: "deviceType",
      //     data: [],
      //   },
      //   {
      //     title: "程序集名称",
      //     required: true,
      //     field: "assemblyName",
      //     type: "string",
      //     type: "select",
      //     dataKey: "jobAssembly",
      //     data: [],
      //   },
      //   {
      //     title: "任务所在类",
      //     required: true,
      //     field: "className",
      //     type: "string",
      //     type: "select",
      //     dataKey: "jobClassName",
      //     data: [],
      //   },
      // ],
      // [
      //   {
      //     title: "间隔时间",
      //     required: true,
      //     field: "intervalSecond",
      //     type: "number",
      //   },
      //   {
      //     title: "开始时间",
      //     field: "beginTime",
      //     type: "datetime",
      //   },
      //   {
      //     title: "结束时间",
      //     field: "endTime",
      //     type: "datetime",
      //   },
      //   {
      //     title: "备注",
      //     field: "remark",
      //     type: "string",
      //   },
      // ],
    ]);
    const searchFormFields = ref({
      startPosi: "",
      nextPosi: "",
      // assemblyName: "",
      // className: "",
    });
    const searchFormOptions = ref([
      [
        {
          title: "起点位置",
          field: "startPosi",
          type: "like",
        },
        {
          title: "终点位置",
          field: "nextPosi",
          type: "like",
        },
        //   {
        //     title: "程序集名称",
        //     field: "assemblyName",
        //     type: "like",
        //   },
        //   {
        //     title: "任务所在类",
        //     field: "className",
        //     type: "like",
        //   },
      ],
    ]);
    const columns = ref([
      {
        field: "id",
        title: "Id",
        type: "int",
        width: 90,
        hidden: true,
        readonly: true,
        require: true,
        align: "left",
      },
      {
        field: "startPosi",
        title: "起点位置",
        type: "string",
        width: 90,
        align: "left",
      },
      {
        field: "nextPosi",
        title: "终点位置",
        type: "string",
        width: 180,
        align: "left",
      },
      {
        field: "inOutType",
        title: "路由类型",
        type: "string",
        width: 180,
        align: "left",
      },
      {
        field: "childPosi",
        title: "子位置",
        type: "string",
        width: 200,
        align: "left",
      },
      {
        field: "childPosiDeviceCode",
        title: "子位置所属设备",
        type: "string",
        width: 120,
        align: "left",
      },
      {
        field: "srmRow",
        title: "堆垛机取货/放货行",
        type: "int",
        width: 150,
        align: "left",
      },
      {
        field: "srmColumn",
        title: "堆垛机取货/放货列",
        type: "int",
        width: 150,
        align: "left",
      },
      {
        field: "srmLayer",
        title: "堆垛机取货/放货层",
        type: "int",
        width: 150,
        align: "left",
      },
      {
        field: "depth",
        title: "深度",
        type: "int",
        width: 150,
        align: "left",
      },
      {
        field: "isEnd",
        title: "是否是最终点",
        type: "bool",
        width: 150,
        align: "left",
      },
      {
        field: "creater",
        title: "创建人",
        type: "string",
        width: 90,
        align: "left",
      },
      {
        field: "createDate",
        title: "创建时间",
        type: "datetime",
        width: 160,
        align: "left",
      },
      {
        field: "modifier",
        title: "修改人",
        type: "string",
        width: 100,
        align: "left",
      },
      {
        field: "modifyDate",
        title: "修改时间",
        type: "datetime",
        width: 160,
        align: "left",
      },
      {
        field: "remark",
        title: "备注",
        type: "string",
        width: 100,
        align: "left",
      },
    ]);
    const detail = ref({
      cnName: "",
      table: "",
      columns: [],
      sortName: "",
      key: "",
    });
    return {
      table,
      extend,
      editFormFields,
      editFormOptions,
      searchFormFields,
      searchFormOptions,
      columns,
      detail,
    };
  },
});
</script>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/builder/coder.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,658 @@
<template>
  <div class="builder-container">
    <vol-box
      ref="add"
      :width="850"
      :height="450"
      title="新建配置信息"
      padding="10px"
      v-model="addModel"
    >
      <div style="padding: 30px 30px 10px 34px">
        <el-alert type="warning" :closable="false">
          1、如果只是创建目录,父级idå¡«0,其他随便填写;
          <br />
          2、如果是生成代码,父级id填写【代码生成配置】列表页面的id
        </el-alert>
      </div>
      <div class="addModel" style="padding-right: 30px">
        <vol-form
          ref="addForm"
          :formRules="addOptions"
          :formFields="layOutOptins.fields"
        >
        </vol-form>
      </div>
      <template #footer>
        <div>
          <el-button type="primary" size="small" @click="add"
            ><i class="el-icon-plus"></i> ç¡® å®š</el-button
          >
        </div>
      </template>
    </vol-box>
    <div class="builder-left">
      <div class="module-name">代码生成配置</div>
      <div class="builder-tree">
        <el-scrollbar style="height: 100%; width: 200px">
          <!-- :onOpenChange="onOpenChange" -->
          <VolMenu :list="tree" :onSelect="onSelect"></VolMenu>
        </el-scrollbar>
      </div>
    </div>
    <div class="builder-content">
      <div style="height: 100%">
        <el-scrollbar style="height: 100%">
          <div class="coder-container">
            <div class="coder-item" style="padding-top: 7px">
              <VolHeader icon="ios-chatbubbles" text="代码生成器">
                <template #content>
                  <div style="color: red; font-size: 13px">
                    åˆ é™¤å·¦ä¾§é…ç½®èœå•:删除行->保存->删除菜单
                  </div>
                </template>
                <div class="action">
                  <span @click="save"> <i class="el-icon-check"></i>保存 </span>
                  <span @click="addVisible()">
                    <i class="el-icon-plus"></i>新建
                  </span>
                  <span @click="ceateVuePage(0)">
                    <i class="el-icon-document"></i>生成Vue页面
                  </span>
                  <!-- <span @click="ceateVuePage(1)">
                    <i class="el-icon-document"></i>生成app页面
                  </span> -->
                  <span @click="ceateModel">
                    <i class="el-icon-tickets"></i>生成Model
                  </span>
                  <span @click="createService">
                    <i class="el-icon-document"></i>生成业务类
                  </span>
                  <span @click="delTree">
                    <i class="el-icon-delete"></i>删除菜单
                  </span>
                </div>
              </VolHeader>
              <div class="config">
                <vol-form
                  :label-width="90"
                  ref="form"
                  :formRules="layOutOptins.options"
                  :formFields="layOutOptins.fields"
                ></vol-form>
              </div>
            </div>
            <el-alert type="warning" :closable="false">
              1、如果需要修改表结构,请在数据库修改,再点同步表结构->生成vue页面->生成model。
              2、修改编辑行后需要点击生成model、生成vue页面
            </el-alert>
            <div class="coder-item">
              <VolHeader
                icon="md-podium"
                style="border-bottom: 0"
                text="表结构"
              >
                <template #content>
                  <div style="color: red; font-size: 13px">
                    æ•°æ®åº“表结构发生变化时请点【同步表结构】
                  </div></template
                >
                <div class="action">
                  <span
                    style="color: rgb(23, 156, 216)"
                    class="ivu-icon ivu-icon-ios-folder"
                    @click="help"
                    >代码生成器参数文档</span
                  >
                  <span @click="delRow" class="ivu-icon ivu-icon-md-close"
                    >删除行数据</span
                  >
                  <span @click="syncTable" class="ivu-icon ivu-icon-md-sync"
                    >同步表结构</span
                  >
                </div>
              </VolHeader>
              <div class="grid-container" style="padding-bottom: 20px">
                <vol-table
                  ref="table"
                  :paginationHide="true"
                  :tableData="data"
                  :height="tableHeight"
                  :columns="layOutOptins.columns"
                  :color="false"
                  :index="true"
                  :allowEmpty="true"
                  :clickEdit="true"
                ></vol-table>
              </div>
            </div>
          </div>
        </el-scrollbar>
      </div>
    </div>
  </div>
</template>
<script>
import builderData from './builderData';
import VolForm from '@/components/basic/VolForm.vue';
import VolTable from '@/components/basic/VolTable.vue';
import VolBox from '@/components/basic/VolBox.vue';
import VolHeader from '@/components/basic/VolHeader.vue';
import VolMenu from '@/components/basic/VolElementMenu.vue';
export default {
  components: {
    VolForm: VolForm,
    VolTable: VolTable,
    VolBox: VolBox,
    VolHeader: VolHeader,
    VolMenu
  },
  data() {
    return {
      more: {
        addChild: 'addChild',
        ceateController: 'ceateController',
        addRow: 'addRow',
        delRow: 'delRow',
        delTree: 'delTree'
      },
      addModel: false,
      helpModel: false,
      tableHeight: 500,
      addOptions: builderData.form.addOptions,
      layOutOptins: {
        fields: builderData.form.fields,
        options: builderData.form.options,
        columns: builderData.columns
      },
      tableInfo: null,
      data: [],
      tree: []
    };
  },
  watch: {
    'layOutOptins.fields.vuePath'(val) {
      localStorage.setItem('vuePath', val);
    },
    deep: true
    //localStorage.setItem("vuePath", this.layOutOptins.fields.vuePath || "");
  },
  methods: {
    changeMore(funName) {
      this[funName]();
    },
    help() {
      window.open('http://v2.volcore.xyz/document/coder');
      // this.helpModel = true;
    },
    addVisible(pid) {
      this.addModel = true;
      this.$refs.form.reset();
      this.data.splice(0);
      if (pid) {
        this.layOutOptins.fields.parentId = pid;
      }
    },
    delTree() {
      let tableId = this.layOutOptins.fields.table_Id;
      if (!tableId) return this.$message.error('请选择节点');
      let tigger = false;
      this.$confirm('删除警告?', '确认要删除吗', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
        center: true
      }).then(() => {
        if (tigger) return;
        tigger = true;
        this.http
          .post('/api/builder/delTree?table_Id=' + tableId, {}, true)
          .then((x) => {
            if (!x.status) return this.$message.error(x.message);
            this.$message.error('删除成功,请刷新页面');
            // for (let index = 0; index < this.tree.length; index++) {
            //   if (this.tree[index].id == tableId) {
            //     this.tree.splice(index, 1);
            //   }
            // }
          });
      });
    },
    add() {
      this.$refs.form.validate(() => {
        // this.layOutOptins.fields.tableName =
        //   this.layOutOptins.fields.tableName.slice(0, 1).toUpperCase() +
        //   this.layOutOptins.fields.tableName.slice(1);
        if (!this.layOutOptins.fields.tableTrueName) {
          this.layOutOptins.fields.tableTrueName = this.layOutOptins.fields.tableName;
        }
        let queryParam =
          'parentId=' +
          this.layOutOptins.fields.parentId +
          '&tableName=' +
          this.layOutOptins.fields.tableName +
          '&columnCNName=' +
          this.layOutOptins.fields.columnCNName +
          '&nameSpace=' +
          this.layOutOptins.fields.namespace +
          '&foldername=' +
          this.layOutOptins.fields.folderName +
          '&isTreeLoad=false';
        this.http
          .post('/api/builder/LoadTableInfo?' + queryParam, {}, true)
          .then((x) => {
            if (!x.status) {
              this.$message.error(x.message);
              return;
            }
            let hasTree = this.tree.some((t) => {
              return t.id == x.data.table_Id;
            });
            if (!hasTree) {
              this.tree.push({
                id: x.data.table_Id,
                pId: x.data.parentId,
                parentId: x.data.parentId,
                name: x.data.columnCNName,
                orderNo: x.data.orderNo
              });
            }
            if (!x.data.tableTrueName) {
              x.data.tableTrueName = x.data.tableName;
            }
            this.addModel = false;
            this.tableInfo = x.data;
            this.$refs.form.reset(x.data);
            this.data = x.data.tableColumns;
          });
      });
    },
    addChild() {
      // this.$message.info("开发中");
      let id = this.layOutOptins.fields.table_Id;
      if (!id) {
        return this.$message.error('请选中节点');
      }
      this.addVisible(id);
    },
    addRow() {
      this.data.push({});
    },
    delRow() {
      let tigger = false;
      this.$confirm('删除警告?', '确认要删除选择的数据吗', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
        center: true
      }).then(() => {
        if (tigger) return;
        tigger = true;
        this.$refs.table.delRow();
      });
    },
    validateTableInfo(callback) {
      this.$refs.form.validate(() => {
        if (!this.tableInfo) {
          this.$message.error('请先加载数据');
          return false;
        }
        if (this.data && this.data.length > 0) {
          let keyInfo = this.data.find((x) => {
            return x.isKey;
          });
          if (!keyInfo) {
            this.$message.error('请勾选设置主键');
            return false;
          }
          if (keyInfo.isNull == 1) {
            this.$message.error('主键【可为空】必须设置为否');
            return false;
          }
          if (
            keyInfo.columnType != 'int' &&
            keyInfo.columnType != 'bigint' &&
            !this.layOutOptins.fields.sortName
          ) {
            this.$message.error('主键非自增类型,请设置上面表单的【排序字段】');
            return false;
          }
        }
        for (const key in this.tableInfo) {
          if (this.layOutOptins.fields.hasOwnProperty(key)) {
            let newVal = this.layOutOptins.fields[key];
            this.tableInfo[key] = newVal;
          }
        }
        callback();
      });
    },
    ceateVuePage(isApp) {
      this.validateTableInfo(() => {
        let vuePath;
        if (!isApp) {
          vuePath = localStorage.getItem('vuePath');
          if (!vuePath) {
            return this.$message.error(
              '请先设置Vue项目对应Views的绝对路径,然后再保存!'
            );
          }
        } else {
          vuePath = localStorage.getItem('appPath');
          if (!vuePath) {
            return this.$message.error('请先设置app路径,然后再保存!');
          }
        }
        let url = `/api/builder/createVuePage?vuePath=${vuePath}&v3=1&app=${isApp ||
          0}`;
        this.http.post(url, this.tableInfo, true).then((x) => {
          this.$Message.info(x);
        });
      });
    },
    createService() {
      this.validateTableInfo(() => {
        let queryParam =
          'tableName=' +
          this.layOutOptins.fields.tableName +
          '&nameSpace=' +
          this.layOutOptins.fields.namespace +
          '&foldername=' +
          this.layOutOptins.fields.folderName;
        this.http
          .post(
            '/api/builder/CreateServices?' + queryParam,
            this.tableInfo,
            true
          )
          .then((x) => {
            this.$Message.info(x);
          });
      });
    },
    ceateModel() {
      this.validateTableInfo(() => {
        this.http
          .post('/api/builder/CreateModel', this.tableInfo, true)
          .then((x) => {
            this.$message.info(x);
          });
      });
    },
    syncTable() {
      if (!this.layOutOptins.fields.tableName)
        return this.$Message.error('请选模块');
      this.http
        .post(
          '/api/builder/syncTable?tableName=' +
            this.layOutOptins.fields.tableName,
          {},
          true
        )
        .then((x) => {
          if (!x.status) {
            return this.$Message.error(x.message);
          }
          this.$Message.info(x.message);
          this.loadTableInfo(this.layOutOptins.fields.table_Id);
        });
    },
    ceateApiController() {},
    ceateController() {},
    checkSortName() {},
    save() {
      localStorage.setItem('vuePath', this.layOutOptins.fields.vuePath || '');
      localStorage.setItem('appPath', this.layOutOptins.fields.appPath || '');
      if (
        this.tableInfo &&
        this.tableInfo.tableColumns &&
        this.tableInfo.tableColumns.length &&
        this.tableInfo.tableColumns.filter((x) => {
          return x.isKey == 1;
        }).length > 1
      ) {
        return this.$Message.error('表结构只能勾选一个主键字段');
      }
      this.validateTableInfo(() => {
        this.http.post('/api/builder/Save', this.tableInfo, true).then((x) => {
          if (!x.status) {
            this.$Message.error(x.message);
            return;
          }
          this.$Message.info(x.message);
          this.tree.forEach((x) => {
            if (x.id == this.layOutOptins.fields.table_Id) {
              x.name = this.layOutOptins.fields.columnCNName;
              x.parentId = this.layOutOptins.fields.parentId;
            }
          });
          this.tableInfo = x.data;
          x.data.vuePath = this.layOutOptins.fields.vuePath;
          x.data.appPath = this.layOutOptins.fields.appPath;
          this.$refs.form.reset(x.data);
          //  this.layOutOptins.fields.vuePath = localStorage.getItem("vuePath");
          this.data = x.data.tableColumns;
          //  this.$Message.info(x);
        });
      });
    },
    onSelect(node) {
      this.loadTableInfo(node);
    },
    onOpenChange(node) {
      if (node.length == 0) return;
      this.loadTableInfo(node.length == 1 ? node[0] : node[node.length - 1]);
    },
    loadTableInfo(id) {
      // localStorage.setItem("vuePath", this.layOutOptins.fields.vuePath || "");
      this.http
        .post(
          '/api/builder/LoadTableInfo?table_Id=' + id + '&isTreeLoad=true',
          {},
          true
        )
        .then((x) => {
          if (!x.data.tableTrueName) {
            x.data.tableTrueName = x.data.tableName;
          }
          //2021.01.09增加代码生成器设置table排序功能
          const _fields = [
            'sortable',
            'isNull',
            'isReadDataset',
            'isColumnData',
            'isDisplay'
          ];
          x.data.tableColumns.forEach((item) => {
            for (let index = 0; index < _fields.length; index++) {
              item[_fields[index]] = item[_fields[index]] || 0;
            }
          });
          this.tableInfo = x.data;
          this.$refs.form.reset(x.data);
          this.data = x.data.tableColumns;
        });
    },
    getVuePath(key) {
      let vuePath = localStorage.getItem(key);
      if (!vuePath || vuePath == 'null' || vuePath == 'undefined') {
        vuePath = '';
      }
      return vuePath;
    }
  },
  mounted() {},
  created() {
    let clientHeight = document.documentElement.clientHeight - 170;
    this.tableHeight = clientHeight < 400 ? 400 : clientHeight;
    this.http
      .post('/api/Sys_Dictionary/GetBuilderDictionary', {}, true)
      .then((dic) => {
        let column = this.layOutOptins.columns.find((x) => {
          return x.field == 'dropNo';
        });
        if (!column) return;
        let data = [{ key: '', value: '' }];
        for (let index = 0; index < dic.length; index++) {
          data.push({ key: dic[index], value: dic[index] });
        }
        column.bind.data = data;
      });
    builderData.form.fields.vuePath = this.getVuePath('vuePath');
    builderData.form.fields.appPath = this.getVuePath('appPath');
    this.http.post('/api/builder/GetTableTree', {}, false).then((x) => {
      this.tree = JSON.parse(x.list);
      if (!x.nameSpace) {
        return this.$message.error(
          '未获取后台项目类库所在命名空间,请确认目录或调试Sys_TableInfoServiceç±»GetTableTree方法'
        );
      }
      let nameSpace = JSON.parse(x.nameSpace);
      let nameSpaceArr = [];
      for (let index = 0; index < nameSpace.length; index++) {
        nameSpaceArr.push({
          key: nameSpace[index],
          value: nameSpace[index]
        });
      }
      //初始化项目命令空间
      this.layOutOptins.options.forEach((option) => {
        option.forEach((item) => {
          if (item.field == 'namespace') {
            item.data.push(...nameSpaceArr);
          }
        });
      });
      this.addOptions.forEach((option) => {
        option.forEach((item) => {
          if (item.field == 'namespace') {
            item.data.push(...nameSpaceArr);
          }
        });
      });
    });
  }
};
</script>
<style scoped>
.builder-tree {
  position: absolute;
  top: 41px;
  bottom: 0;
}
.builder-tree >>> .ivu-menu {
  text-align: left;
  width: 200px !important;
}
.builder-container {
  widows: 100%;
  /* padding: 20px; */
  position: absolute;
  top: 0px;
  left: 0;
  right: 0;
  display: inline-block;
  bottom: 0;
}
.grid-container >>> tr:hover {
  cursor: pointer;
}
.builder-left {
  position: relative;
  width: 201px;
  height: 100%;
  border-right: 2px solid #dcd6d6;
}
.builder-content {
  position: absolute;
  top: 0px;
  left: 200px;
  display: inline-block;
  bottom: 0;
  right: 0px;
}
.builder-content .ivu-alert {
  position: relative;
  display: flex;
  padding: 12px 18px 12px 38px;
}
.builder-content .ivu-alert-icon {
  top: 10px;
}
.builder-content .action {
  text-align: right;
  line-height: 33px;
  padding-right: 26px;
}
.builder-content .action i {
  top: 0px;
  position: relative;
}
.builder-content .action > span {
  padding: 0px 6px;
  font-size: 12px;
  letter-spacing: 1px;
  color: #5a5f5e;
}
.builder-content .action > span:hover {
  cursor: pointer;
  color: black;
}
.builder-content .config {
  /* border: 1px solid #e9e8e8; */
  padding: 15px 15px 0px 15px;
  border-radius: 3px;
  background: #ffffff;
  margin-bottom: 10px;
}
.builder-container .config >>> .ivu-form > .ivu-form-item {
  display: none;
}
.coder-container {
  background: #eee;
}
.coder-container .coder-item {
  background: white;
  padding: 0px 15px;
}
.module-name {
  color: #2d8cf0;
  font-size: 13px;
  line-height: 39px;
  padding-left: 15px;
  border: 1px solid #abdcff;
  background-color: #f0faff;
}
.module-name >>> .ivu-alert-icon {
  top: 12px;
}
.help {
  margin-left: 15px;
  top: 2px;
  position: relative;
  border-bottom: 1px solid;
}
.help:hover {
  color: #f56c6c;
  cursor: pointer;
}
.more {
  text-align: left;
  position: relative;
  top: 2px;
}
.addModel {
  padding: 10px;
}
</style>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/charts/bigdata.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,258 @@
<template>
  <div id="big-data-container" class="big-data-container">
    <div class="head">
      <h1>大屏数据统计分析显示</h1>
    </div>
    <div class="data-container">
      <div class="data-left">
        <div class="data-left-item">
          <div class="title">商品销量分类</div>
          <div id="chart-vleft-1" style="height: calc(100% - 30px)"></div>
          <div class="data-foot-line"></div>
        </div>
        <div class="data-left-item">
          <div class="title">本月商品销量</div>
          <div id="chart-vleft-3" style="height: calc(100% - 30px)"></div>
          <div class="data-foot-line"></div>
        </div>
        <div class="data-left-item">
          <div class="title">7日订单销量</div>
          <div id="chart-vleft-2" style="height: calc(100% - 30px)"></div>
          <div class="data-foot-line"></div>
        </div>
      </div>
      <div class="data-center">
        <!-- <div class="title">中间位置</div> -->
        <div class="center-top-num">
          <div class="item">
            <div class="text">累计销量</div>
            <div class="num">220,000</div>
          </div>
          <div class="item">
            <div class="text">累计销售金额</div>
            <div class="num">58,000,000</div>
          </div>
          <div class="item">
            <div class="text">购买用户人数</div>
            <div class="num">15,000</div>
          </div>
          <div class="data-foot-line"></div>
        </div>
        <div
          class="center-top"
          style="height: 260px; padding-top: 25px; overflow: hidden"
        >
          <!-- <div class="title">用户活跃信息-1</div> -->
          <div id="chart-vgauge-1" style="height: 400px"></div>
          <!-- <iview-circle :size="200" style="padding: 8px 0;"></iview-circle> -->
          <div class="data-foot-line"></div>
        </div>
        <div class="title">订单销售统计</div>
        <div id="chart-vcenter" style="height:400px;" class="chart-vcenter"></div>
      </div>
      <div class="data-right">
        <div class="data-right-item">
          <div class="title">销售情况走势</div>
          <div id="chart-vright-1" style="height: calc(100% - 30px)"></div>
          <div class="data-foot-line"></div>
        </div>
        <div class="data-right-item" style="height: 220px; padding-top: 25px">
          <!-- <div class="title">用户活跃信息</div> -->
          <!-- <iview-circle></iview-circle> -->
          <div id="chart-vgauge-2" style="height: 300px"></div>
          <div class="data-foot-line"></div>
        </div>
        <div class="data-right-item right-3">
          <div class="title">商品销售排行</div>
          <div id="chart-vright-3" class="right-item">
            <div class="item">
              <div class="top">排名</div>
              <div class="pro-name">商品名称</div>
              <div class="num">销量</div>
              <div class="num">销售金额</div>
            </div>
            <div class="item">
              <div class="top top-1">
                <span>1</span>
              </div>
              <div class="pro-name">卡帝乐鳄鱼</div>
              <div class="num">2,200</div>
              <div class="num">360,00</div>
            </div>
            <div class="item">
              <div class="top top-2">
                <span>2</span>
              </div>
              <div class="pro-name">春夏男T恤</div>
              <div class="num">1,700</div>
              <div class="num">24,500</div>
            </div>
            <div class="item">
              <div class="top top-3">
                <span>3</span>
              </div>
              <div class="pro-name">男女同款休闲鞋</div>
              <div class="num">1,120</div>
              <div class="num">12,700</div>
            </div>
          </div>
          <div class="boxfoot"></div>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
var echarts = require("echarts");
let $chartLeft1,
  $chartLeft2,
  $chartLeft3,
  $chartCenter,
  $chartRight1,
  $chartGauge1,
  $chartGauge2;
import {
  chartLeft1,
  chartLeft2,
  chartLeft3,
  chartRight1,
  gauge,
} from "./bigdata/chart-options";
// import IviewCircle from "./bigdata/IviewCircle";
import "./bigdata/layout.less";
export default {
  components: {
    // "iview-circle": IviewCircle
  },
  data() {
    return {};
  },
  created() {
    console.log("chart");
  },
  mounted() {
    if ($chartLeft1) {
      $chartLeft1.dispose();
      $chartLeft2.dispose();
      $chartLeft3.dispose();
      $chartCenter.dispose();
      $chartRight1.dispose();
      $chartGauge1.dispose();
      $chartGauge2.dispose();
    }
    $chartLeft1 = echarts.init(document.getElementById("chart-vleft-1"));
    $chartLeft1.setOption(chartLeft1, true);
    $chartLeft2 = echarts.init(document.getElementById("chart-vleft-2"));
    $chartLeft2.setOption(chartLeft2, true);
    $chartLeft3 = echarts.init(document.getElementById("chart-vleft-3"));
    $chartLeft3.setOption(chartLeft3, true);
    $chartCenter = echarts.init(document.getElementById("chart-vcenter"));
    $chartCenter.setOption(chartRight1, true);
    $chartRight1 = echarts.init(document.getElementById("chart-vright-1"));
    $chartRight1.setOption(chartRight1, true);
    $chartGauge1 = echarts.init(document.getElementById("chart-vgauge-1"));
    $chartGauge1.setOption(gauge, true);
    $chartGauge2 = echarts.init(document.getElementById("chart-vgauge-2"));
    $chartGauge2.setOption(gauge);
  },
  destroyed() {
    $chartLeft1 = null;
    $chartLeft2 = null;
    $chartLeft3 = null;
    $chartCenter = null;
    $chartRight1 = null;
    $chartGauge1 = null;
    $chartGauge2 = null;
  },
};
</script>
<style scoped>
/* .chart-center {
  display: flex;
  border: 1px solid #0000ff;
  height: 200px;
  flex-direction: column;
  margin-top: 20px;
}
.chart-center .item {
  text-align: center;
  border: 1px solid #00c1b3;
  flex: 1;
} */
.right-3 {
  display: flex;
  flex-direction: column;
  /* margin-top: 20px; */
}
.right-3 .right-item {
  flex: 1;
  display: flex;
  flex-direction: column;
}
.right-3 .item {
  text-align: left;
  border-bottom: 1px solid #549069;
  flex: 1;
  display: flex;
  padding: 5px 10px;
  margin: 0 10px;
  font-size: 14px;
  line-height: 30px;
}
.right-3 .item:last-child {
  border-bottom: 0;
}
.right-3 .item > div {
  color: white;
}
.right-3 .top {
  width: 60px;
  position: relative;
}
.right-3 .top span {
  position: absolute;
  width: 20px;
  line-height: 20px;
  top: 5px;
  text-align: center;
  border-radius: 5px;
}
.right-3 .top-1 span {
  background: #e80d0d;
}
.right-3 .top-2 span {
  background: #00c935;
}
.right-3 .top-3 span {
  background: #0083f4;
}
.right-3 .num {
  width: 88px;
}
.right-3 .pro-name {
  flex: 1;
}
</style>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/charts/bigdata/IviewCircle.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,102 @@
<template>
  <div class="demo-Circle">
    <div style>
      <i-circle
        :size="size"
        :trail-width="4"
        :stroke-width="5"
        :percent="75"
        stroke-linecap="square"
        stroke-color="#43a3fb"
      >
        <div class="demo-Circle-custom">
          <h1>1500</h1>
          <p>昨日活跃用户数量</p>
          <span>
            å æ¯”
            <i>{{1500/20000}}%</i>
          </span>
        </div>
      </i-circle>
    </div>
    <div style>
      <i-circle
        :size="size"
        :trail-width="4"
        :stroke-width="5"
        :percent="75"
        stroke-linecap="square"
        stroke-color="#43a3fb"
      >
        <div class="demo-Circle-custom">
          <h1>12000</h1>
          <p>上月活跃用户数量</p>
          <span>
            å æ¯”
            <i>{{12000/150000}}%</i>
          </span>
        </div>
      </i-circle>
    </div>
  </div>
</template>
<script>
export default {
  props:{
    size:{
      type:Number,
      default:150
    }
  }
}
</script>
<style scoped>
.demo-Circle {
  display: flex;
}
.demo-Circle > div {
  flex: 1;
  text-align: center;
}
.demo-Circle > div:first-child{
  padding-left:10%;
}
.demo-Circle > div:last-child{
  padding-right:10%;
}
</style>
<style lang="less" scoped>
.demo-Circle-custom {
  & h1 {
    color:#ffffff;
    font-size: 28px;
    font-weight: normal;
  }
  & p {
    color: #ece8e8;
    font-size: 14px;
    margin: 10px 0 15px;
  }
  & span {
    display: block;
    padding-top: 15px;
    color: wheat;
    font-size: 14px;
    &:before {
      content: "";
      display: block;
      width: 50px;
      height: 1px;
      margin: 0 auto;
      background: #e0e3e6;
      position: relative;
      top: -15px;
    }
  }
  & span i {
    font-style: normal;
    color: white;
  }
}
</style>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/charts/bigdata/head_bg.png
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/charts/bigdata/layout.less
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,197 @@
.big-data-container {
  position: absolute;
  overflow: hidden;
  height: 100%;
  width: 100%;
  background-color: #1400a8;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25' viewBox='0 0 1200 800'%3E%3Cdefs%3E%3CradialGradient id='a' cx='0' cy='800' r='800' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%230e0077'/%3E%3Cstop offset='1' stop-color='%230e0077' stop-opacity='0'/%3E%3C/radialGradient%3E%3CradialGradient id='b' cx='1200' cy='800' r='800' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%2314057c'/%3E%3Cstop offset='1' stop-color='%2314057c' stop-opacity='0'/%3E%3C/radialGradient%3E%3CradialGradient id='c' cx='600' cy='0' r='600' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%230d0524'/%3E%3Cstop offset='1' stop-color='%230d0524' stop-opacity='0'/%3E%3C/radialGradient%3E%3CradialGradient id='d' cx='600' cy='800' r='600' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%231400a8'/%3E%3Cstop offset='1' stop-color='%231400a8' stop-opacity='0'/%3E%3C/radialGradient%3E%3CradialGradient id='e' cx='0' cy='0' r='800' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%23000000'/%3E%3Cstop offset='1' stop-color='%23000000' stop-opacity='0'/%3E%3C/radialGradient%3E%3CradialGradient id='f' cx='1200' cy='0' r='800' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%23130733'/%3E%3Cstop offset='1' stop-color='%23130733' stop-opacity='0'/%3E%3C/radialGradient%3E%3C/defs%3E%3Crect fill='url(%23a)' width='1200' height='800'/%3E%3Crect fill='url(%23b)' width='1200' height='800'/%3E%3Crect fill='url(%23c)' width='1200' height='800'/%3E%3Crect fill='url(%23d)' width='1200' height='800'/%3E%3Crect fill='url(%23e)' width='1200' height='800'/%3E%3Crect fill='url(%23f)' width='1200' height='800'/%3E%3C/svg%3E");
  background-attachment: fixed;
  background-size: cover;
  .head {
    height: 75px;
    /* height: 1.05rem; */
    background: url(./head_bg.png) no-repeat center center;
    background-size: 100% 100%;
    position: relative;
    z-index: 100;
  }
}
.head h1 {
  margin: 0;
  color: #fff;
  text-align: center;
  /* font-size: .4rem; */
  /* line-height: .8rem; */
  line-height: 71px;
}
.data-container {
  /* margin: 5px 15px;
        height:100%; */
  margin: 0px 15px;
  position: absolute;
  left: 0;
  right: 0;
  top: 76px;
  bottom: 0;
}
.data-container > div {
  float: left;
  /* border: 1px solid white; */
  height: 100%;
}
.data-center {
  padding: 0 0.9rem;
  width: 40%;
  display: flex;
  flex-direction: column;
  // .center-top{
  //   height: 210px;
  //   background: red;
  // }
.chart-center{
  flex: 1;
}
}
.chart-center{
  width: 100%;
display: flex;
//  background: white;
}
.data-left,
.data-right {
  width: 30%;
  display: flex;
  flex-direction: column;
}
.data-left-item,
.data-right-item,.center-top,.center-top-num,.chart-center {
  border: 1px solid rgba(25, 186, 139, 0.17);
  padding: 0 0.2rem 0.4rem 0.15rem;
  background: rgba(255, 255, 255, 0.04);
  background-size: 100% auto;
  position: relative;
  margin-bottom: 0.15rem;
  z-index: 10;
}
.data-foot-line {
  position: absolute;
  bottom: 0;
  width: 100%;
  left: 0;
}
.data-foot-line:before,
.data-foot-line:after {
  position: absolute;
  width: 10px;
  height:10px;
  content: "";
  border-bottom: 2px solid #02a6b5;
  bottom: 0;
}
.boxall:before,
.data-foot-line:before {
  border-left: 2px solid #02a6b5;
  left: 0;
}
.boxall:after,
.data-foot-line:after {
  border-right: 2px solid #02a6b5;
  right: 0;
}
.boxall:before,
.boxall:after {
  position: absolute;
  width: 10px;
  height: 10px;
  content: "";
  border-top: 2px solid #02a6b5;
  top: 0;
}
.data-left-item:before,
.data-right-item:before,
.center-top-num:before,
.center-top:before{
  border-left: 2px solid #02a6b5;
  left: 0;
  position: absolute;
  width: 10px;
  height:10px;
  content: "";
  border-top: 2px solid #02a6b5;
  top: 0;
}
.data-left-item:after,
.data-right-item:after,
.center-top-num:after,
.center-top:after {
  border-right: 2px solid #02a6b5;
  right: 0;
  position: absolute;
  width: 10px;
  height: 10px;
  content: "";
  border-top: 2px solid #02a6b5;
  top: 0;
}
.data-left,
.data-right {
  /* display: flex; */
}
.data-left > .data-left-item,
.data-right > .data-right-item {
  flex: 1;
  margin-bottom: 0.9rem;
}
.data-center  .title,
.data-left > .data-left-item .title,
.data-right > .data-right-item .title {
  /* font-size: .2rem; */
  font-size: 1rem;
  padding: 7px 0;
  color: #fff;
  text-align: center;
  /* line-height: .5rem; */
}
.data-center .chart-center{
  width: 100%;
}
.center-top-num{
  height: 80px;
  padding-top: 7px;
  margin-bottom: 0.8rem;
  display: flex;
  .item{
    flex: 1;
    text-align: center;
  }
  .text{
    color: #fcf0d8;
    font-size: 14px;
  }
  .num{
    font-size: 34px;
    font-family: -apple-system, BlinkMacSystemFont, Segoe UI, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Helvetica Neue, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;
    font-weight: bold;
    color: #67caca;
  }
}
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/charts/chart.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,101 @@
<template>
  <div class="m-charts">
    <el-tabs
      v-model="name"
      @tab-click="tabClick"
      type="border-card"
      style="height: 100%; width: 100%; box-shadow: none"
    >
      <el-tab-pane name="bar">
        <template #label>
          <span><i class="el-icon-date"></i> æŸ±çж图 </span>
        </template>
        <div
          :style="{ height: heigth + 'px', width: width + 'px' }"
          id="bar-0001"
        ></div>
      </el-tab-pane>
      <el-tab-pane name="pie" :lazy="false" label="消息中心">
        <template #label>
          <span><i class="el-icon-date"></i> é¥¼çж图 </span>
        </template>
        <div
          :style="{ height: heigth + 'px', width: width + 'px' }"
          id="pie-0001"
        ></div>
      </el-tab-pane>
      <el-tab-pane name="line" :lazy="false" label="角色管理">
        <template #label>
          <span><i class="el-icon-date"></i> æŠ˜çº¿å›¾ </span>
        </template>
        <div
          :style="{ height: heigth + 'px', width: width + 'px' }"
          id="line-0001"
        ></div>
      </el-tab-pane>
    </el-tabs>
  </div>
</template>
<script>
let echarts = require("echarts");
import options from "./chartOptions";
let $bar;
let $pie;
let $line;
export default {
  mounted() {
    $bar = echarts.init(document.getElementById("bar-0001"));
    $bar.setOption(this.options.bar);
  },
  created() {
    this.heigth = document.documentElement.clientHeight - 190;
    this.width = document.documentElement.clientWidth - 240;
  },
  methods: {
    tabClick(name) {
      if (name.props.name == "pie") {
        if (!$pie) {
          $pie = echarts.init(document.getElementById("pie-0001"));
          $pie.setOption(this.options.pie);
        }
      } else if (name.props.name == "line") {
        if (!$line) {
          $line = echarts.init(document.getElementById("line-0001"));
          $line.setOption(this.options.line);
        }
      }
    },
  },
  data() {
    return {
      name: "bar",
      heigth: 450,
      width: 1000,
      options: options,
    };
  },
};
</script>
<style lang="less" scoped>
.m-charts {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: #f1f1f1;
  margin: auto 0;
  padding: 12px;
  .m-tabs {
    background: white;
  }
}
.m-charts ::v-deep(.el-tabs__content) {
  height: calc(100% - 45px);
}
.m-charts ::v-deep(.el-tab-pane) {
  height: 100%;
}
</style>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/charts/flex.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,386 @@
<template>
  <div class="home-contianer">
    <div>
      <div class="order-title">
        <h2>订单统计</h2>
      </div>
      <div
        data-v-542f4644
        class="ivu-row"
        style="padding: 15px; background: white"
      >
        <div
          v-for="item in topColor"
          :key="item.name"
          class="ivu-col ivu-col-span-6"
          style="padding-left: 8px; padding-right: 8px"
        >
          <div
            data-v-542f4644
            class="ivu-card"
            :style="{ background: item.background }"
          >
            <div class="icon-left">
              <i :class="item.icon" />
            </div>
            <div class="ivu-card-body">
              <div class="demo-color-name">{{ item.name }}</div>
              <div class="demo-color-desc">#{{ item.qty }}</div>
            </div>
          </div>
        </div>
      </div>
      <div class="numbers">
        <div class="item" v-for="index in 8" :key="index">
          <div class="number">
            <!-- {{value}} -->
            {{index * 1000}}
          </div>
          <div>Order total</div>
        </div>
      </div>
      <div class="order-title">
        <h2>订单查询</h2>
      </div>
      <div class="order-range">
        <div
          class="order-item"
          v-for="(item, index) in totalRange"
          :key="index"
        >
          <div class="total">
            <div class="number">
              {{item.qty}}
            </div>
          </div>
          <div class="name">{{ titleLeft + item.name }}</div>
          <div class="date">
            {{ beginDate.replace(/-/g, ".") }} --
            {{ endDate.replace(/-/g, ".") }}
          </div>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      beginDate: "",
      endDate: "",
      n: 90,
      topColor: [
        {
          name: "订单数",
          desc: "#205",
          background: "rgb(25, 190, 107)",
          icon: "el-icon-shopping-cart-full",
          qty: 6000,
          key: "total",
        },
        {
          name: "已付款",
          desc: "#412",
          background: "rgb(45, 183, 245)",
          icon: "el-icon-wallet",
          qty: 7100,
          key: "total",
        },
        {
          name: "待发货",
          desc: "#412",
          background: "#f2b458",
          icon: "el-icon-shopping-cart-1",
          qty: 500,
          key: "hasPay",
        },
        {
          name: "配送中",
          desc: "#412",
          background: "rgb(84, 110, 122)",
          icon: "el-icon-shopping-cart-2",
          qty: 800,
          key: "notShip",
        },
        {
          name: "已完成",
          desc: "#412",
          background: "rgb(45, 183, 245)",
          icon: "el-icon-set-up",
          qty: 1880,
          key: "completed",
        },
        {
          name: "退货订单",
          desc: "#12",
          background: "rgb(237, 64, 20)",
          icon: "el-icon-data-analysis",
          qty: 2290,
          key: "refund",
        },
      ],
      totalRange: [
        {
          name: "订单数",
          desc: "#205",
          background: "rgb(25, 190, 107)",
          icon: "ios-cart",
          qty: 1290,
          key: "total",
        },
        {
          name: "已付款",
          desc: "#412",
          background: "rgb(45, 183, 245)",
          icon: "ios-cash",
          qty: 3450,
          key: "total",
        },
        {
          name: "待发货",
          desc: "#412",
          background: "rgb(255, 153, 0)",
          icon: "md-bus",
          qty: 200,
          key: "hasPay",
        },
        {
          name: "配送中",
          desc: "#412",
          background: " rgb(84, 110, 122)",
          icon: "md-pin",
          qty: 7000,
          key: "notShip",
        },
        {
          name: "交易完成",
          desc: "#412",
          background: "rgb(45, 183, 245)",
          icon: "ios-help-buoy",
          qty: 8900,
          key: "completed",
        },
        {
          name: "退货订单",
          desc: "#12",
          background: "rgb(237, 64, 20)",
          icon: "ios-navigate",
          qty: 2450,
          key: "refund",
        },
      ],
      value1: "1",
      titleLeft: "",
      dateNow: "",
    };
  },
  methods: {
    getDate() {
      var date = new Date();
      var year = date.getFullYear();
      var month = date.getMonth() + 1;
      var day = date.getDate();
      var hour = date.getHours();
      var minutes = date.getMinutes();
      var second = date.getSeconds();
      this.beginDate =
        year +
        "-" +
        (month < 10 ? "0" + month : month) +
        "-" +
        (day < 10 ? "0" + day : day);
      this.endDate = this.beginDate;
      this.dateNow = this.beginDate;
    },
    search() {
      if (this.dateNow == this.beginDate && this.dateNow == this.endDate) {
        this.titleLeft = "今日";
      } else {
        this.titleLeft = "当期";
      }
    },
  },
  created() {
    this.getDate();
  },
  mounted() {},
};
</script>
<style scoped>
.home-contianer {
  background: #efefef;
  width: 100%;
  height: 100%;
  /* padding: 20px; */
}
.ivu-card-body {
  text-align: center;
  padding: 20px 5px;
  /* padding-left: 80px; */
  font-size: 16px;
}
.demo-color-name {
  color: #fff;
  font-size: 14px;
}
.demo-color-desc {
  color: white;
  /* opacity: 0.7; */
  font-size: 20px;
  margin-top: 2px;
}
.ivu-card {
  box-shadow: 0 3px 13px rgba(117, 114, 114, 0.47);
  display: flex;
  position: relative;
      padding-top: 10px;
    border-radius: 5px;
}
.ivu-card .icon-left {
  width: 85px;
}
.ivu-card .ivu-card-body {
  flex: 1;
}
.ivu-card .icon-left {
  text-align: center;
  border-right: 1px solid;
  padding: 8px 0px;
  height: 100%;
  font-size: 50px;
  color: white;
}
.ivu-row {
  border-bottom: 2px dotted #eee;
  padding: 15px;
  margin-bottom: 15px;
  display: flex;
}
.ivu-row > div {
  flex: 1;
}
.h5-desc {
  padding-top: 10px;
}
</style>
<style lang="less" scoped>
.jn-day-total {
  display: flex;
  padding: 15px;
  background: white;
  .date-text {
    line-height: 36px;
    padding: 0 15px;
  }
  .date {
    margin-right: 20px;
  }
  .btn {
    margin-left: 10px;
  }
}
.order-title {
  h2 {
    padding: 7px 15px;
    font-weight: 500;
    background: white;
    border-bottom: 1px dotted #d4d4d4;
  }
}
.order-range {
  padding: 0 15px;
  background: white;
  background: white;
  display: flex;
  // flex-direction: row-reverse;
}
.order-range .order-item {
  box-shadow: 0 3px 13px rgba(117, 114, 114, 0.47);
  flex: 1;
  border-radius: 6px;
  font-size: 14px;
  text-align: center;
  border: 1px solid #e6e6e6;
  margin: 7px;
}
.order-range .total {
  color: white;
  font-size: 50px;
  font-weight: bold;
  line-height: 100px;
  background: #55ce80;
  font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB",
    "Microsoft YaHei", "微软雅黑", Arial, sans-serif;
}
.order-range .number {
  transition: transform 0.8s;
}
.order-range .number:hover {
  cursor: pointer;
  transform: scale(1.2);
}
.order-range .name {
  font-size: 20px;
  padding: 10px;
}
.order-range .date {
  padding: 1px 0 20px 0;
  color: #9e9e9e;
  font-size: 13px;
}
</style>
<style lang="less" scoped>
.numbers {
    margin-bottom: 15px;
  border-radius: 5px;
  border: 1px solid #eaeaea;
  background: white;
  display: flex;
  padding: 20px 0px;
  .item {
    flex: 1;
    text-align: center;
    border-right: 1px solid #e5e5e5;
  }
  .item > ã€€div:first-child {
    word-break: break-all;
    color: #282727;
    font-size: 30px;
    // padding-bottom: 12px;
  }
  .item > ã€€div:last-child {
    font-size: 13px;
    color: #777;
  }
  .item:last-child {
    border-right: none;
  }
  .number {
    cursor: pointer;
    transition: transform 0.8s;
  }
  .number:hover {
    transform: scale(1.2);
    color: #03c10b !important;
  }
}
</style>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/charts/formChart.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,118 @@
<template>
  <div class="c-container">
    <div class="item">
      <div class="left">
        <VolHeader
          icon="md-apps"
          text="柱状图"
          style="padding-left: 10px; margin-bottom: 5px"
        ></VolHeader>
        <div  style="height: calc(100% - 45px)" :id="bar"></div>
      </div>
      <div class="right">
        <VolHeader
          icon="md-apps"
          text="基础表单"
          style="padding-left: 10px; margin-bottom: 20px"
        ></VolHeader>
        <VolForm
          style="padding-right: 30px"
          ref="myform1"
          :loadKey="true"
          :label-width="80"
          :formFields="formFields1"
          :formRules="formRules1"
        ></VolForm>
      </div>
    </div>
    <div class="item">
      <div class="left">
        <VolHeader
          icon="md-apps"
          text="表单属性字段只读"
          style="padding-left: 10px; margin-bottom: 20px"
        ></VolHeader>
        <VolForm
          style="padding-right: 30px"
          ref="myform1"
          :loadKey="true"
          :formFields="formFields2"
          :formRules="formRules2"
        ></VolForm>
      </div>
      <div class="right">
        <VolHeader
          icon="md-apps"
          text="饼状图表"
          style="padding-left: 10px"
        ></VolHeader>
        <div style="height: calc(100% - 30px)" :id="pie"></div>
      </div>
    </div>
  </div>
</template>
<script>
import VolHeader from '@/components/basic/VolHeader.vue';
import VolForm from '@/components/basic/VolForm.vue';
let echarts = require('echarts');
import options from './chartOptions';
import {
  formFields1,
  formRules1,
  formFields2,
  formRules2
} from './formOptions';
export default {
  components: { VolForm, VolHeader },
  data() {
    return {
      formFields1: formFields1,
      formRules1: formRules1,
      formFields2: formFields2,
      formRules2: formRules2,
      bar: 'b-' + ~~(Math.random(10000, 100000) * 100000),
      pie: 'p-' + ~~(Math.random(10000, 100000) * 100000),
      options: options
    };
  },
  mounted() {
    let $bar = echarts.init(document.getElementById(this.bar));
    $bar.setOption(this.options.bar);
    this.options.pie.legend.top = 50;
    this.options.pie.legend.right = 80;
    this.options.pie.legend.orient = 'vertical';
    let $pie = echarts.init(document.getElementById(this.pie));
    $pie.setOption(this.options.pie);
  }
};
</script>
<style lang="less" scoped>
.c-container {
  position: absolute;
  height: 100%;
  width: 100%;
  background: #f1f1f1;
  display: flex;
  flex-direction: column;
  padding: 3px;
  .item {
    flex:1;
    height:0;
    display: flex;
    > div {
      flex: 1;
      width: 0;
      // margin: 10px;
      background: #fff;
    }
    .left {
      margin: 4px;
    }
    .right {
      margin: 4px;
    }
  }
}
</style>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/quartzJob/deviceInfo.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,365 @@
 <template>
  <view-grid
    ref="grid"
    :columns="columns"
    :detail="detail"
    :editFormFields="editFormFields"
    :editFormOptions="editFormOptions"
    :searchFormFields="searchFormFields"
    :searchFormOptions="searchFormOptions"
    :table="table"
    :extend="extend"
  >
  </view-grid>
</template>
<script>
import extend from "@/extension/quartzJob/deviceInfo.js";
import { ref, defineComponent } from "vue";
export default defineComponent({
  setup() {
    const table = ref({
      key: "id",
      footer: "Foots",
      cnName: "设备信息",
      name: "deviceInfo",
      url: "/DeviceInfo/",
      sortName: "createDate",
    });
    const editFormFields = ref({
      deviceCode: "",
      deviceName: "",
      deviceType: "",
      deviceStatus: "",
      deviceIp: "",
      devicePort: "",
      devicePlcType: "",
      deviceRemark: "",
    });
    const editFormOptions = ref([
      [
        {
          title: "设备编号",
          required: true,
          field: "deviceCode",
          type: "string",
        },
        {
          title: "设备名称",
          required: true,
          field: "deviceName",
          type: "string",
        },
        {
          title: "设备类型",
          required: true,
          field: "deviceType",
          type: "select",
          dataKey: "deviceType",
          data: [],
        },
        {
          title: "设备状态",
          required: true,
          field: "deviceStatus",
          type: "select",
          dataKey: "deviceStatus",
          data: [],
        },
      ],
      [
        { title: "设备IP", required: true, field: "deviceIp", type: "string" },
        {
          title: "设备端口",
          required: true,
          field: "devicePort",
          type: "string",
        },
        {
          title: "PLC类型",
          required: true,
          field: "devicePlcType",
          type: "select",
          dataKey: "devicePlcType",
          data: [],
        },
        {
          title: "备注",
          field: "deviceRemark",
          type: "string",
        },
      ],
    ]);
    const searchFormFields = ref({
      deviceCode: "",
      deviceType: "",
      deviceStatus: "",
    });
    const searchFormOptions = ref([
      [
        { title: "设备编号", field: "deviceCode" },
        {
          title: "设备类型",
          field: "deviceType",
          type: "select",
          dataKey: "deviceType",
          data: [],
        },
        {
          title: "设备状态",
          field: "deviceStatus",
          type: "select",
          dataKey: "deviceStatus",
          data: [],
        },
      ],
    ]);
    const columns = ref([
      {
        field: "id",
        title: "Id",
        type: "int",
        width: 90,
        hidden: true,
        readonly: true,
        require: true,
        align: "left",
      },
      {
        field: "deviceCode",
        title: "设备编号",
        type: "string",
        width: 90,
        align: "left",
      },
      {
        field: "deviceName",
        title: "设备名称",
        type: "string",
        link: true,
        width: 150,
        align: "left",
      },
      {
        field: "deviceType",
        title: "设备类型",
        type: "string",
        width: 150,
        align: "left",
        bind: { key: "deviceType", data: [] },
      },
      {
        field: "deviceStatus",
        title: "设备状态",
        type: "string",
        width: 90,
        align: "left",
        bind: { key: "deviceStatus", data: [] },
      },
      {
        field: "deviceIp",
        title: "设备IP",
        type: "string",
        width: 90,
        align: "left",
      },
      {
        field: "devicePort",
        title: "设备端口",
        type: "int",
        width: 120,
        align: "left",
      },
      {
        field: "devicePlcType",
        title: "PLC类型",
        type: "string",
        width: 120,
        align: "left",
        bind: { key: "devicePlcType", data: [] },
      },
      {
        field: "creater",
        title: "创建人",
        type: "string",
        width: 90,
        align: "left",
      },
      {
        field: "createDate",
        title: "创建时间",
        type: "datetime",
        width: 160,
        align: "left",
      },
      {
        field: "modifier",
        title: "修改人",
        type: "string",
        width: 100,
        align: "left",
      },
      {
        field: "modifyDate",
        title: "修改时间",
        type: "datetime",
        width: 160,
        align: "left",
      },
      {
        field: "deviceRemark",
        title: "备注",
        type: "string",
        width: 100,
        align: "left",
      },
    ]);
    const detail = ref({
      cnName: "设备协议信息",
      table: "DeviceProtocol",
      columns: [
        {
          field: "id",
          title: "Id",
          type: "int",
          width: 90,
          hidden: true,
          require: true,
          align: "left",
        },
        {
          field: "deviceId",
          title: "设备主键",
          type: "string",
          width: 90,
          hidden: true,
          readonly: true,
          require: true,
          align: "left",
        },
        {
          field: "deviceChildCode",
          title: "设备子编号",
          type: "string",
          edit: { type: "" },
          width: 150,
          require: true,
          align: "left",
          sortable: true,
        },
        {
          field: "deviceProDataBlock",
          title: "协议数据块",
          type: "string",
          width: 100,
          require: true,
          align: "left",
          edit: { type: "" },
        },
        {
          field: "deviceProOffset",
          title: "偏移量",
          type: "decimal",
          width: 90,
          edit: { type: "number" },
          require: true,
          align: "left",
        },
        {
          field: "deviceProDataType",
          title: "数据类型",
          type: "string",
          width: 90,
          require: true,
          align: "left",
          edit: { type: "" },
        },
        {
          field: "deviceProDataLength",
          title: "数据长度",
          type: "int",
          width: 90,
          require: true,
          align: "left",
          edit: { type: "" },
        },
        {
          field: "deviceProParamName",
          title: "参数名称",
          type: "string",
          width: 150,
          require: true,
          align: "left",
          edit: { type: "" },
        },
        {
          field: "deviceProParamType",
          title: "参数类型",
          type: "string",
          width: 150,
          require: true,
          align: "left",
          edit: { type: "" },
        },
        {
          field: "deviceProParamDes",
          title: "参数说明",
          type: "string",
          width: 130,
          require: true,
          align: "left",
          edit: { type: "" },
        },
        {
          field: "creater",
          title: "创建人",
          type: "string",
          width: 90,
          align: "left",
          sortable: true,
        },
        {
          field: "creater",
          title: "创建人",
          type: "string",
          width: 90,
          align: "left",
        },
        {
          field: "createDate",
          title: "创建时间",
          type: "datetime",
          width: 160,
          align: "left",
        },
        {
          field: "modifier",
          title: "修改人",
          type: "string",
          width: 100,
          align: "left",
        },
        {
          field: "modifyDate",
          title: "修改时间",
          type: "datetime",
          width: 160,
          align: "left",
        },
      ],
      sortName: "createDate",
      key: "id",
    });
    return {
      table,
      extend,
      editFormFields,
      editFormOptions,
      searchFormFields,
      searchFormOptions,
      columns,
      detail,
    };
  },
});
</script>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/quartzJob/deviceProtocol.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,229 @@
<template>
  <view-grid
    ref="grid"
    :columns="columns"
    :detail="detail"
    :editFormFields="editFormFields"
    :editFormOptions="editFormOptions"
    :searchFormFields="searchFormFields"
    :searchFormOptions="searchFormOptions"
    :table="table"
    :extend="extend"
  >
  </view-grid>
</template>
  <script>
import extend from "@/extension/quartzJob/deviceProtocol.js";
import { ref, defineComponent } from "vue";
export default defineComponent({
  setup() {
    const table = ref({
      key: "id",
      footer: "Foots",
      cnName: "设备协议信息",
      name: "deviceProtocol",
      url: "/DeviceProtocol/",
      sortName: "id",
    });
    const editFormFields = ref({
      deviceCode: "",
      deviceName: "",
      deviceType: "",
      deviceStatus: "",
      deviceIp: "",
      devicePort: "",
      devicePlcType: "",
      deviceRemark: "",
    });
    const editFormOptions = ref([
      [
        {
          title: "设备编号",
          required: true,
          field: "deviceCode",
          type: "string",
        },
        {
          title: "设备名称",
          required: true,
          field: "deviceName",
          type: "string",
        },
        {
          title: "设备类型",
          required: true,
          field: "deviceType",
          type: "string",
        },
        {
          title: "设备状态",
          required: true,
          field: "deviceStatus",
          type: "string",
        },
      ],
      [
        { title: "设备IP", required: true, field: "deviceIp", type: "string" },
        {
          title: "设备端口",
          required: true,
          field: "devicePort",
          type: "string",
        },
        {
          title: "PLC类型",
          required: true,
          field: "devicePlcType",
          type: "string",
        },
        {
          title: "备注",
          field: "deviceRemark",
          type: "string",
        },
      ],
    ]);
    const searchFormFields = ref({
      deviceCode: "",
      deviceType: "",
      deviceStatus: "",
    });
    const searchFormOptions = ref([
      [
        { title: "设备编号", field: "deviceCode" },
        { title: "设备类型", field: "deviceType" },
        { title: "设备状态", field: "deviceStatus" },
      ],
    ]);
    const columns = ref([
      {
        field: "id",
        title: "Id",
        type: "int",
        width: 90,
        hidden: true,
        readonly: true,
        require: true,
        align: "left",
      },
      {
        field: "deviceId",
        title: "设备主键",
        type: "string",
        width: 90,
        align: "left",
      },
      {
        field: "deviceChildCode",
        title: "设备子编号",
        type: "string",
        width: 150,
        align: "left",
      },
      {
        field: "deviceProDataBlock",
        title: "协议数据块",
        type: "string",
        width: 150,
        align: "left",
      },
      {
        field: "deviceProOffset",
        title: "偏移量",
        type: "decimal",
        width: 90,
        align: "left",
      },
      {
        field: "deviceProDataType",
        title: "数据类型",
        type: "string",
        width: 90,
        align: "left",
      },
      {
        field: "deviceProDataLength",
        title: "数据长度",
        type: "int",
        width: 120,
        align: "left",
      },
      {
        field: "deviceProParamName",
        title: "参数名称",
        type: "string",
        width: 200,
        align: "left",
      },
      {
        field: "deviceProParamType",
        title: "参数类型",
        type: "string",
        width: 180,
        align: "left",
      },
      {
        field: "deviceProParamDes",
        title: "参数说明",
        type: "string",
        width: 120,
        align: "left",
      },
      {
        field: "creater",
        title: "创建人",
        type: "string",
        width: 90,
        align: "left",
      },
      {
        field: "createDate",
        title: "创建时间",
        type: "datetime",
        width: 160,
        align: "left",
      },
      {
        field: "modifier",
        title: "修改人",
        type: "string",
        width: 100,
        align: "left",
      },
      {
        field: "modifyDate",
        title: "修改时间",
        type: "datetime",
        width: 160,
        align: "left",
      },
      {
        field: "deviceProRemark",
        title: "备注",
        type: "string",
        width: 100,
        align: "left",
      },
    ]);
    const detail = ref({
      cnName: "",
      table: "",
      columns: [],
      sortName: "",
      key: "",
    });
    return {
      table,
      extend,
      editFormFields,
      editFormOptions,
      searchFormFields,
      searchFormOptions,
      columns,
      detail,
    };
  },
});
</script>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/quartzJob/deviceProtocolDetail.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,207 @@
<template>
  <view-grid
    ref="grid"
    :columns="columns"
    :detail="detail"
    :editFormFields="editFormFields"
    :editFormOptions="editFormOptions"
    :searchFormFields="searchFormFields"
    :searchFormOptions="searchFormOptions"
    :table="table"
    :extend="extend"
  >
  </view-grid>
</template>
  <script>
import extend from "@/extension/quartzJob/deviceProtocolDetail.js";
import { ref, defineComponent } from "vue";
export default defineComponent({
  setup() {
    const table = ref({
      key: "id",
      footer: "Foots",
      cnName: "设备协议明细信息",
      name: "deviceProtocolDetail",
      url: "/DeviceProtocolDetail/",
      sortName: "createDate",
    });
    const editFormFields = ref({
      deviceType: "",
      deviceProParamName: "",
      protocolDetailType: "",
      protocalDetailValue: "",
      protocolDetailDes: "",
    });
    const editFormOptions = ref([
      [
        {
          title: "设备类型",
          required: true,
          field: "deviceType",
          type: "select",
          dataKey: "deviceType",
          data: [],
        },
        {
          title: "参数名称",
          required: true,
          field: "deviceProParamName",
          type: "string",
        },
        {
          title: "明细类型",
          required: true,
          field: "protocolDetailType",
          type: "string",
        },
        {
          title: "明细取值",
          required: true,
          field: "protocalDetailValue",
          type: "string",
        },
      ],
      [
        {
          title: "明细说明",
          field: "protocolDetailDes",
          type: "textarea",
        },
      ],
    ]);
    const searchFormFields = ref({
      deviceType: "",
      deviceProParamName: "",
      protocolDetailType: "",
    });
    const searchFormOptions = ref([
      [
      {
          title: "设备类型",
          field: "deviceType",
          type: "select",
          dataKey: "deviceType",
          data: [],
        },
        {
          title: "参数名称",
          field: "deviceProParamName",
          type: "like",
        },
        {
          title: "明细类型",
          field: "protocolDetailType",
          type: "like",
        },
        {
          title: "明细取值",
          field: "protocalDetailValue",
          type: "like",
        },
      ],
    ]);
    const columns = ref([
      {
        field: "id",
        title: "Id",
        type: "int",
        width: 90,
        hidden: true,
        readonly: true,
        require: true,
        align: "left",
      },
      {
        field: "deviceType",
        title: "设备类型",
        type: "string",
        width: 180,
        align: "left",
        bind: { key: "deviceType", data: [] },
      },
      {
        field: "deviceProParamName",
        title: "设备协议参数名称",
        type: "string",
        width: 180,
        align: "left",
      },
      {
        field: "protocolDetailType",
        title: "设备协议明细类型",
        type: "string",
        width: 150,
        align: "left",
      },
      {
        field: "protocalDetailValue",
        title: "设备协议明细取值",
        type: "string",
        width: 150,
        align: "left",
      },
      {
        field: "protocolDetailDes",
        title: "设备协议明细说明",
        type: "string",
        width: 350,
        align: "left",
      },
      {
        field: "creater",
        title: "创建人",
        type: "string",
        width: 90,
        align: "left",
      },
      {
        field: "createDate",
        title: "创建时间",
        type: "datetime",
        width: 160,
        align: "left",
      },
      {
        field: "modifier",
        title: "修改人",
        type: "string",
        width: 100,
        align: "left",
      },
      {
        field: "modifyDate",
        title: "修改时间",
        type: "datetime",
        width: 160,
        align: "left",
      },
      {
        field: "remark",
        title: "备注",
        type: "string",
        width: 100,
        align: "left",
      },
    ]);
    const detail = ref({
      cnName: "",
      table: "",
      columns: [],
      sortName: "",
      key: "",
    });
    return {
      table,
      extend,
      editFormFields,
      editFormOptions,
      searchFormFields,
      searchFormOptions,
      columns,
      detail,
    };
  },
});
</script>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/quartzJob/dispatchInfo.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,247 @@
<template>
  <view-grid
    ref="grid"
    :columns="columns"
    :detail="detail"
    :editFormFields="editFormFields"
    :editFormOptions="editFormOptions"
    :searchFormFields="searchFormFields"
    :searchFormOptions="searchFormOptions"
    :table="table"
    :extend="extend"
  >
  </view-grid>
</template>
  <script>
import extend from "@/extension/quartzJob/dispatchInfo.js";
import { ref, defineComponent } from "vue";
export default defineComponent({
  setup() {
    const table = ref({
      key: "id",
      footer: "Foots",
      cnName: "调度服务配置信息",
      name: "dispatchInfo",
      url: "/DispatchInfo/",
      sortName: "createDate",
    });
    const editFormFields = ref({
      name: "",
      jobGroup: "",
      assemblyName: "",
      className: "",
      intervalSecond: "",
      beginTime: "",
      endTime: "",
      remark: "",
    });
    const editFormOptions = ref([
      [
        {
          title: "任务名称",
          required: true,
          field: "name",
          type: "string",
        },
        {
          title: "任务分组",
          required: true,
          field: "jobGroup",
          type: "select",
          dataKey: "deviceType",
          data: [],
        },
        {
          title: "程序集名称",
          required: true,
          field: "assemblyName",
          type: "string",
          type: "select",
          dataKey: "jobAssembly",
          data: [],
        },
        {
          title: "任务所在类",
          required: true,
          field: "className",
          type: "string",
          type: "select",
          dataKey: "jobClassName",
          data: [],
        },
      ],
      [
        {
          title: "间隔时间",
          required: true,
          field: "intervalSecond",
          type: "number",
        },
        {
          title: "开始时间",
          field: "beginTime",
          type: "datetime",
        },
        {
          title: "结束时间",
          field: "endTime",
          type: "datetime",
        },
        {
          title: "备注",
          field: "remark",
          type: "string",
        },
      ],
    ]);
    const searchFormFields = ref({
      name: "",
      jobGroup: "",
      assemblyName: "",
      className: "",
    });
    const searchFormOptions = ref([
      [
         {
          title: "任务名称",
          field: "name",
          type: "like",
        },
        {
          title: "任务分组",
          field: "jobGroup",
          type: "select",
          dataKey: "deviceType",
          data: [],
        },
        {
          title: "程序集名称",
          field: "assemblyName",
          type: "like",
        },
        {
          title: "任务所在类",
          field: "className",
          type: "like",
        },
      ],
    ]);
    const columns = ref([
      {
        field: "id",
        title: "Id",
        type: "int",
        width: 90,
        hidden: true,
        readonly: true,
        require: true,
        align: "left",
      },
      {
        field: "name",
        title: "任务名称",
        type: "string",
        width: 90,
        align: "left",
      },
      {
        field: "jobGroup",
        title: "任务分组",
        type: "string",
        width: 180,
        align: "left",
        bind: { key: "deviceType", data: [] },
      },
      {
        field: "assemblyName",
        title: "程序集名称",
        type: "string",
        width: 180,
        align: "left",
      },
      {
        field: "className",
        title: "任务所在类",
        type: "int",
        width: 200,
        align: "left",
      },
      {
        field: "intervalSecond",
        title: "执行间隔时间",
        type: "int",
        width: 120,
        align: "left",
      },
      {
        field: "beginTime",
        title: "开始时间",
        type: "datetime",
        width: 150,
        align: "left",
      },
      {
        field: "endTime",
        title: "结束时间",
        type: "int",
        width: 150,
        align: "left",
      },
      {
        field: "creater",
        title: "创建人",
        type: "string",
        width: 90,
        align: "left",
      },
      {
        field: "createDate",
        title: "创建时间",
        type: "datetime",
        width: 160,
        align: "left",
      },
      {
        field: "modifier",
        title: "修改人",
        type: "string",
        width: 100,
        align: "left",
      },
      {
        field: "modifyDate",
        title: "修改时间",
        type: "datetime",
        width: 160,
        align: "left",
      },
      {
        field: "remark",
        title: "备注",
        type: "string",
        width: 100,
        align: "left",
      },
    ]);
    const detail = ref({
      cnName: "",
      table: "",
      columns: [],
      sortName: "",
      key: "",
    });
    return {
      table,
      extend,
      editFormFields,
      editFormOptions,
      searchFormFields,
      searchFormOptions,
      columns,
      detail,
    };
  },
});
</script>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/system/Sys_Role1.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,72 @@
<!--
*Author:jxx
 *Contact:283591387@qq.com
 *代码由框架生成,任何更改都可能导致被代码生成器覆盖
 *业务请在@/extension/system/Sys_Role.js此处编写
 -->
<template>
    <view-grid ref="grid"
               :columns="columns"
               :detail="detail"
               :editFormFields="editFormFields"
               :editFormOptions="editFormOptions"
               :searchFormFields="searchFormFields"
               :searchFormOptions="searchFormOptions"
               :table="table"
               :extend="extend">
    </view-grid>
</template>
<script>
    import extend from "@/extension/system/Sys_Role1.js";
    import { ref, defineComponent } from "vue";
    export default defineComponent({
        setup() {
            const table = ref({
                key: 'Role_Id',
                footer: "Foots",
                cnName: '角色管理',
                name: 'Sys_Role',
                url: "/Sys_Role/",
                sortName: "Role_Id"
            });
            const editFormFields = ref({"ParentId":[],"RoleName":"","DeptName":"","Enable":"","Creator":"","CreateDate":"","Modifier":"","ModifyDate":""});
            const editFormOptions = ref([[{"dataKey":"tree_roles","data":[],"title":"父级ID","required":true,"field":"ParentId","type":"cascader"},
                               {"title":"角色名称","required":true,"field":"RoleName"}],
                              [{"title":"部门名称","field":"DeptName"},
                               {"dataKey":"enable","data":[],"title":"是否启用","field":"Enable","type":"switch"}],
                              [{"title":"创建人","field":"Creator","disabled":true},
                               {"title":"创建时间","field":"CreateDate","disabled":true,"type":"datetime"}],
                              [{"title":"修改人","field":"Modifier","disabled":true},
                               {"title":"修改时间","field":"ModifyDate","disabled":true}]]);
            const searchFormFields = ref({"RoleName":"","DeptName":"","Enable":"","CreateDate":"","ModifyDate":""});
            const searchFormOptions = ref([[{"title":"角色名称","field":"RoleName","type":"text"},{"title":"部门名称","field":"DeptName","type":"text"},{"dataKey":"enable","data":[],"title":"是否启用","field":"Enable","type":"select"}],[{"title":"创建时间","field":"CreateDate","type":"datetime"},{"title":"修改时间","field":"ModifyDate","type":"datetime"}]]);
            const columns = ref([{field:'Role_Id',title:'角色ID',type:'int',width:70,readonly:true,require:true,align:'left',sortable:true},
                      // {field:'ParentId',title:'父级ID',type:'int',bind:{ key:'tree_roles',data:[]},width:70,require:true,align:'left'},
                       {field:'RoleName',title:'角色名称',type:'string',link:true,width:90,require:true,align:'left'},
                       {field:'Dept_Id',title:'部门ID',type:'int',width:90,hidden:true,align:'left'},
                       {field:'DeptName',title:'部门名称',type:'string',width:90,align:'left'},
                       {field:'Enable',title:'是否启用',type:'byte',bind:{ key:'enable',data:[]},width:90,align:'left'},
                       {field:'OrderNo',title:'排序',type:'int',width:90,hidden:true,align:'left'},
                       {field:'Creator',title:'创建人',type:'string',width:130,readonly:true,align:'left'},
                       {field:'CreateDate',title:'创建时间',type:'datetime',width:90,readonly:true,align:'left',sortable:true},
                       {field:'Modifier',title:'修改人',type:'string',width:130,readonly:true,align:'left'},
                       {field:'ModifyDate',title:'修改时间',type:'datetime',width:90,readonly:true,align:'left',sortable:true}]);
            const detail = ref({
                cnName: "#detailCnName",
                columns: [],
                sortName: "",
                key: ""
            });
            return {
                table,
                extend,
                editFormFields,
                editFormOptions,
                searchFormFields,
                searchFormOptions,
                columns,
                detail,
            };
        },
    });
</script>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/taskinfo/task.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,252 @@
<template>
  <view-grid
    ref="grid"
    :columns="columns"
    :detail="detail"
    :editFormFields="editFormFields"
    :editFormOptions="editFormOptions"
    :searchFormFields="searchFormFields"
    :searchFormOptions="searchFormOptions"
    :table="table"
    :extend="extend"
  >
  </view-grid>
</template>
  <script>
import extend from "@/extension/taskinfo/task.js";
import { ref, defineComponent } from "vue";
export default defineComponent({
  setup() {
    const table = ref({
      key: "taskId",
      footer: "Foots",
      cnName: "任务信息",
      name: "task",
      url: "/Task/",
      sortName: "CreateDate",
    });
    const editFormFields = ref({
      taskNum:"",
      palletCode: "",
      roadway: "",
      taskType:"",
      taskState:"",
      wmsId:"",
      sourceAddress: "",
      targetAddress: "",
      currentAddress: "",
      nextAddress: "",
      creater: "",
      createDate: "",
      grade: ""
    });
    const editFormOptions = ref([[{ title: "优先级", field: "grade", type: "int" },]]);
    const searchFormFields = ref({
      taskNum: "",
      palletCode: "",
      roadway: "",
      sourceAddress: "",
      targetAddress: "",
      currentAddress: "",
      nextAddress: "",
      creater: "",
      createDate: "",
    });
    const searchFormOptions = ref([
      [
        { title: "任务号", field: "taskNum", type: "int" },
        { title: "托盘编号", field: "palletCode", type: "like" },
        {
          title: "任务类型",
          field: "taskType",
          type: "selectList",
          dataKey: "taskType",
          data: [],
        },
        {
          title: "任务状态",
          field: "taskState",
          type: "selectList",
          dataKey: "taskState",
          data: [],
        },
      ],
      [
        { title: "起始地址", field: "sourceAddress", type: "like" },
        { title: "目标地址", field: "targetAddress", type: "like" },
        { title: "当前位置", field: "currentAddress", type: "like" },
        { title: "下一位置", field: "nextAddress", type: "like" },
      ],
      [
        { title: "巷道号", field: "roadway", type: "like" },
        { title: "创建人", field: "creater", type: "like" },
        { title: "创建时间", field: "createDate", type: "datetime" },
      ],
    ]);
    const columns = ref([
      {
        field: "taskId",
        title: "TaskId",
        type: "int",
        width: 90,
        hidden: true,
        readonly: true,
        require: true,
        align: "left",
      },
      {
        field: "taskNum",
        title: "任务号",
        type: "int",
        width: 90,
        align: "left",
      },
      {
        field: "palletCode",
        title: "托盘编号",
        type: "string",
        width: 160,
        align: "left",
      },
      {
        field: "roadway",
        title: "巷道号",
        type: "string",
        width: 90,
        align: "left",
      },
      {
        field: "taskType",
        title: "任务类型",
        type: "int",
        width: 90,
        align: "left",
        bind: { key: "taskType", data: [] },
      },
      {
        field: "taskState",
        title: "任务状态",
        type: "int",
        width: 150,
        align: "left",
        bind: { key: "taskState", data: [] },
      },
      {
        field: "sourceAddress",
        title: "起始地址",
        type: "int",
        width: 120,
        align: "left",
      },
      {
        field: "targetAddress",
        title: "目标地址",
        type: "string",
        width: 120,
        align: "left",
      },
      {
        field: "currentAddress",
        title: "当前位置",
        type: "string",
        width: 110,
        align: "left",
      },
      {
        field: "nextAddress",
        title: "下一位置",
        type: "string",
        width: 110,
        align: "left",
      },
      {
        field: "exceptionMessage",
        title: "异常信息",
        type: "string",
        width: 90,
        align: "left",
        hidden: true,
      },
      {
        field: "grade",
        title: "优先级",
        type: "int",
        width: 60,
        align: "left",
      },
      {
        field: "dispatchertime",
        title: "任务下发时间",
        type: "datetime",
        width: 110,
        align: "left",
      },
      {
        field: "wmsId",
        title: "WMS任务主键",
        type: "int",
        width: 120,
        align: "left",
        hidden: true,
      },
      {
        field: "createDate",
        title: "创建时间",
        type: "datetime",
        width: 150,
        align: "left",
      },
      {
        field: "modifyDate",
        title: "修改时间",
        type: "datetime",
        width: 160,
        align: "left",
      },
      {
        field: "creater",
        title: "创建人",
        type: "string",
        width: 90,
        align: "left",
      },
      {
        field: "modifier",
        title: "修改人",
        type: "string",
        width: 90,
        align: "left",
      },
      {
        field: "remark",
        title: "备注",
        type: "string",
        width: 100,
        align: "left",
        hidden: true,
      },
    ]);
    const detail = ref({
      cnName: "",
      table: "",
      columns: [],
      sortName: "",
      key: "",
    });
    return {
      table,
      extend,
      editFormFields,
      editFormOptions,
      searchFormFields,
      searchFormOptions,
      columns,
      detail,
    };
  },
});
</script>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/taskinfo/task_Hty.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,246 @@
<template>
  <view-grid
    ref="grid"
    :columns="columns"
    :detail="detail"
    :editFormFields="editFormFields"
    :editFormOptions="editFormOptions"
    :searchFormFields="searchFormFields"
    :searchFormOptions="searchFormOptions"
    :table="table"
    :extend="extend"
  >
  </view-grid>
</template>
  <script>
import extend from "@/extension/taskinfo/task_Hty.js";
import { ref, defineComponent } from "vue";
export default defineComponent({
  setup() {
    const table = ref({
      key: "taskId",
      footer: "Foots",
      cnName: "任务信息",
      name: "task_Hty",
      url: "/Task_Hty/",
      sortName: "CreateDate",
    });
    const editFormFields = ref({});
    const editFormOptions = ref([]);
    const searchFormFields = ref({
      taskNum: "",
      palletCode: "",
      roadway: "",
      sourceAddress: "",
      targetAddress: "",
      currentAddress: "",
      nextAddress: "",
      creater: "",
      createDate: "",
    });
    const searchFormOptions = ref([
      [
        { title: "任务号", field: "taskNum", type: "int" },
        { title: "托盘编号", field: "palletCode", type: "like" },
        {
          title: "任务类型",
          field: "taskType",
          type: "selectList",
          dataKey: "taskType",
          data: [],
        },
        {
          title: "任务状态",
          field: "taskState",
          type: "selectList",
          dataKey: "taskState",
          data: [],
        },
      ],
      [
        { title: "起始地址", field: "sourceAddress", type: "like" },
        { title: "目标地址", field: "targetAddress", type: "like" },
        { title: "当前位置", field: "currentAddress", type: "like" },
        { title: "下一位置", field: "nextAddress", type: "like" },
      ],
      [
        { title: "巷道号", field: "roadway", type: "like" },
        { title: "生产产线", field: "productionLine", type: "select", dataKey: "ProductionLine", data: [] },
        { title: "创建人", field: "creater", type: "like" },
        { title: "创建时间", field: "createDate", type: "datetime" },
      ],
    ]);
    const columns = ref([
      {
        field: "taskId",
        title: "TaskId",
        type: "int",
        width: 90,
        hidden: true,
        readonly: true,
        require: true,
        align: "left",
      },
      {
        field: "taskNum",
        title: "任务号",
        type: "int",
        width: 90,
        align: "left",
      },
      {
        field: "palletCode",
        title: "托盘编号",
        type: "string",
        width: 200,
        align: "left",
      },
      {
        field: "roadway",
        title: "巷道号",
        type: "string",
        width: 90,
        align: "left",
      },
      {
        field: "taskType",
        title: "任务类型",
        type: "int",
        width: 90,
        align: "left",
        bind: { key: "taskType", data: [] },
      },
      {
        field: "taskState",
        title: "任务状态",
        type: "int",
        width: 150,
        align: "left",
        bind: { key: "taskState", data: [] },
      },
      {
        field: "sourceAddress",
        title: "起始地址",
        type: "int",
        width: 120,
        align: "left",
      },
      {
        field: "targetAddress",
        title: "目标地址",
        type: "string",
        width: 120,
        align: "left",
      },
      {
        field: "currentAddress",
        title: "当前位置",
        type: "string",
        width: 120,
        align: "left",
      },
      {
        field: "nextAddress",
        title: "下一位置",
        type: "string",
        width: 120,
        align: "left",
      },
      {
        field: "productionLine",
        title: "产线",
        type: "string",
        width: 70,
        align: "left",
        bind: { key: "ProductionLine", data: [] }
      },
      {
        field: "exceptionMessage",
        title: "异常信息",
        type: "string",
        width: 90,
        align: "left",
        hidden: true,
      },
      {
        field: "grade",
        title: "优先级",
        type: "int",
        width: 60,
        align: "left",
      },
      {
        field: "dispatchertime",
        title: "任务下发时间",
        type: "datetime",
        width: 150,
        align: "left",
      },
      {
        field: "wMSId",
        title: "WMS任务主键",
        type: "int",
        width: 120,
        align: "left",
        hidden: true,
      },
      {
        field: "createDate",
        title: "创建时间",
        type: "datetime",
        width: 150,
        align: "left",
      },
      {
        field: "modifyDate",
        title: "修改时间",
        type: "datetime",
        width: 160,
        align: "left",
      },
      {
        field: "creater",
        title: "创建人",
        type: "string",
        width: 90,
        align: "left",
      },
      {
        field: "modifier",
        title: "修改人",
        type: "string",
        width: 90,
        align: "left",
      },
      {
        field: "remark",
        title: "备注",
        type: "string",
        width: 100,
        align: "left",
        hidden: true,
      },
    ]);
    const detail = ref({
      cnName: "",
      table: "",
      columns: [],
      sortName: "",
      key: "",
    });
    return {
      table,
      extend,
      editFormFields,
      editFormOptions,
      searchFormFields,
      searchFormOptions,
      columns,
      detail,
    };
  },
});
</script>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/widesea_wms/basicinfo/Dt_SelectionStandards.vue
@@ -62,7 +62,7 @@
        });
        const searchFormOptions = ref([
            [
                { "title": "适用车型", "field": "carType", type: "like" },
                { "title": "适用车型", "field": "carType", type: "text" },
                //{ "title": "货位状态", "field": "locationStatus", "type": "select", dataKey: "LocationState", data: [] },
                { "title": "动拖属性", "field": "mttype", type: "text" },
            ],
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSClient/src/views/widesea_wms/check/Dt_CheckResult.vue
@@ -41,7 +41,7 @@
            { field: 'equipNo', title: '设备编号', type: 'string', width: 110, align: 'left', hidden: true },
            //{ field: 'wheels_SequenceNum', title: '序列号', type: 'string', width: 110, align: 'left', sort: true, link: true, },
            { field: 'cltm', title: '车轮条码', type: 'string', width: 150, align: 'left' },
            { field: 'checkType', title: '类型(è½®/盘)', type: 'string', width: 80, align: 'left' },
            { field: 'checkType', title: '类型(è½®/盘)', type: 'string', width: 80, align: 'left', bind: { key: "IscheckType", data: [{key:"1",value:'è½®'},{key:"2",value:'盘'}] }  },
            { field: 'gkzjI1', title: '毂孔A1', type: 'string', width: 75, align: 'left' },
            { field: 'gkzjI2', title: '毂孔A2', type: 'string', width: 75, align: 'left' },
            { field: 'gkzjI3', title: '毂孔A3', type: 'string', width: 75, align: 'left' },
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/ProjectEvaluation/widesea_wmsserver.metadata.v7.bin
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/ProjectEvaluation/widesea_wmsserver.metadata.v9.bin
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/ProjectEvaluation/widesea_wmsserver.projects.v7.bin
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/ProjectEvaluation/widesea_wmsserver.projects.v9.bin
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/DesignTimeBuild/.dtbcache.v2
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/read.lock
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/.futdcache.v2
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/.suo
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/v17/fileList.bin
Binary files differ
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_BusinessServices/obj/Release/net6.0/WIDESEA_BusinessServices.csproj.CopyComplete
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_BusinessesRepository/obj/Release/net6.0/WIDESEA_BusinessesRepository.csproj.CopyComplete
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_Common/obj/Release/net6.0/WIDESEA_Common.csproj.CopyComplete
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_DTO/obj/Release/net6.0/WIDESEA_DTO.csproj.CopyComplete
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_IBusinessServices/obj/Release/net6.0/WIDESEA_IBusinessServices.csproj.CopyComplete
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_IBusinessesRepository/obj/Release/net6.0/WIDESEA_IBusinessesRepository.csproj.CopyComplete
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_IRepository/obj/Release/net6.0/WIDESEA_IRepository.csproj.CopyComplete
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_IServices/obj/Release/net6.0/WIDESEA_IServices.csproj.CopyComplete
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_IStoragIntegrationServices/ToAPP/IToAPPService.cs
@@ -13,5 +13,6 @@
        WebResponseContent SaveCLinfo(SaveModel saveModel);
        WebResponseContent SaveCZInfo(SaveModel saveModel);
        WebResponseContent SaveCZInfo2(SaveModel saveModel);
    }
}
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_IStoragIntegrationServices/obj/Release/net6.0/WIDESEA_IStoragIntegrationServices.csproj.CopyComplete
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicRepository/obj/Release/net6.0/WIDESEA_IStorageBasicRepository.csproj.CopyComplete
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/Stock/IDt_WheelsStockService.cs
@@ -4,4 +4,6 @@
{
    Dt_WheelsStock GetSelectionWheelsStock(List<Dt_WheelsStock> wheelsStocks, Dt_SelectionStandards selectionStandards, Dt_CZInfo_mes CZInfo_Mes,string wheelsPosition,string newOrOld);
    Dt_WheelsStock_Old GetSelectionWheels(List<Dt_WheelsStock_Old> wheelsStocks, Dt_SelectionStandards selectionStandards, Dt_CZInfo_mes CZInfo_Mes, string wheelsPosition, string newOrOld);
}
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_IStorageBasicService/obj/Release/net6.0/WIDESEA_IStorageBasicServices.csproj.CopyComplete
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_IStorageOutOrderRepository/obj/Release/net6.0/WIDESEA_IStorageOutOrderRepository.csproj.CopyComplete
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_IStorageOutOrderService/obj/Release/net6.0/WIDESEA_IStorageOutOrderServices.csproj.CopyComplete
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskRepository/obj/Release/net6.0/WIDESEA_IStorageTaskRepository.csproj.CopyComplete
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskService/obj/Release/net6.0/WIDESEA_IStorageTaskServices.csproj.CopyComplete
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/GZ_ZC/OldWheelsStock/Dt_WheelsStock_Old.cs
@@ -236,5 +236,14 @@
        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "货位号")]
        public string Locate { get; set; }
        /// <summary>
        /// çŠ¶æ€  0-创建 1-在库  2-已选配 3-预选配 4-指定出库
        /// </summary>
        [ImporterHeader(Name = "状态")]
        [ExporterHeader(DisplayName = "状态")]
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "状态")]
        public int? Wheels_CurrentStatue { get; set; } = 1;
    }
}
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_Model/obj/Release/net6.0/WIDESEA_Model.csproj.CopyComplete
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_Repository/obj/Release/net6.0/WIDESEA_Repository.csproj.CopyComplete
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_Services/obj/Release/net6.0/WIDESEA_Services.csproj.CopyComplete
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationServices/ToAPP/Partial/SaveCZInfo.cs
@@ -413,6 +413,379 @@
            }
        }
        public WebResponseContent SaveCZInfo2(SaveModel saveModel)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                //如当前存在未开始入库的车轮或制动盘数据,则禁止保存新数据 ä»¥é˜²æ•°æ®æ··ä¹±
                var waitInbound = _CZInfo_MesRepository.QueryFirst(x => x.CurrentStatue == "0");
                if (waitInbound != null)
                    throw new Exception("当前存在未开始入库的车轴数据,请先上架启动后再保存信息!");
                //车轴条码
                string czCode = saveModel.MainData["cztm"].ToString();
                if (string.IsNullOrEmpty(czCode))
                    throw new Exception($"车轴条码不能为空");
                //车轴号
                string czh = saveModel.MainData["czh"].ToString();
                if (string.IsNullOrEmpty(czh))
                    throw new Exception($"车轴号不能为空");
                //var clinfo = _InWheels_MesRepository.QueryFirst(x => x.Wheels_code == czCode);
                //if (clinfo != null) throw new Exception("车轮录入信息已存在");
                //序列号
                //string madeUnit = saveModel.MainData["xlh"].ToString();
                //轮对条码
                string ldtm = saveModel.MainData["ldtm"].ToString();
                //车型
                string Cartype = saveModel.MainData["chexing"].ToString();
                if (string.IsNullOrEmpty(Cartype)) throw new Exception("选配失败:车轴车型参数为空");
                //车轴型号
                string czxh = saveModel.MainData["czxh"].ToString();
                //车轮型号
                string clxh = saveModel.MainData["clxh"].ToString();
                //动拖属性
                string mttype = saveModel.MainData["mttype"].ToString();
                //左轮座直径A1
                string zlzA1 = saveModel.MainData["zlzA1"].ToString();
                //左轮座直径A1
                string zlzA2 = saveModel.MainData["zlzA2"].ToString();
                //左轮座直径A1
                string zlzA3 = saveModel.MainData["zlzA3"].ToString();
                //左轮座直径A
                string zlzA = saveModel.MainData["zlza"].ToString();
                //左轮座直径B1
                string zlzB1 = saveModel.MainData["zlzB1"].ToString();
                //左轮座直径B1
                string zlzB2 = saveModel.MainData["zlzB2"].ToString();
                //左轮座直径B1
                string zlzB3 = saveModel.MainData["zlzB3"].ToString();
                //左轮座直径B
                string zlzB = saveModel.MainData["zlzb"].ToString();
                //左轮座直径C1
                string zlzC1 = saveModel.MainData["zlzC1"].ToString();
                //左轮座直径C1
                string zlzC2 = saveModel.MainData["zlzC2"].ToString();
                //左轮座直径C1
                string zlzC3 = saveModel.MainData["zlzC3"].ToString();
                //左轮座直径C
                string zlzC = saveModel.MainData["zlzc"].ToString();
                //右轮座直径A1
                string ylzA1 = saveModel.MainData["ylzA1"].ToString();
                //右轮座直径A1
                string ylzA2 = saveModel.MainData["ylzA2"].ToString();
                //右轮座直径A1
                string ylzA3 = saveModel.MainData["ylzA3"].ToString();
                //右轮座直径A
                string ylzA = saveModel.MainData["ylza"].ToString();
                //右轮座直径B1
                string ylzB1 = saveModel.MainData["ylzB1"].ToString();
                //右轮座直径B1
                string ylzB2 = saveModel.MainData["ylzB2"].ToString();
                //右轮座直径B1
                string ylzB3 = saveModel.MainData["ylzB3"].ToString();
                //右轮座直径B
                string ylzB = saveModel.MainData["ylzb"].ToString();
                //右轮座直径C1
                string ylzC1 = saveModel.MainData["ylzC1"].ToString();
                //右轮座直径C1
                string ylzC2 = saveModel.MainData["ylzC2"].ToString();
                //右轮座直径C1
                string ylzC3 = saveModel.MainData["ylzC3"].ToString();
                //右轮座直径C
                string ylzC = saveModel.MainData["ylzc"].ToString();
                //左轮座直径
                string zlzzj = saveModel.MainData["zlzzj"].ToString();
                //右轮座直径
                string ylzzj = saveModel.MainData["ylzzj"].ToString();
                //新旧
                string newOrOld = saveModel.MainData["NOdirection"].ToString();
                if (string.IsNullOrEmpty(newOrOld)) throw new Exception("未选择新旧类型,请选择!");
                //车轮位置
                string wheelsPosition = saveModel.MainData["wheelsPosition"].ToString();
                if (string.IsNullOrEmpty(wheelsPosition)) throw new Exception("未选择车轮位置,请选择!");
                //左轮等级
                string leftLevel = saveModel.MainData["zlzdj"].ToString();
                if (string.IsNullOrEmpty(leftLevel)) throw new Exception("选配失败:车轴左轮座等级参数为空");
                //右轮等级
                string rightLevel = saveModel.MainData["ylzdj"].ToString();
                if (string.IsNullOrEmpty(rightLevel)) throw new Exception("选配失败:车轴右轮座等级参数为空");
                //维修任务
                string wxrw = saveModel.MainData["wxrw"].ToString();
                if (string.IsNullOrEmpty(wxrw)) throw new Exception("选配失败:维修任务参数为空");
                string level = string.Empty;
                //string rightlevel = string.Empty;
                if ("all".Equals(wheelsPosition))
                {
                    level = LevelChangeHelper.LevelChangeType(leftLevel);
                    if (string.IsNullOrEmpty(level)) throw new Exception("等级转换失败,请检查接口等级参数");
                }
                else if ("left".Equals(wheelsPosition))
                {
                    level = LevelChangeHelper.LevelChangeType(leftLevel);
                    if (string.IsNullOrEmpty(level)) throw new Exception("等级转换失败,请检查接口等级参数");
                    //level = leftLevel;
                }
                else if ("rihgt".Equals(wheelsPosition))
                {
                    level = LevelChangeHelper.LevelChangeType(rightLevel);
                    if (string.IsNullOrEmpty(level)) throw new Exception("等级转换失败,请检查接口等级参数");
                    //level = rightLevel;
                }
                string rw = CheckTaskChangeHelper.CheckTaskChange(wxrw);
                if (string.IsNullOrEmpty(rw)) throw new Exception("维修任务转换失败,请检查维修任务参数");
                if (rw != newOrOld) throw new Exception("选配失败:选配新旧轮与维修任务解析不一致");
                Dt_SelectionStandards selectionStandards = _SelectionStandardsRepository.QueryFirst(x => x.CarType.Contains(Cartype) && x.mttype == mttype && x.neworold == newOrOld && level.Contains(x.gkdj));
                if (selectionStandards == null) throw new Exception($"此车型{Cartype}的选配标准异常,请核对选配标准信息!");
                Dt_CZInfo_mes CZInfo_Mes = new Dt_CZInfo_mes
                {
                    CZTM = czCode,
                    CHEXING = Cartype,
                    CreateDate = DateTime.Now,
                    Creater = "admin",
                    CurrentStatue = "1",
                    CZH = czh,
                    CZXH = czxh,
                    LDTM = ldtm,
                    MTTYPE = mttype,
                    ZLZA1 = zlzA1,
                    ZLZA2 = zlzA2,
                    ZLZA3 = zlzA3,
                    ZLZA = zlzA,
                    ZLZB1 = zlzB1,
                    ZLZB2 = zlzB2,
                    ZLZB3 = zlzB3,
                    ZLZB = zlzB,
                    ZLZC1 = zlzC1,
                    ZLZC2 = zlzC2,
                    ZLZC3 = zlzC3,
                    ZLZC = zlzC,
                    YLZA1 = ylzA1,
                    YLZA2 = ylzA2,
                    YLZA3 = ylzA3,
                    YLZA = ylzA,
                    YLZB1 = ylzB1,
                    YLZB2 = ylzB2,
                    YLZB3 = ylzB3,
                    YLZB = ylzB,
                    YLZC1 = ylzC1,
                    YLZC2 = ylzC2,
                    YLZC3 = ylzC3,
                    YLZC = ylzC,
                    ZLZZJ = zlzzj,
                    YLZZJ = ylzzj,
                    ZLZDJ = leftLevel,
                    YLZDJ = rightLevel,
                    WXRW = wxrw
                };
                //左出库车轮
                Dt_WheelsStock leftContainer = null;
                //右出库车轮
                Dt_WheelsStock rightContainer = null;
                //左出库车轮
                Dt_WheelsStock_Old leftContainer2 = null;
                //右出库车轮
                Dt_WheelsStock_Old rightContainer2 = null;
                //同温时间
                var hourpara = _configService.GetByConfigKey(CateGoryConst.CONFIG_SYS_Parameters, SysConfigConst.TempHour);
                int hour = hourpara.ConfigValue.ObjToInt();
                int knum = 1;
                //找出所有符合条件的库存车轮
                var WheelsList = _WheelsStockRepository.QueryData(x => x.Wheels_CurrentStatue == 1 && x.Wheels_mttype == CZInfo_Mes.MTTYPE && x.Wheels_ldxh == clxh && x.Wheels_NewOrOld == newOrOld && x.CreateDate.AddHours(hour) <= DateTime.Now);
                if (null != WheelsList && WheelsList.Count > 0)
                {
                     knum = 2;
                }
                var Wheelsdata=dt_WheelsStock_OldRepository.QueryData(x => x.Wheels_CurrentStatue == 1 && x.dqtz_state == CZInfo_Mes.MTTYPE && x.axes_type == clxh && x.repair_item == newOrOld);
                if (null != Wheelsdata && Wheelsdata.Count > 0)
                {
                    knum = 3;
                }
                //x.Wheels_CarType  == CZInfo_Mes.CHEXING && x.Wheels_ldtm == CZInfo_Mes.LDTM && selectionStandards.CarType.Contains(x.Wheels_CarType)
                if (knum!=1)
                {
                    if ("all".Equals(wheelsPosition) || string.IsNullOrEmpty(wheelsPosition))
                    {
                        if (null == leftContainer)
                        {
                            if(knum==2)
                            {
                                leftContainer = _WheelsStockService.GetSelectionWheelsStock(WheelsList, selectionStandards, CZInfo_Mes, "left", newOrOld);
                                if (null != leftContainer)
                                    WheelsList.Remove(leftContainer);
                            }
                            if (knum == 3)
                            {
                                leftContainer2 = _WheelsStockService.GetSelectionWheels(Wheelsdata, selectionStandards, CZInfo_Mes, "left", newOrOld);
                                if (null != leftContainer2)
                                    Wheelsdata.Remove(leftContainer2);
                            }
                        }
                        if (null == rightContainer)
                        {
                            if(knum ==2)
                            {
                                rightContainer = _WheelsStockService.GetSelectionWheelsStock(WheelsList, selectionStandards, CZInfo_Mes, "right", newOrOld);
                                if (null != rightContainer)
                                    WheelsList.Remove(rightContainer);
                            }
                            if(knum == 3)
                            {
                                rightContainer2 = _WheelsStockService.GetSelectionWheels(Wheelsdata, selectionStandards, CZInfo_Mes, "right", newOrOld);
                                if (null != rightContainer2)
                                    Wheelsdata.Remove(rightContainer2);
                            }
                        }
                        //if (null == leftContainer || null == rightContainer)
                    }
                    else if ("left".Equals(wheelsPosition))
                    {
                        if (knum == 2)
                        {
                            leftContainer = _WheelsStockService.GetSelectionWheelsStock(WheelsList, selectionStandards, CZInfo_Mes, "left", newOrOld);
                        }
                        if (knum == 3)
                        {
                            leftContainer2 = _WheelsStockService.GetSelectionWheels(Wheelsdata, selectionStandards, CZInfo_Mes, "left", newOrOld);
                        }
                        //if (null == leftContainer)
                    }
                    else if ("right".Equals(wheelsPosition))
                    {
                        if (knum == 2)
                        {
                            rightContainer = _WheelsStockService.GetSelectionWheelsStock(WheelsList, selectionStandards, CZInfo_Mes, "right", newOrOld);
                        }
                        if (knum == 3)
                        {
                            rightContainer2 = _WheelsStockService.GetSelectionWheels(Wheelsdata, selectionStandards, CZInfo_Mes, "right", newOrOld);
                        }
                        //if (null == rightContainer)
                    }
                }
                if ("all".Equals(wheelsPosition))
                {
                    if (knum == 2)
                    {
                        if (null == leftContainer || null == rightContainer)
                            return content.Error("未找到两侧可匹配的出库车轮,车型:" + Cartype);
                    }
                    if (knum == 3)
                    {
                        if (null == leftContainer2 || null == rightContainer2)
                            return content.Error("未找到两侧可匹配的出库车轮,车型:" + Cartype);
                    }
                }
                if (knum == 2)
                {
                    if (null != leftContainer || null != rightContainer)
                    {
                        List<Dt_WheelsStock> wheelsStocks = new List<Dt_WheelsStock>();
                        if (null != leftContainer)
                        {
                            leftContainer.Wheels_CurrentStatue = 3;
                            wheelsStocks.Add(leftContainer);
                        }
                        if (null != rightContainer)
                        {
                            rightContainer.Wheels_CurrentStatue = 3;
                            wheelsStocks.Add(rightContainer);
                        }
                        _unitOfWorkManage.BeginTran(); //开启事务
                        _WheelsStockRepository.UpdateData(wheelsStocks);    //更新库存数据
                        return content;
                    }
                    else
                    {
                        _unitOfWorkManage.RollbackTran();  //回滚事务
                        return content.Error("未找到可匹配的出库车轮,车型:" + Cartype);
                    }
                }
                else if (knum == 3)
                {
                    if (null != leftContainer2 || null != rightContainer2)
                    {
                        List<Dt_WheelsStock_Old> wheelsStocks = new List<Dt_WheelsStock_Old>();
                        if (null != leftContainer2)
                        {
                            leftContainer2.Wheels_CurrentStatue = 3;
                            wheelsStocks.Add(leftContainer2);
                        }
                        if (null != rightContainer2)
                        {
                            rightContainer2.Wheels_CurrentStatue = 3;
                            wheelsStocks.Add(rightContainer2);
                        }
                        _unitOfWorkManage.BeginTran(); //开启事务
                        dt_WheelsStock_OldRepository.UpdateData(wheelsStocks);    //更新库存数据
                        return content;
                    }
                    else
                    {
                        _unitOfWorkManage.RollbackTran();  //回滚事务
                        return content.Error("未找到可匹配的出库车轮,车型:" + Cartype);
                    }
                }
                else
                {
                    return content.Error("未找到可匹配的出库车轮,车型:" + Cartype);
                }
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return content.Error($"上架失败:{ex.Message}");
            }
        }
        private Dt_Task CreateOutTask(Dt_WheelsStock wheelsStock, string CZTM)
        {
            CheckInfo checkInfo = new CheckInfo()
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationServices/ToAPP/ToAPPService.cs
@@ -27,9 +27,11 @@
        private readonly IDt_SelectionStandardsRepository _SelectionStandardsRepository;
        private readonly IDt_WheelsStockService _WheelsStockService;
        private readonly IDt_CZInfo_mesRepository _CZInfo_MesRepository;
        private readonly IDt_WheelsStock_OldRepository dt_WheelsStock_OldRepository;
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        public ToAPPService(ILocationInfoRepository locationRepository, IDt_TaskRepository taskRepository, ISys_ConfigService configService, IDt_InWheels_mesRepository inWheels_MesRepository, IDt_WheelsStockRepository wheelsStockRepository, IDt_SelectionStandardsRepository selectionStandardsRepository, IDt_WheelsStockService wheelsStockService, IDt_CZInfo_mesRepository cZInfo_MesRepository, IUnitOfWorkManage unitOfWorkManage)
        public ToAPPService(ILocationInfoRepository locationRepository, IDt_TaskRepository taskRepository, ISys_ConfigService configService, IDt_InWheels_mesRepository inWheels_MesRepository, IDt_WheelsStockRepository wheelsStockRepository, IDt_SelectionStandardsRepository selectionStandardsRepository, IDt_WheelsStockService wheelsStockService, IDt_CZInfo_mesRepository cZInfo_MesRepository,  IUnitOfWorkManage unitOfWorkManage, IDt_WheelsStock_OldRepository dt_WheelsStock_OldRepository)
        {
            _InWheels_MesRepository = inWheels_MesRepository;
            _locationRepository = locationRepository;
@@ -40,6 +42,7 @@
            _WheelsStockService = wheelsStockService;
            _CZInfo_MesRepository = cZInfo_MesRepository;
            _unitOfWorkManage = unitOfWorkManage;
            this.dt_WheelsStock_OldRepository = dt_WheelsStock_OldRepository;
        }
    }
}
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationServices/ZY/Partial/ZY_GetCLInfo.cs
@@ -6,6 +6,7 @@
using WIDESEA_Common.ZY;
using WIDESEA_Core;
using WIDESEA_Core.Helper;
using WIDESEA_IStoragIntegrationServices;
namespace WIDESEA_StoragIntegrationServices
{
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationServices/obj/Release/net6.0/WIDESEA_StoragIntegrationServices.csproj.CopyComplete
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicRepository/obj/Release/net6.0/WIDESEA_StorageBasicRepository.csproj.CopyComplete
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/Stock/Dt_WheelsStockService.cs
@@ -9,6 +9,11 @@
using WIDESEA_Core;
using WIDESEA_StorageBasicRepository;
using WIDESEAWCS_BasicInfoRepository;
using WIDESEA_IStoragIntegrationServices;
using WIDESEA.Common;
using WIDESEA_Common.ZY;
using Autofac.Core;
using NetTaste;
namespace WIDESEA_StorageBasicService;
@@ -16,10 +21,12 @@
{
    private readonly IDt_WheelsStock_htyRepository _WheelsStock_HtyRepository;
    private readonly IDt_SelectionStandardsRepository _SelectionStandardsRepository;
    public Dt_WheelsStockService(IDt_WheelsStockRepository BaseDal, IDt_WheelsStock_htyRepository WheelsStock_HtyRepository, IDt_SelectionStandardsRepository selectionStandardsRepository) : base(BaseDal)
    private readonly IToZYService _toZYService;
    public Dt_WheelsStockService(IDt_WheelsStockRepository BaseDal, IDt_WheelsStock_htyRepository WheelsStock_HtyRepository, IDt_SelectionStandardsRepository selectionStandardsRepository, IToZYService toZYService) : base(BaseDal)
    {
        _SelectionStandardsRepository = selectionStandardsRepository;
        _WheelsStock_HtyRepository = WheelsStock_HtyRepository;
        _toZYService = toZYService;
    }
    /// <summary>
@@ -120,4 +127,112 @@
        }
        return WheelsList.OrderBy(x => x.CreateDate).FirstOrDefault();
    }
    public Dt_WheelsStock_Old GetSelectionWheels(List<Dt_WheelsStock_Old> wheelsStocks, Dt_SelectionStandards selectionStandards, Dt_CZInfo_mes CZInfo_Mes, string wheelsPosition, string newOrOld)
    {
        //过盈量上限
        decimal selectionUpperValue = selectionStandards.upperValue;
        //过盈量下限
        decimal selectionLowerValue = selectionStandards.lowerValue;
        decimal mesStand = 0;
        string level = string.Empty;
        if ("left".Equals(wheelsPosition))  //匹配左轮座轮子
        {
            mesStand = decimal.Parse(CZInfo_Mes.ZLZZJ);
            level = LevelChangeHelper.LevelChangeType(CZInfo_Mes.ZLZDJ);
            wheelsStocks = wheelsStocks.Where(x =>  x.venderno == level && x.repair_item == newOrOld).ToList();
        }
        else    //否则匹配右轮座轮子
        {
            mesStand = decimal.Parse(CZInfo_Mes.YLZZJ);
            level = LevelChangeHelper.LevelChangeType(CZInfo_Mes.YLZDJ);
            wheelsStocks = wheelsStocks.Where(x =>  x.venderno == level && x.repair_item == newOrOld).ToList();
        }
        foreach (var item in wheelsStocks)
        {
            string Wheels_gkcc = "";
            string Wheels_gkzja = "";
            string Wheels_gkzjb = "";
            string Wheels_gkzjc = "";
            SaveModel saveModel = new SaveModel();
            saveModel.MainData = new Dictionary<string, object>
            {
                { "cltm", item.wheel_code }
            };
            WebResponseContent webResponse= _toZYService.ZY_GetCLInfo(saveModel);
            if (webResponse.Status)
            {
                var dta = JsonConvert.DeserializeObject<CLInfo_ZY>(webResponse.Data.ToString());
                Wheels_gkcc = dta.gkcc;
                // æ¯‚å­”a界面均值
                Wheels_gkzja = dta.GKZJA;
                //毂孔b界面均值
                Wheels_gkzjb = dta.GKZJB;
                //毂孔c界面均值
                Wheels_gkzjc = dta.GKZJC;
            }
            if(Wheels_gkcc !="" && Wheels_gkzja!="" && Wheels_gkzjb !="" && Wheels_gkzjc != "")
            {
                //查出来在范围之外的进行删除
                if (mesStand - (decimal.Parse(Wheels_gkcc)) < selectionLowerValue && mesStand - (decimal.Parse(Wheels_gkcc)) > selectionUpperValue)
                {
                    wheelsStocks.Remove(item);
                }
                if (selectionStandards.isCantainGK)
                {
                    //截面过盈量上限
                    decimal selectionUpperValue_gk = selectionStandards.upperValue_gk;
                    //截面过盈量下限
                    decimal selectionLowerValue_gk = selectionStandards.lowerValue_gk;
                    if ("left".Equals(wheelsPosition))
                    {
                        decimal ZLZA = decimal.Parse(CZInfo_Mes.ZLZA);
                        decimal ZLZB = decimal.Parse(CZInfo_Mes.ZLZB);
                        decimal ZLZC = decimal.Parse(CZInfo_Mes.ZLZC);
                        //判断取反,进行删除
                        if (ZLZA - (decimal.Parse(Wheels_gkzja)) < selectionLowerValue_gk && ZLZA - (decimal.Parse(Wheels_gkzja)) > selectionUpperValue_gk
                            && ZLZB - (decimal.Parse(Wheels_gkzjb)) < selectionLowerValue_gk && ZLZB - (decimal.Parse(Wheels_gkzjb)) > selectionUpperValue_gk
                            && ZLZC - (decimal.Parse(Wheels_gkzjc)) < selectionLowerValue_gk && ZLZC - (decimal.Parse(Wheels_gkzjc)) > selectionUpperValue_gk)
                        {
                            wheelsStocks.Remove(item);
                        }
                    }
                    else
                    {
                        decimal YLZA = decimal.Parse(CZInfo_Mes.YLZA);
                        decimal YLZB = decimal.Parse(CZInfo_Mes.YLZB);
                        decimal YLZC = decimal.Parse(CZInfo_Mes.YLZC);
                        if (YLZA - (decimal.Parse(Wheels_gkzja)) >= selectionLowerValue_gk && YLZA - (decimal.Parse(Wheels_gkzja)) <= selectionUpperValue_gk
                            && YLZB - (decimal.Parse(Wheels_gkzjb)) >= selectionLowerValue_gk && YLZB - (decimal.Parse(Wheels_gkzjb)) <= selectionUpperValue_gk
                            && YLZC - (decimal.Parse(Wheels_gkzjc)) >= selectionLowerValue_gk && YLZC - (decimal.Parse(Wheels_gkzjc)) <= selectionUpperValue_gk)
                        {
                            wheelsStocks.Remove(item);
                        }
                    }
                }
            }
        }
        return wheelsStocks.OrderBy(x => x.dt_ins).FirstOrDefault();
    }
}
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/WIDESEA_StorageBasicServices.csproj
@@ -21,6 +21,7 @@
    <ProjectReference Include="..\WIDESEA_IStorageOutOrderService\WIDESEA_IStorageOutOrderServices.csproj" />
    <ProjectReference Include="..\LogLibrary\LogLibrary.csproj" />
    <ProjectReference Include="..\WIDESEA_IStorageTaskService\WIDESEA_IStorageTaskServices.csproj" />
    <ProjectReference Include="..\WIDESEA_IStoragIntegrationServices\WIDESEA_IStoragIntegrationServices.csproj" />
  </ItemGroup>
</Project>
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/obj/Release/net6.0/WIDESEA_StorageBasicServices.csproj.CopyComplete
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderRepository/obj/Release/net6.0/WIDESEA_StorageOutOrderRepository.csproj.CopyComplete
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderServices/obj/Release/net6.0/WIDESEA_StorageOutOrderServices.csproj.CopyComplete
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskRepository/obj/Release/net6.0/WIDESEA_StorageTaskRepository.csproj.CopyComplete
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/obj/Release/net6.0/WIDESEA_StorageTaskServices.csproj.CopyComplete
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/APP/ToAPPController.cs
@@ -41,4 +41,14 @@
    {
        return _AppService.SaveCZInfo(input);
    }
    /// <summary>
    /// ä¿å­˜é¢„选车轴信息
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    [HttpPost, Route("SaveCZInfo2"), AllowAnonymous]
    public WebResponseContent SaveCZInfo2([FromBody] SaveModel input)
    {
        return _AppService.SaveCZInfo2(input);
    }
}
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json
@@ -11,11 +11,11 @@
  //连接字符串
  //"ConnectionString": "HTI6FB1H05Krd07mNm9yBCNhofW6edA5zLs9TY~MNthRYW3kn0qKbMIsGp~3yyPDF1YZUCPBQx8U0Jfk4PH~ajNFXVIwlH85M3F~v_qKYQ3CeAz3q1mLVDn8O5uWt1~3Ut2V3KRkEwYHvW2oMDN~QIDXPxDgXN0R2oTIhc9dNu7QNaLEknblqmHhjaNSSpERdDVZIgHnMKejU_SL49tralBkZmDNi0hmkbL~837j1NWe37u9fJKmv91QPb~16JsuI9uu0EvNZ06g6PuZfOSAeFH9GMMIZiketdcJG3tHelo=",
  //"ConnectionString": "Data Source=192.168.5.251;Initial Catalog=WIDESEA_WMSDB_BBMain;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  "ConnectionString": "Data Source=.\\LIULEI;Initial Catalog=MX_LDY_WMS;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  "ConnectionString": "Data Source=.;Initial Catalog=ZCLDY_WIDESEAWMS;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  //"ConnectionString": "Data Source=.\\LIULEI;Initial Catalog=WIDESEA_WMSDB_BBMain;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  //"ConnectionString": "Data Source=192.168.20.251;Initial Catalog=WIDESEA_WMSDB;User ID=sa;Password=123456@gy;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  //"ConnectionStringWCS": "Data Source=192.168.5.251;Initial Catalog=WIDESEAWCS_TEST;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  "ConnectionStringWCS": "Data Source=.\\LIULEI;Initial Catalog=MX_LDY_WCS;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  "ConnectionStringWCS": "Data Source=.;Initial Catalog=ZCLDY_WIDESEAWCS;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  //跨域
  "Cors": {
    "PolicyName": "CorsIpAccess", //策略名称
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/obj/Release/net6.0/WIDESEA_WMSServer.csproj.CopyComplete