严智鑫
2024-03-31 38e2fda87c28fa7128d971e7afac1b05a06872d6
Merge branch 'master' of http://10.153.19.25:10101/r/HangZhouMes
19个文件已修改
14 文件已重命名
7个文件已添加
115个文件已删除
30733 ■■■■■ 已修改文件
CacheGlassModule/src/main/resources/banner.txt 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/package-lock.json 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/package.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/aaa.png 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/assets/woshihuancun.png 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/router/index.js 901 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/utils/webSocket.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Caching/caching.vue 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/HomeView.vue 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Identify/identify.vue 174 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/PurchaseReturn/purchase.vue 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/PurchaseReturn/purchaseReturn.vue 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/PurchaseReturn/purchaseStorage.vue 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Returns/CreateReturns.vue 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Returns/ReturnsReport.vue 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Returns/SelectDeliveryList.vue 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Returns/SelectReturns.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Returns/returns.vue 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/Slicecage/slicecage.vue 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/StockBasicData/Create.vue 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/StockBasicData/Details.vue 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/StockBasicData/Payment.vue 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/StockBasicData/Return.vue 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/StockBasicData/Select.vue 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/StockBasicData/Storage.vue 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/StockBasicData/stockBasicData.vue 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass/Landingindication.vue 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass/loadmachinerack.vue 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/UnLoadGlass/loadmachineracktwo.vue 193 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/identify/Create.vue 724 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/identify/CreateHeader.vue 739 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/identify/Details.vue 453 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/identify/Payment.vue 354 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/identify/Return.vue 593 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/identify/Select.vue 917 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/identify/Storage.vue 603 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/identify/identify.vue 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainIngredient/CreateIngredients.vue 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainIngredient/Ingredients.vue 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainIngredient/SelectIngredients.vue 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainIngredientStock/AccessoriesMonthlySettlement.vue 252 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainIngredientStock/CreateOutBound.vue 226 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainIngredientStock/IngredientsStock.vue 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainIngredientStock/MaterialOutbound.vue 251 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainIngredientStock/OriginalMonthlySettlement.vue 252 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainIngredientStock/ReturnToStorage.vue 256 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainIngredientStock/ReturnToStorageCreate.vue 193 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainIngredientStock/SelectIngredientsStock.vue 224 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainProductStock/CreateProductStock.vue 339 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainProductStock/FinishedGoodsIssue.vue 245 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainProductStock/FinishedProductOut.vue 317 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainProductStock/FinishedProductReturn.vue 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainProductStock/FinishedProductRework.vue 246 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainProductStock/OrderAllocation.vue 245 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainProductStock/ProductStock.vue 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainProductStock/ProductStockList.vue 290 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainProductStock/ReworkRecord.vue 231 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainProductStock/TakeOutRecord.vue 223 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainProductStock/TransferRecord.vue 202 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainTrader/CreateTrader.vue 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainTrader/SelectTrader.vue 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/mainTrader/Trader.vue 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/purchaseReturn/Select.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/purchaseStorage/PurchaseStorage.vue 174 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/purchaseStorage/Select.vue 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/stockBasicData/Select.vue 275 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/stockReport/StockMonthReport.vue 277 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/stockReport/StockReport.vue 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/stockReport/StockWarehouseReport.vue 272 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/stockReport/SubsidiaryMonthReport.vue 268 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/mm/stockReport/WarehouseReport.vue 387 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/BOM/BOM.vue 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/BOM/BenchmarkBOM.vue 254 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/BOM/OrderBOM.vue 273 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/BOM/OrderBOMDetails.vue 271 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/BOM/SelectBOM.vue 249 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/BOM/StandardBOM.vue 235 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/BOM/StandardBOMDetail.vue 259 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/Replenish/AddReplenish.vue 308 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/Replenish/PrintReplenishFlowCard.vue 257 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/Replenish/Replenish.vue 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/Replenish/SelectReplenish.vue 332 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/machine/AddMachine.vue 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/machine/AddMaintenanceAndRepair.vue 243 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/machine/Machine.vue 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/machine/MaintenanceAndRepair.vue 316 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/machine/SelectMachine.vue 274 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/processCard/AddProcessCard.vue 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/processCard/PrintFlowCard.vue 256 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/processCard/PrintProcess.vue 954 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/processCard/ProcessCard.vue 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/processCard/ProcessCardDetails.vue 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/processCard/ProductionScheduling.vue 284 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/processCard/SelectAddProcess.vue 249 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/processCard/SelectPrintFlowCard.vue 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/processCard/SelectProcessCard.vue 270 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/processCard/SplittingDetails.vue 191 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/DamageReport.vue 281 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/EquipmentOutput.vue 256 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/OrderBOMOutside.vue 277 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/OrderPlanDecomposition.vue 282 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/ProcessCardProgress.vue 245 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/ProcessToBeCompleted.vue 233 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/ProductionSchedule.vue 341 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/QualityReport.vue 268 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/RawMaterialRequisition.vue 264 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/Report.vue 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/SplittingDetailsOutside.vue 258 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/TaskCompletionStatus.vue 286 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/TeamOutput.vue 291 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/WorkInProgress.vue 281 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/report/Yield.vue 257 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/reportingWorks/AddReportingWork.vue 395 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/reportingWorks/QualityInReviewDetail.vue 274 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/reportingWorks/QualityInspectionReview.vue 253 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/reportingWorks/ReportingWorkDetail.vue 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/reportingWorks/ReportingWorks.vue 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/reportingWorks/SelectReportingWorks.vue 272 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/rework/AddRework.vue 213 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/rework/Rework.vue 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/rework/SelectRework.vue 436 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/workOrder/AddWorkOrder.vue 166 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/workOrder/SelectAddWorkOrder.vue 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/workOrder/SelectWorkOrder.vue 366 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/pp/workOrder/WorkOrder.vue 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/customer/CreateCustomer.vue 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/customer/Customer.vue 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/customer/SelectCustomer.vue 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/delivery/CreateDelivery.vue 254 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/delivery/Delivery.vue 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/delivery/DeliveryReport.vue 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/delivery/SelectDelivery.vue 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/delivery/SelectOrderList.vue 213 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/order/CreateOrder.vue 483 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/order/Order.vue 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/order/OrderReport.vue 179 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/order/SelectOrder.vue 206 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/order/UpdateOrderCraft.vue 233 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/product/CreateProduct.vue 435 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/product/Product.vue 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/product/SelectProduct.vue 421 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/product/Test.vue 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/product/Test11.vue 520 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI-Project/src/views/sd/product/testSort.vue 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/mockPLCData.properties 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/config/AppRunnerConfig.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/controller/DownGlassInfoController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/entity/DownGlassInfo.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/entity/DownWorkstation.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/mapper/DownGlassInfoMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/mapper/DownWorkstationMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/service/DownGlassInfoService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/service/PlcService.java 118 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UnLoadGlassModule/src/main/java/com/mes/service/Plchome.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CacheGlassModule/src/main/resources/banner.txt
New file
@@ -0,0 +1,32 @@
________                ________                 ___       _____________   ____
`MMMMMMMb.          68b `MMMMMMMb.               `MMb     dMM'`MMMMMMMMM  6MMMMb\
 MM    `Mb          Y89  MM    `Mb                MMM.   ,PMM  MM      \ 6M'    `
 MM     MM   ____   ___  MM     MM   _____        M`Mb   d'MM  MM        MM
 MM    .M9  6MMMMb  `MM  MM    .M9  6MMMMMb       M YM. ,P MM  MM    ,   YM.
 MMMMMMM(  6M'  `Mb  MM  MMMMMMM(  6M'   `Mb      M `Mb d' MM  MMMMMMM    YMMMMb
 MM    `Mb MM    MM  MM  MM    `Mb MM     MM      M  YM.P  MM  MM    `        `Mb
 MM     MM MMMMMMMM  MM  MM     MM MM     MM      M  `Mb'  MM  MM              MM
 MM     MM MM        MM  MM     MM MM     MM      M   YP   MM  MM              MM
 MM    .M9 YM    d9  MM  MM    .M9 YM.   ,M9 68b  M   `'   MM  MM      / L    ,M9
_MMMMMMM9'  YMMMM9  _MM__MMMMMMM9'  YMMMMM9  Y89 _M_      _MM__MMMMMMMMM MYMMMM9
//                          _ooOoo_                               //
//                         o8888888o                              //
//                         88" . "88                              //
//                         (| ^_^ |)                              //
//                         O\  =  /O                              //
//                      ____/`---'\____                           //
//                    .'  \\|     |//  `.                         //
//                   /  \\|||  :  |||//  \                        //
//                  /  _||||| -:- |||||-  \                       //
//                  |   | \\\  -  /// |   |                       //
//                  | \_|  ''\---/''  |   |                       //
//                  \  .-\__  `-`  ___/-. /                       //
//                ___`. .'  /--.--\  `. . ___                     //
//              ."" '<  `.___\_<|>_/___.'  >'"".                  //
//            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
//            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
//      ========`-.____`-.___\_____/___.-`____.-'========         //
//                           `=---='                              //
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
//            佛祖保佑       永不宕机      永无BUG                  //
UI-Project/package-lock.json
@@ -16,6 +16,7 @@
        "pinia": "^2.1.6",
        "pinia-plugin-persistedstate": "^3.2.0",
        "sortablejs": "^1.15.1",
        "sweetalert2": "^11.10.7",
        "vue": "^3.3.4",
        "vue-router": "^4.2.4",
        "vxe-table": "^4.5.15",
@@ -1405,6 +1406,11 @@
        "node": ">=0.8"
      }
    },
    "node_modules/sweetalert2": {
      "version": "11.10.7",
      "resolved": "https://registry.npmmirror.com/sweetalert2/-/sweetalert2-11.10.7.tgz",
      "integrity": "sha512-5Jlzrmaitay6KzU+2+LhYu9q+L4v/dZ8oZyEDH14ep0C/QilCnFLHmqAyD/Lhq/lm5DiwsOs6Tr58iv8k3wyGg=="
    },
    "node_modules/to-fast-properties": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@@ -2440,6 +2446,11 @@
        "frac": "~1.1.2"
      }
    },
    "sweetalert2": {
      "version": "11.10.7",
      "resolved": "https://registry.npmmirror.com/sweetalert2/-/sweetalert2-11.10.7.tgz",
      "integrity": "sha512-5Jlzrmaitay6KzU+2+LhYu9q+L4v/dZ8oZyEDH14ep0C/QilCnFLHmqAyD/Lhq/lm5DiwsOs6Tr58iv8k3wyGg=="
    },
    "to-fast-properties": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
UI-Project/package.json
@@ -16,6 +16,7 @@
    "pinia": "^2.1.6",
    "pinia-plugin-persistedstate": "^3.2.0",
    "sortablejs": "^1.15.1",
    "sweetalert2": "^11.10.7",
    "vue": "^3.3.4",
    "vue-router": "^4.2.4",
    "vxe-table": "^4.5.15",
UI-Project/src/assets/aaa.png
UI-Project/src/assets/woshihuancun.png

