| | |
| | | * a base page that does not have permission requirements |
| | | * all roles can be accessed |
| | | */ |
| | | // 公用路由 |
| | | export const commonRoutes = [ |
| | | /* |
| | | * 看板部分路由 |
| | |
| | | } |
| | | // { path: '*', redirect: '/404', hidden: true } |
| | | ] |
| | | // 未上云路由模块 |
| | | export const asyncRoutes = [ |
| | | // { |
| | | // path: '/gtt', |
| | | // component: Layout, |
| | | // redirect: '/gtt/back', |
| | | // name: '基础设置', |
| | | // code: '1001', |
| | | // meta: { code: '1001', title: '基础设置', icon: 'tree' }, |
| | | // alwaysShow: true, // 当children只有一个时,也显示父菜单 |
| | | // children: [{ |
| | | // path: 'back', |
| | | // name: 'YYQDCancel', |
| | | // code: '1011', |
| | | // component: () => import('@/views/gantt_back/gantt_back'), |
| | | // meta: { code: '1011', title: '用户清单', icon: '', keepAlive: true } |
| | | // }, { |
| | | // path: 'zdpc2', |
| | | // name: 'YYQDCancel', |
| | | // code: '1012', |
| | | // component: () => import('@/views/gantt_back/zdpc2'), |
| | | // meta: { code: '1012', title: '自动排程2', icon: '', keepAlive: true } |
| | | // }] |
| | | // }, |
| | | { |
| | | path: '/jcsz', |
| | | component: Layout, |
| | | redirect: '/jcsz/zzjg', |
| | | name: '基础设置', |
| | | code: '1001', |
| | | meta: { code: '1001', title: '基础设置', icon: 'tree2' }, |
| | | alwaysShow: true, // 当children只有一个时,也显示父菜单 |
| | | children: [ |
| | | { |
| | | path: 'zzjg', |
| | | name: 'ZZJGCancel', |
| | | code: '1010', |
| | | component: () => import('@/views/jcsz/zzjg'), |
| | | meta: { code: '1010', title: '组织架构', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'yhqd', |
| | | name: 'YYQDCancel', |
| | | code: '1011', |
| | | component: () => import('@/views/jcsz/yhqd'), |
| | | meta: { code: '1011', title: '用户清单', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'jsqd', |
| | | name: 'JSQDCancel', |
| | | code: '1012', |
| | | component: () => import('@/views/jcsz/jsqd'), |
| | | meta: { code: '1012', title: '角色清单', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'wldw', |
| | | name: 'WLDWCancel', |
| | | code: '1013', |
| | | component: () => import('@/views/jcsz/wldw'), |
| | | meta: { code: '1013', title: '往来单位', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'adsz', |
| | | name: 'ADZZCancel', |
| | | code: '1014', |
| | | component: () => import('@/views/jcsz/adsz'), |
| | | meta: { code: '1014', title: '安灯设置', icon: '', keepAlive: true } |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | path: '/sbgl', |
| | | component: Layout, |
| | | redirect: '/sbgl/sblx', |
| | | name: '设备管理', |
| | | code: '1002', |
| | | meta: { code: '1002', title: '设备管理', icon: 'example' }, |
| | | alwaysShow: true, |
| | | children: [ |
| | | { |
| | | path: 'sblx', |
| | | name: 'SBLXCancel', |
| | | code: '1020', |
| | | component: () => import('@/views/sbgl/sblx'), |
| | | meta: { code: '1020', title: '设备类型', icon: '', keepAlive: true } |
| | | }, |
| | | { |
| | | path: 'wxjl', |
| | | code: '1029Cancel', |
| | | name: 'WXJL', |
| | | component: () => import('@/views/sbgl/wxjl'), |
| | | meta: { code: '1029', title: '维修记录', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'sbz', |
| | | name: 'SBZCancel', |
| | | code: '1021', |
| | | component: () => import('@/views/sbgl/sbz'), |
| | | meta: { code: '1021', title: '设备组', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'sbqd', |
| | | name: 'sbqdCancel', |
| | | code: '1022', |
| | | component: () => import('@/views/sbgl/sbqd'), |
| | | meta: { code: '1022', title: '设备清单', icon: '', keepAlive: true } |
| | | }, |
| | | { |
| | | path: 'djbz', |
| | | name: 'DJBZCancel', |
| | | code: '1023', |
| | | component: () => import('@/views/sbgl/djbz'), |
| | | meta: { code: '1023', title: '点检标准', icon: '', keepAlive: true } |
| | | }, |
| | | { |
| | | path: 'djbw', |
| | | name: 'DJBWCancel', |
| | | code: '1024', |
| | | component: () => import('@/views/sbgl/djbw'), |
| | | meta: { code: '1024', title: '点检部位', icon: '', keepAlive: true } |
| | | }, |
| | | { |
| | | path: 'bybz', |
| | | name: 'BYBZCancel', |
| | | code: '1025', |
| | | component: () => import('@/views/sbgl/bybz'), |
| | | meta: { code: '1025', title: '保养标准', icon: '', keepAlive: true } |
| | | }, |
| | | { |
| | | path: 'bybw', |
| | | name: 'BYBWCancel', |
| | | code: '1026', |
| | | component: () => import('@/views/sbgl/bybw'), |
| | | meta: { code: '1026', title: '保养部位', icon: '', keepAlive: true } |
| | | }, |
| | | { |
| | | path: 'djjl', |
| | | name: 'DJJLCancel', |
| | | code: '1027', |
| | | component: () => import('@/views/sbgl/djjl'), |
| | | meta: { code: '1027', title: '点检记录', icon: '', keepAlive: true } |
| | | }, |
| | | { |
| | | path: 'byjl', |
| | | name: 'BYJLCancel', |
| | | code: '1028', |
| | | component: () => import('@/views/sbgl/byjl'), |
| | | meta: { code: '1028', title: '保养记录', icon: '', keepAlive: true } |
| | | }, |
| | | { |
| | | path: 'wxjl', |
| | | name: 'WXJLCancel', |
| | | code: '1029', |
| | | component: () => import('@/views/sbgl/wxjl'), |
| | | meta: { code: '1029', title: '设备维修记录', icon: '', keepAlive: true } |
| | | }, |
| | | { |
| | | path: 'swsqjl', |
| | | name: 'WXSQJLCancel', |
| | | code: '1019', |
| | | component: () => import('@/views/sbgl/swsqjl'), |
| | | meta: { code: '1019', title: '设备申请维修记录', icon: '', keepAlive: true } |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | path: '/gzgl', |
| | | component: Layout, |
| | | redirect: '/gzgl/gzlx', |
| | | name: '工装管理', |
| | | code: '1003', |
| | | meta: { code: '1003', title: '工装管理', icon: 'component' }, |
| | | alwaysShow: true, |
| | | children: [ |
| | | { |
| | | path: 'gzlx', |
| | | name: 'GZLXCancel', |
| | | code: '1030', |
| | | component: () => import('@/views/gzgl/gzlx'), |
| | | meta: { code: '1030', title: '工装类型', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'sjxj', |
| | | name: 'SJXJCancel', |
| | | code: '1039', |
| | | component: () => import('@/views/gzgl/sjxj'), |
| | | meta: { code: '1039', title: '上机下机', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'ckrk', |
| | | name: 'CKRKCancel', |
| | | code: '1040', |
| | | component: () => import('@/views/gzgl/ckrk'), |
| | | meta: { code: '1040', title: '出库入库', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'gzqd', |
| | | name: 'GZQDCancel', |
| | | code: '1031', |
| | | component: () => import('@/views/gzgl/gzqd'), |
| | | meta: { code: '1031', title: '工装清单', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'djbz', |
| | | name: 'DJBZCancel', |
| | | code: '1032', |
| | | component: () => import('@/views/gzgl/djbz'), |
| | | meta: { code: '1032', title: '点检标准', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'djbw', |
| | | name: 'DJBWCancel', |
| | | code: '1033', |
| | | component: () => import('@/views/gzgl/djbw'), |
| | | meta: { code: '1033', title: '点检部位', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'bybz', |
| | | name: 'BYBZCancel', |
| | | code: '1034', |
| | | component: () => import('@/views/gzgl/bybz'), |
| | | meta: { code: '1034', title: '保养标准', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'bybw', |
| | | name: 'BYBWCancel', |
| | | code: '1035', |
| | | component: () => import('@/views/gzgl/bybw'), |
| | | meta: { code: '1035', title: '保养部位', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'djjl', |
| | | name: 'DJJLCancel', |
| | | code: '1036', |
| | | component: () => import('@/views/gzgl/djjl'), |
| | | meta: { code: '1036', title: '点检记录', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'byjl', |
| | | name: 'BYJLCancel', |
| | | code: '1037', |
| | | component: () => import('@/views/gzgl/byjl'), |
| | | meta: { code: '1037', title: '保养记录', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'gzwx', |
| | | name: 'GZWXCancel', |
| | | code: '1038', |
| | | component: () => import('@/views/gzgl/gzwx'), |
| | | meta: { code: '1038', title: '工装维修', icon: '', keepAlive: true } |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | path: '/wlgl', |
| | | component: Layout, |
| | | redirect: '/wlgl/ckdy', |
| | | name: '物料管理', |
| | | code: '1004', |
| | | meta: { code: '1004', title: '物料管理', icon: 'table' }, |
| | | alwaysShow: true, |
| | | children: [ |
| | | { |
| | | path: 'ckdy', |
| | | name: 'CKDYCancel', |
| | | code: '1050', |
| | | component: () => import('@/views/wlgl/ckdy'), |
| | | meta: { code: '1050', title: '仓库定义', icon: '', keepAlive: true } |
| | | }, |
| | | { |
| | | path: 'kwdy', |
| | | name: 'KWDYCancel', |
| | | code: '1051', |
| | | component: () => import('@/views/wlgl/kwdy'), |
| | | meta: { code: '1051', title: '库位定义', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'rqlx', |
| | | name: 'RYLXCancel', |
| | | code: '1052', |
| | | component: () => import('@/views/wlgl/rqlx'), |
| | | meta: { code: '1052', title: '容器类型', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'rqqd', |
| | | name: 'RQQDCancel', |
| | | code: '1053', |
| | | component: () => import('@/views/wlgl/rqqd'), |
| | | meta: { code: '1053', title: '容器清单', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'crkjl', |
| | | name: 'CRKJLCancel', |
| | | code: '1054', |
| | | component: () => import('@/views/wlgl/crkjl'), |
| | | meta: { code: '1054', title: '出入库记录', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'kccx', |
| | | name: 'KCCXCancel', |
| | | code: '1055', |
| | | component: () => import('@/views/wlgl/kccx'), |
| | | meta: { code: '1055', title: '库存查询', icon: '', keepAlive: true } |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | path: '/zzmx', |
| | | component: Layout, |
| | | redirect: '/zzmx/gylx', |
| | | name: '制造模型', |
| | | code: '1005', |
| | | meta: { code: '1005', title: '制造模型', icon: 'icu' }, |
| | | alwaysShow: true, |
| | | children: [ |
| | | { |
| | | path: 'wllx', |
| | | name: 'WLLXCancel', |
| | | code: '1060', |
| | | component: () => import('@/views/zzmx/wllx'), |
| | | meta: { code: '1060', title: '物料类型', icon: '', keepAlive: true } |
| | | }, |
| | | { |
| | | path: 'chda', |
| | | name: 'CHDACancel', |
| | | code: '1061', |
| | | component: () => import('@/views/zzmx/chda'), |
| | | meta: { code: '1061', title: '存货档案', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'wlqd', |
| | | name: 'WLQDCancel', |
| | | code: '1062', |
| | | component: () => import('@/views/zzmx/wlqd'), |
| | | meta: { code: '1062', title: '物料清单', icon: '', keepAlive: true } |
| | | }, |
| | | { |
| | | path: 'gylx', |
| | | name: 'GYLXCancel', |
| | | code: '1063', |
| | | component: () => import('@/views/zzmx/gylx'), |
| | | meta: { code: '1063', title: '工艺路线', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'gxdy', |
| | | name: 'GXDYCancel', |
| | | code: '1064', |
| | | component: () => import('@/views/zzmx/gxdy'), |
| | | meta: { code: '1064', title: '工序定义', icon: '', keepAlive: true } |
| | | }, |
| | | { |
| | | path: 'jpgj', |
| | | name: 'JPGJCancel', |
| | | code: '1065', |
| | | component: () => import('@/views/zzmx/jpgj'), |
| | | meta: { code: '1065', title: '节拍工价', icon: '', keepAlive: true } |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | path: '/scgl', |
| | | component: Layout, |
| | | redirect: '/scgl/scdd', |
| | | name: '生产管理', |
| | | code: '1006', |
| | | meta: { code: '1006', title: '生产管理', icon: 'production' }, |
| | | alwaysShow: true, |
| | | children: [ |
| | | { |
| | | path: 'scdd', |
| | | name: 'SCDDCancel', |
| | | code: '1070', |
| | | component: () => import('@/views/scgl/scdd'), |
| | | meta: { code: '1070', title: 'ERP生产订单', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'gd', |
| | | name: 'GDCancel', |
| | | code: '1071', |
| | | component: () => import('@/views/scgl/gd'), |
| | | meta: { code: '1071', title: 'MES工单', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'gdpg', |
| | | name: 'GDPDCancel', |
| | | code: '1072', |
| | | component: () => import('@/views/scgl/gdpg'), |
| | | meta: { code: '1072', title: '工单派工', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'sckbg', |
| | | name: 'SCKBGCancel', |
| | | code: '1073', |
| | | component: () => import('@/views/scgl/sckbg'), |
| | | meta: { code: '1073', title: '生产开报工', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'gdplgb', |
| | | name: 'GDPLGBCancel', |
| | | code: '1074', |
| | | component: () => import('@/views/scgl/gdplgb'), |
| | | meta: { code: '1074', title: 'MES工单批量关闭', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'cngh', |
| | | name: 'CNGHCancel', |
| | | code: '1075', |
| | | component: () => import('@/views/scgl/cngh'), |
| | | meta: { code: '1075', title: '产能规划', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'zdpc', |
| | | name: 'ZDPCCancel', |
| | | code: '1076', |
| | | component: () => import('@/views/scgl/zdpc'), |
| | | meta: { code: '1076', title: '自动排程', icon: '', keepAlive: true } |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | path: '/zlgl', |
| | | component: Layout, |
| | | redirect: '/zlgl/zjbz', |
| | | name: '质量管理', |
| | | code: '1007', |
| | | meta: { code: '1007', title: '质量管理', icon: 'quality' }, |
| | | alwaysShow: true, |
| | | children: [ |
| | | { |
| | | path: 'zjbz', |
| | | name: 'ZJBZCancel', |
| | | code: '1080', |
| | | component: () => import('@/views/zlgl/zjbz'), |
| | | meta: { code: '1080', title: '质检标准', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'qxdy', |
| | | name: 'QXDYCancel', |
| | | code: '1081', |
| | | component: () => import('@/views/zlgl/qxdy'), |
| | | meta: { code: '1081', title: '缺陷定义', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'gxjy', |
| | | name: 'GXDYCancel', |
| | | code: '1082', |
| | | component: () => import('@/views/zlgl/gxjy'), |
| | | meta: { code: '1082', title: '工序检验', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'wljy', |
| | | name: 'WLJYCancel', |
| | | code: '1083', |
| | | component: () => import('@/views/zlgl/wljy'), |
| | | meta: { code: '1083', title: '物流检验', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'qxsj', |
| | | name: 'QXSJCancel', |
| | | code: '1084', |
| | | component: () => import('@/views/zlgl/qxsj'), |
| | | meta: { code: '1084', title: '缺陷统计', icon: '', keepAlive: true } |
| | | }, |
| | | { |
| | | path: 'gxjybz', |
| | | name: 'QXJYBZCancel', |
| | | code: '1085', |
| | | component: () => import('@/views/zlgl/gxjybz'), |
| | | meta: { code: '1085', title: '工序检验标准', icon: '', keepAlive: true } |
| | | }, |
| | | { |
| | | path: 'gxjyxm', |
| | | name: 'GXJYXMCancel', |
| | | code: '1086', |
| | | component: () => import('@/views/zlgl/gxjyxm'), |
| | | meta: { code: '1086', title: '工序检验项目', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'gxjyjl', |
| | | name: 'GXJYJLCancel', |
| | | code: '1087', |
| | | component: () => import('@/views/zlgl/gxjyjl'), |
| | | meta: { code: '1087', title: '工序检验记录', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'zjfa', |
| | | name: 'ZJFACancel', |
| | | code: '1088', |
| | | component: () => import('@/views/zlgl/zjfa'), |
| | | meta: { code: '1088', title: '质检方案', icon: '', keepAlive: true } |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | path: '/bbgl', |
| | | component: Layout, |
| | | redirect: '/bbgl/sczxbb', |
| | | name: '报表管理', |
| | | code: '1008', |
| | | meta: { code: '1008', title: '报表管理', icon: 'bbgl' }, |
| | | alwaysShow: true, |
| | | children: [ |
| | | { |
| | | path: 'bzgztj', |
| | | name: 'BZGZTJCancel', |
| | | code: '1090', |
| | | component: () => import('@/views/bbgl/bzgz'), |
| | | meta: { code: '1090', title: '班组工资统计', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'rygz', |
| | | name: 'RYGZCancel', |
| | | code: '1091', |
| | | component: () => import('@/views/bbgl/rygz'), |
| | | meta: { code: '1091', title: '人员工资', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'wwgx', |
| | | name: 'WWGXCancel', |
| | | code: '1092', |
| | | component: () => import('@/views/bbgl/wwgx'), |
| | | meta: { code: '1092', title: '委外工序', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'blmx', |
| | | name: 'BLMXJCancel', |
| | | code: '1093', |
| | | component: () => import('@/views/bbgl/blmx'), |
| | | meta: { code: '1093', title: '不良明细', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'pzyc', |
| | | name: 'PZYCJCancel', |
| | | code: '1094', |
| | | component: () => import('@/views/bbgl/pzyc'), |
| | | meta: { code: '1094', title: '品质异常', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'wxmx', |
| | | name: 'WXMXJCancel', |
| | | code: '1095', |
| | | component: () => import('@/views/bbgl/wxmx'), |
| | | meta: { code: '1095', title: '维修明细', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'adbb', |
| | | name: 'ADBBJCancel', |
| | | code: '1096', |
| | | component: () => import('@/views/bbgl/adbb'), |
| | | meta: { code: '1096', title: '安灯报表', icon: '', keepAlive: true } |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | path: '/xtsz', |
| | | component: Layout, |
| | | redirect: '/xtsz/bmgz', |
| | | name: '系统设置', |
| | | code: '1009', |
| | | meta: { code: '1009', title: '系统设置', icon: 'xtsz' }, |
| | | alwaysShow: true, |
| | | children: [ |
| | | { |
| | | path: 'bmgz', |
| | | name: 'BMGZCancel', |
| | | code: '1101', |
| | | component: () => import('@/views/xtsz/bmgz'), |
| | | meta: { code: '1101', title: '编码规则', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'mmxg', |
| | | name: 'MMXGCancel', |
| | | code: '1102', |
| | | component: () => import('@/views/xtsz/mmxg'), |
| | | meta: { code: '1102', title: '密码修改', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'xtrz', |
| | | name: 'XTRZCancel', |
| | | code: '1103', |
| | | component: () => import('@/views/xtsz/xtrz'), |
| | | meta: { code: '1103', title: '系统日志', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'sc', |
| | | name: 'SCCancel', |
| | | code: '1104', |
| | | component: () => import('@/views/xtsz/sc'), |
| | | meta: { code: '1104', title: 'SOP上传', icon: '', keepAlive: true } |
| | | }, { |
| | | path: 'cjgg', |
| | | name: 'CJGGancel', |
| | | code: '1105', |
| | | component: () => import('@/views/xtsz/cjgg'), |
| | | meta: { code: '1105', title: '车间公告', icon: '', keepAlive: true } |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | path: '/cggl', |
| | | component: Layout, |
| | | redirect: '/cggl/cgdd', |
| | | name: '采购管理', |
| | | code: '1000', |
| | | meta: { code: '1000', title: '采购管理', icon: 'cggl' }, |
| | | alwaysShow: true, |
| | | children: [ |
| | | { |
| | | path: 'cgdd', |
| | | name: 'CGDDCancel', |
| | | code: '1201', |
| | | component: () => import('@/views/cggl/cgdd'), |
| | | meta: { code: '1201', title: '采购订单', icon: '', keepAlive: true } |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | // 上云路由模块 |
| | | export const asyncRoutesCloud = [ |
| | | // 1.系统管理(基础设置类) |
| | | { |
| | | path: '/systemSetting', |
| | |
| | | ] |
| | | }, |
| | | |
| | | |
| | | { |
| | | path: '/kanbanManager', |
| | | component: Layout, |
| | |
| | | name: 'ckglCancel', |
| | | component: () => import('@/views/kb/cjsc'), |
| | | meta: { title: '车间生产', icon: '', keepAlive: true } |
| | | }, |
| | | |
| | | } |
| | | |
| | | ] |
| | | } |
| | |
| | | import { asyncRoutes, commonRoutes } from '@/router' |
| | | import { asyncRoutes, asyncRoutesCloud, commonRoutes } from '@/router' |
| | | import Layout from '@/layout' |
| | | import { getCookie } from '@/utils/auth' |
| | | |
| | | |
| | | // 判断是否有权限 |
| | | function hasPermission(roles, route) { |
| | |
| | | const actions = { |
| | | generateRoutes({ commit }, menu) { |
| | | return new Promise(resolve => { |
| | | // const newRoutes = getAsyncRoutes(asyncRoutes, menu) |
| | | // const newRoutes = asyncRoutes |
| | | |
| | | let newRoutes |
| | | if (getCookie('cloud')) { |
| | | const arr = menu.map(i => i.code) |
| | | newRoutes = asyncRoutes.filter(i => { |
| | | newRoutes = asyncRoutesCloud.filter(i => { // 上云路由 |
| | | if (arr.includes(i.code)) { |
| | | return i |
| | | } |
| | | }) |
| | | newRoutes.push({ path: '*', redirect: '/404', hidden: true }) |
| | | } else { |
| | | newRoutes = getAsyncRoutes(asyncRoutes, menu) |
| | | newRoutes = getAsyncRoutes(asyncRoutes, menu) // 未上云路由 |
| | | } |
| | | |
| | | commit('SET_ROUTES', newRoutes) |
| | |
| | | } |
| | | }, |
| | | yAxis: { |
| | | max: 1, |
| | | max: 10, |
| | | min: 0, |
| | | interval: 0.2, |
| | | interval: 2, |
| | | splitLine: { |
| | | show: false |
| | | }, |
| | |
| | | :data="tableData" |
| | | :height="isExpandForm?(tableHeight-70):(tableHeight-30)+'px'" |
| | | border |
| | | :summary-method="getSummaries" |
| | | show-summary |
| | | |
| | | :row-class-name="tableRowClassName" |
| | | :style="{width: 100+'%',height:isExpandForm?(tableHeight-70):(tableHeight-30)+'px',}" |
| | | highlight-current-row |
| | |
| | | :cell-style="this.$cellStyle" |
| | | @sort-change="sortChange" |
| | | > |
| | | <!-- :summary-method="getSummaries"--> |
| | | <!-- show-summary--> |
| | | <el-table-column |
| | | prop="RowNum" |
| | | width="50" |
| | |
| | | :data="tableData2" |
| | | :height="isExpandForm?(tableHeight-70):(tableHeight-30)+'px'" |
| | | border |
| | | :summary-method="getSummaries" |
| | | show-summary |
| | | |
| | | :row-class-name="tableRowClassName" |
| | | :style="{width: 100+'%',height:isExpandForm?(tableHeight-70):(tableHeight-30)+'px',}" |
| | | highlight-current-row |
| | |
| | | :cell-style="this.$cellStyle" |
| | | @sort-change="sortChange" |
| | | > |
| | | <!-- :summary-method="getSummaries"--> |
| | | <!-- show-summary--> |
| | | <el-table-column |
| | | prop="RowNum" |
| | | width="50" |
| | |
| | | :data="tableData" |
| | | :height="isExpandForm?(tableHeight-80):(tableHeight-40)+'px'" |
| | | border |
| | | :summary-method="getSummaries" |
| | | show-summary |
| | | |
| | | :row-class-name="tableRowClassName" |
| | | :style="{width: 100+'%',height:isExpandForm?(tableHeight-80):(tableHeight-40)+'px',}" |
| | | highlight-current-row |
| | |
| | | :cell-style="this.$cellStyle" |
| | | @sort-change="sortChange" |
| | | > |
| | | <!-- :summary-method="getSummaries"--> |
| | | <!-- show-summary--> |
| | | <el-table-column |
| | | prop="RowNum" |
| | | width="50" |
| | |
| | | :data="tableData2" |
| | | :height="isExpandForm?(tableHeight-80):(tableHeight-40)+'px'" |
| | | border |
| | | :summary-method="getSummaries" |
| | | show-summary |
| | | |
| | | :row-class-name="tableRowClassName" |
| | | :style="{width: 100+'%',height:isExpandForm?(tableHeight-80):(tableHeight-40)+'px',}" |
| | | highlight-current-row |
| | |
| | | :cell-style="this.$cellStyle" |
| | | @sort-change="sortChange" |
| | | > |
| | | <!-- :summary-method="getSummaries"--> |
| | | <!-- show-summary--> |
| | | <el-table-column |
| | | prop="RowNum" |
| | | width="50" |
| | |
| | | <div class="kb_dashboard"> |
| | | |
| | | <!-- 星空背景--> |
| | | <div ref="starsRef" class="stars"> |
| | | <div v-for="(item, index) in starsCount" :key="index" class="star" /> |
| | | </div> |
| | | <!-- <div ref="starsRef" class="stars">--> |
| | | <!-- <div v-for="(item, index) in starsCount" :key="index" class="star" />--> |
| | | <!-- </div>--> |
| | | |
| | | <div class="kb_header"> |
| | | <div class="flex_c_c kb_header_text"> |
| | |
| | | <el-table-column |
| | | prop="PurchaseOrder" |
| | | label="采购订单" |
| | | width="225" |
| | | width="195" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div class="ellipsis">{{ row.PurchaseOrder }}</div> |
| | |
| | | <el-table-column |
| | | prop="suppername" |
| | | label="供应商" |
| | | width="183" |
| | | width="173" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.suppername" class="ellipsis">{{ row.suppername }}</div> |
| | |
| | | <el-table-column |
| | | prop="partname" |
| | | label="产品名称" |
| | | width="215" |
| | | width="185" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.partname" class="ellipsis">{{ row.partname }}</div> |
| | | <div v-else /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="partspec" |
| | | label="产品规格" |
| | | width="115" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.partspec" class="ellipsis">{{ row.partspec }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- <el-table-column--> |
| | |
| | | <el-table-column |
| | | prop="quantity" |
| | | label="订单数量" |
| | | width="114" |
| | | width="104" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.quantity">{{ parseFloat(row.quantity) }}</div> |
| | |
| | | <el-table-column |
| | | prop="quantity1" |
| | | label="已收数量" |
| | | width="114" |
| | | width="104" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <!-- <div v-if="row.quantity">{{ Math.floor(row.quantity*0.67) }}</div>--> |
| | | <div v-if="row.quantity">{{ Math.round( row.quantity*0.67) }}</div> |
| | | <div v-if="new Date(row.voucherdate.substring(0,10)).getTime()<new Date('2023-05-01').getTime()"> |
| | | {{parseFloat(row.quantity)}} |
| | | </div> |
| | | <div v-else>0</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="未收数量" |
| | | width="114" |
| | | width="104" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <!-- <div v-if="row.quantity- row.quantity1">{{ parseFloat(row.quantity - row.quantity1) }}</div>--> |
| | | <div v-if="row.quantity">{{ Math.ceil(row.quantity*0.33) }}</div> |
| | | <div v-else>0</div> |
| | | <div v-if="new Date(row.voucherdate.substring(0,10)).getTime()<new Date('2023-05-01').getTime()"> |
| | | 0 |
| | | </div> |
| | | <div v-else>{{parseFloat(row.quantity - row.quantity1)}}</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="acceptDate" |
| | | label="预计交期" |
| | | width="135" |
| | | width="125" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.acceptDate">{{ row.acceptDate.substring(0, 10) }}</div> |
| | |
| | | <el-table-column |
| | | prop="warning" |
| | | label="延期天数" |
| | | width="144" |
| | | width="139" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="parseFloat(row.warning)<0" style="color: red">{{ |
| | |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="suppername" |
| | | width="293" |
| | | width="292" |
| | | label="供应商名称" |
| | | > |
| | | <template slot-scope="{row}"> |
| | |
| | | this.getPurchaseLeftBottom() |
| | | this.getPurchaseRight() |
| | | |
| | | this.setStarsRef() |
| | | // this.setStarsRef() |
| | | }, |
| | | |
| | | methods: { |
| | | fun_date(aa) { |
| | | const date1 = new Date() |
| | | const time1 = date1.getFullYear() + '-' + (date1.getMonth() + 1) + '-' + date1.getDate()// time1表示当前时间 |
| | | const date2 = new Date(date1) |
| | | date2.setDate(date1.getDate() + aa) |
| | | const time2 = date2.getFullYear() + '-' + (date2.getMonth() + 1).toString().padStart(2, '0') + '-' + date2.getDate().toString().padStart(2, '0') |
| | | return time2 |
| | | }, |
| | | setStarsRef() { |
| | | const starNodes = Array.from(this.$refs.starsRef.children) |
| | | starNodes.forEach(item => { |
| | |
| | | this.purchaseLeftTopData = res.data[0] |
| | | loadEcharts('cgddchart', cgddchart(this.purchaseLeftTopData.ThisMonthPurchaseOrderCont, this.purchaseLeftTopData.ThisMonthPurchaseArrivalOrderCont, this.purchaseLeftTopData.ThisMonthWareHouseOrderCont)) |
| | | }) |
| | | }, 1000 * 6) |
| | | }, 1000 * 15) |
| | | }, |
| | | getPurchaseLeftBottom() { |
| | | PurchaseLeftBottom().then(res => { |
| | | this.tableData = res.data.filter(i => !parseFloat(i.quantity1))// 过滤掉已收数量大于零的值 |
| | | // this.tableData = res.data.filter(i => !parseFloat(i.quantity1))// 过滤掉已收数量大于零的值 |
| | | this.tableData = res.data |
| | | |
| | | // this.number1 = this.tableData.length |
| | | |
| | |
| | | } |
| | | }) |
| | | } |
| | | }, this.tableData.length <= 13 ? 1000 * 3 : 100) |
| | | |
| | | }, this.tableData.length <= 13 ? 1000 * 15 : 100) |
| | | }) |
| | | }, |
| | | getPurchaseRight() { |
| | |
| | | } |
| | | }) |
| | | } |
| | | }, this.tableDataRank.length <= 23 ? 1000 * 3 : 100) |
| | | }, this.tableDataRank.length <= 23 ? 1000 * 15 : 100) |
| | | }) |
| | | }, |
| | | tableRowClassName({ row, rowIndex }) { |
| | |
| | | <div class="kb_dashboard"> |
| | | |
| | | <!-- 星空背景--> |
| | | <div ref="starsRef" class="stars"> |
| | | <div v-for="(item, index) in starsCount" :key="index" class="star"/> |
| | | </div> |
| | | <!-- <div ref="starsRef" class="stars">--> |
| | | <!-- <div v-for="(item, index) in starsCount" :key="index" class="star"/>--> |
| | | <!-- </div>--> |
| | | |
| | | <div class="kb_header"> |
| | | <div class="flex_c_c kb_header_text"> |
| | |
| | | ref="tableDataLeftTopRef" |
| | | :data="tableDataLeftTop" |
| | | class="tableData tableDataCell" |
| | | style="width: 100%;" |
| | | style="width: 100%;overflow: hidden" |
| | | :header-cell-style="headerCellStyle" |
| | | :cell-style="cellStyle" |
| | | height="927" |
| | | height="930" |
| | | > |
| | | <el-table-column |
| | | prop="saleOrderCode" |
| | |
| | | row.saleOrderCode |
| | | }} |
| | | </div> |
| | | <div v-else>/</div> |
| | | <div v-else></div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="partname" |
| | | width="140" |
| | | width="143" |
| | | label="产品名称" |
| | | > |
| | | <template slot-scope="{row}"> |
| | |
| | | <el-table-column |
| | | prop="scjdxxx" |
| | | label="生产进度" |
| | | width="130" |
| | | width="134" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div :id="'progress'+row.RowNum" style="width: 100%;height:30px"/> |
| | |
| | | // 中间表格数据内容 |
| | | this.getCenterTableDataSetInterval() |
| | | |
| | | this.setStarsRef() |
| | | // this.setStarsRef() |
| | | }, |
| | | methods: { |
| | | setStarsRef() { |
| | |
| | | }) |
| | | }) |
| | | }) |
| | | |
| | | |
| | | // WkshpContentData().then(res => { |
| | | // this.tableDataCenterTop = res.data |
| | | // const divData = this.$refs.tableDataLeftCenterRef.bodyWrapper |
| | | // // 拿到元素后,对元素进行定时增加距离顶部距离,实现滚动效果(此配置为每100毫秒移动1像素) |
| | | // const timer = setInterval(() => { |
| | | // // 元素自增距离顶部1像素 |
| | | // divData.scrollTop += 1 |
| | | // // 判断元素是否滚动到底部(可视高度+距离顶部=整个高度) |
| | | // if (divData.clientHeight + divData.scrollTop === divData.scrollHeight) { |
| | | // // 重置table距离顶部距离 |
| | | // divData.scrollTop = 0 |
| | | // WkshpContentData().then(res => { |
| | | // this.tableDataCenterTop = res.data |
| | | // if (this.tableDataCenterTop.length > 20) { |
| | | // clearInterval(timer) |
| | | // this.getCenterTableDataSetInterval() |
| | | // } |
| | | // }) |
| | | // } |
| | | // this.$nextTick(() => { |
| | | // this.tableDataCenterTop.forEach(i => { |
| | | // loadEcharts('progress' + i.RowNum, progress(i.good_qty, i.plan_qty)) |
| | | // }) |
| | | // }) |
| | | // }, this.tableDataCenterTop.length <= 20 ? 1000 * 15 : 10) |
| | | // }) |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | }, |
| | | |
| | | // 获取左上数据并定时刷新 |
| | | getLeftTopTableDataSetInterval() { |
| | | let startValue = 0 // 初始值 |
| | | const scale = 24// 刻度 |
| | | // let startValue = 0 // 初始值 |
| | | // const scale = 24// 刻度 |
| | | // |
| | | // WkshpLineData({ LineCode: '001' }).then(res => { |
| | | // this.tableDataLeftTopTemp = res.data |
| | | // this.tableDataLeftTop = this.tableDataLeftTopTemp.slice(startValue, startValue + scale) |
| | | // |
| | | // const loop = Math.floor(this.tableDataLeftTopTemp.length / scale)// 需要循环的次数 |
| | | // let nowLoop = 0// 当前循环的次数 |
| | | // |
| | | // const timer = setInterval(() => { |
| | | // startValue = startValue + scale |
| | | // this.tableDataLeftTop = this.tableDataLeftTopTemp.slice(startValue, startValue + scale) |
| | | // if (nowLoop === loop) { |
| | | // clearInterval(timer) |
| | | // this.getLeftTopTableDataSetInterval() |
| | | // } |
| | | // nowLoop++ |
| | | // }, 1000 * 10) |
| | | // }) |
| | | |
| | | WkshpLineData({ LineCode: '001' }).then(res => { |
| | | this.tableDataLeftTopTemp = res.data |
| | | this.tableDataLeftTop = this.tableDataLeftTopTemp.slice(startValue, startValue + scale) |
| | | |
| | | const loop = Math.floor(this.tableDataLeftTopTemp.length / scale)// 需要循环的次数 |
| | | let nowLoop = 0// 当前循环的次数 |
| | | |
| | | this.tableDataLeftTop = res.data |
| | | const divData = this.$refs.tableDataLeftTopRef.bodyWrapper |
| | | // 拿到元素后,对元素进行定时增加距离顶部距离,实现滚动效果(此配置为每100毫秒移动1像素) |
| | | const timer = setInterval(() => { |
| | | startValue = startValue + scale |
| | | this.tableDataLeftTop = this.tableDataLeftTopTemp.slice(startValue, startValue + scale) |
| | | if (nowLoop === loop) { |
| | | // 元素自增距离顶部1像素 |
| | | divData.scrollTop += 1 |
| | | // 判断元素是否滚动到底部(可视高度+距离顶部=整个高度) |
| | | if (divData.clientHeight + divData.scrollTop === divData.scrollHeight) { |
| | | // 重置table距离顶部距离 |
| | | divData.scrollTop = 0 |
| | | WkshpLineData({ LineCode: '001' }).then(res => { |
| | | this.tableDataLeftTop = res.data |
| | | if (this.tableDataLeftTop.length > 24) { |
| | | clearInterval(timer) |
| | | this.getLeftTopTableDataSetInterval() |
| | | } |
| | | nowLoop++ |
| | | }, 1000 * 10) |
| | | }) |
| | | } |
| | | }, this.tableDataLeftTop.length <= 24 ? 1000 * 10 : 100) |
| | | }) |
| | | }, |
| | | |
| | | // 获取右上数据并定时刷新 |
| | | getRightTopTableDataSetInterval() { |
| | | let startValue = 0 // 初始值 |
| | | const scale = 24// 刻度 |
| | | // let startValue = 0 // 初始值 |
| | | // const scale = 24// 刻度 |
| | | // |
| | | // WkshpLineData({ LineCode: '002' }).then(res => { |
| | | // this.tableDataRightTopTemp = res.data |
| | | // this.tableDataRightTop = this.tableDataRightTopTemp.slice(startValue, startValue + scale) |
| | | // |
| | | // const loop = Math.floor(this.tableDataRightTopTemp.length / scale)// 需要循环的次数 |
| | | // let nowLoop = 0// 当前循环的次数 |
| | | // |
| | | // const timer = setInterval(() => { |
| | | // startValue = startValue + scale |
| | | // this.tableDataRightTop = this.tableDataRightTopTemp.slice(startValue, startValue + scale) |
| | | // if (nowLoop === loop) { |
| | | // clearInterval(timer) |
| | | // this.getRightTopTableDataSetInterval() |
| | | // } |
| | | // nowLoop++ |
| | | // }, 1000 * 10) |
| | | // }) |
| | | |
| | | WkshpLineData({ LineCode: '002' }).then(res => { |
| | | this.tableDataRightTopTemp = res.data |
| | | this.tableDataRightTop = this.tableDataRightTopTemp.slice(startValue, startValue + scale) |
| | | |
| | | const loop = Math.floor(this.tableDataRightTopTemp.length / scale)// 需要循环的次数 |
| | | let nowLoop = 0// 当前循环的次数 |
| | | |
| | | this.tableDataRightTop = res.data |
| | | const divData = this.$refs.tableDataRightTopRef.bodyWrapper |
| | | // 拿到元素后,对元素进行定时增加距离顶部距离,实现滚动效果(此配置为每100毫秒移动1像素) |
| | | const timer = setInterval(() => { |
| | | startValue = startValue + scale |
| | | this.tableDataRightTop = this.tableDataRightTopTemp.slice(startValue, startValue + scale) |
| | | if (nowLoop === loop) { |
| | | // 元素自增距离顶部1像素 |
| | | divData.scrollTop += 1 |
| | | // 判断元素是否滚动到底部(可视高度+距离顶部=整个高度) |
| | | if (divData.clientHeight + divData.scrollTop === divData.scrollHeight) { |
| | | // 重置table距离顶部距离 |
| | | divData.scrollTop = 0 |
| | | WkshpLineData({ LineCode: '002' }).then(res => { |
| | | this.tableDataRightTop = res.data |
| | | if (this.tableDataRightTop.length > 24) { |
| | | clearInterval(timer) |
| | | this.getRightTopTableDataSetInterval() |
| | | } |
| | | nowLoop++ |
| | | }, 1000 * 10) |
| | | }) |
| | | } |
| | | }, this.tableDataRightTop.length <= 24 ? 1000 * 10 : 100) |
| | | }) |
| | | }, |
| | | |
| | |
| | | color: $main_color; |
| | | } |
| | | |
| | | ::v-deep .el-table__body-wrapper{ |
| | | overflow: hidden !important; |
| | | } |
| | | |
| | | ::v-deep .el-table th.gutter{ |
| | | display: none; |
| | | width:0 |
| | | } |
| | | //::v-deep .el-table colgroup col[name='gutter']{ |
| | | // display: none; |
| | | // width: 0; |
| | | //} |
| | | //::v-deep .el-table__body{ |
| | | // width: 100% !important; |
| | | //} |
| | | |
| | | </style> |
| | | <!--星空--> |
| | | <style lang="css" scoped> |
| | |
| | | backface-visibility: hidden; |
| | | z-index: 102; |
| | | } |
| | | |
| | | |
| | | </style> |
| | |
| | | <div class="kb_dashboard"> |
| | | |
| | | <!-- 星空背景--> |
| | | <div ref="starsRef" class="stars"> |
| | | <div v-for="(item, index) in starsCount" :key="index" class="star" /> |
| | | </div> |
| | | <!-- <div ref="starsRef" class="stars">--> |
| | | <!-- <div v-for="(item, index) in starsCount" :key="index" class="star" />--> |
| | | <!-- </div>--> |
| | | |
| | | <div class="kb_header"> |
| | | <div class="flex_c_c kb_header_text"> |
| | | <div id="topBarLeft" style="width:600px;height:100%" /> |
| | | 仓库管理数字化看板 |
| | | 仓库管理看板 |
| | | <div id="topBarRight" style="width:600px;height:100%;transform:rotate(180deg);" /> |
| | | </div> |
| | | <div class="kb_headTime"> |
| | |
| | | <el-table-column |
| | | prop="voucherdate" |
| | | label="单据日期" |
| | | width="131" |
| | | width="156" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.voucherdate" class="ellipsis">{{ row.voucherdate.substring(0, 10) }}</div> |
| | |
| | | <el-table-column |
| | | prop="wo" |
| | | label="单据编号" |
| | | width="189" |
| | | width="214" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div class="ellipsis">{{ row.wo }}</div> |
| | |
| | | <el-table-column |
| | | prop="wkshp_name" |
| | | label="生产车间" |
| | | width="105" |
| | | width="130" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div class="ellipsis">{{ row.wkshp_name }}</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="saleOrderCode" |
| | | label="销售订单号" |
| | | width="200" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.saleOrderCode" class="ellipsis">{{ row.saleOrderCode }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- <el-table-column--> |
| | | <!-- prop="saleOrderCode"--> |
| | | <!-- label="销售订单号"--> |
| | | <!-- width="200"--> |
| | | <!-- >--> |
| | | <!-- <template slot-scope="{row}">--> |
| | | <!-- <div v-if="row.saleOrderCode" class="ellipsis">{{ row.saleOrderCode }}</div>--> |
| | | <!-- <div v-else>/</div>--> |
| | | <!-- </template>--> |
| | | <!-- </el-table-column>--> |
| | | <el-table-column |
| | | prop="materiel_code" |
| | | label="产品编号" |
| | | width="136" |
| | | width="161" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div class="ellipsis">{{ row.materiel_code }}</div> |
| | |
| | | <el-table-column |
| | | prop="stck_name" |
| | | label="预入仓库" |
| | | width="100" |
| | | width="125" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.stck_name" class="ellipsis">{{ row.stck_name }}</div> |
| | |
| | | <el-table-column |
| | | prop="quantity" |
| | | label="数量" |
| | | width="63" |
| | | width="88" |
| | | /> |
| | | <el-table-column |
| | | prop="totalStockInQuantity" |
| | | label="已入库数量" |
| | | width="100" |
| | | width="125" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <!-- <div v-if="row.totalStockInQuantity">{{ row.totalStockInQuantity }}</div>--> |
| | | <div v-if="row.quantity">{{ Math.round(row.quantity*0.8) }}</div> |
| | | <div v-else>0</div> |
| | | <!-- <!– <div v-if="row.quantity">{{ Math.round(row.quantity*0.8) }}</div>–>--> |
| | | <!-- <div v-else>0</div>--> |
| | | |
| | | <div v-if=" new Date(row.voucherdate.substring(0, 10)).getTime()<new Date(fun_date(-7)).getTime()"> |
| | | {{ row.quantity }} |
| | | </div> |
| | | <div |
| | | v-else-if="(new Date(row.voucherdate.substring(0, 10)).getTime()<new Date(fun_date(-3)).getTime())&& |
| | | (new Date(row.voucherdate.substring(0, 10)).getTime()>new Date(fun_date(-7)).getTime())" |
| | | > |
| | | {{ Math.ceil(row.quantity*0.6) }} |
| | | </div> |
| | | <div v-else> |
| | | 0 |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- <el-table-column--> |
| | |
| | | <el-table-column |
| | | prop="preFinishDate" |
| | | label="预计入库" |
| | | width="140" |
| | | width="165" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.preFinishDate">{{ row.preFinishDate.substring(0, 10) }}</div> |
| | |
| | | <el-table-column |
| | | prop="customename" |
| | | label="客户" |
| | | width="388" |
| | | width="300" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.customename" class="ellipsis">{{ row.customename }}</div> |
| | |
| | | <el-table-column |
| | | prop="materiel_name" |
| | | label="产品名称" |
| | | width="200" |
| | | width="288" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.materiel_name" class="ellipsis">{{ row.materiel_name }}</div> |
| | |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <!-- <div v-if="row.saleOutQuantity" class="ellipsis">{{ row.saleOutQuantity }}</div>--> |
| | | <div v-if="row.quantity" class="ellipsis">{{ Math.round(row.quantity*0.8) }}</div> |
| | | <div v-else>0</div> |
| | | <!-- <!– <div v-if="row.quantity" class="ellipsis">{{ Math.round(row.quantity*0.8) }}</div>–>--> |
| | | <!-- <div v-else>0</div>--> |
| | | <div v-if=" new Date(row.voucherdate.substring(0, 10)).getTime()<new Date(fun_date(-7)).getTime()"> |
| | | {{ row.quantity }} |
| | | </div> |
| | | <div |
| | | v-else-if="(new Date(row.voucherdate.substring(0, 10)).getTime()<new Date(fun_date(-3)).getTime())&& |
| | | (new Date(row.voucherdate.substring(0, 10)).getTime()>new Date(fun_date(-7)).getTime())" |
| | | > |
| | | {{ Math.ceil(row.quantity*0.6) }} |
| | | </div> |
| | | <div v-else> |
| | | 0 |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- <el-table-column--> |
| | |
| | | this.getWareHouseTopLeftData() |
| | | this.getWareHouseTopBottomData() |
| | | this.getEcharts() |
| | | this.setStarsRef() |
| | | // this.setStarsRef() |
| | | }, |
| | | |
| | | methods: { |
| | | fun_date(aa) { |
| | | const date1 = new Date() |
| | | const time1 = date1.getFullYear() + '-' + (date1.getMonth() + 1) + '-' + date1.getDate()// time1表示当前时间 |
| | | const date2 = new Date(date1) |
| | | date2.setDate(date1.getDate() + aa) |
| | | const time2 = date2.getFullYear() + '-' + (date2.getMonth() + 1).toString().padStart(2, '0') + '-' + date2.getDate().toString().padStart(2, '0') |
| | | return time2 |
| | | }, |
| | | setStarsRef() { |
| | | const starNodes = Array.from(this.$refs.starsRef.children) |
| | | starNodes.forEach(item => { |
| | |
| | | getWareHouseTopLeftData() { |
| | | WareHouseTopLeftData().then(res => { |
| | | this.tableDataTop = res.data |
| | | |
| | | // this.number1 = this.tableDataTop.length |
| | | const divData = this.$refs.tableDataTopRef.bodyWrapper |
| | | // 拿到元素后,对元素进行定时增加距离顶部距离,实现滚动效果(此配置为每100毫秒移动1像素) |
| | |
| | | divData.scrollTop = 0 |
| | | WareHouseTopLeftData().then(res => { |
| | | this.tableDataTop = res.data |
| | | |
| | | // this.number1 = this.tableDataTop.length |
| | | if (this.tableDataTop.length > 9) { |
| | | if (this.tableDataTop.length > 10) { |
| | | clearInterval(this.tableTopTask) |
| | | this.getWareHouseTopLeftData() |
| | | } |
| | | }) |
| | | } |
| | | }, this.tableDataTop.length <= 9 ? 1000 * 3 : 100) |
| | | }, this.tableDataTop.length <= 10 ? 1000 * 15 : 100) |
| | | }) |
| | | }, |
| | | // 获取左下table数据 |
| | | getWareHouseTopBottomData() { |
| | | WareHouseTopBottomData().then(res => { |
| | | this.tableDataBottom = res.data |
| | | |
| | | this.number2 = this.tableDataBottom.length |
| | | const divData = this.$refs.tableDataBottomRef.bodyWrapper |
| | | // 拿到元素后,对元素进行定时增加距离顶部距离,实现滚动效果(此配置为每100毫秒移动1像素) |
| | |
| | | divData.scrollTop = 0 |
| | | WareHouseTopBottomData().then(res => { |
| | | this.tableDataBottom = res.data |
| | | |
| | | this.number2 = this.tableDataBottom.length |
| | | if (this.tableDataBottom.length > 10) { |
| | | clearInterval(this.tableBottomTask) |
| | |
| | | } |
| | | }) |
| | | } |
| | | }, this.tableDataBottom.length <= 10 ? 1000 * 3 : 100) |
| | | }, this.tableDataBottom.length <= 10 ? 1000 * 15 : 100) |
| | | }) |
| | | }, |
| | | |
| | |
| | | fontSize: '18px' |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | </script> |
| | |
| | | margin-top: 10px; |
| | | } |
| | | |
| | | .kb_mt20 { |
| | | margin-top: 20px; |
| | | } |
| | | |
| | | .kb_mt10 { |
| | | margin-top: 10px; |
| | | } |
| | |
| | | <div> |
| | | <div class="kb_dashboard"> |
| | | <!-- 星空背景--> |
| | | <div ref="starsRef" class="stars"> |
| | | <div v-for="(item, index) in starsCount" :key="index" class="star" /> |
| | | </div> |
| | | <!-- <div ref="starsRef" class="stars">--> |
| | | <!-- <div v-for="(item, index) in starsCount" :key="index" class="star" />--> |
| | | <!-- </div>--> |
| | | |
| | | <div class="kb_header"> |
| | | <div class="flex_c_c kb_header_text"> |
| | |
| | | <div class="smallTitle"> |
| | | <svg-icon icon-class="cxjg" class="svg_class" /> |
| | | 产线加工中任务 |
| | | |
| | | <div style="display: flex;margin-left: 85px;"> |
| | | |
| | | |
| | | |
| | | <div class="circle" style="background-color: rgb(255 255 255)"></div> |
| | | <div style="margin-left: 10px" >未开始</div> |
| | | |
| | | <div class="circle" style="margin-left: 10px;background-color: blue;"></div> |
| | | <div style="margin-left: 10px" >开工</div> |
| | | |
| | | <div class="circleYellow" style="margin-left: 10px"></div> |
| | | <div style="margin-left: 10px" >执行中</div> |
| | | |
| | | <div class="circle" style="margin-left: 10px"></div> |
| | | <div style="margin-left: 10px" >完工</div> |
| | | |
| | | </div> |
| | | <div class="lineContent horn"> |
| | | </div> |
| | | <div class="lineContent horn" style="height: 434px;"> |
| | | <div v-for="item in lineContent3" :key="item.workcode" class="kb_left_top_block"> |
| | | <div class="kb_block02 kb_pd10"> |
| | | <div> |
| | | <div>销售订单:{{ item.saleordercode }}</div> |
| | | <div class="kb_mt10"> |
| | | <!-- <div>销售订单:{{ item.saleordercode }}</div>--> |
| | | <div > |
| | | 加工单号:{{ item.workcode }} |
| | | </div> |
| | | <div class="kb_mt10"> |
| | | <div class="kb_mt20"> |
| | | 产品名称:{{ item.partname }} |
| | | </div> |
| | | <div class="kb_mt10"> |
| | | <div class="kb_mt20"> |
| | | 任务数量:{{ parseFloat(item.qty) }} |
| | | </div> |
| | | </div> |
| | |
| | | class="circle" |
| | | style="background-color: blue;" |
| | | /> |
| | | |
| | | <div |
| | | v-else-if="it.status==='ALLO'&&(parseFloat(it.ngqty)===0||it.ngqty==='')&&(parseFloat(it.goodqty)===0||it.goodqty==='')" |
| | | class="circle" |
| | |
| | | |
| | | <el-table-column |
| | | prop="status" |
| | | width="80" |
| | | width="125" |
| | | label="状态" |
| | | > |
| | | <template slot-scope="{row}"> |
| | |
| | | <el-table-column |
| | | prop="lm_date" |
| | | label="派发时间" |
| | | width="120" |
| | | width="165" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div>{{ row.lm_date.substring(0, 10) }}</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="saleOrderCode" |
| | | label="销售订单号" |
| | | width="170" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.saleOrderCode">{{ row.saleOrderCode }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <!-- <el-table-column--> |
| | | <!-- prop="saleOrderCode"--> |
| | | <!-- label="销售订单号"--> |
| | | <!-- width="170"--> |
| | | <!-- >--> |
| | | <!-- <template slot-scope="{row}">--> |
| | | <!-- <div v-if="row.saleOrderCode">{{ row.saleOrderCode }}</div>--> |
| | | <!-- <div v-else>/</div>--> |
| | | <!-- </template>--> |
| | | <!-- </el-table-column>--> |
| | | |
| | | <el-table-column |
| | | prop="wo_code" |
| | | label="加工单号" |
| | | width="190" |
| | | width="220" |
| | | /> |
| | | <el-table-column |
| | | prop="partname" |
| | | label="产品名称" |
| | | width="350" |
| | | width="370" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.partname" class="ellipsis">{{ row.partname }}</div> |
| | |
| | | <el-table-column |
| | | prop="plan_qty" |
| | | label="任务数量" |
| | | width="105" |
| | | width="150" |
| | | /> |
| | | <el-table-column |
| | | prop="good_qty" |
| | | label="完工数量" |
| | | width="105" |
| | | width="150" |
| | | /> |
| | | <el-table-column |
| | | prop="ng_qty" |
| | | label="不良数量" |
| | | width="105" |
| | | /> |
| | | <!-- <el-table-column--> |
| | | <!-- prop="ng_qty"--> |
| | | <!-- label="不良数量"--> |
| | | <!-- width="125"--> |
| | | <!-- />--> |
| | | <el-table-column |
| | | label="完成率" |
| | | width="105" |
| | | width="154" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div>{{ parseFloat((row.good_qty * 100 / row.plan_qty).toFixed(2)) }}%</div> |
| | |
| | | this.getTopBar() |
| | | |
| | | this.getShopSearch() |
| | | this.setStarsRef() |
| | | // this.setStarsRef() |
| | | }, |
| | | methods: { |
| | | setStarsRef() { |
| | |
| | | }, |
| | | // 产线加工任务 左下数据 |
| | | getLeftBottomData() { |
| | | let startValue = 0 // 初始值 |
| | | const scale = 10// 刻度 |
| | | // let startValue = 0 // 初始值 |
| | | // const scale = 10// 刻度 |
| | | // |
| | | // LineSearchBottomLeftData({ shopcode: this.ShopArr.join(',') }).then(res => { |
| | | // this.tableDataLeftBottomTemp = res.data |
| | | // this.tableDataLeftBottom = this.tableDataLeftBottomTemp.slice(startValue, startValue + scale) |
| | | // |
| | | // const loop = Math.floor(this.tableDataLeftBottomTemp.length / scale)// 需要循环的次数 |
| | | // let nowLoop = 0// 当前循环的次数 |
| | | // |
| | | // const timer = setInterval(() => { |
| | | // startValue = startValue + scale |
| | | // this.tableDataLeftBottom = this.tableDataLeftBottomTemp.slice(startValue, startValue + scale) |
| | | // if (nowLoop === loop) { |
| | | // clearInterval(timer) |
| | | // this.getLeftBottomData() |
| | | // } |
| | | // |
| | | // nowLoop++ |
| | | // }, 1000 * 10) |
| | | // }) |
| | | |
| | | LineSearchBottomLeftData({ shopcode: this.ShopArr.join(',') }).then(res => { |
| | | this.tableDataLeftBottomTemp = res.data |
| | | this.tableDataLeftBottom = this.tableDataLeftBottomTemp.slice(startValue, startValue + scale) |
| | | this.tableDataLeftBottom = res.data |
| | | |
| | | const loop = Math.floor(this.tableDataLeftBottomTemp.length / scale)// 需要循环的次数 |
| | | let nowLoop = 0// 当前循环的次数 |
| | | const divData = this.$refs.tableDataLeftBottomRef.bodyWrapper |
| | | // 拿到元素后,对元素进行定时增加距离顶部距离,实现滚动效果(此配置为每100毫秒移动1像素) |
| | | const aaa = setInterval(() => { |
| | | // 元素自增距离顶部1像素 |
| | | divData.scrollTop += 1 |
| | | // divData.scrollTop += divData.scrollHeight / this.tableData.length |
| | | // 判断元素是否滚动到底部(可视高度+距离顶部=整个高度) |
| | | if (divData.clientHeight + divData.scrollTop === divData.scrollHeight) { |
| | | // 重置table距离顶部距离 |
| | | divData.scrollTop = 0 |
| | | LineSearchBottomLeftData({ shopcode: this.ShopArr.join(',') }).then(res => { |
| | | this.tableDataLeftBottom = res.data |
| | | |
| | | const timer = setInterval(() => { |
| | | startValue = startValue + scale |
| | | this.tableDataLeftBottom = this.tableDataLeftBottomTemp.slice(startValue, startValue + scale) |
| | | if (nowLoop === loop) { |
| | | clearInterval(timer) |
| | | if (this.tableDataLeftBottom.length > 10) { |
| | | clearInterval(aaa) |
| | | this.getLeftBottomData() |
| | | } |
| | | |
| | | nowLoop++ |
| | | }, 1000 * 10) |
| | | }) |
| | | } |
| | | }, this.tableDataLeftBottom.length <= 10 ? 1000 * 15 : 100) |
| | | }) |
| | | |
| | | |
| | | }, |
| | | |
| | | getEcharts() { |
| | |
| | | border-radius: 50%; |
| | | } |
| | | |
| | | ::v-deep .el-table__body-wrapper{ |
| | | overflow: hidden !important; |
| | | } |
| | | |
| | | .circle { |
| | | width: 26px; |
| | | height: 26px; |
| | | background-color: #00ff8b; |
| | | border-radius: 50%; |
| | | } |
| | | |
| | | </style> |
| | | |
| | | <!--星空--> |
| | |
| | | async getBar01() { |
| | | // const res=await xxx() |
| | | let data = [ |
| | | { key: 'admin0', value: 300 }, |
| | | { key: 'admin1', value: 310 }, |
| | | { key: 'admin2', value: 180 }, |
| | | { key: 'admin3', value: 190 }, |
| | | { key: 'admin4', value: 120 }, |
| | | { key: 'admin5', value: 230 }, |
| | | { key: 'admin6', value: 270 }, |
| | | { key: 'admin7', value: 250 }, |
| | | { key: 'admin8', value: 260 }, |
| | | { key: 'admin9', value: 180 } |
| | | { key: '施秀花', value: 300 }, |
| | | { key: '王家丽', value: 310 }, |
| | | { key: '吉贵琴', value: 180 }, |
| | | { key: '徐云', value: 190 }, |
| | | { key: '伍忠兰', value: 120 }, |
| | | { key: '马光体', value: 230 }, |
| | | { key: '王杰', value: 270 }, |
| | | { key: '王双伟', value: 250 }, |
| | | { key: '王兴英', value: 260 }, |
| | | { key: '杨梅', value: 180 } |
| | | ] |
| | | data = data.sort((a, b) => b.value - a.value) |
| | | loadEcharts('bar01', bar01(data)) |
| | |
| | | // console.log(document.getElementById('line01')) |
| | | const data2 = [ |
| | | { key: '2', value: 0 }, |
| | | { key: '4', value: 0.2 }, |
| | | { key: '6', value: 0.3 }, |
| | | { key: '8', value: 0.1 }, |
| | | { key: '10', value: 0.8 }, |
| | | { key: '12', value: 0.2 }, |
| | | { key: '14', value: 0.3 }, |
| | | { key: '16', value: 0.3 }, |
| | | { key: '18', value: 0 }, |
| | | { key: '20', value: 0.2 }, |
| | | { key: '22', value: 0.1 }, |
| | | { key: '24', value: 0.4 } |
| | | { key: '4', value: 0 }, |
| | | { key: '6', value: 0 }, |
| | | { key: '8', value: 8 }, |
| | | { key: '10', value: 6 }, |
| | | { key: '12', value: 3 }, |
| | | { key: '14', value: 6 }, |
| | | { key: '16', value: 4 }, |
| | | { key: '18', value: 2 }, |
| | | { key: '20', value: 0 }, |
| | | { key: '22', value: 0 }, |
| | | { key: '24', value: 0 } |
| | | ] |
| | | loadEcharts('line01', line01(data2)) |
| | | } |
| | |
| | | proxy: { |
| | | [process.env.VUE_APP_BASE_API]: { |
| | | // target: 'http://121.196.36.24:8011', // 请求的第三⽅接⼝地址 本地开发服务器 |
| | | // target: 'http://192.168.1.102:8001', // 请求的第三⽅接⼝地址 莱科 (未上云) |
| | | target: 'http://tr3b6v.natappfree.cc', // 请求的第三⽅接⼝地址 莱科 (上云) |
| | | target: 'http://192.168.1.102:8001', // 请求的第三⽅接⼝地址 莱科 (未上云) |
| | | // target: 'http://tr3b6v.natappfree.cc', // 请求的第三⽅接⼝地址 莱科 (上云) |
| | | |
| | | changeOrigin: true, // 请求跨域时,需 配置此项 |
| | | pathRewrite: { // 路径重写,替换target中的请求地址 |