loulijun2021
2023-05-06 6c2e00278c1194b46eb9153ca4166af868bb15ef
1.看板调整2.上云路由整合
已修改12个文件
1177 ■■■■ 文件已修改
src/router/index.js 588 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/modules/permission.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/myEcharts.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/bbgl/bzgz.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/bbgl/rygz.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/kb/cgdd.vue 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/kb/cjsc.vue 180 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/kb/ckgl.vue 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/kb/kbCommon.css 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/kb/zhkb.vue 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/xtsy/index.vue 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
vue.config.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/index.js
@@ -30,6 +30,7 @@
 * a base page that does not have permission requirements
 * all roles can be accessed
 */
// 公用路由
export const commonRoutes = [
  /*
  * 看板部分路由
@@ -38,15 +39,15 @@
    path: '/zhkb',
    component: () => import('@/views/kb/zhkb'),
    hidden: true
  },{
  }, {
    path: '/cgdd',
    component: () => import('@/views/kb/cgdd'),
    hidden: true
  },{
  }, {
    path: '/ckgl',
    component: () => import('@/views/kb/ckgl'),
    hidden: true
  },{
  }, {
    path: '/cjsc',
    component: () => import('@/views/kb/cjsc'),
    hidden: true
@@ -86,7 +87,582 @@
  }
  // { 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',
@@ -654,7 +1230,6 @@
    ]
  },
  {
    path: '/kanbanManager',
    component: Layout,
@@ -680,13 +1255,12 @@
        name: 'ckglCancel',
        component: () => import('@/views/kb/ckgl'),
        meta: { title: '仓库管理', icon: '', keepAlive: true }
      },{
      }, {
        path: 'cjsc',
        name: 'ckglCancel',
        component: () => import('@/views/kb/cjsc'),
        meta: { title: '车间生产', icon: '', keepAlive: true }
      },
      }
    ]
  }
src/store/modules/permission.js
@@ -1,6 +1,7 @@
import { asyncRoutes, commonRoutes } from '@/router'
import { asyncRoutes, asyncRoutesCloud, commonRoutes } from '@/router'
import Layout from '@/layout'
import { getCookie } from '@/utils/auth'
// 判断是否有权限
function hasPermission(roles, route) {
@@ -99,20 +100,17 @@
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)
src/utils/myEcharts.js
@@ -308,9 +308,9 @@
      }
    },
    yAxis: {
      max: 1,
      max: 10,
      min: 0,
      interval: 0.2,
      interval: 2,
      splitLine: {
        show: false
      },
src/views/bbgl/bzgz.vue
@@ -122,8 +122,7 @@
              :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
@@ -131,6 +130,8 @@
              :cell-style="this.$cellStyle"
              @sort-change="sortChange"
            >
<!--              :summary-method="getSummaries"-->
<!--              show-summary-->
              <el-table-column
                prop="RowNum"
                width="50"
@@ -286,8 +287,7 @@
              :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
@@ -295,6 +295,8 @@
              :cell-style="this.$cellStyle"
              @sort-change="sortChange"
            >
<!--              :summary-method="getSummaries"-->
<!--              show-summary-->
              <el-table-column
                prop="RowNum"
                width="50"
src/views/bbgl/rygz.vue
@@ -121,8 +121,7 @@
              :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
@@ -130,6 +129,8 @@
              :cell-style="this.$cellStyle"
              @sort-change="sortChange"
            >
<!--              :summary-method="getSummaries"-->
<!--              show-summary-->
              <el-table-column
                prop="RowNum"
                width="50"
@@ -279,8 +280,7 @@
              :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
@@ -288,6 +288,8 @@
              :cell-style="this.$cellStyle"
              @sort-change="sortChange"
            >
<!--              :summary-method="getSummaries"-->
<!--              show-summary-->
              <el-table-column
                prop="RowNum"
                width="50"
src/views/kb/cgdd.vue
@@ -3,9 +3,9 @@
    <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">
@@ -49,7 +49,7 @@
                  <el-table-column
                    prop="PurchaseOrder"
                    label="采购订单"
                    width="225"
                    width="195"
                  >
                    <template slot-scope="{row}">
                      <div class="ellipsis">{{ row.PurchaseOrder }}</div>
@@ -58,7 +58,7 @@
                  <el-table-column
                    prop="suppername"
                    label="供应商"
                    width="183"
                    width="173"
                  >
                    <template slot-scope="{row}">
                      <div v-if="row.suppername" class="ellipsis">{{ row.suppername }}</div>
@@ -84,11 +84,21 @@
                  <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-->
@@ -104,7 +114,7 @@
                  <el-table-column
                    prop="quantity"
                    label="订单数量"
                    width="114"
                    width="104"
                  >
                    <template slot-scope="{row}">
                      <div v-if="row.quantity">{{ parseFloat(row.quantity) }}</div>
@@ -134,28 +144,30 @@
                  <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>
@@ -165,7 +177,7 @@
                  <el-table-column
                    prop="warning"
                    label="延期天数"
                    width="144"
                    width="139"
                  >
                    <template slot-scope="{row}">
                      <div v-if="parseFloat(row.warning)<0" style="color: red">{{
@@ -229,7 +241,7 @@
                </el-table-column>
                <el-table-column
                  prop="suppername"
                  width="293"
                  width="292"
                  label="供应商名称"
                >
                  <template slot-scope="{row}">
@@ -289,10 +301,18 @@
    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 => {
@@ -322,11 +342,12 @@
          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
@@ -348,7 +369,8 @@
              }
            })
          }
        }, this.tableData.length <= 13 ? 1000 * 3 : 100)
        }, this.tableData.length <= 13 ? 1000 * 15 : 100)
      })
    },
    getPurchaseRight() {
@@ -371,7 +393,7 @@
              }
            })
          }
        }, this.tableDataRank.length <= 23 ? 1000 * 3 : 100)
        }, this.tableDataRank.length <= 23 ? 1000 * 15 : 100)
      })
    },
    tableRowClassName({ row, rowIndex }) {
src/views/kb/cjsc.vue
@@ -3,9 +3,9 @@
    <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">
@@ -29,11 +29,11 @@
              <el-table
                ref="tableDataLeftTopRef"
                :data="tableDataLeftTop"
                class="tableData  tableDataCell"
                style="width: 100%;"
                class="tableData tableDataCell"
                style="width: 100%;overflow: hidden"
                :header-cell-style="headerCellStyle"
                :cell-style="cellStyle"
                height="927"
                height="930"
              >
                <el-table-column
                  prop="saleOrderCode"
@@ -45,12 +45,12 @@
                        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}">
@@ -190,7 +190,7 @@
              <el-table-column
                prop="scjdxxx"
                label="生产进度"
                width="130"
                width="134"
              >
                <template slot-scope="{row}">
                  <div :id="'progress'+row.RowNum" style="width: 100%;height:30px"/>
@@ -295,7 +295,7 @@
    // 中间表格数据内容
    this.getCenterTableDataSetInterval()
    this.setStarsRef()
    // this.setStarsRef()
  },
  methods: {
    setStarsRef() {
@@ -344,53 +344,135 @@
          })
        })
      })
      // 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) {
            clearInterval(timer)
            this.getLeftTopTableDataSetInterval()
          // 元素自增距离顶部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) {
            clearInterval(timer)
            this.getRightTopTableDataSetInterval()
          // 元素自增距离顶部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)
      })
    },
@@ -486,6 +568,22 @@
  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>
@@ -520,4 +618,6 @@
  backface-visibility: hidden;
  z-index: 102;
}
</style>
src/views/kb/ckgl.vue
@@ -3,14 +3,14 @@
    <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">
@@ -37,7 +37,7 @@
                <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>
@@ -47,7 +47,7 @@
                <el-table-column
                  prop="wo"
                  label="单据编号"
                  width="189"
                  width="214"
                >
                  <template slot-scope="{row}">
                    <div class="ellipsis">{{ row.wo }}</div>
@@ -56,26 +56,26 @@
                <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>
@@ -103,7 +103,7 @@
                <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>
@@ -113,17 +113,30 @@
                <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.totalStockInQuantity">{{ row.totalStockInQuantity }}</div>-->
                    <!--                    &lt;!&ndash;                    <div v-if="row.quantity">{{ Math.round(row.quantity*0.8) }}</div>&ndash;&gt;-->
                    <!--                    <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-->
@@ -144,7 +157,7 @@
                <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>
@@ -191,7 +204,7 @@
                <el-table-column
                  prop="customename"
                  label="客户"
                  width="388"
                  width="300"
                >
                  <template slot-scope="{row}">
                    <div v-if="row.customename" class="ellipsis">{{ row.customename }}</div>
@@ -226,7 +239,7 @@
                <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>
@@ -257,9 +270,21 @@
                  width="120"
                >
                  <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.saleOutQuantity" class="ellipsis">{{ row.saleOutQuantity }}</div>-->
                    <!--                    &lt;!&ndash;                    <div v-if="row.quantity" class="ellipsis">{{ Math.round(row.quantity*0.8) }}</div>&ndash;&gt;-->
                    <!--                    <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-->
@@ -373,10 +398,18 @@
    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 => {
@@ -399,6 +432,7 @@
    getWareHouseTopLeftData() {
      WareHouseTopLeftData().then(res => {
        this.tableDataTop = res.data
        // this.number1 = this.tableDataTop.length
        const divData = this.$refs.tableDataTopRef.bodyWrapper
        // 拿到元素后,对元素进行定时增加距离顶部距离,实现滚动效果(此配置为每100毫秒移动1像素)
@@ -412,20 +446,22 @@
            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像素)
@@ -440,6 +476,7 @@
            divData.scrollTop = 0
            WareHouseTopBottomData().then(res => {
              this.tableDataBottom = res.data
              this.number2 = this.tableDataBottom.length
              if (this.tableDataBottom.length > 10) {
                clearInterval(this.tableBottomTask)
@@ -447,7 +484,7 @@
              }
            })
          }
        }, this.tableDataBottom.length <= 10 ? 1000 * 3 : 100)
        }, this.tableDataBottom.length <= 10 ? 1000 * 15 : 100)
      })
    },
@@ -510,6 +547,7 @@
        fontSize: '18px'
      }
    }
  }
}
</script>
src/views/kb/kbCommon.css
@@ -96,6 +96,10 @@
  margin-top: 10px;
}
.kb_mt20 {
  margin-top: 20px;
}
.kb_mt10 {
  margin-top: 10px;
}
src/views/kb/zhkb.vue
@@ -2,9 +2,9 @@
  <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">
@@ -19,23 +19,41 @@
      <div style="display: flex;justify-content: space-between;padding:0 20px 20px 20px">
        <!--       左边-->
        <div style="width: 1400px ;height: 969px;" class="flex_c_b">
          <div>
          <div >
            <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>
            <div class="lineContent horn">
            <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>
@@ -78,6 +96,7 @@
                          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"
@@ -120,7 +139,7 @@
                <el-table-column
                  prop="status"
                  width="80"
                  width="125"
                  label="状态"
                >
                  <template slot-scope="{row}">
@@ -132,31 +151,33 @@
                <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>
@@ -166,21 +187,21 @@
                <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>
@@ -316,7 +337,7 @@
    this.getTopBar()
    this.getShopSearch()
    this.setStarsRef()
    // this.setStarsRef()
  },
  methods: {
    setStarsRef() {
@@ -420,27 +441,54 @@
    },
    // 产线加工任务  左下数据
    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)
            this.getLeftBottomData()
              if (this.tableDataLeftBottom.length > 10) {
                clearInterval(aaa)
                this.getLeftBottomData()
              }
            })
          }
          nowLoop++
        }, 1000 * 10)
        }, this.tableDataLeftBottom.length <= 10 ? 1000 * 15 : 100)
      })
    },
    getEcharts() {
@@ -622,6 +670,17 @@
  border-radius: 50%;
}
::v-deep .el-table__body-wrapper{
  overflow: hidden !important;
}
.circle {
  width: 26px;
  height: 26px;
  background-color: #00ff8b;
  border-radius: 50%;
}
</style>
<!--星空-->
src/views/xtsy/index.vue
@@ -179,16 +179,16 @@
    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))
@@ -202,17 +202,17 @@
      // 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))
    }
vue.config.js
@@ -53,8 +53,8 @@
    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中的请求地址