UI-Project/src/router/index.js
@@ -34,641 +34,91 @@
            }
         ]
        },
          //sd模块
        /*----------- 上片机 ----------------*/
      {
        path: 'Returns',
        name: 'Returns',
        component: () => import('../views/Returns/returns.vue'),
        children:[
          {
            path: '/Returns/returns',
            name: 'returns',
            component: () => import('../views/Returns/returns.vue')
          },
        ]
      },
      /*----------- 掰片/识别 ----------------*/
    {
      path: 'Identify',
      name: 'Identify',
      component: () => import('../views/Identify/identify.vue'),
      children:[
        {
          path: 'product',//产品
          name: 'product',
          component: () => import('../views/sd/product/Product.vue'),
          children:[
            {
              path: 'createProduct',
              name: 'createProduct',
              component: () => import('../views/sd/product/CreateProduct.vue')
            },
            {
              path: 'selectProduct',
              name: 'selectProduct',
              component: () => import('../views/sd/product/SelectProduct.vue')
            },
            {
              path: 'test',
              name: 'test',
              component: () => import('../views/sd/product/Test.vue')
            },
            {
              path: 'test1',
              name: 'test1',
              component: () => import('../views/sd/product/Test11.vue')
            },
            {
              path: 'testSort',
              name: 'testSort',
              component: () => import('../views/sd/product/testSort.vue')
            },
            {
              name: 'product',
              path: '',
              redirect:'/main/product/selectProduct'
            }
          ]
          path: '/Identify/identify',
          name: 'identify',
          component: () => import('../views/Identify/identify.vue')
        },
        {
          path: 'order',//订单
          name: 'order',
          component: () => import('../views/sd/order/Order.vue'),
          children:[
            {
              path: 'selectOrder',
              name: 'selectOrder',
              component: () => import('../views/sd/order/SelectOrder.vue'),
            },
            {
              path: 'createOrder',
              name: 'createOrder',
              component: () => import('../views/sd/order/CreateOrder.vue'),
            },
            {
              path: 'updateOrderCraft',
              name: 'updateOrderCraft',
              component: () => import('../views/sd/order/UpdateOrderCraft.vue'),
            },
            {
              path: 'orderReport',
              name: 'orderReport',
              component: () => import('../views/sd/order/OrderReport.vue'),
            },
            {
              path: '',
              redirect:'/main/order/SelectOrder'
            }
          ]
        },
        {
          path: 'delivery',//发货
          name: 'delivery',
          component: () => import('../views/sd/delivery/Delivery.vue'),
          children: [
            {
              path: 'selectDelivery',
              name: 'selectDelivery',
              component: () => import('../views/sd/delivery/SelectDelivery.vue'),
            },
            {
              path: 'selectOrderList',
              name: 'selectOrderList',
              component: () => import('../views/sd/delivery/SelectOrderList.vue'),
            },
            {
              path: 'deliveryReport',
              name: 'deliveryReport',
              component: () => import('../views/sd/delivery/DeliveryReport.vue'),
            },
            {
              path: 'createDelivery',
              name: 'createDelivery',
              component: () => import('../views/sd/delivery/CreateDelivery.vue'),
            },
            {
              path: '',
              redirect:'/main/delivery/selectDelivery'
            }
          ]
        },
        {
          path: 'returns',//退货
          name: 'returns',
          component: () => import('../views/sd/returns/Returns.vue'),
          children: [
            {
              path: '',
              redirect:'/main/returns/selectReturns'
            },
            {
              path: 'selectReturns',
              name: 'selectReturns',
              component: () => import('../views/sd/returns/SelectReturns.vue'),
            },
            {
              path: 'createReturns',
              name: 'createReturns',
              component: () => import('../views/sd/returns/CreateReturns.vue'),
            },
            {
              path: 'selectDeliveryList',
              name: 'selectDeliveryList',
              component: () => import('../views/sd/returns/SelectDeliveryList.vue'),
            },
            {
              path: 'returnsReport',
              name: 'returnsReport',
              component: () => import('../views/sd/returns/ReturnsReport.vue'),
            }
          ]
        },
        {
          path: 'customer',//客户
          name: 'customer',
          component: () => import('../views/sd/customer/Customer.vue'),
          children: [
            {
              path: '',
              redirect:'/main/customer/selectCustomer'
            },
            {
              path: 'selectCustomer',
              name: 'selectCustomer',
              component: () => import('../views/sd/customer/SelectCustomer.vue'),
            },
            {
              path: 'createCustomer',
              name: 'createCustomer',
              component: () => import('../views/sd/customer/CreateCustomer.vue'),
            }
          ]
        },
        // {
        //   path:'appMenu',
        //   name:'appMenu',
        //   component: () => import('../layout/component/appMpenu.vue'),
        //   children:[
        //     {
        //       path: 'appMenu',
        //       name: 'appMenu',
        //       component:()=>import('../layout/component/appMpenu.vue')
        //     },
        //     {
        //       path: 'appView',
        //       name: 'appView',
        //       component:()=>import('../layout/component/appView.vue')
        //     },
        //     {
        //       path: 'logoHeader',
        //       name: 'logoHeader',
        //       component:()=>import('../layout/component/logoHeader.vue')
        //     },
        //     {
        //       path: 'routerHeader',
        //       name: 'routerHeader',
        //       component:()=>import('../layout/component/routerHeader.vue')
        //     },
        //   ]
        // },
          //pp模块
        {
          //工单管理
          path: 'workOrder',
          name: 'workOrder',
          component: () => import('../views/pp/workOrder/WorkOrder.vue'),
          children:[
            {
              path: 'selectAddWorkOrder',
              name: 'selectAddWorkOrder',
              component: () => import('../views/pp/workOrder/SelectAddWorkOrder.vue'),
            },
            // {
            //   path: 'releaseWorkOrder',
            //   name: 'releaseWorkOrder',
            //   component: () => import('../views/pp/workOrder/ReleaseWorkOrder.vue'),
            // },
            {
              path: 'addWorkOrder',
              name: 'addWorkOrder',
              component: () => import('../views/pp/workOrder/AddWorkOrder.vue'),
            },
            {
              path: 'selectWorkOrder',
              name: 'selectWorkOrder',
              component: () => import('../views/pp/workOrder/SelectWorkOrder.vue'),
            },
            {
              path: '',
              redirect:'/main/workOrder/SelectWorkOrder'
            }
          ]
        },
        {
          //流程卡管理
          path: 'processCard',
          name: 'processCard',
          component: () => import('../views/pp/processCard/ProcessCard.vue'),
          children:[
            {
              path: 'addProcessCard',
              name: 'addProcessCard',
              component: () => import('../views/pp/processCard/AddProcessCard.vue'),
            },
            {
              path: 'printFlowCard',
              name: 'printFlowCard',
              component: () => import('../views/pp/processCard/PrintFlowCard.vue'),
            },
            {
              path: 'selectAddProcess',
              name: 'selectAddProcess',
              component: () => import('../views/pp/processCard/SelectAddProcess.vue'),
            },
            {
              path: 'selectPrintFlowCard',
              name: 'selectPrintFlowCard',
              component: () => import('../views/pp/processCard/SelectPrintFlowCard.vue'),
            },
            {
              path: 'selectProcessCard',
              name: 'selectProcessCard',
              component: () => import('../views/pp/processCard/SelectProcessCard.vue'),
            },
            {
              path: 'processCardDetails',
              name: 'processCardDetails',
              component: () => import('../views/pp/processCard/ProcessCardDetails.vue'),
            },
            {
              path: 'splittingDetails',
              name: 'splittingDetails',
              component: () => import('../views/pp/processCard/SplittingDetails.vue'),
            },
            {
              path: 'printProcess',
              name: 'printProcess',
              component: () => import('../views/pp/processCard/PrintProcess.vue'),
            },
            {
              path: 'productionScheduling',
              name: 'productionScheduling',
              component: () => import('../views/pp/processCard/ProductionScheduling.vue'),
            },
            {
              path: '',
              redirect:'/main/processCard/SelectProcessCard'
            }
          ]
        },
        {
          //报工管理
          path: 'reportingWorks',
          name: 'reportingWorks',
          component: () => import('../views/pp/reportingWorks/ReportingWorks.vue'),
          children:[
            {
              path: 'selectReportingWorks',
              name: 'selectReportingWorks',
              component: () => import('../views/pp/reportingWorks/SelectReportingWorks.vue'),
            },
            {
              path: 'addReportingWork',
              name: 'addReportingWork',
              component: () => import('../views/pp/reportingWorks/AddReportingWork.vue'),
            },
            {
              path: 'qualityInspectionReview',
              name: 'qualityInspectionReview',
              component: () => import('../views/pp/reportingWorks/QualityInspectionReview.vue'),
            },
            {
              path: 'reportingWorkDetail',
              name: 'reportingWorkDetail',
              component: () => import('../views/pp/reportingWorks/ReportingWorkDetail.vue'),
            },
            {
              path: 'qualityInReviewDetail',
              name: 'qualityInReviewDetail',
              component: () => import('../views/pp/reportingWorks/QualityInReviewDetail.vue'),
            },
            {
              path: '',
              redirect:'/main/reportingWorks/SelectReportingWorks'
            }
          ]
        },
        {
          //补片管理
          path: 'replenish',
          name: 'replenish',
          component: () => import('../views/pp/Replenish/Replenish.vue'),
          children:[
            {
              path: 'addReplenish',
              name: 'addReplenish',
              component: () => import('../views/pp/Replenish/AddReplenish.vue'),
            },
            {
              path: 'printReplenishFlowCard',
              name: 'printReplenishFlowCard',
              component: () => import('../views/pp/Replenish/PrintReplenishFlowCard.vue'),
            },
            {
              path: 'selectReplenish',
              name: 'selectReplenish',
              component: () => import('../views/pp/Replenish/SelectReplenish.vue'),
            },
            {
              path: '',
              redirect:'/main/Replenish/SelectReplenish'
            }
          ]
        },
        {
          //返工管理
          path: 'rework',
          name: 'rework',
          component: () => import('../views/pp/Rework/Rework.vue'),
          children:[
            {
              path: 'addRework',
              name: 'addRework',
              component: () => import('../views/pp/Rework/AddRework.vue'),
            },
            {
              path: 'selectRework',
              name: 'selectRework',
              component: () => import('../views/pp/Rework/SelectRework.vue'),
            },
            {
              path: '',
              redirect:'/main/Rework/SelectRework'
            }
          ]
        },
        {
          //BOM管理
          path: 'BOM',
          name: 'BOM',
          component: () => import('../views/pp/BOM/BOM.vue'),
          children:[
            {
              path: 'benchmarkBOM',
              name: 'benchmarkBOM',
              component: () => import('../views/pp/BOM/BenchmarkBOM.vue'),
            },
            {
              path: 'standardBOM',
              name: 'standardBOM',
              component: () => import('../views/pp/BOM/StandardBOM.vue'),
            },
            {
              path: 'orderBOM',
              name: 'orderBOM',
              component: () => import('../views/pp/BOM/OrderBOM.vue'),
            },
            {
              path: 'selectBOM',
              name: 'selectBOM',
              component: () => import('../views/pp/BOM/SelectBOM.vue'),
            },
            {
              path: 'orderBOMDetails',
              name: 'orderBOMDetails',
              component: () => import('../views/pp/BOM/OrderBOMDetails.vue'),
            },
            {
              path: 'standardBOMDetail',
              name: 'standardBOMDetail',
              component: () => import('../views/pp/BOM/StandardBOMDetail.vue'),
            },
            {
              path: '',
              redirect:'/main/BOM/SelectBOM'
            }
          ]
        },
        {
          //设备管理
          path: 'machine',
          name: 'machine',
          component: () => import('../views/pp/machine/Machine.vue'),
          children:[
            {
              path: 'selectMachine',
              name: 'selectMachine',
              component: () => import('../views/pp/machine/SelectMachine.vue'),
            },
            {
              path: 'addMachine',
              name: 'addMachine',
              component: () => import('../views/pp/machine/AddMachine.vue'),
            },
            {
              path: 'maintenanceAndRepair',
              name: 'maintenanceAndRepair',
              component: () => import('../views/pp/machine/MaintenanceAndRepair.vue'),
            },
            {
              path: 'addMaintenanceAndRepair',
              name: 'addMaintenanceAndRepair',
              component: () => import('../views/pp/machine/AddMaintenanceAndRepair.vue'),
            },
            {
              path: '',
              redirect:'/main/machine/SelectMachine'
            }
          ]
        },
        {
          //报表管理
          path: 'report',
          name: 'report',
          component: () => import('../views/pp/report/Report.vue'),
          children:[
            {
              //设备产量
              path: 'equipmentOutput',
              name: 'equipmentOutput',
              component: () => import('../views/pp/report/EquipmentOutput.vue'),
            },
            {
              //订单BOM
              path: 'orderBOMOutside',
              name: 'orderBOMOutside',
              component: () => import('../views/pp/report/OrderBOMOutside.vue'),
            },
            {
              //订单计划分解
              path: 'orderPlanDecomposition',
              name: 'orderPlanDecomposition',
              component: () => import('../views/pp/report/OrderPlanDecomposition.vue'),
            },
            {
              //工序待完成
              path: 'processToBeCompleted',
              name: 'processToBeCompleted',
              component: () => import('../views/pp/report/ProcessToBeCompleted.vue'),
            },
            {
              //生产进度
              path: 'productionSchedule',
              name: 'productionSchedule',
              component: () => import('../views/pp/report/ProductionSchedule.vue'),
            },
            {
              //流程卡进度
              path: 'processCardProgress',
              name: 'processCardProgress',
              component: () => import('../views/pp/report/ProcessCardProgress.vue'),
            },
            {
              //品质报表
              path: 'qualityReport',
              name: 'qualityReport',
              component: () => import('../views/pp/report/QualityReport.vue'),
            },
            {
              //原片领料报表
              path: 'rawMaterialRequisition',
              name: 'rawMaterialRequisition',
              component: () => import('../views/pp/report/RawMaterialRequisition.vue'),
            },
            {
              //分架明细
              path: 'splittingDetailsOutside',
              name: 'splittingDetailsOutside',
              component: () => import('../views/pp/report/SplittingDetailsOutside.vue'),
            },
            {
              //任务完成情况
              path: 'taskCompletionStatus',
              name: 'taskCompletionStatus',
              component: () => import('../views/pp/report/TaskCompletionStatus.vue'),
            },
            {
              //班组产量
              path: 'teamOutput',
              name: 'teamOutput',
              component: () => import('../views/pp/report/TeamOutput.vue'),
            },
            {
              //在制品报表
              path: 'workInProgress',
              name: 'workInProgress',
              component: () => import('../views/pp/report/WorkInProgress.vue'),
            },
            {
              //成品率报表
              path: 'yield',
              name: 'yield',
              component: () => import('../views/pp/report/Yield.vue'),
            },
            {
              //次破报表
              path: 'damageReport',
              name: 'damageReport',
              component: () => import('../views/pp/report/DamageReport.vue'),
            },
            // {
            //   path: '',
            //   redirect:'/main/report/ProductionSchedule'
            // }
          ]
        },
          //mm模块
        {
          path: 'productStock',
          name: 'productStock',
          component: () => import('../views/mm/mainProductStock/ProductStock.vue'),
          children:[
            {
              // 成品库存
              path: 'productStockList',
              name: 'productStockList',
              component: () => import('../views/mm/mainProductStock/ProductStockList.vue'),
            },
            {
              // 成品入库
              path: 'createProductStock',
              name: 'createProductStock',
              component:()=>   import('../views/mm/mainProductStock/CreateProductStock.vue'),
            },
            {
              // 成品出库
              path: 'finishedProductOut',
              name: 'finishedProductOut',
              component:()=>import('../views/mm/mainProductStock/FinishedProductOut.vue')
            },
            {
              // 成品出库
              path: 'finishedProductReturn',
              name: 'finishedProductReturn',
              component:()=>import('../views/mm/mainProductStock/FinishedProductReturn.vue')
            },
            {
              // 订单调拨
              path: 'orderAllocation',
              name: 'orderAllocation',
              component:()=>import('../views/mm/mainProductStock/OrderAllocation.vue'),
            },
            {
              // 成品领出
              path: 'finishedGoodsIssue',
              name: 'finishedGoodsIssue',
              component:()=>import('../views/mm/mainProductStock/FinishedGoodsIssue.vue'),
            },
            {
              // 成品返工
              path: 'finishedProductRework',
              name: 'finishedProductRework',
              component:()=>import('../views/mm/mainProductStock/FinishedProductRework.vue'),
            },
            {
              // 调拨记录
              path: 'transferRecord',
              name: 'transferRecord',
              component:()=>import('../views/mm/mainProductStock/TransferRecord.vue'),
            },
            {
              // 领出记录
              path: 'takeOutRecord',
              name: 'takeOutRecord',
              component:()=>import('../views/mm/mainProductStock/TakeOutRecord.vue'),
            },
            {
              // 返工记录
              path: 'reworkRecord',
              name: 'reworkRecord',
              component:()=>import('../views/mm/mainProductStock/ReworkRecord.vue'),
            },
            {
              path: '',
              redirect:'/main/productStock/ProductStockList'
            }
          ]
        },
        {
          // 物料资料
          path:'ingredients',
          name:'ingredients',
          component: () => import('../views/mm/mainIngredient/Ingredients.vue'),
          children:[
            {
              path: 'selectIngredients',
              name: 'selectIngredients',
              component:()=>import('../views/mm/mainIngredient/SelectIngredients.vue')
            },
            {
              path: 'createIngredients',
              name: 'createIngredients',
              component:()=>import('../views/mm/mainIngredient/CreateIngredients.vue')
            },
            {
              path: '',
              redirect:'/main/ingredients/SelectIngredients'
            }
          ]
        },
      ]
    },
    /*----------- 卧式缓存 ----------------*/
  {
    path: 'Caching',
    name: 'Caching',
    component: () => import('../views/Caching/caching.vue'),
    children:[
      {
        path: '/Caching/caching',
        name: 'caching',
        component: () => import('../views/Caching/caching.vue')
      },
    ]
  },
  /*----------- 磨边(冷加工) ----------------*/
{
  path: 'StockBasicData',
  name: 'StockBasicData',
  component: () => import('../views/StockBasicData/stockBasicData.vue'),
  children:[
    {
      path: '/StockBasicData/stockBasicData',
      name: 'stockBasicData',
      component: () => import('../views/StockBasicData/stockBasicData.vue')
    },
  ]
},
/*----------- 大理片笼 ----------------*/
{
path: 'Slicecage',
name: 'Slicecage',
component: () => import('../views/Slicecage/slicecage.vue'),
children:[
  {
    path: '/Slicecage/slicecage',
    name: 'slicecage',
    component: () => import('../views/Slicecage/slicecage.vue')
  },
]
},
/*----------- 钢化 ----------------*/
{
path: 'PurchaseReturn',
name: 'purchase',
component: () => import('../views/PurchaseReturn/purchase.vue'),
children:[
  {
    path: '/PurchaseReturn/purchaseReturn',
    name: 'purchaseReturn',
    component: () => import('../views/PurchaseReturn/purchaseReturn.vue')
  },
  {
    path: '/PurchaseReturn/purchaseStorage',
    name: 'purchaseStorage',
    component: () => import('../views/PurchaseReturn/purchaseStorage.vue')
  },
]
},
          /*----------- 下片台 ----------------*/
        {
          path: 'UnLoadGlass',
          name: 'UnLoadGlass',
@@ -678,6 +128,11 @@
              path: '/UnLoadGlass/loadmachinerack',
              name: 'loadmachinerack',
              component: () => import('../views/UnLoadGlass/loadmachinerack.vue')
            },
            {
              path: '/UnLoadGlass/loadmachineracktwo',
              name: 'loadmachineracktwo',
              component: () => import('../views/UnLoadGlass/loadmachineracktwo.vue')
            },
            {
              path: '/UnLoadGlass/Landingindication',
@@ -692,186 +147,8 @@
          ]
        },
        {
          /*----------- 采购订单 ----------------*/
          path: 'purchaseOrder',
          name: 'purchaseOrder',
          component: () => import('../views/mm/purchaseOrder/PurchaseOrder.vue'),
          children: [
            {
              path: 'SelectPurchaseOrder',
              name: 'SelectPurchaseOrder',
              component: () => import('../views/mm/purchaseOrder/Select.vue'),
            }, {
              path: 'CreatePurchaseOrder',
              name: 'CreatePurchaseOrder',
              component: () => import('../views/mm/purchaseOrder/Create.vue')
            },
            /*----------- 新增 ----------------*/
            {
              path: 'PaymentPurchaseOrder',
              name: 'PaymentPurchaseOrder',
              component: () => import('../views/mm/purchaseOrder/Payment.vue')
            },
            /*----------- 退货 ----------------*/
            {
              path: 'ReturnPurchaseOrder',
              name: 'ReturnPurchaseOrder',
              component: () => import('../views/mm/purchaseOrder/Return.vue')
            },
            /*----------- 入库 ----------------*/
            {
              path: 'StoragePurchaseOrder',
              name: 'StoragePurchaseOrder',
              component: () => import('../views/mm/purchaseOrder/Storage.vue')
            },
            {
              path: '',
              redirect: '/main/purchaseOrder/SelectPurchaseOrder'
            }
          ]
        },
        {
          /*----------- 掰片/识别 ----------------*/
          path: 'identify',
          name: 'identify',
          component: () => import('../views/mm/identify/Identify.vue'),
          children: [
            {
              path: 'SelectIdentify',
              name: 'SelectIdentify',
              component: () => import('../views/mm/identify/Select.vue'),
            }
          ]
        },
        {
          /*----------- 卧式缓存----------------*/
          path: 'caching',
          name: 'caching',
          component: () => import('../views/mm/caching/Caching.vue'),
          children: [
            {
              path: 'SelectCaching',
              name: 'SelectCaching',
              component: () => import('../views/mm/caching/caching.vue'),
            }
          ]
        },
        {
          /*----------- 大理片笼----------------*/
          path: 'slicecage',
          name: 'slicecage',
          component: () => import('../views/mm/slicecage/Slicecage.vue'),
          children: [
            {
              path: 'SelectSlicecage',
              name: 'SelectSlicecage',
              component: () => import('../views/mm/slicecage/slicecage.vue'),
            }
          ]
        },
        {
          // 供应商管理!!!
          path:'trader',
          name:'trader',
          component: () => import('../views/mm/mainTrader/Trader.vue'),
          children:[
            {
              path: 'selectTrader',
              name: 'selectTrader',
              component:()=>import('../views/mm/mainTrader/SelectTrader.vue')
            },
            {
              path: 'createTrader',
              name: 'createTrader',
              component:()=>import('../views/mm/mainTrader/CreateTrader.vue')
            },
            {
              path: '',
              redirect:'/main/trader/SelectTrader'
            }
          ]
        },
        /*------------- sunshiqiang Add --*/
        {
          /*----------- 仓储报表 ----------------*/
          path: 'stockReport',
          name: 'stockReport',
          component: () => import('../views/mm/stockReport/stockReport.vue'),
          children:[
            {
              path: 'WarehouseReport',
              name: 'WarehouseReport',
              component: () => import('../views/mm/stockReport/WarehouseReport.vue'),
            }, {
              path: 'StockMonthReport',
              name: 'StockMonthReport',
              component: () => import('../views/mm/stockReport/StockMonthReport.vue'),
            }, {
              path: 'SubsidiaryMonthReport',
              name: 'SubsidiaryMonthReport',
              component: () => import('../views/mm/stockReport/SubsidiaryMonthReport.vue'),
            },
            /*----------- 新增 ----------------*/
            {
              path: 'StockWarehouseReport',
              name: 'StockWarehouseReport',
              component: () => import('../views/mm/stockReport/StockWarehouseReport.vue'),
            }, {
              path: '',
              redirect: '/main/stockReport/WarehouseReport'
            }
          ]
        },
        {
          /*-----------  ----------------*/
          path: 'stockBasicData',
          name: 'stockBasicData',
          component: () => import('../views/mm/stockBasicData/StockBasicData.vue'),
          children: [
            {
              path: 'SelectStockBasicData',
              name: 'SelectStockBasicData',
              component: () => import('../views/mm/stockBasicData/Select.vue'),
            },
          ]
        },
        {
          /*----------- 采购入库 ----------------*/
          path: 'purchaseStorage',
          name: 'purchaseStorage',
          component: () => import('../views/mm/purchaseStorage/PurchaseStorage.vue'),
          children: [
            {
              path: 'SelectPurchaseStorage',
              name: 'SelectPurchaseStorage',
              component: () => import('../views/mm/purchaseStorage/Select.vue'),
            },
            {
              path: '',
              redirect: '/main/purchaseStorage/SelectPurchaseStorage'
            }
          ]
        },
        {
          /*----------- 采购退货 ----------------*/
          path: 'purchaseReturn',
          name: 'purchaseReturn',
          component: () => import('../views/mm/purchaseReturn/PurchaseReturn.vue'),
          children: [
            {
              path: 'SelectPurchaseReturn',
              name: 'SelectPurchaseReturn',
              component: () => import('../views/mm/purchaseReturn/Select.vue'),
            },
            {
              path: '',
              redirect: '/main/purchaseReturn/SelectPurchaseReturn'
            }
          ]
        },
        {
          path: '',
          redirect:'/main/order'
          redirect:'/Slicecage/slicecage'
        }
      ]
    },
