diff --git a/.env.dev b/.env.dev index 912c2eab..95af9634 100644 --- a/.env.dev +++ b/.env.dev @@ -12,8 +12,8 @@ ENV = 'development' VUE_APP_TITLE = 智能监控分析系统 # 芋道管理系统/开发环境 -# VUE_APP_BASE_API = 'http://192.168.8.22:48080' -VUE_APP_BASE_API = 'http://172.16.33.65:48082' +VUE_APP_BASE_API = 'http://172.16.32.76:48080' +# VUE_APP_BASE_API = 'http://line.kszny.picaiba.com' # 路由懒加载 VUE_CLI_BABEL_TRANSPILE_MODULES = true diff --git a/src/api/visualization/visualization.js b/src/api/visualization/visualization.js new file mode 100644 index 00000000..0fd51aaf --- /dev/null +++ b/src/api/visualization/visualization.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +export function getLineEdgeLibraryList(data) { + return request({ + url: '/wms/line-edge-library/page', + method: 'post', + params: data, + }); +} diff --git a/src/assets/img/ABN.png b/src/assets/img/ABN.png new file mode 100644 index 00000000..3c301d38 Binary files /dev/null and b/src/assets/img/ABN.png differ diff --git a/src/assets/img/DIS.png b/src/assets/img/DIS.png new file mode 100644 index 00000000..5a30bde7 Binary files /dev/null and b/src/assets/img/DIS.png differ diff --git a/src/assets/img/EP.png b/src/assets/img/EP.png new file mode 100644 index 00000000..0da35eda Binary files /dev/null and b/src/assets/img/EP.png differ diff --git a/src/assets/img/FP.png b/src/assets/img/FP.png new file mode 100644 index 00000000..32a091eb Binary files /dev/null and b/src/assets/img/FP.png differ diff --git a/src/assets/img/IDL.png b/src/assets/img/IDL.png new file mode 100644 index 00000000..f8a1e294 Binary files /dev/null and b/src/assets/img/IDL.png differ diff --git a/src/assets/img/IT.png b/src/assets/img/IT.png new file mode 100644 index 00000000..e997fc1a Binary files /dev/null and b/src/assets/img/IT.png differ diff --git a/src/assets/img/LCK.png b/src/assets/img/LCK.png new file mode 100644 index 00000000..fa37e2fb Binary files /dev/null and b/src/assets/img/LCK.png differ diff --git a/src/assets/img/OCC.png b/src/assets/img/OCC.png new file mode 100644 index 00000000..36f5b73e Binary files /dev/null and b/src/assets/img/OCC.png differ diff --git a/src/assets/img/RES.png b/src/assets/img/RES.png new file mode 100644 index 00000000..681a85bd Binary files /dev/null and b/src/assets/img/RES.png differ diff --git a/src/assets/img/Top1.png b/src/assets/img/Top1.png new file mode 100644 index 00000000..67ea47f4 Binary files /dev/null and b/src/assets/img/Top1.png differ diff --git a/src/assets/img/Top2.png b/src/assets/img/Top2.png new file mode 100644 index 00000000..9f37851a Binary files /dev/null and b/src/assets/img/Top2.png differ diff --git a/src/assets/img/Top3.png b/src/assets/img/Top3.png new file mode 100644 index 00000000..17f88b75 Binary files /dev/null and b/src/assets/img/Top3.png differ diff --git a/src/assets/img/Top4.png b/src/assets/img/Top4.png new file mode 100644 index 00000000..2b0d2fae Binary files /dev/null and b/src/assets/img/Top4.png differ diff --git a/src/assets/img/Top5.png b/src/assets/img/Top5.png new file mode 100644 index 00000000..2b114c32 Binary files /dev/null and b/src/assets/img/Top5.png differ diff --git a/src/assets/img/agvCar.png b/src/assets/img/agvCar.png new file mode 100644 index 00000000..9318c5f4 Binary files /dev/null and b/src/assets/img/agvCar.png differ diff --git a/src/assets/img/agvItemBg.png b/src/assets/img/agvItemBg.png new file mode 100644 index 00000000..3e78a9f7 Binary files /dev/null and b/src/assets/img/agvItemBg.png differ diff --git a/src/assets/img/alarmItemBg.png b/src/assets/img/alarmItemBg.png new file mode 100644 index 00000000..fa9f6cb2 Binary files /dev/null and b/src/assets/img/alarmItemBg.png differ diff --git a/src/assets/img/chargeBg.png b/src/assets/img/chargeBg.png new file mode 100644 index 00000000..c38aeb40 Binary files /dev/null and b/src/assets/img/chargeBg.png differ diff --git a/src/assets/img/chargeCircle.png b/src/assets/img/chargeCircle.png new file mode 100644 index 00000000..757b6eab Binary files /dev/null and b/src/assets/img/chargeCircle.png differ diff --git a/src/assets/img/leftTable.png b/src/assets/img/leftTable.png new file mode 100644 index 00000000..f68157fe Binary files /dev/null and b/src/assets/img/leftTable.png differ diff --git a/src/assets/img/recycle.png b/src/assets/img/recycle.png new file mode 100644 index 00000000..013caff6 Binary files /dev/null and b/src/assets/img/recycle.png differ diff --git a/src/assets/img/rightTable.png b/src/assets/img/rightTable.png new file mode 100644 index 00000000..36e76cdf Binary files /dev/null and b/src/assets/img/rightTable.png differ diff --git a/src/assets/img/runBg.png b/src/assets/img/runBg.png new file mode 100644 index 00000000..72f4ae2f Binary files /dev/null and b/src/assets/img/runBg.png differ diff --git a/src/assets/img/runCircle.png b/src/assets/img/runCircle.png new file mode 100644 index 00000000..b20f0b83 Binary files /dev/null and b/src/assets/img/runCircle.png differ diff --git a/src/assets/img/ssdlLeftTitle.png b/src/assets/img/ssdlLeftTitle.png new file mode 100644 index 00000000..e17e3ac1 Binary files /dev/null and b/src/assets/img/ssdlLeftTitle.png differ diff --git a/src/assets/img/ssdlTitle.png b/src/assets/img/ssdlTitle.png new file mode 100644 index 00000000..1acffba1 Binary files /dev/null and b/src/assets/img/ssdlTitle.png differ diff --git a/src/assets/img/standbyCircle.png b/src/assets/img/standbyCircle.png new file mode 100644 index 00000000..068a9ae3 Binary files /dev/null and b/src/assets/img/standbyCircle.png differ diff --git a/src/assets/img/threeDimensionalChartBg.png b/src/assets/img/threeDimensionalChartBg.png new file mode 100644 index 00000000..50c254a8 Binary files /dev/null and b/src/assets/img/threeDimensionalChartBg.png differ diff --git a/src/permission.js b/src/permission.js index 7125eeaa..abf568d9 100644 --- a/src/permission.js +++ b/src/permission.js @@ -9,7 +9,7 @@ import { isRelogin } from '@/utils/request' NProgress.configure({ showSpinner: false }) // 增加三方登陆 update by 芋艿 -const whiteList = ['/login', '/social-login', '/auth-redirect', '/bind', '/register', '/oauthLogin/gitee'] +const whiteList = ['/login', '/social-login','screenbg', '/auth-redirect', '/bind', '/register', '/oauthLogin/gitee'] router.beforeEach((to, from, next) => { NProgress.start() diff --git a/src/router/index.js b/src/router/index.js index 77990373..602116c3 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -28,223 +28,277 @@ Vue.use(Router) // 公共路由 export const constantRoutes = [ - { - path: '/redirect', - component: Layout, - hidden: true, - children: [ - { - path: '/redirect/:path(.*)', - component: (resolve) => require(['@/views/redirect'], resolve) - } - ] - }, - { - path: '/login', - component: (resolve) => require(['@/views/login'], resolve), - hidden: true - }, - { - path: '/sso', - component: (resolve) => require(['@/views/sso'], resolve), - hidden: true - }, - { - path: '/social-login', - component: (resolve) => require(['@/views/socialLogin'], resolve), - hidden: true - }, - { - path: '/404', - component: (resolve) => require(['@/views/error/404'], resolve), - hidden: true - }, - { - path: '/401', - component: (resolve) => require(['@/views/error/401'], resolve), - hidden: true - }, - { - path: '/print-design', - component: (resolve) => require(['@/views/print/design'], resolve), - hidden: true - }, - { - path: "", - component: Layout, - redirect: "index", - children: [ - { - path: "index", - component: (resolve) => require(["@/views/home/index"], resolve), - name: "首页", - meta: { title: "首页", icon: "dashboard", affix: true }, - hidden: true - }, - ], - }, - { - path: '/user', - component: Layout, - hidden: true, - redirect: 'noredirect', - children: [{ - path: 'profile', - component: (resolve) => require(['@/views/system/user/profile/index'], resolve), - name: 'Profile', - meta: { title: '个人中心', icon: 'user' } - }, { - path: 'notify-message', - component: (resolve) => require(['@/views/system/notify/my/index'], resolve), - name: 'MyNotifyMessage', - meta: { title: '我的站内信', icon: 'message' }, - }] - }, - { - path: '/dict', - component: Layout, - hidden: true, - children: [{ - path: 'type/data/:dictId(\\d+)', - component: (resolve) => require(['@/views/system/dict/data'], resolve), - name: 'SystemDictData', - meta: { title: '字典数据', icon: '', activeMenu: '/system/dict' } - } - ] - }, - { - path: '/job', - component: Layout, - hidden: true, - children: [{ - path: 'log', - component: (resolve) => require(['@/views/infra/job/log'], resolve), - name: 'InfraJobLog', - meta: { title: '调度日志', activeMenu: '/infra/job' } - } - ] - }, { - path: '/codegen', - component: Layout, - hidden: true, - children: [{ - path: 'edit/:tableId(\\d+)', - component: (resolve) => require(['@/views/infra/codegen/editTable'], resolve), - name: 'InfraCodegenEditTable', - meta: { title: '修改生成配置', activeMenu: '/infra/codegen' } - } - ] - }, - { - path: '/bpm', - component: Layout, - hidden: true, - redirect: 'noredirect', - children: [{ - path: 'oa/leave/create', - component: (resolve) => require(['@/views/bpm/oa/leave/create'], resolve), - name: 'BpmOALeaveCreate', - meta: { title: '发起 OA 请假', icon: 'form', activeMenu: '/bpm/oa/leave' } - }, { - path: 'oa/leave/detail', - component: (resolve) => require(['@/views/bpm/oa/leave/detail'], resolve), - name: 'BpmOALeaveDetail', - meta: { title: '查看 OA 请假', icon: 'view', activeMenu: '/bpm/oa/leave' } - } - ] - }, - { - path: '/bpm', - component: Layout, - hidden: true, - children: [{ - path: 'manager/form/edit', - component: (resolve) => require(['@/views/bpm/form/formEditor'], resolve), - name: 'BpmFormEditor', - meta: { title: '流程表单-编辑', activeMenu: '/bpm/manager/form' } - }, { - path: 'manager/definition', - component: (resolve) => require(['@/views/bpm/definition/index'], resolve), - name: 'BpmProcessDefinition', - meta: { title: '流程定义', activeMenu: '/bpm/manager/model' } - }, { - path: 'manager/model/design', - component: (resolve) => require(['@/views/bpm/model/modelEditor'], resolve), - name: 'BpmModelEditor', - meta: { title: '设计流程', activeMenu: '/bpm/manager/model' } - }, { - path: 'process-instance/create', - component: (resolve) => require(['@/views/bpm/processInstance/create'], resolve), - name: 'BpmProcessInstanceCreate', - meta: { title: '发起流程', activeMenu: '/bpm/task/my' } - }, { - path: 'process-instance/detail', - component: (resolve) => require(['@/views/bpm/processInstance/detail'], resolve), - name: 'BpmProcessInstanceDetail', - meta: { title: '流程详情', activeMenu: '/bpm/task/my' } - } - ] - }, - { - path: '/property', - component: Layout, - hidden: true, - children: [{ - path: 'value/:propertyId(\\d+)', - component: (resolve) => require(['@/views/mall/product/property/value'], resolve), - name: 'ProductPropertyValue', - meta: { title: '商品属性值', icon: '', activeMenu: '/product/property' } - } - ] - }, - { - path: '/spu', - component: Layout, - hidden: true, - children: [{ - path: 'edit/:spuId(\\d+)', - component: (resolve) => require(['@/views/mall/product/spu/save'], resolve), - name: 'ProductSpuUpdate', - meta: { title: '修改商品', activeMenu: '/product/spu' } - }, - { - path: 'add', - component: (resolve) => require(['@/views/mall/product/spu/save'], resolve), - name: 'ProductSpuCreate', - meta: { title: '添加商品', activeMenu: '/product/spu' } - } - ] - }, - { - path: '/trade/order', - component: Layout, - hidden: true, - children: [ - { - path: 'detail', - name: 'TradeOrderDetail', - hidden: true, - meta: { title: '订单详情' }, - component: (resolve) => require(['@/views/mall/trade/order/detail'], resolve) - } - ] - }, - { - path: '/pay', - component: Layout, - hidden: true, - children: [{ - path: 'order/submit', - name: 'PayOrderSubmit', - hidden: true, - meta: { - title: '收银台', - noCache: true - }, - component: (resolve) => require(['@/views/pay/order/submit'], resolve) - }] - } -] + { + path: '/redirect', + component: Layout, + hidden: true, + children: [ + { + path: '/redirect/:path(.*)', + component: (resolve) => require(['@/views/redirect'], resolve), + }, + ], + }, + { + path: '/login', + component: (resolve) => require(['@/views/login'], resolve), + // hidden: true, + }, + + { + path: '/sso', + component: (resolve) => require(['@/views/sso'], resolve), + hidden: true, + }, + { + path: '/social-login', + component: (resolve) => require(['@/views/socialLogin'], resolve), + hidden: true, + }, + { + path: '/404', + component: (resolve) => require(['@/views/error/404'], resolve), + hidden: true, + }, + { + path: '/401', + component: (resolve) => require(['@/views/error/401'], resolve), + hidden: true, + }, + { + path: '/print-design', + component: (resolve) => require(['@/views/print/design'], resolve), + hidden: true, + }, + { + path: '', + component: Layout, + redirect: 'index', + children: [ + { + path: 'index', + component: (resolve) => require(['@/views/home/index'], resolve), + name: '首页', + meta: { title: '首页', icon: 'dashboard', affix: true }, + hidden: true, + }, + ], + }, + { + path: '/screenbg', + component: () => + import( + /* webpackChunkName: "about" */ '@/views/productionVisualization/equipmentBoard' + ), + name: 'screenbg', + meta: { title: '大屏', icon: 'chart' }, + }, + { + path: '/user', + component: Layout, + hidden: true, + redirect: 'noredirect', + children: [ + { + path: 'profile', + component: (resolve) => + require(['@/views/system/user/profile/index'], resolve), + name: 'Profile', + meta: { title: '个人中心', icon: 'user' }, + }, + { + path: 'notify-message', + component: (resolve) => + require(['@/views/system/notify/my/index'], resolve), + name: 'MyNotifyMessage', + meta: { title: '我的站内信', icon: 'message' }, + }, + ], + }, + { + path: '/dict', + component: Layout, + hidden: true, + children: [ + { + path: 'type/data/:dictId(\\d+)', + component: (resolve) => require(['@/views/system/dict/data'], resolve), + name: 'SystemDictData', + meta: { title: '字典数据', icon: '', activeMenu: '/system/dict' }, + }, + ], + }, + { + path: '/job', + component: Layout, + hidden: true, + children: [ + { + path: 'log', + component: (resolve) => require(['@/views/infra/job/log'], resolve), + name: 'InfraJobLog', + meta: { title: '调度日志', activeMenu: '/infra/job' }, + }, + ], + }, + { + path: '/codegen', + component: Layout, + hidden: true, + children: [ + { + path: 'edit/:tableId(\\d+)', + component: (resolve) => + require(['@/views/infra/codegen/editTable'], resolve), + name: 'InfraCodegenEditTable', + meta: { title: '修改生成配置', activeMenu: '/infra/codegen' }, + }, + ], + }, + { + path: '/bpm', + component: Layout, + hidden: true, + redirect: 'noredirect', + children: [ + { + path: 'oa/leave/create', + component: (resolve) => + require(['@/views/bpm/oa/leave/create'], resolve), + name: 'BpmOALeaveCreate', + meta: { + title: '发起 OA 请假', + icon: 'form', + activeMenu: '/bpm/oa/leave', + }, + }, + { + path: 'oa/leave/detail', + component: (resolve) => + require(['@/views/bpm/oa/leave/detail'], resolve), + name: 'BpmOALeaveDetail', + meta: { + title: '查看 OA 请假', + icon: 'view', + activeMenu: '/bpm/oa/leave', + }, + }, + ], + }, + { + path: '/bpm', + component: Layout, + hidden: true, + children: [ + { + path: 'manager/form/edit', + component: (resolve) => + require(['@/views/bpm/form/formEditor'], resolve), + name: 'BpmFormEditor', + meta: { title: '流程表单-编辑', activeMenu: '/bpm/manager/form' }, + }, + { + path: 'manager/definition', + component: (resolve) => + require(['@/views/bpm/definition/index'], resolve), + name: 'BpmProcessDefinition', + meta: { title: '流程定义', activeMenu: '/bpm/manager/model' }, + }, + { + path: 'manager/model/design', + component: (resolve) => + require(['@/views/bpm/model/modelEditor'], resolve), + name: 'BpmModelEditor', + meta: { title: '设计流程', activeMenu: '/bpm/manager/model' }, + }, + { + path: 'process-instance/create', + component: (resolve) => + require(['@/views/bpm/processInstance/create'], resolve), + name: 'BpmProcessInstanceCreate', + meta: { title: '发起流程', activeMenu: '/bpm/task/my' }, + }, + { + path: 'process-instance/detail', + component: (resolve) => + require(['@/views/bpm/processInstance/detail'], resolve), + name: 'BpmProcessInstanceDetail', + meta: { title: '流程详情', activeMenu: '/bpm/task/my' }, + }, + ], + }, + { + path: '/property', + component: Layout, + hidden: true, + children: [ + { + path: 'value/:propertyId(\\d+)', + component: (resolve) => + require(['@/views/mall/product/property/value'], resolve), + name: 'ProductPropertyValue', + meta: { + title: '商品属性值', + icon: '', + activeMenu: '/product/property', + }, + }, + ], + }, + { + path: '/spu', + component: Layout, + hidden: true, + children: [ + { + path: 'edit/:spuId(\\d+)', + component: (resolve) => + require(['@/views/mall/product/spu/save'], resolve), + name: 'ProductSpuUpdate', + meta: { title: '修改商品', activeMenu: '/product/spu' }, + }, + { + path: 'add', + component: (resolve) => + require(['@/views/mall/product/spu/save'], resolve), + name: 'ProductSpuCreate', + meta: { title: '添加商品', activeMenu: '/product/spu' }, + }, + ], + }, + { + path: '/trade/order', + component: Layout, + hidden: true, + children: [ + { + path: 'detail', + name: 'TradeOrderDetail', + hidden: true, + meta: { title: '订单详情' }, + component: (resolve) => + require(['@/views/mall/trade/order/detail'], resolve), + }, + ], + }, + { + path: '/pay', + component: Layout, + hidden: true, + children: [ + { + path: 'order/submit', + name: 'PayOrderSubmit', + hidden: true, + meta: { + title: '收银台', + noCache: true, + }, + component: (resolve) => require(['@/views/pay/order/submit'], resolve), + }, + ], + }, +]; // 防止连续点击多次路由报错 let routerPush = Router.prototype.push; diff --git a/src/views/productionVisualization/equipmentBoard/components/EventLisener.js b/src/views/productionVisualization/equipmentBoard/components/EventLisener.js new file mode 100644 index 00000000..754251f8 --- /dev/null +++ b/src/views/productionVisualization/equipmentBoard/components/EventLisener.js @@ -0,0 +1,38 @@ +/* + * @Author: zhp + * @Date: 2022-06-14 14:28:55 + * @LastEditTime: 2023-08-15 15:48:39 + * @LastEditors: zhp + * @Description: + */ +const EventListener = { + /** + * Listen to DOM events during the bubble phase. + * + * @param {DOMEventTarget} target DOM element to register listener on. + * @param {string} eventType Event type, e.g. 'click' or 'mouseover'. + * @param {function} callback Callback function. + * @return {object} Object with a `remove` method. + */ + listen(target, eventType, callback) { + if (target.addEventListener) { + // console.log(1111) + target.addEventListener(eventType, callback, false) + return { + remove() { + target.removeEventListener(eventType, callback, false) + } + } + } else if (target.attachEvent) { + // console.log(222) + target.attachEvent('on' + eventType, callback) + return { + remove() { + target.detachEvent('on' + eventType, callback) + } + } + } + } +} + +export default EventListener diff --git a/src/views/productionVisualization/equipmentBoard/components/Header.vue b/src/views/productionVisualization/equipmentBoard/components/Header.vue new file mode 100644 index 00000000..55336105 --- /dev/null +++ b/src/views/productionVisualization/equipmentBoard/components/Header.vue @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + {{ YMD }} + {{ time }} + + + + + + + + + + + + + diff --git a/src/views/productionVisualization/equipmentBoard/components/agvStatus.vue b/src/views/productionVisualization/equipmentBoard/components/agvStatus.vue new file mode 100644 index 00000000..8b7d23d6 --- /dev/null +++ b/src/views/productionVisualization/equipmentBoard/components/agvStatus.vue @@ -0,0 +1,299 @@ + + + + AGV状态 + + + + + + {{ index + 1 }} + {{ agv.code }} + + + + + + + {{ agv.status }} + + + + + + + + + {{ agv.completed }} + 今日完成 + + + + + + + + + + diff --git a/src/views/productionVisualization/equipmentBoard/components/alarm.vue b/src/views/productionVisualization/equipmentBoard/components/alarm.vue new file mode 100644 index 00000000..4e8dbfd5 --- /dev/null +++ b/src/views/productionVisualization/equipmentBoard/components/alarm.vue @@ -0,0 +1,97 @@ + + + + 异常报警 + + + 9:05:21|FMS|AGV-03顶升失败,任务TSK25-1004中断 + + + 9:05:21|FMS|AGV-03顶升失败,任务TSK25-1004中断 + + + + + + + + + diff --git a/src/views/productionVisualization/equipmentBoard/components/alarmTop.vue b/src/views/productionVisualization/equipmentBoard/components/alarmTop.vue new file mode 100644 index 00000000..30280ff9 --- /dev/null +++ b/src/views/productionVisualization/equipmentBoard/components/alarmTop.vue @@ -0,0 +1,232 @@ + + + + 异常原因Top5 + + + + + 单位/次 + + + + 放货有货 + + + 261,938,984 + + + + + + + + 单位/次 + + + + 车辆故障 + + + 261,938,984 + + + + + + + + 单位/次 + + + + 下发失败 + + + 261,938,984 + + + + + + + + 单位/次 + + + + 取货无货 + + + 261,938,984 + + + + + + + + 单位/次 + + + + 通信中断 + + + 261,938,984 + + + + + + + + + + + + diff --git a/src/views/productionVisualization/equipmentBoard/components/baseContainer/eqIndex.vue b/src/views/productionVisualization/equipmentBoard/components/baseContainer/eqIndex.vue new file mode 100644 index 00000000..e7357f3c --- /dev/null +++ b/src/views/productionVisualization/equipmentBoard/components/baseContainer/eqIndex.vue @@ -0,0 +1,294 @@ + + + + + + + + + + + + + + + + + + + + + + + + {{ title }} + + + + + + + + + + + + + + + + + diff --git a/src/views/productionVisualization/equipmentBoard/components/baseContainer/index.vue b/src/views/productionVisualization/equipmentBoard/components/baseContainer/index.vue new file mode 100644 index 00000000..81f9c84e --- /dev/null +++ b/src/views/productionVisualization/equipmentBoard/components/baseContainer/index.vue @@ -0,0 +1,294 @@ + + + + + + + + + + + + + + + + + + + + + + + + {{ title }} + + + + + + + + + + + + + + + + + diff --git a/src/views/productionVisualization/equipmentBoard/components/baseContainer/powerIndex.vue b/src/views/productionVisualization/equipmentBoard/components/baseContainer/powerIndex.vue new file mode 100644 index 00000000..795abe87 --- /dev/null +++ b/src/views/productionVisualization/equipmentBoard/components/baseContainer/powerIndex.vue @@ -0,0 +1,348 @@ + + + + + + + + + + + + + + + + + + + + + + + + + {{ title }} + + + 芯片数量 + + + + 组件数量 + + + + + + + + + + + + + + + diff --git a/src/views/productionVisualization/equipmentBoard/components/baseStatus.vue b/src/views/productionVisualization/equipmentBoard/components/baseStatus.vue new file mode 100644 index 00000000..75658173 --- /dev/null +++ b/src/views/productionVisualization/equipmentBoard/components/baseStatus.vue @@ -0,0 +1,111 @@ + + + {{ injectData.status }} + + + + + + diff --git a/src/views/productionVisualization/equipmentBoard/components/baseTable.vue b/src/views/productionVisualization/equipmentBoard/components/baseTable.vue new file mode 100644 index 00000000..2d54620d --- /dev/null +++ b/src/views/productionVisualization/equipmentBoard/components/baseTable.vue @@ -0,0 +1,250 @@ + + + + + + + + + + {{ scope.row[item.prop] | commonFilter(item.filter) }} + + + + + + + + + diff --git a/src/views/productionVisualization/equipmentBoard/components/handingObject.vue b/src/views/productionVisualization/equipmentBoard/components/handingObject.vue new file mode 100644 index 00000000..431e834b --- /dev/null +++ b/src/views/productionVisualization/equipmentBoard/components/handingObject.vue @@ -0,0 +1,77 @@ + + + + + + {{ leftContent }} + + + + + {{ rightContent }} + + + + + + diff --git a/src/views/productionVisualization/equipmentBoard/components/mixins/resize.js b/src/views/productionVisualization/equipmentBoard/components/mixins/resize.js new file mode 100644 index 00000000..88542cd7 --- /dev/null +++ b/src/views/productionVisualization/equipmentBoard/components/mixins/resize.js @@ -0,0 +1,62 @@ +/* + * @Author: zhp + * @Date: 2023-08-16 08:43:53 + * @LastEditTime: 2023-09-15 16:12:57 + * @LastEditors: zhp + * @Description: + */ +import { debounce } from '@/utils' + +export default { + data() { + return { + $_sidebarElm: null, + $_resizeHandler: null + } + }, + mounted() { + this.$_resizeHandler = debounce(() => { + if (this.chart) { + this.chart.resize() + } + }, 100) + this.$_initResizeEvent() + this.$_initSidebarResizeEvent() + }, + beforeDestroy() { + this.$_destroyResizeEvent() + this.$_destroySidebarResizeEvent() + }, + // to fixed bug when cached by keep-alive + // https://github.com/PanJiaChen/vue-element-admin/issues/2116 + activated() { + this.$_initResizeEvent() + this.$_initSidebarResizeEvent() + }, + deactivated() { + this.$_destroyResizeEvent() + this.$_destroySidebarResizeEvent() + }, + methods: { + // use $_ for mixins properties + // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential + $_initResizeEvent() { + window.addEventListener('resize', this.$_resizeHandler) + }, + $_destroyResizeEvent() { + window.removeEventListener('resize', this.$_resizeHandler) + }, + $_sidebarResizeHandler(e) { + if (e.propertyName === 'width') { + this.$_resizeHandler() + } + }, + $_initSidebarResizeEvent() { + this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0] + this.$_sidebarElm && this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler) + }, + $_destroySidebarResizeEvent() { + this.$_sidebarElm && this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler) + } + } +} diff --git a/src/views/productionVisualization/equipmentBoard/components/pieChart.vue b/src/views/productionVisualization/equipmentBoard/components/pieChart.vue new file mode 100644 index 00000000..aeabfec7 --- /dev/null +++ b/src/views/productionVisualization/equipmentBoard/components/pieChart.vue @@ -0,0 +1,273 @@ + + + + + + diff --git a/src/views/productionVisualization/equipmentBoard/components/pieChartStatus.vue b/src/views/productionVisualization/equipmentBoard/components/pieChartStatus.vue new file mode 100644 index 00000000..cc071222 --- /dev/null +++ b/src/views/productionVisualization/equipmentBoard/components/pieChartStatus.vue @@ -0,0 +1,259 @@ + + + + + + + + + + + + {{ item.name }} + + + {{ item.value }} + + + + + + + + diff --git a/src/views/productionVisualization/equipmentBoard/components/realTask.vue b/src/views/productionVisualization/equipmentBoard/components/realTask.vue new file mode 100644 index 00000000..d7d9bb1f --- /dev/null +++ b/src/views/productionVisualization/equipmentBoard/components/realTask.vue @@ -0,0 +1,86 @@ + + + + 实时任务 + + + + + + + + diff --git a/src/views/productionVisualization/equipmentBoard/components/styles/btn.scss b/src/views/productionVisualization/equipmentBoard/components/styles/btn.scss new file mode 100644 index 00000000..e6ba1a8e --- /dev/null +++ b/src/views/productionVisualization/equipmentBoard/components/styles/btn.scss @@ -0,0 +1,99 @@ +@import './variables.scss'; + +@mixin colorBtn($color) { + background: $color; + + &:hover { + color: $color; + + &:before, + &:after { + background: $color; + } + } +} + +.blue-btn { + @include colorBtn($blue) +} + +.light-blue-btn { + @include colorBtn($light-blue) +} + +.red-btn { + @include colorBtn($red) +} + +.pink-btn { + @include colorBtn($pink) +} + +.green-btn { + @include colorBtn($green) +} + +.tiffany-btn { + @include colorBtn($tiffany) +} + +.yellow-btn { + @include colorBtn($yellow) +} + +.pan-btn { + font-size: 14px; + color: #fff; + padding: 14px 36px; + border-radius: 8px; + border: none; + outline: none; + transition: 600ms ease all; + position: relative; + display: inline-block; + + &:hover { + background: #fff; + + &:before, + &:after { + width: 100%; + transition: 600ms ease all; + } + } + + &:before, + &:after { + content: ''; + position: absolute; + top: 0; + right: 0; + height: 2px; + width: 0; + transition: 400ms ease all; + } + + &::after { + right: inherit; + top: inherit; + left: 0; + bottom: 0; + } +} + +.custom-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #fff; + color: #fff; + -webkit-appearance: none; + text-align: center; + box-sizing: border-box; + outline: 0; + margin: 0; + padding: 10px 15px; + font-size: 14px; + border-radius: 4px; +} diff --git a/src/views/productionVisualization/equipmentBoard/components/styles/element-ui.scss b/src/views/productionVisualization/equipmentBoard/components/styles/element-ui.scss new file mode 100644 index 00000000..b6edbddf --- /dev/null +++ b/src/views/productionVisualization/equipmentBoard/components/styles/element-ui.scss @@ -0,0 +1,173 @@ +// cover some element-ui styles + +.el-breadcrumb__inner, +.el-breadcrumb__inner a { + font-weight: 400 !important; +} + +.el-upload { + input[type="file"] { + display: none !important; + } +} + +.el-upload__input { + display: none; +} + +.cell { + .el-tag { + margin-right: 0px; + } +} + +.visual-container { + .el-table { + .cell { + line-height: 1.2em !important; + } + } +} +.app-container { + .el-table th>.cell { + color: rgb(0, 0, 0,0.85); + } + .el-table__body tr.current-row>td { + background-color: #EAF1FC; + } + +} +.el-table--medium th, .el-table--medium td { + padding: 5px 0; +} + +::v-deep .el-table__fixed-right { + right: 0 !important; + height: 100% !important; +} +.el-button--mini { + padding: 4px 0; +} +.small-padding { + .cell { + padding-left: 5px; + padding-right: 5px; + } +} + +.fixed-width { + .el-button--mini { + padding: 7px 10px; + min-width: 60px; + } +} + +.status-col { + .cell { + padding: 0 10px; + text-align: center; + + .el-tag { + margin-right: 0px; + } + } +} + +.el-button--primary { + background-color: #0B58FF !important; + border-color: #0B58FF !important; +} +// to fixed https://github.com/ElemeFE/element/issues/2461 +.el-dialog { + transform: none; + left: 0; + position: relative; + margin: 0 auto; + border-radius: 4px; +} + +.el-dialog__header { + padding: 12px 24px 8px; + border-bottom: 1px solid #E9E9E9; + text-align: left; +} + +.el-dialog__title { + font-size: 16px; + font-weight: 700; + color: rgba(0, 0, 0, 0.85); +} + +.el-form-item__label { + font-size: 14px; + font-weight: 400; + color: rgba(0, 0, 0, 0.65); + padding-right: 8px; +} + +.el-dialog__headerbtn { + top: 16px; + right: 24px; +} + +.el-form-item--medium .el-form-item__label { + line-height: 32px; +} + +.el-button--medium { + padding: 8px 16px; +} + +.el-select { + width: 100%; +} + +.el-switch.is-checked .el-switch__core { + background-color: #0B58FF; + border-color: #0B58FF; +} + +.el-radio__input.is-checked .el-radio__inner { + background-color: #0B58FF; + border-color: #0B58FF; +} + +.el-button--text{ + color:#0B58FF; +} + +.el-tabs__item.is-active { + color: #0b58ff; +} + +.el-tooltip__popper.is-dark { + max-width: 1100px; +} +// refine element ui upload +.upload-container { + .el-upload { + width: 100%; + + .el-upload-dragger { + width: 100%; + height: 200px; + } + } +} + +// dropdown +.el-dropdown-menu { + a { + display: block + } +} + +// fix date-picker ui bug in filter-item +.el-range-editor.el-input__inner { + display: inline-flex !important; +} + +// to fix el-date-picker css style +.el-range-separator { + box-sizing: content-box; +} diff --git a/src/views/productionVisualization/equipmentBoard/components/styles/element-variables.scss b/src/views/productionVisualization/equipmentBoard/components/styles/element-variables.scss new file mode 100644 index 00000000..5bdc4dad --- /dev/null +++ b/src/views/productionVisualization/equipmentBoard/components/styles/element-variables.scss @@ -0,0 +1,31 @@ +/** +* I think element-ui's default theme color is too light for long-term use. +* So I modified the default color and you can modify it to your liking. +**/ + +/* theme color */ +$--color-primary: #1890ff; +$--color-success: #13ce66; +$--color-warning: #ffba00; +$--color-danger: #ff4949; +// $--color-info: #1E1E1E; + +$--button-font-weight: 400; + +// $--color-text-regular: #1f2d3d; + +$--border-color-light: #dfe4ed; +$--border-color-lighter: #e6ebf5; + +$--table-border: 1px solid #dfe6ec; + +/* icon font path, required */ +$--font-path: "~element-ui/lib/theme-chalk/fonts"; + +@import "~element-ui/packages/theme-chalk/src/index"; + +// the :export directive is the magic sauce for webpack +// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass +:export { + theme: $--color-primary; +} diff --git a/src/views/productionVisualization/equipmentBoard/components/styles/index.scss b/src/views/productionVisualization/equipmentBoard/components/styles/index.scss new file mode 100644 index 00000000..577e7e66 --- /dev/null +++ b/src/views/productionVisualization/equipmentBoard/components/styles/index.scss @@ -0,0 +1,319 @@ +@import './variables.scss'; +@import './mixin.scss'; +@import './transition.scss'; +@import './element-ui.scss'; +@import './sidebar.scss'; +@import './btn.scss'; + +body { + height: 100%; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif; +} + +label { + font-weight: 700; +} + +html { + height: 100%; + box-sizing: border-box; +} + +#app { + height: 100%; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +.no-padding { + padding: 0px !important; +} + +.padding-content { + padding: 4px 0; +} + +a:focus, +a:active { + outline: none; +} + +a, +a:focus, +a:hover { + cursor: pointer; + color: inherit; + text-decoration: none; +} + +div:focus { + outline: none; +} + +.fr { + float: right; +} + +.fl { + float: left; +} + +.pr-5 { + padding-right: 5px; +} + +.pl-5 { + padding-left: 5px; +} + +.block { + display: block; +} + +.pointer { + cursor: pointer; +} + +.inlineBlock { + display: block; +} + +.clearfix { + &:after { + visibility: hidden; + display: block; + font-size: 0; + content: " "; + clear: both; + height: 0; + } +} + +aside { + background: #eef1f6; + padding: 8px 24px; + margin-bottom: 20px; + border-radius: 2px; + display: block; + line-height: 32px; + font-size: 16px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + color: #2c3e50; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + a { + color: #337ab7; + cursor: pointer; + + &:hover { + color: rgb(32, 160, 255); + } + } +} + +//main-container全局样式 +.app-container { + margin:0 16px 0; + background-color: #fff; + border-radius: 4px; + padding: 16px 16px 0; + height: calc(100vh - 134px); + overflow: auto; +} + +.components-container { + margin: 30px 50px; + position: relative; +} + +// 覆盖原有的分页样式-start + +.el-pagination { + position: relative; +} + +.el-pagination.is-background .btn-prev,.el-pagination.is-background .btn-next,.el-pagination.is-background .el-pager li { + background-color: #fff; +} + +.el-pagination__jump { + margin-left: 125px; +} + +.el-pagination__sizes { + position: absolute; + right: 100px; +} + +.el-pagination.is-background .el-pager li:not(.disabled).active { + background-color: #0B58FF; +} +.el-pagination .el-select .el-input .el-input__inner { + height: 22px; +} +.el-badge__content { + border: none; +} +// 覆盖原有的分页样式-end + +.text-center { + text-align: center +} + +.sub-navbar { + height: 50px; + line-height: 50px; + position: relative; + width: 100%; + text-align: right; + padding-right: 20px; + transition: 600ms ease position; + background: linear-gradient(90deg, rgba(32, 182, 249, 1) 0%, rgba(32, 182, 249, 1) 0%, rgba(33, 120, 241, 1) 100%, rgba(33, 120, 241, 1) 100%); + + .subtitle { + font-size: 20px; + color: #fff; + } + + &.draft { + background: #d0d0d0; + } + + &.deleted { + background: #d0d0d0; + } +} + +.link-type, +.link-type:focus { + color: #337ab7; + cursor: pointer; + + &:hover { + color: rgb(32, 160, 255); + } +} + +.filter-container { + padding-bottom: 10px; + + .filter-item { + display: inline-block; + vertical-align: middle; + margin-bottom: 10px; + } +} + +//refine vue-multiselect plugin +.multiselect { + line-height: 16px; +} + +.multiselect--active { + z-index: 1000 !important; +} + +// 业务代码中 +.content-row { + padding: 10px 0; +} + +.el-dialog { + width: 1000px; +} +.el-dialog__body { + padding: 30px 40px; +} + +.el-dialog__wrapper { + backdrop-filter: blur(5px); +} + +::-webkit-scrollbar { + width: 8px; + height: 8px; + background-color: transparent; +} + +::-webkit-scrollbar-track-piece { + background-color:rgba(144,147,153,0); +} + +::-webkit-scrollbar-corner { + background-color:rgba(144,147,153,0); +} + +::-webkit-scrollbar-track { + width: 6px; + background: rgba(144,147,153,0); + -webkit-border-radius: 2em; + -moz-border-radius: 2em; + border-radius: 2em; +} + +::-webkit-scrollbar-thumb { + background-color: rgba(144,147,153,.5); + background-clip: padding-box; + min-height: 28px; + -webkit-border-radius: 2em; + -moz-border-radius: 2em; + border-radius: 2em; + transition: background-color .3s; + cursor: pointer; +} + +::-webkit-scrollbar-thumb:hover { + background-color: rgba(144,147,153,.3); +} + +// 数据分析单选框样式覆盖 + +.app-container{ + .data-analysis-radio{ + .el-radio-button__inner { + border: 0; + padding: 7px 0; + margin: 0 15px; + } + .el-radio-button__orig-radio:checked+.el-radio-button__inner{ + background-color: transparent; + color: #606266; + box-shadow: 0 0 0 0 transparent; + border-bottom: 2px solid #0B58FF; + } + .el-radio-button:first-child .el-radio-button__inner, + .el-radio-button:last-child .el-radio-button__inner { + border-radius: 0; + } + } +} + +.el-table--group, .el-table--border { + border: none; +} + +// 全局loading样式覆盖 +.el-loading-mask{ + z-index: 99999; +} + + +input::-webkit-input-placeholder { + /* WebKit browsers */ + font-size:12px; +} +input::-moz-placeholder { + /* Mozilla Firefox 19+ */ + font-size:12px; +} +input:-ms-input-placeholder { + font-size:12px; +} \ No newline at end of file diff --git a/src/views/productionVisualization/equipmentBoard/components/styles/mixin.scss b/src/views/productionVisualization/equipmentBoard/components/styles/mixin.scss new file mode 100644 index 00000000..06fa0612 --- /dev/null +++ b/src/views/productionVisualization/equipmentBoard/components/styles/mixin.scss @@ -0,0 +1,66 @@ +@mixin clearfix { + &:after { + content: ""; + display: table; + clear: both; + } +} + +@mixin scrollBar { + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } +} + +@mixin relative { + position: relative; + width: 100%; + height: 100%; +} + +@mixin pct($pct) { + width: #{$pct}; + position: relative; + margin: 0 auto; +} + +@mixin triangle($width, $height, $color, $direction) { + $width: $width/2; + $color-border-style: $height solid $color; + $transparent-border-style: $width solid transparent; + height: 0; + width: 0; + + @if $direction==up { + border-bottom: $color-border-style; + border-left: $transparent-border-style; + border-right: $transparent-border-style; + } + + @else if $direction==right { + border-left: $color-border-style; + border-top: $transparent-border-style; + border-bottom: $transparent-border-style; + } + + @else if $direction==down { + border-top: $color-border-style; + border-left: $transparent-border-style; + border-right: $transparent-border-style; + } + + @else if $direction==left { + border-right: $color-border-style; + border-top: $transparent-border-style; + border-bottom: $transparent-border-style; + } +} diff --git a/src/views/productionVisualization/equipmentBoard/components/styles/sidebar.scss b/src/views/productionVisualization/equipmentBoard/components/styles/sidebar.scss new file mode 100644 index 00000000..4c2691e4 --- /dev/null +++ b/src/views/productionVisualization/equipmentBoard/components/styles/sidebar.scss @@ -0,0 +1,209 @@ +#app { + + .main-container { + min-height: 100%; + transition: margin-left .28s; + // margin-left: $sideBarWidth; + position: relative; + } + + .sidebar-container { + transition: width 0.28s; + // width: $sideBarWidth !important; + // background-color: $menuBg; + height: 100%; + position: fixed; + font-size: 0px; + top: 0; + bottom: 0; + left: 0; + z-index: 1001; + overflow: hidden; + + // reset element-ui css + .horizontal-collapse-transition { + transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out; + } + + .scrollbar-wrapper { + overflow-x: hidden !important; + } + + .el-scrollbar__bar.is-vertical { + right: 0px; + } + + .el-scrollbar { + height: 100%; + } + + &.has-logo { + .el-scrollbar { + height: calc(100% - 50px); + } + } + + .is-horizontal { + display: none; + } + + a { + display: inline-block; + width: 100%; + overflow: hidden; + } + + .svg-icon { + margin-right: 16px; + } + + .el-menu { + border: none; + height: 100%; + width: 100% !important; + } + + // menu hover + .submenu-title-noDropdown, + .el-submenu__title { + &:hover { + // background-color: $menuHover !important; + } + } + + .is-active>.el-submenu__title { + // color: $subMenuActiveText !important; + } + + & .nest-menu .el-submenu>.el-submenu__title, + & .el-submenu .el-menu-item { + // min-width: $sideBarWidth !important; + // background-color: $subMenuBg !important; + + &:hover { + // background-color: $subMenuHover !important; + } + } + } + + .hideSidebar { + .sidebar-container { + width: 54px !important; + } + + .main-container { + margin-left: 54px; + } + + .submenu-title-noDropdown { + padding: 0 !important; + position: relative; + + .el-tooltip { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + } + } + + .el-submenu { + overflow: hidden; + + &>.el-submenu__title { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + + .el-submenu__icon-arrow { + display: none; + } + } + } + + .el-menu--collapse { + .el-submenu { + &>.el-submenu__title { + &>span { + height: 0; + width: 0; + overflow: hidden; + visibility: hidden; + display: inline-block; + } + } + } + } + } + + .el-menu--collapse .el-menu .el-submenu { + // min-width: $sideBarWidth !important; + } + + // mobile responsive + .mobile { + .main-container { + margin-left: 0px; + } + + .sidebar-container { + transition: transform .28s; + // width: $sideBarWidth !important; + } + + &.hideSidebar { + .sidebar-container { + pointer-events: none; + transition-duration: 0.3s; + // transform: translate3d(-$sideBarWidth, 0, 0); + } + } + } + + .withoutAnimation { + + .main-container, + .sidebar-container { + transition: none; + } + } +} + +// when menu collapsed +.el-menu--vertical { + &>.el-menu { + .svg-icon { + margin-right: 16px; + } + } + + .nest-menu .el-submenu>.el-submenu__title, + .el-menu-item { + &:hover { + // you can use $subMenuHover + // background-color: $menuHover !important; + } + } + + // the scroll bar appears when the subMenu is too long + >.el-menu--popup { + max-height: 100vh; + overflow-y: auto; + + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } + } +} diff --git a/src/views/productionVisualization/equipmentBoard/components/styles/transition.scss b/src/views/productionVisualization/equipmentBoard/components/styles/transition.scss new file mode 100644 index 00000000..4cb27cc8 --- /dev/null +++ b/src/views/productionVisualization/equipmentBoard/components/styles/transition.scss @@ -0,0 +1,48 @@ +// global transition css + +/* fade */ +.fade-enter-active, +.fade-leave-active { + transition: opacity 0.28s; +} + +.fade-enter, +.fade-leave-active { + opacity: 0; +} + +/* fade-transform */ +.fade-transform-leave-active, +.fade-transform-enter-active { + transition: all .5s; +} + +.fade-transform-enter { + opacity: 0; + transform: translateX(-30px); +} + +.fade-transform-leave-to { + opacity: 0; + transform: translateX(30px); +} + +/* breadcrumb transition */ +.breadcrumb-enter-active, +.breadcrumb-leave-active { + transition: all .5s; +} + +.breadcrumb-enter, +.breadcrumb-leave-active { + opacity: 0; + transform: translateX(20px); +} + +.breadcrumb-move { + transition: all .5s; +} + +.breadcrumb-leave-active { + position: absolute; +} diff --git a/src/views/productionVisualization/equipmentBoard/components/styles/variables.scss b/src/views/productionVisualization/equipmentBoard/components/styles/variables.scss new file mode 100644 index 00000000..e96d9af7 --- /dev/null +++ b/src/views/productionVisualization/equipmentBoard/components/styles/variables.scss @@ -0,0 +1,35 @@ +// base color +$blue:#324157; +$light-blue:#3A71A8; +$red:#C03639; +$pink: #E65D6E; +$green: #30B08F; +$tiffany: #4AB7BD; +$yellow:#FEC171; +$panGreen: #30B08F; + +// sidebar +$menuText:#bfcbd9; +$menuActiveText:#409EFF; +$subMenuActiveText:#f4f4f5; // https://github.com/ElemeFE/element/issues/12951 + +$menuBg:#304156; +$menuHover:#263445; + +$subMenuBg:#0B253F; +$subMenuHover:#001528; + +$sideBarWidth: 248px; + +// the :export directive is the magic sauce for webpack +// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass +:export { + menuText: $menuText; + menuActiveText: $menuActiveText; + subMenuActiveText: $subMenuActiveText; + // menuBg: $menuBg; + menuHover: $menuHover; + subMenuBg: $subMenuBg; + subMenuHover: $subMenuHover; + sideBarWidth: $sideBarWidth; +} diff --git a/src/views/productionVisualization/equipmentBoard/components/taskStatus.vue b/src/views/productionVisualization/equipmentBoard/components/taskStatus.vue new file mode 100644 index 00000000..c6b8aa0f --- /dev/null +++ b/src/views/productionVisualization/equipmentBoard/components/taskStatus.vue @@ -0,0 +1,66 @@ + + + + 任务状态占比 ·今日 + + + + + + + + diff --git a/src/views/productionVisualization/equipmentBoard/components/taskType.vue b/src/views/productionVisualization/equipmentBoard/components/taskType.vue new file mode 100644 index 00000000..8a3850b7 --- /dev/null +++ b/src/views/productionVisualization/equipmentBoard/components/taskType.vue @@ -0,0 +1,66 @@ + + + + 任务类型占比 ·今日 + + + + + + + + diff --git a/src/views/productionVisualization/equipmentBoard/components/threeDimensionalChart.vue b/src/views/productionVisualization/equipmentBoard/components/threeDimensionalChart.vue new file mode 100644 index 00000000..a7f38f0f --- /dev/null +++ b/src/views/productionVisualization/equipmentBoard/components/threeDimensionalChart.vue @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{ status.text }} + + + + + + + + + + diff --git a/src/views/productionVisualization/equipmentBoard/index.vue b/src/views/productionVisualization/equipmentBoard/index.vue new file mode 100644 index 00000000..c953c455 --- /dev/null +++ b/src/views/productionVisualization/equipmentBoard/index.vue @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/yarn.lock b/yarn.lock index 8d649fcd..f067da31 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3157,6 +3157,11 @@ "resolved" "https://registry.npmmirror.com/check-types/-/check-types-8.0.3.tgz" "version" "8.0.3" +"chinese-lunar@^0.1.4": + "integrity" "sha512-E4seb9UZkSJtkm65Ry2ZLWTw5Z87DOyGcCePdg3ft7da342hnEliMtcDAPSn+YSo/o0xl1Egmhh671kxEJgY+g==" + "resolved" "https://registry.npmmirror.com/chinese-lunar/-/chinese-lunar-0.1.4.tgz" + "version" "0.1.4" + "chokidar@^2.1.8": "integrity" "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==" "resolved" "https://registry.npmmirror.com/chokidar/-/chokidar-2.1.8.tgz"