Merge branch 'master' of http://10.153.19.25:10101/r/HangZhouMes
19个文件已修改
14 文件已重命名
7个文件已添加
115个文件已删除
New file |
| | |
| | | ________ ________ ___ _____________ ____ |
| | | `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 // |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | "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", |
| | |
| | | } |
| | | ] |
| | | }, |
| | | //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', |
| | |
| | | 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', |
| | |
| | | ] |
| | | }, |
| | | { |
| | | /*----------- 采购订单 ----------------*/ |
| | | 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' |
| | | } |
| | | ] |
| | | }, |
| | |
| | | |
| | | |
| | | var serverPort = "/ws"; // webSocket连接端口 |
| | | var wsuri = "ws://127.0.0.1:12345/ws"; |
| | | var wsuri = "ws://localhost:8081/mesModuleTools"; |
| | | |
| | | function createWebSocket(callback) { |
| | | |
File was renamed from UI-Project/src/views/mm/caching/caching.vue |
| | |
| | | long: '1005', |
| | | wide: '183.6', |
| | | thick: '1991', |
| | | type: '待识别', |
| | | type: '1200', |
| | | typea: '1', |
| | | }, |
| | | { |
| | |
| | | wide: '183', |
| | | thick: '191', |
| | | typea: '1', |
| | | type: '待识别' |
| | | type: '1200' |
| | | }, |
| | | { |
| | | id: '2', |
| | |
| | | wide: '183', |
| | | thick: '191', |
| | | typea: '1', |
| | | type: '待识别' |
| | | type: '1200' |
| | | }, |
| | | { |
| | | id: '2', |
| | |
| | | wide: '183', |
| | | thick: '191', |
| | | typea: '1', |
| | | type: '待识别' |
| | | type: '1200' |
| | | }, |
| | | { |
| | | id: '2', |
| | |
| | | |
| | | </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> |
| | |
| | | margin-left: 28%; |
| | | } |
| | | #awatch{ |
| | | height: 450px; |
| | | height: 460px; |
| | | /* margin-top: -60px; */ |
| | | } |
| | | </style> |
| | |
| | | |
| | | 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> |
New file |
| | |
| | | <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> |
New file |
| | |
| | | <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> |
New file |
| | |
| | | <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> |
File was renamed from UI-Project/src/views/sd/returns/SelectReturns.vue |
| | |
| | | <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> |
File was renamed from UI-Project/src/views/sd/returns/Returns.vue |
| | |
| | | <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="状态" |
| | |
| | | </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> |
| | | |
| | |
| | | </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> |
| | |
| | | <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> |
| | |
| | | </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> |
| | |
| | | <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> |
File was renamed from UI-Project/src/views/mm/slicecage/slicecage.vue |
| | |
| | | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | </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="请确认玻璃信息" > |
| | |
| | | </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 |
| | |
| | | /> |
| | | </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> |
New file |
| | |
| | | <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> |
| | |
| | | <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"> |
| | |
| | | :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)" |
| | |
| | | </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' } } |
| | | ] |
| | | }; |
| | | }, |
| | |
| | | } 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> |
| | |
| | | <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> |
| | |
| | | <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"> |
| | |
| | | :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)" |
| | |
| | | </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' } } |
| | | ] |
| | | }; |
| | | }, |
| | |
| | | } 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> |
| | |
| | | <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> |
| | |
| | | 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 = [ |
| | | { |
| | |
| | | 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 = () => { |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | } |
| | | #main-body{ |
| | | margin-top: -20px; |
| | | margin-left: 300px; |
| | | } |
| | | #main-bodya{ |
| | | margin-top: -10px; |
| | | margin-left: 100px; |
| | | margin-left: 450px; |
| | | } |
| | | </style> |
New file |
| | |
| | | <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> |
| | |
| | | #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
|
| | |
| | | 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; |
| | |
| | | // new PlcHold().start(); |
| | | new PLCAutoMes().start(); |
| | | |
| | | // new Plchome().start(); |
| | | new Plchome().start(); |
| | | // new PlcLayout().start(); |
| | | // new Plcalarm().start(); |
| | | |
| | |
| | | return downGlassInfoService.getDownGlassInfoById(id);
|
| | | }
|
| | |
|
| | |
|
| | |
|
| | | // @GetMapping("/messages")
|
| | | // public String getMessages() throws IOException, TimeoutException {
|
| | | // List<String> messages = new ArrayList<>();
|
| | |
| | | // }
|
| | |
|
| | |
|
| | |
|
| | |
|
| | | }
|
| | |
| | | private Double width; // 宽
|
| | | private Double height; // 高
|
| | | private Double thickness; // 厚度
|
| | | private String filmsid;//膜系
|
| | |
|
| | |
|
| | | } |
| | |
| | | private Integer deviceId; // 设备id
|
| | | private Integer enableState; // 启用状态
|
| | | private Integer workState; // 工作状态
|
| | | private Integer racks_number; // 已落架数量
|
| | | private Integer total_quantity; // 总数量
|
| | |
|
| | | } |
| | |
| | | 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);
|
| | | }
|
| | |
| | | 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;
|
| | |
| | | //根据设备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);
|
| | |
|
| | |
|
| | |
|
| | |
| | | public DownGlassInfo getDownGlassInfoById(Integer id) {
|
| | | return downGlassInfoMapper.selectById(id);
|
| | | }
|
| | |
|
| | |
|
| | | }
|
| | |
| | | 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;
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
| | | 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();
|
| | |
|
| | |
|
| | |
|
| | | }
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | | }
|
| | |
| | | this.plcServiceSupplier = () -> WebSocketServer.applicationContext.getBean(PlcService.class);
|
| | | }
|
| | |
|
| | |
|
| | |
|
| | | @Override
|
| | | public void run() {
|
| | | while (!Thread.currentThread().isInterrupted()) {
|
| | |
| | | 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();
|