UI-Project/src/utils/webSocket.js
@@ -6,7 +6,7 @@
var serverPort = "/ws"; // webSocket连接端口
var wsuri = "ws://127.0.0.1:12345/ws";
var wsuri = "ws://localhost:8081/mesModuleTools";
function createWebSocket(callback) {
UI-Project/src/views/Caching/caching.vue
File was renamed from UI-Project/src/views/mm/caching/caching.vue
@@ -13,7 +13,7 @@
    long: '1005',
    wide: '183.6',
    thick: '1991',
    type: '待识别',
    type: '1200',
    typea: '1',
  },
  {
@@ -22,7 +22,7 @@
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
    type: '1200'
  },
  {
    id: '2',
@@ -30,7 +30,7 @@
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
    type: '1200'
  },
  {
    id: '2',
@@ -38,7 +38,7 @@
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
    type: '1200'
  },
  {
    id: '2',
@@ -737,7 +737,7 @@
   
  </div>
  <div id="awatch">
    <img src="../../../assets/woshihuancun.png" alt="" style="width: 70%;height: 100%;margin-left: 160px;">
    <img src="../../assets/woshihuancun.png" alt="" style="width: 60%;height: 90%;margin-left: 260px;margin-top: 20px;">
</div>
</template>
@@ -760,6 +760,7 @@
   margin-left: 28%;
}
#awatch{
  height: 450px;
  height: 460px;
  /* margin-top: -60px; */
}
</style>
UI-Project/src/views/HomeView.vue
@@ -3,21 +3,21 @@
import { sendSock, createWebSocket, closeSock } from "@/utils/webSocket"
function global_callback(msg) {
  console.log("websocket的回调函数收到服务器信息:" + JSON.stringify(msg));
  // console.log("收到服务器信息:" + msg);
}
function close(){
 closeSock();
// function global_callback(msg) {
//   console.log("websocket的回调函数收到服务器信息:" + JSON.stringify(msg));
//   // console.log("收到服务器信息:" + msg);
// }
// function close(){
//  closeSock();
}
function sendMessage(){
  sendSock("123")
}
function createSocket(){
  createWebSocket(global_callback);
}
</script>
// }
// function sendMessage(){
//   sendSock("123")
// }
// function createSocket(){
//   createWebSocket(global_callback);
// }
// </script>
<template>
UI-Project/src/views/Identify/identify.vue
New file
@@ -0,0 +1,174 @@
<template>
  <el-card style="margin-left: 10px; margin-top: 10px; margin-right: 10px;" v-loading="loading">
    <div style="display: flex;">
      <div style="margin-left: 400px; font-size: 20px;">工程号:P20240305001 </div>
      <div style="margin-left: 150px; font-size: 20px;">版图编号:1</div>
    </div>
    <svg width="100%" height="690" xmlns="http://www.w3.org/2000/svg" style="margin-top: -40px;">
      <defs>
            <marker id="arrow" markerUnits="strokeWidth" markerWidth="12" markerHeight="12" viewBox="0 0 12 12" refX="6"
                refY="6" orient="auto">
                <path d="M2,2 L10,6 L2,10 L2,2" style="fill: #911005;" />
            </marker>
        </defs>
      <g v-for="(rack, index) in racks" :key="index">
        <rect
          :x="rack.x"
          :y="rack.y"
          :width="rack.width"
          :height="rack.height"
          :fill="rack.fillColor"
          :data-index="index"
          class="rack-rect"
          style="stroke:#c8c9cc;stroke-width:3;"
          @click="showRectInfo(rack)"
        />
        <line x1='510' y1='309' x2='260' y2='310' stroke='#911005' stroke-width='2' marker-end='url(#arrow)'>
        </line>
        <line x1='850' y1='309' x2='1100' y2='310' stroke='#911005' stroke-width='2' marker-end='url(#arrow)'>
        </line>
        <line x1='510' y1='409' x2='260' y2='410' stroke='#911005' stroke-width='2' marker-end='url(#arrow)'>
        </line>
        <line x1='1200' y1='650' x2='1200' y2='470' stroke='#911005' stroke-width='2' marker-end='url(#arrow)'>
        </line>
        <text x="370" y="240" dominant-baseline="middle" text-anchor="middle">NG2024030501A-01</text>
        <text x="370" y="260" dominant-baseline="middle" text-anchor="middle">500*300</text>
        <text x="970" y="240" dominant-baseline="middle" text-anchor="middle">NG2024030501A-02</text>
        <text x="970" y="260" dominant-baseline="middle" text-anchor="middle">500*300</text>
        <text x="600" y="500" dominant-baseline="middle" text-anchor="middle">NG2024030501A-03</text>
        <text x="600" y="520" dominant-baseline="middle" text-anchor="middle">800*450</text>
        <text x="1280" y="520" dominant-baseline="middle" text-anchor="middle">NG2024030501A-04</text>
        <text x="1280" y="540" dominant-baseline="middle" text-anchor="middle">400*300</text>
        <g v-for="(item, itemIndex) in rack.items" :key="itemIndex">
          <rect
            :x="calculateItemXPosition(rack, item, itemIndex)"
            :y="calculateItemYPosition(rack, item, itemIndex)"
            :width="item.width"
            :height="item.height"
            :fill="item.fillColor"
          />
        </g>
      </g>
    </svg>
  </el-card>
