Compare commits
	
		
			30 Commits
		
	
	
		
			projects/q
			...
			projects/z
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 86a9e425a9 | |||
| d4495e97f1 | |||
| 755fe3adab | |||
| d380907298 | |||
| 94874a9d76 | |||
| b7d65b47c8 | |||
| cc65c44cb8 | |||
| 3e13028f9f | |||
| b28816f515 | |||
| 9c1f36d460 | |||
| 67e3b08c82 | |||
| afb62375da | |||
| e93e7d530d | |||
| 86eca859aa | |||
| 1e9bfee1e7 | |||
| b4985d4018 | |||
| ea47028178 | |||
| eaf00466db | |||
| 1434eaa3ac | |||
| bc2b51d0e3 | |||
| e58c60e6f7 | |||
| 445cd9630d | |||
| e314e84b43 | |||
| 491b88f220 | |||
| d5744b4f3d | |||
| c138755a54 | |||
| d764eae48d | |||
| baffb1f6f8 | |||
| 8ecc5db385 | |||
| 77259329d9 | 
							
								
								
									
										12
									
								
								.env.dev
									
									
									
									
									
								
							
							
						
						@@ -1,7 +1,7 @@
 | 
				
			|||||||
###
 | 
					###
 | 
				
			||||||
 # @Author: Do not edit
 | 
					 # @Author: Do not edit
 | 
				
			||||||
 # @Date: 2023-08-29 09:40:39
 | 
					 # @Date: 2023-08-29 09:40:39
 | 
				
			||||||
 # @LastEditTime: 2024-11-25 14:31:39
 | 
					 # @LastEditTime: 2025-03-05 16:46:35
 | 
				
			||||||
 # @LastEditors: zwq
 | 
					 # @LastEditors: zwq
 | 
				
			||||||
 # @Description:
 | 
					 # @Description:
 | 
				
			||||||
###
 | 
					###
 | 
				
			||||||
@@ -9,10 +9,16 @@
 | 
				
			|||||||
ENV = 'development'
 | 
					ENV = 'development'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# 页面标题
 | 
					# 页面标题
 | 
				
			||||||
VUE_APP_TITLE = 智能监控分析系统
 | 
					VUE_APP_TITLE = 成本管理系统
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# 芋道管理系统/开发环境
 | 
					# 芋道管理系统/开发环境
 | 
				
			||||||
VUE_APP_BASE_API = 'http://172.16.32.79:48080'
 | 
					# VUE_APP_BASE_API = 'http://192.168.1.49:48080'
 | 
				
			||||||
 | 
					# VUE_APP_BASE_API = 'http://line-sczg.kszny.picaiba.com'
 | 
				
			||||||
 | 
					VUE_APP_BASE_API = 'http://100.64.0.45:48080'
 | 
				
			||||||
 | 
					# VUE_APP_BASE_API = 'http://172.16.33.10:48080'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# ws地址
 | 
				
			||||||
 | 
					VUE_APP_WS_API = 'ws://100.64.0.45:48080'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# 路由懒加载
 | 
					# 路由懒加载
 | 
				
			||||||
VUE_CLI_BABEL_TRANSPILE_MODULES = true
 | 
					VUE_CLI_BABEL_TRANSPILE_MODULES = true
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,14 +2,14 @@
 | 
				
			|||||||
 # @Author: zwq
 | 
					 # @Author: zwq
 | 
				
			||||||
 # @Date: 2024-03-27 15:49:55
 | 
					 # @Date: 2024-03-27 15:49:55
 | 
				
			||||||
 # @LastEditors: zwq
 | 
					 # @LastEditors: zwq
 | 
				
			||||||
 # @LastEditTime: 2024-10-30 11:08:47
 | 
					 # @LastEditTime: 2025-03-05 16:30:45
 | 
				
			||||||
 # @Description:
 | 
					 # @Description:
 | 
				
			||||||
###
 | 
					###
 | 
				
			||||||
# 生产环境配置
 | 
					# 生产环境配置
 | 
				
			||||||
ENV = 'production'
 | 
					ENV = 'production'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# 页面标题
 | 
					# 页面标题
 | 
				
			||||||
VUE_APP_TITLE = 智能监控分析系统
 | 
					VUE_APP_TITLE = 成本管理系统
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# 芋道管理系统/生产环境
 | 
					# 芋道管理系统/生产环境
 | 
				
			||||||
# VUE_APP_BASE_API = '/prod-api'
 | 
					# VUE_APP_BASE_API = '/prod-api'
 | 
				
			||||||
@@ -20,6 +20,9 @@ VUE_APP_BASE_API = ''
 | 
				
			|||||||
# PUBLIC_PATH = 'http://192.168.0.33:8888/'
 | 
					# PUBLIC_PATH = 'http://192.168.0.33:8888/'
 | 
				
			||||||
PUBLIC_PATH = ''
 | 
					PUBLIC_PATH = ''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# ws地址
 | 
				
			||||||
 | 
					VUE_APP_WS_API = 'ws://10.1.17.10:48080'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# 二级部署路径
 | 
					# 二级部署路径
 | 
				
			||||||
VUE_APP_APP_NAME ='yudao-admin'
 | 
					VUE_APP_APP_NAME ='yudao-admin'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -21,3 +21,5 @@ selenium-debug.log
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
package-lock.json
 | 
					package-lock.json
 | 
				
			||||||
echarts.js
 | 
					echarts.js
 | 
				
			||||||
 | 
					sync_line_sczg_prod.bat
 | 
				
			||||||
 | 
					sync_line_sczg_aliyun.bat
 | 
				
			||||||
@@ -52,7 +52,6 @@
 | 
				
			|||||||
    "crypto-js": "^4.0.0",
 | 
					    "crypto-js": "^4.0.0",
 | 
				
			||||||
    "diagram-js": "^12.3.0",
 | 
					    "diagram-js": "^12.3.0",
 | 
				
			||||||
    "echarts": "5.4.0",
 | 
					    "echarts": "5.4.0",
 | 
				
			||||||
    "el-tree-transfer": "^2.4.7",
 | 
					 | 
				
			||||||
    "element-ui": "2.15.12",
 | 
					    "element-ui": "2.15.12",
 | 
				
			||||||
    "file-saver": "^2.0.5",
 | 
					    "file-saver": "^2.0.5",
 | 
				
			||||||
    "fuse.js": "6.6.2",
 | 
					    "fuse.js": "6.6.2",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,10 +1,3 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * @Author: zwq
 | 
					 | 
				
			||||||
 * @Date: 2024-10-29 09:47:40
 | 
					 | 
				
			||||||
 * @LastEditors: zwq
 | 
					 | 
				
			||||||
 * @LastEditTime: 2025-02-26 16:27:48
 | 
					 | 
				
			||||||
 * @Description:
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
import request from '@/utils/request'
 | 
					import request from '@/utils/request'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 创建实时数据采集配置
 | 
					// 创建实时数据采集配置
 | 
				
			||||||
@@ -59,11 +52,3 @@ export function exportEquipmentPlcExcel(query) {
 | 
				
			|||||||
    responseType: 'blob'
 | 
					    responseType: 'blob'
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
// 获得code
 | 
					 | 
				
			||||||
export function getCode() {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/equipment-group/getCode',
 | 
					 | 
				
			||||||
    method: 'get'
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,10 +1,3 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * @Author: zwq
 | 
					 | 
				
			||||||
 * @Date: 2024-10-29 09:47:40
 | 
					 | 
				
			||||||
 * @LastEditors: zwq
 | 
					 | 
				
			||||||
 * @LastEditTime: 2025-02-12 09:25:11
 | 
					 | 
				
			||||||
 * @Description:
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
import request from '@/utils/request'
 | 
					import request from '@/utils/request'
 | 
				
			||||||
// 获得工厂产线工段设备树形结构
 | 
					// 获得工厂产线工段设备树形结构
 | 
				
			||||||
export function getTree() {
 | 
					export function getTree() {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -51,13 +51,6 @@ export function getCode() {
 | 
				
			|||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 获得可用的班次列表
 | 
					 | 
				
			||||||
export function listClassesEnabled() {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-classes/listEnable',
 | 
					 | 
				
			||||||
    method: 'get'
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
// 导出班次基础信息 Excel
 | 
					// 导出班次基础信息 Excel
 | 
				
			||||||
export function exportGroupClassesExcel(query) {
 | 
					export function exportGroupClassesExcel(query) {
 | 
				
			||||||
  return request({
 | 
					  return request({
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,125 +0,0 @@
 | 
				
			|||||||
import request from '@/utils/request'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 创建排班计划配置基础信息
 | 
					 | 
				
			||||||
export function createGroupPlan(data) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-scheduling-plan/create',
 | 
					 | 
				
			||||||
    method: 'post',
 | 
					 | 
				
			||||||
    data: data
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 更新排班计划配置基础信息
 | 
					 | 
				
			||||||
export function updateGroupPlan(data) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-scheduling-plan/update',
 | 
					 | 
				
			||||||
    method: 'put',
 | 
					 | 
				
			||||||
    data: data
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 删除排班计划配置基础信息
 | 
					 | 
				
			||||||
export function deleteGroupPlan(id) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-scheduling-plan/delete?id=' + id,
 | 
					 | 
				
			||||||
    method: 'delete'
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 获得排班计划配置基础信息
 | 
					 | 
				
			||||||
export function getGroupPlan(id) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-scheduling-plan/get?id=' + id,
 | 
					 | 
				
			||||||
    method: 'get'
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 获得排班计划配置基础信息分页
 | 
					 | 
				
			||||||
export function getGroupPlanPage(query) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-scheduling-plan/page',
 | 
					 | 
				
			||||||
    method: 'get',
 | 
					 | 
				
			||||||
    params: query
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 获得所有排班计划列表
 | 
					 | 
				
			||||||
export function groupPlanList() {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-scheduling-plan/listAll',
 | 
					 | 
				
			||||||
    method: 'get'
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
// 获得排班计划相关班组列表
 | 
					 | 
				
			||||||
export function groupPlanTeamList(id) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-scheduling-plan-team/teamListByPlanId?planId=' + id,
 | 
					 | 
				
			||||||
    method: 'get'
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
// 获得排班计划相关班次列表
 | 
					 | 
				
			||||||
export function groupPlanClassesList(id) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-scheduling-plan-classes/classesListByPlanId?planId=' + id,
 | 
					 | 
				
			||||||
    method: 'get'
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
// 获取code
 | 
					 | 
				
			||||||
export function getCode() {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-scheduling-plan/getCode',
 | 
					 | 
				
			||||||
    method: 'get'
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 导出排班计划配置基础信息 Excel
 | 
					 | 
				
			||||||
export function exportGroupPlanExcel(query) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-scheduling-plan/export-excel',
 | 
					 | 
				
			||||||
    method: 'get',
 | 
					 | 
				
			||||||
    params: query,
 | 
					 | 
				
			||||||
    responseType: 'blob'
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 获得产线工段树形结构
 | 
					 | 
				
			||||||
export function getGroupPlanTree() {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-scheduling-plan/getLineSectionTree',
 | 
					 | 
				
			||||||
    method: 'get'
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 创建排班计划产线工段
 | 
					 | 
				
			||||||
export function createGroupPlanLine(data) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-scheduling-plan-line-section/createPlanLineSection',
 | 
					 | 
				
			||||||
    method: 'post',
 | 
					 | 
				
			||||||
    data: data
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 更新排班计划产线工段
 | 
					 | 
				
			||||||
export function updateGroupPlanLine(data) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-scheduling-plan-line-section/updatePlanLineSection',
 | 
					 | 
				
			||||||
    method: 'put',
 | 
					 | 
				
			||||||
    data: data
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 获得排班计划配置基础信息
 | 
					 | 
				
			||||||
export function getGroupPlanLine(id) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-scheduling-plan-line-section/getLineSectionByPlanId?planId=' + id,
 | 
					 | 
				
			||||||
    method: 'get'
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 获得当前登录用户所在部门id
 | 
					 | 
				
			||||||
export function getLoginUserDeptId() {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-scheduling-plan-line-section/getLoginUserDeptId',
 | 
					 | 
				
			||||||
    method: 'get'
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,60 +0,0 @@
 | 
				
			|||||||
import request from '@/utils/request'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 创建排班规则基础信息
 | 
					 | 
				
			||||||
export function createGroupRule(data) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-scheduling-rule/create',
 | 
					 | 
				
			||||||
    method: 'post',
 | 
					 | 
				
			||||||
    data: data
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
// 作废排班规则
 | 
					 | 
				
			||||||
export function disableGroupRule(id) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-scheduling-rule/disable?id=' + id,
 | 
					 | 
				
			||||||
    method: 'post',
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
// 更新排班规则基础信息
 | 
					 | 
				
			||||||
export function updateGroupRule(data) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-scheduling-rule/update',
 | 
					 | 
				
			||||||
    method: 'put',
 | 
					 | 
				
			||||||
    data: data
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 删除排班规则基础信息
 | 
					 | 
				
			||||||
export function deleteGroupRule(id) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-scheduling-rule/delete?id=' + id,
 | 
					 | 
				
			||||||
    method: 'delete'
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 获得排班规则基础信息
 | 
					 | 
				
			||||||
export function getGroupRule(id) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-scheduling-rule/get?id=' + id,
 | 
					 | 
				
			||||||
    method: 'get'
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 获得排班规则基础信息分页
 | 
					 | 
				
			||||||
export function getGroupRulePage(query) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-scheduling-rule/page',
 | 
					 | 
				
			||||||
    method: 'get',
 | 
					 | 
				
			||||||
    params: query
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 导出排班规则基础信息 Excel
 | 
					 | 
				
			||||||
export function exportGroupRuleExcel(query) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-scheduling-rule/export-excel',
 | 
					 | 
				
			||||||
    method: 'get',
 | 
					 | 
				
			||||||
    params: query,
 | 
					 | 
				
			||||||
    responseType: 'blob'
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -58,49 +58,3 @@ export function listEnabled() {
 | 
				
			|||||||
    method: 'get'
 | 
					    method: 'get'
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
// 获得班组组员信息分页
 | 
					 | 
				
			||||||
export function groupTeamPage(query) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-team-det/page',
 | 
					 | 
				
			||||||
    method: 'get',
 | 
					 | 
				
			||||||
    params: query
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 获得班组组员信息
 | 
					 | 
				
			||||||
export function groupTeamDet(query) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-team-det/get',
 | 
					 | 
				
			||||||
    method: 'get',
 | 
					 | 
				
			||||||
    params: query
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 创建班组组员信息
 | 
					 | 
				
			||||||
export function teamDetCreate(data) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-team-det/create',
 | 
					 | 
				
			||||||
    method: 'post',
 | 
					 | 
				
			||||||
    data: data
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 更新班组组员信息
 | 
					 | 
				
			||||||
export function teamDetUpdate(data) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-team-det/update',
 | 
					 | 
				
			||||||
    method: 'put',
 | 
					 | 
				
			||||||
    data: data
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 删除班组组员信息
 | 
					 | 
				
			||||||
export function teamDetDelete(query) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-team-det/delete',
 | 
					 | 
				
			||||||
    method: 'delete',
 | 
					 | 
				
			||||||
    params: query
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,14 +8,7 @@ export function getPreset(query) {
 | 
				
			|||||||
    params: query
 | 
					    params: query
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
// 获取某月预排班
 | 
					
 | 
				
			||||||
export function getScheduling(query) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-team-scheduling/getScheduling',
 | 
					 | 
				
			||||||
    method: 'get',
 | 
					 | 
				
			||||||
    params: query
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
// 批量创建-更新排班信息
 | 
					// 批量创建-更新排班信息
 | 
				
			||||||
export function createOrUpdateList(data) {
 | 
					export function createOrUpdateList(data) {
 | 
				
			||||||
  return request({
 | 
					  return request({
 | 
				
			||||||
@@ -33,22 +26,3 @@ export function autoSet(query) {
 | 
				
			|||||||
    params: query
 | 
					    params: query
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
// 获得排班信息分页
 | 
					 | 
				
			||||||
export function schedulingPage(query) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-team-scheduling/page',
 | 
					 | 
				
			||||||
    method: 'get',
 | 
					 | 
				
			||||||
    params: query
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 导出Excel
 | 
					 | 
				
			||||||
export function exportSchedulingExcel(query) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-team-scheduling/export-excel',
 | 
					 | 
				
			||||||
    method: 'get',
 | 
					 | 
				
			||||||
    params: query,
 | 
					 | 
				
			||||||
    responseType: 'blob'
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,26 +0,0 @@
 | 
				
			|||||||
import request from '@/utils/request'
 | 
					 | 
				
			||||||
// 获得所有员工列表
 | 
					 | 
				
			||||||
export function getWorkerList() {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/core-worker/listAll',
 | 
					 | 
				
			||||||
    method: 'get'
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 获得员工
 | 
					 | 
				
			||||||
export function getWorker(query) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/core-worker/get',
 | 
					 | 
				
			||||||
    method: 'get',
 | 
					 | 
				
			||||||
    params: query
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 获得该班组其他可选组员列表(除去现有组员)
 | 
					 | 
				
			||||||
export function otherWorkerList(query) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/group-team-det/otherWorkerList',
 | 
					 | 
				
			||||||
    method: 'get',
 | 
					 | 
				
			||||||
    params: query
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * @Author: zhp
 | 
					 * @Author: zhp
 | 
				
			||||||
 * @Date: 2023-09-12 14:07:04
 | 
					 * @Date: 2023-09-12 14:07:04
 | 
				
			||||||
 * @LastEditTime: 2025-01-08 15:47:17
 | 
					 * @LastEditTime: 2023-09-13 09:53:45
 | 
				
			||||||
 * @LastEditors: zwq
 | 
					 * @LastEditors: zhp
 | 
				
			||||||
 * @Description:
 | 
					 * @Description:
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
import request from '@/utils/request'
 | 
					import request from '@/utils/request'
 | 
				
			||||||
@@ -22,26 +22,3 @@ export function getCT(data) {
 | 
				
			|||||||
    data: data
 | 
					    data: data
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
// 获取产线平衡分析数据(new)
 | 
					 | 
				
			||||||
export function getNewCTNow(data) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/analysis/production-analysis/getNewCTNow',
 | 
					 | 
				
			||||||
    method: 'post',
 | 
					 | 
				
			||||||
    data: data
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
// 获取产线平衡分析数据趋势图(new)
 | 
					 | 
				
			||||||
export function getNewCTCharts(data) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/analysis/production-analysis/getNewCTCharts',
 | 
					 | 
				
			||||||
    method: 'post',
 | 
					 | 
				
			||||||
    data: data
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
// 获取产线平衡分析数据设备list(new)
 | 
					 | 
				
			||||||
export function getNewCTDet(id) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/analysis/production-analysis/getNewCTDet?lineId='+id,
 | 
					 | 
				
			||||||
    method: 'get',
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -58,12 +58,3 @@ export function exportFactoryExcel(query) {
 | 
				
			|||||||
    responseType: 'blob'
 | 
					    responseType: 'blob'
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
// 获取产线设备状态
 | 
					 | 
				
			||||||
export function getLineEqStatus(data) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
		url: '/monitoring/equipment-monitor/getLineEqStatus',
 | 
					 | 
				
			||||||
		method: 'post',
 | 
					 | 
				
			||||||
		data: data,
 | 
					 | 
				
			||||||
	});
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,28 +0,0 @@
 | 
				
			|||||||
import request from '@/utils/request'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 切换工艺
 | 
					 | 
				
			||||||
export function switchLineBindProcess(data) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/line-bind-process/switch',
 | 
					 | 
				
			||||||
    method: 'put',
 | 
					 | 
				
			||||||
    data: data
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
// 获得产线工艺目前生产工艺
 | 
					 | 
				
			||||||
export function getLineBindProcessPage(query) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/line-bind-process/nowList',
 | 
					 | 
				
			||||||
    method: 'get',
 | 
					 | 
				
			||||||
    params: query
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 获得产线工艺log分页
 | 
					 | 
				
			||||||
export function getLineBindProcessLogPage(query) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/line-bind-process/logPage',
 | 
					 | 
				
			||||||
    method: 'get',
 | 
					 | 
				
			||||||
    params: query
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -16,14 +16,6 @@ export function switchLineBindProduct(data) {
 | 
				
			|||||||
    data: data
 | 
					    data: data
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
// 切换产线是否可以自动
 | 
					 | 
				
			||||||
export function switchAutoProduct(data) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/base/line-bind-product/switchAuto',
 | 
					 | 
				
			||||||
    method: 'put',
 | 
					 | 
				
			||||||
    data: data
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
// 更新产线目前生产产品表 主要为更新
 | 
					// 更新产线目前生产产品表 主要为更新
 | 
				
			||||||
export function updateLineBindProduct(data) {
 | 
					export function updateLineBindProduct(data) {
 | 
				
			||||||
  return request({
 | 
					  return request({
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * @Author: Do not edit
 | 
					 * @Author: Do not edit
 | 
				
			||||||
 * @Date: 2023-09-12 09:44:53
 | 
					 * @Date: 2023-09-12 09:44:53
 | 
				
			||||||
 * @LastEditTime: 2025-01-07 09:57:36
 | 
					 * @LastEditTime: 2023-09-13 16:11:41
 | 
				
			||||||
 * @LastEditors: zwq
 | 
					 * @LastEditors: DY
 | 
				
			||||||
 * @Description: 
 | 
					 * @Description: 
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
import request from '@/utils/request'
 | 
					import request from '@/utils/request'
 | 
				
			||||||
@@ -17,43 +17,9 @@ export function getPdlAutoReport(data) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 获得所有工厂产线列表
 | 
					// 获得所有工厂产线列表
 | 
				
			||||||
export function getPdList(id) {
 | 
					export function getPdList() {
 | 
				
			||||||
  return request({
 | 
					  return request({
 | 
				
			||||||
    url: '/base/production-line/listAll' + (id ? '?id=' + id : ''),
 | 
					    url: '/base/production-line/listAll',
 | 
				
			||||||
    method: 'get'
 | 
					    method: 'get'
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
// 获得产线自动报表
 | 
					 | 
				
			||||||
export function getLineAuto(data) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/monitoring/production-monitor/getPdlAutoReportNew',
 | 
					 | 
				
			||||||
    method: 'post',
 | 
					 | 
				
			||||||
    data: data
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 获得产品自动报表
 | 
					 | 
				
			||||||
export function getProductAuto(data) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/monitoring/production-monitor/getProcessAutoReportNew',
 | 
					 | 
				
			||||||
    method: 'post',
 | 
					 | 
				
			||||||
    data: data
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 班组自动报表分页
 | 
					 | 
				
			||||||
export function getTeamReportPage(data) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/monitoring/team-auto-report/page',
 | 
					 | 
				
			||||||
    method: 'post',
 | 
					 | 
				
			||||||
    data: data
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 班组自动报表分页详细
 | 
					 | 
				
			||||||
export function getTeamReportPageDet(id) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/monitoring/team-auto-report/pageDet?id=' + id,
 | 
					 | 
				
			||||||
    method: 'get',
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * @Author: Do not edit
 | 
					 * @Author: Do not edit
 | 
				
			||||||
 * @Date: 2023-09-12 09:44:53
 | 
					 * @Date: 2023-09-12 09:44:53
 | 
				
			||||||
 * @LastEditTime: 2025-03-03 10:43:34
 | 
					 * @LastEditTime: 2023-09-14 10:25:46
 | 
				
			||||||
 * @LastEditors: zwq
 | 
					 * @LastEditors: DY
 | 
				
			||||||
 * @Description: 
 | 
					 * @Description: 
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
import request from '@/utils/request'
 | 
					import request from '@/utils/request'
 | 
				
			||||||
@@ -23,21 +23,3 @@ export function getPdList() {
 | 
				
			|||||||
    method: 'get'
 | 
					    method: 'get'
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
// 产线统计数据查询-历史
 | 
					 | 
				
			||||||
export function getPdlAutoReportNewSearch(data) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/monitoring/production-monitor/getPdlAutoReportNewSearch',
 | 
					 | 
				
			||||||
    method: 'post',
 | 
					 | 
				
			||||||
    data: data
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 产线统计数据查询-当前
 | 
					 | 
				
			||||||
export function getPdlAutoReportNewSearchNow(data) {
 | 
					 | 
				
			||||||
  return request({
 | 
					 | 
				
			||||||
    url: '/monitoring/production-monitor/getPdlAutoReportNewSearchNow',
 | 
					 | 
				
			||||||
    method: 'post',
 | 
					 | 
				
			||||||
    data: data,
 | 
					 | 
				
			||||||
    timeout: 60000,
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
 * @Author: zwq
 | 
					 * @Author: zwq
 | 
				
			||||||
 * @Date: 2024-04-18 16:53:17
 | 
					 * @Date: 2024-04-18 16:53:17
 | 
				
			||||||
 * @LastEditors: zwq
 | 
					 * @LastEditors: zwq
 | 
				
			||||||
 * @LastEditTime: 2024-09-06 14:35:13
 | 
					 * @LastEditTime: 2025-02-17 15:47:58
 | 
				
			||||||
 * @Description:
 | 
					 * @Description:
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -52,3 +52,21 @@ export function exportRawCostStatisticsHisExcel(query) {
 | 
				
			|||||||
    responseType: 'blob'
 | 
					    responseType: 'blob'
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 获得成本首页 -获取首页数据
 | 
				
			||||||
 | 
					export function getData(query) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/monitoring/cost-homepage/getData',
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					    params: query
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 获得成本首页 -详细首页数据
 | 
				
			||||||
 | 
					export function getDetailData(query) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/monitoring/cost-homepage/getDetailData',
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					    params: query
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -15,7 +15,7 @@ export function updatecostOriginRatioHis(data) {
 | 
				
			|||||||
    data: data
 | 
					    data: data
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
// 获得原片良品率
 | 
					// 获得原片产线良品率
 | 
				
			||||||
export function getcostOriginRatioHisPage(query) {
 | 
					export function getcostOriginRatioHisPage(query) {
 | 
				
			||||||
  return request({
 | 
					  return request({
 | 
				
			||||||
    url: '/monitoring/cost-origin-ratio-his/page',
 | 
					    url: '/monitoring/cost-origin-ratio-his/page',
 | 
				
			||||||
@@ -24,6 +24,15 @@ export function getcostOriginRatioHisPage(query) {
 | 
				
			|||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 获得原片工段良品率
 | 
				
			||||||
 | 
					export function getcostOriginWSRatioHisPage(query) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/monitoring/cost-origin-ratio-his/page-ws',
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					    params: query
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 导出原片良品率 Excel
 | 
					// 导出原片良品率 Excel
 | 
				
			||||||
export function exportcostOriginRatioHisExcel(query) {
 | 
					export function exportcostOriginRatioHisExcel(query) {
 | 
				
			||||||
  return request({
 | 
					  return request({
 | 
				
			||||||
@@ -34,3 +43,14 @@ export function exportcostOriginRatioHisExcel(query) {
 | 
				
			|||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 导出原片良品率 工段Excel
 | 
				
			||||||
 | 
					export function exportcostOriginWSRatioHisExcel(query) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/monitoring/cost-origin-ratio-his/export-excel-ws',
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					    params: query,
 | 
				
			||||||
 | 
					    responseType: 'blob'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										19
									
								
								src/api/environmental/environmentalLog.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					import request from '@/utils/request'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 获得环保数据历史分页
 | 
				
			||||||
 | 
					export function getCostEnviHisPage(query) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/monitoring/cost-envi-his/page',
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					    params: query
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 获得余热发电page
 | 
				
			||||||
 | 
					export function yurepage(query) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/base/energy-quantity-day/yurepage',
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					    params: query
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										4
									
								
								src/assets/font/font.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					@font-face {
 | 
				
			||||||
 | 
					  font-family: '站酷庆科黄油体';
 | 
				
			||||||
 | 
					  src: url('./站酷庆科黄油体.ttf') format('truetype');;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 8.9 MiB After Width: | Height: | Size: 9.3 MiB  | 
							
								
								
									
										22
									
								
								src/assets/icons/svg/cost.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,22 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 | 
				
			||||||
 | 
					    <title>切片</title>
 | 
				
			||||||
 | 
					    <defs>
 | 
				
			||||||
 | 
					        <linearGradient x1="91.384997%" y1="100%" x2="25.4330364%" y2="7.84095011e-14%" id="linearGradient-1">
 | 
				
			||||||
 | 
					            <stop stop-color="#4BFFC8" offset="0%"></stop>
 | 
				
			||||||
 | 
					            <stop stop-color="#45F2EC" offset="100%"></stop>
 | 
				
			||||||
 | 
					        </linearGradient>
 | 
				
			||||||
 | 
					        <linearGradient x1="91.384997%" y1="100%" x2="25.4330364%" y2="7.84095011e-14%" id="linearGradient-2">
 | 
				
			||||||
 | 
					            <stop stop-color="#FFFFFF" offset="0%"></stop>
 | 
				
			||||||
 | 
					            <stop stop-color="#FFFFFF" offset="100%"></stop>
 | 
				
			||||||
 | 
					        </linearGradient>
 | 
				
			||||||
 | 
					    </defs>
 | 
				
			||||||
 | 
					    <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
 | 
				
			||||||
 | 
					        <g id="成本看板" transform="translate(-64.000000, -290.000000)" fill-rule="nonzero">
 | 
				
			||||||
 | 
					            <g id="成本" transform="translate(64.000000, 290.000000)">
 | 
				
			||||||
 | 
					                <rect id="矩形" fill="#FFFFFF" opacity="0" x="0" y="0" width="32" height="32"></rect>
 | 
				
			||||||
 | 
					                <path d="M24.8336138,7.21888656 C25.307557,7.21888656 25.7025096,7.62700427 25.6893445,8.08778234 L25.6893445,25.768495 C25.6893445,26.5452352 25.2417316,26.6505559 24.859944,26.6505559 L7.17923134,26.6505559 C6.6921231,26.6505559 6.31033556,26.2556033 6.31033556,25.7816601 L6.31033556,8.10094743 C6.31033556,7.61383919 6.70528819,7.23205165 7.17923134,7.23205165 L10.3915127,7.23205165 L10.3915127,9.00933847 C10.3915127,9.41745619 10.733805,9.75974847 11.1419227,9.75974847 L20.8709225,9.75974847 C21.2790402,9.75974847 21.6213325,9.43062128 21.6213325,9.00933847 L21.6213325,7.21888656 Z M21.3580307,13.7224398 C21.0289035,13.3933127 20.5154651,13.3933127 20.1863379,13.7224398 L14.5385153,19.3702624 L11.7738469,16.6319242 C11.4447197,16.302797 10.9312813,16.302797 10.6021541,16.6319242 C10.2730269,16.9610514 10.2730269,17.4744898 10.6021541,17.803617 L13.9460864,21.1475493 C14.2752136,21.4766764 14.788652,21.4766764 15.1177792,21.1475493 L21.3711958,14.9072977 C21.5423419,14.7361516 21.6213325,14.5386753 21.6213325,14.3148688 C21.6213325,14.0910623 21.5291768,13.893586 21.3580307,13.7224398 Z M19.896706,5.34944412 C20.1863379,5.34944412 20.4364746,5.59958078 20.4364746,5.88921271 L20.4364746,8.10094743 C20.4364746,8.39057936 20.1863379,8.64071602 19.896706,8.64071602 L12.1161392,8.64071602 L12.1161392,8.6670462 C11.8265073,8.6670462 11.5763706,8.41690953 11.5763706,8.1272776 L11.5763706,5.88921271 C11.5763706,5.59958078 11.8265073,5.34944412 12.1161392,5.34944412 L19.896706,5.34944412 Z" id="形状结合" fill="url(#linearGradient-2)"></path>
 | 
				
			||||||
 | 
					            </g>
 | 
				
			||||||
 | 
					        </g>
 | 
				
			||||||
 | 
					    </g>
 | 
				
			||||||
 | 
					</svg>
 | 
				
			||||||
| 
		 After Width: | Height: | Size: 2.7 KiB  | 
							
								
								
									
										12
									
								
								src/assets/icons/svg/costchart.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 | 
				
			||||||
 | 
					    <title>切片</title>
 | 
				
			||||||
 | 
					    <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
 | 
				
			||||||
 | 
					        <g id="成本看板" transform="translate(-64.000000, -633.000000)" fill="#FFFFFF" fill-rule="nonzero">
 | 
				
			||||||
 | 
					            <g id="近期成本" transform="translate(64.000000, 633.000000)">
 | 
				
			||||||
 | 
					                <rect id="矩形" opacity="0" x="0" y="0" width="32" height="32"></rect>
 | 
				
			||||||
 | 
					                <path d="M26,23 L18.2,27.8 C17.6,28.2 17,27.8 17,27 L17,15.8 C17,15.6 17.2,15.2 17.4,15 L25.2,10.2 C25.8,9.8 26.4,10.2 26.4,11 L26.4,22.4 C26.4,22.6 26.2,23 26,23 Z M6,23 L13.8,27.8 C14.4,28.2 15,27.8 15,27 L15,15.8 C15,15.6 14.8,15.2 14.6,15 L6.8,10.2 C6.4,10 5.6,10.4 5.6,11 L5.6,22.4 C5.6,22.6 5.8,23 6,23 Z M15.8,4 L6.8,7.4 C6.4,7.6 6.4,8.2 6.8,8.4 L15.8,14 C16,14 16.2,14 16.2,14 L25.4,8.4 C25.8,8.2 25.8,7.6 25.4,7.4 L16.2,4 C16,4 16,4 15.8,4 Z" id="形状"></path>
 | 
				
			||||||
 | 
					            </g>
 | 
				
			||||||
 | 
					        </g>
 | 
				
			||||||
 | 
					    </g>
 | 
				
			||||||
 | 
					</svg>
 | 
				
			||||||
| 
		 After Width: | Height: | Size: 1.1 KiB  | 
@@ -1,20 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					 | 
				
			||||||
<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 | 
					 | 
				
			||||||
    <title>编组备份</title>
 | 
					 | 
				
			||||||
    <g id="秦皇岛/北方压延" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
 | 
					 | 
				
			||||||
        <g id="现场看板tc—整体产线" transform="translate(-38.175000, -126.808988)">
 | 
					 | 
				
			||||||
            <g id="编组备份" transform="translate(38.175000, 126.808988)">
 | 
					 | 
				
			||||||
                <polygon id="Fill-1" fill="#CAE5DD" opacity="0" points="0 32 32 32 32 0 0 0"></polygon>
 | 
					 | 
				
			||||||
                <path d="M24.1201333,5.07973333 L22.1468,5.07973333 L22.1468,6.3064 L24.1201333,6.3064 C24.7308,6.3064 25.2268,6.8024 25.2268,7.41306667 L25.2268,25.4530667 C25.2268,26.0650667 24.7308,26.5597333 24.1201333,26.5597333 L7.93346667,26.5597333 C7.32146667,26.5597333 6.8268,26.0650667 6.8268,25.4530667 L6.8268,7.41306667 C6.8268,6.8024 7.32146667,6.3064 7.93346667,6.3064 L10.2001333,6.3064 L10.2001333,5.07973333 L7.93346667,5.07973333 C6.64813333,5.08773333 5.6068,6.12773333 5.60013333,7.41306667 L5.60013333,25.4530667 C5.6068,26.7384 6.64813333,27.7797333 7.93346667,27.7864 L24.1334667,27.7864 C25.4188,27.7797333 26.4588,26.7384 26.4668,25.4530667 L26.4668,7.41306667 C26.4588,6.1224 25.4108,5.07973333 24.1201333,5.07973333" id="Fill-3" fill="#6EF9DE"></path>
 | 
					 | 
				
			||||||
                <path d="M7.93333333,5.56026667 C6.90933333,5.56026667 6.08,6.3896 6.08,7.4136 L6.08,25.4536 C6.08,26.4776 6.90933333,27.3069333 7.93333333,27.3069333 L24.1333333,27.3069333 C25.156,27.3069333 25.9866667,26.4776 25.9866667,25.4536 L25.9866667,7.4136 C25.9866667,6.3896 25.156,5.56026667 24.1333333,5.56026667 L22.6,5.56026667 L22.6,5.78693333 L24.0933333,5.78693333 C24.9613333,5.78693333 25.6666667,6.49093333 25.6666667,7.36026667 L25.6666667,25.4002667 C25.6666667,26.2682667 24.9613333,26.9736 24.0933333,26.9736 L7.93333333,26.9736 C7.064,26.9736 6.36,26.2682667 6.36,25.4002667 L6.36,7.4136 C6.33066667,6.54426667 7.01066667,5.81626667 7.87866667,5.78693333 C7.89733333,5.78693333 7.91466667,5.78693333 7.93333333,5.78693333 L9.73333333,5.78693333 L9.73333333,5.50693333 L7.93333333,5.56026667 Z M24.8266667,28.2536 L7.21333333,28.2536 C6.05733333,28.2536 5.12,27.3162667 5.12,26.1602667 L5.12,6.70693333 C5.12,5.55093333 6.05733333,4.6136 7.21333333,4.6136 L10.6666667,4.6136 L10.6666667,6.78693333 L8.81333333,6.78693333 C7.97333333,6.78693333 7.29333333,7.46693333 7.29333333,8.30693333 L7.29333333,24.5602667 C7.29333333,25.3989333 7.97333333,26.0802667 8.81333333,26.0802667 L23.2266667,26.0802667 C24.0666667,26.0802667 24.7466667,25.3989333 24.7466667,24.5602667 L24.7466667,8.30693333 C24.7466667,7.46693333 24.0666667,6.78693333 23.2266667,6.78693333 L21.68,6.78693333 L21.68,4.6136 L24.8266667,4.6136 C25.9826667,4.6136 26.92,5.55093333 26.92,6.70693333 L26.92,26.1602667 C26.92,27.3162667 25.9826667,28.2536 24.8266667,28.2536 L24.8266667,28.2536 Z" id="Fill-5" fill="#6EF9DE"></path>
 | 
					 | 
				
			||||||
                <path d="M11.3468,3.3864 L20.9068,3.3864 C21.7534667,3.3864 22.4401333,4.07306667 22.4401333,4.91973333 L22.4401333,6.1864 C22.4401333,7.03306667 21.7534667,7.71973333 20.9068,7.71973333 L11.3468,7.71973333 C10.5001333,7.71973333 9.81346667,7.03306667 9.81346667,6.1864 L9.81346667,4.91973333 C9.81346667,4.07306667 10.5001333,3.3864 11.3468,3.3864" id="Fill-7" fill="#6EF9DE"></path>
 | 
					 | 
				
			||||||
                <path d="M21.7732,11.3864 C21.7732,12.0530667 21.5065333,12.3864 20.9598667,12.3864 L13.1065333,12.3864 C12.5732,12.3864 12.2932,12.0530667 12.2932,11.3864 C12.2932,10.7197333 12.5732,10.3997333 13.1065333,10.3997333 L20.9598667,10.3997333 C21.5065333,10.3997333 21.7732,10.7330667 21.7732,11.3864" id="Fill-9" fill="#6EF9E1"></path>
 | 
					 | 
				
			||||||
                <path d="M10.2666667,10.4130667 L10.28,10.4130667 C10.824,10.4130667 11.2666667,10.8557333 11.2666667,11.3997333 L11.2666667,11.4130667 C11.2666667,11.9584 10.824,12.3997333 10.28,12.3997333 L10.2666667,12.3997333 C9.72133333,12.3997333 9.28,11.9584 9.28,11.4130667 L9.28,11.3997333 C9.28,10.8557333 9.72133333,10.4130667 10.2666667,10.4130667" id="Fill-11" fill="#6DF8E1"></path>
 | 
					 | 
				
			||||||
                <path d="M21.7732,16.3597333 C21.7732,17.0264 21.3998667,17.3597333 20.6398667,17.3597333 L13.4398667,17.3597333 C12.6798667,17.3597333 12.2932,17.0264 12.2932,16.3597333 C12.2932,15.6930667 12.6798667,15.3597333 13.4398667,15.3597333 L20.6398667,15.3597333 C21.3998667,15.3597333 21.7732,15.6930667 21.7732,16.3597333" id="Fill-13" fill="#6EF9E1"></path>
 | 
					 | 
				
			||||||
                <path d="M10.2666667,15.4130667 L10.28,15.4130667 C10.824,15.4130667 11.2666667,15.8557333 11.2666667,16.3997333 L11.2666667,16.4130667 C11.2666667,16.9584 10.824,17.3997333 10.28,17.3997333 L10.2666667,17.3997333 C9.72133333,17.3997333 9.28,16.9584 9.28,16.4130667 L9.28,16.3997333 C9.28,15.8557333 9.72133333,15.4130667 10.2666667,15.4130667" id="Fill-15" fill="#6DF8E1"></path>
 | 
					 | 
				
			||||||
                <path d="M21.7732,21.3597333 C21.7732,22.0264 21.5065333,22.3597333 20.9598667,22.3597333 L13.1065333,22.3597333 C12.5732,22.3597333 12.2932,22.0264 12.2932,21.3597333 C12.2932,20.6930667 12.5732,20.3597333 13.1065333,20.3597333 L20.9598667,20.3597333 C21.5065333,20.3597333 21.7732,20.6930667 21.7732,21.3597333" id="Fill-17" fill="#6EF9E1"></path>
 | 
					 | 
				
			||||||
                <path d="M10.2666667,20.3864 L10.28,20.3864 C10.824,20.3864 11.2666667,20.8290667 11.2666667,21.3730667 L11.2666667,21.3864 C11.2666667,21.9317333 10.824,22.3730667 10.28,22.3730667 L10.2666667,22.3730667 C9.72133333,22.3730667 9.28,21.9317333 9.28,21.3864 L9.28,21.3730667 C9.28,20.8290667 9.72133333,20.3864 10.2666667,20.3864" id="Fill-19" fill="#6DF8E1"></path>
 | 
					 | 
				
			||||||
            </g>
 | 
					 | 
				
			||||||
        </g>
 | 
					 | 
				
			||||||
    </g>
 | 
					 | 
				
			||||||
</svg>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 5.6 KiB  | 
@@ -1,18 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					 | 
				
			||||||
<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 | 
					 | 
				
			||||||
    <title>切片</title>
 | 
					 | 
				
			||||||
    <defs>
 | 
					 | 
				
			||||||
        <linearGradient x1="100%" y1="81.9999999%" x2="20.318998%" y2="18.0000001%" id="linearGradient-1">
 | 
					 | 
				
			||||||
            <stop stop-color="#4BFFC8" offset="0%"></stop>
 | 
					 | 
				
			||||||
            <stop stop-color="#45F2EC" offset="100%"></stop>
 | 
					 | 
				
			||||||
        </linearGradient>
 | 
					 | 
				
			||||||
    </defs>
 | 
					 | 
				
			||||||
    <g id="秦皇岛/北方压延" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
 | 
					 | 
				
			||||||
        <g id="现场看板tc—整体产线" transform="translate(-35.000000, -741.000000)" fill-rule="nonzero">
 | 
					 | 
				
			||||||
            <g id="icon/可视化/柱状图" transform="translate(35.000000, 741.000000)">
 | 
					 | 
				
			||||||
                <rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="32" height="32"></rect>
 | 
					 | 
				
			||||||
                <path d="M6.07816026,6.07816026 L6.07816026,23.4413798 L28.4022997,23.4413798 L28.4022997,25.9218397 L3.5977003,25.9218397 L3.5977003,6.07816026 L6.07816026,6.07816026 Z M13.5195401,6.07816026 L13.5195401,22.2011498 L8.55862018,22.2011498 L8.55862018,6.07816026 L13.5195401,6.07816026 Z M20.9609199,11.0390801 L20.9609199,22.2011498 L16,22.2011498 L16,11.0390801 L20.9609199,11.0390801 Z M28.4022997,16 L28.4022997,22.2011498 L23.4413798,22.2011498 L23.4413798,16 L28.4022997,16 Z" id="形状" fill="url(#linearGradient-1)"></path>
 | 
					 | 
				
			||||||
            </g>
 | 
					 | 
				
			||||||
        </g>
 | 
					 | 
				
			||||||
    </g>
 | 
					 | 
				
			||||||
</svg>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 1.5 KiB  | 
@@ -1,18 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					 | 
				
			||||||
<svg width="27px" height="32px" viewBox="0 0 27 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 | 
					 | 
				
			||||||
    <title>产线备份 3</title>
 | 
					 | 
				
			||||||
    <defs>
 | 
					 | 
				
			||||||
        <linearGradient x1="100%" y1="84.4142661%" x2="20.318998%" y2="15.5857339%" id="linearGradient-1">
 | 
					 | 
				
			||||||
            <stop stop-color="#4BFFC8" offset="0%"></stop>
 | 
					 | 
				
			||||||
            <stop stop-color="#45F2EC" offset="100%"></stop>
 | 
					 | 
				
			||||||
        </linearGradient>
 | 
					 | 
				
			||||||
    </defs>
 | 
					 | 
				
			||||||
    <g id="秦皇岛/北方压延" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
 | 
					 | 
				
			||||||
        <g id="现场看板tc—整体产线" transform="translate(-456.000000, -740.000000)" fill-rule="nonzero">
 | 
					 | 
				
			||||||
            <g id="产线备份-3" transform="translate(456.000000, 740.000000)">
 | 
					 | 
				
			||||||
                <rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="27" height="32"></rect>
 | 
					 | 
				
			||||||
                <path d="M5.9634842,21.3256682 C5.8209113,21.3358884 5.67787363,21.3358884 5.53530073,21.3256682 L5.53152795,21.3256682 C4.70985419,21.2655042 3.9028068,20.8665317 3.27496659,20.1284294 C1.90834447,18.5219016 1.90834447,15.9172034 3.27496659,14.3106756 C3.5291373,14.011848 3.81269745,13.7686207 4.11471142,13.5809616 L4.11389125,13.5765264 L4.1789034,13.5420735 C4.26583759,13.4907514 4.35456706,13.4437443 4.44485723,13.4011765 L16.0336968,7.2612301 L16.0353372,7.27016472 C18.3137697,6.10911436 21.061777,6.62333696 22.9243013,8.8128968 C25.3585662,11.6745456 25.3585662,16.314119 22.9243013,19.1757678 C21.7290674,20.580881 20.1691859,21.2960361 18.6027704,21.3212973 L18.6035632,21.3256682 L5.9634842,21.3256682 Z M5.625,20 C6.86761875,20 7.875,18.8061 7.875,17.3333333 C7.875,15.8605667 6.86761875,14.6666667 5.625,14.6666667 C4.382325,14.6666667 3.375,15.8605667 3.375,17.3333333 C3.375,18.8061 4.382325,20 5.625,20 Z M18.5625,18.6666667 C20.737088,18.6666667 22.5,16.5773202 22.5,14 C22.5,11.4226798 20.737088,9.33333333 18.5625,9.33333333 C16.3878602,9.33333333 14.625,11.4226798 14.625,14 C14.625,16.5773202 16.3878602,18.6666667 18.5625,18.6666667 Z M4.92857143,22.6666667 L22.5,22.6666667 L22.5,24.8888889 C22.5,25.1343611 22.3081339,25.3333333 22.0714286,25.3333333 L4.5,25.3333333 L4.5,23.1111111 C4.5,22.8656389 4.69186607,22.6666667 4.92857143,22.6666667 Z" id="形状" fill="url(#linearGradient-1)"></path>
 | 
					 | 
				
			||||||
            </g>
 | 
					 | 
				
			||||||
        </g>
 | 
					 | 
				
			||||||
    </g>
 | 
					 | 
				
			||||||
</svg>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 2.3 KiB  | 
@@ -1,18 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					 | 
				
			||||||
<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 | 
					 | 
				
			||||||
    <title>切片</title>
 | 
					 | 
				
			||||||
    <defs>
 | 
					 | 
				
			||||||
        <linearGradient x1="99.4683184%" y1="100%" x2="20.6346149%" y2="7.84095011e-14%" id="linearGradient-1">
 | 
					 | 
				
			||||||
            <stop stop-color="#4BFFC8" offset="0%"></stop>
 | 
					 | 
				
			||||||
            <stop stop-color="#45F2EC" offset="100%"></stop>
 | 
					 | 
				
			||||||
        </linearGradient>
 | 
					 | 
				
			||||||
    </defs>
 | 
					 | 
				
			||||||
    <g id="秦皇岛/北方压延" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
 | 
					 | 
				
			||||||
        <g id="现场看板tc—整体产线" transform="translate(-1514.000000, -127.000000)" fill-rule="nonzero">
 | 
					 | 
				
			||||||
            <g id="icon/可视化/模块" transform="translate(1514.000000, 127.000000)">
 | 
					 | 
				
			||||||
                <rect id="矩形" fill="#000000" opacity="0" x="0" y="7.10542736e-14" width="32" height="32"></rect>
 | 
					 | 
				
			||||||
                <path d="M25.7527221,14.1816202 L24.188579,14.1816202 L24.188579,9.49373791 C24.1860753,8.90287145 23.7063759,8.4252046 23.1155041,8.42520991 L17.3681876,8.42520991 L17.3681876,6.56551655 C17.370851,5.66122185 17.0084214,4.79412914 16.363022,4.1607133 C15.7176226,3.52729745 14.8438903,3.18118084 13.9398043,3.20079015 C12.066652,3.28658042 10.6006443,4.84522051 10.629641,6.72011209 L10.629641,8.42520991 L4.88232453,8.42520991 C4.29145277,8.4252046 3.81175331,8.90287145 3.80921104,9.49373791 L3.80921104,13.0994515 C3.80682438,13.385621 3.9188086,13.6609038 4.12031265,13.8641155 C4.32181669,14.0673272 4.59614473,14.1816305 4.88232453,14.1816202 L5.48251897,14.1816202 C7.35572581,14.1525356 8.91367406,15.6158797 9.00184091,17.4872366 C9.01900932,18.3913465 8.67055578,19.2641187 8.03543236,19.9078018 C7.40030895,20.5514848 6.53227944,20.9115903 5.62802066,20.9065261 L4.88232453,20.9065261 C4.28968163,20.9065261 3.80921104,21.3869581 3.80921104,21.979601 L3.80921104,27.7269175 C3.80921104,28.3195604 4.28968163,28.8000021 4.88232453,28.8000021 L9.55656609,28.8000021 C9.84153405,28.8012076 10.1151815,28.6885421 10.3166861,28.4870375 C10.5181907,28.2855329 10.6308562,28.0118854 10.629641,27.7269175 L10.629641,27.1949269 C10.6006443,25.3200353 12.066652,23.7613953 13.9398043,23.675605 C14.8438903,23.6559957 15.7176226,24.0021123 16.363022,24.6355281 C17.0084214,25.268944 17.370851,26.1360367 17.3681876,27.0403314 L17.3681876,27.7269175 C17.3669784,28.0110957 17.479021,28.2840495 17.6795401,28.4854219 C17.8800592,28.6867943 18.1525348,28.8000021 18.4367156,28.8000021 L23.1155041,28.8000021 C23.708147,28.8000021 24.188579,28.3195604 24.188579,27.7269175 L24.188579,20.9065261 L25.9027707,20.9065261 C26.8070472,20.910389 27.6746078,20.5491212 28.3088772,19.9045802 C28.9431467,19.2600392 29.290432,18.3867874 29.272044,17.4826896 C29.1815049,15.6131286 27.6242468,14.1524446 25.7527221,14.1816202 Z" id="路径" fill="url(#linearGradient-1)"></path>
 | 
					 | 
				
			||||||
            </g>
 | 
					 | 
				
			||||||
        </g>
 | 
					 | 
				
			||||||
    </g>
 | 
					 | 
				
			||||||
</svg>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 2.9 KiB  | 
							
								
								
									
										22
									
								
								src/assets/icons/svg/energy.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,22 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<svg width="24.3417579px" height="24.000009px" viewBox="0 0 24.3417579 24.000009" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 | 
				
			||||||
 | 
					    <title>统计</title>
 | 
				
			||||||
 | 
					    <defs>
 | 
				
			||||||
 | 
					        <linearGradient x1="99.4683184%" y1="100%" x2="20.6346149%" y2="7.84095011e-14%" id="linearGradient-1">
 | 
				
			||||||
 | 
					            <stop stop-color="#4BFFC8" offset="0%"></stop>
 | 
				
			||||||
 | 
					            <stop stop-color="#45F2EC" offset="100%"></stop>
 | 
				
			||||||
 | 
					        </linearGradient>
 | 
				
			||||||
 | 
					        <linearGradient x1="99.4683184%" y1="100%" x2="20.6346149%" y2="7.84095011e-14%" id="linearGradient-2">
 | 
				
			||||||
 | 
					            <stop stop-color="#FFFFFF" offset="0%"></stop>
 | 
				
			||||||
 | 
					            <stop stop-color="#FFFFFF" offset="100%"></stop>
 | 
				
			||||||
 | 
					        </linearGradient>
 | 
				
			||||||
 | 
					    </defs>
 | 
				
			||||||
 | 
					    <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
 | 
				
			||||||
 | 
					        <g id="成本看板" transform="translate(-1327.000000, -636.000000)" fill-rule="nonzero">
 | 
				
			||||||
 | 
					            <g id="统计" transform="translate(1327.000000, 636.000000)">
 | 
				
			||||||
 | 
					                <rect id="矩形" fill="#FFFFFF" opacity="0" x="0" y="1.29865498e-07" width="23.9999981" height="23.9999981"></rect>
 | 
				
			||||||
 | 
					                <path d="M21.0417425,10.2952681 L19.5753585,10.2952681 L19.5753585,5.90037875 C19.5730113,5.34644149 19.1232931,4.89862885 18.5693508,4.89863383 L13.1812421,4.89863383 L13.1812421,3.15517144 C13.1837389,2.30739523 12.8439612,1.49449588 12.2388994,0.900668572 C11.6338375,0.306841265 10.8147135,-0.0176430365 9.96713292,0.000740689882 C8.21105284,0.081169063 6.8366707,1.54239403 6.8638551,3.30010475 L6.8638551,4.89863383 L1.47574634,4.89863383 C0.921804107,4.89862885 0.472085895,5.34644149 0.46970252,5.90037875 L0.46970252,9.28073494 C0.467465023,9.54901885 0.572450222,9.80709649 0.76136025,9.99760745 C0.950270278,10.1881184 1.2074528,10.2952777 1.47574634,10.2952681 L2.03842858,10.2952681 C3.79455985,10.2680012 5.25513623,11.6398863 5.33779264,13.3942831 C5.35388802,14.2418862 5.02721285,15.0601101 4.4317847,15.6635629 C3.83635654,16.2670156 3.02257894,16.6046145 2.1748364,16.5998668 L1.47574634,16.5998668 C0.92014366,16.5998668 0.46970252,17.0502718 0.46970252,17.6058745 L0.46970252,22.9939832 C0.46970252,23.5495859 0.92014366,24 1.47574634,24 L5.85784745,24 C6.1250049,24.0011302 6.38154936,23.8955063 6.57045992,23.7065957 C6.75937048,23.5176851 6.86499438,23.2611407 6.8638551,22.9939832 L6.8638551,22.4952422 C6.8366707,20.7375314 8.21105284,19.2763065 9.96713292,19.1958781 C10.8147135,19.1774944 11.6338375,19.5019787 12.2388994,20.095806 C12.8439612,20.6896333 13.1837389,21.5025326 13.1812421,22.3503088 L13.1812421,22.9939832 C13.1801084,23.2604003 13.2851484,23.5162945 13.473135,23.7050811 C13.6611216,23.8938677 13.9165675,24 14.182987,24 L18.5693508,24 C19.1249535,24 19.5753585,23.5495859 19.5753585,22.9939832 L19.5753585,16.5998668 L21.1824131,16.5998668 C22.0301722,16.6034883 22.8435102,16.2647998 23.4381378,15.6605426 C24.0327653,15.0562855 24.3583453,14.237612 24.3411066,13.3900204 C24.2562262,11.637307 22.7962968,10.2679159 21.0417425,10.2952681 Z" id="路径" fill="url(#linearGradient-2)"></path>
 | 
				
			||||||
 | 
					            </g>
 | 
				
			||||||
 | 
					        </g>
 | 
				
			||||||
 | 
					    </g>
 | 
				
			||||||
 | 
					</svg>
 | 
				
			||||||
| 
		 After Width: | Height: | Size: 3.1 KiB  | 
@@ -1,10 +1,11 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
<svg width="22px" height="22px" viewBox="0 0 22 22" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 | 
					<svg width="32px" height="32px" viewBox="0 0 22 22" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 | 
				
			||||||
 | 
					    <title>编组 54</title>
 | 
				
			||||||
    <g id="驾驶舱" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
 | 
					    <g id="驾驶舱" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
 | 
				
			||||||
        <g id="运营总览_生产线监控驾驶舱" transform="translate(-1866.000000, -36.000000)">
 | 
					        <g id="运营总览_生产线监控驾驶舱" transform="translate(-1866.000000, -36.000000)">
 | 
				
			||||||
            <g id="编组-54" transform="translate(1866.000000, 36.000000)">
 | 
					            <g id="编组-54" transform="translate(1866.000000, 36.000000)">
 | 
				
			||||||
                <rect id="矩形" stroke="#979797" fill="#D8D8D8" opacity="0" x="0.5" y="0.5" width="21" height="21"></rect>
 | 
					                <rect id="矩形" stroke="#69b4ff" fill="#D8D8D8" opacity="0" x="0.5" y="0.5" width="32" height="32"></rect>
 | 
				
			||||||
                <path d="M18.4001211,1 L18.574731,1.00571398 C18.8641421,1.02474925 19.1451559,1.09128771 19.4122178,1.20447947 C19.7221027,1.33395436 19.9991094,1.52058631 20.2392616,1.76073844 C20.4776764,1.99915325 20.6652172,2.27804627 20.7953442,2.58736464 C20.9313506,2.90825642 21,3.24882158 21,3.59987893 L21,3.59987893 L21,18.4001211 L20.994286,18.574731 C20.9752507,18.8641421 20.9087123,19.1451559 20.7955205,19.4122178 C20.6660456,19.7221027 20.4794137,19.9991094 20.2392616,20.2392616 C20.0008468,20.4776764 19.7219537,20.6652172 19.4126354,20.7953442 C19.0917436,20.9313506 18.7511784,21 18.4001211,21 L18.4001211,21 L3.59987893,21 L3.42526905,20.994286 C3.13585794,20.9752507 2.85484405,20.9087123 2.58778224,20.7955205 C2.2778973,20.6660456 2.00089057,20.4794137 1.76073844,20.2392616 C1.52232363,20.0008468 1.33478285,19.7219537 1.20465581,19.4126354 C1.06864936,19.0917436 1,18.7511784 1,18.4001211 L1,18.4001211 L1,3.59987893 L1.00571398,3.42526905 C1.02474925,3.13585794 1.09128771,2.85484405 1.20447947,2.58778224 C1.33395436,2.2778973 1.52058631,2.00089057 1.76073844,1.76073844 C1.99915325,1.52232363 2.27804627,1.33478285 2.58736464,1.20465581 C2.90825642,1.06864936 3.24882158,1 3.59987893,1 L3.59987893,1 L18.4001211,1 Z M18.4001211,2.29539952 L3.59987893,2.29539952 L3.49797651,2.2993263 C2.82542992,2.35136056 2.29539952,2.9140495 2.29539952,3.59987893 L2.29539952,3.59987893 L2.29539952,18.4001211 L2.2993263,18.5020235 C2.35136056,19.1745701 2.9140495,19.7046005 3.59987893,19.7046005 L3.59987893,19.7046005 L18.4001211,19.7046005 L18.5020235,19.7006737 C19.1745701,19.6486394 19.7046005,19.0859505 19.7046005,18.4001211 L19.7046005,18.4001211 L19.7046005,3.59987893 L19.7006737,3.49797651 C19.6486394,2.82542992 19.0859505,2.29539952 18.4001211,2.29539952 L18.4001211,2.29539952 Z M4.56580299,11.8731508 L4.63987359,11.8789244 C4.95620444,11.9219442 5.20096852,12.1943435 5.20096852,12.5208838 L5.20096852,12.5208838 L5.20096852,15.8606113 L8.39814764,12.6634321 L8.45892035,12.6098356 C8.71226443,12.4133149 9.08161636,12.4311804 9.3138681,12.6634321 C9.56547415,12.9150382 9.56547415,13.3275466 9.3138681,13.5791526 L9.3138681,13.5791526 L6.09149511,16.7990315 L9.4155569,16.7990315 L9.49368756,16.8035151 C9.82695229,16.8420028 10.0864105,17.123441 10.081435,17.4601165 C10.0742517,17.8119637 9.78624591,18.094431 9.43371671,18.094431 L9.43371671,18.094431 L4.5691586,18.094431 L4.49163938,18.0899766 C4.16113157,18.051728 3.90556901,17.7718105 3.90556901,17.4308414 L3.90556901,17.4308414 L3.90556901,12.5367736 L3.91007171,12.4587841 C3.94871707,12.1260764 4.23118526,11.8665247 4.56580299,11.8731508 L4.56580299,11.8731508 Z M17.4353814,3.90556901 L17.512257,3.91000958 C17.8400885,3.94813523 18.094431,4.22707005 18.094431,4.56461864 L18.094431,4.56461864 L18.094431,9.46095642 L18.0899283,9.53894589 C18.0512829,9.87165361 17.7688147,10.1312053 17.434197,10.1245792 C17.0828999,10.1173731 16.7990315,9.82850504 16.7990315,9.47684625 L16.7990315,9.47684625 L16.7990315,6.13938874 L13.6018524,9.33656786 L13.5410796,9.39016441 C13.2877356,9.58668512 12.9183836,9.5688196 12.6861319,9.33656786 C12.4345258,9.08496181 12.4345258,8.67245345 12.6861319,8.4208474 L12.6861319,8.4208474 L15.9060108,5.20096852 L12.5821731,5.20096852 L12.5040246,5.19648608 C12.170734,5.1580095 11.9119308,4.876675 11.9185506,4.54071802 C11.9257483,4.18803625 12.2137541,3.90556901 12.5662833,3.90556901 L12.5662833,3.90556901 L17.4353814,3.90556901 Z" id="形状结合" fill="#52FFF1" fill-rule="nonzero" opacity="0.79078311"></path>
 | 
					                <path d="M18.4001211,1 L18.574731,1.00571398 C18.8641421,1.02474925 19.1451559,1.09128771 19.4122178,1.20447947 C19.7221027,1.33395436 19.9991094,1.52058631 20.2392616,1.76073844 C20.4776764,1.99915325 20.6652172,2.27804627 20.7953442,2.58736464 C20.9313506,2.90825642 21,3.24882158 21,3.59987893 L21,3.59987893 L21,18.4001211 L20.994286,18.574731 C20.9752507,18.8641421 20.9087123,19.1451559 20.7955205,19.4122178 C20.6660456,19.7221027 20.4794137,19.9991094 20.2392616,20.2392616 C20.0008468,20.4776764 19.7219537,20.6652172 19.4126354,20.7953442 C19.0917436,20.9313506 18.7511784,21 18.4001211,21 L18.4001211,21 L3.59987893,21 L3.42526905,20.994286 C3.13585794,20.9752507 2.85484405,20.9087123 2.58778224,20.7955205 C2.2778973,20.6660456 2.00089057,20.4794137 1.76073844,20.2392616 C1.52232363,20.0008468 1.33478285,19.7219537 1.20465581,19.4126354 C1.06864936,19.0917436 1,18.7511784 1,18.4001211 L1,18.4001211 L1,3.59987893 L1.00571398,3.42526905 C1.02474925,3.13585794 1.09128771,2.85484405 1.20447947,2.58778224 C1.33395436,2.2778973 1.52058631,2.00089057 1.76073844,1.76073844 C1.99915325,1.52232363 2.27804627,1.33478285 2.58736464,1.20465581 C2.90825642,1.06864936 3.24882158,1 3.59987893,1 L3.59987893,1 L18.4001211,1 Z M18.4001211,2.29539952 L3.59987893,2.29539952 L3.49797651,2.2993263 C2.82542992,2.35136056 2.29539952,2.9140495 2.29539952,3.59987893 L2.29539952,3.59987893 L2.29539952,18.4001211 L2.2993263,18.5020235 C2.35136056,19.1745701 2.9140495,19.7046005 3.59987893,19.7046005 L3.59987893,19.7046005 L18.4001211,19.7046005 L18.5020235,19.7006737 C19.1745701,19.6486394 19.7046005,19.0859505 19.7046005,18.4001211 L19.7046005,18.4001211 L19.7046005,3.59987893 L19.7006737,3.49797651 C19.6486394,2.82542992 19.0859505,2.29539952 18.4001211,2.29539952 L18.4001211,2.29539952 Z M4.56580299,11.8731508 L4.63987359,11.8789244 C4.95620444,11.9219442 5.20096852,12.1943435 5.20096852,12.5208838 L5.20096852,12.5208838 L5.20096852,15.8606113 L8.39814764,12.6634321 L8.45892035,12.6098356 C8.71226443,12.4133149 9.08161636,12.4311804 9.3138681,12.6634321 C9.56547415,12.9150382 9.56547415,13.3275466 9.3138681,13.5791526 L9.3138681,13.5791526 L6.09149511,16.7990315 L9.4155569,16.7990315 L9.49368756,16.8035151 C9.82695229,16.8420028 10.0864105,17.123441 10.081435,17.4601165 C10.0742517,17.8119637 9.78624591,18.094431 9.43371671,18.094431 L9.43371671,18.094431 L4.5691586,18.094431 L4.49163938,18.0899766 C4.16113157,18.051728 3.90556901,17.7718105 3.90556901,17.4308414 L3.90556901,17.4308414 L3.90556901,12.5367736 L3.91007171,12.4587841 C3.94871707,12.1260764 4.23118526,11.8665247 4.56580299,11.8731508 L4.56580299,11.8731508 Z M17.4353814,3.90556901 L17.512257,3.91000958 C17.8400885,3.94813523 18.094431,4.22707005 18.094431,4.56461864 L18.094431,4.56461864 L18.094431,9.46095642 L18.0899283,9.53894589 C18.0512829,9.87165361 17.7688147,10.1312053 17.434197,10.1245792 C17.0828999,10.1173731 16.7990315,9.82850504 16.7990315,9.47684625 L16.7990315,9.47684625 L16.7990315,6.13938874 L13.6018524,9.33656786 L13.5410796,9.39016441 C13.2877356,9.58668512 12.9183836,9.5688196 12.6861319,9.33656786 C12.4345258,9.08496181 12.4345258,8.67245345 12.6861319,8.4208474 L12.6861319,8.4208474 L15.9060108,5.20096852 L12.5821731,5.20096852 L12.5040246,5.19648608 C12.170734,5.1580095 11.9119308,4.876675 11.9185506,4.54071802 C11.9257483,4.18803625 12.2137541,3.90556901 12.5662833,3.90556901 L12.5662833,3.90556901 L17.4353814,3.90556901 Z" id="形状结合" fill="#69b4ff" fill-rule="nonzero" opacity="0.79078311"></path>
 | 
				
			||||||
            </g>
 | 
					            </g>
 | 
				
			||||||
        </g>
 | 
					        </g>
 | 
				
			||||||
    </g>
 | 
					    </g>
 | 
				
			||||||
 
 | 
				
			|||||||
| 
		 Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.1 KiB  | 
							
								
								
									
										12
									
								
								src/assets/icons/svg/line.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 | 
				
			||||||
 | 
					    <title>产量</title>
 | 
				
			||||||
 | 
					    <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
 | 
				
			||||||
 | 
					        <g id="深加工看板" transform="translate(-68.000000, -297.000000)" fill="#FFFFFF" fill-rule="nonzero">
 | 
				
			||||||
 | 
					            <g id="产量" transform="translate(68.000000, 297.000000)">
 | 
				
			||||||
 | 
					                <rect id="矩形" opacity="0" x="0" y="0" width="24" height="24"></rect>
 | 
				
			||||||
 | 
					                <path d="M22.2162957,1 L1.78372985,1 C1.35093374,1 1,1.33440606 1,1.75168741 L1,7 L23,7 L23,1.75168741 C23,1.33486987 22.6491174,1 22.2162957,1 Z M4.00067655,5 C3.44751496,5 3,4.5525025 3,3.99928444 C3,3.44752352 3.44751496,3 4.00067655,3 C4.55245902,3 5,3.44752352 5,3.99928444 C5,4.5525025 4.55245902,5 4.00067655,5 L4.00067655,5 Z M1,22.2486389 C1,22.6651285 1.35099088,23 1.78385746,23 L22.2161681,23 C22.6499302,23 23,22.6651041 23,22.2486389 L23,17 L1,17 L1,22.2486389 Z M4.00067655,19 C4.55245902,19 5,19.4475091 5,19.9997788 C5,20.5524648 4.55245902,21 4.00067655,21 C3.44751496,21 3,20.5524648 3,19.9997788 C3,19.4475091 3.44751496,19 4.00067655,19 Z M1,15 L23,15 L23,9 L1,9 L1,15 Z M4.00067655,11 C4.55245902,11 5,11.4479977 5,12.0002082 C5,12.552939 4.55245902,13 4.00067655,13 C3.44751496,13 3,12.552939 3,12.0002082 C3,11.4479977 3.44751496,11 4.00067655,11 L4.00067655,11 Z" id="形状"></path>
 | 
				
			||||||
 | 
					            </g>
 | 
				
			||||||
 | 
					        </g>
 | 
				
			||||||
 | 
					    </g>
 | 
				
			||||||
 | 
					</svg>
 | 
				
			||||||
| 
		 After Width: | Height: | Size: 1.5 KiB  | 
@@ -1,9 +1,10 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
<svg width="22px" height="22px" viewBox="0 0 22 22" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 | 
					<svg width="22px" height="22px" viewBox="0 0 22 22" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 | 
				
			||||||
 | 
					    <title>编组 54备份</title>
 | 
				
			||||||
    <g id="驾驶舱" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
 | 
					    <g id="驾驶舱" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
 | 
				
			||||||
        <g id="编组-54备份">
 | 
					        <g id="编组-54备份">
 | 
				
			||||||
            <rect id="矩形" stroke="#979797" fill="#D8D8D8" opacity="0" x="0.5" y="0.5" width="21" height="21"></rect>
 | 
					            <rect id="矩形" stroke="#979797" fill="#D8D8D8" opacity="0" x="0.5" y="0.5" width="21" height="21"></rect>
 | 
				
			||||||
            <path d="M18.4001211,1 L18.574731,1.00571398 C18.8641421,1.02474925 19.1451559,1.09128771 19.4122178,1.20447947 C19.7221027,1.33395436 19.9991094,1.52058631 20.2392616,1.76073844 C20.4776764,1.99915325 20.6652172,2.27804627 20.7953442,2.58736464 C20.9313506,2.90825642 21,3.24882158 21,3.59987893 L21,3.59987893 L21,18.4001211 L20.994286,18.574731 C20.9752507,18.8641421 20.9087123,19.1451559 20.7955205,19.4122178 C20.6660456,19.7221027 20.4794137,19.9991094 20.2392616,20.2392616 C20.0008468,20.4776764 19.7219537,20.6652172 19.4126354,20.7953442 C19.0917436,20.9313506 18.7511784,21 18.4001211,21 L18.4001211,21 L3.59987893,21 L3.42526905,20.994286 C3.13585794,20.9752507 2.85484405,20.9087123 2.58778224,20.7955205 C2.2778973,20.6660456 2.00089057,20.4794137 1.76073844,20.2392616 C1.52232363,20.0008468 1.33478285,19.7219537 1.20465581,19.4126354 C1.06864936,19.0917436 1,18.7511784 1,18.4001211 L1,18.4001211 L1,3.59987893 L1.00571398,3.42526905 C1.02474925,3.13585794 1.09128771,2.85484405 1.20447947,2.58778224 C1.33395436,2.2778973 1.52058631,2.00089057 1.76073844,1.76073844 C1.99915325,1.52232363 2.27804627,1.33478285 2.58736464,1.20465581 C2.90825642,1.06864936 3.24882158,1 3.59987893,1 L3.59987893,1 L18.4001211,1 Z M18.4001211,2.29539952 L3.59987893,2.29539952 L3.49797651,2.2993263 C2.82542992,2.35136056 2.29539952,2.9140495 2.29539952,3.59987893 L2.29539952,3.59987893 L2.29539952,18.4001211 L2.2993263,18.5020235 C2.35136056,19.1745701 2.9140495,19.7046005 3.59987893,19.7046005 L3.59987893,19.7046005 L18.4001211,19.7046005 L18.5020235,19.7006737 C19.1745701,19.6486394 19.7046005,19.0859505 19.7046005,18.4001211 L19.7046005,18.4001211 L19.7046005,3.59987893 L19.7006737,3.49797651 C19.6486394,2.82542992 19.0859505,2.29539952 18.4001211,2.29539952 L18.4001211,2.29539952 Z M9.43538136,11.905569 L9.512257,11.9100096 C9.84008849,11.9481352 10.094431,12.2270701 10.094431,12.5646186 L10.094431,12.5646186 L10.094431,17.4609564 L10.0899283,17.5389459 C10.0512829,17.8716536 9.76881474,18.1312053 9.43419701,18.1245792 C9.08289988,18.1173731 8.79903148,17.828505 8.79903148,17.4768462 L8.79903148,17.4768462 L8.79903148,14.1393887 L5.60185236,17.3365679 L5.54107965,17.3901644 C5.28773557,17.5866851 4.91838364,17.5688196 4.6861319,17.3365679 C4.43452585,17.0849618 4.43452585,16.6724534 4.6861319,16.4208474 L4.6861319,16.4208474 L7.90601077,13.2009685 L4.58217312,13.2009685 L4.50402457,13.1964861 C4.17073404,13.1580095 3.9119308,12.876675 3.91855064,12.540718 C3.92574827,12.1880363 4.21375409,11.905569 4.56628329,11.905569 L4.56628329,11.905569 L9.43538136,11.905569 Z M12.565803,3.8731508 L12.6398736,3.87892442 C12.9562044,3.92194416 13.2009685,4.19434347 13.2009685,4.52088378 L13.2009685,4.52088378 L13.2009685,7.86061126 L16.3981476,4.66343214 L16.4589204,4.60983559 C16.7122644,4.41331488 17.0816164,4.4311804 17.3138681,4.66343214 C17.5654742,4.91503819 17.5654742,5.32754655 17.3138681,5.5791526 L17.3138681,5.5791526 L14.0914951,8.79903148 L17.4155569,8.79903148 L17.4936876,8.80351509 C17.8269523,8.84200281 18.0864105,9.12344101 18.081435,9.46011654 C18.0742517,9.81196375 17.7862459,10.094431 17.4337167,10.094431 L17.4337167,10.094431 L12.5691586,10.094431 L12.4916394,10.0899766 C12.1611316,10.051728 11.905569,9.77181051 11.905569,9.4308414 L11.905569,9.4308414 L11.905569,4.53677361 L11.9100717,4.45878413 C11.9487171,4.12607641 12.2311853,3.86652471 12.565803,3.8731508 L12.565803,3.8731508 Z" id="形状结合" fill="#52FFF1" fill-rule="nonzero" opacity="0.79078311"></path>
 | 
					            <path d="M18.4001211,1 L18.574731,1.00571398 C18.8641421,1.02474925 19.1451559,1.09128771 19.4122178,1.20447947 C19.7221027,1.33395436 19.9991094,1.52058631 20.2392616,1.76073844 C20.4776764,1.99915325 20.6652172,2.27804627 20.7953442,2.58736464 C20.9313506,2.90825642 21,3.24882158 21,3.59987893 L21,3.59987893 L21,18.4001211 L20.994286,18.574731 C20.9752507,18.8641421 20.9087123,19.1451559 20.7955205,19.4122178 C20.6660456,19.7221027 20.4794137,19.9991094 20.2392616,20.2392616 C20.0008468,20.4776764 19.7219537,20.6652172 19.4126354,20.7953442 C19.0917436,20.9313506 18.7511784,21 18.4001211,21 L18.4001211,21 L3.59987893,21 L3.42526905,20.994286 C3.13585794,20.9752507 2.85484405,20.9087123 2.58778224,20.7955205 C2.2778973,20.6660456 2.00089057,20.4794137 1.76073844,20.2392616 C1.52232363,20.0008468 1.33478285,19.7219537 1.20465581,19.4126354 C1.06864936,19.0917436 1,18.7511784 1,18.4001211 L1,18.4001211 L1,3.59987893 L1.00571398,3.42526905 C1.02474925,3.13585794 1.09128771,2.85484405 1.20447947,2.58778224 C1.33395436,2.2778973 1.52058631,2.00089057 1.76073844,1.76073844 C1.99915325,1.52232363 2.27804627,1.33478285 2.58736464,1.20465581 C2.90825642,1.06864936 3.24882158,1 3.59987893,1 L3.59987893,1 L18.4001211,1 Z M18.4001211,2.29539952 L3.59987893,2.29539952 L3.49797651,2.2993263 C2.82542992,2.35136056 2.29539952,2.9140495 2.29539952,3.59987893 L2.29539952,3.59987893 L2.29539952,18.4001211 L2.2993263,18.5020235 C2.35136056,19.1745701 2.9140495,19.7046005 3.59987893,19.7046005 L3.59987893,19.7046005 L18.4001211,19.7046005 L18.5020235,19.7006737 C19.1745701,19.6486394 19.7046005,19.0859505 19.7046005,18.4001211 L19.7046005,18.4001211 L19.7046005,3.59987893 L19.7006737,3.49797651 C19.6486394,2.82542992 19.0859505,2.29539952 18.4001211,2.29539952 L18.4001211,2.29539952 Z M9.43538136,11.905569 L9.512257,11.9100096 C9.84008849,11.9481352 10.094431,12.2270701 10.094431,12.5646186 L10.094431,12.5646186 L10.094431,17.4609564 L10.0899283,17.5389459 C10.0512829,17.8716536 9.76881474,18.1312053 9.43419701,18.1245792 C9.08289988,18.1173731 8.79903148,17.828505 8.79903148,17.4768462 L8.79903148,17.4768462 L8.79903148,14.1393887 L5.60185236,17.3365679 L5.54107965,17.3901644 C5.28773557,17.5866851 4.91838364,17.5688196 4.6861319,17.3365679 C4.43452585,17.0849618 4.43452585,16.6724534 4.6861319,16.4208474 L4.6861319,16.4208474 L7.90601077,13.2009685 L4.58217312,13.2009685 L4.50402457,13.1964861 C4.17073404,13.1580095 3.9119308,12.876675 3.91855064,12.540718 C3.92574827,12.1880363 4.21375409,11.905569 4.56628329,11.905569 L4.56628329,11.905569 L9.43538136,11.905569 Z M12.565803,3.8731508 L12.6398736,3.87892442 C12.9562044,3.92194416 13.2009685,4.19434347 13.2009685,4.52088378 L13.2009685,4.52088378 L13.2009685,7.86061126 L16.3981476,4.66343214 L16.4589204,4.60983559 C16.7122644,4.41331488 17.0816164,4.4311804 17.3138681,4.66343214 C17.5654742,4.91503819 17.5654742,5.32754655 17.3138681,5.5791526 L17.3138681,5.5791526 L14.0914951,8.79903148 L17.4155569,8.79903148 L17.4936876,8.80351509 C17.8269523,8.84200281 18.0864105,9.12344101 18.081435,9.46011654 C18.0742517,9.81196375 17.7862459,10.094431 17.4337167,10.094431 L17.4337167,10.094431 L12.5691586,10.094431 L12.4916394,10.0899766 C12.1611316,10.051728 11.905569,9.77181051 11.905569,9.4308414 L11.905569,9.4308414 L11.905569,4.53677361 L11.9100717,4.45878413 C11.9487171,4.12607641 12.2311853,3.86652471 12.565803,3.8731508 L12.565803,3.8731508 Z" id="形状结合" fill="#69b4ff" fill-rule="nonzero" opacity="0.79078311"></path>
 | 
				
			||||||
        </g>
 | 
					        </g>
 | 
				
			||||||
    </g>
 | 
					    </g>
 | 
				
			||||||
</svg>
 | 
					</svg>
 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB  | 
							
								
								
									
										13
									
								
								src/assets/icons/svg/yanqi.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<svg width="24px" height="23.9254658px" viewBox="0 0 24 23.9254658" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 | 
				
			||||||
 | 
					    <title>烟气</title>
 | 
				
			||||||
 | 
					    <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
 | 
				
			||||||
 | 
					        <g id="成本看板" transform="translate(-1319.000000, -293.962733)" fill-rule="nonzero">
 | 
				
			||||||
 | 
					            <g id="烟气" transform="translate(1319.000000, 293.962733)">
 | 
				
			||||||
 | 
					                <rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="24" height="23.9254658"></rect>
 | 
				
			||||||
 | 
					                <path d="M10.6744092,10.2458592 C10.6744092,10.2458592 3.76099563,15.5072464 6.34479666,19.9378882 C5.78613697,19.5917443 3.83082809,18.2071687 3.2721684,17.4456522 C1.73585426,15.5072464 1.80568673,14.1918996 2.36434642,12.8765528 C3.6213307,9.89971532 7.39228357,6.9921066 8.50960292,5.1229296 C10.3950794,2.07686335 8.85876522,-7.08336081e-14 8.85876522,-7.08336081e-14 C8.85876522,-7.08336081e-14 12.769383,1.73071946 12.9788804,4.98447204 C13.2582102,8.16899586 10.6744092,10.2458592 10.6744092,10.2458592 Z" id="路径" fill="#FFFFFF"></path>
 | 
				
			||||||
 | 
					                <path d="M9.55552302,-6.3573715e-14 L9.48496561,-6.3573715e-14 L9.41440819,-6.3573715e-14 L9.34385077,-6.3573715e-14 L9.27329335,-6.3573715e-14 C9.27329335,-6.3573715e-14 9.20273594,-6.3573715e-14 9.20273596,0.0693204763 L9.13217854,0.0693204763 L9.06162113,0.138640927 L8.99106371,0.207961403 L8.99106371,0.485243308 C8.99106371,0.485243308 8.99106371,0.554563785 9.06162113,0.554563785 L9.06162113,0.623884235 C10.1199823,2.35689604 9.69663786,4.36718972 7.79158769,6.65476534 C7.43880063,7.07068817 6.94489873,7.55593148 6.38043941,8.17981571 C4.96929114,9.35826373 3.6992577,10.6753527 2.99368358,11.7844803 C2.0764372,13.1015692 1.79420756,14.6266197 2.14699459,16.0130291 C2.57033907,17.8153614 4.05204476,19.4790527 6.52155425,20.8654621 C6.59211167,20.9347826 6.66266909,20.9347826 6.73322648,20.9347826 C6.80378389,20.9347826 6.87434131,20.9347826 6.94489873,20.8654621 C7.01545615,20.7961417 7.08601356,20.7961417 7.08601354,20.7268212 L7.08601354,20.6575007 L7.08601354,20.5881803 L7.08601354,20.5188598 L7.08601354,20.4495393 C7.08601354,20.3802188 7.08601354,20.3802188 7.01545615,20.3802188 L7.01545615,20.3108984 C5.60430787,18.3006047 7.01545615,16.0130291 7.9327025,14.9039015 L8.00325992,14.8345811 C8.92050629,13.656133 9.83775267,12.7549669 10.6138842,11.9231212 C11.1783435,11.3685574 11.6722454,10.8833141 12.0955899,10.3287504 C13.647853,8.45709759 14.2123123,6.72408579 13.9300827,5.06039446 C13.5772956,3.18874173 12.0955899,1.4557299 9.55552302,-6.3573715e-14 Z M9.48470738,9.26748999 C8.64336853,10.0744997 6.3074421,10.0757542 5.3258801,11.2862689 C3.92364867,12.9675392 5.42114982,16.3973307 5.7015961,17.9440994 C4.29936467,16.9353372 3.38791424,15.8593242 3.10746797,14.6488095 C2.82702169,13.5727965 3.10746797,12.3622819 3.8085837,11.2862689 L3.87869525,11.219018 C4.5096994,10.2102558 5.84181925,8.93249038 6.89349283,7.9237282 C7.52449698,7.31847086 8.01527795,6.84771519 8.3658358,6.44421029 C10.3289598,4.22493344 10.6094061,2.34191068 10.3289598,0.99689441 C11.5208565,1.87115499 12.6426417,3.01441881 12.9230879,4.49393671 C13.2035342,5.77170217 12.7127532,7.18396925 11.5208565,8.66348714 L9.48470738,9.26748999 Z M21.9281191,9.58246693 C21.6004931,7.86679721 20.3555139,6.28838107 18.1931817,4.98447205 L18.1276565,4.98447205 L18.0621313,4.98447205 L17.9966061,4.98447205 L17.9310808,4.98447205 C17.8655556,4.98447205 17.8655556,4.98447205 17.8655556,5.05309884 L17.8000304,5.05309884 L17.7345052,5.12172564 L17.66898,5.19035243 L17.66898,5.46485958 C17.66898,5.46485958 17.66898,5.53348637 17.7345052,5.53348637 L17.7345052,5.60211316 C18.6518582,7.11190253 18.2587069,8.89619902 16.6861017,10.9550027 C16.4240008,11.2981367 15.9653243,11.7785242 15.5066478,12.3275385 C14.5237695,13.3569403 13.4098408,14.5922225 12.8201138,15.6216244 C12.0993364,16.7882798 11.8372356,18.1608156 12.0993364,19.4647245 C12.4924877,21.1117675 13.7374669,22.5529301 15.8342739,23.856839 C15.8997991,23.9254658 15.9653243,23.9254658 16.0308495,23.9254658 C16.0963747,23.9254658 16.1619,23.9254658 16.2274252,23.856839 C16.2929504,23.7882123 16.3584756,23.7882123 16.3584756,23.7195855 L16.3584756,23.6509587 L16.3584756,23.5823319 L16.3584756,23.5137051 L16.3584756,23.4450783 C16.3584756,23.4450783 16.3584756,23.3764515 16.2929504,23.3764515 L16.2929504,23.3078247 C15.1790217,21.5235282 16.2929504,19.5333513 17.079253,18.5039495 L17.1447782,18.4353227 C17.9310808,17.3372941 18.6518582,16.5137726 19.3726356,15.8275047 C19.8313122,15.3471172 20.2899887,14.8667297 20.6176148,14.454969 C21.7315435,12.6020456 22.19022,11.0922563 21.9281191,9.58246693 L21.9281191,9.58246693 Z M20.5837087,13.7271478 C20.225071,14.1241412 19.7947058,14.5211345 19.2926131,14.9842934 C18.5036102,15.7121146 17.6428797,16.5061012 16.7104218,17.6309157 C15.4193261,19.086558 14.9172334,20.6083659 15.2041435,21.931677 C13.9130479,21.0715248 13.2958761,20.3327069 13.0806935,19.3402236 C12.8655109,18.3477402 13.0806935,17.3552568 13.7262413,16.3627735 L13.7979689,16.2966079 C14.3717892,15.4364556 15.4193261,13.99181 16.4235116,13.0654922 C16.9973319,12.5361677 17.4994247,12.0730088 17.7863348,11.742181 C19.5077957,9.75721431 19.8664333,8.16924091 19.6512507,6.97826087 C20.7271638,7.77224757 21.7313493,8.76473095 21.9465319,9.95571099 C22.1617145,11.2128566 21.7313493,12.4700022 20.5837087,13.7271478 Z" id="形状" fill="#FFFFFF"></path>
 | 
				
			||||||
 | 
					            </g>
 | 
				
			||||||
 | 
					        </g>
 | 
				
			||||||
 | 
					    </g>
 | 
				
			||||||
 | 
					</svg>
 | 
				
			||||||
| 
		 After Width: | Height: | Size: 5.4 KiB  | 
| 
		 Before Width: | Height: | Size: 595 B  | 
| 
		 Before Width: | Height: | Size: 550 B  | 
| 
		 Before Width: | Height: | Size: 33 KiB  | 
| 
		 Before Width: | Height: | Size: 92 KiB  | 
| 
		 Before Width: | Height: | Size: 16 KiB  | 
| 
		 Before Width: | Height: | Size: 46 KiB  | 
| 
		 Before Width: | Height: | Size: 49 KiB  | 
| 
		 Before Width: | Height: | Size: 64 KiB  | 
| 
		 Before Width: | Height: | Size: 1.1 KiB  | 
| 
		 Before Width: | Height: | Size: 1.1 KiB  | 
| 
		 Before Width: | Height: | Size: 1.1 KiB  | 
| 
		 Before Width: | Height: | Size: 91 KiB  | 
| 
		 Before Width: | Height: | Size: 107 KiB  | 
| 
		 Before Width: | Height: | Size: 36 KiB  | 
| 
		 Before Width: | Height: | Size: 58 KiB  | 
| 
		 Before Width: | Height: | Size: 113 KiB  | 
| 
		 Before Width: | Height: | Size: 14 KiB  | 
| 
		 Before Width: | Height: | Size: 5.9 KiB  | 
| 
		 Before Width: | Height: | Size: 1.4 KiB  | 
| 
		 Before Width: | Height: | Size: 16 KiB  | 
| 
		 Before Width: | Height: | Size: 16 KiB  | 
| 
		 Before Width: | Height: | Size: 14 KiB  | 
| 
		 Before Width: | Height: | Size: 14 KiB  | 
| 
		 Before Width: | Height: | Size: 48 KiB  | 
| 
		 Before Width: | Height: | Size: 45 KiB  | 
| 
		 Before Width: | Height: | Size: 55 KiB  | 
| 
		 Before Width: | Height: | Size: 1.5 KiB  | 
| 
		 Before Width: | Height: | Size: 1.7 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/cold-data-board-msg1.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 16 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/cold-data-board-msg2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 14 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/home-bg.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 1.2 MiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/img/home-progress-bg.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 936 B  | 
@@ -92,13 +92,13 @@
 | 
				
			|||||||
								{{ col.uploadTips || '只能上传jpg/png文件, 大小不超过2MB' }}
 | 
													{{ col.uploadTips || '只能上传jpg/png文件, 大小不超过2MB' }}
 | 
				
			||||||
							</div>
 | 
												</div>
 | 
				
			||||||
						</el-upload>
 | 
											</el-upload>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
						<uploadedFile
 | 
											<uploadedFile
 | 
				
			||||||
							class="file"
 | 
												class="file"
 | 
				
			||||||
							v-for="file in form[col.prop] || []"
 | 
												v-for="file in form[col.prop] || []"
 | 
				
			||||||
							:file="file"
 | 
												:file="file"
 | 
				
			||||||
							:key="file.fileUrl"
 | 
												:key="file.fileUrl"
 | 
				
			||||||
							@delete="handleDeleteFile(file)"
 | 
												@delete="handleDeleteFile(file)" />
 | 
				
			||||||
							@Preview="handlePreview(file)" />
 | 
					 | 
				
			||||||
					</div>
 | 
										</div>
 | 
				
			||||||
				</el-form-item>
 | 
									</el-form-item>
 | 
				
			||||||
			</el-col>
 | 
								</el-col>
 | 
				
			||||||
@@ -138,9 +138,6 @@ const uploadedFile = {
 | 
				
			|||||||
		handleDelete() {
 | 
							handleDelete() {
 | 
				
			||||||
			this.$emit('delete', this.file);
 | 
								this.$emit('delete', this.file);
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		handlePreview() {
 | 
					 | 
				
			||||||
			this.$emit('Preview', this.file);
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	mounted() {},
 | 
						mounted() {},
 | 
				
			||||||
	render: function (h) {
 | 
						render: function (h) {
 | 
				
			||||||
@@ -159,7 +156,7 @@ const uploadedFile = {
 | 
				
			|||||||
					cursor: 'pointer',
 | 
										cursor: 'pointer',
 | 
				
			||||||
					display: 'inline-block',
 | 
										display: 'inline-block',
 | 
				
			||||||
				}}>
 | 
									}}>
 | 
				
			||||||
				<el-button onClick={this.handlePreview}>{this.file.fileName}</el-button>
 | 
									{this.file.fileName}
 | 
				
			||||||
				<el-button
 | 
									<el-button
 | 
				
			||||||
					type="text"
 | 
										type="text"
 | 
				
			||||||
					icon="el-icon-close"
 | 
										icon="el-icon-close"
 | 
				
			||||||
@@ -259,20 +256,6 @@ export default {
 | 
				
			|||||||
		resetFields(args) {
 | 
							resetFields(args) {
 | 
				
			||||||
			return this.$refs.form.resetFields(args);
 | 
								return this.$refs.form.resetFields(args);
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		async handlePreview(file) {
 | 
					 | 
				
			||||||
			const data = await this.$axios({
 | 
					 | 
				
			||||||
				url: file.fileUrl,
 | 
					 | 
				
			||||||
				method: 'get',
 | 
					 | 
				
			||||||
				responseType: 'blob',
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
			const link = document.createElement('a');
 | 
					 | 
				
			||||||
			link.href = window.URL.createObjectURL(new Blob([data]));
 | 
					 | 
				
			||||||
			link.download = file.fileName;
 | 
					 | 
				
			||||||
			document.body.appendChild(link);
 | 
					 | 
				
			||||||
			link.click();
 | 
					 | 
				
			||||||
			document.body.removeChild(link);
 | 
					 | 
				
			||||||
			window.URL.revokeObjectURL(link.href);
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		// getCode
 | 
							// getCode
 | 
				
			||||||
		async getCode(url) {
 | 
							async getCode(url) {
 | 
				
			||||||
			const response = await this.$axios(url);
 | 
								const response = await this.$axios(url);
 | 
				
			||||||
@@ -372,9 +355,7 @@ export default {
 | 
				
			|||||||
			if (!promiseList.length) this.formLoading = false;
 | 
								if (!promiseList.length) this.formLoading = false;
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		// 上传成功的特殊处理
 | 
							// 上传成功的特殊处理
 | 
				
			||||||
		beforeUpload(file) {
 | 
							beforeUpload() {},
 | 
				
			||||||
      console.log(file)
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
		// 上传前的验证规则可通过 bind 属性传入
 | 
							// 上传前的验证规则可通过 bind 属性传入
 | 
				
			||||||
		handleUploadSuccess(response, file, fileList) {
 | 
							handleUploadSuccess(response, file, fileList) {
 | 
				
			||||||
			this.form.files.push({
 | 
								this.form.files.push({
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -67,7 +67,7 @@ export default {
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			title: '中建材智能化院',
 | 
								title: '中建材自贡新能源',
 | 
				
			||||||
			logo: logoImg,
 | 
								logo: logoImg,
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,6 +4,7 @@ import Element from 'element-ui';
 | 
				
			|||||||
import './assets/styles/element-variables.scss';
 | 
					import './assets/styles/element-variables.scss';
 | 
				
			||||||
import '@/assets/styles/index.scss'; // global css
 | 
					import '@/assets/styles/index.scss'; // global css
 | 
				
			||||||
import '@/assets/styles/ruoyi.scss'; // ruoyi css
 | 
					import '@/assets/styles/ruoyi.scss'; // ruoyi css
 | 
				
			||||||
 | 
					import '@/assets/font/font.css'
 | 
				
			||||||
import App from './App';
 | 
					import App from './App';
 | 
				
			||||||
import store from './store';
 | 
					import store from './store';
 | 
				
			||||||
import router from './router';
 | 
					import router from './router';
 | 
				
			||||||
@@ -21,7 +22,6 @@ import {
 | 
				
			|||||||
	handleTree,
 | 
						handleTree,
 | 
				
			||||||
	addBeginAndEndTime,
 | 
						addBeginAndEndTime,
 | 
				
			||||||
	divide,
 | 
						divide,
 | 
				
			||||||
	formatThousands
 | 
					 | 
				
			||||||
} from '@/utils/ruoyi';
 | 
					} from '@/utils/ruoyi';
 | 
				
			||||||
import Pagination from '@/components/Pagination';
 | 
					import Pagination from '@/components/Pagination';
 | 
				
			||||||
// 自定义表格工具扩展
 | 
					// 自定义表格工具扩展
 | 
				
			||||||
@@ -35,7 +35,6 @@ import {
 | 
				
			|||||||
	getDictDatas,
 | 
						getDictDatas,
 | 
				
			||||||
	getDictDatas2,
 | 
						getDictDatas2,
 | 
				
			||||||
} from '@/utils/dict';
 | 
					} from '@/utils/dict';
 | 
				
			||||||
 | 
					 | 
				
			||||||
import './theme/index.css'; // 自定义主题包 - code-brick-zj
 | 
					import './theme/index.css'; // 自定义主题包 - code-brick-zj
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 全局方法挂载
 | 
					// 全局方法挂载
 | 
				
			||||||
@@ -46,7 +45,6 @@ Vue.prototype.resetForm = resetForm;
 | 
				
			|||||||
Vue.prototype.getDictDatas = getDictDatas;
 | 
					Vue.prototype.getDictDatas = getDictDatas;
 | 
				
			||||||
Vue.prototype.getDictDatas2 = getDictDatas2;
 | 
					Vue.prototype.getDictDatas2 = getDictDatas2;
 | 
				
			||||||
Vue.prototype.getDictDataLabel = getDictDataLabel;
 | 
					Vue.prototype.getDictDataLabel = getDictDataLabel;
 | 
				
			||||||
Vue.prototype.formatThousands = formatThousands;
 | 
					 | 
				
			||||||
Vue.prototype.DICT_TYPE = DICT_TYPE;
 | 
					Vue.prototype.DICT_TYPE = DICT_TYPE;
 | 
				
			||||||
Vue.prototype.handleTree = handleTree;
 | 
					Vue.prototype.handleTree = handleTree;
 | 
				
			||||||
Vue.prototype.addBeginAndEndTime = addBeginAndEndTime;
 | 
					Vue.prototype.addBeginAndEndTime = addBeginAndEndTime;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
 * @Author: zwq
 | 
					 * @Author: zwq
 | 
				
			||||||
 * @Date: 2022-08-24 11:19:43
 | 
					 * @Date: 2022-08-24 11:19:43
 | 
				
			||||||
 * @LastEditors: zwq
 | 
					 * @LastEditors: zwq
 | 
				
			||||||
 * @LastEditTime: 2024-04-02 09:33:29
 | 
					 * @LastEditTime: 2025-02-21 13:18:46
 | 
				
			||||||
 * @Description:
 | 
					 * @Description:
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
@@ -16,7 +16,7 @@ export default {
 | 
				
			|||||||
      },
 | 
					      },
 | 
				
			||||||
      tableData: [], //table数据
 | 
					      tableData: [], //table数据
 | 
				
			||||||
      listQuery: { //分页
 | 
					      listQuery: { //分页
 | 
				
			||||||
        pageSize: 10,
 | 
					        pageSize: 20,
 | 
				
			||||||
        pageNo: 1,
 | 
					        pageNo: 1,
 | 
				
			||||||
        total: 1,
 | 
					        total: 1,
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,20 +0,0 @@
 | 
				
			|||||||
export default {
 | 
					 | 
				
			||||||
	data() {
 | 
					 | 
				
			||||||
		return {
 | 
					 | 
				
			||||||
			tableH: this.tableHeight(260),
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	created() {
 | 
					 | 
				
			||||||
		this.tableH = this?.heightNum ? this.tableHeight(this.heightNum) : this.tableHeight(260);
 | 
					 | 
				
			||||||
		window.addEventListener('resize', this._setTableHeight);
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	destroyed() {
 | 
					 | 
				
			||||||
		window.removeEventListener('resize', this._setTableHeight);
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	methods: {
 | 
					 | 
				
			||||||
		_setTableHeight() {
 | 
					 | 
				
			||||||
			this.tableH = this?.heightNum ? this.tableHeight(this.heightNum) : this.tableHeight(260);
 | 
					 | 
				
			||||||
			// this.tableH = this.tableHeight(260);
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
@@ -69,6 +69,26 @@ export const constantRoutes = [
 | 
				
			|||||||
    component: (resolve) => require(['@/views/print/design'], resolve),
 | 
					    component: (resolve) => require(['@/views/print/design'], resolve),
 | 
				
			||||||
    hidden: true
 | 
					    hidden: true
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    path: '/allDashboard-model',
 | 
				
			||||||
 | 
					    component: (resolve) => require(['@/views/dashboard/allDashboard/index-model'], resolve),
 | 
				
			||||||
 | 
					    hidden: true
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    path: '/rawDashboard-model',
 | 
				
			||||||
 | 
					    component: (resolve) => require(['@/views/dashboard/rawDashboard/index-model'], resolve),
 | 
				
			||||||
 | 
					    hidden: true
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    path: '/deepDashboard-model',
 | 
				
			||||||
 | 
					    component: (resolve) => require(['@/views/dashboard/deepDashboard/index-model'], resolve),
 | 
				
			||||||
 | 
					    hidden: true
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    path: '/coldDashboard-model',
 | 
				
			||||||
 | 
					    component: (resolve) => require(['@/views/dashboard/coldDashboard/index-model'], resolve),
 | 
				
			||||||
 | 
					    hidden: true
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    path: "",
 | 
					    path: "",
 | 
				
			||||||
    component: Layout,
 | 
					    component: Layout,
 | 
				
			||||||
@@ -76,9 +96,15 @@ export const constantRoutes = [
 | 
				
			|||||||
    children: [
 | 
					    children: [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
        path: "index",
 | 
					        path: "index",
 | 
				
			||||||
        component: (resolve) => require(["@/views/core/base/factory/index"], resolve),
 | 
					        component: (resolve) => require(["@/views/cost/index"], resolve),
 | 
				
			||||||
        name: "首页",
 | 
					        name: "首页",
 | 
				
			||||||
        meta: { title: "首页", icon: "dashboard", affix: true },
 | 
					        meta: { title: "首页", icon: "dashboard", affix: true },
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        path: "indexDetail",
 | 
				
			||||||
 | 
					        component: (resolve) => require(["@/views/cost/indexDetail"], resolve),
 | 
				
			||||||
 | 
					        name: "首页详细",
 | 
				
			||||||
 | 
					        meta: { title: "首页详细", icon: "dashboard"},
 | 
				
			||||||
        hidden: true
 | 
					        hidden: true
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -86,7 +86,6 @@ export const DICT_TYPE = {
 | 
				
			|||||||
  // ============== PRODUCT - 产品模块 =============
 | 
					  // ============== PRODUCT - 产品模块 =============
 | 
				
			||||||
  UNIT_DICT: 'unit_dict',
 | 
					  UNIT_DICT: 'unit_dict',
 | 
				
			||||||
  PRODUCT_TYPE: 'product_type',
 | 
					  PRODUCT_TYPE: 'product_type',
 | 
				
			||||||
  PROCESS_TYPE: 'process_type',
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // ============== ENERGY - 能源模块 =============
 | 
					  // ============== ENERGY - 能源模块 =============
 | 
				
			||||||
  ENERGY_UNIT: 'energy_unit',
 | 
					  ENERGY_UNIT: 'energy_unit',
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -295,15 +295,3 @@ export function getPath(path) {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
  return Math.floor(divisor/dividend*100)/100;
 | 
					  return Math.floor(divisor/dividend*100)/100;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
// 通用千分位格式化函数
 | 
					 | 
				
			||||||
export function formatThousands(value) {
 | 
					 | 
				
			||||||
  if (value === null || value === undefined) return '0'
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  // 清理已有逗号并转为数字
 | 
					 | 
				
			||||||
  const numValue = Number(String(value).replace(/,/g, ''))
 | 
					 | 
				
			||||||
  if (isNaN(numValue)) return '0'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // 支持小数处理
 | 
					 | 
				
			||||||
  return numValue.toLocaleString('en-US')
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										121
									
								
								src/views/Environmental/Envi-yure-log.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,121 @@
 | 
				
			|||||||
 | 
					<!--
 | 
				
			||||||
 | 
					 * @Author: zwq
 | 
				
			||||||
 | 
					 * @Date: 2024-11-13 14:01:16
 | 
				
			||||||
 | 
					 * @LastEditors: zwq
 | 
				
			||||||
 | 
					 * @LastEditTime: 2025-02-21 14:32:08
 | 
				
			||||||
 | 
					 * @Description:
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
						<div>
 | 
				
			||||||
 | 
							<div class="app-container">
 | 
				
			||||||
 | 
								<!-- 搜索工作栏 -->
 | 
				
			||||||
 | 
								<search-bar
 | 
				
			||||||
 | 
									:formConfigs="formConfig"
 | 
				
			||||||
 | 
									ref="searchBarForm"
 | 
				
			||||||
 | 
									@headBtnClick="buttonClick" />
 | 
				
			||||||
 | 
								<!-- 列表 -->
 | 
				
			||||||
 | 
								<base-table
 | 
				
			||||||
 | 
									:page="listQuery.pageNo"
 | 
				
			||||||
 | 
									:limit="listQuery.pageSize"
 | 
				
			||||||
 | 
									:table-props="tableProps"
 | 
				
			||||||
 | 
									:table-data="tableData"
 | 
				
			||||||
 | 
									:max-height="tableH" />
 | 
				
			||||||
 | 
								<pagination
 | 
				
			||||||
 | 
									:page.sync="listQuery.pageNo"
 | 
				
			||||||
 | 
									:limit.sync="listQuery.pageSize"
 | 
				
			||||||
 | 
									:total="listQuery.total"
 | 
				
			||||||
 | 
									@pagination="getDataList" />
 | 
				
			||||||
 | 
							</div>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					import basicPage from '@/mixins/basic-page';
 | 
				
			||||||
 | 
					import { yurepage } from '@/api/environmental/environmentalLog';
 | 
				
			||||||
 | 
					import { parseTime } from '@/filter/code-filter';
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const tableProps = [
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							prop: 'recordTime',
 | 
				
			||||||
 | 
							label: '记录时间',
 | 
				
			||||||
 | 
							filter: parseTime,
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							prop: 'remark',
 | 
				
			||||||
 | 
							label: '备注',
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							prop: 'usingQuantity',
 | 
				
			||||||
 | 
							label: '发电量',
 | 
				
			||||||
 | 
					    filter: (val) => (val != null ? Number(val).toFixed(3) : '-'),
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
						name: '',
 | 
				
			||||||
 | 
						mixins: [basicPage, tableHeightMixin],
 | 
				
			||||||
 | 
						data() {
 | 
				
			||||||
 | 
							return {
 | 
				
			||||||
 | 
								urlOptions: {
 | 
				
			||||||
 | 
									getDataListURL: yurepage,
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								formConfig: [
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										type: 'datePicker',
 | 
				
			||||||
 | 
										label: '时间',
 | 
				
			||||||
 | 
										dateType: 'datetimerange',
 | 
				
			||||||
 | 
										format: 'yyyy-MM-dd HH:mm:ss',
 | 
				
			||||||
 | 
										valueFormat: 'yyyy-MM-dd HH:mm:ss',
 | 
				
			||||||
 | 
										rangeSeparator: '-',
 | 
				
			||||||
 | 
										startPlaceholder: '开始时间',
 | 
				
			||||||
 | 
										endPlaceholder: '结束时间',
 | 
				
			||||||
 | 
										width: 350,
 | 
				
			||||||
 | 
										param: 'searchTime',
 | 
				
			||||||
 | 
										clearable: false,
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										type: 'button',
 | 
				
			||||||
 | 
										btnName: '查询',
 | 
				
			||||||
 | 
										name: 'search',
 | 
				
			||||||
 | 
										color: 'primary',
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								],
 | 
				
			||||||
 | 
								listQuery: {
 | 
				
			||||||
 | 
									statisticType: 1,
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								tableProps,
 | 
				
			||||||
 | 
								tableData: [],
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						components: {},
 | 
				
			||||||
 | 
						created() {
 | 
				
			||||||
 | 
							const end = new Date();
 | 
				
			||||||
 | 
							const start = new Date();
 | 
				
			||||||
 | 
							this.listQuery.startTime = parseTime(start).substr(0, 10) + ' 00:00:00';
 | 
				
			||||||
 | 
							this.listQuery.endTime = parseTime(end).substr(0, 10) + ' 23:59:59';
 | 
				
			||||||
 | 
							this.$nextTick(() => {
 | 
				
			||||||
 | 
								this.$refs.searchBarForm.formInline.searchTime = [
 | 
				
			||||||
 | 
									this.listQuery.startTime,
 | 
				
			||||||
 | 
									this.listQuery.endTime,
 | 
				
			||||||
 | 
								];
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						methods: {
 | 
				
			||||||
 | 
							buttonClick(val) {
 | 
				
			||||||
 | 
								switch (val.btnName) {
 | 
				
			||||||
 | 
									case 'search':
 | 
				
			||||||
 | 
										this.listQuery.pageNo = 1;
 | 
				
			||||||
 | 
										this.listQuery.pageSize = 20;
 | 
				
			||||||
 | 
										this.listQuery.statisticType = 1;
 | 
				
			||||||
 | 
										this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
 | 
				
			||||||
 | 
										this.listQuery.endTime = val.searchTime ? val.searchTime[1] : null;
 | 
				
			||||||
 | 
										this.getDataList();
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									default:
 | 
				
			||||||
 | 
										console.log(val);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					<style lang="scss"></style>
 | 
				
			||||||
							
								
								
									
										131
									
								
								src/views/Environmental/Environmental-log.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,131 @@
 | 
				
			|||||||
 | 
					<!--
 | 
				
			||||||
 | 
					 * @Author: zwq
 | 
				
			||||||
 | 
					 * @Date: 2024-11-13 14:01:16
 | 
				
			||||||
 | 
					 * @LastEditors: zwq
 | 
				
			||||||
 | 
					 * @LastEditTime: 2025-02-21 14:31:00
 | 
				
			||||||
 | 
					 * @Description:
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
						<div>
 | 
				
			||||||
 | 
							<div class="app-container">
 | 
				
			||||||
 | 
								<!-- 搜索工作栏 -->
 | 
				
			||||||
 | 
								<search-bar
 | 
				
			||||||
 | 
									:formConfigs="formConfig"
 | 
				
			||||||
 | 
									ref="searchBarForm"
 | 
				
			||||||
 | 
									@headBtnClick="buttonClick" />
 | 
				
			||||||
 | 
								<!-- 列表 -->
 | 
				
			||||||
 | 
								<base-table
 | 
				
			||||||
 | 
									:page="listQuery.pageNo"
 | 
				
			||||||
 | 
									:limit="listQuery.pageSize"
 | 
				
			||||||
 | 
									:table-props="tableProps"
 | 
				
			||||||
 | 
									:table-data="tableData"
 | 
				
			||||||
 | 
									:max-height="tableH" />
 | 
				
			||||||
 | 
								<pagination
 | 
				
			||||||
 | 
									:page.sync="listQuery.pageNo"
 | 
				
			||||||
 | 
									:limit.sync="listQuery.pageSize"
 | 
				
			||||||
 | 
									:total="listQuery.total"
 | 
				
			||||||
 | 
									@pagination="getDataList" />
 | 
				
			||||||
 | 
							</div>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					import basicPage from '@/mixins/basic-page';
 | 
				
			||||||
 | 
					import { getCostEnviHisPage } from '@/api/environmental/environmentalLog';
 | 
				
			||||||
 | 
					import { parseTime } from '@/filter/code-filter';
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const tableProps = [
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							prop: 'recTime',
 | 
				
			||||||
 | 
							label: '记录时间',
 | 
				
			||||||
 | 
							filter: parseTime,
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							prop: 'remark',
 | 
				
			||||||
 | 
							label: '备注',
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							prop: 'envi1',
 | 
				
			||||||
 | 
							label: '二氧化硫mg/Nm3',
 | 
				
			||||||
 | 
							filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							prop: 'envi2',
 | 
				
			||||||
 | 
							label: '氮氧化物mg/Nm3',
 | 
				
			||||||
 | 
							filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							prop: 'envi3',
 | 
				
			||||||
 | 
							label: '粉尘mg/Nm3',
 | 
				
			||||||
 | 
							filter: (val) => (val != null ? Number(val).toFixed(2) : '-'),
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
						name: '',
 | 
				
			||||||
 | 
						mixins: [basicPage, tableHeightMixin],
 | 
				
			||||||
 | 
						data() {
 | 
				
			||||||
 | 
							return {
 | 
				
			||||||
 | 
								urlOptions: {
 | 
				
			||||||
 | 
									getDataListURL: getCostEnviHisPage,
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								formConfig: [
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										type: 'datePicker',
 | 
				
			||||||
 | 
										label: '时间',
 | 
				
			||||||
 | 
										dateType: 'datetimerange',
 | 
				
			||||||
 | 
										format: 'yyyy-MM-dd HH:mm:ss',
 | 
				
			||||||
 | 
										valueFormat: 'yyyy-MM-dd HH:mm:ss',
 | 
				
			||||||
 | 
										rangeSeparator: '-',
 | 
				
			||||||
 | 
										startPlaceholder: '开始时间',
 | 
				
			||||||
 | 
										endPlaceholder: '结束时间',
 | 
				
			||||||
 | 
										width: 350,
 | 
				
			||||||
 | 
										param: 'searchTime',
 | 
				
			||||||
 | 
										clearable: false,
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										type: 'button',
 | 
				
			||||||
 | 
										btnName: '查询',
 | 
				
			||||||
 | 
										name: 'search',
 | 
				
			||||||
 | 
										color: 'primary',
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								],
 | 
				
			||||||
 | 
								listQuery: {
 | 
				
			||||||
 | 
									statisticType: 1,
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								tableProps,
 | 
				
			||||||
 | 
								tableData: [],
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						components: {},
 | 
				
			||||||
 | 
						created() {
 | 
				
			||||||
 | 
							const end = new Date();
 | 
				
			||||||
 | 
							const start = new Date();
 | 
				
			||||||
 | 
							this.listQuery.startTime = parseTime(start).substr(0, 10) + ' 00:00:00';
 | 
				
			||||||
 | 
							this.listQuery.endTime = parseTime(end).substr(0, 10) + ' 23:59:59';
 | 
				
			||||||
 | 
							this.$nextTick(() => {
 | 
				
			||||||
 | 
								this.$refs.searchBarForm.formInline.searchTime = [
 | 
				
			||||||
 | 
									this.listQuery.startTime,
 | 
				
			||||||
 | 
									this.listQuery.endTime,
 | 
				
			||||||
 | 
								];
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						methods: {
 | 
				
			||||||
 | 
							buttonClick(val) {
 | 
				
			||||||
 | 
								switch (val.btnName) {
 | 
				
			||||||
 | 
									case 'search':
 | 
				
			||||||
 | 
										this.listQuery.pageNo = 1;
 | 
				
			||||||
 | 
										this.listQuery.pageSize = 20;
 | 
				
			||||||
 | 
										this.listQuery.statisticType = 1;
 | 
				
			||||||
 | 
										this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
 | 
				
			||||||
 | 
										this.listQuery.endTime = val.searchTime ? val.searchTime[1] : null;
 | 
				
			||||||
 | 
										this.getDataList();
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									default:
 | 
				
			||||||
 | 
										console.log(val);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					<style lang="scss"></style>
 | 
				
			||||||
@@ -1,116 +0,0 @@
 | 
				
			|||||||
<template>
 | 
					 | 
				
			||||||
  <div class='centerBottomL'>
 | 
					 | 
				
			||||||
    <div class='title'>
 | 
					 | 
				
			||||||
      <svg-icon icon-class="dataBoard3" class='icon'/>
 | 
					 | 
				
			||||||
      <span>本月数据</span>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
    <div class='dataBox' style='top:50px'>
 | 
					 | 
				
			||||||
      <p>
 | 
					 | 
				
			||||||
        <span class='text'>总投入片数</span>
 | 
					 | 
				
			||||||
        <span class='precent' :class='{precentR:monthData?.inputNumChange>=0,precentG:monthData?.inputNumChange<0}'>{{monthData?.inputNumChange || '-'}}%</span>
 | 
					 | 
				
			||||||
        <img v-show='monthData?.inputNumChange<0' src="../../../../assets/images/dataBoard/arrDown.png" alt="" width='5' height='15'>
 | 
					 | 
				
			||||||
        <img v-show='monthData?.inputNumChange>=0' src="../../../../assets/images/dataBoard/arrUp.png" alt="" width='5' height='15'>
 | 
					 | 
				
			||||||
      </p>
 | 
					 | 
				
			||||||
      <p class='num'>{{monthData?.inputNum ? formatThousands(monthData.inputNum) : '-'}}</p>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
    <div class='dataBox'style='top:180px'>
 | 
					 | 
				
			||||||
      <p>
 | 
					 | 
				
			||||||
        <span class='text'>总生产片数</span>
 | 
					 | 
				
			||||||
        <span class='precent' :class='{precentR:monthData?.outputNumChange>=0,precentG:monthData?.outputNumChange<0}'>{{monthData?.outputNumChange || '-'}}%</span>
 | 
					 | 
				
			||||||
        <img v-show='monthData?.outputNumChange<0' src="../../../../assets/images/dataBoard/arrDown.png" alt="" width='5' height='15'>
 | 
					 | 
				
			||||||
        <img v-show='monthData?.outputNumChange>=0' src="../../../../assets/images/dataBoard/arrUp.png" alt="" width='5' height='15'>
 | 
					 | 
				
			||||||
      </p>
 | 
					 | 
				
			||||||
      <p class='num'>{{monthData?.outputNum ? formatThousands(monthData.outputNum) : '-'}}</p>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
  </div>
 | 
					 | 
				
			||||||
</template>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<script>
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
  name: 'CenterBottomL',
 | 
					 | 
				
			||||||
  props: {
 | 
					 | 
				
			||||||
    dataObj: {
 | 
					 | 
				
			||||||
      type: Object,
 | 
					 | 
				
			||||||
      default: () => {}
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  watch: {
 | 
					 | 
				
			||||||
    dataObj(val) {
 | 
					 | 
				
			||||||
      val.monthAndLastMonth && val.monthAndLastMonth.forEach(item => {
 | 
					 | 
				
			||||||
        if (item.dataType === "本月") {
 | 
					 | 
				
			||||||
          this.monthData = item
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  data() {
 | 
					 | 
				
			||||||
    return {
 | 
					 | 
				
			||||||
      monthData:{}
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  methods: {}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</script>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<style lang="scss" scoped>
 | 
					 | 
				
			||||||
.centerBottomL {
 | 
					 | 
				
			||||||
  width: 337px;
 | 
					 | 
				
			||||||
  height: 332px;
 | 
					 | 
				
			||||||
  background: url('../../../../assets/images/dataBoard/center-bottom.png') no-repeat;
 | 
					 | 
				
			||||||
  background-size: 100%;
 | 
					 | 
				
			||||||
  position: absolute;
 | 
					 | 
				
			||||||
  left: 440px;
 | 
					 | 
				
			||||||
  bottom:23px;
 | 
					 | 
				
			||||||
  .title {
 | 
					 | 
				
			||||||
    margin: 7px 0 0 15px;
 | 
					 | 
				
			||||||
    .icon {
 | 
					 | 
				
			||||||
      width: 33px;
 | 
					 | 
				
			||||||
      height: 33px;
 | 
					 | 
				
			||||||
      margin-right: 5px;
 | 
					 | 
				
			||||||
      vertical-align:middle;
 | 
					 | 
				
			||||||
      margin-top: 5px;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    span {
 | 
					 | 
				
			||||||
      font-size: 24px;
 | 
					 | 
				
			||||||
      color: #52FFF1;
 | 
					 | 
				
			||||||
      line-height: 24px;
 | 
					 | 
				
			||||||
      vertical-align:middle;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  .dataBox {
 | 
					 | 
				
			||||||
    width: 290px;
 | 
					 | 
				
			||||||
    height: 135px;
 | 
					 | 
				
			||||||
    background: url('../../../../assets/images/dataBoard/numberBox.png') no-repeat;
 | 
					 | 
				
			||||||
    background-size: 100%;
 | 
					 | 
				
			||||||
    position: absolute;
 | 
					 | 
				
			||||||
    padding:22px 0 0 16px;
 | 
					 | 
				
			||||||
    left: 24px;
 | 
					 | 
				
			||||||
    p{
 | 
					 | 
				
			||||||
      margin: 0;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    .text {
 | 
					 | 
				
			||||||
      font-weight: 500;
 | 
					 | 
				
			||||||
      font-size: 20px;
 | 
					 | 
				
			||||||
      color: #FFFFFF;
 | 
					 | 
				
			||||||
      letter-spacing: 2px;
 | 
					 | 
				
			||||||
      margin-right: 8px;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    .precent {
 | 
					 | 
				
			||||||
      font-size: 18px;
 | 
					 | 
				
			||||||
      margin-right: 5px;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    .precentR {
 | 
					 | 
				
			||||||
      color: #FF271D;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    .precentG {
 | 
					 | 
				
			||||||
      color: #34F716;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    .num {
 | 
					 | 
				
			||||||
      font-weight: 500;
 | 
					 | 
				
			||||||
      font-size: 38px;
 | 
					 | 
				
			||||||
      color: #FFFFFF;
 | 
					 | 
				
			||||||
      margin-top: 5px;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</style>
 | 
					 | 
				
			||||||
@@ -1,100 +0,0 @@
 | 
				
			|||||||
<template>
 | 
					 | 
				
			||||||
  <div class='centerBottomR'>
 | 
					 | 
				
			||||||
    <div class='title'>
 | 
					 | 
				
			||||||
      <svg-icon icon-class="dataBoard3" class='icon'/>
 | 
					 | 
				
			||||||
      <span>上月数据</span>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
    <div class='dataBox' style='top:50px'>
 | 
					 | 
				
			||||||
      <p>
 | 
					 | 
				
			||||||
        <span class='text'>总投入片数</span>
 | 
					 | 
				
			||||||
      </p>
 | 
					 | 
				
			||||||
      <p class='num'>{{lastMonthData?.inputNum ? formatThousands(lastMonthData.inputNum) : '-'}}</p>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
    <div class='dataBox'style='top:180px'>
 | 
					 | 
				
			||||||
      <p>
 | 
					 | 
				
			||||||
        <span class='text'>总生产片数</span>
 | 
					 | 
				
			||||||
      </p>
 | 
					 | 
				
			||||||
      <p class='num'>{{lastMonthData?.outputNum ? formatThousands(lastMonthData.outputNum) : '-'}}</p>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
  </div>
 | 
					 | 
				
			||||||
</template>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<script>
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
  name: 'CenterBottomR',
 | 
					 | 
				
			||||||
  props: {
 | 
					 | 
				
			||||||
    dataObj: {
 | 
					 | 
				
			||||||
      type: Object,
 | 
					 | 
				
			||||||
      default: () => {}
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  watch: {
 | 
					 | 
				
			||||||
    dataObj(val) {
 | 
					 | 
				
			||||||
      val.monthAndLastMonth && val.monthAndLastMonth.forEach(item => {
 | 
					 | 
				
			||||||
        if (item.dataType === "上月") {
 | 
					 | 
				
			||||||
          this.lastMonthData = item
 | 
					 | 
				
			||||||
        } 
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  data() {
 | 
					 | 
				
			||||||
    return {
 | 
					 | 
				
			||||||
      lastMonthData:{}
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  methods: {}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</script>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<style lang="scss" scoped>
 | 
					 | 
				
			||||||
.centerBottomR {
 | 
					 | 
				
			||||||
  width: 337px;
 | 
					 | 
				
			||||||
  height: 332px;
 | 
					 | 
				
			||||||
  background: url('../../../../assets/images/dataBoard/center-bottom.png') no-repeat;
 | 
					 | 
				
			||||||
  background-size: 100%;
 | 
					 | 
				
			||||||
  position: absolute;
 | 
					 | 
				
			||||||
  left: 791px;
 | 
					 | 
				
			||||||
  bottom:23px;
 | 
					 | 
				
			||||||
  .title {
 | 
					 | 
				
			||||||
    margin: 7px 0 0 15px;
 | 
					 | 
				
			||||||
    .icon {
 | 
					 | 
				
			||||||
      width: 33px;
 | 
					 | 
				
			||||||
      height: 33px;
 | 
					 | 
				
			||||||
      margin-right: 5px;
 | 
					 | 
				
			||||||
      vertical-align:middle;
 | 
					 | 
				
			||||||
      margin-top: 5px;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    span {
 | 
					 | 
				
			||||||
      font-size: 24px;
 | 
					 | 
				
			||||||
      color: #52FFF1;
 | 
					 | 
				
			||||||
      line-height: 24px;
 | 
					 | 
				
			||||||
      vertical-align:middle;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  .dataBox {
 | 
					 | 
				
			||||||
    width: 290px;
 | 
					 | 
				
			||||||
    height: 135px;
 | 
					 | 
				
			||||||
    background: url('../../../../assets/images/dataBoard/numberBox.png') no-repeat;
 | 
					 | 
				
			||||||
    background-size: 100%;
 | 
					 | 
				
			||||||
    position: absolute;
 | 
					 | 
				
			||||||
    padding:22px 0 0 16px;
 | 
					 | 
				
			||||||
    left: 24px;
 | 
					 | 
				
			||||||
    p{
 | 
					 | 
				
			||||||
      margin: 0;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    .text {
 | 
					 | 
				
			||||||
      font-weight: 500;
 | 
					 | 
				
			||||||
      font-size: 20px;
 | 
					 | 
				
			||||||
      color: #FFFFFF;
 | 
					 | 
				
			||||||
      letter-spacing: 2px;
 | 
					 | 
				
			||||||
      margin-right: 8px;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    .num {
 | 
					 | 
				
			||||||
      font-weight: 500;
 | 
					 | 
				
			||||||
      font-size: 38px;
 | 
					 | 
				
			||||||
      color: #FFFFFF;
 | 
					 | 
				
			||||||
      margin-top: 5px;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</style>
 | 
					 | 
				
			||||||
@@ -1,352 +0,0 @@
 | 
				
			|||||||
<template>
 | 
					 | 
				
			||||||
  <div ref="centerTopBox" class='centerTopBox'>
 | 
					 | 
				
			||||||
    <div>
 | 
					 | 
				
			||||||
      <video src="/static/videos/01.webm" muted autoplay loop class='videoStyle'></video>
 | 
					 | 
				
			||||||
      <div
 | 
					 | 
				
			||||||
        class='eqTipBox'
 | 
					 | 
				
			||||||
        v-show='showTooltip'
 | 
					 | 
				
			||||||
        :style="'left:'+tooltipStyle.left+'px;top:'+tooltipStyle.top+'px;'"
 | 
					 | 
				
			||||||
      >
 | 
					 | 
				
			||||||
        <p><span class='eqTipTitle'>设备名称:</span><span class='eqTipNum'>{{eqTipMsg.name}}</span></p>
 | 
					 | 
				
			||||||
        <p><span class='eqTipTitle'>进口数量:</span><span class='eqTipNum'>{{eqTipMsg.input}}</span></p>
 | 
					 | 
				
			||||||
        <p><span class='eqTipTitle'>出口数量:</span><span class='eqTipNum'>{{eqTipMsg.output}}</span></p>
 | 
					 | 
				
			||||||
        <p><span class='eqTipTitle'>报警状态:</span>
 | 
					 | 
				
			||||||
          <span class='eqTipNum'>
 | 
					 | 
				
			||||||
            <img v-show='eqTipMsg.alarm' :src='dotY' width='16'/>
 | 
					 | 
				
			||||||
            <img v-show='!eqTipMsg.alarm' :src='dotG' width='16'/>
 | 
					 | 
				
			||||||
            {{eqTipMsg.alarm?'报警':'未报警'}}
 | 
					 | 
				
			||||||
          </span>
 | 
					 | 
				
			||||||
        </p>
 | 
					 | 
				
			||||||
        <p><span class='eqTipTitle'>在线状态:</span>
 | 
					 | 
				
			||||||
          <span class='eqTipNum'>
 | 
					 | 
				
			||||||
            <img v-show='eqTipMsg.status' :src='dotG' width='16'/>
 | 
					 | 
				
			||||||
            <img v-show='!eqTipMsg.status' :src='dotR' width='16'/>
 | 
					 | 
				
			||||||
            {{eqTipMsg.status?'在线':'离线'}}
 | 
					 | 
				
			||||||
          </span>
 | 
					 | 
				
			||||||
        </p>
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
      <!-- 设备 -->
 | 
					 | 
				
			||||||
      <div class='eqBox'>
 | 
					 | 
				
			||||||
        <!-- line-从上到下-从右往左 -->
 | 
					 | 
				
			||||||
        <span 
 | 
					 | 
				
			||||||
          v-for='(item,index) in eqList'
 | 
					 | 
				
			||||||
          :key='index'
 | 
					 | 
				
			||||||
          :style="'width:'+item.w+'px;height:'+item.h+'px;left:'+item.l+'px;top:'+item.t+'px'"
 | 
					 | 
				
			||||||
          @mouseenter="handleMouseEnter(item, $event)"
 | 
					 | 
				
			||||||
          @mouseleave="handleMouseLeave"
 | 
					 | 
				
			||||||
        ></span>
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
    <div class='centerTopTopBox'>
 | 
					 | 
				
			||||||
      <div style='display: inline-block;'>
 | 
					 | 
				
			||||||
        <img src="../../../../assets/images/dataBoard/centerNumB.png" alt="" width='203'>
 | 
					 | 
				
			||||||
        <p class='num'>{{dataObj?.productRate || '-'}}%</p>
 | 
					 | 
				
			||||||
        <p class='title'>成品率</p>
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
      <div style='display: inline-block;'>
 | 
					 | 
				
			||||||
        <img src="../../../../assets/images/dataBoard/centerNumY.png" alt="" width='261'>
 | 
					 | 
				
			||||||
        <p class='num' style='width: 260px;padding-left: 20px;'>{{dataObj?.todayProduct ? formatThousands(dataObj.todayProduct) : '-'}}</p>
 | 
					 | 
				
			||||||
        <p class='title' style='color:#FFB625'>今日产量</p>
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
      <div style='display: inline-block;'>
 | 
					 | 
				
			||||||
        <img src="../../../../assets/images/dataBoard/centerNumY.png" alt="" width='261'>
 | 
					 | 
				
			||||||
        <p class='num' style='width: 260px;padding-left: 20px;'>{{dataObj?.monthProduct ? formatThousands(dataObj.monthProduct) : '-'}}</p>
 | 
					 | 
				
			||||||
        <p class='title' style='color:#FFB625'>本月产量</p>
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
      <div style='display: inline-block;'>
 | 
					 | 
				
			||||||
        <img src="../../../../assets/images/dataBoard/centerNumB.png" alt="" width='203'>
 | 
					 | 
				
			||||||
        <p class='num'>{{dataObj?.alarmNum ? formatThousands(dataObj.alarmNum) : '-'}}</p>
 | 
					 | 
				
			||||||
        <p class='title'>设备报警数</p>
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
  </div>
 | 
					 | 
				
			||||||
</template>
 | 
					 | 
				
			||||||
<script>
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
  name: 'CenterTop',
 | 
					 | 
				
			||||||
  data() {
 | 
					 | 
				
			||||||
    return {
 | 
					 | 
				
			||||||
      showTooltip:false,
 | 
					 | 
				
			||||||
      tooltipStyle: {
 | 
					 | 
				
			||||||
        left: 0,
 | 
					 | 
				
			||||||
        top: 0
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      dotY:require('../../../../assets/images/dataBoard/dotY.png'),
 | 
					 | 
				
			||||||
      dotR:require('../../../../assets/images/dataBoard/dotR.png'),
 | 
					 | 
				
			||||||
      dotG:require('../../../../assets/images/dataBoard/dotG.png'),
 | 
					 | 
				
			||||||
      eqList:[
 | 
					 | 
				
			||||||
        {name:'A1-磨边机-1',id:100301,w:70,h:18,l:830,t:160},
 | 
					 | 
				
			||||||
        {name:'A1-磨边机-2',id:100302,w:70,h:18,l:830,t:183},
 | 
					 | 
				
			||||||
        {name:'A1-磨边机-3',id:100303,w:70,h:18,l:832,t:206},
 | 
					 | 
				
			||||||
        {name:'A1-磨边后清洗机-1',id:100401,w:30,h:15,l:798,t:160},
 | 
					 | 
				
			||||||
        {name:'A1-磨边后清洗机-2',id:100402,w:30,h:15,l:798,t:183},
 | 
					 | 
				
			||||||
        {name:'A1-磨边后清洗机-3',id:100403,w:30,h:15,l:800,t:206},
 | 
					 | 
				
			||||||
        {name:'A1-打孔机-1',id:100501,w:13,h:12,l:730,t:163},
 | 
					 | 
				
			||||||
        {name:'A1-打孔机-2',id:100502,w:13,h:12,l:730,t:187},
 | 
					 | 
				
			||||||
        {name:'A1-打孔机-3',id:100503,w:13,h:12,l:730,t:210},
 | 
					 | 
				
			||||||
        {name:'A1-打孔后清洗机-1',id:100601,w:32,h:15,l:665,t:160},
 | 
					 | 
				
			||||||
        {name:'A1-打孔后清洗机-2',id:100602,w:32,h:15,l:665,t:183},
 | 
					 | 
				
			||||||
        {name:'A1-打孔后清洗机-3',id:100603,w:32,h:15,l:665,t:206},
 | 
					 | 
				
			||||||
        {name:'A1-丝印机-1',id:100701,w:30,h:12,l:605,t:163},
 | 
					 | 
				
			||||||
        {name:'A1-丝印机-2',id:100702,w:30,h:12,l:605,t:187},
 | 
					 | 
				
			||||||
        {name:'A1-丝印机-3',id:100703,w:30,h:12,l:605,t:210},
 | 
					 | 
				
			||||||
        {name:'A1-丝印后固化机-1',id:101301,w:37,h:12,l:558,t:163},
 | 
					 | 
				
			||||||
        {name:'A1-丝印后固化机-2',id:101302,w:37,h:12,l:558,t:187},
 | 
					 | 
				
			||||||
        {name:'A1-丝印后固化机-3',id:101303,w:37,h:12,l:558,t:210},
 | 
					 | 
				
			||||||
        {name:'A1-钢化炉',id:101401,w:75,h:15,l:382,t:209},
 | 
					 | 
				
			||||||
        {name:'A1-包装清洗机-1',id:101501,w:30,h:15,l:228,t:173},
 | 
					 | 
				
			||||||
        {name:'A1-包装清洗机-2',id:101502,w:30,h:15,l:228,t:206},
 | 
					 | 
				
			||||||
        {name:'A1-铺纸机-1',id:101601,w:18,h:15,l:188,t:175},
 | 
					 | 
				
			||||||
        {name:'A1-铺纸机-2',id:101602,w:18,h:15,l:188,t:206},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        {name:'A2-磨边机-1',id:200301,w:70,h:18,l:832,t:233},
 | 
					 | 
				
			||||||
        {name:'A2-磨边机-2',id:200302,w:70,h:18,l:833,t:257},
 | 
					 | 
				
			||||||
        {name:'A2-磨边机-3',id:200303,w:70,h:18,l:834,t:281},
 | 
					 | 
				
			||||||
        {name:'A2-磨边后清洗机-1',id:200401,w:30,h:15,l:800,t:233},
 | 
					 | 
				
			||||||
        {name:'A2-磨边后清洗机-2',id:200402,w:30,h:15,l:801,t:257},
 | 
					 | 
				
			||||||
        {name:'A2-磨边后清洗机-3',id:200403,w:30,h:15,l:802,t:281},
 | 
					 | 
				
			||||||
        {name:'A2-打孔机-1',id:200501,w:13,h:12,l:731,t:240},
 | 
					 | 
				
			||||||
        {name:'A2-打孔机-2',id:200502,w:13,h:12,l:731,t:262},
 | 
					 | 
				
			||||||
        {name:'A2-打孔机-3',id:200503,w:13,h:12,l:731,t:285},
 | 
					 | 
				
			||||||
        {name:'A2-打孔后清洗机-1',id:200601,w:32,h:15,l:666,t:234},
 | 
					 | 
				
			||||||
        {name:'A2-打孔后清洗机-2',id:200602,w:32,h:15,l:666,t:258},
 | 
					 | 
				
			||||||
        {name:'A2-打孔后清洗机-3',id:200603,w:32,h:15,l:666,t:282},
 | 
					 | 
				
			||||||
        {name:'A2-丝印机-1',id:200701,w:30,h:12,l:605,t:238},
 | 
					 | 
				
			||||||
        {name:'A2-丝印机-2',id:200702,w:30,h:12,l:605,t:262},
 | 
					 | 
				
			||||||
        {name:'A2-丝印机-3',id:200703,w:30,h:12,l:605,t:286},
 | 
					 | 
				
			||||||
        {name:'A2-丝印后固化机-1',id:201301,w:37,h:12,l:558,t:238},
 | 
					 | 
				
			||||||
        {name:'A2-丝印后固化机-2',id:201302,w:37,h:12,l:558,t:262},
 | 
					 | 
				
			||||||
        {name:'A2-丝印后固化机-3',id:201303,w:37,h:12,l:558,t:286},
 | 
					 | 
				
			||||||
        {name:'A2-钢化炉',id:201401,w:75,h:15,l:382,t:238},
 | 
					 | 
				
			||||||
        {name:'A2-包装清洗机-1',id:201501,w:30,h:15,l:228,t:234},
 | 
					 | 
				
			||||||
        {name:'A2-包装清洗机-2',id:201502,w:30,h:15,l:228,t:267},
 | 
					 | 
				
			||||||
        {name:'A2-铺纸机-1',id:201601,w:18,h:15,l:187,t:234},
 | 
					 | 
				
			||||||
        {name:'A2-铺纸机-2',id:201602,w:18,h:15,l:186,t:267},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        {name:'A3-磨边机-1',id:300301,w:70,h:18,l:834,t:318},
 | 
					 | 
				
			||||||
        {name:'A3-磨边机-2',id:300302,w:70,h:18,l:834,t:342},
 | 
					 | 
				
			||||||
        {name:'A3-磨边后清洗机-1',id:300401,w:30,h:15,l:802,t:319},
 | 
					 | 
				
			||||||
        {name:'A3-磨边后清洗机-2',id:300402,w:30,h:15,l:802,t:342},
 | 
					 | 
				
			||||||
        {name:'A3-打孔机-1',id:300501,w:13,h:12,l:731,t:324},
 | 
					 | 
				
			||||||
        {name:'A3-打孔机-2',id:300502,w:13,h:12,l:731,t:348},
 | 
					 | 
				
			||||||
        {name:'A3-打孔后清洗机-1',id:300601,w:32,h:15,l:666,t:320},
 | 
					 | 
				
			||||||
        {name:'A3-打孔后清洗机-2',id:300602,w:32,h:15,l:666,t:342},
 | 
					 | 
				
			||||||
        {name:'A3-丝印机-1',id:300701,w:30,h:12,l:605,t:324},
 | 
					 | 
				
			||||||
        {name:'A3-丝印机-2',id:300702,w:30,h:12,l:605,t:348},
 | 
					 | 
				
			||||||
        {name:'A3-一次镀膜机-1',id:300801,w:20,h:15,l:553,t:322},
 | 
					 | 
				
			||||||
        {name:'A3-一次镀膜机-2',id:300802,w:20,h:15,l:553,t:346},
 | 
					 | 
				
			||||||
        {name:'A3-丝印后固化机-1',id:301301,w:37,h:12,l:506,t:324},
 | 
					 | 
				
			||||||
        {name:'A3-丝印后固化机-2',id:301302,w:37,h:12,l:506,t:347},
 | 
					 | 
				
			||||||
        {name:'A3-钢化炉',id:301401,w:75,h:15,l:340,t:346},
 | 
					 | 
				
			||||||
        {name:'A3-包装清洗机-1',id:301501,w:30,h:15,l:240,t:343},
 | 
					 | 
				
			||||||
        {name:'A3-铺纸机-1',id:301601,w:18,h:15,l:200,t:343},
 | 
					 | 
				
			||||||
        {name:'A3-铺纸机-2',id:301602,w:18,h:15,l:170,t:343},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        {name:'A4-磨边机-1',id:400301,w:70,h:18,l:838,t:380},
 | 
					 | 
				
			||||||
        {name:'A4-磨边机-2',id:400302,w:70,h:18,l:838,t:405},
 | 
					 | 
				
			||||||
        {name:'A4-磨边机-3',id:400303,w:70,h:18,l:839,t:428},
 | 
					 | 
				
			||||||
        {name:'A4-磨边后清洗机-1',id:400401,w:30,h:15,l:804,t:380},
 | 
					 | 
				
			||||||
        {name:'A4-磨边后清洗机-2',id:400402,w:30,h:15,l:805,t:405},
 | 
					 | 
				
			||||||
        {name:'A4-磨边后清洗机-3',id:400403,w:30,h:15,l:806,t:427},
 | 
					 | 
				
			||||||
        {name:'A4-一次镀膜机-1',id:400801,w:20,h:15,l:707,t:381},
 | 
					 | 
				
			||||||
        {name:'A4-一次镀膜机-2',id:400802,w:20,h:15,l:707,t:407},
 | 
					 | 
				
			||||||
        {name:'A4-一次镀膜机-3',id:400803,w:20,h:15,l:707,t:429},
 | 
					 | 
				
			||||||
        {name:'A4-一次固化机-1',id:401001,w:37,h:12,l:660,t:383},
 | 
					 | 
				
			||||||
        {name:'A4-一次固化机-2',id:401002,w:37,h:12,l:660,t:409},
 | 
					 | 
				
			||||||
        {name:'A4-一次固化机-3',id:401003,w:37,h:12,l:660,t:431},
 | 
					 | 
				
			||||||
        {name:'A4-二次镀膜机-1',id:401101,w:20,h:15,l:605,t:382},
 | 
					 | 
				
			||||||
        {name:'A4-二次镀膜机-2',id:401102,w:20,h:15,l:605,t:408},
 | 
					 | 
				
			||||||
        {name:'A4-二次镀膜机-3',id:401103,w:20,h:15,l:605,t:430},
 | 
					 | 
				
			||||||
        {name:'A4-二次固化机-1',id:401201,w:37,h:12,l:557,t:383},
 | 
					 | 
				
			||||||
        {name:'A4-二次固化机-2',id:401202,w:37,h:12,l:557,t:409},
 | 
					 | 
				
			||||||
        {name:'A4-二次固化机-3',id:401203,w:37,h:12,l:557,t:431},
 | 
					 | 
				
			||||||
        {name:'A4-钢化炉',id:401401,w:75,h:15,l:379,t:381},
 | 
					 | 
				
			||||||
        {name:'A4-包装清洗机-1',id:401501,w:30,h:15,l:220,t:379},
 | 
					 | 
				
			||||||
        {name:'A4-包装清洗机-2',id:401502,w:30,h:18,l:220,t:410},
 | 
					 | 
				
			||||||
        {name:'A4-铺纸机-1',id:401601,w:18,h:15,l:180,t:381},
 | 
					 | 
				
			||||||
        {name:'A4-铺纸机-2',id:401602,w:18,h:15,l:180,t:414},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        {name:'A5-磨边机-1',id:500301,w:70,h:18,l:817,t:465},
 | 
					 | 
				
			||||||
        {name:'A5-磨边机-2',id:500302,w:70,h:18,l:817,t:488},
 | 
					 | 
				
			||||||
        {name:'A5-磨边机-3',id:500303,w:70,h:18,l:819,t:512},
 | 
					 | 
				
			||||||
        {name:'A5-磨边后清洗机-1',id:500401,w:30,h:15,l:784,t:462},
 | 
					 | 
				
			||||||
        {name:'A5-磨边后清洗机-2',id:500402,w:30,h:15,l:784,t:488},
 | 
					 | 
				
			||||||
        {name:'A5-磨边后清洗机-3',id:500403,w:30,h:15,l:785,t:512},
 | 
					 | 
				
			||||||
        {name:'A5-一次镀膜机-1',id:500801,w:20,h:15,l:685,t:466},
 | 
					 | 
				
			||||||
        {name:'A5-一次镀膜机-2',id:500802,w:20,h:15,l:685,t:490},
 | 
					 | 
				
			||||||
        {name:'A5-一次镀膜机-3',id:500803,w:20,h:15,l:685,t:513},
 | 
					 | 
				
			||||||
        {name:'A5-一次固化机-1',id:501001,w:37,h:12,l:638,t:468},
 | 
					 | 
				
			||||||
        {name:'A5-一次固化机-2',id:501002,w:37,h:12,l:638,t:491},
 | 
					 | 
				
			||||||
        {name:'A5-一次固化机-3',id:501003,w:37,h:12,l:638,t:514},
 | 
					 | 
				
			||||||
        {name:'A5-二次镀膜机-1',id:501101,w:20,h:15,l:584,t:468},
 | 
					 | 
				
			||||||
        {name:'A5-二次镀膜机-2',id:501102,w:20,h:15,l:584,t:490},
 | 
					 | 
				
			||||||
        {name:'A5-二次镀膜机-3',id:501103,w:20,h:15,l:584,t:513},
 | 
					 | 
				
			||||||
        {name:'A5-二次固化机-1',id:501201,w:37,h:12,l:535,t:468},
 | 
					 | 
				
			||||||
        {name:'A5-二次固化机-2',id:501202,w:37,h:12,l:535,t:492},
 | 
					 | 
				
			||||||
        {name:'A5-二次固化机-3',id:501203,w:37,h:12,l:535,t:514},
 | 
					 | 
				
			||||||
        {name:'A5-钢化炉',id:501401,w:75,h:15,l:344,t:513},
 | 
					 | 
				
			||||||
        {name:'A5-包装清洗机-1',id:501501,w:30,h:18,l:185,t:473},
 | 
					 | 
				
			||||||
        {name:'A5-包装清洗机-2',id:501502,w:30,h:18,l:185,t:511},
 | 
					 | 
				
			||||||
        {name:'A5-铺纸机-1',id:501601,w:18,h:15,l:144,t:475},
 | 
					 | 
				
			||||||
        {name:'A5-铺纸机-2',id:501602,w:18,h:15,l:144,t:511}
 | 
					 | 
				
			||||||
      ],
 | 
					 | 
				
			||||||
      eqTipMsg:{
 | 
					 | 
				
			||||||
        name:'',
 | 
					 | 
				
			||||||
        input:null,
 | 
					 | 
				
			||||||
        output:null,
 | 
					 | 
				
			||||||
        alarm:'未报警',
 | 
					 | 
				
			||||||
        status:'在线'
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  props: {
 | 
					 | 
				
			||||||
    scaleNum: {
 | 
					 | 
				
			||||||
      type: Number,
 | 
					 | 
				
			||||||
      default: 1
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    dataObj: {
 | 
					 | 
				
			||||||
      type: Object,
 | 
					 | 
				
			||||||
      default: () => {}
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  watch: {
 | 
					 | 
				
			||||||
    scaleNum(val) {
 | 
					 | 
				
			||||||
      this.scaleNum = val
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    dataObj(val) {
 | 
					 | 
				
			||||||
      val.equipmentDets && val.equipmentDets.forEach(item => {
 | 
					 | 
				
			||||||
        this.eqList.forEach(eq => {
 | 
					 | 
				
			||||||
          if (eq.id == item.id) {
 | 
					 | 
				
			||||||
            eq.name = item.name
 | 
					 | 
				
			||||||
            eq.input = item.input
 | 
					 | 
				
			||||||
            eq.output = item.output
 | 
					 | 
				
			||||||
            eq.alarm = item.isError
 | 
					 | 
				
			||||||
            eq.status = item.isRun
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  mounted() {},
 | 
					 | 
				
			||||||
  methods: {
 | 
					 | 
				
			||||||
    // 鼠标hover事件
 | 
					 | 
				
			||||||
    handleMouseEnter(item, event) {
 | 
					 | 
				
			||||||
      this.showTooltip = true;
 | 
					 | 
				
			||||||
      this.eqTipMsg.name = item.name;
 | 
					 | 
				
			||||||
      this.eqTipMsg.input = item.input;
 | 
					 | 
				
			||||||
      this.eqTipMsg.output = item.output;
 | 
					 | 
				
			||||||
      this.eqTipMsg.alarm = item.alarm;
 | 
					 | 
				
			||||||
      this.eqTipMsg.status = item.status;
 | 
					 | 
				
			||||||
      this.updateTooltipPosition(event);
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    handleMouseLeave() {
 | 
					 | 
				
			||||||
      this.showTooltip = false;
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    updateTooltipPosition(event) {
 | 
					 | 
				
			||||||
      const rect = this.$refs.centerTopBox.getBoundingClientRect()
 | 
					 | 
				
			||||||
      const offset = 15;
 | 
					 | 
				
			||||||
      const tooltipWidth = 315*this.scaleNum;
 | 
					 | 
				
			||||||
      const tooltipHeight = 170*this.scaleNum;
 | 
					 | 
				
			||||||
      const startX = rect.left;
 | 
					 | 
				
			||||||
      const startY = rect.top;
 | 
					 | 
				
			||||||
      const endX = rect.width;
 | 
					 | 
				
			||||||
      const endY = rect.height;
 | 
					 | 
				
			||||||
      let posX = event.clientX-startX + offset;
 | 
					 | 
				
			||||||
      let posY = event.clientY-startY + offset;
 | 
					 | 
				
			||||||
      if (posX + tooltipWidth > endX) {
 | 
					 | 
				
			||||||
        posX = event.clientX-startX - tooltipWidth - offset;
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      if (posY + tooltipHeight > endY) {
 | 
					 | 
				
			||||||
        posY = event.clientY -startY - tooltipHeight - offset;
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      this.tooltipStyle.left = posX/this.scaleNum;
 | 
					 | 
				
			||||||
      this.tooltipStyle.top = posY/this.scaleNum;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</script>
 | 
					 | 
				
			||||||
<style lang="scss" scoped>
 | 
					 | 
				
			||||||
p{
 | 
					 | 
				
			||||||
  margin: 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
.centerTopBox {
 | 
					 | 
				
			||||||
  width: 1041px;
 | 
					 | 
				
			||||||
  height: 600px;
 | 
					 | 
				
			||||||
  background: url('../../../../assets/images/dataBoard/center-top.png') no-repeat;
 | 
					 | 
				
			||||||
  background-size: 100%;
 | 
					 | 
				
			||||||
  position: absolute;
 | 
					 | 
				
			||||||
  left: 440px;
 | 
					 | 
				
			||||||
  top:113px;
 | 
					 | 
				
			||||||
  overflow: hidden;
 | 
					 | 
				
			||||||
  .videoStyle {
 | 
					 | 
				
			||||||
    width: 1920px;
 | 
					 | 
				
			||||||
    height: 1080px;
 | 
					 | 
				
			||||||
    position: absolute;
 | 
					 | 
				
			||||||
    left:-440px;
 | 
					 | 
				
			||||||
    top:-113px;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  .eqTipBox {
 | 
					 | 
				
			||||||
    width: 315px;
 | 
					 | 
				
			||||||
    height: 170px;
 | 
					 | 
				
			||||||
    background: url('../../../../assets/images/dataBoard/eq-tip.png') no-repeat;
 | 
					 | 
				
			||||||
    background-size: 100%;
 | 
					 | 
				
			||||||
    position: absolute;
 | 
					 | 
				
			||||||
    padding-top: 10px;
 | 
					 | 
				
			||||||
    z-index: 1;
 | 
					 | 
				
			||||||
    span{
 | 
					 | 
				
			||||||
      display: inline-block;
 | 
					 | 
				
			||||||
      font-size: 20px;
 | 
					 | 
				
			||||||
      color: #FFFFFF;
 | 
					 | 
				
			||||||
      letter-spacing: 1px;
 | 
					 | 
				
			||||||
      vertical-align: middle;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    .eqTipTitle {
 | 
					 | 
				
			||||||
      width: 112px;
 | 
					 | 
				
			||||||
      height: 30px;
 | 
					 | 
				
			||||||
      padding-left: 15px;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    .eqTipNum {
 | 
					 | 
				
			||||||
      width: 190px;
 | 
					 | 
				
			||||||
      height: 30px;
 | 
					 | 
				
			||||||
      line-height: 30px;
 | 
					 | 
				
			||||||
      white-space: nowrap;
 | 
					 | 
				
			||||||
      overflow: hidden;
 | 
					 | 
				
			||||||
      text-overflow: ellipsis;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  .eqBox {
 | 
					 | 
				
			||||||
    span{
 | 
					 | 
				
			||||||
      display: inline-block;
 | 
					 | 
				
			||||||
      // border: 1px solid red;
 | 
					 | 
				
			||||||
      position: absolute;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  .centerTopTopBox {
 | 
					 | 
				
			||||||
    padding-left: 48px;
 | 
					 | 
				
			||||||
    position: absolute;
 | 
					 | 
				
			||||||
    top:30px;
 | 
					 | 
				
			||||||
    .num {
 | 
					 | 
				
			||||||
      width: 203px;
 | 
					 | 
				
			||||||
      height: 65px;
 | 
					 | 
				
			||||||
      line-height: 65px;
 | 
					 | 
				
			||||||
      padding-left: 10px;
 | 
					 | 
				
			||||||
      box-sizing: border-box;
 | 
					 | 
				
			||||||
      font-weight: 500;
 | 
					 | 
				
			||||||
      font-size: 38px;
 | 
					 | 
				
			||||||
      color: #FFFFFF;
 | 
					 | 
				
			||||||
      text-shadow: 0px 5px 2px rgba(0,0,0,0.62);
 | 
					 | 
				
			||||||
      text-align: center;
 | 
					 | 
				
			||||||
      position: absolute;
 | 
					 | 
				
			||||||
      top:0px;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    .title {
 | 
					 | 
				
			||||||
      font-weight: 500;
 | 
					 | 
				
			||||||
      font-size: 20px;
 | 
					 | 
				
			||||||
      color: #00C8F7;
 | 
					 | 
				
			||||||
      letter-spacing: 2px;
 | 
					 | 
				
			||||||
      text-shadow: 0px 5px 2px rgba(0,0,0,0.62);
 | 
					 | 
				
			||||||
      text-align: center;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</style>
 | 
					 | 
				
			||||||
@@ -1,108 +0,0 @@
 | 
				
			|||||||
<template>
 | 
					 | 
				
			||||||
  <header class="dataBoardHeader">
 | 
					 | 
				
			||||||
    <div class='topTitle'></div>
 | 
					 | 
				
			||||||
    <!-- <div class='time-chsoose'>
 | 
					 | 
				
			||||||
      <span class='title'>时间选择</span>
 | 
					 | 
				
			||||||
      <span class='time-show'>{{time}}</span>
 | 
					 | 
				
			||||||
      <el-date-picker
 | 
					 | 
				
			||||||
        v-model="time"
 | 
					 | 
				
			||||||
        type="date"
 | 
					 | 
				
			||||||
        value-format='yyyy-MM-dd'
 | 
					 | 
				
			||||||
        :clearable='false'
 | 
					 | 
				
			||||||
        style='position: absolute;right: 0px;width: 119px;top:-2px;opacity: 0;'
 | 
					 | 
				
			||||||
      >
 | 
					 | 
				
			||||||
      </el-date-picker>
 | 
					 | 
				
			||||||
    </div> -->
 | 
					 | 
				
			||||||
    <div
 | 
					 | 
				
			||||||
      type="text"
 | 
					 | 
				
			||||||
      class="screen-btn"
 | 
					 | 
				
			||||||
      :title="isFullScreen?'退出全屏':'全屏'"
 | 
					 | 
				
			||||||
      @click="changeFullScreen"
 | 
					 | 
				
			||||||
    >
 | 
					 | 
				
			||||||
      <svg-icon v-if="isFullScreen" icon-class="unFullScreenView" />
 | 
					 | 
				
			||||||
      <svg-icon v-else icon-class="fullScreenView" />
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
  </header>
 | 
					 | 
				
			||||||
</template>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<script>
 | 
					 | 
				
			||||||
// import moment from 'moment'
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
  name: 'DataBoardHeader',
 | 
					 | 
				
			||||||
  props: {
 | 
					 | 
				
			||||||
    isFullScreen: {
 | 
					 | 
				
			||||||
      type: Boolean,
 | 
					 | 
				
			||||||
      default: () => {
 | 
					 | 
				
			||||||
        return false
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  data() {
 | 
					 | 
				
			||||||
    return {
 | 
					 | 
				
			||||||
      // time: moment().format('YYYY-MM-DD')
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  computed: {},
 | 
					 | 
				
			||||||
  methods: {
 | 
					 | 
				
			||||||
    changeFullScreen() {
 | 
					 | 
				
			||||||
      this.$emit('screenfullChange')
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    exportPDF() {
 | 
					 | 
				
			||||||
      this.$emit('exportPDF')
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</script>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<style scoped lang="scss">
 | 
					 | 
				
			||||||
.dataBoardHeader {
 | 
					 | 
				
			||||||
	background: url('../../../../assets/images/dataBoard/head.png') no-repeat;
 | 
					 | 
				
			||||||
	height: 99px;
 | 
					 | 
				
			||||||
	background-size: 100%;
 | 
					 | 
				
			||||||
	background-position: 0 0;
 | 
					 | 
				
			||||||
	position: relative;
 | 
					 | 
				
			||||||
	.topTitle{
 | 
					 | 
				
			||||||
		width: 465px;
 | 
					 | 
				
			||||||
		height: 77px;
 | 
					 | 
				
			||||||
    background: url('../../../../assets/images/dataBoard/data-board-title.png') no-repeat;
 | 
					 | 
				
			||||||
    background-size: 100%;
 | 
					 | 
				
			||||||
    position: absolute;
 | 
					 | 
				
			||||||
    left: 731px;
 | 
					 | 
				
			||||||
    top:19px;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  .time-chsoose {
 | 
					 | 
				
			||||||
    width: 212px;
 | 
					 | 
				
			||||||
		height: 33px;
 | 
					 | 
				
			||||||
    background: url('../../../../assets/images/dataBoard/time-choose.png') no-repeat;
 | 
					 | 
				
			||||||
    background-size: 100%;
 | 
					 | 
				
			||||||
    position: absolute;
 | 
					 | 
				
			||||||
    right: 63px;
 | 
					 | 
				
			||||||
    top:49px;
 | 
					 | 
				
			||||||
    .title {
 | 
					 | 
				
			||||||
      font-size: 18px;
 | 
					 | 
				
			||||||
      color: #082049;
 | 
					 | 
				
			||||||
      letter-spacing: 1px;
 | 
					 | 
				
			||||||
      position: relative;
 | 
					 | 
				
			||||||
      top: 4px;
 | 
					 | 
				
			||||||
      left: 8px
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    .time-show {
 | 
					 | 
				
			||||||
      font-size: 18px;
 | 
					 | 
				
			||||||
      color: #FFFFFF;
 | 
					 | 
				
			||||||
      line-height: 18px;
 | 
					 | 
				
			||||||
      position: relative;
 | 
					 | 
				
			||||||
      top: 4px;
 | 
					 | 
				
			||||||
      left: 28px;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
	.screen-btn{
 | 
					 | 
				
			||||||
		color: #00fff0;
 | 
					 | 
				
			||||||
    height: 32px;
 | 
					 | 
				
			||||||
    line-height: 32px;
 | 
					 | 
				
			||||||
		font-size: 32px;
 | 
					 | 
				
			||||||
		position: absolute;
 | 
					 | 
				
			||||||
		right: 22px;
 | 
					 | 
				
			||||||
		top:47px;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</style>
 | 
					 | 
				
			||||||
@@ -1,284 +0,0 @@
 | 
				
			|||||||
<template>
 | 
					 | 
				
			||||||
  <div class='leftBottomBox'>
 | 
					 | 
				
			||||||
    <div class='title'>
 | 
					 | 
				
			||||||
      <svg-icon icon-class="dataBoard2" class='icon'/>
 | 
					 | 
				
			||||||
      <span>投入产出及良品率</span>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
    <div v-if='xData.length === 0' class='noData'>暂无数据</div>
 | 
					 | 
				
			||||||
    <div v-else>
 | 
					 | 
				
			||||||
      <div class="top_legend">
 | 
					 | 
				
			||||||
        <span class="chart_legend_icon1">投入</span>
 | 
					 | 
				
			||||||
        <span class="chart_legend_icon2">产出</span>
 | 
					 | 
				
			||||||
        <span><span class="chart_legend_icon3"></span>良品率</span>
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
      <div id='inOutputChart' style='width: 400px;height: 290px;'></div>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
  </div>
 | 
					 | 
				
			||||||
</template>
 | 
					 | 
				
			||||||
<script>
 | 
					 | 
				
			||||||
import * as echarts from 'echarts';
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
  name: 'LeftBottom',
 | 
					 | 
				
			||||||
  props: {
 | 
					 | 
				
			||||||
    dataObj: {
 | 
					 | 
				
			||||||
      type: Object,
 | 
					 | 
				
			||||||
      default: () => {}
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  watch: {
 | 
					 | 
				
			||||||
    dataObj(val) {
 | 
					 | 
				
			||||||
      this.xData = []
 | 
					 | 
				
			||||||
      this.inputData = []
 | 
					 | 
				
			||||||
      this.outputData = []
 | 
					 | 
				
			||||||
      this.goodRateData = []
 | 
					 | 
				
			||||||
      val.monthBar && val.monthBar.forEach(item => {
 | 
					 | 
				
			||||||
        this.xData.push(item.dataType)
 | 
					 | 
				
			||||||
        this.inputData.push(item.inputNum)
 | 
					 | 
				
			||||||
        this.outputData.push(item.outputNum)
 | 
					 | 
				
			||||||
        this.goodRateData.push(item.goodRate)
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
      this.initChart();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  data() {
 | 
					 | 
				
			||||||
    return {
 | 
					 | 
				
			||||||
      chartDom: '',
 | 
					 | 
				
			||||||
      chart: '',
 | 
					 | 
				
			||||||
      xData:[],
 | 
					 | 
				
			||||||
      inputData:[],
 | 
					 | 
				
			||||||
      outputData:[],
 | 
					 | 
				
			||||||
      goodRateData:[],
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  mounted() {},
 | 
					 | 
				
			||||||
  methods: {
 | 
					 | 
				
			||||||
    initChart() {
 | 
					 | 
				
			||||||
      if (
 | 
					 | 
				
			||||||
        this.chart !== null &&
 | 
					 | 
				
			||||||
        this.chart !== '' &&
 | 
					 | 
				
			||||||
        this.chart !== undefined
 | 
					 | 
				
			||||||
      ) {
 | 
					 | 
				
			||||||
        this.chart.dispose() // 页面多次刷新会出现警告,Dom已经初始化了一个实例,这是销毁实例
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      this.chartDom = document.getElementById('inOutputChart')
 | 
					 | 
				
			||||||
      this.chart = echarts.init(this.chartDom)
 | 
					 | 
				
			||||||
      var option;
 | 
					 | 
				
			||||||
      option = {
 | 
					 | 
				
			||||||
        grid: { top: 40, right: 10, bottom: 5, left: 10, containLabel: true },
 | 
					 | 
				
			||||||
        legend: {
 | 
					 | 
				
			||||||
          show: false,
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        xAxis: {
 | 
					 | 
				
			||||||
          type: "category",
 | 
					 | 
				
			||||||
          data: this.xData,
 | 
					 | 
				
			||||||
          axisLabel: {
 | 
					 | 
				
			||||||
            color: "#fff",
 | 
					 | 
				
			||||||
            fontSize: 10,
 | 
					 | 
				
			||||||
            interval: 0,
 | 
					 | 
				
			||||||
            rotate:30
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
          axisTick: { show: false },
 | 
					 | 
				
			||||||
          axisLine: {
 | 
					 | 
				
			||||||
            lineStyle: {
 | 
					 | 
				
			||||||
              width: 2,
 | 
					 | 
				
			||||||
              color: "#5982B2",
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        yAxis: [{
 | 
					 | 
				
			||||||
          name: "单位/片",
 | 
					 | 
				
			||||||
          nameTextStyle: {
 | 
					 | 
				
			||||||
            color: "#DFF1FE",
 | 
					 | 
				
			||||||
            fontSize: 12,
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
          type: "value",
 | 
					 | 
				
			||||||
          axisLabel: {
 | 
					 | 
				
			||||||
            color: "#DFF1FE",
 | 
					 | 
				
			||||||
            fontSize: 12,
 | 
					 | 
				
			||||||
            formatter: "{value}",
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
          axisLine: {
 | 
					 | 
				
			||||||
            show: true,
 | 
					 | 
				
			||||||
            lineStyle: {
 | 
					 | 
				
			||||||
              width: 2,
 | 
					 | 
				
			||||||
              color: "#5982B2",
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
          splitLine: {
 | 
					 | 
				
			||||||
            lineStyle: {
 | 
					 | 
				
			||||||
              width: 2,
 | 
					 | 
				
			||||||
              color: "#5982B2",
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
        },{
 | 
					 | 
				
			||||||
          name: "良品率/%",
 | 
					 | 
				
			||||||
          nameTextStyle: {
 | 
					 | 
				
			||||||
            color: "#DFF1FE",
 | 
					 | 
				
			||||||
            fontSize: 12,
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
          type: "value",
 | 
					 | 
				
			||||||
          axisLabel: {
 | 
					 | 
				
			||||||
            color: "#DFF1FE",
 | 
					 | 
				
			||||||
            fontSize: 12,
 | 
					 | 
				
			||||||
            formatter: "{value}",
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
          axisLine: {
 | 
					 | 
				
			||||||
            show: true,
 | 
					 | 
				
			||||||
            lineStyle: {
 | 
					 | 
				
			||||||
              width: 2,
 | 
					 | 
				
			||||||
              color: "#5982B2",
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
          splitLine: {
 | 
					 | 
				
			||||||
            lineStyle: {
 | 
					 | 
				
			||||||
              width: 2,
 | 
					 | 
				
			||||||
              color: "#5982B2",
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
        }],
 | 
					 | 
				
			||||||
        tooltip: {
 | 
					 | 
				
			||||||
          trigger: "axis",
 | 
					 | 
				
			||||||
          axisPointer: {
 | 
					 | 
				
			||||||
            type: "shadow",
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
          className: "qhd-chart-tooltip",
 | 
					 | 
				
			||||||
          show: true,
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        series: [
 | 
					 | 
				
			||||||
          {
 | 
					 | 
				
			||||||
            data: this.inputData,
 | 
					 | 
				
			||||||
            type: "bar",
 | 
					 | 
				
			||||||
            barWidth: 10,
 | 
					 | 
				
			||||||
            barGap:0,
 | 
					 | 
				
			||||||
            itemStyle: {
 | 
					 | 
				
			||||||
              color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
 | 
					 | 
				
			||||||
                { offset: 0, color: 'rgba(157, 234, 245, 1)' },
 | 
					 | 
				
			||||||
                { offset: 1, color: 'rgba(110, 249, 222, 1)' },
 | 
					 | 
				
			||||||
              ]),
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
          {
 | 
					 | 
				
			||||||
            data:this.outputData,
 | 
					 | 
				
			||||||
            type: "bar",
 | 
					 | 
				
			||||||
            barWidth: 10,
 | 
					 | 
				
			||||||
            itemStyle: {
 | 
					 | 
				
			||||||
              color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
 | 
					 | 
				
			||||||
                { offset: 0, color: 'rgba(92, 183, 255, 1)' },
 | 
					 | 
				
			||||||
                { offset: 1, color: 'rgba(54, 75, 254, 1)' },
 | 
					 | 
				
			||||||
              ]),
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
          {
 | 
					 | 
				
			||||||
            data:this.goodRateData,
 | 
					 | 
				
			||||||
            type: "line",
 | 
					 | 
				
			||||||
            yAxisIndex: 1,
 | 
					 | 
				
			||||||
            symbol:'circle',
 | 
					 | 
				
			||||||
            symbolSize: 7,
 | 
					 | 
				
			||||||
            color:'rgba(18, 255, 245, 1)',
 | 
					 | 
				
			||||||
            areaStyle: {
 | 
					 | 
				
			||||||
              color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
 | 
					 | 
				
			||||||
                { offset: 0, color: 'rgba(18, 255, 245, 0.8)' },
 | 
					 | 
				
			||||||
                { offset: 0.2, color: 'rgba(18, 255, 245, 0.2)' },
 | 
					 | 
				
			||||||
                { offset: 0.4, color: 'rgba(18, 255, 245, 0)' },
 | 
					 | 
				
			||||||
              ]),
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        ],
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      option && this.chart.setOption(option);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</script>
 | 
					 | 
				
			||||||
<style lang='scss' scoped>
 | 
					 | 
				
			||||||
.leftBottomBox {
 | 
					 | 
				
			||||||
  width: 402px;
 | 
					 | 
				
			||||||
  height: 332px;
 | 
					 | 
				
			||||||
  background: url('../../../../assets/images/dataBoard/left-bottom.png') no-repeat;
 | 
					 | 
				
			||||||
  background-size: 100%;
 | 
					 | 
				
			||||||
  position: absolute;
 | 
					 | 
				
			||||||
  left: 23px;
 | 
					 | 
				
			||||||
  bottom:23px;
 | 
					 | 
				
			||||||
  .title {
 | 
					 | 
				
			||||||
    margin: 7px 0 0 15px;
 | 
					 | 
				
			||||||
    .icon {
 | 
					 | 
				
			||||||
      width: 32px;
 | 
					 | 
				
			||||||
      height: 32px;
 | 
					 | 
				
			||||||
      margin-right: 5px;
 | 
					 | 
				
			||||||
      vertical-align:middle;
 | 
					 | 
				
			||||||
      margin-top: 5px;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    span {
 | 
					 | 
				
			||||||
      font-size: 24px;
 | 
					 | 
				
			||||||
      color: #52FFF1;
 | 
					 | 
				
			||||||
      line-height: 24px;
 | 
					 | 
				
			||||||
      vertical-align:middle;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  .top_legend {
 | 
					 | 
				
			||||||
    color: #fff;
 | 
					 | 
				
			||||||
    font-size: 14px;
 | 
					 | 
				
			||||||
    position: absolute;
 | 
					 | 
				
			||||||
    left:120px;
 | 
					 | 
				
			||||||
    top:50px;
 | 
					 | 
				
			||||||
    .chart_legend_icon1{
 | 
					 | 
				
			||||||
      margin-right: 10px;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    .chart_legend_icon2{
 | 
					 | 
				
			||||||
      margin-right: 14px;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    .chart_legend_icon1:before {
 | 
					 | 
				
			||||||
      display: inline-block;
 | 
					 | 
				
			||||||
      content: "";
 | 
					 | 
				
			||||||
      width: 10px;
 | 
					 | 
				
			||||||
      height: 10px;
 | 
					 | 
				
			||||||
      margin-right: 5px;
 | 
					 | 
				
			||||||
      border-radius: 2px;
 | 
					 | 
				
			||||||
      background: #73F8E0;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    .chart_legend_icon2:before {
 | 
					 | 
				
			||||||
      display: inline-block;
 | 
					 | 
				
			||||||
      content: "";
 | 
					 | 
				
			||||||
      width: 10px;
 | 
					 | 
				
			||||||
      height: 10px;
 | 
					 | 
				
			||||||
      margin-right: 5px;
 | 
					 | 
				
			||||||
      border-radius: 2px;
 | 
					 | 
				
			||||||
      background: #497EFF;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    .chart_legend_icon3 {
 | 
					 | 
				
			||||||
      display: inline-block;
 | 
					 | 
				
			||||||
      width: 8px;
 | 
					 | 
				
			||||||
      height: 8px;
 | 
					 | 
				
			||||||
      margin-right: 8px;
 | 
					 | 
				
			||||||
      border-radius: 4px;
 | 
					 | 
				
			||||||
      background: #73F8E0;
 | 
					 | 
				
			||||||
      position:relative;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    .chart_legend_icon3:before {
 | 
					 | 
				
			||||||
      display: inline-block;
 | 
					 | 
				
			||||||
      content: "";
 | 
					 | 
				
			||||||
      width: 16px;
 | 
					 | 
				
			||||||
      height:2px;
 | 
					 | 
				
			||||||
      background: #73F8E0;
 | 
					 | 
				
			||||||
      position:absolute;
 | 
					 | 
				
			||||||
      top:3px;
 | 
					 | 
				
			||||||
      left:-4px;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
.noData  {
 | 
					 | 
				
			||||||
  font-size: 24px;
 | 
					 | 
				
			||||||
  text-align: center;
 | 
					 | 
				
			||||||
  padding-top: 100px;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</style>
 | 
					 | 
				
			||||||
<style>
 | 
					 | 
				
			||||||
.qhd-chart-tooltip {
 | 
					 | 
				
			||||||
  background: #0a2b4f77 !important;
 | 
					 | 
				
			||||||
  border: none !important;
 | 
					 | 
				
			||||||
  backdrop-filter: blur(12px);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
.qhd-chart-tooltip * {
 | 
					 | 
				
			||||||
  color: #fff !important;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</style>
 | 
					 | 
				
			||||||
@@ -1,162 +0,0 @@
 | 
				
			|||||||
<template>
 | 
					 | 
				
			||||||
  <div class='leftTopBox'>
 | 
					 | 
				
			||||||
    <div class='title'>
 | 
					 | 
				
			||||||
      <svg-icon icon-class="dataBoard1" class='icon'/>
 | 
					 | 
				
			||||||
      <span>近期数据对比</span>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
    <div class='title-split'>
 | 
					 | 
				
			||||||
      <img src="../../../../assets//images/dataBoard/leftbar.png" alt="">
 | 
					 | 
				
			||||||
      <span class='text'>本日</span>
 | 
					 | 
				
			||||||
      <img src="../../../../assets//images/dataBoard/rightbar.png" alt="">
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
    <div class='data-box'>
 | 
					 | 
				
			||||||
      <div class='left-icon' style="top:19px;">
 | 
					 | 
				
			||||||
        <img src="../../../../assets//images/dataBoard/leftTopIcon1.png" alt="" width='54'>
 | 
					 | 
				
			||||||
        <div>总投入</div>
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
      <div class='left-icon' style="top:139px;">
 | 
					 | 
				
			||||||
        <img src="../../../../assets//images/dataBoard/leftTopIcon2.png" alt="" width='48'>
 | 
					 | 
				
			||||||
        <div>总生产</div>
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
      <div class='right-data' style="top:15px;">
 | 
					 | 
				
			||||||
        <p><span class='num'>{{todayData?.inputNum ? formatThousands(todayData.inputNum) : '-'}}</span><span class='text'>片数</span></p>
 | 
					 | 
				
			||||||
        <p><span class='num'>{{todayData?.inputArea ? formatThousands(todayData.inputArea) : '-'}}</span><span class='text'>面积/㎡</span></p>
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
      <div class='right-data' style="top:132px;">
 | 
					 | 
				
			||||||
        <p><span class='num'>{{todayData?.outputNum ? formatThousands(todayData.outputNum) : '-'}}</span><span class='text'>片数</span></p>
 | 
					 | 
				
			||||||
        <p><span class='num'>{{todayData?.outputArea ? formatThousands(todayData.outputArea) : '-'}}</span><span class='text'>面积/㎡</span></p>
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
    <div class='title-split'>
 | 
					 | 
				
			||||||
      <img src="../../../../assets//images/dataBoard/leftbar.png" alt="">
 | 
					 | 
				
			||||||
      <span class='text'>昨日</span>
 | 
					 | 
				
			||||||
      <img src="../../../../assets//images/dataBoard/rightbar.png" alt="">
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
    <div class='data-box'>
 | 
					 | 
				
			||||||
      <div class='left-icon' style="top:19px;">
 | 
					 | 
				
			||||||
        <img src="../../../../assets//images/dataBoard/leftTopIcon1.png" alt="" width='54'>
 | 
					 | 
				
			||||||
        <div>总投入</div>
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
      <div class='left-icon' style="top:139px;">
 | 
					 | 
				
			||||||
        <img src="../../../../assets//images/dataBoard/leftTopIcon2.png" alt="" width='48'>
 | 
					 | 
				
			||||||
        <div>总生产</div>
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
      <div class='right-data' style="top:15px;">
 | 
					 | 
				
			||||||
        <p><span class='num'>{{yesterdayData?.inputNum ? formatThousands(yesterdayData.inputNum) : '-'}}</span><span class='text'>片数</span></p>
 | 
					 | 
				
			||||||
        <p><span class='num'>{{yesterdayData?.inputArea ? formatThousands(yesterdayData.inputArea) : '-'}}</span><span class='text'>面积/㎡</span></p>
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
      <div class='right-data' style="top:132px;">
 | 
					 | 
				
			||||||
        <p><span class='num'>{{yesterdayData?.outputNum ? formatThousands(yesterdayData.outputNum) : '-'}}</span><span class='text'>片数</span></p>
 | 
					 | 
				
			||||||
        <p><span class='num'>{{yesterdayData?.outputArea ? formatThousands(yesterdayData.outputArea) : '-'}}</span><span class='text'>面积/㎡</span></p>
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
  </div>
 | 
					 | 
				
			||||||
</template>
 | 
					 | 
				
			||||||
<script>
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
  name: 'LeftTop',
 | 
					 | 
				
			||||||
  props: {
 | 
					 | 
				
			||||||
    dataObj: {
 | 
					 | 
				
			||||||
      type: Object,
 | 
					 | 
				
			||||||
      default: () => {}
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  watch: {
 | 
					 | 
				
			||||||
    dataObj(val) {
 | 
					 | 
				
			||||||
      val.todayAndYesterday && val.todayAndYesterday.forEach(item => {
 | 
					 | 
				
			||||||
        if (item.dataType === "今日") {
 | 
					 | 
				
			||||||
          this.todayData = item
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
          this.yesterdayData = item
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  data() {
 | 
					 | 
				
			||||||
    return {
 | 
					 | 
				
			||||||
      todayData:{},
 | 
					 | 
				
			||||||
      yesterdayData:{}
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  methods: {}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</script>
 | 
					 | 
				
			||||||
<style lang='scss' scoped>
 | 
					 | 
				
			||||||
.leftTopBox {
 | 
					 | 
				
			||||||
  width: 402px;
 | 
					 | 
				
			||||||
  height: 600px;
 | 
					 | 
				
			||||||
  background: url('../../../../assets/images/dataBoard/left-top.png') no-repeat;
 | 
					 | 
				
			||||||
  background-size: 100%;
 | 
					 | 
				
			||||||
  position: absolute;
 | 
					 | 
				
			||||||
  left: 23px;
 | 
					 | 
				
			||||||
  top:113px;
 | 
					 | 
				
			||||||
  .title {
 | 
					 | 
				
			||||||
    margin: 10px 0 0 15px;
 | 
					 | 
				
			||||||
    .icon {
 | 
					 | 
				
			||||||
      width: 33px;
 | 
					 | 
				
			||||||
      height: 33px;
 | 
					 | 
				
			||||||
      margin-right: 5px;
 | 
					 | 
				
			||||||
      vertical-align:middle;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    span {
 | 
					 | 
				
			||||||
      font-size: 24px;
 | 
					 | 
				
			||||||
      color: #52FFF1;
 | 
					 | 
				
			||||||
      line-height: 24px;
 | 
					 | 
				
			||||||
      vertical-align:middle;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  .title-split {
 | 
					 | 
				
			||||||
    margin-left: 95px;
 | 
					 | 
				
			||||||
    margin-top: 10px;
 | 
					 | 
				
			||||||
    .text{
 | 
					 | 
				
			||||||
      display: inline-block;
 | 
					 | 
				
			||||||
      width: 100px;
 | 
					 | 
				
			||||||
      font-size: 22px;
 | 
					 | 
				
			||||||
      color: #01CFCC;
 | 
					 | 
				
			||||||
      line-height: 24px;
 | 
					 | 
				
			||||||
      letter-spacing: 7px;
 | 
					 | 
				
			||||||
      text-align: center;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  .data-box {
 | 
					 | 
				
			||||||
    width: 358px;
 | 
					 | 
				
			||||||
    height: 230px;
 | 
					 | 
				
			||||||
    background: url('../../../../assets/images/dataBoard/leftTopDataBox.png') no-repeat;
 | 
					 | 
				
			||||||
    background-size: 100%;
 | 
					 | 
				
			||||||
    margin-top: 8px;
 | 
					 | 
				
			||||||
    position: relative;
 | 
					 | 
				
			||||||
    left: 24px;
 | 
					 | 
				
			||||||
    .left-icon {
 | 
					 | 
				
			||||||
      font-weight: 500;
 | 
					 | 
				
			||||||
      font-size: 16px;
 | 
					 | 
				
			||||||
      color: #9DEAF5;
 | 
					 | 
				
			||||||
      line-height: 22px;
 | 
					 | 
				
			||||||
      letter-spacing: 1px;
 | 
					 | 
				
			||||||
      text-shadow: 0px 4px 2px rgba(0,0,0,0.62);
 | 
					 | 
				
			||||||
      position: absolute;
 | 
					 | 
				
			||||||
      left: 30px;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    .right-data {
 | 
					 | 
				
			||||||
      position: absolute;
 | 
					 | 
				
			||||||
      left: 100px;
 | 
					 | 
				
			||||||
      p{
 | 
					 | 
				
			||||||
        margin: 0;
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
      .num {
 | 
					 | 
				
			||||||
        font-weight: 500;
 | 
					 | 
				
			||||||
        font-size: 32px;
 | 
					 | 
				
			||||||
        color: #FFFFFF;
 | 
					 | 
				
			||||||
        text-shadow: 0px 4px 2px rgba(0,0,0,0.62);
 | 
					 | 
				
			||||||
        margin-right: 5px;
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      .text {
 | 
					 | 
				
			||||||
        font-weight: 500;
 | 
					 | 
				
			||||||
        font-size: 16px;
 | 
					 | 
				
			||||||
        color: #FFFFFF;
 | 
					 | 
				
			||||||
        letter-spacing: 1px;
 | 
					 | 
				
			||||||
        text-shadow: 0px 4px 2px rgba(0,0,0,0.62);
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</style>
 | 
					 | 
				
			||||||
@@ -1,198 +0,0 @@
 | 
				
			|||||||
<template>
 | 
					 | 
				
			||||||
  <div class='rightBottomBox'>
 | 
					 | 
				
			||||||
    <div class='title'>
 | 
					 | 
				
			||||||
      <svg-icon icon-class="dataBoard3" class='icon'/>
 | 
					 | 
				
			||||||
      <span>本月<span class='dotted'></span>班组生产排名</span>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
    <div class='rankingLeft'>
 | 
					 | 
				
			||||||
      <div class='rankingLeftTitle'>产量</div>
 | 
					 | 
				
			||||||
      <div class='rankingTypeBox'>
 | 
					 | 
				
			||||||
        <div style='margin-bottom: 10px;' v-for='(item,index) in teamProductionRank' :key='index'>
 | 
					 | 
				
			||||||
        <img :src="require(`../../../../assets/images/dataBoard/ranking${index+1}.png`)" alt="" width="50">
 | 
					 | 
				
			||||||
          <div class='rankingTextBox'>
 | 
					 | 
				
			||||||
            <p class='text1'>{{item.name}}/片</p>
 | 
					 | 
				
			||||||
            <p class='text2'>{{item?.value ? formatThousands(item.value) : '-'}}</p>
 | 
					 | 
				
			||||||
          </div>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
    <div class='rankingRight'>
 | 
					 | 
				
			||||||
      <div class='rankingRightTitle'>
 | 
					 | 
				
			||||||
        成品率
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
      <div class='rankingTypeBox' style='left: 120px;'>
 | 
					 | 
				
			||||||
        <div style='margin-bottom: 10px;' v-for='(item,index) in teamRateRank' :key='index'>
 | 
					 | 
				
			||||||
          <img :src="require(`../../../../assets/images/dataBoard/ranking${index+1}.png`)" alt="" width="50">
 | 
					 | 
				
			||||||
          <div class='rankingTextBox'>
 | 
					 | 
				
			||||||
            <p class='text1'>{{item.name}}</p>
 | 
					 | 
				
			||||||
            <p class='text2'>{{Math.trunc(item.value)}}<span style='font-size: 20px;'>.{{item.value1}}%</span></p>
 | 
					 | 
				
			||||||
          </div>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
        <!-- <div>
 | 
					 | 
				
			||||||
          <img src="../../../../assets//images//dataBoard/ranking2.png" alt="" width='50'>
 | 
					 | 
				
			||||||
          <div class='rankingTextBox'>
 | 
					 | 
				
			||||||
            <p class='text1'>班组1</p>
 | 
					 | 
				
			||||||
            <p class='text2'>94<span style='font-size: 20px;'>.13%</span></p>
 | 
					 | 
				
			||||||
          </div>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
        <div>
 | 
					 | 
				
			||||||
          <img src="../../../../assets//images//dataBoard/ranking3.png" alt="" width='50'>
 | 
					 | 
				
			||||||
          <div class='rankingTextBox'>
 | 
					 | 
				
			||||||
            <p class='text1'>班组1</p>
 | 
					 | 
				
			||||||
            <p class='text2'>90<span style='font-size: 20px;'>.42%</span></p>
 | 
					 | 
				
			||||||
          </div>
 | 
					 | 
				
			||||||
        </div> -->
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
  </div>
 | 
					 | 
				
			||||||
</template>
 | 
					 | 
				
			||||||
<script>
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
  name: 'RightBottom',
 | 
					 | 
				
			||||||
  props: {
 | 
					 | 
				
			||||||
    dataObj: {
 | 
					 | 
				
			||||||
      type: Object,
 | 
					 | 
				
			||||||
      default: () => {}
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  watch: {
 | 
					 | 
				
			||||||
    dataObj(val) {
 | 
					 | 
				
			||||||
      this.teamProductionRank = []
 | 
					 | 
				
			||||||
      this.teamRateRank = []
 | 
					 | 
				
			||||||
      val.teamProductionRank && val.teamProductionRank.forEach(item => {
 | 
					 | 
				
			||||||
        let obj = {
 | 
					 | 
				
			||||||
          name: item.name,
 | 
					 | 
				
			||||||
          value: item.value,
 | 
					 | 
				
			||||||
          rank: item.rank,
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        this.teamProductionRank.push(obj)
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
      val.teamRateRank && val.teamRateRank.forEach(item => {
 | 
					 | 
				
			||||||
        let obj = {
 | 
					 | 
				
			||||||
          name: item.name,
 | 
					 | 
				
			||||||
          value: item.value,
 | 
					 | 
				
			||||||
          rank: item.rank,
 | 
					 | 
				
			||||||
          value1: this.getPositiveDecimal(item.value)
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        this.teamRateRank.push(obj)
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  data() {
 | 
					 | 
				
			||||||
    return {
 | 
					 | 
				
			||||||
      teamProductionRank:[],
 | 
					 | 
				
			||||||
      teamRateRank:[]
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  mounted() {},
 | 
					 | 
				
			||||||
  methods: {
 | 
					 | 
				
			||||||
    getPositiveDecimal(num) {  
 | 
					 | 
				
			||||||
      const str = Math.abs(num).toString();  
 | 
					 | 
				
			||||||
      const [, decimal] = str.split('.');
 | 
					 | 
				
			||||||
      return decimal || '00';
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</script>
 | 
					 | 
				
			||||||
<style lang='scss' scoped>
 | 
					 | 
				
			||||||
p{
 | 
					 | 
				
			||||||
  margin: 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
.rightBottomBox {
 | 
					 | 
				
			||||||
  width: 755px;
 | 
					 | 
				
			||||||
  height: 332px;
 | 
					 | 
				
			||||||
  background: url('../../../../assets/images/dataBoard/right-bottom.png') no-repeat;
 | 
					 | 
				
			||||||
  background-size: 100%;
 | 
					 | 
				
			||||||
  position: absolute;
 | 
					 | 
				
			||||||
  right: 23px;
 | 
					 | 
				
			||||||
  bottom:23px;
 | 
					 | 
				
			||||||
  .title {
 | 
					 | 
				
			||||||
    margin: 10px 0 0 15px;
 | 
					 | 
				
			||||||
    .icon {
 | 
					 | 
				
			||||||
      width: 33px;
 | 
					 | 
				
			||||||
      height: 33px;
 | 
					 | 
				
			||||||
      margin-right: 5px;
 | 
					 | 
				
			||||||
      vertical-align:middle;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    span {
 | 
					 | 
				
			||||||
      font-size: 24px;
 | 
					 | 
				
			||||||
      color: #52FFF1;
 | 
					 | 
				
			||||||
      line-height: 24px;
 | 
					 | 
				
			||||||
      vertical-align:middle;
 | 
					 | 
				
			||||||
      .dotted {
 | 
					 | 
				
			||||||
        display: inline-block;
 | 
					 | 
				
			||||||
        width: 4px;
 | 
					 | 
				
			||||||
        height: 4px;
 | 
					 | 
				
			||||||
        border-radius: 2px;
 | 
					 | 
				
			||||||
        background-color: #52FFF1;
 | 
					 | 
				
			||||||
        margin: 0 8px;
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  .rankingLeft {
 | 
					 | 
				
			||||||
    width: 405px;
 | 
					 | 
				
			||||||
    height: 265px;
 | 
					 | 
				
			||||||
    background: url('../../../../assets/images/dataBoard/rankingBg1.png') no-repeat;
 | 
					 | 
				
			||||||
    background-size: 100%;
 | 
					 | 
				
			||||||
    position: absolute;
 | 
					 | 
				
			||||||
    left: 12px;
 | 
					 | 
				
			||||||
    top: 48px;
 | 
					 | 
				
			||||||
    .rankingLeftTitle {
 | 
					 | 
				
			||||||
      width: 24px;
 | 
					 | 
				
			||||||
      height: 73px;
 | 
					 | 
				
			||||||
      font-weight: 500;
 | 
					 | 
				
			||||||
      font-size: 24px;
 | 
					 | 
				
			||||||
      color: #52FFF1;
 | 
					 | 
				
			||||||
      line-height: 55px;
 | 
					 | 
				
			||||||
      position: relative;
 | 
					 | 
				
			||||||
      left: 37px;
 | 
					 | 
				
			||||||
      top: 63px;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  .rankingRight {
 | 
					 | 
				
			||||||
    width: 338px;
 | 
					 | 
				
			||||||
    height: 265px;
 | 
					 | 
				
			||||||
    background: url('../../../../assets/images/dataBoard/rankingBg2.png') no-repeat;
 | 
					 | 
				
			||||||
    background-size: 100%;
 | 
					 | 
				
			||||||
    position: absolute;
 | 
					 | 
				
			||||||
    right: 12px;
 | 
					 | 
				
			||||||
    top: 48px;
 | 
					 | 
				
			||||||
    .rankingRightTitle {
 | 
					 | 
				
			||||||
      width: 24px;
 | 
					 | 
				
			||||||
      height: 132px;
 | 
					 | 
				
			||||||
      font-weight: 500;
 | 
					 | 
				
			||||||
      font-size: 24px;
 | 
					 | 
				
			||||||
      color: #52FFF1;
 | 
					 | 
				
			||||||
      line-height: 55px;
 | 
					 | 
				
			||||||
      position: relative;
 | 
					 | 
				
			||||||
      left: 37px;
 | 
					 | 
				
			||||||
      top: 43px;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  .rankingTypeBox {
 | 
					 | 
				
			||||||
      position: absolute;
 | 
					 | 
				
			||||||
      left: 100px;
 | 
					 | 
				
			||||||
      top:13px;
 | 
					 | 
				
			||||||
      .rankingTextBox {
 | 
					 | 
				
			||||||
        display: inline-block;
 | 
					 | 
				
			||||||
        margin-left: 16px;
 | 
					 | 
				
			||||||
        vertical-align: top;
 | 
					 | 
				
			||||||
        .text1 {
 | 
					 | 
				
			||||||
          font-weight: 500;
 | 
					 | 
				
			||||||
          font-size: 17px;
 | 
					 | 
				
			||||||
          color: #FFFFFF;
 | 
					 | 
				
			||||||
          line-height: 22px;
 | 
					 | 
				
			||||||
          letter-spacing: 1px;
 | 
					 | 
				
			||||||
          padding-top: 5px;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        .text2 {
 | 
					 | 
				
			||||||
          font-weight: 500;
 | 
					 | 
				
			||||||
          font-size: 32px;
 | 
					 | 
				
			||||||
          color: #FFFFFF;
 | 
					 | 
				
			||||||
          line-height: 22px;
 | 
					 | 
				
			||||||
          margin-top: 8px;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</style>
 | 
					 | 
				
			||||||
@@ -1,352 +0,0 @@
 | 
				
			|||||||
<template>
 | 
					 | 
				
			||||||
  <div class='rightTopBox'>
 | 
					 | 
				
			||||||
    <div class='title'>
 | 
					 | 
				
			||||||
      <svg-icon icon-class="dataBoard4" class='icon'/>
 | 
					 | 
				
			||||||
      <span>缺陷情况</span>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
    <div class='title-split'>
 | 
					 | 
				
			||||||
      <img src="../../../../assets//images/dataBoard/leftbar.png" alt="">
 | 
					 | 
				
			||||||
      <span class='text'>总数</span>
 | 
					 | 
				
			||||||
      <img src="../../../../assets//images/dataBoard/rightbar.png" alt="">
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
    <div class='dataBox'>
 | 
					 | 
				
			||||||
      <div class='row'>
 | 
					 | 
				
			||||||
        <div class='box' style='width: 105px;'>
 | 
					 | 
				
			||||||
          <p class='name'>
 | 
					 | 
				
			||||||
            <span style='margin-right: 3px;'>当日</span>
 | 
					 | 
				
			||||||
            <img v-show='nokSumDet.today >= nokSumDet.yesterday' src="../../../../assets/images/dataBoard/arrUp.png" alt="" width='5' height='15'>
 | 
					 | 
				
			||||||
            <img v-show='nokSumDet.today < nokSumDet.yesterday' src="../../../../assets/images/dataBoard/arrDown.png" alt="" width='5' height='15'>
 | 
					 | 
				
			||||||
          </p>
 | 
					 | 
				
			||||||
          <p class='num'>{{nokSumDet?.today ? formatThousands(nokSumDet.today) : '-'}}</p>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
        <div class='box' style='width: 115px;'>
 | 
					 | 
				
			||||||
          <p class='name'>
 | 
					 | 
				
			||||||
            <span style='margin-right: 3px;'>本月</span>
 | 
					 | 
				
			||||||
            <img v-show='nokSumDet.month >= nokSumDet.lastMonth' src="../../../../assets/images/dataBoard/arrUp.png" alt="" width='5' height='15'>
 | 
					 | 
				
			||||||
            <img v-show='nokSumDet.month < nokSumDet.lastMonth' src="../../../../assets/images/dataBoard/arrDown.png" alt="" width='5' height='15'>
 | 
					 | 
				
			||||||
          </p>
 | 
					 | 
				
			||||||
          <p class='num'>{{nokSumDet?.month ? formatThousands(nokSumDet.month) : '-'}}</p>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
        <div class='box' style='width: 110px;'>
 | 
					 | 
				
			||||||
          <p class='name'>
 | 
					 | 
				
			||||||
            <span style='margin-right: 3px;'>本年</span>
 | 
					 | 
				
			||||||
            <img v-show='nokSumDet.year >= nokSumDet.lastYear' src="../../../../assets/images/dataBoard/arrUp.png" alt="" width='5' height='15'>
 | 
					 | 
				
			||||||
            <img v-show='nokSumDet.year < nokSumDet.lastYear' src="../../../../assets/images/dataBoard/arrDown.png" alt="" width='5' height='15'>
 | 
					 | 
				
			||||||
          </p>
 | 
					 | 
				
			||||||
          <p class='num'>{{nokSumDet?.year ? formatThousands(nokSumDet.year) : '-'}}</p>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
      <div class='row' style='padding-top: 5px;'>
 | 
					 | 
				
			||||||
        <div class='box' style='width: 105px;'>
 | 
					 | 
				
			||||||
          <p class='name'>
 | 
					 | 
				
			||||||
            <span>昨日</span>
 | 
					 | 
				
			||||||
          </p>
 | 
					 | 
				
			||||||
          <p class='num'>{{nokSumDet?.yesterday ? formatThousands(nokSumDet.yesterday) : '-'}}</p>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
        <div class='box' style='width: 115px;'>
 | 
					 | 
				
			||||||
          <p class='name'>
 | 
					 | 
				
			||||||
            <span>上月</span>
 | 
					 | 
				
			||||||
          </p>
 | 
					 | 
				
			||||||
          <p class='num'>{{nokSumDet?.lastMonth ? formatThousands(nokSumDet.lastMonth) : '-'}}</p>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
        <div class='box' style='width: 110px;'>
 | 
					 | 
				
			||||||
          <p class='name'>
 | 
					 | 
				
			||||||
            <span>上年</span>
 | 
					 | 
				
			||||||
          </p>
 | 
					 | 
				
			||||||
          <p class='num'>{{nokSumDet?.lastYear ? formatThousands(nokSumDet.lastYear) : '-'}}</p>
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
    <div class='title-split2'>
 | 
					 | 
				
			||||||
      <img src="../../../../assets//images/dataBoard/leftbar.png" alt="">
 | 
					 | 
				
			||||||
      <span class='text'>全厂缺陷汇总</span>
 | 
					 | 
				
			||||||
      <img src="../../../../assets//images/dataBoard/rightbar.png" alt="">
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
    <div id='defectSumChart' style='width: 400px;height: 315px;'></div>
 | 
					 | 
				
			||||||
  </div>
 | 
					 | 
				
			||||||
</template>
 | 
					 | 
				
			||||||
<script>
 | 
					 | 
				
			||||||
import * as echarts from 'echarts';
 | 
					 | 
				
			||||||
const colors = [
 | 
					 | 
				
			||||||
  "rgb(39, 96, 255)",
 | 
					 | 
				
			||||||
  "rgb(91, 155, 255)",
 | 
					 | 
				
			||||||
  "rgb(153, 214, 108)",
 | 
					 | 
				
			||||||
  "rgb(18, 255, 245)",
 | 
					 | 
				
			||||||
  "rgb(221, 177, 18)",
 | 
					 | 
				
			||||||
];
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
  name: 'RightTop',
 | 
					 | 
				
			||||||
  props: {
 | 
					 | 
				
			||||||
    dataObj: {
 | 
					 | 
				
			||||||
      type: Object,
 | 
					 | 
				
			||||||
      default: () => {}
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  watch: {
 | 
					 | 
				
			||||||
    dataObj(val) {
 | 
					 | 
				
			||||||
      this.nokSumDet = val.nokSumDet
 | 
					 | 
				
			||||||
      this.dataProps = []
 | 
					 | 
				
			||||||
      val.nokPieDet && val.nokPieDet.forEach(item => {
 | 
					 | 
				
			||||||
        let obj = {
 | 
					 | 
				
			||||||
          value: item.num,
 | 
					 | 
				
			||||||
          name: item.type
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        this.dataProps.push(obj)
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
      this.initChart()
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  data() {
 | 
					 | 
				
			||||||
    return {
 | 
					 | 
				
			||||||
      nokSumDet:{},
 | 
					 | 
				
			||||||
      chartDom: '',
 | 
					 | 
				
			||||||
      chart: '',
 | 
					 | 
				
			||||||
      dataProps:[],
 | 
					 | 
				
			||||||
      rangArrValue:[],
 | 
					 | 
				
			||||||
      dataList:[],
 | 
					 | 
				
			||||||
      totalValue:0
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  mounted() {},
 | 
					 | 
				
			||||||
  methods: {
 | 
					 | 
				
			||||||
    initChart() {
 | 
					 | 
				
			||||||
      if (
 | 
					 | 
				
			||||||
        this.chart !== null &&
 | 
					 | 
				
			||||||
        this.chart !== '' &&
 | 
					 | 
				
			||||||
        this.chart !== undefined
 | 
					 | 
				
			||||||
      ) {
 | 
					 | 
				
			||||||
        this.chart.dispose() // 页面多次刷新会出现警告,Dom已经初始化了一个实例,这是销毁实例
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      this.chartDom = document.getElementById('defectSumChart')
 | 
					 | 
				
			||||||
      this.chart = echarts.init(this.chartDom)
 | 
					 | 
				
			||||||
      var option;
 | 
					 | 
				
			||||||
      this.getPersonnelList(this.dataProps)
 | 
					 | 
				
			||||||
      option = {
 | 
					 | 
				
			||||||
        color: colors,
 | 
					 | 
				
			||||||
        graphic: [
 | 
					 | 
				
			||||||
          {
 | 
					 | 
				
			||||||
            type: "text",
 | 
					 | 
				
			||||||
            left: "center",
 | 
					 | 
				
			||||||
            top: "44%",
 | 
					 | 
				
			||||||
            style: {
 | 
					 | 
				
			||||||
              text: this.totalValue,
 | 
					 | 
				
			||||||
              fill: "#fff",
 | 
					 | 
				
			||||||
              width: 150,
 | 
					 | 
				
			||||||
              height: 44,
 | 
					 | 
				
			||||||
              fontSize: 31,
 | 
					 | 
				
			||||||
              fontWeight: 400,
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
          {
 | 
					 | 
				
			||||||
            type: "text",
 | 
					 | 
				
			||||||
            left: "center",
 | 
					 | 
				
			||||||
            top: "55%",
 | 
					 | 
				
			||||||
            style: {
 | 
					 | 
				
			||||||
              text: "总数/件",
 | 
					 | 
				
			||||||
              fill: "rgba(255, 255, 255, 0.70)",
 | 
					 | 
				
			||||||
              width: 32,
 | 
					 | 
				
			||||||
              height: 16,
 | 
					 | 
				
			||||||
              fontSize: 16,
 | 
					 | 
				
			||||||
              fontWeight: 400,
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
        ],
 | 
					 | 
				
			||||||
        series: [
 | 
					 | 
				
			||||||
          {
 | 
					 | 
				
			||||||
            name: "产线缺陷分类",
 | 
					 | 
				
			||||||
            type: "pie",
 | 
					 | 
				
			||||||
            radius: ["45%", "60%"],
 | 
					 | 
				
			||||||
            center: ["50%", "50%"],
 | 
					 | 
				
			||||||
            label:{
 | 
					 | 
				
			||||||
              formatter:function(params){
 | 
					 | 
				
			||||||
                return `{color${params.dataIndex}|${params.percent}%}\n{style2|${params.name}}`
 | 
					 | 
				
			||||||
              },
 | 
					 | 
				
			||||||
              rich:{
 | 
					 | 
				
			||||||
                color0:{color:'rgb(39, 96, 255)',fontSize:22},
 | 
					 | 
				
			||||||
                color1:{color:'rgb(91, 155, 255)',fontSize:22},
 | 
					 | 
				
			||||||
                color2:{color:'rgb(153, 214, 108)',fontSize:22},
 | 
					 | 
				
			||||||
                color3:{color:'rgb(18, 255, 245)',fontSize:22},
 | 
					 | 
				
			||||||
                color4:{color:'rgb(221, 177, 18)',fontSize:22},
 | 
					 | 
				
			||||||
                color5:{color:'rgb(39, 96, 255)',fontSize:22},
 | 
					 | 
				
			||||||
                color6:{color:'rgb(91, 155, 255)',fontSize:22},
 | 
					 | 
				
			||||||
                color7:{color:'rgb(153, 214, 108)',fontSize:22},
 | 
					 | 
				
			||||||
                color8:{color:'rgb(18, 255, 245)',fontSize:22},
 | 
					 | 
				
			||||||
                color9:{color:'rgb(221, 177, 18)',fontSize:22},
 | 
					 | 
				
			||||||
                style2:{
 | 
					 | 
				
			||||||
                  color:'#fff',
 | 
					 | 
				
			||||||
                  fontSize:14
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
              }
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            data: this.dataList,
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
        ],
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      option && this.chart.setOption(option);
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    getCoordinates(startArc, endArc) {
 | 
					 | 
				
			||||||
      const posi = [
 | 
					 | 
				
			||||||
        Math.sin(startArc),
 | 
					 | 
				
			||||||
        -Math.cos(startArc),
 | 
					 | 
				
			||||||
        Math.sin(endArc),
 | 
					 | 
				
			||||||
        -Math.cos(endArc),
 | 
					 | 
				
			||||||
      ];
 | 
					 | 
				
			||||||
      const dx = posi[2] - posi[0];
 | 
					 | 
				
			||||||
      const dy = posi[3] - posi[1];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      return this.getLocation(dx, dy);
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    getLocation(dx,dy) {
 | 
					 | 
				
			||||||
      const tanV = dx / dy;
 | 
					 | 
				
			||||||
      const directSign = Math.abs(tanV) < 1;
 | 
					 | 
				
			||||||
      const t = directSign ? tanV : 1 / tanV;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      const sign1 = t > 0 ? 1 : -1;
 | 
					 | 
				
			||||||
      const sign2 = dx > 0 ? 1 : -1;
 | 
					 | 
				
			||||||
      const sign = directSign ? sign1 * sign2 : sign2;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      const group1 = [0.5 - (sign * t) / 2, 0.5 + (sign * t) / 2];
 | 
					 | 
				
			||||||
      const group2 = sign > 0 ? [0, 1] : [1, 0];
 | 
					 | 
				
			||||||
      const group = [...group1, ...group2];
 | 
					 | 
				
			||||||
      const keys = directSign ? ["x", "x2", "y", "y2"] : ["y", "y2", "x", "x2"];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      let res = {};
 | 
					 | 
				
			||||||
      keys.forEach((k, idx) => {
 | 
					 | 
				
			||||||
        res[k] = group[idx];
 | 
					 | 
				
			||||||
      });
 | 
					 | 
				
			||||||
      return res;
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    async getPersonnelList(dataProps){
 | 
					 | 
				
			||||||
      this.rangArrValue = [];
 | 
					 | 
				
			||||||
      this.totalValue = 0;
 | 
					 | 
				
			||||||
      this.dataList = [];
 | 
					 | 
				
			||||||
      this.totalValue = dataProps.reduce(
 | 
					 | 
				
			||||||
        (total, value) => total + value.value,
 | 
					 | 
				
			||||||
        0
 | 
					 | 
				
			||||||
      );
 | 
					 | 
				
			||||||
      let cacheNum = 0;
 | 
					 | 
				
			||||||
      for (let i = 0; i < dataProps.length; i++) {
 | 
					 | 
				
			||||||
        const endNum = cacheNum + dataProps[i].value;
 | 
					 | 
				
			||||||
        this.rangArrValue.push([cacheNum, endNum]);
 | 
					 | 
				
			||||||
        cacheNum = endNum;
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      const angleArr = this.rangArrValue.map((arr) =>
 | 
					 | 
				
			||||||
        arr.map((num) => (num / this.totalValue) * Math.PI * 2)
 | 
					 | 
				
			||||||
      );
 | 
					 | 
				
			||||||
      this.dataList = dataProps.map((item, index) => {
 | 
					 | 
				
			||||||
        const range = this.getCoordinates(angleArr[index][0], angleArr[index][1]);
 | 
					 | 
				
			||||||
        const startColor = colors[index%5];
 | 
					 | 
				
			||||||
        const color = {
 | 
					 | 
				
			||||||
          type: "linear",
 | 
					 | 
				
			||||||
          x: range.x,
 | 
					 | 
				
			||||||
          x2: range.x2,
 | 
					 | 
				
			||||||
          y: range.y,
 | 
					 | 
				
			||||||
          y2: range.y2,
 | 
					 | 
				
			||||||
          colorStops: [
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
              offset: 0,
 | 
					 | 
				
			||||||
              color: startColor, // 起始颜色
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
              offset: 1,
 | 
					 | 
				
			||||||
              color: `${startColor.substring(0, startColor.length - 1)}, 0.2)`, // 终点颜色
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
          ],
 | 
					 | 
				
			||||||
          global: false,
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return {
 | 
					 | 
				
			||||||
          name: item.name,
 | 
					 | 
				
			||||||
          value: item.value,
 | 
					 | 
				
			||||||
          itemStyle: {
 | 
					 | 
				
			||||||
            color: color,
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
      });
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</script>
 | 
					 | 
				
			||||||
<style lang='scss' scoped>
 | 
					 | 
				
			||||||
p{
 | 
					 | 
				
			||||||
  margin: 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
.rightTopBox {
 | 
					 | 
				
			||||||
  width: 402px;
 | 
					 | 
				
			||||||
  height: 600px;
 | 
					 | 
				
			||||||
  background: url('../../../../assets/images/dataBoard/left-top.png') no-repeat;
 | 
					 | 
				
			||||||
  background-size: 100%;
 | 
					 | 
				
			||||||
  position: absolute;
 | 
					 | 
				
			||||||
  right: 23px;
 | 
					 | 
				
			||||||
  top:113px;
 | 
					 | 
				
			||||||
  .title {
 | 
					 | 
				
			||||||
    margin: 10px 0 0 15px;
 | 
					 | 
				
			||||||
    .icon {
 | 
					 | 
				
			||||||
      width: 33px;
 | 
					 | 
				
			||||||
      height: 33px;
 | 
					 | 
				
			||||||
      margin-right: 5px;
 | 
					 | 
				
			||||||
      vertical-align:middle;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    span {
 | 
					 | 
				
			||||||
      font-size: 24px;
 | 
					 | 
				
			||||||
      color: #52FFF1;
 | 
					 | 
				
			||||||
      line-height: 24px;
 | 
					 | 
				
			||||||
      vertical-align:middle;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  .title-split {
 | 
					 | 
				
			||||||
    margin-left: 95px;
 | 
					 | 
				
			||||||
    margin-top: 10px;
 | 
					 | 
				
			||||||
    .text{
 | 
					 | 
				
			||||||
      display: inline-block;
 | 
					 | 
				
			||||||
      width: 100px;
 | 
					 | 
				
			||||||
      font-size: 22px;
 | 
					 | 
				
			||||||
      color: #01CFCC;
 | 
					 | 
				
			||||||
      line-height: 24px;
 | 
					 | 
				
			||||||
      letter-spacing: 7px;
 | 
					 | 
				
			||||||
      text-align: center;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  .title-split2 {
 | 
					 | 
				
			||||||
    margin-left: 66px;
 | 
					 | 
				
			||||||
    margin-top: 20px;
 | 
					 | 
				
			||||||
    .text{
 | 
					 | 
				
			||||||
      display: inline-block;
 | 
					 | 
				
			||||||
      width: 160px;
 | 
					 | 
				
			||||||
      font-size: 22px;
 | 
					 | 
				
			||||||
      color: #01CFCC;
 | 
					 | 
				
			||||||
      line-height: 24px;
 | 
					 | 
				
			||||||
      letter-spacing: 2px;
 | 
					 | 
				
			||||||
      text-align: center;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  .dataBox {
 | 
					 | 
				
			||||||
    width: 358px;
 | 
					 | 
				
			||||||
    height: 160px;
 | 
					 | 
				
			||||||
    background: url('../../../../assets/images/dataBoard/defectNum.png') no-repeat;
 | 
					 | 
				
			||||||
    background-size: 100%;
 | 
					 | 
				
			||||||
    position: relative;
 | 
					 | 
				
			||||||
    left: 21px;
 | 
					 | 
				
			||||||
    top:8px;
 | 
					 | 
				
			||||||
    padding-left: 24px;
 | 
					 | 
				
			||||||
    .row {
 | 
					 | 
				
			||||||
      .box{
 | 
					 | 
				
			||||||
        display: inline-block;
 | 
					 | 
				
			||||||
        padding-top: 10px;
 | 
					 | 
				
			||||||
        .name {
 | 
					 | 
				
			||||||
          font-weight: 500;
 | 
					 | 
				
			||||||
          font-size: 20px;
 | 
					 | 
				
			||||||
          color: #FFFFFF;
 | 
					 | 
				
			||||||
          letter-spacing: 2px;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        .num {
 | 
					 | 
				
			||||||
          font-weight: 500;
 | 
					 | 
				
			||||||
          font-size: 28px;
 | 
					 | 
				
			||||||
          color: #FFFFFF;
 | 
					 | 
				
			||||||
          text-shadow: 0px 5px 2px rgba(0,0,0,0.62);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</style>
 | 
					 | 
				
			||||||
@@ -1,239 +1,100 @@
 | 
				
			|||||||
 | 
					<!-- 
 | 
				
			||||||
 | 
					    filename: index.vue
 | 
				
			||||||
 | 
					    author: liubin
 | 
				
			||||||
 | 
					    date: 2023-10-11 09:32:04
 | 
				
			||||||
 | 
					    description: 设备看板
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
	<div ref='dataBoardBoxB' class='dataBoardBoxB'>
 | 
						<div ref="dataBoard" class="data-board">
 | 
				
			||||||
		<div id="dataBoardBox" class='dataBoardBox' style="width: 1920px;height: 1080px;" :style="{ transform: 'scale(' + scaleNum + ')' }">
 | 
							<el-button type="text" @click="goback" class="go-back--btn">返回</el-button>
 | 
				
			||||||
			<DataBoardHeader
 | 
					 | 
				
			||||||
				:is-full-screen="isFullScreen"
 | 
					 | 
				
			||||||
				@screenfullChange="screenfullChange"
 | 
					 | 
				
			||||||
			/>
 | 
					 | 
				
			||||||
			<LeftTop :dataObj='dataObj'/>
 | 
					 | 
				
			||||||
			<LeftBottom :dataObj='dataObj'/>
 | 
					 | 
				
			||||||
			<CenterTop :scaleNum='scaleNum' :dataObj='dataObj'/>
 | 
					 | 
				
			||||||
			<CenterBottomL :dataObj='dataObj'/>
 | 
					 | 
				
			||||||
			<CenterBottomR :dataObj='dataObj'/>
 | 
					 | 
				
			||||||
			<RightTop :dataObj='dataObj'/>
 | 
					 | 
				
			||||||
			<RightBottom :dataObj='dataObj'/>
 | 
					 | 
				
			||||||
		</div>
 | 
					 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script>
 | 
					<script>
 | 
				
			||||||
import DataBoardHeader from './components/Header.vue';
 | 
					 | 
				
			||||||
import LeftTop from './components/LeftTop.vue';
 | 
					 | 
				
			||||||
import LeftBottom from './components/LeftBottom.vue';
 | 
					 | 
				
			||||||
import CenterTop from './components/CenterTop.vue';
 | 
					 | 
				
			||||||
import CenterBottomL from './components/CenterBottomL.vue';
 | 
					 | 
				
			||||||
import CenterBottomR from './components/CenterBottomR.vue';
 | 
					 | 
				
			||||||
import RightTop from './components/RightTop.vue';
 | 
					 | 
				
			||||||
import RightBottom from './components/RightBottom.vue';
 | 
					 | 
				
			||||||
import { debounce } from '@/utils/debounce';
 | 
					 | 
				
			||||||
import screenfull from 'screenfull';
 | 
					 | 
				
			||||||
import { getAccessToken } from '@/utils/auth';
 | 
					 | 
				
			||||||
import store from "@/store";
 | 
					 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	name: 'DataBoard',
 | 
						name: 'DataBoard',
 | 
				
			||||||
	components: { DataBoardHeader,LeftTop,LeftBottom,CenterTop,CenterBottomL,CenterBottomR,RightTop,RightBottom },
 | 
						components: {},
 | 
				
			||||||
	props: {},
 | 
						props: {},
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			isFullScreen: false,
 | 
								appMain: null, // dom
 | 
				
			||||||
			scaleNum: 0.8,
 | 
								parentStyle: {
 | 
				
			||||||
			dataObj:{},
 | 
									margin: '8px 14px 0px 16px',
 | 
				
			||||||
			sseReader: null,        // 保存流读取器
 | 
									minHeight: 'calc(100vh - 120px - 8px)',
 | 
				
			||||||
      abortController: null,  // 用于中止 fetch 请求
 | 
								}, // object
 | 
				
			||||||
      retryCount: 0,          // 当前重试次数
 | 
								mainFooter: null, // dom
 | 
				
			||||||
      isDestroyed: false      // 标记组件是否已销毁
 | 
					 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	created() {
 | 
						// mounted() {
 | 
				
			||||||
    this.init()
 | 
						// 	this.$nextTick(() => {
 | 
				
			||||||
  },
 | 
						// 		this.modify();
 | 
				
			||||||
	mounted() {
 | 
						// 	});
 | 
				
			||||||
	  this.boxReset = debounce(() => {
 | 
						// },
 | 
				
			||||||
      this.resetSize()
 | 
						// activated() {
 | 
				
			||||||
    }, 300)
 | 
						// 	this.modify();
 | 
				
			||||||
    this.boxReset()
 | 
						// },
 | 
				
			||||||
    window.addEventListener('resize', () => {
 | 
						// deactivated() {
 | 
				
			||||||
      this.boxReset()
 | 
						// 	this.recover();
 | 
				
			||||||
    })
 | 
						// },
 | 
				
			||||||
		this.getData()
 | 
						// beforeDestroy() {
 | 
				
			||||||
	},
 | 
						// 	this.recover();
 | 
				
			||||||
	beforeDestroy() {
 | 
						// },
 | 
				
			||||||
    this.closeSSE();
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  destroyed() {
 | 
					 | 
				
			||||||
    window.removeEventListener('resize', this.boxReset);
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
	computed: {
 | 
					 | 
				
			||||||
		sidebarOpened() {
 | 
					 | 
				
			||||||
			return this.$store.state.app.sidebar.opened
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	watch: {
 | 
					 | 
				
			||||||
		sidebarOpened(newVal, oldVal) {
 | 
					 | 
				
			||||||
			this.boxReset()
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	methods: {
 | 
						methods: {
 | 
				
			||||||
		async getData() {
 | 
							// modify() {
 | 
				
			||||||
			let _this = this;
 | 
							// 	// 在这个页面临时修改下父类的margin,结束时需还原
 | 
				
			||||||
			if (_this.isDestroyed) return;
 | 
							// 	this.appMain = document.querySelector('.app-main');
 | 
				
			||||||
			const url = process.env.VUE_APP_BASE_API+'/admin-api/monitoring/message/subscribe/'+store.getters.userId+'-'+Date.now();
 | 
							// 	// this.appMain.style.minHeight = 'calc(100vh - 90px)';
 | 
				
			||||||
			const token = getAccessToken()
 | 
							// 	this.appMain.style.margin = 0;
 | 
				
			||||||
			const headers = new Headers({
 | 
							// 	// 在这个页面临时删除 main-footer 元素,结束时需还原
 | 
				
			||||||
        'Authorization': `Bearer ${token}`,
 | 
							// 	// this.mainFooter = document.querySelector('.main-footer').cloneNode(true);
 | 
				
			||||||
        'Content-Type': 'text/event-stream'
 | 
							// 	// document.querySelector('.main-footer').remove();
 | 
				
			||||||
      });
 | 
					        //     this.$refs.dataBoard.classList.add('data-board');
 | 
				
			||||||
			try {
 | 
							// },
 | 
				
			||||||
        // 创建中止控制器
 | 
							// recover() {
 | 
				
			||||||
        this.abortController = new AbortController();
 | 
					        //     this.$refs.dataBoard.classList.remove('data-board');
 | 
				
			||||||
        // 发起 fetch 请求(替换为你的接口地址)
 | 
							// 	this.$nextTick(() => {
 | 
				
			||||||
        const response = await fetch(url, {
 | 
							// 		this.appMain.style.margin = this.parentStyle.margin;
 | 
				
			||||||
          method: 'GET',
 | 
							// 		// this.appMain.style.minHeight = this.parentStyle.minHeight;
 | 
				
			||||||
          headers: headers,
 | 
							// 		// this.appMain.insertAdjacentElement('afterend', this.mainFooter);
 | 
				
			||||||
          signal: _this.abortController.signal // 绑定中止信号
 | 
							// 	});
 | 
				
			||||||
        });
 | 
							// },
 | 
				
			||||||
 | 
							goback() {
 | 
				
			||||||
        // 获取流读取器
 | 
								this.$router.go(-1);
 | 
				
			||||||
        _this.sseReader = response.body.getReader();
 | 
					 | 
				
			||||||
        const decoder = new TextDecoder();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // 持续读取流数据
 | 
					 | 
				
			||||||
        while (true) {
 | 
					 | 
				
			||||||
          const { done, value } = await _this.sseReader.read();
 | 
					 | 
				
			||||||
          if (done) {
 | 
					 | 
				
			||||||
            console.log('SSE 连接正常关闭');
 | 
					 | 
				
			||||||
            _this.handleReconnect(); // 触发重连
 | 
					 | 
				
			||||||
            break;
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
          // 处理 SSE 事件数据
 | 
					 | 
				
			||||||
          const data = decoder.decode(value);
 | 
					 | 
				
			||||||
          console.log('收到消息:', data);
 | 
					 | 
				
			||||||
					if (_this.isValidData(data)){
 | 
					 | 
				
			||||||
						_this.upDateMsg(data);
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      } catch (error) {
 | 
					 | 
				
			||||||
        // 主动中止的请求不报错
 | 
					 | 
				
			||||||
        if (error.name === 'AbortError') return;
 | 
					 | 
				
			||||||
        console.error('SSE 连接异常:', error);
 | 
					 | 
				
			||||||
        _this.handleReconnect(); // 触发重连
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		closeSSE() {
 | 
					 | 
				
			||||||
      this.isDestroyed = true; // 标记销毁
 | 
					 | 
				
			||||||
      if (this.abortController) {
 | 
					 | 
				
			||||||
        this.abortController.abort(); // 中止 fetch 请求
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      if (this.sseReader) {
 | 
					 | 
				
			||||||
        this.sseReader.cancel();      // 关闭流读取器
 | 
					 | 
				
			||||||
        this.sseReader = null;
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      console.log('SSE 连接已强制关闭');
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
		handleReconnect() {
 | 
					 | 
				
			||||||
      if (this.isDestroyed) return;
 | 
					 | 
				
			||||||
      // 指数退避策略(最大重试 5 次)
 | 
					 | 
				
			||||||
      const maxRetries = 5;
 | 
					 | 
				
			||||||
      if (this.retryCount < maxRetries) {
 | 
					 | 
				
			||||||
        const delay = Math.pow(2, this.retryCount) * 1000;
 | 
					 | 
				
			||||||
        setTimeout(() => {
 | 
					 | 
				
			||||||
          this.retryCount++;
 | 
					 | 
				
			||||||
          this.initSSE();
 | 
					 | 
				
			||||||
        }, delay);
 | 
					 | 
				
			||||||
      } else {
 | 
					 | 
				
			||||||
        console.error('SSE 重连次数已达上限');
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
		isValidData (data) {
 | 
					 | 
				
			||||||
		  return data.trim().startsWith('data:{') && !data.includes('heartbeat');
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		upDateMsg(data) {
 | 
					 | 
				
			||||||
      const jsonStr = data.replace(/^data:/, '').trim();
 | 
					 | 
				
			||||||
      console.log('jsonStr', jsonStr);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			try {
 | 
					 | 
				
			||||||
				const dataObj = JSON.parse(jsonStr);
 | 
					 | 
				
			||||||
				this.dataObj = dataObj
 | 
					 | 
				
			||||||
				console.log('dataObj',this.dataObj)
 | 
					 | 
				
			||||||
			} catch (e) {
 | 
					 | 
				
			||||||
				console.error('JSON 解析失败:', e);
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		change() {
 | 
					 | 
				
			||||||
      this.isFullScreen = screenfull.isFullscreen
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
		init() {
 | 
					 | 
				
			||||||
      if (!screenfull.isEnabled) {
 | 
					 | 
				
			||||||
        this.$message({
 | 
					 | 
				
			||||||
          message: 'you browser can not work',
 | 
					 | 
				
			||||||
          type: 'warning'
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
        return false
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      screenfull.on('change', this.change)
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    destroy() {
 | 
					 | 
				
			||||||
      if (!screenfull.isEnabled) {
 | 
					 | 
				
			||||||
        this.$message({
 | 
					 | 
				
			||||||
          message: 'you browser can not work',
 | 
					 | 
				
			||||||
          type: 'warning'
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
        return false
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      screenfull.off('change', this.change)
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
		// 全屏
 | 
					 | 
				
			||||||
    screenfullChange() {
 | 
					 | 
				
			||||||
      if (!screenfull.isEnabled) {
 | 
					 | 
				
			||||||
        this.$message({
 | 
					 | 
				
			||||||
          message: 'you browser can not work',
 | 
					 | 
				
			||||||
          type: 'warning'
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
        return false
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      screenfull.toggle(this.$refs.dataBoardBoxB)
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
		resetSize() {
 | 
					 | 
				
			||||||
      const dataBoardBox = document.getElementById('dataBoardBox')
 | 
					 | 
				
			||||||
      const rw = parseFloat(window.innerWidth)
 | 
					 | 
				
			||||||
			const rh = parseFloat(window.innerHeight)
 | 
					 | 
				
			||||||
      const bw = parseFloat(dataBoardBox.style.width)
 | 
					 | 
				
			||||||
      const bh = parseFloat(dataBoardBox.style.height)
 | 
					 | 
				
			||||||
      let wx = 0
 | 
					 | 
				
			||||||
			let hy = 0
 | 
					 | 
				
			||||||
      if (screenfull.isFullscreen) {
 | 
					 | 
				
			||||||
        wx = rw / bw
 | 
					 | 
				
			||||||
				hy = rh / bh
 | 
					 | 
				
			||||||
      } else {
 | 
					 | 
				
			||||||
        if (this.$store.state.app.sidebar.opened) {
 | 
					 | 
				
			||||||
          wx = (rw - 283) / bw
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
          wx = (rw - 88) / bw
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
				hy = (rh - 150) / bh
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      this.scaleNum = wx < hy ? wx : hy
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<style scoped lang="scss">
 | 
					<style scoped lang="scss">
 | 
				
			||||||
	.dataBoardBoxB {
 | 
					.data-board {
 | 
				
			||||||
		width: 100%;
 | 
					 | 
				
			||||||
		height: calc(100vh - 150px);
 | 
					 | 
				
			||||||
		position: relative;
 | 
					 | 
				
			||||||
		overflow: auto;
 | 
					 | 
				
			||||||
		.dataBoardBox {
 | 
					 | 
				
			||||||
	position: absolute;
 | 
						position: absolute;
 | 
				
			||||||
			transform-origin: 16px 8px;
 | 
						top: 0;
 | 
				
			||||||
			font-size: 16px;
 | 
						left: 0;
 | 
				
			||||||
			top: 0px;
 | 
						width: 100%;
 | 
				
			||||||
			left: 0px;
 | 
						height: 100%;
 | 
				
			||||||
			background: url('../../../assets/images/dataBoard/background.png') no-repeat;
 | 
						background: url('../../../assets/images/DataBoard.png') 100% 100% / contain
 | 
				
			||||||
			background-size: cover;
 | 
							no-repeat;
 | 
				
			||||||
			background-position: 0 0;
 | 
					}
 | 
				
			||||||
			overflow: auto;
 | 
					
 | 
				
			||||||
 | 
					.go-back--btn {
 | 
				
			||||||
 | 
						position: fixed;
 | 
				
			||||||
 | 
						top: 28px;
 | 
				
			||||||
 | 
						left: 24px;
 | 
				
			||||||
 | 
						color: #fff;
 | 
				
			||||||
 | 
						font-size: 18px;
 | 
				
			||||||
 | 
						letter-spacing: 6px;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						&:hover {
 | 
				
			||||||
 | 
							text-decoration: underline;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						&::after {
 | 
				
			||||||
 | 
							content: "\2BAA";
 | 
				
			||||||
 | 
							position: absolute;
 | 
				
			||||||
 | 
							top: 6px;
 | 
				
			||||||
 | 
							right: -26px;
 | 
				
			||||||
 | 
							font-size: 24px;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
</style>
 | 
					</style>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -71,14 +71,14 @@
 | 
				
			|||||||
			</el-col>
 | 
								</el-col>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			<el-col :span="12">
 | 
								<el-col :span="12">
 | 
				
			||||||
				<el-form-item label="工段设备排序" prop="sort">
 | 
									<el-form-item label="工段排序" prop="sort">
 | 
				
			||||||
					<el-input-number
 | 
										<el-input-number
 | 
				
			||||||
						v-model="dataForm.sort"
 | 
											v-model="dataForm.sort"
 | 
				
			||||||
						filterable
 | 
											filterable
 | 
				
			||||||
						min="0"
 | 
											min="0"
 | 
				
			||||||
						max="100"
 | 
											max="100"
 | 
				
			||||||
						@change="$emit('update', dataForm)"
 | 
											@change="$emit('update', dataForm)"
 | 
				
			||||||
						placeholder="请输入工段设备排序" />
 | 
											placeholder="请输入工段排序" />
 | 
				
			||||||
				</el-form-item>
 | 
									</el-form-item>
 | 
				
			||||||
			</el-col>
 | 
								</el-col>
 | 
				
			||||||
		</el-row>
 | 
							</el-row>
 | 
				
			||||||
@@ -112,7 +112,6 @@
 | 
				
			|||||||
								{ label: '无类型', value: 0 },
 | 
													{ label: '无类型', value: 0 },
 | 
				
			||||||
								{ label: '进口统计', value: 1 },
 | 
													{ label: '进口统计', value: 1 },
 | 
				
			||||||
								{ label: '出口统计', value: 2 },
 | 
													{ label: '出口统计', value: 2 },
 | 
				
			||||||
                { label: '进出口计数', value: 3 },
 | 
					 | 
				
			||||||
							]"
 | 
												]"
 | 
				
			||||||
							:key="opt.value"
 | 
												:key="opt.value"
 | 
				
			||||||
							:label="opt.label"
 | 
												:label="opt.label"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,8 +4,7 @@
 | 
				
			|||||||
		<SearchBar
 | 
							<SearchBar
 | 
				
			||||||
			:formConfigs="searchBarFormConfig"
 | 
								:formConfigs="searchBarFormConfig"
 | 
				
			||||||
			ref="search-bar"
 | 
								ref="search-bar"
 | 
				
			||||||
			@select-changed="handleSearchBarChanged"
 | 
								@headBtnClick="handleSearchBarBtnClick" />
 | 
				
			||||||
			@headBtnClick="buttonClick" />
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<!-- 列表 -->
 | 
							<!-- 列表 -->
 | 
				
			||||||
		<base-table
 | 
							<base-table
 | 
				
			||||||
@@ -53,8 +52,6 @@ import {
 | 
				
			|||||||
	getEquipmentBindSectionPage,
 | 
						getEquipmentBindSectionPage,
 | 
				
			||||||
	exportEquipmentBindSectionExcel,
 | 
						exportEquipmentBindSectionExcel,
 | 
				
			||||||
} from '@/api/base/equipmentBindSection';
 | 
					} from '@/api/base/equipmentBindSection';
 | 
				
			||||||
import { getPdList } from '@/api/core/monitoring/auto';
 | 
					 | 
				
			||||||
import { getFactoryPage } from '@/api/core/base/factory';
 | 
					 | 
				
			||||||
import moment from 'moment';
 | 
					import moment from 'moment';
 | 
				
			||||||
import basicPageMixin from '@/mixins/lb/basicPageMixin';
 | 
					import basicPageMixin from '@/mixins/lb/basicPageMixin';
 | 
				
			||||||
import DialogForm from './dialogForm.vue';
 | 
					import DialogForm from './dialogForm.vue';
 | 
				
			||||||
@@ -64,7 +61,7 @@ export default {
 | 
				
			|||||||
	mixins: [basicPageMixin],
 | 
						mixins: [basicPageMixin],
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			searchBarKeys: ['factoryId','productionLineId','workshopSectionId', 'equipmentName'],
 | 
								searchBarKeys: ['workshopSectionId', 'equipmentName'],
 | 
				
			||||||
			tableBtn: [
 | 
								tableBtn: [
 | 
				
			||||||
				this.$auth.hasPermi('base:equipment-bind-section:update')
 | 
									this.$auth.hasPermi('base:equipment-bind-section:update')
 | 
				
			||||||
					? {
 | 
										? {
 | 
				
			||||||
@@ -87,9 +84,8 @@ export default {
 | 
				
			|||||||
					width: 180,
 | 
										width: 180,
 | 
				
			||||||
					filter: (val) => moment(val).format('yyyy-MM-DD HH:mm:ss'),
 | 
										filter: (val) => moment(val).format('yyyy-MM-DD HH:mm:ss'),
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{ prop: 'factoryName', label: '工厂' },
 | 
									{ prop: 'productionLine', label: '产线名称' },
 | 
				
			||||||
				{ prop: 'productionLine', label: '产线' },
 | 
									{ prop: 'workshopSection', label: '工段名称' },
 | 
				
			||||||
				{ prop: 'workshopSection', label: '工段' },
 | 
					 | 
				
			||||||
				{ prop: 'equipment', label: '设备名称' },
 | 
									{ prop: 'equipment', label: '设备名称' },
 | 
				
			||||||
				{ prop: 'sort', label: '工段中排序' },
 | 
									{ prop: 'sort', label: '工段中排序' },
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
@@ -102,7 +98,7 @@ export default {
 | 
				
			|||||||
					prop: 'sectionDataType',
 | 
										prop: 'sectionDataType',
 | 
				
			||||||
					label: '工段数据类型',
 | 
										label: '工段数据类型',
 | 
				
			||||||
					filter: (val) =>
 | 
										filter: (val) =>
 | 
				
			||||||
						val != null ? ['无类型', '进口计数', '出口计数', '进出口计数'][val] : '-',
 | 
											val != null ? ['无类型', '进口计数', '出口计数'][val] : '-',
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				// {
 | 
									// {
 | 
				
			||||||
				// 	action: 'show-alert',
 | 
									// 	action: 'show-alert',
 | 
				
			||||||
@@ -133,20 +129,6 @@ export default {
 | 
				
			|||||||
				// },
 | 
									// },
 | 
				
			||||||
			],
 | 
								],
 | 
				
			||||||
			searchBarFormConfig: [
 | 
								searchBarFormConfig: [
 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					type: 'select',
 | 
					 | 
				
			||||||
					label: '工厂',
 | 
					 | 
				
			||||||
					selectOptions: [],
 | 
					 | 
				
			||||||
					param: 'factoryId',
 | 
					 | 
				
			||||||
					onchange: true,
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					type: 'select',
 | 
					 | 
				
			||||||
					label: '产线',
 | 
					 | 
				
			||||||
					selectOptions: [],
 | 
					 | 
				
			||||||
					param: 'productionLineId',
 | 
					 | 
				
			||||||
					multiple: true,
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					type: 'select',
 | 
										type: 'select',
 | 
				
			||||||
					label: '工段',
 | 
										label: '工段',
 | 
				
			||||||
@@ -227,8 +209,8 @@ export default {
 | 
				
			|||||||
						label: '产线数据类型',
 | 
											label: '产线数据类型',
 | 
				
			||||||
						options: [
 | 
											options: [
 | 
				
			||||||
							{ label: '无类型', value: 0 },
 | 
												{ label: '无类型', value: 0 },
 | 
				
			||||||
							{ label: '进口计数', value: 1 },
 | 
												{ label: '进口统计', value: 1 },
 | 
				
			||||||
							{ label: '出口计数', value: 2 },
 | 
												{ label: '出口统计', value: 2 },
 | 
				
			||||||
						],
 | 
											],
 | 
				
			||||||
						prop: 'lineDataType',
 | 
											prop: 'lineDataType',
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
@@ -237,9 +219,8 @@ export default {
 | 
				
			|||||||
						label: '工段数据类型',
 | 
											label: '工段数据类型',
 | 
				
			||||||
						options: [
 | 
											options: [
 | 
				
			||||||
							{ label: '无类型', value: 0 },
 | 
												{ label: '无类型', value: 0 },
 | 
				
			||||||
							{ label: '进口计数', value: 1 },
 | 
												{ label: '进口统计', value: 1 },
 | 
				
			||||||
							{ label: '出口计数', value: 2 },
 | 
												{ label: '出口统计', value: 2 },
 | 
				
			||||||
							{ label: '进出口计数', value: 3 },
 | 
					 | 
				
			||||||
						],
 | 
											],
 | 
				
			||||||
						prop: 'sectionDataType',
 | 
											prop: 'sectionDataType',
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
@@ -253,9 +234,6 @@ export default {
 | 
				
			|||||||
				pageSize: 10,
 | 
									pageSize: 10,
 | 
				
			||||||
				workshopSectionId: null,
 | 
									workshopSectionId: null,
 | 
				
			||||||
				equipmentId: null,
 | 
									equipmentId: null,
 | 
				
			||||||
        equipmentName: null,
 | 
					 | 
				
			||||||
        factoryId: null,
 | 
					 | 
				
			||||||
				productionLineId: [],
 | 
					 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			// 表单参数
 | 
								// 表单参数
 | 
				
			||||||
			form: {},
 | 
								form: {},
 | 
				
			||||||
@@ -264,7 +242,6 @@ export default {
 | 
				
			|||||||
	created() {
 | 
						created() {
 | 
				
			||||||
		this.getList();
 | 
							this.getList();
 | 
				
			||||||
		this.initWorksection();
 | 
							this.initWorksection();
 | 
				
			||||||
		this.getPdLineList();
 | 
					 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	methods: {
 | 
						methods: {
 | 
				
			||||||
		/** 准备工段数据 */
 | 
							/** 准备工段数据 */
 | 
				
			||||||
@@ -274,7 +251,7 @@ export default {
 | 
				
			|||||||
				method: 'get',
 | 
									method: 'get',
 | 
				
			||||||
			});
 | 
								});
 | 
				
			||||||
			if (code == 0) {
 | 
								if (code == 0) {
 | 
				
			||||||
				this.searchBarFormConfig[2].selectOptions = data.map((item) => {
 | 
									this.searchBarFormConfig[0].selectOptions = data.map((item) => {
 | 
				
			||||||
					return {
 | 
										return {
 | 
				
			||||||
						name: item.name,
 | 
											name: item.name,
 | 
				
			||||||
						id: item.id,
 | 
											id: item.id,
 | 
				
			||||||
@@ -282,51 +259,6 @@ export default {
 | 
				
			|||||||
				});
 | 
									});
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		getPdLineList() {
 | 
					 | 
				
			||||||
			getPdList().then((res) => {
 | 
					 | 
				
			||||||
				this.searchBarFormConfig[1].selectOptions = res.data || [];
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
			const params = {
 | 
					 | 
				
			||||||
				pageSize: 100,
 | 
					 | 
				
			||||||
				pageNo: 1,
 | 
					 | 
				
			||||||
			};
 | 
					 | 
				
			||||||
			getFactoryPage(params).then((res) => {
 | 
					 | 
				
			||||||
				this.searchBarFormConfig[0].selectOptions = res.data.list || [];
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		handleSearchBarChanged({ param, value }) {
 | 
					 | 
				
			||||||
			this.queryParams.productionLineId = [];
 | 
					 | 
				
			||||||
			this.$refs['search-bar'].formInline.productionLineId = undefined;
 | 
					 | 
				
			||||||
			getPdList(value).then((res) => {
 | 
					 | 
				
			||||||
				this.searchBarFormConfig[1].selectOptions = res.data || [];
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		buttonClick(val) {
 | 
					 | 
				
			||||||
			switch (val.btnName) {
 | 
					 | 
				
			||||||
				case 'search':
 | 
					 | 
				
			||||||
					this.queryParams.pageNo = 1;
 | 
					 | 
				
			||||||
					this.queryParams.pageSize = 10;
 | 
					 | 
				
			||||||
					this.queryParams.name = val.name;
 | 
					 | 
				
			||||||
					this.queryParams.workshopSectionId = val.workshopSectionId || undefined;
 | 
					 | 
				
			||||||
					this.queryParams.equipmentName = val.equipmentName || undefined;
 | 
					 | 
				
			||||||
					this.queryParams.factoryId = val.factoryId || undefined;
 | 
					 | 
				
			||||||
					this.queryParams.productionLineId = val.productionLineId || [];
 | 
					 | 
				
			||||||
					this.handleQuery();
 | 
					 | 
				
			||||||
					break;
 | 
					 | 
				
			||||||
				case 'add':
 | 
					 | 
				
			||||||
					this.handleAdd();
 | 
					 | 
				
			||||||
					break;
 | 
					 | 
				
			||||||
				case 'export':
 | 
					 | 
				
			||||||
					this.handleExport();
 | 
					 | 
				
			||||||
					break;
 | 
					 | 
				
			||||||
				case 'reset':
 | 
					 | 
				
			||||||
					this.$refs['search-bar'].resetForm();
 | 
					 | 
				
			||||||
					this.resetQuery();
 | 
					 | 
				
			||||||
					break;
 | 
					 | 
				
			||||||
				default:
 | 
					 | 
				
			||||||
					console.log(val);
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		/** 查询列表 */
 | 
							/** 查询列表 */
 | 
				
			||||||
		getList() {
 | 
							getList() {
 | 
				
			||||||
			this.loading = true;
 | 
								this.loading = true;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,109 +0,0 @@
 | 
				
			|||||||
<!--
 | 
					 | 
				
			||||||
 * @Author: zwq
 | 
					 | 
				
			||||||
 * @Date: 2021-11-18 14:16:25
 | 
					 | 
				
			||||||
 * @LastEditors: zwq
 | 
					 | 
				
			||||||
 * @LastEditTime: 2025-02-26 16:37:29
 | 
					 | 
				
			||||||
 * @Description:
 | 
					 | 
				
			||||||
-->
 | 
					 | 
				
			||||||
<template>
 | 
					 | 
				
			||||||
	<el-row :gutter="20">
 | 
					 | 
				
			||||||
		<el-form
 | 
					 | 
				
			||||||
			:model="dataForm"
 | 
					 | 
				
			||||||
			:rules="dataRule"
 | 
					 | 
				
			||||||
			ref="dataForm"
 | 
					 | 
				
			||||||
			@keyup.enter.native="dataFormSubmit()"
 | 
					 | 
				
			||||||
			label-width="80px">
 | 
					 | 
				
			||||||
			<el-col :span="12">
 | 
					 | 
				
			||||||
				<el-form-item label="关联表名" prop="plcTableName">
 | 
					 | 
				
			||||||
					<el-input
 | 
					 | 
				
			||||||
						v-model="dataForm.plcTableName"
 | 
					 | 
				
			||||||
						clearable
 | 
					 | 
				
			||||||
						placeholder="请输入关联表名" />
 | 
					 | 
				
			||||||
				</el-form-item>
 | 
					 | 
				
			||||||
			</el-col>
 | 
					 | 
				
			||||||
			<el-col :span="12">
 | 
					 | 
				
			||||||
				<el-form-item label="编码" prop="code">
 | 
					 | 
				
			||||||
					<el-input
 | 
					 | 
				
			||||||
						v-model="dataForm.code"
 | 
					 | 
				
			||||||
						clearable
 | 
					 | 
				
			||||||
						placeholder="请输入编码" />
 | 
					 | 
				
			||||||
				</el-form-item>
 | 
					 | 
				
			||||||
			</el-col>
 | 
					 | 
				
			||||||
			<el-col :span="12">
 | 
					 | 
				
			||||||
				<el-form-item label="标识" prop="name">
 | 
					 | 
				
			||||||
					<el-input
 | 
					 | 
				
			||||||
						v-model="dataForm.name"
 | 
					 | 
				
			||||||
						clearable
 | 
					 | 
				
			||||||
						placeholder="请输入标识" />
 | 
					 | 
				
			||||||
				</el-form-item>
 | 
					 | 
				
			||||||
			</el-col>
 | 
					 | 
				
			||||||
			<el-col :span="12">
 | 
					 | 
				
			||||||
				<el-form-item label="英文名" prop="enName">
 | 
					 | 
				
			||||||
					<el-input
 | 
					 | 
				
			||||||
						v-model="dataForm.enName"
 | 
					 | 
				
			||||||
						clearable
 | 
					 | 
				
			||||||
						placeholder="请输入英文名" />
 | 
					 | 
				
			||||||
				</el-form-item>
 | 
					 | 
				
			||||||
			</el-col>
 | 
					 | 
				
			||||||
			<el-col :span="12">
 | 
					 | 
				
			||||||
				<el-form-item label="是否采集" prop="collection">
 | 
					 | 
				
			||||||
					<el-switch
 | 
					 | 
				
			||||||
						v-model="dataForm.collection"
 | 
					 | 
				
			||||||
						:active-value="1"
 | 
					 | 
				
			||||||
						:inactive-value="0"></el-switch>
 | 
					 | 
				
			||||||
				</el-form-item>
 | 
					 | 
				
			||||||
			</el-col>
 | 
					 | 
				
			||||||
			<el-col :span="12">
 | 
					 | 
				
			||||||
				<el-form-item label="描述" prop="description">
 | 
					 | 
				
			||||||
					<el-input
 | 
					 | 
				
			||||||
						v-model="dataForm.description"
 | 
					 | 
				
			||||||
						clearable
 | 
					 | 
				
			||||||
						placeholder="请输入描述" />
 | 
					 | 
				
			||||||
				</el-form-item>
 | 
					 | 
				
			||||||
			</el-col>
 | 
					 | 
				
			||||||
		</el-form>
 | 
					 | 
				
			||||||
	</el-row>
 | 
					 | 
				
			||||||
</template>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<script>
 | 
					 | 
				
			||||||
import basicAdd from '@/mixins/basic-add';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import {
 | 
					 | 
				
			||||||
	createEquipmentPlc,
 | 
					 | 
				
			||||||
	updateEquipmentPlc,
 | 
					 | 
				
			||||||
	getEquipmentPlc,
 | 
					 | 
				
			||||||
	getCode,
 | 
					 | 
				
			||||||
} from '@/api/base/equipmentPlc';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
	mixins: [basicAdd],
 | 
					 | 
				
			||||||
	data() {
 | 
					 | 
				
			||||||
		return {
 | 
					 | 
				
			||||||
			urlOptions: {
 | 
					 | 
				
			||||||
				isGetCode: true,
 | 
					 | 
				
			||||||
				codeURL: getCode,
 | 
					 | 
				
			||||||
				createURL: createEquipmentPlc,
 | 
					 | 
				
			||||||
				updateURL: updateEquipmentPlc,
 | 
					 | 
				
			||||||
				infoURL: getEquipmentPlc,
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
			dataForm: {
 | 
					 | 
				
			||||||
				id: undefined,
 | 
					 | 
				
			||||||
				plcTableName: undefined,
 | 
					 | 
				
			||||||
				code: undefined,
 | 
					 | 
				
			||||||
				name: undefined,
 | 
					 | 
				
			||||||
				enName: undefined,
 | 
					 | 
				
			||||||
				collection: 1,
 | 
					 | 
				
			||||||
				description: undefined,
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
			dataRule: {
 | 
					 | 
				
			||||||
				plcTableName: [
 | 
					 | 
				
			||||||
					{ required: true, message: '关联表名不能为空', trigger: 'blur' },
 | 
					 | 
				
			||||||
				],
 | 
					 | 
				
			||||||
				code: [{ required: true, message: '编码不能为空', trigger: 'blur' }],
 | 
					 | 
				
			||||||
				name: [{ required: true, message: '标识不能为空', trigger: 'blur' }],
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	methods: {},
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
</script>
 | 
					 | 
				
			||||||
@@ -1,53 +1,59 @@
 | 
				
			|||||||
<template>
 | 
					<template>
 | 
				
			||||||
	<div class="app-container">
 | 
						<div class="app-container">
 | 
				
			||||||
		<search-bar
 | 
							<!-- 搜索工作栏 -->
 | 
				
			||||||
			:formConfigs="formConfig"
 | 
							<SearchBar
 | 
				
			||||||
			ref="searchBarForm"
 | 
								:formConfigs="searchBarFormConfig"
 | 
				
			||||||
			@headBtnClick="buttonClick" />
 | 
								ref="search-bar"
 | 
				
			||||||
 | 
								@headBtnClick="handleSearchBarBtnClick" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<!-- 列表 -->
 | 
				
			||||||
		<base-table
 | 
							<base-table
 | 
				
			||||||
			v-loading="dataListLoading"
 | 
					 | 
				
			||||||
			:table-props="tableProps"
 | 
								:table-props="tableProps"
 | 
				
			||||||
			:page="listQuery.pageNo"
 | 
								:page="queryParams.pageNo"
 | 
				
			||||||
			:limit="listQuery.pageSize"
 | 
								:limit="queryParams.pageSize"
 | 
				
			||||||
			:table-data="tableData"
 | 
								:table-data="list"
 | 
				
			||||||
 | 
								ref="pageTable"
 | 
				
			||||||
			@emitFun="handleEmitFun">
 | 
								@emitFun="handleEmitFun">
 | 
				
			||||||
			<method-btn
 | 
								<method-btn
 | 
				
			||||||
				v-if="tableBtn.length"
 | 
									v-if="tableBtn.length"
 | 
				
			||||||
				slot="handleBtn"
 | 
									slot="handleBtn"
 | 
				
			||||||
				:width="120"
 | 
					 | 
				
			||||||
				label="操作"
 | 
									label="操作"
 | 
				
			||||||
				:method-list="tableBtn"
 | 
									:method-list="tableBtn"
 | 
				
			||||||
				@clickBtn="handleClick" />
 | 
									@clickBtn="handleTableBtnClick" />
 | 
				
			||||||
		</base-table>
 | 
							</base-table>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<!-- 分页组件 -->
 | 
				
			||||||
		<pagination
 | 
							<pagination
 | 
				
			||||||
			:limit.sync="listQuery.pageSize"
 | 
								v-show="total > 0"
 | 
				
			||||||
			:page.sync="listQuery.pageNo"
 | 
								:total="total"
 | 
				
			||||||
			:total="listQuery.total"
 | 
								:page.sync="queryParams.pageNo"
 | 
				
			||||||
			@pagination="getDataList" />
 | 
								:limit.sync="queryParams.pageSize"
 | 
				
			||||||
 | 
								@pagination="getList" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<!-- 对话框(添加 / 修改) -->
 | 
				
			||||||
		<base-dialog
 | 
							<base-dialog
 | 
				
			||||||
			:dialogTitle="addOrEditTitle"
 | 
								:dialogTitle="title"
 | 
				
			||||||
			:dialogVisible="addOrUpdateVisible"
 | 
								:dialogVisible="open"
 | 
				
			||||||
			@cancel="handleCancel"
 | 
								width="700px"
 | 
				
			||||||
			@confirm="handleConfirm"
 | 
								@close="cancel"
 | 
				
			||||||
			:before-close="handleCancel"
 | 
								@cancel="cancel"
 | 
				
			||||||
			width="50%">
 | 
								@confirm="submitForm">
 | 
				
			||||||
			<add-or-update
 | 
								<DialogForm v-if="open" ref="form" v-model="form" :rows="rows" />
 | 
				
			||||||
				ref="addOrUpdate"
 | 
					 | 
				
			||||||
				@refreshDataList="successSubmit"></add-or-update>
 | 
					 | 
				
			||||||
		</base-dialog>
 | 
							</base-dialog>
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script>
 | 
					<script>
 | 
				
			||||||
import AddOrUpdate from './add-or-updata';
 | 
					 | 
				
			||||||
import basicPage from '@/mixins/basic-page';
 | 
					 | 
				
			||||||
import { parseTime } from '@/filter/code-filter';
 | 
					 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
 | 
						createEquipmentPlc,
 | 
				
			||||||
 | 
						updateEquipmentPlc,
 | 
				
			||||||
	deleteEquipmentPlc,
 | 
						deleteEquipmentPlc,
 | 
				
			||||||
 | 
						getEquipmentPlc,
 | 
				
			||||||
	getEquipmentPlcPage,
 | 
						getEquipmentPlcPage,
 | 
				
			||||||
	exportEquipmentPlcExcel,
 | 
						exportEquipmentPlcExcel,
 | 
				
			||||||
	updateEquipmentPlc,
 | 
					 | 
				
			||||||
} from '@/api/base/equipmentPlc';
 | 
					} from '@/api/base/equipmentPlc';
 | 
				
			||||||
 | 
					import moment from 'moment';
 | 
				
			||||||
 | 
					import basicPageMixin from '@/mixins/lb/basicPageMixin';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const switchBtn = {
 | 
					const switchBtn = {
 | 
				
			||||||
	name: 'SwitchBtn',
 | 
						name: 'SwitchBtn',
 | 
				
			||||||
@@ -84,8 +90,38 @@ const switchBtn = {
 | 
				
			|||||||
		);
 | 
							);
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
const tableProps = [
 | 
					
 | 
				
			||||||
	{ prop: 'code', label: '编码', width: 220 },
 | 
					export default {
 | 
				
			||||||
 | 
						name: 'EquipmentPlc',
 | 
				
			||||||
 | 
						mixins: [basicPageMixin],
 | 
				
			||||||
 | 
						components: {},
 | 
				
			||||||
 | 
						data() {
 | 
				
			||||||
 | 
							return {
 | 
				
			||||||
 | 
								tableKey: Math.random(),
 | 
				
			||||||
 | 
								searchBarKeys: ['name', 'plcTableName'],
 | 
				
			||||||
 | 
								tableBtn: [
 | 
				
			||||||
 | 
									this.$auth.hasPermi('base:equipment-plc:update')
 | 
				
			||||||
 | 
										? {
 | 
				
			||||||
 | 
												type: 'edit',
 | 
				
			||||||
 | 
												btnName: '修改',
 | 
				
			||||||
 | 
										  }
 | 
				
			||||||
 | 
										: undefined,
 | 
				
			||||||
 | 
									this.$auth.hasPermi('base:equipment-plc:delete')
 | 
				
			||||||
 | 
										? {
 | 
				
			||||||
 | 
												type: 'delete',
 | 
				
			||||||
 | 
												btnName: '删除',
 | 
				
			||||||
 | 
										  }
 | 
				
			||||||
 | 
										: undefined,
 | 
				
			||||||
 | 
								].filter((v) => v),
 | 
				
			||||||
 | 
								tableProps: [
 | 
				
			||||||
 | 
									// {
 | 
				
			||||||
 | 
									// 	prop: 'createTime',
 | 
				
			||||||
 | 
									// 	label: '添加时间',
 | 
				
			||||||
 | 
									// 	fixed: true,
 | 
				
			||||||
 | 
									// 	width: 180,
 | 
				
			||||||
 | 
									// 	filter: (val) => moment(val).format('yyyy-MM-DD HH:mm:ss'),
 | 
				
			||||||
 | 
									// },
 | 
				
			||||||
 | 
									{ prop: 'code', label: '编码' },
 | 
				
			||||||
				{ prop: 'plcTableName', label: '关联表名' },
 | 
									{ prop: 'plcTableName', label: '关联表名' },
 | 
				
			||||||
				{ prop: 'name', label: '标识名称' },
 | 
									{ prop: 'name', label: '标识名称' },
 | 
				
			||||||
				{ prop: 'enName', label: '英文名称' },
 | 
									{ prop: 'enName', label: '英文名称' },
 | 
				
			||||||
@@ -95,34 +131,8 @@ const tableProps = [
 | 
				
			|||||||
					subcomponent: switchBtn,
 | 
										subcomponent: switchBtn,
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{ prop: 'description', label: '描述' },
 | 
									{ prop: 'description', label: '描述' },
 | 
				
			||||||
];
 | 
								],
 | 
				
			||||||
 | 
								searchBarFormConfig: [
 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
	mixins: [basicPage],
 | 
					 | 
				
			||||||
	data() {
 | 
					 | 
				
			||||||
		return {
 | 
					 | 
				
			||||||
			urlOptions: {
 | 
					 | 
				
			||||||
				getDataListURL: getEquipmentPlcPage,
 | 
					 | 
				
			||||||
				deleteURL: deleteEquipmentPlc,
 | 
					 | 
				
			||||||
				exportURL: exportEquipmentPlcExcel,
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
			tableProps,
 | 
					 | 
				
			||||||
			tableBtn: [
 | 
					 | 
				
			||||||
				this.$auth.hasPermi(`base:equipment-plc:update`)
 | 
					 | 
				
			||||||
					? {
 | 
					 | 
				
			||||||
							type: 'edit',
 | 
					 | 
				
			||||||
							btnName: '编辑',
 | 
					 | 
				
			||||||
					  }
 | 
					 | 
				
			||||||
					: undefined,
 | 
					 | 
				
			||||||
				this.$auth.hasPermi(`base:equipment-plc:delete`)
 | 
					 | 
				
			||||||
					? {
 | 
					 | 
				
			||||||
							type: 'delete',
 | 
					 | 
				
			||||||
							btnName: '删除',
 | 
					 | 
				
			||||||
					  }
 | 
					 | 
				
			||||||
					: undefined,
 | 
					 | 
				
			||||||
			].filter((v) => v),
 | 
					 | 
				
			||||||
			tableData: [],
 | 
					 | 
				
			||||||
			formConfig: [
 | 
					 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					type: 'input',
 | 
										type: 'input',
 | 
				
			||||||
					label: '表名',
 | 
										label: '表名',
 | 
				
			||||||
@@ -137,86 +147,231 @@ export default {
 | 
				
			|||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					type: 'button',
 | 
										type: 'button',
 | 
				
			||||||
					btnName: '搜索',
 | 
										btnName: '查询',
 | 
				
			||||||
					name: 'search',
 | 
										name: 'search',
 | 
				
			||||||
					color: 'primary',
 | 
										color: 'primary',
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				// {
 | 
					 | 
				
			||||||
				// 	type: 'separate',
 | 
					 | 
				
			||||||
				// },
 | 
					 | 
				
			||||||
				// {
 | 
					 | 
				
			||||||
				// 	type: 'button',
 | 
					 | 
				
			||||||
				// 	btnName: '重置',
 | 
					 | 
				
			||||||
				// 	name: 'reset',
 | 
					 | 
				
			||||||
				// },
 | 
					 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					type: 'separate',
 | 
										type: 'separate',
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					type: this.$auth.hasPermi('base:factory:create') ? 'button' : '',
 | 
										// type: this.$auth.hasPermi('base:equipment-plc:create')
 | 
				
			||||||
 | 
										// 	? 'button'
 | 
				
			||||||
 | 
										// 	: '',
 | 
				
			||||||
 | 
										type: 'button',
 | 
				
			||||||
					btnName: '新增',
 | 
										btnName: '新增',
 | 
				
			||||||
					name: 'add',
 | 
										name: 'add',
 | 
				
			||||||
					color: 'success',
 | 
					 | 
				
			||||||
					plain: true,
 | 
										plain: true,
 | 
				
			||||||
 | 
										color: 'success',
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				// {
 | 
									// {
 | 
				
			||||||
				// 	type: this.$auth.hasPermi('base:factory:create') ? 'separate' : '',
 | 
									// 	type: this.$auth.hasPermi('base:equipment-plc:export') ? 'button' : '',
 | 
				
			||||||
				// },
 | 
					 | 
				
			||||||
				// {
 | 
					 | 
				
			||||||
				// 	type: this.$auth.hasPermi('base:factory:export') ? 'button' : '',
 | 
					 | 
				
			||||||
				// 	btnName: '导出',
 | 
									// 	btnName: '导出',
 | 
				
			||||||
				// 	name: 'export',
 | 
									// 	name: 'export',
 | 
				
			||||||
				// 	color: 'warning',
 | 
									// 	color: 'warning',
 | 
				
			||||||
				// },
 | 
									// },
 | 
				
			||||||
			],
 | 
								],
 | 
				
			||||||
 | 
								rows: [
 | 
				
			||||||
 | 
									[
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											input: true,
 | 
				
			||||||
 | 
											label: '关联表名',
 | 
				
			||||||
 | 
											prop: 'plcTableName',
 | 
				
			||||||
 | 
											rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
 | 
				
			||||||
 | 
											// bind: {
 | 
				
			||||||
 | 
											// 	disabled: true, // some condition, like detail mode...
 | 
				
			||||||
 | 
											// }
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											input: true,
 | 
				
			||||||
 | 
											label: '编码',
 | 
				
			||||||
 | 
											prop: 'code',
 | 
				
			||||||
 | 
											url: '/base/equipment-group/getCode',
 | 
				
			||||||
 | 
											rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
									],
 | 
				
			||||||
 | 
									[
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											input: true,
 | 
				
			||||||
 | 
											label: '标识',
 | 
				
			||||||
 | 
											prop: 'name',
 | 
				
			||||||
 | 
											rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
 | 
				
			||||||
 | 
											// bind: {
 | 
				
			||||||
 | 
											// 	disabled: true, // some condition, like detail mode...
 | 
				
			||||||
 | 
											// }
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											input: true,
 | 
				
			||||||
 | 
											label: '英文名',
 | 
				
			||||||
 | 
											prop: 'enName',
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
									],
 | 
				
			||||||
 | 
									[
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											switch: true,
 | 
				
			||||||
 | 
											label: '是否采集', // 是否采集 0 代表不采集, 1 代表采集
 | 
				
			||||||
 | 
											prop: 'collection',
 | 
				
			||||||
 | 
											value: 1,
 | 
				
			||||||
 | 
											bind: {
 | 
				
			||||||
 | 
												'active-value': 1,
 | 
				
			||||||
 | 
												'inactive-value': 0,
 | 
				
			||||||
 | 
											},
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
									],
 | 
				
			||||||
 | 
									[
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											textarea: true,
 | 
				
			||||||
 | 
											label: '描述',
 | 
				
			||||||
 | 
											prop: 'description',
 | 
				
			||||||
 | 
											bind: {
 | 
				
			||||||
 | 
												placeholder: '请输入备注',
 | 
				
			||||||
 | 
											},
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
									],
 | 
				
			||||||
 | 
								],
 | 
				
			||||||
 | 
								// 是否显示弹出
 | 
				
			||||||
 | 
								open: false,
 | 
				
			||||||
 | 
								// 查询参数
 | 
				
			||||||
 | 
								queryParams: {
 | 
				
			||||||
 | 
									pageNo: 1,
 | 
				
			||||||
 | 
									pageSize: 10,
 | 
				
			||||||
 | 
									plcTableName: null,
 | 
				
			||||||
 | 
									name: null,
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								// 表单参数
 | 
				
			||||||
 | 
								form: {},
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	components: {
 | 
						created() {
 | 
				
			||||||
		AddOrUpdate,
 | 
							this.getList();
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	created() {},
 | 
					 | 
				
			||||||
	methods: {
 | 
						methods: {
 | 
				
			||||||
		/** 覆盖 handleEmitFun 的默认实现 */
 | 
							/** 覆盖 handleEmitFun 的默认实现 */
 | 
				
			||||||
		handleEmitFun({ action, payload }) {
 | 
							handleEmitFun({ action, payload }) {
 | 
				
			||||||
      console.log(payload)
 | 
					 | 
				
			||||||
			switch (action) {
 | 
								switch (action) {
 | 
				
			||||||
				case 'update-collect':
 | 
									case 'update-collect':
 | 
				
			||||||
					updateEquipmentPlc(payload).then((response) => {
 | 
										this.reset();
 | 
				
			||||||
 | 
										const tempForm = {};
 | 
				
			||||||
 | 
										Object.keys(this.form).forEach((key) => {
 | 
				
			||||||
 | 
											tempForm[key] = payload[key];
 | 
				
			||||||
 | 
										});
 | 
				
			||||||
 | 
										updateEquipmentPlc(tempForm).then((response) => {
 | 
				
			||||||
						this.$modal.msgSuccess('修改成功');
 | 
											this.$modal.msgSuccess('修改成功');
 | 
				
			||||||
						this.getDataList();
 | 
											this.open = false;
 | 
				
			||||||
 | 
											this.getList();
 | 
				
			||||||
					});
 | 
										});
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		buttonClick(val) {
 | 
							/** 查询列表 */
 | 
				
			||||||
			switch (val.btnName) {
 | 
							getList() {
 | 
				
			||||||
				case 'search':
 | 
								this.loading = true;
 | 
				
			||||||
					this.listQuery.pageNo = 1;
 | 
								// 执行查询
 | 
				
			||||||
					this.listQuery.pageSize = 10;
 | 
								getEquipmentPlcPage(this.queryParams).then((response) => {
 | 
				
			||||||
					this.listQuery.name = val.name;
 | 
									this.list = response.data.list;
 | 
				
			||||||
					this.listQuery.plcTableName = val.plcTableName;
 | 
									this.total = response.data.total;
 | 
				
			||||||
					this.getDataList();
 | 
									this.loading = false;
 | 
				
			||||||
					break;
 | 
									// this.tableKey = Math.random(); // method 1
 | 
				
			||||||
				case 'reset':
 | 
								});
 | 
				
			||||||
					this.$refs.searchBarForm.resetForm();
 | 
							},
 | 
				
			||||||
					this.listQuery = {
 | 
							/** 取消按钮 */
 | 
				
			||||||
						pageSize: 10,
 | 
							cancel() {
 | 
				
			||||||
						pageNo: 1,
 | 
								this.open = false;
 | 
				
			||||||
						total: 1,
 | 
								this.reset();
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							/** 表单重置 */
 | 
				
			||||||
 | 
							reset() {
 | 
				
			||||||
 | 
								this.form = {
 | 
				
			||||||
 | 
									id: undefined,
 | 
				
			||||||
 | 
									plcTableName: undefined,
 | 
				
			||||||
 | 
									code: undefined,
 | 
				
			||||||
 | 
									name: undefined,
 | 
				
			||||||
 | 
									enName: undefined,
 | 
				
			||||||
 | 
									description: undefined,
 | 
				
			||||||
 | 
									collection: undefined,
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
					this.getDataList();
 | 
								this.resetForm('form');
 | 
				
			||||||
					break;
 | 
							},
 | 
				
			||||||
				case 'add':
 | 
							/** 搜索按钮操作 */
 | 
				
			||||||
					this.addOrEditTitle = '新增';
 | 
							handleQuery() {
 | 
				
			||||||
					this.addOrUpdateVisible = true;
 | 
								this.queryParams.pageNo = 1;
 | 
				
			||||||
					this.addOrUpdateHandle();
 | 
								this.getList();
 | 
				
			||||||
					break;
 | 
							},
 | 
				
			||||||
				case 'export':
 | 
							/** 重置按钮操作 */
 | 
				
			||||||
					this.handleExport();
 | 
							resetQuery() {
 | 
				
			||||||
					break;
 | 
								this.resetForm('queryForm');
 | 
				
			||||||
				default:
 | 
								this.handleQuery();
 | 
				
			||||||
					console.log(val);
 | 
							},
 | 
				
			||||||
 | 
							/** 新增按钮操作 */
 | 
				
			||||||
 | 
							handleAdd() {
 | 
				
			||||||
 | 
								this.reset();
 | 
				
			||||||
 | 
								this.open = true;
 | 
				
			||||||
 | 
								this.title = '添加实时数据采集配置';
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							/** 修改按钮操作 */
 | 
				
			||||||
 | 
							handleUpdate(row) {
 | 
				
			||||||
 | 
								this.reset();
 | 
				
			||||||
 | 
								const id = row.id;
 | 
				
			||||||
 | 
								getEquipmentPlc(id).then((response) => {
 | 
				
			||||||
 | 
									this.form = response.data;
 | 
				
			||||||
 | 
									this.open = true;
 | 
				
			||||||
 | 
									this.title = '修改实时数据采集配置';
 | 
				
			||||||
 | 
								});
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							/** 提交按钮 */
 | 
				
			||||||
 | 
							submitForm() {
 | 
				
			||||||
 | 
								this.$refs['form'].validate((valid) => {
 | 
				
			||||||
 | 
									if (!valid) {
 | 
				
			||||||
 | 
										return;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
									// 修改的提交
 | 
				
			||||||
 | 
									if (this.form.id != null) {
 | 
				
			||||||
 | 
										updateEquipmentPlc(this.form).then((response) => {
 | 
				
			||||||
 | 
											this.$modal.msgSuccess('修改成功');
 | 
				
			||||||
 | 
											this.open = false;
 | 
				
			||||||
 | 
											this.getList();
 | 
				
			||||||
 | 
										});
 | 
				
			||||||
 | 
										return;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									// 添加的提交
 | 
				
			||||||
 | 
									createEquipmentPlc(this.form).then((response) => {
 | 
				
			||||||
 | 
										this.$modal.msgSuccess('新增成功');
 | 
				
			||||||
 | 
										this.open = false;
 | 
				
			||||||
 | 
										this.getList();
 | 
				
			||||||
 | 
									});
 | 
				
			||||||
 | 
								});
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							/** 删除按钮操作 */
 | 
				
			||||||
 | 
							handleDelete(row) {
 | 
				
			||||||
 | 
								const id = row.id;
 | 
				
			||||||
 | 
								this.$modal
 | 
				
			||||||
 | 
									.confirm('是否确认删除实时数据采集配置编号为"' + id + '"的数据项?')
 | 
				
			||||||
 | 
									.then(function () {
 | 
				
			||||||
 | 
										return deleteEquipmentPlc(id);
 | 
				
			||||||
 | 
									})
 | 
				
			||||||
 | 
									.then(() => {
 | 
				
			||||||
 | 
										this.getList();
 | 
				
			||||||
 | 
										this.$modal.msgSuccess('删除成功');
 | 
				
			||||||
 | 
									})
 | 
				
			||||||
 | 
									.catch(() => {});
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							/** 导出按钮操作 */
 | 
				
			||||||
 | 
							handleExport() {
 | 
				
			||||||
 | 
								// 处理查询参数
 | 
				
			||||||
 | 
								let params = { ...this.queryParams };
 | 
				
			||||||
 | 
								params.pageNo = undefined;
 | 
				
			||||||
 | 
								params.pageSize = undefined;
 | 
				
			||||||
 | 
								this.$modal
 | 
				
			||||||
 | 
									.confirm('是否确认导出所有实时数据采集配置数据项?')
 | 
				
			||||||
 | 
									.then(() => {
 | 
				
			||||||
 | 
										this.exportLoading = true;
 | 
				
			||||||
 | 
										return exportEquipmentPlcExcel(params);
 | 
				
			||||||
 | 
									})
 | 
				
			||||||
 | 
									.then((response) => {
 | 
				
			||||||
 | 
										this.$download.excel(response, '实时数据采集配置.xls');
 | 
				
			||||||
 | 
										this.exportLoading = false;
 | 
				
			||||||
 | 
									})
 | 
				
			||||||
 | 
									.catch(() => {});
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
 * @Author: zwq
 | 
					 * @Author: zwq
 | 
				
			||||||
 * @Date: 2021-11-18 14:16:25
 | 
					 * @Date: 2021-11-18 14:16:25
 | 
				
			||||||
 * @LastEditors: zwq
 | 
					 * @LastEditors: zwq
 | 
				
			||||||
 * @LastEditTime: 2025-02-25 16:11:14
 | 
					 * @LastEditTime: 2024-04-30 10:01:41
 | 
				
			||||||
 * @Description:
 | 
					 * @Description:
 | 
				
			||||||
-->
 | 
					-->
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -57,7 +57,6 @@ const tableProps = [
 | 
				
			|||||||
    prop: 'createTime',
 | 
					    prop: 'createTime',
 | 
				
			||||||
    label: '添加时间',
 | 
					    label: '添加时间',
 | 
				
			||||||
    filter: parseTime,
 | 
					    filter: parseTime,
 | 
				
			||||||
    minWidth: 150
 | 
					 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'name',
 | 
							prop: 'name',
 | 
				
			||||||
@@ -68,6 +67,10 @@ const tableProps = [
 | 
				
			|||||||
		label: '原料编码',
 | 
							label: '原料编码',
 | 
				
			||||||
		width: 180,
 | 
							width: 180,
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							prop: 'level',
 | 
				
			||||||
 | 
							label: '原料等级',
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'unit',
 | 
							prop: 'unit',
 | 
				
			||||||
		label: '单位',
 | 
							label: '单位',
 | 
				
			||||||
@@ -149,7 +152,7 @@ export default {
 | 
				
			|||||||
			switch (val.btnName) {
 | 
								switch (val.btnName) {
 | 
				
			||||||
				case 'search':
 | 
									case 'search':
 | 
				
			||||||
					this.listQuery.pageNo = 1;
 | 
										this.listQuery.pageNo = 1;
 | 
				
			||||||
					this.listQuery.pageSize = 10;
 | 
										this.listQuery.pageSize = 20;
 | 
				
			||||||
					this.listQuery.name = val.name;
 | 
										this.listQuery.name = val.name;
 | 
				
			||||||
					this.listQuery.code = val.code;
 | 
										this.listQuery.code = val.code;
 | 
				
			||||||
					this.getDataList();
 | 
										this.getDataList();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
 * @Author: zwq
 | 
					 * @Author: zwq
 | 
				
			||||||
 * @Date: 2023-08-01 13:52:10
 | 
					 * @Date: 2023-08-01 13:52:10
 | 
				
			||||||
 * @LastEditors: zwq
 | 
					 * @LastEditors: zwq
 | 
				
			||||||
 * @LastEditTime: 2024-04-11 09:05:16
 | 
					 * @LastEditTime: 2025-03-05 15:23:30
 | 
				
			||||||
 * @Description:
 | 
					 * @Description:
 | 
				
			||||||
-->
 | 
					-->
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
@@ -63,7 +63,7 @@
 | 
				
			|||||||
						style="width: 75%"
 | 
											style="width: 75%"
 | 
				
			||||||
						v-model="dataForm.price"
 | 
											v-model="dataForm.price"
 | 
				
			||||||
						clearable
 | 
											clearable
 | 
				
			||||||
						placeholder="请输入允许留存时间" />
 | 
											placeholder="请输入单价" />
 | 
				
			||||||
					{{ unit }}
 | 
										{{ unit }}
 | 
				
			||||||
				</el-form-item>
 | 
									</el-form-item>
 | 
				
			||||||
			</el-col>
 | 
								</el-col>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -63,11 +63,11 @@ const tableProps = [
 | 
				
			|||||||
		label: '原料编码',
 | 
							label: '原料编码',
 | 
				
			||||||
		width: 180,
 | 
							width: 180,
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						// {
 | 
				
			||||||
		prop: 'price',
 | 
						// 	prop: 'price',
 | 
				
			||||||
		label: '单价(元/吨)',
 | 
						// 	label: '单价(元/千克)',
 | 
				
			||||||
		align: 'right',
 | 
						// 	align: 'right',
 | 
				
			||||||
	},
 | 
						// },
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'createTime',
 | 
							prop: 'createTime',
 | 
				
			||||||
		label: '生效时间',
 | 
							label: '生效时间',
 | 
				
			||||||
@@ -152,7 +152,7 @@ export default {
 | 
				
			|||||||
			switch (val.btnName) {
 | 
								switch (val.btnName) {
 | 
				
			||||||
				case 'search':
 | 
									case 'search':
 | 
				
			||||||
					this.listQuery.pageNo = 1;
 | 
										this.listQuery.pageNo = 1;
 | 
				
			||||||
					this.listQuery.pageSize = 10;
 | 
										this.listQuery.pageSize = 20;
 | 
				
			||||||
					this.listQuery.materialId = val.name;
 | 
										this.listQuery.materialId = val.name;
 | 
				
			||||||
					this.getDataList();
 | 
										this.getDataList();
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,197 +0,0 @@
 | 
				
			|||||||
<template>
 | 
					 | 
				
			||||||
	<div
 | 
					 | 
				
			||||||
		ref="lineChart"
 | 
					 | 
				
			||||||
		:id="id"
 | 
					 | 
				
			||||||
		:class="className"
 | 
					 | 
				
			||||||
		:style="{ height: height, width: width, marginLeft: '10px' }" />
 | 
					 | 
				
			||||||
</template>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<script>
 | 
					 | 
				
			||||||
import * as echarts from 'echarts';
 | 
					 | 
				
			||||||
require('echarts/theme/macarons'); // echarts theme
 | 
					 | 
				
			||||||
import resize from '@/utils/chartMixins/resize';
 | 
					 | 
				
			||||||
import { parseTime } from '../../mixins/code-filter';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const animationDuration = 1000;
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
	name: 'lineChart',
 | 
					 | 
				
			||||||
	mixins: [resize],
 | 
					 | 
				
			||||||
	props: {
 | 
					 | 
				
			||||||
		id: {
 | 
					 | 
				
			||||||
			type: String,
 | 
					 | 
				
			||||||
			default: 'chart',
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		className: {
 | 
					 | 
				
			||||||
			type: String,
 | 
					 | 
				
			||||||
			default: 'chart',
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		title: {
 | 
					 | 
				
			||||||
			type: String,
 | 
					 | 
				
			||||||
			default: '',
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		width: {
 | 
					 | 
				
			||||||
			type: String,
 | 
					 | 
				
			||||||
			default: '100%',
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		height: {
 | 
					 | 
				
			||||||
			type: String,
 | 
					 | 
				
			||||||
			default: '300px',
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		barData: {
 | 
					 | 
				
			||||||
			type: Object,
 | 
					 | 
				
			||||||
			default: () => {},
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	data() {
 | 
					 | 
				
			||||||
		return {
 | 
					 | 
				
			||||||
			chart: null,
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	mounted() {
 | 
					 | 
				
			||||||
		if (!this.chart) {
 | 
					 | 
				
			||||||
			this.chart = echarts.init(this.$refs.lineChart);
 | 
					 | 
				
			||||||
			this.$nextTick(() => {
 | 
					 | 
				
			||||||
				this.initChart();
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	beforeDestroy() {
 | 
					 | 
				
			||||||
		if (!this.chart) {
 | 
					 | 
				
			||||||
			return;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		this.chart.dispose();
 | 
					 | 
				
			||||||
		this.chart = null;
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	watch: {
 | 
					 | 
				
			||||||
		barData: {
 | 
					 | 
				
			||||||
			handler() {
 | 
					 | 
				
			||||||
				if (this.chart) {
 | 
					 | 
				
			||||||
					this.$nextTick(() => {
 | 
					 | 
				
			||||||
						this.initChart();
 | 
					 | 
				
			||||||
					});
 | 
					 | 
				
			||||||
				} else {
 | 
					 | 
				
			||||||
					this.$nextTick(() => {
 | 
					 | 
				
			||||||
						this.chart = echarts.init(this.$refs.lineChart);
 | 
					 | 
				
			||||||
						this.initChart();
 | 
					 | 
				
			||||||
					});
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
			deep: true,
 | 
					 | 
				
			||||||
			immediate: true,
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	methods: {
 | 
					 | 
				
			||||||
		initChart() {
 | 
					 | 
				
			||||||
			const _this = this;
 | 
					 | 
				
			||||||
			this.chart.setOption({
 | 
					 | 
				
			||||||
				title: {
 | 
					 | 
				
			||||||
					text: this.title
 | 
					 | 
				
			||||||
						? '{space|}{tip|}{space|}{value|' + this.title + '}'
 | 
					 | 
				
			||||||
						: '',
 | 
					 | 
				
			||||||
					textStyle: {
 | 
					 | 
				
			||||||
						rich: {
 | 
					 | 
				
			||||||
							tip: {
 | 
					 | 
				
			||||||
								width: 6,
 | 
					 | 
				
			||||||
								height: 6,
 | 
					 | 
				
			||||||
								borderRadius: 50,
 | 
					 | 
				
			||||||
								backgroundColor: '#288AFF',
 | 
					 | 
				
			||||||
							},
 | 
					 | 
				
			||||||
							space: {
 | 
					 | 
				
			||||||
								width: 8,
 | 
					 | 
				
			||||||
							},
 | 
					 | 
				
			||||||
							value: {
 | 
					 | 
				
			||||||
								fontSize: 14,
 | 
					 | 
				
			||||||
								color: 'black',
 | 
					 | 
				
			||||||
							},
 | 
					 | 
				
			||||||
						},
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				color: ['#288AFF', '#8EF0AB', '#FFDC94'],
 | 
					 | 
				
			||||||
				tooltip: {
 | 
					 | 
				
			||||||
					trigger: 'axis',
 | 
					 | 
				
			||||||
					axisPointer: {
 | 
					 | 
				
			||||||
						type: 'cross',
 | 
					 | 
				
			||||||
						crossStyle: {
 | 
					 | 
				
			||||||
							color: '#999',
 | 
					 | 
				
			||||||
						},
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				legend: {
 | 
					 | 
				
			||||||
					data: ['磨边节拍', '钢化节拍', '下片节拍'],
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				grid: {
 | 
					 | 
				
			||||||
					containLabel: true,
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				xAxis: {
 | 
					 | 
				
			||||||
					type: 'category',
 | 
					 | 
				
			||||||
					data: this.barData.edgeCt.map((item) => {
 | 
					 | 
				
			||||||
						return parseTime(item.recordTime, '{m}-{d} {h}:{i}');
 | 
					 | 
				
			||||||
					}),
 | 
					 | 
				
			||||||
					axisPointer: {
 | 
					 | 
				
			||||||
						type: 'shadow',
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				yAxis: [
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						type: 'value',
 | 
					 | 
				
			||||||
						name: '节拍 pcs/min',
 | 
					 | 
				
			||||||
						min: 0,
 | 
					 | 
				
			||||||
						axisLabel: {
 | 
					 | 
				
			||||||
							formatter: '{value}',
 | 
					 | 
				
			||||||
						},
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
				],
 | 
					 | 
				
			||||||
				dataZoom: [
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						type: 'inside',
 | 
					 | 
				
			||||||
						start: 0,
 | 
					 | 
				
			||||||
						end: 100,
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						start: 0,
 | 
					 | 
				
			||||||
						end: 100,
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
				],
 | 
					 | 
				
			||||||
				series: [
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						name: '磨边节拍',
 | 
					 | 
				
			||||||
						type: 'line',
 | 
					 | 
				
			||||||
						tooltip: {
 | 
					 | 
				
			||||||
							valueFormatter: function (value) {
 | 
					 | 
				
			||||||
								return value + 'pcs/min';
 | 
					 | 
				
			||||||
							},
 | 
					 | 
				
			||||||
						},
 | 
					 | 
				
			||||||
						data: this.barData.edgeCt.map((item) => {
 | 
					 | 
				
			||||||
							return item.ct;
 | 
					 | 
				
			||||||
						}),
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						name: '钢化节拍',
 | 
					 | 
				
			||||||
						type: 'line',
 | 
					 | 
				
			||||||
						tooltip: {
 | 
					 | 
				
			||||||
							valueFormatter: function (value) {
 | 
					 | 
				
			||||||
								return value + 'pcs/min';
 | 
					 | 
				
			||||||
							},
 | 
					 | 
				
			||||||
						},
 | 
					 | 
				
			||||||
						data: this.barData.temperCt.map((item) => {
 | 
					 | 
				
			||||||
							return item.ct;
 | 
					 | 
				
			||||||
						}),
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						name: '下片节拍',
 | 
					 | 
				
			||||||
						type: 'line',
 | 
					 | 
				
			||||||
						tooltip: {
 | 
					 | 
				
			||||||
							valueFormatter: function (value) {
 | 
					 | 
				
			||||||
								return value + 'pcs/min';
 | 
					 | 
				
			||||||
							},
 | 
					 | 
				
			||||||
						},
 | 
					 | 
				
			||||||
						data: this.barData.downCt.map((item) => {
 | 
					 | 
				
			||||||
							return item.ct;
 | 
					 | 
				
			||||||
						}),
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
				],
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
</script>
 | 
					 | 
				
			||||||
@@ -1,273 +0,0 @@
 | 
				
			|||||||
<!--
 | 
					 | 
				
			||||||
 * @Author: zwq
 | 
					 | 
				
			||||||
 * @Date: 2023-08-24 14:47:58
 | 
					 | 
				
			||||||
 * @LastEditors: zwq
 | 
					 | 
				
			||||||
 * @LastEditTime: 2025-01-09 10:04:17
 | 
					 | 
				
			||||||
 * @Description:
 | 
					 | 
				
			||||||
-->
 | 
					 | 
				
			||||||
<template>
 | 
					 | 
				
			||||||
	<div>
 | 
					 | 
				
			||||||
		<base-table
 | 
					 | 
				
			||||||
			:page="1"
 | 
					 | 
				
			||||||
			:limit="999"
 | 
					 | 
				
			||||||
			v-loading="dataListLoading"
 | 
					 | 
				
			||||||
			:table-props="tableProps"
 | 
					 | 
				
			||||||
			max-height="400"
 | 
					 | 
				
			||||||
			:table-data="tableData">
 | 
					 | 
				
			||||||
			<method-btn
 | 
					 | 
				
			||||||
				v-if="tableData.length"
 | 
					 | 
				
			||||||
				slot="handleBtn"
 | 
					 | 
				
			||||||
				:width="80"
 | 
					 | 
				
			||||||
				label="操作"
 | 
					 | 
				
			||||||
				:method-list="tableBtn"
 | 
					 | 
				
			||||||
				@clickBtn="handleClick" />
 | 
					 | 
				
			||||||
		</base-table>
 | 
					 | 
				
			||||||
		<div v-if="eqChartData.length > 0" style="margin-top: 10px">
 | 
					 | 
				
			||||||
			<search-bar
 | 
					 | 
				
			||||||
				:formConfigs="formConfig"
 | 
					 | 
				
			||||||
				ref="searchBarForm1"
 | 
					 | 
				
			||||||
				@headBtnClick="buttonClick" />
 | 
					 | 
				
			||||||
			<div
 | 
					 | 
				
			||||||
				ref="lineChart"
 | 
					 | 
				
			||||||
				id="chart"
 | 
					 | 
				
			||||||
				:style="{ height: '400px', width: '100%', marginLeft: '10px' }" />
 | 
					 | 
				
			||||||
		</div>
 | 
					 | 
				
			||||||
	</div>
 | 
					 | 
				
			||||||
</template>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<script>
 | 
					 | 
				
			||||||
import { getNewCTDet, getNewCTCharts } from '@/api/core/analysis/index';
 | 
					 | 
				
			||||||
import * as echarts from 'echarts';
 | 
					 | 
				
			||||||
require('echarts/theme/macarons'); // echarts theme
 | 
					 | 
				
			||||||
import resize from '@/utils/chartMixins/resize';
 | 
					 | 
				
			||||||
import { parseTime } from '../../mixins/code-filter';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const tableProps = [
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		prop: 'equipmentName',
 | 
					 | 
				
			||||||
		label: '设备',
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		prop: 'size',
 | 
					 | 
				
			||||||
		label: '规格',
 | 
					 | 
				
			||||||
		showOverflowtooltip: true,
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		prop: 'process',
 | 
					 | 
				
			||||||
		label: '产品工艺',
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		prop: 'standardCt',
 | 
					 | 
				
			||||||
		label: '标准节拍pcs/min',
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		prop: 'ct',
 | 
					 | 
				
			||||||
		label: '当前节拍pcs/min',
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
];
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
	mixins: [resize],
 | 
					 | 
				
			||||||
	data() {
 | 
					 | 
				
			||||||
		return {
 | 
					 | 
				
			||||||
			tableProps,
 | 
					 | 
				
			||||||
			tableData: [],
 | 
					 | 
				
			||||||
			tableBtn: [
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					type: 'eqChart',
 | 
					 | 
				
			||||||
					btnName: '趋势图',
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
			].filter((v) => v),
 | 
					 | 
				
			||||||
			dataListLoading: false,
 | 
					 | 
				
			||||||
			time: {},
 | 
					 | 
				
			||||||
			eqChartData: [],
 | 
					 | 
				
			||||||
			eqName: null,
 | 
					 | 
				
			||||||
			equipmentId: null,
 | 
					 | 
				
			||||||
			chart: null,
 | 
					 | 
				
			||||||
			formConfig: [
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					type: 'datePicker',
 | 
					 | 
				
			||||||
					label: '时间范围',
 | 
					 | 
				
			||||||
					dateType: 'datetimerange',
 | 
					 | 
				
			||||||
					format: 'yyyy-MM-dd HH:mm:ss',
 | 
					 | 
				
			||||||
					valueFormat: 'timestamp',
 | 
					 | 
				
			||||||
					rangeSeparator: '-',
 | 
					 | 
				
			||||||
					startPlaceholder: '开始时间',
 | 
					 | 
				
			||||||
					endPlaceholder: '结束时间',
 | 
					 | 
				
			||||||
					defaultTime: ['00:00:00', '23:59:59'],
 | 
					 | 
				
			||||||
					param: 'timeVal',
 | 
					 | 
				
			||||||
					width: 350,
 | 
					 | 
				
			||||||
					clearable: false,
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					type: 'button',
 | 
					 | 
				
			||||||
					btnName: '查询',
 | 
					 | 
				
			||||||
					name: 'search',
 | 
					 | 
				
			||||||
					color: 'primary',
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
			],
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	components: {},
 | 
					 | 
				
			||||||
	created() {},
 | 
					 | 
				
			||||||
	mounted() {},
 | 
					 | 
				
			||||||
	beforeDestroy() {
 | 
					 | 
				
			||||||
		if (!this.chart) {
 | 
					 | 
				
			||||||
			return;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		this.chart.dispose();
 | 
					 | 
				
			||||||
		this.chart = null;
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	methods: {
 | 
					 | 
				
			||||||
		// 获取数据列表
 | 
					 | 
				
			||||||
		init(lineId, startTime, endTime) {
 | 
					 | 
				
			||||||
			this.eqChartData = [];
 | 
					 | 
				
			||||||
			this.time.startTime = startTime;
 | 
					 | 
				
			||||||
			this.time.endTime = endTime;
 | 
					 | 
				
			||||||
			this.dataListLoading = true;
 | 
					 | 
				
			||||||
			getNewCTDet(lineId).then((response) => {
 | 
					 | 
				
			||||||
				this.tableData = response.data;
 | 
					 | 
				
			||||||
				this.dataListLoading = false;
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		handleClick(val) {
 | 
					 | 
				
			||||||
			const data = {
 | 
					 | 
				
			||||||
				...this.time,
 | 
					 | 
				
			||||||
				equipmentId: val.data.equipmentId,
 | 
					 | 
				
			||||||
			};
 | 
					 | 
				
			||||||
			this.eqName = val.data.equipmentName;
 | 
					 | 
				
			||||||
			this.equipmentId = val.data.equipmentId;
 | 
					 | 
				
			||||||
			getNewCTCharts(data).then((response) => {
 | 
					 | 
				
			||||||
				this.eqChartData = response.data;
 | 
					 | 
				
			||||||
				this.$nextTick(() => {
 | 
					 | 
				
			||||||
					this.$refs.searchBarForm1.formInline.timeVal = [
 | 
					 | 
				
			||||||
						this.time.startTime,
 | 
					 | 
				
			||||||
						this.time.endTime,
 | 
					 | 
				
			||||||
					];
 | 
					 | 
				
			||||||
					this.initChart();
 | 
					 | 
				
			||||||
				});
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		buttonClick(val) {
 | 
					 | 
				
			||||||
			switch (val.btnName) {
 | 
					 | 
				
			||||||
				case 'search':
 | 
					 | 
				
			||||||
					this.time.startTime = val.timeVal ? val.timeVal[0] : undefined;
 | 
					 | 
				
			||||||
					this.time.endTime = val.timeVal ? val.timeVal[1] : undefined;
 | 
					 | 
				
			||||||
					const data = {
 | 
					 | 
				
			||||||
						...this.time,
 | 
					 | 
				
			||||||
						equipmentId: this.equipmentId,
 | 
					 | 
				
			||||||
					};
 | 
					 | 
				
			||||||
					getNewCTCharts(data).then((response) => {
 | 
					 | 
				
			||||||
						this.eqChartData = response.data;
 | 
					 | 
				
			||||||
						this.$nextTick(() => {
 | 
					 | 
				
			||||||
							this.initChart();
 | 
					 | 
				
			||||||
						});
 | 
					 | 
				
			||||||
					});
 | 
					 | 
				
			||||||
					break;
 | 
					 | 
				
			||||||
				default:
 | 
					 | 
				
			||||||
					console.log(val);
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		initChart() {
 | 
					 | 
				
			||||||
			this.chart = echarts.init(this.$refs.lineChart);
 | 
					 | 
				
			||||||
			const _this = this;
 | 
					 | 
				
			||||||
			this.chart.setOption({
 | 
					 | 
				
			||||||
				title: {
 | 
					 | 
				
			||||||
					text: this.eqName
 | 
					 | 
				
			||||||
						? '{space|}{tip|}{space|}{value|' + this.eqName + ' 节拍趋势图' + '}'
 | 
					 | 
				
			||||||
						: '',
 | 
					 | 
				
			||||||
					textStyle: {
 | 
					 | 
				
			||||||
						rich: {
 | 
					 | 
				
			||||||
							tip: {
 | 
					 | 
				
			||||||
								width: 6,
 | 
					 | 
				
			||||||
								height: 6,
 | 
					 | 
				
			||||||
								borderRadius: 50,
 | 
					 | 
				
			||||||
								backgroundColor: '#288AFF',
 | 
					 | 
				
			||||||
							},
 | 
					 | 
				
			||||||
							space: {
 | 
					 | 
				
			||||||
								width: 8,
 | 
					 | 
				
			||||||
							},
 | 
					 | 
				
			||||||
							value: {
 | 
					 | 
				
			||||||
								fontSize: 14,
 | 
					 | 
				
			||||||
								color: 'black',
 | 
					 | 
				
			||||||
							},
 | 
					 | 
				
			||||||
						},
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				color: ['#288AFF', '#8EF0AB', '#FFDC94'],
 | 
					 | 
				
			||||||
				tooltip: {
 | 
					 | 
				
			||||||
					trigger: 'axis',
 | 
					 | 
				
			||||||
					axisPointer: {
 | 
					 | 
				
			||||||
						type: 'cross',
 | 
					 | 
				
			||||||
						crossStyle: {
 | 
					 | 
				
			||||||
							color: '#999',
 | 
					 | 
				
			||||||
						},
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				legend: {
 | 
					 | 
				
			||||||
					data: ['当前节拍', '标准节拍'],
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				grid: {
 | 
					 | 
				
			||||||
					containLabel: true,
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				xAxis: {
 | 
					 | 
				
			||||||
					type: 'category',
 | 
					 | 
				
			||||||
					data: this.eqChartData[0].ct.map((item) => {
 | 
					 | 
				
			||||||
						return parseTime(item.recordTime, '{m}-{d} {h}:{i}');
 | 
					 | 
				
			||||||
					}),
 | 
					 | 
				
			||||||
					axisPointer: {
 | 
					 | 
				
			||||||
						type: 'shadow',
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				yAxis: [
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						type: 'value',
 | 
					 | 
				
			||||||
						name: '节拍',
 | 
					 | 
				
			||||||
						min: 0,
 | 
					 | 
				
			||||||
						interval: 20,
 | 
					 | 
				
			||||||
						axisLabel: {
 | 
					 | 
				
			||||||
							formatter: '{value} pcs/min',
 | 
					 | 
				
			||||||
						},
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
				],
 | 
					 | 
				
			||||||
				dataZoom: [
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						type: 'inside',
 | 
					 | 
				
			||||||
						start: 0,
 | 
					 | 
				
			||||||
						end: 100,
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						start: 0,
 | 
					 | 
				
			||||||
						end: 100,
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
				],
 | 
					 | 
				
			||||||
				series: [
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						name: '标准节拍',
 | 
					 | 
				
			||||||
						type: 'line',
 | 
					 | 
				
			||||||
						tooltip: {
 | 
					 | 
				
			||||||
							valueFormatter: function (value) {
 | 
					 | 
				
			||||||
								return value + 'pcs/min';
 | 
					 | 
				
			||||||
							},
 | 
					 | 
				
			||||||
						},
 | 
					 | 
				
			||||||
						data: this.eqChartData[0].ct.map((item) => {
 | 
					 | 
				
			||||||
							return item.standardCt;
 | 
					 | 
				
			||||||
						}),
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						name: '当前节拍',
 | 
					 | 
				
			||||||
						type: 'line',
 | 
					 | 
				
			||||||
						tooltip: {
 | 
					 | 
				
			||||||
							valueFormatter: function (value) {
 | 
					 | 
				
			||||||
								return value + 'pcs/min';
 | 
					 | 
				
			||||||
							},
 | 
					 | 
				
			||||||
						},
 | 
					 | 
				
			||||||
						data: this.eqChartData[0].ct.map((item) => {
 | 
					 | 
				
			||||||
							return item.ct;
 | 
					 | 
				
			||||||
						}),
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
				],
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
</script>
 | 
					 | 
				
			||||||
@@ -1,296 +0,0 @@
 | 
				
			|||||||
<template>
 | 
					 | 
				
			||||||
	<div class="app-container">
 | 
					 | 
				
			||||||
		<search-bar
 | 
					 | 
				
			||||||
			:formConfigs="formConfig"
 | 
					 | 
				
			||||||
			ref="searchBarForm"
 | 
					 | 
				
			||||||
			@headBtnClick="buttonClick" />
 | 
					 | 
				
			||||||
		<div v-if="tableData.length">
 | 
					 | 
				
			||||||
			<base-table
 | 
					 | 
				
			||||||
				v-loading="dataListLoading"
 | 
					 | 
				
			||||||
				:span-method="mergeColumnHandler"
 | 
					 | 
				
			||||||
				:max-height="tableH"
 | 
					 | 
				
			||||||
				:table-props="tableProps"
 | 
					 | 
				
			||||||
				:table-data="tableData" />
 | 
					 | 
				
			||||||
			<SearchBar :formConfigs="[{ label: '产线平衡分析图', type: 'title' }]" />
 | 
					 | 
				
			||||||
			<balance-chart ref="lineChart" />
 | 
					 | 
				
			||||||
		</div>
 | 
					 | 
				
			||||||
		<div v-else class="no-data-bg"></div>
 | 
					 | 
				
			||||||
		<!-- <pagination
 | 
					 | 
				
			||||||
			:limit.sync="listQuery.pageSize"
 | 
					 | 
				
			||||||
			:page.sync="listQuery.pageNo"
 | 
					 | 
				
			||||||
			:total="listQuery.total"
 | 
					 | 
				
			||||||
			@pagination="getDataList" /> -->
 | 
					 | 
				
			||||||
	</div>
 | 
					 | 
				
			||||||
</template>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<script>
 | 
					 | 
				
			||||||
// import basicPage from '../../mixins/basic-page';
 | 
					 | 
				
			||||||
import { parseTime } from '../../mixins/code-filter';
 | 
					 | 
				
			||||||
import { getCT } from '@/api/core/analysis/index';
 | 
					 | 
				
			||||||
import { getProductionLinePage } from '@/api/core/base/productionLine';
 | 
					 | 
				
			||||||
import BalanceChart from '../balanceChart';
 | 
					 | 
				
			||||||
import { time } from 'echarts';
 | 
					 | 
				
			||||||
import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
					 | 
				
			||||||
// import { getWorkshopSectionPage } from '@/api/core/base/workshopSection';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// const tableProps = [
 | 
					 | 
				
			||||||
// 	// {
 | 
					 | 
				
			||||||
//   //   prop: 'lineName',
 | 
					 | 
				
			||||||
// 	// 	label: '产线',
 | 
					 | 
				
			||||||
// 	// 	align: 'center',
 | 
					 | 
				
			||||||
// 	// },
 | 
					 | 
				
			||||||
//   // {
 | 
					 | 
				
			||||||
//   //   prop: 'sum',
 | 
					 | 
				
			||||||
//   //   label: '合计',
 | 
					 | 
				
			||||||
//   //   align: 'center',
 | 
					 | 
				
			||||||
//   // },
 | 
					 | 
				
			||||||
//   // {
 | 
					 | 
				
			||||||
//   //   prop: 'dynamicValue',
 | 
					 | 
				
			||||||
//   //   label: 'dynamicName',
 | 
					 | 
				
			||||||
//   //   align: 'center',
 | 
					 | 
				
			||||||
//   //   children:[
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//   //   ]
 | 
					 | 
				
			||||||
//   // }
 | 
					 | 
				
			||||||
// ];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
	components: {
 | 
					 | 
				
			||||||
		BalanceChart,
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	mixins: [tableHeightMixin],
 | 
					 | 
				
			||||||
	data() {
 | 
					 | 
				
			||||||
		return {
 | 
					 | 
				
			||||||
			urlOptions: {
 | 
					 | 
				
			||||||
				getDataListURL: getCT,
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
			tableProps: [],
 | 
					 | 
				
			||||||
			dataListLoading: false,
 | 
					 | 
				
			||||||
			tableData: [],
 | 
					 | 
				
			||||||
			listQuery: {
 | 
					 | 
				
			||||||
				// time: ''
 | 
					 | 
				
			||||||
				endTime: undefined,
 | 
					 | 
				
			||||||
				lineId: undefined,
 | 
					 | 
				
			||||||
				startTime: undefined,
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
			timeList: [],
 | 
					 | 
				
			||||||
			spanArr: [],
 | 
					 | 
				
			||||||
			xData: [],
 | 
					 | 
				
			||||||
			yData: [],
 | 
					 | 
				
			||||||
			optionArrUrl: [getProductionLinePage],
 | 
					 | 
				
			||||||
			formConfig: [
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					type: 'select',
 | 
					 | 
				
			||||||
					label: '产线',
 | 
					 | 
				
			||||||
					selectOptions: [],
 | 
					 | 
				
			||||||
					param: 'lineIds',
 | 
					 | 
				
			||||||
					defaultSelect: '',
 | 
					 | 
				
			||||||
					multiple: false,
 | 
					 | 
				
			||||||
					filterable: true,
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					type: 'datePicker',
 | 
					 | 
				
			||||||
					label: '时间',
 | 
					 | 
				
			||||||
					dateType: 'datetimerange',
 | 
					 | 
				
			||||||
					format: 'yyyy-MM-dd',
 | 
					 | 
				
			||||||
					valueFormat: 'yyyy-MM-dd HH:mm:ss',
 | 
					 | 
				
			||||||
					rangeSeparator: '-',
 | 
					 | 
				
			||||||
					startPlaceholder: '开始时间',
 | 
					 | 
				
			||||||
					endPlaceholder: '结束时间',
 | 
					 | 
				
			||||||
					width: 350,
 | 
					 | 
				
			||||||
					param: 'time',
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					type: 'button',
 | 
					 | 
				
			||||||
					btnName: '查询',
 | 
					 | 
				
			||||||
					name: 'search',
 | 
					 | 
				
			||||||
					color: 'primary',
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
			],
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	created() {
 | 
					 | 
				
			||||||
		this.getArr();
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	methods: {
 | 
					 | 
				
			||||||
		getArr() {
 | 
					 | 
				
			||||||
			const params = {
 | 
					 | 
				
			||||||
				page: 1,
 | 
					 | 
				
			||||||
				limit: 500,
 | 
					 | 
				
			||||||
			};
 | 
					 | 
				
			||||||
			this.optionArrUrl.forEach((item, index) => {
 | 
					 | 
				
			||||||
				item(params).then((response) => {
 | 
					 | 
				
			||||||
					this.formConfig[index].selectOptions = response.data.list;
 | 
					 | 
				
			||||||
				});
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		setRowSpan(arr) {
 | 
					 | 
				
			||||||
			let count = 0;
 | 
					 | 
				
			||||||
			arr.forEach((item, index) => {
 | 
					 | 
				
			||||||
				if (index === 0) {
 | 
					 | 
				
			||||||
					this.spanArr.push(1);
 | 
					 | 
				
			||||||
				} else {
 | 
					 | 
				
			||||||
					if (item === arr[index - 1]) {
 | 
					 | 
				
			||||||
						this.spanArr[count] += 1;
 | 
					 | 
				
			||||||
						this.spanArr.push(0);
 | 
					 | 
				
			||||||
					} else {
 | 
					 | 
				
			||||||
						count = index;
 | 
					 | 
				
			||||||
						this.spanArr.push(1);
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		/** 合并table列的规则 */
 | 
					 | 
				
			||||||
		mergeColumnHandler({ row, column, rowIndex, columnIndex }) {
 | 
					 | 
				
			||||||
			if (columnIndex == 0) {
 | 
					 | 
				
			||||||
				if (this.spanArr[rowIndex]) {
 | 
					 | 
				
			||||||
					return [
 | 
					 | 
				
			||||||
						this.spanArr[rowIndex], // row span
 | 
					 | 
				
			||||||
						1, // col span
 | 
					 | 
				
			||||||
					];
 | 
					 | 
				
			||||||
				} else {
 | 
					 | 
				
			||||||
					return [0, 0];
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		getData() {
 | 
					 | 
				
			||||||
			// this.listQuery.lineId = '1672847052717821953'
 | 
					 | 
				
			||||||
			// this.listQuery.startTime = '1693497600000';
 | 
					 | 
				
			||||||
			// this.listQuery.endTime = '1693843200000';
 | 
					 | 
				
			||||||
			this.urlOptions.getDataListURL(this.listQuery).then((res) => {
 | 
					 | 
				
			||||||
				console.log(res);
 | 
					 | 
				
			||||||
				let arr = [
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						prop: 'sectionName',
 | 
					 | 
				
			||||||
						label: '工段',
 | 
					 | 
				
			||||||
						align: 'center',
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						prop: 'equName',
 | 
					 | 
				
			||||||
						label: '设备',
 | 
					 | 
				
			||||||
						align: 'center',
 | 
					 | 
				
			||||||
            width: 150
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
				];
 | 
					 | 
				
			||||||
				let sectionArr = [];
 | 
					 | 
				
			||||||
				res.data.data.forEach((ele, index) => {
 | 
					 | 
				
			||||||
					let tempData = [];
 | 
					 | 
				
			||||||
					let ggData = [];
 | 
					 | 
				
			||||||
					let sbluData = [];
 | 
					 | 
				
			||||||
					let sbsjData = [];
 | 
					 | 
				
			||||||
					let cxluData = [];
 | 
					 | 
				
			||||||
					let cxsjData = [];
 | 
					 | 
				
			||||||
					ele.data.forEach((item, index) => {
 | 
					 | 
				
			||||||
						item.children.forEach((params) => {
 | 
					 | 
				
			||||||
							if (params.dynamicName === '生产规格') {
 | 
					 | 
				
			||||||
								tempData[item.dynamicName + '_gg'] = params.dynamicValue;
 | 
					 | 
				
			||||||
								ggData[index] = params.dynamicValue;
 | 
					 | 
				
			||||||
							} else if (params.dynamicName === '设备理论速度') {
 | 
					 | 
				
			||||||
								tempData[item.dynamicName + '_sblu'] = params.dynamicValue;
 | 
					 | 
				
			||||||
								sbluData[index] = params.dynamicValue;
 | 
					 | 
				
			||||||
							} else if (params.dynamicName === '设备实际速度') {
 | 
					 | 
				
			||||||
								tempData[item.dynamicName + '_sbsj'] = params.dynamicValue;
 | 
					 | 
				
			||||||
								sbsjData[index] = params.dynamicValue;
 | 
					 | 
				
			||||||
							} else if (params.dynamicName === '产线理论速度') {
 | 
					 | 
				
			||||||
								tempData[item.dynamicName + '_cxlu'] = params.dynamicValue;
 | 
					 | 
				
			||||||
								cxluData[index] = params.dynamicValue;
 | 
					 | 
				
			||||||
							} else if(params.dynamicName === '产线实际速度') {
 | 
					 | 
				
			||||||
								tempData[item.dynamicName + '_cxsj'] = params.dynamicValue;
 | 
					 | 
				
			||||||
								cxsjData[index] = params.dynamicValue;
 | 
					 | 
				
			||||||
							}
 | 
					 | 
				
			||||||
						});
 | 
					 | 
				
			||||||
					});
 | 
					 | 
				
			||||||
					const equipment = {
 | 
					 | 
				
			||||||
						name: ele.equName,
 | 
					 | 
				
			||||||
						ggData: ggData,
 | 
					 | 
				
			||||||
						sbluData: sbluData,
 | 
					 | 
				
			||||||
						sbsjData: sbsjData,
 | 
					 | 
				
			||||||
						cxluData: cxluData,
 | 
					 | 
				
			||||||
						cxsjData: cxsjData,
 | 
					 | 
				
			||||||
					};
 | 
					 | 
				
			||||||
					tempData['equName'] = ele.equName;
 | 
					 | 
				
			||||||
					tempData['sectionName'] = ele.sectionName;
 | 
					 | 
				
			||||||
					this.tableData.push(tempData);
 | 
					 | 
				
			||||||
					const { sectionName } = tempData;
 | 
					 | 
				
			||||||
					sectionArr.push(sectionName);
 | 
					 | 
				
			||||||
					this.yData.push(equipment);
 | 
					 | 
				
			||||||
				});
 | 
					 | 
				
			||||||
				this.setRowSpan(sectionArr);
 | 
					 | 
				
			||||||
				res.data.nameData.forEach((item) => {
 | 
					 | 
				
			||||||
					this.timeList.push(item.name);
 | 
					 | 
				
			||||||
				});
 | 
					 | 
				
			||||||
				const timeArray = Array.from(new Set(this.timeList));
 | 
					 | 
				
			||||||
        console.log(timeArray)
 | 
					 | 
				
			||||||
				for (const times of timeArray) {
 | 
					 | 
				
			||||||
					if (times !== '生产规格' && times !== '设备理论速度' && times !== '设备实际速度'
 | 
					 | 
				
			||||||
             && times !== '产线理论速度' && times !== '产线实际速度'
 | 
					 | 
				
			||||||
          ) {
 | 
					 | 
				
			||||||
						const subprop = {
 | 
					 | 
				
			||||||
							label: times,
 | 
					 | 
				
			||||||
							align: 'center',
 | 
					 | 
				
			||||||
							children: [
 | 
					 | 
				
			||||||
								{ prop: times + '_gg', label: '生产规格', align: 'center' },
 | 
					 | 
				
			||||||
								{ prop: times + '_sblu', label: '设备理论速度[片/min]', align: 'center' },
 | 
					 | 
				
			||||||
								{ prop: times + '_sbsj', label: '设备实际速度[片/min]', align: 'center' },
 | 
					 | 
				
			||||||
								{ prop: times + '_cxlu', label: '产线理论速度[片/min]', align: 'center' },
 | 
					 | 
				
			||||||
								{ prop: times + '_cxsj', label: '产线实际速度[片/min]', align: 'center' },
 | 
					 | 
				
			||||||
							],
 | 
					 | 
				
			||||||
						};
 | 
					 | 
				
			||||||
						arr.push(subprop);
 | 
					 | 
				
			||||||
						this.xData.push(times);
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				this.tableProps = arr;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        console.log(this.$refs)
 | 
					 | 
				
			||||||
        this.$nextTick(()=>{
 | 
					 | 
				
			||||||
          this.$refs.lineChart.initChart(this.xData, this.yData);
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
				// this.total = response.data.total;
 | 
					 | 
				
			||||||
				// this.dataListLoading = false;
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		buttonClick(val) {
 | 
					 | 
				
			||||||
			// console.log(val)
 | 
					 | 
				
			||||||
			switch (val.btnName) {
 | 
					 | 
				
			||||||
				case 'search':
 | 
					 | 
				
			||||||
					// this.listQuery.pageNo = 1;
 | 
					 | 
				
			||||||
					// this.listQuery.pageSize = 10;
 | 
					 | 
				
			||||||
					this.listQuery.lineId = val.lineIds;
 | 
					 | 
				
			||||||
					this.listQuery.startTime = val.time
 | 
					 | 
				
			||||||
						? String(new Date(val.time[0]).getTime())
 | 
					 | 
				
			||||||
						: undefined;
 | 
					 | 
				
			||||||
					this.listQuery.endTime = val.time
 | 
					 | 
				
			||||||
						? String(new Date(val.time[1]).getTime())
 | 
					 | 
				
			||||||
						: undefined;
 | 
					 | 
				
			||||||
					if (val.time && val.lineIds) {
 | 
					 | 
				
			||||||
						this.tableData = [];
 | 
					 | 
				
			||||||
						this.xData = [];
 | 
					 | 
				
			||||||
						this.yData = [];
 | 
					 | 
				
			||||||
						this.tableProps = [];
 | 
					 | 
				
			||||||
						this.spanArr = [];
 | 
					 | 
				
			||||||
						this.timeList = [];
 | 
					 | 
				
			||||||
						this.getData();
 | 
					 | 
				
			||||||
					} else {
 | 
					 | 
				
			||||||
						this.$message({
 | 
					 | 
				
			||||||
							message: '请选择产线和时间',
 | 
					 | 
				
			||||||
							type: 'warning',
 | 
					 | 
				
			||||||
						});
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
					break;
 | 
					 | 
				
			||||||
				case 'reset':
 | 
					 | 
				
			||||||
					this.$refs.searchBarForm.resetForm();
 | 
					 | 
				
			||||||
					this.listQuery = {
 | 
					 | 
				
			||||||
						pageSize: 10,
 | 
					 | 
				
			||||||
						pageNo: 1,
 | 
					 | 
				
			||||||
						total: 1,
 | 
					 | 
				
			||||||
					};
 | 
					 | 
				
			||||||
					this.getDataList();
 | 
					 | 
				
			||||||
					break;
 | 
					 | 
				
			||||||
				default:
 | 
					 | 
				
			||||||
					console.log(val);
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
</script>
 | 
					 | 
				
			||||||
@@ -1,302 +1,260 @@
 | 
				
			|||||||
<!--
 | 
					 | 
				
			||||||
 * @Author: Do not edit
 | 
					 | 
				
			||||||
 * @Date: 2023-08-29 14:59:29
 | 
					 | 
				
			||||||
 * @LastEditTime: 2025-01-09 10:27:53
 | 
					 | 
				
			||||||
 * @LastEditors: zwq
 | 
					 | 
				
			||||||
 * @Description:
 | 
					 | 
				
			||||||
-->
 | 
					 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
  <div class="app-container">
 | 
					  <div class="app-container">
 | 
				
			||||||
		<search-bar
 | 
					    <search-bar :formConfigs="formConfig" ref="searchBarForm" @headBtnClick="buttonClick" />
 | 
				
			||||||
			:formConfigs="formConfig"
 | 
					    <div v-if="tableData.length">
 | 
				
			||||||
			ref="searchBarForm"
 | 
					      <base-table v-loading="dataListLoading" :span-method="mergeColumnHandler" :table-props="tableProps" :table-data="tableData" />
 | 
				
			||||||
			@select-changed="handleSearchBarChanged"
 | 
					      <SearchBar :formConfigs="[{ label: '产线平衡分析图', type: 'title' }]" />
 | 
				
			||||||
			@headBtnClick="buttonClick" />
 | 
					      <balance-chart ref="lineChart" />
 | 
				
			||||||
		<div v-if="showData.length">
 | 
					 | 
				
			||||||
			<base-table
 | 
					 | 
				
			||||||
				class="right-aside"
 | 
					 | 
				
			||||||
				v-loading="dataListLoading"
 | 
					 | 
				
			||||||
				:table-props="tableProps"
 | 
					 | 
				
			||||||
				:page="1"
 | 
					 | 
				
			||||||
				:limit="999"
 | 
					 | 
				
			||||||
				:table-data="showData">
 | 
					 | 
				
			||||||
				<method-btn
 | 
					 | 
				
			||||||
					v-if="showData.length"
 | 
					 | 
				
			||||||
					slot="handleBtn"
 | 
					 | 
				
			||||||
					:width="80"
 | 
					 | 
				
			||||||
					label="操作"
 | 
					 | 
				
			||||||
					:method-list="tableBtn"
 | 
					 | 
				
			||||||
					@clickBtn="handleClick" />
 | 
					 | 
				
			||||||
			</base-table>
 | 
					 | 
				
			||||||
			<barChart
 | 
					 | 
				
			||||||
				v-for="item in chartData"
 | 
					 | 
				
			||||||
				:key="item.name + 'echart'"
 | 
					 | 
				
			||||||
				style="margin-top: 50px"
 | 
					 | 
				
			||||||
				height="600px"
 | 
					 | 
				
			||||||
				:id="item.name + 'echart'"
 | 
					 | 
				
			||||||
				:title="item.name + ' 节拍趋势图'"
 | 
					 | 
				
			||||||
				:bar-data="item" />
 | 
					 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
    <div v-else class="no-data-bg"></div>
 | 
					    <div v-else class="no-data-bg"></div>
 | 
				
			||||||
		<base-dialog
 | 
					    <!-- <pagination
 | 
				
			||||||
			:dialogTitle="addOrEditTitle"
 | 
								:limit.sync="listQuery.pageSize"
 | 
				
			||||||
			:dialogVisible="addOrUpdateVisible"
 | 
								:page.sync="listQuery.pageNo"
 | 
				
			||||||
			@cancel="handleCancel"
 | 
								:total="listQuery.total"
 | 
				
			||||||
			@confirm="handleConfirm"
 | 
								@pagination="getDataList" /> -->
 | 
				
			||||||
			:before-close="handleCancel"
 | 
					 | 
				
			||||||
			close-on-click-modal
 | 
					 | 
				
			||||||
      top="0"
 | 
					 | 
				
			||||||
			width="50%">
 | 
					 | 
				
			||||||
			<eq-detail ref="eqDetail" />
 | 
					 | 
				
			||||||
			<slot name="footer">
 | 
					 | 
				
			||||||
				<el-row slot="footer" type="flex" justify="end">
 | 
					 | 
				
			||||||
					<el-col :span="24">
 | 
					 | 
				
			||||||
						<el-button size="small" class="btnTextStyle" @click="handleCancel">
 | 
					 | 
				
			||||||
							取消
 | 
					 | 
				
			||||||
						</el-button>
 | 
					 | 
				
			||||||
					</el-col>
 | 
					 | 
				
			||||||
				</el-row>
 | 
					 | 
				
			||||||
			</slot>
 | 
					 | 
				
			||||||
		</base-dialog>
 | 
					 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script>
 | 
					<script>
 | 
				
			||||||
import eqDetail from './eq-detail';
 | 
					// import basicPage from '../../mixins/basic-page';
 | 
				
			||||||
import { parseTime } from '../../mixins/code-filter';
 | 
					import { parseTime } from '../../mixins/code-filter';
 | 
				
			||||||
import { getPdList } from '@/api/core/monitoring/auto';
 | 
					import { getCT } from '@/api/core/analysis/index';
 | 
				
			||||||
import { getNewCTNow, getNewCTCharts } from '@/api/core/analysis/index';
 | 
					import { getProductionLinePage } from '@/api/core/base/productionLine';
 | 
				
			||||||
import { getFactoryPage } from '@/api/core/base/factory';
 | 
					import BalanceChart from '../balanceChart'
 | 
				
			||||||
// import codeFilter from '../../mixins/code-filter'
 | 
					import { time } from 'echarts';
 | 
				
			||||||
import * as XLSX from 'xlsx';
 | 
					// import { getWorkshopSectionPage } from '@/api/core/base/workshopSection';
 | 
				
			||||||
import FileSaver from 'file-saver';
 | 
					 | 
				
			||||||
import barChart from './BarChart.vue';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
const tableProps = [
 | 
					// const tableProps = [
 | 
				
			||||||
	{
 | 
					// 	// {
 | 
				
			||||||
		prop: 'factoryName',
 | 
					//   //   prop: 'lineName',
 | 
				
			||||||
		label: '工厂',
 | 
					// 	// 	label: '产线',
 | 
				
			||||||
	},
 | 
					// 	// 	align: 'center',
 | 
				
			||||||
	{
 | 
					// 	// },
 | 
				
			||||||
		prop: 'lineName',
 | 
					//   // {
 | 
				
			||||||
		label: '产线',
 | 
					//   //   prop: 'sum',
 | 
				
			||||||
	},
 | 
					//   //   label: '合计',
 | 
				
			||||||
	{
 | 
					//   //   align: 'center',
 | 
				
			||||||
		prop: 'size',
 | 
					//   // },
 | 
				
			||||||
		label: '规格',
 | 
					//   // {
 | 
				
			||||||
		showOverflowtooltip: true,
 | 
					//   //   prop: 'dynamicValue',
 | 
				
			||||||
	},
 | 
					//   //   label: 'dynamicName',
 | 
				
			||||||
	{
 | 
					//   //   align: 'center',
 | 
				
			||||||
		prop: 'process',
 | 
					//   //   children:[
 | 
				
			||||||
		label: '产品工艺',
 | 
					
 | 
				
			||||||
	},
 | 
					//   //   ]
 | 
				
			||||||
	{
 | 
					//   // }
 | 
				
			||||||
		prop: 'edgeCt',
 | 
					// ];
 | 
				
			||||||
		label: '磨边当前节拍pcs/min',
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		prop: 'temperCt',
 | 
					 | 
				
			||||||
		label: '钢化当前节拍pcs/min',
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		prop: 'downCt',
 | 
					 | 
				
			||||||
		label: '下片当前节拍pcs/min',
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
];
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
  components: {
 | 
					  components: {
 | 
				
			||||||
		barChart,
 | 
					    BalanceChart
 | 
				
			||||||
		eqDetail,
 | 
					 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					  // mixins: [basicPage],
 | 
				
			||||||
  data() {
 | 
					  data() {
 | 
				
			||||||
    return {
 | 
					    return {
 | 
				
			||||||
      urlOptions: {
 | 
					      urlOptions: {
 | 
				
			||||||
				getDataListURL: getNewCTNow,
 | 
					        getDataListURL: getCT,
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
			listQuery: {
 | 
					      tableProps: [],
 | 
				
			||||||
				lineId: [],
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
			fileName: '',
 | 
					 | 
				
			||||||
      dataListLoading: false,
 | 
					      dataListLoading: false,
 | 
				
			||||||
			tableProps,
 | 
					 | 
				
			||||||
			tableBtn: [
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					type: 'eq',
 | 
					 | 
				
			||||||
					btnName: '详情',
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
			].filter((v) => v),
 | 
					 | 
				
			||||||
			showData: [],
 | 
					 | 
				
			||||||
      tableData: [],
 | 
					      tableData: [],
 | 
				
			||||||
			chartData: [],
 | 
					      listQuery: {
 | 
				
			||||||
			formConfig: [
 | 
					        // time: ''
 | 
				
			||||||
				{
 | 
					        endTime: undefined,
 | 
				
			||||||
					type: 'select',
 | 
					        lineId:undefined,
 | 
				
			||||||
					label: '工厂',
 | 
					        startTime:undefined
 | 
				
			||||||
					selectOptions: [],
 | 
					 | 
				
			||||||
					param: 'factoryId',
 | 
					 | 
				
			||||||
					onchange: true,
 | 
					 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
 | 
					      timeList: [],
 | 
				
			||||||
 | 
					      spanArr: [], 
 | 
				
			||||||
 | 
					      xData: [],
 | 
				
			||||||
 | 
					      yData: [],
 | 
				
			||||||
 | 
					      optionArrUrl: [getProductionLinePage],
 | 
				
			||||||
 | 
					      formConfig: [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
          type: 'select',
 | 
					          type: 'select',
 | 
				
			||||||
          label: '产线',
 | 
					          label: '产线',
 | 
				
			||||||
          selectOptions: [],
 | 
					          selectOptions: [],
 | 
				
			||||||
					param: 'lineId',
 | 
					          param: 'lineIds',
 | 
				
			||||||
					multiple: true,
 | 
					          defaultSelect: '',
 | 
				
			||||||
 | 
					          multiple: false,
 | 
				
			||||||
 | 
					          filterable: true,
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
          type: 'datePicker',
 | 
					          type: 'datePicker',
 | 
				
			||||||
					label: '时间范围',
 | 
					          label: '时间',
 | 
				
			||||||
          dateType: 'datetimerange',
 | 
					          dateType: 'datetimerange',
 | 
				
			||||||
					format: 'yyyy-MM-dd HH:mm:ss',
 | 
					          format: 'yyyy-MM-dd',
 | 
				
			||||||
					valueFormat: 'timestamp',
 | 
					          valueFormat: 'yyyy-MM-dd HH:mm:ss',
 | 
				
			||||||
          rangeSeparator: '-',
 | 
					          rangeSeparator: '-',
 | 
				
			||||||
          startPlaceholder: '开始时间',
 | 
					          startPlaceholder: '开始时间',
 | 
				
			||||||
          endPlaceholder: '结束时间',
 | 
					          endPlaceholder: '结束时间',
 | 
				
			||||||
					defaultTime: ['00:00:00', '23:59:59'],
 | 
					 | 
				
			||||||
					param: 'timeVal',
 | 
					 | 
				
			||||||
          width: 350,
 | 
					          width: 350,
 | 
				
			||||||
					clearable: false,
 | 
					          param: 'time',
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
          type: 'button',
 | 
					          type: 'button',
 | 
				
			||||||
          btnName: '查询',
 | 
					          btnName: '查询',
 | 
				
			||||||
          name: 'search',
 | 
					          name: 'search',
 | 
				
			||||||
          color: 'primary',
 | 
					          color: 'primary',
 | 
				
			||||||
				},
 | 
					        }
 | 
				
			||||||
				// {
 | 
					 | 
				
			||||||
				// 	type: 'separate',
 | 
					 | 
				
			||||||
				// },
 | 
					 | 
				
			||||||
				// {
 | 
					 | 
				
			||||||
				// 	// type: this.$auth.hasPermi('base:factory:export') ? 'button' : '',
 | 
					 | 
				
			||||||
				// 	type: 'button',
 | 
					 | 
				
			||||||
				// 	btnName: '导出',
 | 
					 | 
				
			||||||
				// 	name: 'export',
 | 
					 | 
				
			||||||
				// 	color: 'warning',
 | 
					 | 
				
			||||||
				// },
 | 
					 | 
				
			||||||
      ],
 | 
					      ],
 | 
				
			||||||
			addOrEditTitle: '',
 | 
					 | 
				
			||||||
			addOrUpdateVisible: false,
 | 
					 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  created() {
 | 
					  created() {
 | 
				
			||||||
		// 获取当前时间
 | 
					    this.getArr();
 | 
				
			||||||
		const now = new Date();
 | 
					 | 
				
			||||||
		// 获取前一天的同一时间
 | 
					 | 
				
			||||||
		const yesterday = new Date(now.getTime() - 24 * 60 * 60 * 1000);
 | 
					 | 
				
			||||||
		// 设置为00:00:00
 | 
					 | 
				
			||||||
		yesterday.setHours(0, 0, 0, 0);
 | 
					 | 
				
			||||||
		// 设置为23:59:59
 | 
					 | 
				
			||||||
		const end = new Date(yesterday.getTime());
 | 
					 | 
				
			||||||
		end.setHours(23, 59, 59, 59);
 | 
					 | 
				
			||||||
		this.listQuery.startTime = yesterday.getTime();
 | 
					 | 
				
			||||||
		this.listQuery.endTime = end.getTime();
 | 
					 | 
				
			||||||
		this.$nextTick(() => {
 | 
					 | 
				
			||||||
			this.$refs.searchBarForm.formInline.timeVal = [
 | 
					 | 
				
			||||||
				yesterday.getTime(),
 | 
					 | 
				
			||||||
				end.getTime(),
 | 
					 | 
				
			||||||
			];
 | 
					 | 
				
			||||||
		});
 | 
					 | 
				
			||||||
		this.getDataList();
 | 
					 | 
				
			||||||
		this.getPdLineList();
 | 
					 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  methods: {
 | 
					  methods: {
 | 
				
			||||||
		handleExport() {
 | 
					    getArr() {
 | 
				
			||||||
			let tables = document.querySelector('.el-table').cloneNode(true);
 | 
					 | 
				
			||||||
			const fix = tables.querySelector('.el-table__fixed');
 | 
					 | 
				
			||||||
			const fixRight = tables.querySelector('.el-table__fixed-right');
 | 
					 | 
				
			||||||
			if (fix) {
 | 
					 | 
				
			||||||
				tables.removeChild(tables.querySelector('.el-table__fixed'));
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			if (fixRight) {
 | 
					 | 
				
			||||||
				tables.removeChild(tables.querySelector('.el-table__fixed-right'));
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			let exportTable = XLSX.utils.table_to_book(tables);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			var exportTableOut = XLSX.write(exportTable, {
 | 
					 | 
				
			||||||
				bookType: 'xlsx',
 | 
					 | 
				
			||||||
				bookSST: true,
 | 
					 | 
				
			||||||
				type: 'array',
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
			// sheetjs.xlsx为导出表格的标题名称
 | 
					 | 
				
			||||||
			try {
 | 
					 | 
				
			||||||
				FileSaver.saveAs(
 | 
					 | 
				
			||||||
					new Blob([exportTableOut], {
 | 
					 | 
				
			||||||
						type: 'application/octet-stream',
 | 
					 | 
				
			||||||
					}),
 | 
					 | 
				
			||||||
					this.fileName + '产线自动报表.xlsx'
 | 
					 | 
				
			||||||
				);
 | 
					 | 
				
			||||||
			} catch (e) {
 | 
					 | 
				
			||||||
				if (typeof console !== 'undefined') console.log(e, exportTableOut);
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			return exportTableOut;
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		getPdLineList() {
 | 
					 | 
				
			||||||
			getPdList().then((res) => {
 | 
					 | 
				
			||||||
				this.formConfig[1].selectOptions = res.data || [];
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
      const params = {
 | 
					      const params = {
 | 
				
			||||||
				pageSize: 100,
 | 
					        page: 1,
 | 
				
			||||||
				pageNo: 1,
 | 
					        limit: 500
 | 
				
			||||||
			};
 | 
					      }
 | 
				
			||||||
			getFactoryPage(params).then((res) => {
 | 
					      this.optionArrUrl.forEach((item, index) => {
 | 
				
			||||||
				this.formConfig[0].selectOptions = res.data.list || [];
 | 
					        item(params).then((response) => {
 | 
				
			||||||
 | 
					          this.formConfig[index].selectOptions = response.data.list
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    setRowSpan(arr) {
 | 
				
			||||||
 | 
					      let count = 0
 | 
				
			||||||
 | 
					      arr.forEach((item, index) => {
 | 
				
			||||||
 | 
					        if(index === 0) {
 | 
				
			||||||
 | 
					          this.spanArr.push(1)
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					          if (item === arr[index - 1]) {
 | 
				
			||||||
 | 
					            this.spanArr[count] += 1
 | 
				
			||||||
 | 
					            this.spanArr.push(0)
 | 
				
			||||||
 | 
					          } else {
 | 
				
			||||||
 | 
					            count = index
 | 
				
			||||||
 | 
					            this.spanArr.push(1)
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    /** 合并table列的规则 */
 | 
				
			||||||
 | 
							mergeColumnHandler({ row, column, rowIndex, columnIndex }) {
 | 
				
			||||||
 | 
								if (columnIndex == 0) {
 | 
				
			||||||
 | 
									if (this.spanArr[rowIndex]) {
 | 
				
			||||||
 | 
										return [
 | 
				
			||||||
 | 
											this.spanArr[rowIndex], // row span
 | 
				
			||||||
 | 
											1, // col span
 | 
				
			||||||
 | 
										];
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										return [0, 0];
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					    getData() {
 | 
				
			||||||
 | 
					      // this.listQuery.lineId = '1672847052717821953'
 | 
				
			||||||
 | 
					      // this.listQuery.startTime = '1693497600000';
 | 
				
			||||||
 | 
					      // this.listQuery.endTime = '1693843200000';
 | 
				
			||||||
 | 
					      this.urlOptions.getDataListURL(this.listQuery).then(res => {
 | 
				
			||||||
 | 
					        console.log(res)
 | 
				
			||||||
 | 
					        let arr = [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            prop: 'sectionName',
 | 
				
			||||||
 | 
					            label: '工段',
 | 
				
			||||||
 | 
					            align: 'center',
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            prop: 'equName',
 | 
				
			||||||
 | 
					            label: '设备',
 | 
				
			||||||
 | 
					            align: 'center',
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        ]
 | 
				
			||||||
 | 
					        let sectionArr= []
 | 
				
			||||||
 | 
					        res.data.data.forEach((ele, index) => {
 | 
				
			||||||
 | 
					          let tempData = []
 | 
				
			||||||
 | 
					          let eqData = []
 | 
				
			||||||
 | 
					            let plData = []
 | 
				
			||||||
 | 
					          ele.data.forEach((item, index) => {
 | 
				
			||||||
 | 
					            item.children.forEach(params => {
 | 
				
			||||||
 | 
					              if (params.dynamicName === '设备CT') {
 | 
				
			||||||
 | 
					                tempData[item.dynamicName + '_eq'] = params.dynamicValue
 | 
				
			||||||
 | 
					                eqData[index] = params.dynamicValue
 | 
				
			||||||
 | 
					              } else {
 | 
				
			||||||
 | 
					                tempData[item.dynamicName + '_pl'] = params.dynamicValue
 | 
				
			||||||
 | 
					                plData[index] = params.dynamicValue
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
 | 
					          })
 | 
				
			||||||
 | 
					          const equipment = {
 | 
				
			||||||
 | 
					            name: ele.equName,
 | 
				
			||||||
 | 
					            eqData: eqData,
 | 
				
			||||||
 | 
					            plData: plData
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          tempData['equName'] = ele.equName
 | 
				
			||||||
 | 
					          tempData['sectionName'] = ele.sectionName
 | 
				
			||||||
 | 
					          this.tableData.push(tempData)
 | 
				
			||||||
 | 
					          const { sectionName } = tempData
 | 
				
			||||||
 | 
					          sectionArr.push(sectionName)
 | 
				
			||||||
 | 
					          this.yData.push(equipment)
 | 
				
			||||||
 | 
					          console.log('看看equ', this.yData)
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        this.setRowSpan(sectionArr)
 | 
				
			||||||
 | 
					        res.data.nameData.forEach(item => {
 | 
				
			||||||
 | 
					          this.timeList.push(item.name)
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        const timeArray = Array.from(new Set(this.timeList))
 | 
				
			||||||
 | 
					        for (const times of timeArray) {
 | 
				
			||||||
 | 
					          if (times !== '设备CT' && times !== '产线CT') {
 | 
				
			||||||
 | 
					            const subprop = {
 | 
				
			||||||
 | 
					              label: times,
 | 
				
			||||||
 | 
					              align: 'center',
 | 
				
			||||||
 | 
					              children: [
 | 
				
			||||||
 | 
					                { prop: times + '_eq', label: '设备CT', align: 'center' },
 | 
				
			||||||
 | 
					                { prop: times + '_pl', label: '产线CT', align: 'center' }
 | 
				
			||||||
 | 
					              ]
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            arr.push(subprop)
 | 
				
			||||||
 | 
					            this.xData.push(times)
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        this.tableProps = arr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        console.log('表格横坐标', this.xData)
 | 
				
			||||||
 | 
					        this.$refs.lineChart.initChart(this.xData, this.yData)
 | 
				
			||||||
 | 
					        // this.total = response.data.total;
 | 
				
			||||||
 | 
					        // this.dataListLoading = false;
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    buttonClick(val) {
 | 
					    buttonClick(val) {
 | 
				
			||||||
 | 
					      // console.log(val)
 | 
				
			||||||
      switch (val.btnName) {
 | 
					      switch (val.btnName) {
 | 
				
			||||||
        case 'search':
 | 
					        case 'search':
 | 
				
			||||||
					this.listQuery.factoryId = val.factoryId || undefined;
 | 
					          // this.listQuery.pageNo = 1;
 | 
				
			||||||
					this.listQuery.lineId = val.lineId ? val.lineId : [];
 | 
					          // this.listQuery.pageSize = 10;
 | 
				
			||||||
					this.listQuery.startTime = val.timeVal ? val.timeVal[0] : undefined;
 | 
					          this.listQuery.lineId = val.lineIds
 | 
				
			||||||
					this.listQuery.endTime = val.timeVal ? val.timeVal[1] : undefined;
 | 
					          this.listQuery.startTime = val.time ? String(new Date(val.time[0]).getTime()) : undefined;
 | 
				
			||||||
					this.getDataList();
 | 
					          this.listQuery.endTime = val.time ? String(new Date(val.time[1]).getTime()) : undefined;
 | 
				
			||||||
 | 
					          if (val.time && val.lineIds) {
 | 
				
			||||||
 | 
					            this.tableData = []
 | 
				
			||||||
 | 
					            this.xData = []
 | 
				
			||||||
 | 
					            this.yData = []
 | 
				
			||||||
 | 
					            this.tableProps = []
 | 
				
			||||||
 | 
					            this.spanArr = []
 | 
				
			||||||
 | 
					            this.timeList = []
 | 
				
			||||||
 | 
					            this.getData()
 | 
				
			||||||
 | 
					          } else {
 | 
				
			||||||
 | 
					            this.$message({
 | 
				
			||||||
 | 
					              message: '请选择产线和时间',
 | 
				
			||||||
 | 
					              type: 'warning'
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
          break;
 | 
					          break;
 | 
				
			||||||
				case 'export':
 | 
					        case 'reset':
 | 
				
			||||||
					this.handleExport();
 | 
					          this.$refs.searchBarForm.resetForm();
 | 
				
			||||||
 | 
					          this.listQuery = {
 | 
				
			||||||
 | 
					            pageSize: 10,
 | 
				
			||||||
 | 
					            pageNo: 1,
 | 
				
			||||||
 | 
					            total: 1,
 | 
				
			||||||
 | 
					          };
 | 
				
			||||||
 | 
					          this.getDataList();
 | 
				
			||||||
          break;
 | 
					          break;
 | 
				
			||||||
        default:
 | 
					        default:
 | 
				
			||||||
          console.log(val);
 | 
					          console.log(val);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
		// 获取数据列表
 | 
					 | 
				
			||||||
		getDataList() {
 | 
					 | 
				
			||||||
			this.dataListLoading = true;
 | 
					 | 
				
			||||||
			this.urlOptions.getDataListURL(this.listQuery).then((response) => {
 | 
					 | 
				
			||||||
				this.tableData = response.data;
 | 
					 | 
				
			||||||
				this.dataListLoading = false;
 | 
					 | 
				
			||||||
				this.showData = this.tableData;
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
			getNewCTCharts(this.listQuery).then((response) => {
 | 
					 | 
				
			||||||
				this.chartData = response.data;
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		handleSearchBarChanged({ param, value }) {
 | 
					 | 
				
			||||||
			this.listQuery.lineId = [];
 | 
					 | 
				
			||||||
			this.$refs.searchBarForm.formInline.lineId = undefined;
 | 
					 | 
				
			||||||
			getPdList(value).then((res) => {
 | 
					 | 
				
			||||||
				this.formConfig[1].selectOptions = res.data || [];
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		handleClick(val) {
 | 
					 | 
				
			||||||
			this.addOrUpdateVisible = true;
 | 
					 | 
				
			||||||
			this.addOrEditTitle =
 | 
					 | 
				
			||||||
				val.data?.factoryName + '-' + val.data?.lineName + ' 详情';
 | 
					 | 
				
			||||||
			this.$nextTick(() => {
 | 
					 | 
				
			||||||
				this.$refs.eqDetail.init(
 | 
					 | 
				
			||||||
					val.data.lineId,
 | 
					 | 
				
			||||||
					this.listQuery.startTime,
 | 
					 | 
				
			||||||
					this.listQuery.endTime
 | 
					 | 
				
			||||||
				);
 | 
					 | 
				
			||||||
			});
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		handleCancel() {
 | 
					 | 
				
			||||||
			this.addOrUpdateVisible = false;
 | 
					 | 
				
			||||||
			this.addOrEditTitle = '';
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		handleConfirm() {
 | 
					 | 
				
			||||||
			this.handleCancel();
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
<!--
 | 
					<!--
 | 
				
			||||||
 * @Author: zhp
 | 
					 * @Author: zhp
 | 
				
			||||||
 * @Date: 2023-09-13 09:02:25
 | 
					 * @Date: 2023-09-13 09:02:25
 | 
				
			||||||
 * @LastEditTime: 2024-11-26 15:52:29
 | 
					 * @LastEditTime: 2023-10-08 16:36:37
 | 
				
			||||||
 * @LastEditors: zwq
 | 
					 * @LastEditors: DY
 | 
				
			||||||
 * @Description:
 | 
					 * @Description:
 | 
				
			||||||
-->
 | 
					-->
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
@@ -108,28 +108,13 @@ export default {
 | 
				
			|||||||
        },
 | 
					        },
 | 
				
			||||||
        series: [
 | 
					        series: [
 | 
				
			||||||
          {
 | 
					          {
 | 
				
			||||||
            name: '生产规格',
 | 
					            name: '设备CT',
 | 
				
			||||||
            data: dataList.ggData,
 | 
					            data: dataList.eqData,
 | 
				
			||||||
            type: 'line',
 | 
					            type: 'line',
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          {
 | 
					          {
 | 
				
			||||||
            name: '设备理论速度',
 | 
					            name: '产线CT',
 | 
				
			||||||
            data: dataList.sbluData,
 | 
					            data: dataList.plData,
 | 
				
			||||||
            type: 'line',
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
          {
 | 
					 | 
				
			||||||
            name: '设备实际速度',
 | 
					 | 
				
			||||||
            data: dataList.sbsjData,
 | 
					 | 
				
			||||||
            type: 'line',
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
          {
 | 
					 | 
				
			||||||
            name: '产线理论速度',
 | 
					 | 
				
			||||||
            data: dataList.cxluData,
 | 
					 | 
				
			||||||
            type: 'line',
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
          {
 | 
					 | 
				
			||||||
            name: '产线实际速度',
 | 
					 | 
				
			||||||
            data: dataList.cxsjData,
 | 
					 | 
				
			||||||
            type: 'line',
 | 
					            type: 'line',
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        ]
 | 
					        ]
 | 
				
			||||||
 
 | 
				
			|||||||