</template>
<script>
import Swal from 'sweetalert2'
export default {
  data() {
    return {
      loading: false,
      racks: [
        {
          x: 70, y: 126, width: 600, height: 240, fillColor: '#93d2f3',
          items: [
            { position: 'top-left', width: 40, height: 30, fillColor: '#ffffff', content: 'NG123456',y: '20'},
            { position: 'bottom-left', width: 40, height: 30, fillColor: '#ffffff', content: 'NG1234567' },
            { position: 'bottom-right', width: 40, height: 30, fillColor: '#ffffff', content: 'NG12345678' }
          ]
        },
        {
          x: 685, y: 126, width: 600, height: 240,  fillColor: '#93d2f3',
          items: [
            { position: 'bottom-left', width: 40, height: 30, fillColor: '#ffffff', content: 'NG123456' },
            { position: 'bottom-right', width: 40, height: 30, fillColor: '#ffffff', content: 'NG123456' },
            { position: 'top-right', width: 40, height: 30, fillColor: '#ffffff', content: 'NG1234567' }
          ]
        },
        {
          x: 70, y: 380, width: 1100, height: 260, fillColor: '#81b337',
          items: [
            { position: 'top-left', width: 40, height: 30, fillColor: '#ffffff', content: 'NG123456' },
            { position: 'bottom-right', width: 40, height: 30, fillColor: '#ffffff', content: 'NG123456' },
            { position: 'top-right', width: 40, height: 30, fillColor: '#ffffff', content: 'NG1234567' }
          ]
        },
        {
          x: 1185, y: 380, width: 200, height: 300,fillColor: '#81b337',
          items: [
            { position: 'bottom-right', width: 40, height: 30, fillColor: '#ffffff', content: 'NG123456' },
            { position: 'top-right',width: 40, height: 30, fillColor: '#ffffff', content: 'NG123456' },
            { position: 'top-left', width: 40, height: 30, fillColor: '#ffffff', content: 'NG1234567' },
          ]
        }
        // Add more racks and items here as needed
      ],
    };
  },
  methods: {
    calculateItemXPosition(rack, item, index) {
      if (item.position === 'top-right' || item.position === 'bottom-right') {
        return Math.min(rack.x + rack.width - item.width, rack.x + rack.width);
      } else {
        return rack.x;
      }
    },
    calculateItemYPosition(rack, item, index) {
      if (item.position === 'bottom-left' || item.position === 'bottom-right') {
        return Math.min(rack.y + rack.height - item.height, rack.y + rack.height);
      } else {
        return rack.y;
      }
    },
    showCustomAlert(content) {
      Swal.fire({
    // type: 'warning', // 弹框类型
    title: '该片玻璃状态', //标题
    // text: "注销后将无法恢复,请谨慎操作!", //显示内容
    confirmButtonColor: '#3085d6',// 确定按钮的 颜色
    confirmButtonText: '人工拿走',// 确定按钮的 文字
    showCancelButton: true, // 是否显示取消按钮
    cancelButtonColor: '#d33', // 取消按钮的 颜色
    cancelButtonText: "破损", // 取消按钮的 文字
    // focusCancel: true, // 是否聚焦 取消按钮
    reverseButtons: true  // 是否 反转 两个按钮的位置 默认是  左边 确定  右边 取消
}).then((isConfirm) => {
    try {
        //判断 是否 点击的 确定按钮
        if (isConfirm.value) {
            Swal.fire("人工拿走", "点击了人工拿走", "success");
        }
        else {
            Swal.fire("破损", "点击了破损", "error");
        }
    } catch (e) {
        alert(e);
    }
});
    },
    showRectInfo(rectInfo) {
      const contents = rectInfo.items.map(item => item.content).join(', ');
      this.$nextTick(() => {
        this.showCustomAlert(contents);
      });
    },
  }
};
</script>
<style scoped>
.glass-rack {
  width: 100%;
  height: 80vh;
}
.rack-rect:hover {
  cursor: pointer;
}
.custom-popover-class {
  background-color: lightgrey;
  color: black;
  border: 1px solid black;
}
</style>
UI-Project/src/views/PurchaseReturn/purchase.vue
New file
@@ -0,0 +1,49 @@
<script setup>
import {ArrowLeftBold, ArrowRight, Search} from "@element-plus/icons-vue"
import {useRouter} from "vue-router";
let indexFlag=$ref(1)
function changeRouter(index){
  indexFlag=index
}
</script>
<template>
  <!-- <div id="main-div"> -->
    <div id="main-body">
      <router-view  />
    </div>
  <!-- </div> -->
</template>
<style scoped>
#main-div{
  width: 100%;
  height: 100%;
}
#div-title{
  height: 2%;
  width: 100%;
}
#searchButton{
  margin-top: -5px;
  margin-left: 1rem;
}
/* #searchButton1{
//margin-left: 10rem;
} */
/*main-body样式*/
#main-body{
  width: 100%;
  height: 95%;
  /* margin-top: 1%; */
}
#select{
  margin-left:0.5rem;
}
:deep(.indexTag .el-breadcrumb__inner){
  color: #5CADFE !important;
}
</style>
UI-Project/src/views/PurchaseReturn/purchaseReturn.vue
UI-Project/src/views/PurchaseReturn/purchaseStorage.vue
New file
@@ -0,0 +1,90 @@
<script setup>
import {Search} from "@element-plus/icons-vue";
import {reactive} from "vue";
import {useRouter} from "vue-router"
import { ref } from 'vue'
const dialogFormVisible = ref(true)
const dialogFormVisiblea = ref(false)
const getTableRow = (row,type) =>{
  switch (type) {
    case 'edit' :{
      //alert('我接收到子组件传送的编辑信息')
      router.push({path: '/main/returns/createReturns', query: { ReturnID: 'TH24010101' }})
      break
    }
    case 'delete':{
      alert('我接收到子组件传送的删除信息')
      break
    }
  }
}
const gridOptions = reactive({
  border:  "full",//表格加边框
  keepSource: true,//保持源数据
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 50},//鼠标移动或选择高亮
  id: 'OrderList',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
  exportConfig: {},
  scrollY:{ enabled: true },//开启虚拟滚动
  showOverflow:true,
  columnConfig: {
    resizable: true,
    useKey: true
  },
  filterConfig: {   //筛选配置项
    remote: true
  },
  customConfig: {
    storage: true
  },
  editConfig: {
    trigger: 'click',
    mode: 'row',
    showStatus: true
  },
  data:  [
    {
    }
  ],
})
</script>
<template>
  <div style="margin-top: 10px;">
<div>
    <el-card style="margin-left: 10px;margin-top: 10px;margin-right: 10px;" v-loading="loading">
      <div style="display: flex;margin-top: 20px;">
      <div style="margin-left: 400px;font-size: 20px;">工程号:P20240305001 </div>
      <div style="margin-left: 150px;font-size: 20px;">版图编号:1</div>
    </div>
    <div>
            <div id="boxa" style="width: 700px;height: 220px;margin-left: 260px;">
              <div style="margin-top: 85px;"> NG202405060798A01-1</div>
            <div> 500×1500</div>
          </div>
    </div>
    </el-card>
    </div>
  </div>
</template>
<style scoped>
#boxa{
  border: 1px solid rgb(119, 116, 116);
  background-color:  #529b2e;
  text-align: center;
  display: inline-block;
  margin-left: 20px;
  margin-top: 70px;
  margin-bottom: 50px;
}
</style>
UI-Project/src/views/Returns/CreateReturns.vue
UI-Project/src/views/Returns/ReturnsReport.vue
UI-Project/src/views/Returns/SelectDeliveryList.vue
UI-Project/src/views/Returns/SelectReturns.vue
File was renamed from UI-Project/src/views/sd/returns/SelectReturns.vue
@@ -171,7 +171,7 @@
          <el-table-column prop="thick" align="center" label="厚" min-width="120" />
          <el-table-column fixed="right" label="操作" align="center" width="200">
            <template #default>
              <el-button size="mini" type="text" plain @click="open">人工拿走</el-button>
              <el-button size="mini" type="text" plain @click="open">人工拿111走</el-button>
            </template>
        </el-table-column>
        </el-table>
UI-Project/src/views/Returns/returns.vue
File was renamed from UI-Project/src/views/sd/returns/Returns.vue
@@ -220,6 +220,7 @@
      <el-table-column prop="wide" label="原片长" align="center"/>
      <el-table-column prop="thick" label="膜系" align="center"/>
      <el-table-column prop="thick" label="数量" align="center"/>
      <el-table-column prop="wide" label="厚度" align="center"/>
      <el-table-column
            align="center"
            label="状态"
@@ -232,11 +233,11 @@
      </div>
    </el-card>
      <div id="parent">
        <img src="../../../assets/shangpianji .png" alt="" style="max-width: 20%;max-height: 20%;margin-top: 20px;margin-left: 130px;">
        <img src="../../assets/shangpianji .png" alt="" style="max-width: 20%;max-height: 20%;margin-top: 20px;margin-left: 130px;">
        <el-button style="margin-top: -830px;margin-left: -40px;"  size="mini" id="searchButton" @click="add = true">添加原片</el-button>
        <el-button style="margin-top: -10px;margin-left: -80px;"  size="mini" id="searchButton"  @click="adda = true">添加原片</el-button>
        <div id="overlay" v-show="state"></div>
        <div id="overlaya" v-show="statea"></div>
        <!-- <div id="overlay" v-show="state"></div> -->
        <!-- <div id="overlaya" v-show="statea"></div> -->
      </div>
        </div>
@@ -268,22 +269,22 @@
      </div>
    </template>
  </el-dialog>
  <el-dialog v-model="add" top="23vh" width="40%" title="添加原片" >
  <el-dialog v-model="add" top="23vh" width="45%" title="添加原片" >
    <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
            <el-form  size="mini" label-width="150px">
      <el-form >
      <el-form label-width="70px" label-position="right">
        <el-row style="margin-top: -15px;margin-bottom: -2px;">
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
              <el-form-item label="宽:" :required="true" style="width: 14vw">
              <el-form-item label="长:" :required="true" style="width: 14vw">
                <el-input  autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
          <el-col :span="9">
            <div id="dta" style="font-size: 15px;">
        <div>
              <el-form-item label="长:" :required="true" style="width: 14vw">
              <el-form-item label="宽:" :required="true" style="width: 14vw">
                <el-input autocomplete="off" />
              </el-form-item></div>
              </div>
@@ -300,7 +301,16 @@
          <el-col :span="9">
            <div id="dta" style="font-size: 15px;">
        <div>
              <el-form-item label="数量:" :required="true" style="width: 14vw">
              <el-form-item label="厚度:" :required="true" style="width: 14vw">
                <el-input autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
        </el-row>
        <el-row style="margin-top: 10px;">
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
              <el-form-item label="数量:" :required="true" style="width: 14vw;">
                <el-input autocomplete="off" />
              </el-form-item></div></div>
          </el-col>
@@ -317,23 +327,23 @@
      </div>
    </template>
  </el-dialog>
  <el-dialog v-model="adda" top="23vh" width="40%" title="添加原片" >
  <el-dialog v-model="adda" top="23vh" width="45%" title="添加原片" >
    <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
            <el-form  size="mini" label-width="150px">
      <el-form >
            <el-form  size="mini" >
      <el-form label-width="70px" label-position="right">
        <el-row style="margin-top: -15px;margin-bottom: -2px;">
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
              <el-form-item label="宽:" :required="true" style="width: 14vw">
                <el-input  autocomplete="off" />
              <el-form-item label="长:" :required="true" style="width: 14vw">
                <el-input  autocomplete="off" style="width: 180px" />
              </el-form-item></div></div>
          </el-col>
          <el-col :span="9">
            <div id="dta" style="font-size: 15px;">
        <div>
              <el-form-item label="长:" :required="true" style="width: 14vw">
                <el-input autocomplete="off" />
              <el-form-item label="宽:" :required="true" style="width: 14vw">
                <el-input autocomplete="off" style="width: 180px" />
              </el-form-item></div>
              </div>
          </el-col>
@@ -343,14 +353,23 @@
              <div id="dt" style="font-size: 15px;">
        <div>
              <el-form-item label="膜系:" :required="true" style="width: 14vw;">
                <el-input autocomplete="off" />
                <el-input autocomplete="off" style="width: 180px" />
              </el-form-item></div></div>
          </el-col>
          <el-col :span="9">
            <div id="dta" style="font-size: 15px;">
        <div>
              <el-form-item label="数量:" :required="true" style="width: 14vw">
                <el-input autocomplete="off" />
              <el-form-item label="厚度:" :required="true" style="width: 14vw">
                <el-input autocomplete="off" style="width: 180px" />
              </el-form-item></div></div>
          </el-col>
        </el-row>
        <el-row style="margin-top: 10px;">
          <el-col :span="6">
              <div id="dt" style="font-size: 15px;">
        <div>
              <el-form-item label="数量:" :required="true" style="width: 14vw;">
                <el-input autocomplete="off" style="width: 180px" />
              </el-form-item></div></div>
          </el-col>
        </el-row>
UI-Project/src/views/Slicecage/slicecage.vue
File was renamed from UI-Project/src/views/mm/slicecage/slicecage.vue
@@ -287,7 +287,7 @@
<template>
  <div style="height: 700px;">
    <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="primary" @click="dialogFormVisible = true">手动进片</el-button>
    <!-- <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="primary" @click="dialogFormVisible = true">手动进片</el-button> -->
    <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="primary" @click="dialogFormVisiblea = true">订单信息</el-button>
    <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="success" @click="dialogFormVisibleb = true">出片队列</el-button>
    <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="danger">终止进片</el-button>
@@ -302,9 +302,9 @@
          <el-table-column prop="id" align="center" label="出片玻璃ID" min-width="80" />
          <el-table-column prop="long" align="center" label="笼子" min-width="120" />
          <el-table-column prop="wide" align="center" label="格子" min-width="120" />
          <el-table-column prop="type" align="center" label="订单编号" min-width="120" />
          <el-table-column prop="type" align="center" label="列表编号" min-width="120" />
          <el-table-column prop="type" align="center" label="箱子编号" min-width="120" />
          <el-table-column prop="type" align="center" label="工程号" min-width="120" />
          <el-table-column prop="type" align="center" label="流程卡号" min-width="120" />
          <el-table-column prop="type" align="center" label="钢化版图号" min-width="120" />
          <el-table-column prop="type" align="center" label="尺寸" min-width="120" />
          <el-table-column prop="type" align="center" label="结束任务" min-width="120" />
        </el-table>
@@ -318,9 +318,9 @@
          <el-table-column prop="idb" align="center" label="进片玻璃ID" min-width="80" />
          <el-table-column prop="longb" align="center" label="笼子" min-width="120" />
          <el-table-column prop="wideb" align="center" label="格子" min-width="120" />
          <el-table-column prop="typeb" align="center" label="订单编号" min-width="120" />
          <el-table-column prop="typeb" align="center" label="列表编号" min-width="120" />
          <el-table-column prop="typeb" align="center" label="箱子编号" min-width="120" />
          <el-table-column prop="typeb" align="center" label="工程号" min-width="120" />
          <el-table-column prop="typeb" align="center" label="流程卡号" min-width="120" />
          <el-table-column prop="typeb" align="center" label="钢化版图号" min-width="120" />
          <el-table-column prop="typeb" align="center" label="尺寸" min-width="120" />
          <el-table-column prop="typeb" align="center" label="结束任务" min-width="120" />
        </el-table>
@@ -339,7 +339,7 @@
                </div>
    </div>
    <div id="awatch">
  <img src="../../../assets/xmjc.png" alt="" style="width: 70%;height: 100%;margin-left: 160px;">
  <img src="../../assets/xmjc.png" alt="" style="width: 70%;height: 100%;margin-left: 160px;">
</div>
  </div>
<el-dialog v-model="dialogFormVisible" top="12vh" width="85%" title="请确认玻璃信息" >
@@ -465,18 +465,16 @@
  </template>
</el-dialog>
<el-dialog v-model="dialogFormVisiblea" top="10vh" width="85%" title="订单信息" >
  <el-input  placeholder="请输入订单id" style="width: 180px;size: mini;"></el-input>
  <el-input  placeholder="请输入工程号" style="width: 180px;size: mini;"></el-input>
    <el-button style="margin-left: 10px;size: mini;" type="primary">查询</el-button>
    <el-table  ref="table" style="margin-top: 20px;height: 500px;"
        @selection-change="handleSelectionChange"
        :data="tableDataa" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column prop="ida" align="center" label="玻璃id" min-width="80" />
          <el-table-column prop="typea" align="center" label="订单编号" min-width="120" />
          <el-table-column prop="typea" align="center" label="列表编号" min-width="120" />
          <el-table-column prop="typea" align="center" label="箱子编号" min-width="120" />
          <el-table-column prop="ida" align="center" label="铝框id" min-width="120" />
          <el-table-column prop="typea" align="center" label="工程号" min-width="120" />
          <el-table-column prop="typea" align="center" label="长" min-width="120" />
          <el-table-column prop="typea" align="center" label="宽" min-width="120" />
          <el-table-column prop="typea" align="center" label="厚" min-width="120" />
        </el-table>
        <div id="demo-pagination-block">
    <el-pagination
@@ -494,7 +492,7 @@
    />
  </div>
</el-dialog>
<el-dialog v-model="dialogFormVisibleb" top="10vh" width="85%" title="订单信息" >
<el-dialog v-model="dialogFormVisibleb" top="10vh" width="85%" title="出片队列" >
  <div style="display: flex;">
  <p style="margin-top: 4px;">队列状态:</p>
  <p style="margin-top: 4px;">开始</p>
UI-Project/src/views/StockBasicData/Create.vue
UI-Project/src/views/StockBasicData/Details.vue
UI-Project/src/views/StockBasicData/Payment.vue
UI-Project/src/views/StockBasicData/Return.vue
UI-Project/src/views/StockBasicData/Select.vue
UI-Project/src/views/StockBasicData/Storage.vue
UI-Project/src/views/StockBasicData/stockBasicData.vue
New file
@@ -0,0 +1,169 @@
<script setup>
import {Search} from "@element-plus/icons-vue";
import {reactive} from "vue";
import {useRouter} from "vue-router"
const router = useRouter()
import { ref } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
const tableData = [
  {
    id: '1',
    long: '1005',
    wide: '183.6',
    thick: '1991',
    type: '待识别',
    typea: '1',
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
  },
]
const open = () => {
  ElMessageBox.confirm(
    '是否删除该条信息?',
    '提示',
    {
      confirmButtonText: '是',
      cancelButtonText: '取消',
      type: 'warning',
    }
  )
    .then(() => {
      ElMessage({
        type: 'success',
        message: '删除成功!',
      })
    })
    .catch(() => {
      ElMessage({
        type: 'info',
        message: '删除失败',
      })
    })
}
const getTableRow = (row,type) =>{
  switch (type) {
    case 'edit' :{
      //alert('我接收到子组件传送的编辑信息')
      router.push({path: '/main/returns/createReturns', query: { ReturnID: 'TH24010101' }})
      break
    }
    case 'delete':{
      alert('我接收到子组件传送的删除信息')
      break
    }
  }
}
const gridOptions = reactive({
  border:  "full",//表格加边框
  keepSource: true,//保持源数据
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 50},//鼠标移动或选择高亮
  id: 'OrderList',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
  exportConfig: {},
  scrollY:{ enabled: true },//开启虚拟滚动
  showOverflow:true,
  columnConfig: {
    resizable: true,
    useKey: true
  },
  filterConfig: {   //筛选配置项
    remote: true
  },
  customConfig: {
    storage: true
  },
  editConfig: {
    trigger: 'click',
    mode: 'row',
    showStatus: true
  },
  data:  [
    {
      'id': '1',
      'long': '5',
      'wide': '1005',
      'thick': '183.6',
    }
  ],
})
</script>
<template>
  <div>
    <el-card style="flex: 1;margin-left: 10px;margin-top: 5px;" v-loading="loading">
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 200px;">
        <el-table height="100%" ref="table"
        @selection-change="handleSelectionChange"
        :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column prop="id" align="center" label="id" min-width="80" />
          <el-table-column prop="long" align="center" label="长" min-width="120" />
          <el-table-column prop="wide" align="center" label="宽" min-width="120" />
          <el-table-column prop="wide" align="center" label="厚度" min-width="120" />
          <el-table-column prop="wide" align="center" label="膜系" min-width="120" />
          <el-table-column prop="wide" align="center" label="出片顺序" min-width="120" />
          <el-table-column prop="wide" align="center" label="流程卡号" min-width="120" />
          <el-table-column prop="wide" align="center" label="其他" min-width="120" />
          <el-table-column fixed="right" label="操作" align="center" width="200">
            <template #default>
              <el-button size="mini" type="text" plain  @click="dialogFormVisiblea = true">破损</el-button>
              <el-button size="mini" type="text" plain  @click="dialogFormVisiblea = true">删除</el-button>
            </template>
        </el-table-column>
        </el-table>
      </div>
    </el-card>
  </div>
</template>
<style scoped>
#dt { display:block; float:left;line-height: 20px;margin-left: 100px;}
#dta { display:block; float:left;line-height: 20px;margin-left: 80%;}
#dialog-footer{
  text-align: center;
  margin-top: -15px;
}
#message{
  text-align: center;
  align-items: center;
  color: black;
   width: 200px;
   height: 100px;
   background-color: #337ecc;
   margin-left: 28%;
}
#awatch{
  height: 450px;
}
#main-body{
  margin-top: -20px;
  margin-left: 300px;
}
#main-bodya{
  margin-top: -10px;
  margin-left: 100px;
}
</style>
UI-Project/src/views/UnLoadGlass/Landingindication.vue
@@ -1,7 +1,7 @@
<template>
  <div class="glass-rack">
    <div >
      <svg width="300" height="500" xmlns="http://www.w3.org/2000/svg">
      <svg width="500" height="500" xmlns="http://www.w3.org/2000/svg">
        <g stroke="null" id="Layer_1">
          <!-- 使用 v-for 循环渲染数据 -->
          <g v-for="(rack, index) in racks" :key="index">
@@ -11,7 +11,9 @@
              :width="rack.width" 
              :height="rack.height" 
              :fill="rack.fillColor"
          :data-index="index"
          class="rack-rect"
          @click="showRectInfo(rack)"
            />
            <rect 
              :x="calculateItemXPosition(rack, rack.item, index)" 
@@ -30,15 +32,16 @@
</template>
<script>
import Swal from 'sweetalert2'
export default {
  data() {
    return {
      racks: [
        { x: 50, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: 'NG123456' } },
        { x: 50, y: 270, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 20, width: 10, fillColor: 'yellow', content: 'NG1234567' } },
        { x: 190, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 30, width: 20, fillColor: 'yellow', content: 'NG12345678' } },
        { x: 190, y: 270, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 35, width: 23, fillColor: 'yellow', content: 'NG123456910' } },
        { x: 95, y: 420, height: 60, width: 110, fillColor: '#6a6da9', item: { height: 30, width: 100, fillColor: 'yellow', content: 'NG1234561454' } }
        { x: 280, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 30, width: 20, fillColor: 'yellow', content: 'NG12345678' } },
        { x: 280, y: 270, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 35, width: 23, fillColor: 'yellow', content: 'NG123456910' } },
        { x: 140, y: 420, height: 60, width: 110, fillColor: '#6a6da9', item: { height: 30, width: 100, fillColor: 'yellow', content: 'NG1234561454' } }
      ]
    };
  },
@@ -62,7 +65,30 @@
      } else {
        return rack.y + rack.height - item.height;  // 返回底部对齐的 y 坐标
      }
    }
    },
    showCustomAlert(content) {
      var str="架号   :      111\n" +
        "长     :      111\n" +
        "宽     :      111\n" +
        "厚     :      111\n"+
        "玻璃ID :      111\n"+
        "膜系   :      111\n";
Swal.fire({
  title: '玻璃信息',
  html: '<pre>' + str + '</pre>',
  customClass: {
    popup: 'format-pre'
  }
});
  },
    showRectInfo( rectInfo) {
  const content = rectInfo.item.content;
  this.$nextTick(() => {
    this.showCustomAlert(content);
  });
},
  }
};
</script>
@@ -70,7 +96,23 @@
<style scoped>
.glass-rack {
  margin-left: 20px;
  width: 300px;
  width: 500px;
  margin-top: 10px;
  /* background-color: antiquewhite; */
}
.rack-rect:hover {
  cursor: pointer;
}
.custom-popover-class {
  background-color: lightgrey;
  color: black;
  border: 1px solid black;
}
.format-pre pre {
  background: #49483e;
  color: #f7f7f7;
  padding: 10px;
  font-size: 14px;
}
</style>
UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue
@@ -1,7 +1,7 @@
<template>
  <div class="glass-rack">
    <div>
      <svg width="300" height="500" xmlns="http://www.w3.org/2000/svg">
      <svg width="500" height="500" xmlns="http://www.w3.org/2000/svg">
        <g stroke="null" id="Layer_1">
          <!-- 使用 v-for 循环渲染数据 -->
          <g v-for="(rack, index) in racks" :key="index">
@@ -11,6 +11,9 @@
              :width="rack.width" 
              :height="rack.height" 
              :fill="rack.fillColor"
          :data-index="index"
          class="rack-rect"
          @click="showRectInfo(rack)"
            />
            <rect 
              :x="calculateItemXPosition(rack, rack.item, index)" 
@@ -29,15 +32,16 @@
</template>
<script>
import Swal from 'sweetalert2'
export default {
  data() {
    return {
      racks: [
        { x: 50, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: 'NG123456' } },
        { x: 50, y: 270, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 20, width: 10, fillColor: 'yellow', content: 'NG1234567' } },
        { x: 190, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 30, width: 20, fillColor: 'yellow', content: 'NG12345678' } },
        { x: 190, y: 270, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 35, width: 23, fillColor: 'yellow', content: 'NG123456910' } },
        { x: 95, y: 420, height: 60, width: 110, fillColor: '#6a6da9', item: { height: 30, width: 100, fillColor: 'yellow', content: 'NG1234561454' } }
        { x: 280, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 30, width: 20, fillColor: 'yellow', content: 'NG12345678' } },
        { x: 280, y: 270, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 35, width: 23, fillColor: 'yellow', content: 'NG123456910' } },
        { x: 140, y: 420, height: 60, width: 110, fillColor: '#6a6da9', item: { height: 30, width: 100, fillColor: 'yellow', content: 'NG1234561454' } }
      ]
    };
  },
@@ -59,7 +63,30 @@
      } else {
        return rack.y + rack.height - item.height;
      }
    }
    },
    showCustomAlert(content) {
      var str="架号   :      111\n" +
        "长     :      111\n" +
        "宽     :      111\n" +
        "厚     :      111\n"+
        "玻璃ID :      111\n"+
        "膜系   :      111\n";
Swal.fire({
  title: '玻璃信息',
  html: '<pre>' + str + '</pre>',
  customClass: {
    popup: 'format-pre'
  }
});
  },
    showRectInfo( rectInfo) {
  const content = rectInfo.item.content;
  this.$nextTick(() => {
    this.showCustomAlert(content);
  });
},
  }
};
</script>
@@ -67,6 +94,21 @@
<style scoped>
.glass-rack {
  margin-left: 20px;
  width: 300px;
  width: 500px;
}
.rack-rect:hover {
  cursor: pointer;
}
.custom-popover-class {
  background-color: lightgrey;
  color: black;
  border: 1px solid black;
}
.format-pre pre {
  background: #49483e;
  color: #f7f7f7;
  padding: 10px;
  font-size: 14px;
}
</style>
UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
@@ -4,10 +4,11 @@
import {useRouter} from "vue-router"
const router = useRouter()
const dialogFormVisiblea = ref(false)
import { ref } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import Landingindication from "./Landingindication.vue";
import Landingindicationtwo from "./Landingindicationtwo.vue";
// import Landingindicationtwo from "./Landingindicationtwo.vue";
const tableData = [
  {
@@ -15,24 +16,21 @@
    long: '1005',
    wide: '183.6',
    thick: '1991',
    type: '待识别',
    typea: '1',
    state: '未启用',
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
    state: '未启用'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    typea: '1',
    type: '待识别'
    state: '未启用'
  },
]
const open = () => {
@@ -122,13 +120,13 @@
          <el-table-column prop="id" align="center" label="下片位" min-width="80" />
          <el-table-column prop="long" align="center" label="架号" min-width="120" />
          <el-table-column prop="wide" align="center" label="流程卡号" min-width="120" />
          <el-table-column prop="type" align="center" label="状态" min-width="120" />
          <el-table-column prop="type" align="center" label="设备号" min-width="120" />
          <el-table-column prop="type" align="center" label="启用状态" min-width="120" />
          <el-table-column prop="wide" align="center" label="总数量" min-width="120" />
          <el-table-column prop="wide" align="center" label="已落架数量" min-width="120" />
          <el-table-column prop="state" align="center" label="启用状态" min-width="120" />
          <el-table-column fixed="right" label="操作" align="center" width="200">
            <template #default>
              <el-button size="mini" type="text" plain  @click="dialogFormVisiblea = true">绑定架子</el-button>
              <el-button size="mini" type="text" plain  @click="dialogFormVisiblea = true">清空</el-button>
              <el-button size="mini" type="text" plain v-show="state !== '已启用' " @click="dialogFormVisiblea = true">绑定架子</el-button>
              <el-button size="mini" type="text" plain  @click="dialogFormVisible = true">清空</el-button>
            </template>
        </el-table-column>
        </el-table>
@@ -140,9 +138,32 @@
  <div id="main-body">
      <Landingindication></Landingindication>
    </div>
  <div id="main-bodya">
  <!-- <div id="main-bodya">
    <Landingindicationtwo></Landingindicationtwo>
    </div></div>
    </div> -->
    </div>
    <el-dialog v-model="dialogFormVisiblea" top="21vh" width="30%" title="绑定架子" >
    <div style="margin-left: 50px;margin-top: 10px;margin-bottom: 10px;">
            <el-form  size="mini" label-width="150px">
      <el-form  label-width="100px" label-position="right">
              <el-form-item label="架号:" :required="true" style="width: 18vw">
                <el-input  autocomplete="off"/>
              </el-form-item>
              <el-form-item label="流程卡号:" :required="true" style="width: 18vw;">
                <el-input autocomplete="off" />
              </el-form-item>
        </el-form>
            </el-form>
          </div>
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="dialogFormVisiblea = false">
          确认
        </el-button>
        <el-button @click="dialogFormVisiblea = false">取消</el-button>
      </div>
    </template>
  </el-dialog>
</template>
<style scoped>
@@ -167,10 +188,6 @@
}
#main-body{
  margin-top: -20px;
  margin-left: 300px;
}
#main-bodya{
  margin-top: -10px;
  margin-left: 100px;
  margin-left: 450px;
}
</style>
UI-Project/src/views/UnLoadGlass/loadmachineracktwo.vue
New file
@@ -0,0 +1,193 @@
<script setup>
import {Search} from "@element-plus/icons-vue";
import {reactive} from "vue";
import {useRouter} from "vue-router"
const router = useRouter()
const dialogFormVisiblea = ref(false)
import { ref } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
// import Landingindication from "./Landingindication.vue";
import Landingindicationtwo from "./Landingindicationtwo.vue";
const tableData = [
  {
    id: '1',
    long: '1005',
    wide: '183.6',
    thick: '1991',
    state: '未启用',
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    state: '未启用'
  },
  {
    id: '2',
    long: '105',
    wide: '183',
    thick: '191',
    state: '未启用'
  },
]
const open = () => {
  ElMessageBox.confirm(
    '是否删除该条信息?',
    '提示',
    {
      confirmButtonText: '是',
      cancelButtonText: '取消',
      type: 'warning',
    }
  )
    .then(() => {
      ElMessage({
        type: 'success',
        message: '删除成功!',
      })
    })
    .catch(() => {
      ElMessage({
        type: 'info',
        message: '删除失败',
      })
    })
}
const getTableRow = (row,type) =>{
  switch (type) {
    case 'edit' :{
      //alert('我接收到子组件传送的编辑信息')
      router.push({path: '/main/returns/createReturns', query: { ReturnID: 'TH24010101' }})
      break
    }
    case 'delete':{
      alert('我接收到子组件传送的删除信息')
      break
    }
  }
}
const gridOptions = reactive({
  border:  "full",//表格加边框
  keepSource: true,//保持源数据
  align: 'center',//文字居中
  stripe:true,//斑马纹
  rowConfig: {isCurrent: true, isHover: true,height: 50},//鼠标移动或选择高亮
  id: 'OrderList',
  showFooter: true,//显示脚
  printConfig: {},
  importConfig: {},
  exportConfig: {},
  scrollY:{ enabled: true },//开启虚拟滚动
  showOverflow:true,
  columnConfig: {
    resizable: true,
    useKey: true
  },
  filterConfig: {   //筛选配置项
    remote: true
  },
  customConfig: {
    storage: true
  },
  editConfig: {
    trigger: 'click',
    mode: 'row',
    showStatus: true
  },
  data:  [
    {
      'id': '1',
      'long': '5',
      'wide': '1005',
      'thick': '183.6',
    }
  ],
})
</script>
<template>
  <div>
    <el-card style="flex: 1;margin-left: 10px;margin-top: 5px;" v-loading="loading">
      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 200px;">
        <el-table height="100%" ref="table"
        @selection-change="handleSelectionChange"
        :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
          <el-table-column prop="id" align="center" label="下片位" min-width="80" />
          <el-table-column prop="long" align="center" label="架号" min-width="120" />
          <el-table-column prop="wide" align="center" label="流程卡号" min-width="120" />
          <el-table-column prop="wide" align="center" label="总数量" min-width="120" />
          <el-table-column prop="wide" align="center" label="已落架数量" min-width="120" />
          <el-table-column prop="state" align="center" label="启用状态" min-width="120" />
          <el-table-column fixed="right" label="操作" align="center" width="200">
            <template #default>
              <el-button size="mini" type="text" plain v-show="state !== '已启用' " @click="dialogFormVisiblea = true">绑定架子</el-button>
              <el-button size="mini" type="text" plain  @click="dialogFormVisible = true">清空</el-button>
            </template>
        </el-table-column>
        </el-table>
      </div>
    </el-card>
  </div>
  <div style="display: flex;">
  <!-- <div id="main-body">
      <Landingindication></Landingindication>
    </div> -->
  <div id="main-body">
    <Landingindicationtwo></Landingindicationtwo>
    </div>
    </div>
    <el-dialog v-model="dialogFormVisiblea" top="21vh" width="30%" title="绑定架子" >
    <div style="margin-left: 50px;margin-top: 10px;margin-bottom: 10px;">
            <el-form  size="mini" label-width="150px">
      <el-form  label-width="100px" label-position="right">
              <el-form-item label="架号:" :required="true" style="width: 18vw">
                <el-input  autocomplete="off"/>
              </el-form-item>
              <el-form-item label="流程卡号:" :required="true" style="width: 18vw;">
                <el-input autocomplete="off" />
              </el-form-item>
        </el-form>
            </el-form>
          </div>
    <template #footer>
      <div id="dialog-footer">
        <el-button type="primary" @click="dialogFormVisiblea = false">
          确认
        </el-button>
        <el-button @click="dialogFormVisiblea = false">取消</el-button>
      </div>
    </template>
  </el-dialog>
</template>
<style scoped>
#dt { display:block; float:left;line-height: 20px;margin-left: 100px;}
#dta { display:block; float:left;line-height: 20px;margin-left: 80%;}
#dialog-footer{
  text-align: center;
  margin-top: -15px;
}
#message{
  text-align: center;
  align-items: center;
  color: black;
   width: 200px;
   height: 100px;
   background-color: #337ecc;
   margin-left: 28%;
}
#awatch{
  height: 450px;
}
#main-body{
  margin-top: -10px;
  margin-left: 450px;
}
</style>
UI-Project/src/views/mm/identify/Create.vue
File was deleted
UI-Project/src/views/mm/identify/CreateHeader.vue
File was deleted
UI-Project/src/views/mm/identify/Details.vue
File was deleted
UI-Project/src/views/mm/identify/Payment.vue
File was deleted
UI-Project/src/views/mm/identify/Return.vue
File was deleted
UI-Project/src/views/mm/identify/Select.vue
File was deleted
UI-Project/src/views/mm/identify/Storage.vue
File was deleted
UI-Project/src/views/mm/identify/identify.vue
File was deleted
UI-Project/src/views/mm/mainIngredient/CreateIngredients.vue
File was deleted
UI-Project/src/views/mm/mainIngredient/Ingredients.vue
File was deleted
UI-Project/src/views/mm/mainIngredient/SelectIngredients.vue
File was deleted
UI-Project/src/views/mm/mainIngredientStock/AccessoriesMonthlySettlement.vue
File was deleted
UI-Project/src/views/mm/mainIngredientStock/CreateOutBound.vue
File was deleted
UI-Project/src/views/mm/mainIngredientStock/IngredientsStock.vue
File was deleted
UI-Project/src/views/mm/mainIngredientStock/MaterialOutbound.vue
File was deleted
UI-Project/src/views/mm/mainIngredientStock/OriginalMonthlySettlement.vue
File was deleted
UI-Project/src/views/mm/mainIngredientStock/ReturnToStorage.vue
File was deleted
UI-Project/src/views/mm/mainIngredientStock/ReturnToStorageCreate.vue
File was deleted
UI-Project/src/views/mm/mainIngredientStock/SelectIngredientsStock.vue
File was deleted
UI-Project/src/views/mm/mainProductStock/CreateProductStock.vue
File was deleted
UI-Project/src/views/mm/mainProductStock/FinishedGoodsIssue.vue
File was deleted
UI-Project/src/views/mm/mainProductStock/FinishedProductOut.vue
File was deleted
UI-Project/src/views/mm/mainProductStock/FinishedProductReturn.vue
File was deleted
UI-Project/src/views/mm/mainProductStock/FinishedProductRework.vue
File was deleted
UI-Project/src/views/mm/mainProductStock/OrderAllocation.vue
File was deleted
UI-Project/src/views/mm/mainProductStock/ProductStock.vue
File was deleted
UI-Project/src/views/mm/mainProductStock/ProductStockList.vue
File was deleted
UI-Project/src/views/mm/mainProductStock/ReworkRecord.vue
File was deleted
UI-Project/src/views/mm/mainProductStock/TakeOutRecord.vue
File was deleted
UI-Project/src/views/mm/mainProductStock/TransferRecord.vue
File was deleted
UI-Project/src/views/mm/mainTrader/CreateTrader.vue
File was deleted
UI-Project/src/views/mm/mainTrader/SelectTrader.vue
File was deleted
UI-Project/src/views/mm/mainTrader/Trader.vue
File was deleted
UI-Project/src/views/mm/purchaseReturn/Select.vue
File was deleted
UI-Project/src/views/mm/purchaseStorage/PurchaseStorage.vue
File was deleted
UI-Project/src/views/mm/purchaseStorage/Select.vue
File was deleted
UI-Project/src/views/mm/stockBasicData/Select.vue
File was deleted
UI-Project/src/views/mm/stockReport/StockMonthReport.vue
File was deleted
UI-Project/src/views/mm/stockReport/StockReport.vue
File was deleted
UI-Project/src/views/mm/stockReport/StockWarehouseReport.vue
File was deleted
UI-Project/src/views/mm/stockReport/SubsidiaryMonthReport.vue
File was deleted
UI-Project/src/views/mm/stockReport/WarehouseReport.vue
File was deleted
UI-Project/src/views/pp/BOM/BOM.vue
File was deleted
UI-Project/src/views/pp/BOM/BenchmarkBOM.vue
File was deleted
UI-Project/src/views/pp/BOM/OrderBOM.vue
File was deleted
UI-Project/src/views/pp/BOM/OrderBOMDetails.vue
File was deleted
UI-Project/src/views/pp/BOM/SelectBOM.vue
File was deleted
UI-Project/src/views/pp/BOM/StandardBOM.vue
File was deleted
UI-Project/src/views/pp/BOM/StandardBOMDetail.vue
File was deleted
UI-Project/src/views/pp/Replenish/AddReplenish.vue
File was deleted
UI-Project/src/views/pp/Replenish/PrintReplenishFlowCard.vue
File was deleted
UI-Project/src/views/pp/Replenish/Replenish.vue
File was deleted
UI-Project/src/views/pp/Replenish/SelectReplenish.vue
File was deleted
UI-Project/src/views/pp/machine/AddMachine.vue
File was deleted
UI-Project/src/views/pp/machine/AddMaintenanceAndRepair.vue
File was deleted
UI-Project/src/views/pp/machine/Machine.vue
File was deleted
UI-Project/src/views/pp/machine/MaintenanceAndRepair.vue
File was deleted
UI-Project/src/views/pp/machine/SelectMachine.vue
File was deleted
UI-Project/src/views/pp/processCard/AddProcessCard.vue
File was deleted
UI-Project/src/views/pp/processCard/PrintFlowCard.vue
File was deleted
UI-Project/src/views/pp/processCard/PrintProcess.vue
File was deleted
UI-Project/src/views/pp/processCard/ProcessCard.vue
File was deleted
UI-Project/src/views/pp/processCard/ProcessCardDetails.vue
File was deleted
UI-Project/src/views/pp/processCard/ProductionScheduling.vue
File was deleted
UI-Project/src/views/pp/processCard/SelectAddProcess.vue
File was deleted
UI-Project/src/views/pp/processCard/SelectPrintFlowCard.vue
File was deleted
UI-Project/src/views/pp/processCard/SelectProcessCard.vue
File was deleted
UI-Project/src/views/pp/processCard/SplittingDetails.vue
File was deleted
UI-Project/src/views/pp/report/DamageReport.vue
File was deleted
UI-Project/src/views/pp/report/EquipmentOutput.vue
File was deleted
UI-Project/src/views/pp/report/OrderBOMOutside.vue
File was deleted
UI-Project/src/views/pp/report/OrderPlanDecomposition.vue
File was deleted
UI-Project/src/views/pp/report/ProcessCardProgress.vue
File was deleted
UI-Project/src/views/pp/report/ProcessToBeCompleted.vue
File was deleted
UI-Project/src/views/pp/report/ProductionSchedule.vue
File was deleted
UI-Project/src/views/pp/report/QualityReport.vue
File was deleted
UI-Project/src/views/pp/report/RawMaterialRequisition.vue
File was deleted
UI-Project/src/views/pp/report/Report.vue
File was deleted
UI-Project/src/views/pp/report/SplittingDetailsOutside.vue
File was deleted
UI-Project/src/views/pp/report/TaskCompletionStatus.vue
File was deleted
UI-Project/src/views/pp/report/TeamOutput.vue
File was deleted
UI-Project/src/views/pp/report/WorkInProgress.vue
File was deleted
UI-Project/src/views/pp/report/Yield.vue
File was deleted
UI-Project/src/views/pp/reportingWorks/AddReportingWork.vue
File was deleted
UI-Project/src/views/pp/reportingWorks/QualityInReviewDetail.vue
File was deleted
UI-Project/src/views/pp/reportingWorks/QualityInspectionReview.vue
File was deleted
UI-Project/src/views/pp/reportingWorks/ReportingWorkDetail.vue
File was deleted
UI-Project/src/views/pp/reportingWorks/ReportingWorks.vue
File was deleted
UI-Project/src/views/pp/reportingWorks/SelectReportingWorks.vue
File was deleted
UI-Project/src/views/pp/rework/AddRework.vue
File was deleted
UI-Project/src/views/pp/rework/Rework.vue
File was deleted
UI-Project/src/views/pp/rework/SelectRework.vue
File was deleted
UI-Project/src/views/pp/workOrder/AddWorkOrder.vue
File was deleted
UI-Project/src/views/pp/workOrder/SelectAddWorkOrder.vue
File was deleted
UI-Project/src/views/pp/workOrder/SelectWorkOrder.vue
File was deleted
UI-Project/src/views/pp/workOrder/WorkOrder.vue
File was deleted
UI-Project/src/views/sd/customer/CreateCustomer.vue
File was deleted
UI-Project/src/views/sd/customer/Customer.vue
File was deleted
UI-Project/src/views/sd/customer/SelectCustomer.vue
File was deleted
UI-Project/src/views/sd/delivery/CreateDelivery.vue
File was deleted
UI-Project/src/views/sd/delivery/Delivery.vue
File was deleted
UI-Project/src/views/sd/delivery/DeliveryReport.vue
File was deleted
UI-Project/src/views/sd/delivery/SelectDelivery.vue
File was deleted
UI-Project/src/views/sd/delivery/SelectOrderList.vue
File was deleted
UI-Project/src/views/sd/order/CreateOrder.vue
File was deleted
UI-Project/src/views/sd/order/Order.vue
File was deleted
UI-Project/src/views/sd/order/OrderReport.vue
File was deleted
UI-Project/src/views/sd/order/SelectOrder.vue
File was deleted
UI-Project/src/views/sd/order/UpdateOrderCraft.vue
File was deleted
UI-Project/src/views/sd/product/CreateProduct.vue
File was deleted
UI-Project/src/views/sd/product/Product.vue
File was deleted
UI-Project/src/views/sd/product/SelectProduct.vue
File was deleted
UI-Project/src/views/sd/product/Test.vue
File was deleted
UI-Project/src/views/sd/product/Test11.vue
File was deleted
UI-Project/src/views/sd/product/testSort.vue
File was deleted
UnLoadGlassModule/mockPLCData.properties
@@ -1,5 +1,5 @@
#Mock S7 PLC Data
#Thu Mar 21 15:03:15 CST 2024
#Wed Mar 27 10:21:54 CST 2024
DB4.0.0=false
DB4.1.1=false
DB4.1.0=false
UnLoadGlassModule/src/main/java/com/mes/config/AppRunnerConfig.java
@@ -1,6 +1,7 @@
package com.mes.config;
import com.mes.service.PLCAutoMes;
import com.mes.service.Plchome;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.annotation.Order;
@@ -23,7 +24,7 @@
        //  new PlcHold().start();
       new PLCAutoMes().start();
    // new Plchome().start();
    new Plchome().start();
        //  new PlcLayout().start();
        //  new Plcalarm().start();
UnLoadGlassModule/src/main/java/com/mes/controller/DownGlassInfoController.java
@@ -21,6 +21,8 @@
        return downGlassInfoService.getDownGlassInfoById(id);
    }
//    @GetMapping("/messages")
//    public String getMessages() throws IOException, TimeoutException {
//        List<String> messages = new ArrayList<>();
@@ -33,4 +35,6 @@
//    }
}
UnLoadGlassModule/src/main/java/com/mes/entity/DownGlassInfo.java
@@ -15,5 +15,7 @@
    private Double width; // 宽
    private Double height; // 高
    private Double thickness; // 厚度
    private String filmsid;//膜系
}
UnLoadGlassModule/src/main/java/com/mes/entity/DownWorkstation.java
@@ -14,4 +14,7 @@
    private Integer deviceId; // 设备id
    private Integer enableState; // 启用状态
    private Integer workState; // 工作状态
    private Integer racks_number; // 已落架数量
    private Integer total_quantity; // 总数量
}
UnLoadGlassModule/src/main/java/com/mes/mapper/DownGlassInfoMapper.java
@@ -4,12 +4,27 @@
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.entity.DownGlassInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
@InterceptorIgnore(tenantLine = "true")
@DS("hangzhoumes") // 指定使用 hangzhoumes 数据源
public interface DownGlassInfoMapper extends BaseMapper<DownGlassInfo> {
    // 查询下片任务表中状态为1的下片信息
    @Select("SELECT flow_card_id,filmsid,width,height,thickness FROM down_glass_task WHERE state = 1;")
    List<DownGlassInfo> selectunloadingtaskstate();
    @Update("UPDATE down_glass_task SET state = 0 WHERE flow_card_id = #{flowCardId}")
    void updateTaskStateToZero(@Param("flowCardId") String flowCardId);
    @Select("SELECT MAX(sequence) FROM down_glass_info WHERE flow_card_id = #{flowCardId} LIMIT 1")
    Integer getMaxSequenceByFlowCardId(@Param("flowCardId") String flowCardId);
    @Delete("delete  from down_glass_task where flow_card_id = #{flowCardId}")
    void deletetask(@Param("flowCardId") String flowCardId);
}
UnLoadGlassModule/src/main/java/com/mes/mapper/DownWorkstationMapper.java
@@ -3,6 +3,7 @@
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mes.entity.DownGlassInfo;
import com.mes.entity.DownWorkstation;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Component;
@@ -34,8 +35,22 @@
//根据设备ID查询工位信息
    @Select("SELECT * FROM down_workstation WHERE device_id = #{deviceId}")
    List<DownWorkstation> selectByDeviceId(@Param("deviceId") Integer deviceId);
//从机械手任务表查询状态为1的流程卡号
//    @Select("SELECT *  FROM down_workstation_task WHERE state = 1")
//    List<DownWorkstation> selectdownWorkstationstate();
    @Select("SELECT dw.flow_card_id,dw.racks_number FROM down_workstation_task dwt JOIN down_workstation dw ON dwt.flow_card_id = dw.flow_card_id WHERE dwt.state = 1 LIMIT 1")
    List<DownWorkstation> selectdownWorkstationstate();
    @Update("UPDATE down_workstation SET racks_number = #{racksNumber} " +
            "WHERE flow_card_id = #{flowCardId}")
    void  update_racks_number(@Param("flowCardId") String flowCardId,
                                   @Param("racksNumber") Integer racksNumber);
    @Insert("INSERT INTO down_workstation_task (flow_card_id, width, height, thickness, filmsid,state) " +
            "VALUES (#{flowCardId}, #{width}, #{height}, #{thickness}, #{filmsid},1)")
    void insertdownWorkstationtask(DownGlassInfo downGlassInfo);
UnLoadGlassModule/src/main/java/com/mes/service/DownGlassInfoService.java
@@ -17,4 +17,6 @@
    public DownGlassInfo getDownGlassInfoById(Integer id) {
        return downGlassInfoMapper.selectById(id);
    }
}
UnLoadGlassModule/src/main/java/com/mes/service/PlcService.java
@@ -1,24 +1,30 @@
package com.mes.service;
import com.mes.common.PlcTools.MockS7PLCtwo;
import com.mes.entity.DownGlassInfo;
import com.mes.entity.DownStorageCageDetails;
import com.mes.entity.DownWorkstation;
import com.mes.entity.device.PlcParameterObject;
import com.mes.mapper.DownGlassInfoMapper;
import com.mes.mapper.DownWorkstationMapper;
import com.mes.tools.WebSocketServer;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@Data
@Service
public class PlcService {
    @Autowired
    private DownWorkstationMapper downWorkstationMapper;
    private DownGlassInfo downGlassInfo;
    private DownWorkstation downWorkstation;
    private DownGlassInfoMapper downGlassInfoMapper;
    private DownGlassInfoService downGlassInfoService;
@@ -34,30 +40,100 @@
    String PLCwancheng = plcread.getPlcParameter("A01Position").getValue();// plc完成字
    public void performPlcActions() {
    //当下片任务表状态为1时候将数据插入到下片玻璃信息表
    public void insertdownglassinfo() {
        downWorkstationMapper = WebSocketServer.applicationContext.getBean(DownWorkstationMapper.class);
        downGlassInfoService = WebSocketServer.applicationContext.getBean(DownGlassInfoService.class);
        PlcParameterObject plcmes=PLCAutoMes.PlcMesObject;
        int workstationId = 1;
        int deviceId = 2;
        int newWorkState = 9;
        downWorkstationMapper.updateWorkStateByWorkstationIdAndDeviceId(workstationId, deviceId, newWorkState);
        downGlassInfoMapper = WebSocketServer.applicationContext.getBean(DownGlassInfoMapper.class);
        List<DownGlassInfo> taskdownGlassInf = downGlassInfoMapper.selectunloadingtaskstate();
//
        if (taskdownGlassInf != null && !taskdownGlassInf.isEmpty()) {
        DownGlassInfo downGlassInfo = downGlassInfoService.getDownGlassInfoById(1);
        Boolean[] value4 = { false, true, true, true, true, true, false, false, false, false};
        List<Boolean> booldata2 = new ArrayList<>(Arrays.asList(value4));
        MockS7PLCtwo.getInstance().writebits("DB4.0.0", booldata2);
        List<Boolean> data4= MockS7PLCtwo.getInstance().readbits("DB4.0.0",10);
        System.out.println("读取的word值: " + data4);
        String OutActivate=plcmes.getPlcParameter("OutActivate").getValue();
        byte[] getplcvalues = MockS7PLCtwo.getInstance().readByte("DB101.0", 2);
        System.out.println(Arrays.toString(getplcvalues));
        //System.out.println("读取的通讯word值: " + OutActivate);
        // 其他与 PLC 相关的操作...
            for (DownGlassInfo downGlassInfo : taskdownGlassInf) {
                // 创建新的 DownGlassInfo 对象并设置相关属性
                DownGlassInfo newdownGlassInfo = new DownGlassInfo();
                newdownGlassInfo.setFlowCardId(downGlassInfo.getFlowCardId());
                Integer maxSequence = downGlassInfoMapper.getMaxSequenceByFlowCardId(downGlassInfo.getFlowCardId());
                int sequence = maxSequence != null ? maxSequence + 1 : 1; // 初始化顺序字段值
                newdownGlassInfo.setWidth(downGlassInfo.getWidth());
                newdownGlassInfo.setHeight(downGlassInfo.getHeight());
                newdownGlassInfo.setThickness(downGlassInfo.getThickness());
                newdownGlassInfo.setFilmsid(downGlassInfo.getFilmsid());
                newdownGlassInfo.setSequence(sequence); // 设置顺序字段值
                // 插入数据到下片玻璃信息表
                downGlassInfoMapper.insert(newdownGlassInfo);
                //插入数据到机械手任务表
                downWorkstationMapper.insertdownWorkstationtask(newdownGlassInfo);
                //更新任务表状态为0
                downGlassInfoMapper.updateTaskStateToZero(downGlassInfo.getFlowCardId());
                sequence++; // 递增顺序字段值
            }
        }
    }
    //当机械手任务表中状态为1,工位表流程卡绑定了架子 更新已经落架数量,并且把下片任务表的对应记录删掉
    public void down_workstation(){
        //downWorkstationMapper = WebSocketServer.applicationContext.getBean(DownWorkstationMapper.class);
        //downGlassInfoMapper = WebSocketServer.applicationContext.getBean(DownGlassInfoMapper.class);
        try {
            List<DownWorkstation> taskdownWorkstation = downWorkstationMapper.selectdownWorkstationstate();
            if (taskdownWorkstation != null && !taskdownWorkstation.isEmpty()) {
                //查询下片工位表中是否绑定了架子是否绑定了流程卡号,如果已经绑定则更新已落架数量,并且删除下片任务表中的记录
                for (DownWorkstation downWorkstation : taskdownWorkstation) {
                    downWorkstationMapper.update_racks_number(downWorkstation.getFlowCardId(),6 );
                    downGlassInfoMapper.deletetask(downWorkstation.getFlowCardId());
                }
            }
        } catch (Exception e) {
            // 打印异常信息
            e.printStackTrace();
            // 或者可以进行其他异常处理,比如记录日志或者返回特定的错误信息
        }
    }
    //绑定流程卡号架子
    public void bindingshelf(DownWorkstation downWorkstation){
        String FlowCardId=downWorkstation.getFlowCardId();
        int WorkstationId=downWorkstation.getWorkstationId();
    }
}
UnLoadGlassModule/src/main/java/com/mes/service/Plchome.java
@@ -14,6 +14,8 @@
        this.plcServiceSupplier = () -> WebSocketServer.applicationContext.getBean(PlcService.class);
    }
    @Override
    public void run() {
        while (!Thread.currentThread().isInterrupted()) {
@@ -21,7 +23,18 @@
                i++;
                Thread.sleep(100);
                PlcService plcService = plcServiceSupplier.get();
                plcService.performPlcActions();
               // plcService.performPlcActions();
                //plcService.unloadpush();
                //当下片任务表状态为1时候将数据插入到下片玻璃信息表
                plcService.insertdownglassinfo();
                //当机械手任务表中状态为1 更新已经落架数量,并且把下片任务表的那条记录删掉 工位表流程卡绑定了架子
                plcService.down_workstation();
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                e.printStackTrace();