Compare commits
	
		
			105 Commits
		
	
	
		
			df10a757bf
			...
			projects/m
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| d3d93acd0f | |||
| a4fceeb981 | |||
| 84468cc883 | |||
| ea04d55fc1 | |||
| ef1078360a | |||
| 60f6c3a8fe | |||
| a4b340ac5d | |||
| 
						 | 
					2592551e66 | ||
| 
						 | 
					1fde96e677 | ||
| 0b16e1fe0d | |||
| abcec3bcdc | |||
| bdd14eec70 | |||
| 44e7e219a4 | |||
| 
						 | 
					ec51beb8ea | ||
| 
						 | 
					433618e71d | ||
| 812b72f10d | |||
| 
						 | 
					05f10ab51d | ||
| 
						 | 
					e7828fd277 | ||
| 58457487d1 | |||
| 
						 | 
					6c54c223c5 | ||
| 
						 | 
					b2cc509f8e | ||
| b6236e89b1 | |||
| cbc7cbc574 | |||
| b5b952e1cc | |||
| 33ed9f15fa | |||
| c85c6e4323 | |||
| 30d22b34e1 | |||
| 3d3fa2ccee | |||
| f960ece594 | |||
| 949675b3a2 | |||
| f52815abe6 | |||
| 
						 | 
					ac4cea0c7e | ||
| 
						 | 
					93fea84c79 | ||
| a06682de3f | |||
| e1773dae03 | |||
| f6d866907c | |||
| 7fe8d7e72c | |||
| 1e4a33a703 | |||
| d1ad913bab | |||
| 
						 | 
					38edf00925 | ||
| 
						 | 
					bf231f7157 | ||
| 04e2471a54 | |||
| 
						 | 
					9e2ce5f636 | ||
| 
						 | 
					8a54c046d9 | ||
| 3fa702cc12 | |||
| 8ebff703ee | |||
| 
						 | 
					02e267e647 | ||
| 
						 | 
					a6ffba4cf8 | ||
| 3de4d5c5f2 | |||
| c6c2d1c3b1 | |||
| 
						 | 
					1bbd749094 | ||
| 
						 | 
					073b4b8e20 | ||
| 3ec82a6a41 | |||
| 7c83268e0c | |||
| 49cb1e6877 | |||
| 
						 | 
					481dde003a | ||
| 
						 | 
					43e54e8ee7 | ||
| 28dbe075a4 | |||
| 
						 | 
					4571786780 | ||
| 
						 | 
					21cef13168 | ||
| 5f5e0ffc69 | |||
| 4d0841bd32 | |||
| b6d3b17300 | |||
| dad71db912 | |||
| 94c7f803cc | |||
| 0dae8cd16d | |||
| 
						 | 
					1fd547893f | ||
| 
						 | 
					ad5812df96 | ||
| 
						 | 
					c01106e389 | ||
| 021182e873 | |||
| 
						 | 
					71834ef906 | ||
| 
						 | 
					412ec6ab0c | ||
| 9aca4874c1 | |||
| 
						 | 
					c9d25e5e88 | ||
| 
						 | 
					610090c2a0 | ||
| 83917eaf4a | |||
| 
						 | 
					d64e9b9535 | ||
| 
						 | 
					b0f44c2332 | ||
| 8ae9efe4bd | |||
| 
						 | 
					15358fd7e2 | ||
| 
						 | 
					dfabc9ed23 | ||
| 78f6165cfc | |||
| 
						 | 
					7944824ffe | ||
| 984cf2e7d5 | |||
| 
						 | 
					07bc6aab69 | ||
| 
						 | 
					7a14b2846a | ||
| db7d4745dd | |||
| 6b99175574 | |||
| 
						 | 
					34aeb029b5 | ||
| 
						 | 
					caf614ca35 | ||
| b8f9d3626f | |||
| 
						 | 
					c8913f192c | ||
| 
						 | 
					0fa651fccf | ||
| 33782e189c | |||
| ee828ec4a7 | |||
| e75d2f1810 | |||
| ff9ee438ae | |||
| cb9456358f | |||
| 23334b5017 | |||
| 63e9100368 | |||
| 2e5e423a38 | |||
| 3b8c8b047b | |||
| d9b354f0c4 | |||
| 783cb0c3fe | |||
| 17f31863f9 | 
							
								
								
									
										12
									
								
								.env.dev
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								.env.dev
									
									
									
									
									
								
							@@ -1,8 +1,8 @@
 | 
				
			|||||||
###
 | 
					###
 | 
				
			||||||
 # @Author: Do not edit
 | 
					 # @Author: Do not edit
 | 
				
			||||||
 # @Date: 2023-08-29 09:40:39
 | 
					 # @Date: 2023-08-29 09:40:39
 | 
				
			||||||
 # @LastEditTime: 2024-03-25 15:59:53
 | 
					 # @LastEditTime: 2024-04-08 16:46:49
 | 
				
			||||||
 # @LastEditors: zhp
 | 
					 # @LastEditors: DY
 | 
				
			||||||
 # @Description:
 | 
					 # @Description:
 | 
				
			||||||
###
 | 
					###
 | 
				
			||||||
# 开发环境配置
 | 
					# 开发环境配置
 | 
				
			||||||
@@ -18,15 +18,17 @@ VUE_APP_TITLE = MES系统
 | 
				
			|||||||
# VUE_APP_BASE_API = 'http://192.168.2.173:48080'
 | 
					# VUE_APP_BASE_API = 'http://192.168.2.173:48080'
 | 
				
			||||||
# VUE_APP_BASE_API = 'http://192.168.1.49:48082'
 | 
					# VUE_APP_BASE_API = 'http://192.168.1.49:48082'
 | 
				
			||||||
# VUE_APP_BASE_API = 'http://192.168.1.8:48082'
 | 
					# VUE_APP_BASE_API = 'http://192.168.1.8:48082'
 | 
				
			||||||
# VUE_APP_BASE_API = 'http://192.168.4.159:48080'
 | 
					# VUE_APP_BASE_API = 'http://192.168.4.173:9001'
 | 
				
			||||||
# VUE_APP_BASE_API = 'http://192.168.1.104:48082'
 | 
					# VUE_APP_BASE_API = 'http://192.168.1.104:48082'
 | 
				
			||||||
VUE_APP_BASE_API = 'http://192.168.0.33:48082'
 | 
					VUE_APP_BASE_API = 'http://192.168.0.33:48082'
 | 
				
			||||||
# VUE_APP_BASE_API = 'http://192.168.1.62:48082'
 | 
					# VUE_APP_BASE_API = 'http://192.168.1.62:48082'
 | 
				
			||||||
# VUE_APP_BASE_API = 'http://192.168.1.78:48082'
 | 
					# VUE_APP_BASE_API = 'http://192.168.1.78:48082'
 | 
				
			||||||
# VUE_APP_BASE_API = 'http://192.168.1.47:48082'
 | 
					# VUE_APP_BASE_API = 'http://192.168.1.47:48082'
 | 
				
			||||||
# socket地址
 | 
					# socket地址
 | 
				
			||||||
VUE_APP_Socket_API = 'ws://10.70.2.2:8080'
 | 
					# VUE_APP_Socket_API = 'ws://10.70.2.2:8080'
 | 
				
			||||||
VUE_APP_Socket_Dcs_API = 'ws://10.70.180.10:8081'
 | 
					# VUE_APP_Socket_Dcs_API = 'ws://10.70.180.10:8081'
 | 
				
			||||||
 | 
					VUE_APP_Socket_API = 'ws://192.168.0.33:48082'
 | 
				
			||||||
 | 
					VUE_APP_Socket_Dcs_API = 'ws://192.168.0.33:8080'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# 积木报表指向地址
 | 
					# 积木报表指向地址
 | 
				
			||||||
VUE_APP_JIMU_API = 'http://10.70.2.22:8080'
 | 
					VUE_APP_JIMU_API = 'http://10.70.2.22:8080'
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,3 +35,21 @@ export function getQoq(data) {
 | 
				
			|||||||
    data: data
 | 
					    data: data
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 获取能源设备树
 | 
				
			||||||
 | 
					export function getTree() {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/analysis/energy-analysis/getTree',
 | 
				
			||||||
 | 
					    method: 'get'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 导出(走势分析)
 | 
				
			||||||
 | 
					export function exportTrend(data) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/analysis/energy-analysis/exportTrend',
 | 
				
			||||||
 | 
					    method: 'post',
 | 
				
			||||||
 | 
					    responseType: 'blob',
 | 
				
			||||||
 | 
					    data: data
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -54,3 +54,27 @@ export function energyQuantityManualExport(data) {
 | 
				
			|||||||
    responseType: 'blob'
 | 
					    responseType: 'blob'
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					// 获得能源表名配置分页
 | 
				
			||||||
 | 
					export function energyTablePage(data) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/base/energy-table/page',
 | 
				
			||||||
 | 
					    method: 'post',
 | 
				
			||||||
 | 
					    data: data
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					// 获得能源表名配置
 | 
				
			||||||
 | 
					export function energyTableGet(query) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/base/energy-table/get',
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					    params: query
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					// 更新能源表名配置
 | 
				
			||||||
 | 
					export function energyTableUpdate(data) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/base/energy-table/update',
 | 
				
			||||||
 | 
					    method: 'put',
 | 
				
			||||||
 | 
					    data: data
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -68,3 +68,4 @@ export function exportEnergyTypeExcel(query) {
 | 
				
			|||||||
    responseType: 'blob'
 | 
					    responseType: 'blob'
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										20
									
								
								src/api/infra/apiAccessLog.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								src/api/infra/apiAccessLog.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					import request from '@/utils/request'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 获得API 访问日志分页
 | 
				
			||||||
 | 
					export function getApiAccessLogPage(query) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/api-access-log/page',
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					    params: query
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 导出API 访问日志 Excel
 | 
				
			||||||
 | 
					export function exportApiAccessLogExcel(query) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/api-access-log/export-excel',
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					    params: query,
 | 
				
			||||||
 | 
					    responseType: 'blob'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										28
									
								
								src/api/infra/apiErrorLog.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								src/api/infra/apiErrorLog.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					import request from '@/utils/request'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 更新 API 错误日志的处理状态
 | 
				
			||||||
 | 
					export function updateApiErrorLogProcess(id, processStatus) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/api-error-log/update-status?id=' + id + '&processStatus=' + processStatus,
 | 
				
			||||||
 | 
					    method: 'put',
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 获得API 错误日志分页
 | 
				
			||||||
 | 
					export function getApiErrorLogPage(query) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/api-error-log/page',
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					    params: query
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 导出API 错误日志 Excel
 | 
				
			||||||
 | 
					export function exportApiErrorLogExcel(query) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/api-error-log/export-excel',
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					    params: query,
 | 
				
			||||||
 | 
					    responseType: 'blob'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										90
									
								
								src/api/infra/codegen.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								src/api/infra/codegen.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,90 @@
 | 
				
			|||||||
 | 
					import request from '@/utils/request'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 获得表定义分页
 | 
				
			||||||
 | 
					export function getCodegenTablePage(query) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/codegen/table/page',
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					    params: query
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 获得表和字段的明细
 | 
				
			||||||
 | 
					export function getCodegenDetail(tableId) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/codegen/detail?tableId=' + tableId,
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 修改代码生成信息
 | 
				
			||||||
 | 
					export function updateCodegen(data) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/codegen/update',
 | 
				
			||||||
 | 
					    method: 'put',
 | 
				
			||||||
 | 
					    data: data
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 基于数据库的表结构,同步数据库的表和字段定义
 | 
				
			||||||
 | 
					export function syncCodegenFromDB(tableId) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/codegen/sync-from-db?tableId=' + tableId,
 | 
				
			||||||
 | 
					    method: 'put'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 基于 SQL 建表语句,同步数据库的表和字段定义
 | 
				
			||||||
 | 
					export function syncCodegenFromSQL(tableId, sql) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/codegen/sync-from-sql?tableId=' + tableId,
 | 
				
			||||||
 | 
					    method: 'put',
 | 
				
			||||||
 | 
					    headers:{
 | 
				
			||||||
 | 
					      'Content-type': 'application/x-www-form-urlencoded'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    data: 'tableId=' + tableId + "&sql=" + sql,
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 预览生成代码
 | 
				
			||||||
 | 
					export function previewCodegen(tableId) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/codegen/preview?tableId=' + tableId,
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 下载生成代码
 | 
				
			||||||
 | 
					export function downloadCodegen(tableId) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/codegen/download?tableId=' + tableId,
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					    responseType: 'blob'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 获得表定义分页
 | 
				
			||||||
 | 
					export function getSchemaTableList(query) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/codegen/db/table/list',
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					    params: query
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 基于数据库的表结构,创建代码生成器的表定义
 | 
				
			||||||
 | 
					export function createCodegenList(data) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/codegen/create-list',
 | 
				
			||||||
 | 
					    method: 'post',
 | 
				
			||||||
 | 
					    data: data
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 删除数据库的表和字段定义
 | 
				
			||||||
 | 
					export function deleteCodegen(tableId) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/codegen/delete?tableId=' + tableId,
 | 
				
			||||||
 | 
					    method: 'delete'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										62
									
								
								src/api/infra/config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								src/api/infra/config.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,62 @@
 | 
				
			|||||||
 | 
					import request from '@/utils/request'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 查询参数列表
 | 
				
			||||||
 | 
					export function listConfig(query) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/config/page',
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					    params: query
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 查询参数详细
 | 
				
			||||||
 | 
					export function getConfig(configId) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/config/get?id=' + configId,
 | 
				
			||||||
 | 
					    method: 'get'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 根据参数键名查询参数值
 | 
				
			||||||
 | 
					export function getConfigKey(configKey) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/config/get-value-by-key?key=' + configKey,
 | 
				
			||||||
 | 
					    method: 'get'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 新增参数配置
 | 
				
			||||||
 | 
					export function addConfig(data) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/config/create',
 | 
				
			||||||
 | 
					    method: 'post',
 | 
				
			||||||
 | 
					    data: data
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 修改参数配置
 | 
				
			||||||
 | 
					export function updateConfig(data) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/config/update',
 | 
				
			||||||
 | 
					    method: 'put',
 | 
				
			||||||
 | 
					    data: data
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 删除参数配置
 | 
				
			||||||
 | 
					export function delConfig(configId) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/config/delete?id=' + configId,
 | 
				
			||||||
 | 
					    method: 'delete'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 导出参数
 | 
				
			||||||
 | 
					export function exportConfig(query) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/config/export',
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					    params: query,
 | 
				
			||||||
 | 
					    responseType: 'blob'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										43
									
								
								src/api/infra/dataSourceConfig.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								src/api/infra/dataSourceConfig.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
				
			|||||||
 | 
					import request from '@/utils/request'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 创建数据源配置
 | 
				
			||||||
 | 
					export function createDataSourceConfig(data) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/data-source-config/create',
 | 
				
			||||||
 | 
					    method: 'post',
 | 
				
			||||||
 | 
					    data: data
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 更新数据源配置
 | 
				
			||||||
 | 
					export function updateDataSourceConfig(data) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/data-source-config/update',
 | 
				
			||||||
 | 
					    method: 'put',
 | 
				
			||||||
 | 
					    data: data
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 删除数据源配置
 | 
				
			||||||
 | 
					export function deleteDataSourceConfig(id) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/data-source-config/delete?id=' + id,
 | 
				
			||||||
 | 
					    method: 'delete'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 获得数据源配置
 | 
				
			||||||
 | 
					export function getDataSourceConfig(id) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/data-source-config/get?id=' + id,
 | 
				
			||||||
 | 
					    method: 'get'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 获得数据源配置列表
 | 
				
			||||||
 | 
					export function getDataSourceConfigList() {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/data-source-config/list',
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										26
									
								
								src/api/infra/dbDoc.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								src/api/infra/dbDoc.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					// 导出参数
 | 
				
			||||||
 | 
					import request from "@/utils/request";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function exportHtml() {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/db-doc/export-html',
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					    responseType: 'blob'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function exportWord() {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/db-doc/export-word',
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					    responseType: 'blob'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function exportMarkdown() {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/db-doc/export-markdown',
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					    responseType: 'blob'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										18
									
								
								src/api/infra/file.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								src/api/infra/file.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					import request from '@/utils/request'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 删除文件
 | 
				
			||||||
 | 
					export function deleteFile(id) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/file/delete?id=' + id,
 | 
				
			||||||
 | 
					    method: 'delete'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 获得文件分页
 | 
				
			||||||
 | 
					export function getFilePage(query) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/file/page',
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					    params: query
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										59
									
								
								src/api/infra/fileConfig.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								src/api/infra/fileConfig.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,59 @@
 | 
				
			|||||||
 | 
					import request from '@/utils/request'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 创建文件配置
 | 
				
			||||||
 | 
					export function createFileConfig(data) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/file-config/create',
 | 
				
			||||||
 | 
					    method: 'post',
 | 
				
			||||||
 | 
					    data: data
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 更新文件配置
 | 
				
			||||||
 | 
					export function updateFileConfig(data) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/file-config/update',
 | 
				
			||||||
 | 
					    method: 'put',
 | 
				
			||||||
 | 
					    data: data
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 更新文件配置为主配置
 | 
				
			||||||
 | 
					export function updateFileConfigMaster(id) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/file-config/update-master?id=' + id,
 | 
				
			||||||
 | 
					    method: 'put'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 删除文件配置
 | 
				
			||||||
 | 
					export function deleteFileConfig(id) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/file-config/delete?id=' + id,
 | 
				
			||||||
 | 
					    method: 'delete'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 获得文件配置
 | 
				
			||||||
 | 
					export function getFileConfig(id) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/file-config/get?id=' + id,
 | 
				
			||||||
 | 
					    method: 'get'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 获得文件配置分页
 | 
				
			||||||
 | 
					export function getFileConfigPage(query) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/file-config/page',
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					    params: query
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function testFileConfig(id) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/file-config/test?id=' + id,
 | 
				
			||||||
 | 
					    method: 'get'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										82
									
								
								src/api/infra/job.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								src/api/infra/job.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,82 @@
 | 
				
			|||||||
 | 
					import request from '@/utils/request'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 查询定时任务调度列表
 | 
				
			||||||
 | 
					export function listJob(query) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/job/page',
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					    params: query
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 查询定时任务调度详细
 | 
				
			||||||
 | 
					export function getJob(jobId) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/job/get?id=' + jobId,
 | 
				
			||||||
 | 
					    method: 'get'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 新增定时任务调度
 | 
				
			||||||
 | 
					export function addJob(data) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/job/create',
 | 
				
			||||||
 | 
					    method: 'post',
 | 
				
			||||||
 | 
					    data: data
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 修改定时任务调度
 | 
				
			||||||
 | 
					export function updateJob(data) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/job/update',
 | 
				
			||||||
 | 
					    method: 'put',
 | 
				
			||||||
 | 
					    data: data
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 删除定时任务调度
 | 
				
			||||||
 | 
					export function delJob(jobId) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/job/delete?id=' + jobId,
 | 
				
			||||||
 | 
					    method: 'delete'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 导出定时任务调度
 | 
				
			||||||
 | 
					export function exportJob(query) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/job/export-excel',
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					    params: query,
 | 
				
			||||||
 | 
					    responseType: 'blob'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 任务状态修改
 | 
				
			||||||
 | 
					export function updateJobStatus(jobId, status) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/job/update-status',
 | 
				
			||||||
 | 
					    method: 'put',
 | 
				
			||||||
 | 
					    headers:{
 | 
				
			||||||
 | 
					      'Content-type': 'application/x-www-form-urlencoded'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    data: 'id=' + jobId + "&status=" + status,
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 定时任务立即执行一次
 | 
				
			||||||
 | 
					export function runJob(jobId) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/job/trigger?id=' + jobId,
 | 
				
			||||||
 | 
					    method: 'put'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 获得定时任务的下 n 次执行时间
 | 
				
			||||||
 | 
					export function getJobNextTimes(jobId) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/job/get_next_times?id=' + jobId,
 | 
				
			||||||
 | 
					    method: 'get'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										28
									
								
								src/api/infra/jobLog.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								src/api/infra/jobLog.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					import request from '@/utils/request'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 获得定时任务
 | 
				
			||||||
 | 
					export function getJobLog(id) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/job-log/get?id=' + id,
 | 
				
			||||||
 | 
					    method: 'get'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 获得定时任务分页
 | 
				
			||||||
 | 
					export function getJobLogPage(query) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/job-log/page',
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					    params: query
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 导出定时任务 Excel
 | 
				
			||||||
 | 
					export function exportJobLogExcel(query) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/job-log/export-excel',
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					    params: query,
 | 
				
			||||||
 | 
					    responseType: 'blob'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										9
									
								
								src/api/infra/redis.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								src/api/infra/redis.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					import request from '@/utils/request'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 查询缓存详细
 | 
				
			||||||
 | 
					export function getCache() {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/redis/get-monitor-info',
 | 
				
			||||||
 | 
					    method: 'get'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										54
									
								
								src/api/infra/testDemo.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								src/api/infra/testDemo.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
				
			|||||||
 | 
					import request from '@/utils/request'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 创建字典类型
 | 
				
			||||||
 | 
					export function createTestDemo(data) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/test-demo/create',
 | 
				
			||||||
 | 
					    method: 'post',
 | 
				
			||||||
 | 
					    data: data
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 更新字典类型
 | 
				
			||||||
 | 
					export function updateTestDemo(data) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/test-demo/update',
 | 
				
			||||||
 | 
					    method: 'put',
 | 
				
			||||||
 | 
					    data: data
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 删除字典类型
 | 
				
			||||||
 | 
					export function deleteTestDemo(id) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/test-demo/delete?id=' + id,
 | 
				
			||||||
 | 
					    method: 'delete'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 获得字典类型
 | 
				
			||||||
 | 
					export function getTestDemo(id) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/test-demo/get?id=' + id,
 | 
				
			||||||
 | 
					    method: 'get'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 获得字典类型分页
 | 
				
			||||||
 | 
					export function getTestDemoPage(query) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/test-demo/page',
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					    params: query
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 导出字典类型 Excel
 | 
				
			||||||
 | 
					export function exportTestDemoExcel(query) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: '/infra/test-demo/export-excel',
 | 
				
			||||||
 | 
					    method: 'get',
 | 
				
			||||||
 | 
					    params: query,
 | 
				
			||||||
 | 
					    responseType: 'blob'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 141 KiB  | 
							
								
								
									
										160
									
								
								src/components/Crontab/day.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										160
									
								
								src/components/Crontab/day.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,160 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
						<el-form size="small">
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio v-model='radioValue' :label="1">
 | 
				
			||||||
 | 
									日,允许的通配符[, - * ? / L W]
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio v-model='radioValue' :label="2">
 | 
				
			||||||
 | 
									不指定
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio v-model='radioValue' :label="3">
 | 
				
			||||||
 | 
									周期从
 | 
				
			||||||
 | 
									<el-input-number v-model='cycle01' :min="1" :max="30" /> -
 | 
				
			||||||
 | 
									<el-input-number v-model='cycle02' :min="cycle01 ? cycle01 + 1 : 2" :max="31" /> 日
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio v-model='radioValue' :label="4">
 | 
				
			||||||
 | 
									从
 | 
				
			||||||
 | 
									<el-input-number v-model='average01' :min="1" :max="30" /> 号开始,每
 | 
				
			||||||
 | 
									<el-input-number v-model='average02' :min="1" :max="31 - average01 || 1" /> 日执行一次
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio v-model='radioValue' :label="5">
 | 
				
			||||||
 | 
									每月
 | 
				
			||||||
 | 
									<el-input-number v-model='workday' :min="1" :max="31" /> 号最近的那个工作日
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio v-model='radioValue' :label="6">
 | 
				
			||||||
 | 
									本月最后一天
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio v-model='radioValue' :label="7">
 | 
				
			||||||
 | 
									指定
 | 
				
			||||||
 | 
									<el-select clearable v-model="checkboxList" placeholder="可多选" multiple style="width:100%">
 | 
				
			||||||
 | 
										<el-option v-for="item in 31" :key="item" :value="item">{{item}}</el-option>
 | 
				
			||||||
 | 
									</el-select>
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
						</el-form>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
						data() {
 | 
				
			||||||
 | 
							return {
 | 
				
			||||||
 | 
								radioValue: 1,
 | 
				
			||||||
 | 
								workday: 1,
 | 
				
			||||||
 | 
								cycle01: 1,
 | 
				
			||||||
 | 
								cycle02: 2,
 | 
				
			||||||
 | 
								average01: 1,
 | 
				
			||||||
 | 
								average02: 1,
 | 
				
			||||||
 | 
								checkboxList: [],
 | 
				
			||||||
 | 
								checkNum: this.$options.propsData.check
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						name: 'crontab-day',
 | 
				
			||||||
 | 
						props: ['check', 'cron'],
 | 
				
			||||||
 | 
						methods: {
 | 
				
			||||||
 | 
							// 单选按钮值变化时
 | 
				
			||||||
 | 
							radioChange() {
 | 
				
			||||||
 | 
								('day rachange');
 | 
				
			||||||
 | 
								if (this.radioValue !== 2 && this.cron.week !== '?') {
 | 
				
			||||||
 | 
									this.$emit('update', 'week', '?', 'day')
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								switch (this.radioValue) {
 | 
				
			||||||
 | 
									case 1:
 | 
				
			||||||
 | 
										this.$emit('update', 'day', '*');
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 2:
 | 
				
			||||||
 | 
										this.$emit('update', 'day', '?');
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 3:
 | 
				
			||||||
 | 
										this.$emit('update', 'day', this.cycleTotal);
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 4:
 | 
				
			||||||
 | 
										this.$emit('update', 'day', this.averageTotal);
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 5:
 | 
				
			||||||
 | 
										this.$emit('update', 'day', this.workday + 'W');
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 6:
 | 
				
			||||||
 | 
										this.$emit('update', 'day', 'L');
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 7:
 | 
				
			||||||
 | 
										this.$emit('update', 'day', this.checkboxString);
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								('day rachange end');
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 周期两个值变化时
 | 
				
			||||||
 | 
							cycleChange() {
 | 
				
			||||||
 | 
								if (this.radioValue === '3') {
 | 
				
			||||||
 | 
									this.$emit('update', 'day', this.cycleTotal);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 平均两个值变化时
 | 
				
			||||||
 | 
							averageChange() {
 | 
				
			||||||
 | 
								if (this.radioValue === '4') {
 | 
				
			||||||
 | 
									this.$emit('update', 'day', this.averageTotal);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 最近工作日值变化时
 | 
				
			||||||
 | 
							workdayChange() {
 | 
				
			||||||
 | 
								if (this.radioValue === '5') {
 | 
				
			||||||
 | 
									this.$emit('update', 'day', this.workdayCheck + 'W');
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// checkbox值变化时
 | 
				
			||||||
 | 
							checkboxChange() {
 | 
				
			||||||
 | 
								if (this.radioValue === '7') {
 | 
				
			||||||
 | 
									this.$emit('update', 'day', this.checkboxString);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						watch: {
 | 
				
			||||||
 | 
							'radioValue': 'radioChange',
 | 
				
			||||||
 | 
							'cycleTotal': 'cycleChange',
 | 
				
			||||||
 | 
							'averageTotal': 'averageChange',
 | 
				
			||||||
 | 
							'workdayCheck': 'workdayChange',
 | 
				
			||||||
 | 
							'checkboxString': 'checkboxChange',
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						computed: {
 | 
				
			||||||
 | 
							// 计算两个周期值
 | 
				
			||||||
 | 
							cycleTotal: function () {
 | 
				
			||||||
 | 
								const cycle01 = this.checkNum(this.cycle01, 1, 30)
 | 
				
			||||||
 | 
								const cycle02 = this.checkNum(this.cycle02, cycle01 ? cycle01 + 1 : 2, 31, 31)
 | 
				
			||||||
 | 
								return cycle01 + '-' + cycle02;
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 计算平均用到的值
 | 
				
			||||||
 | 
							averageTotal: function () {
 | 
				
			||||||
 | 
								const average01 = this.checkNum(this.average01, 1, 30)
 | 
				
			||||||
 | 
								const average02 = this.checkNum(this.average02, 1, 31 - average01 || 0)
 | 
				
			||||||
 | 
								return average01 + '/' + average02;
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 计算工作日格式
 | 
				
			||||||
 | 
							workdayCheck: function () {
 | 
				
			||||||
 | 
								return this.checkNum(this.workday, 1, 31);
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 计算勾选的checkbox值合集
 | 
				
			||||||
 | 
							checkboxString: function () {
 | 
				
			||||||
 | 
								let str = this.checkboxList.join();
 | 
				
			||||||
 | 
								return str === '' ? '*' : str;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
							
								
								
									
										114
									
								
								src/components/Crontab/hour.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								src/components/Crontab/hour.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,114 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
						<el-form size="small">
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio v-model='radioValue' :label="1">
 | 
				
			||||||
 | 
									小时,允许的通配符[, - * /]
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio v-model='radioValue' :label="2">
 | 
				
			||||||
 | 
									周期从
 | 
				
			||||||
 | 
									<el-input-number v-model='cycle01' :min="0" :max="22" /> -
 | 
				
			||||||
 | 
									<el-input-number v-model='cycle02' :min="cycle01 ? cycle01 + 1 : 1" :max="23" /> 小时
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio v-model='radioValue' :label="3">
 | 
				
			||||||
 | 
									从
 | 
				
			||||||
 | 
									<el-input-number v-model='average01' :min="0" :max="22" /> 小时开始,每
 | 
				
			||||||
 | 
									<el-input-number v-model='average02' :min="1" :max="23 - average01 || 0" /> 小时执行一次
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio v-model='radioValue' :label="4">
 | 
				
			||||||
 | 
									指定
 | 
				
			||||||
 | 
									<el-select clearable v-model="checkboxList" placeholder="可多选" multiple style="width:100%">
 | 
				
			||||||
 | 
										<el-option v-for="item in 24" :key="item" :value="item-1">{{item-1}}</el-option>
 | 
				
			||||||
 | 
									</el-select>
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
						</el-form>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
						data() {
 | 
				
			||||||
 | 
							return {
 | 
				
			||||||
 | 
								radioValue: 1,
 | 
				
			||||||
 | 
								cycle01: 0,
 | 
				
			||||||
 | 
								cycle02: 1,
 | 
				
			||||||
 | 
								average01: 0,
 | 
				
			||||||
 | 
								average02: 1,
 | 
				
			||||||
 | 
								checkboxList: [],
 | 
				
			||||||
 | 
								checkNum: this.$options.propsData.check
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						name: 'crontab-hour',
 | 
				
			||||||
 | 
						props: ['check', 'cron'],
 | 
				
			||||||
 | 
						methods: {
 | 
				
			||||||
 | 
							// 单选按钮值变化时
 | 
				
			||||||
 | 
							radioChange() {
 | 
				
			||||||
 | 
								switch (this.radioValue) {
 | 
				
			||||||
 | 
									case 1:
 | 
				
			||||||
 | 
					        	this.$emit('update', 'hour', '*')
 | 
				
			||||||
 | 
					        	break;
 | 
				
			||||||
 | 
									case 2:
 | 
				
			||||||
 | 
										this.$emit('update', 'hour', this.cycleTotal);
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 3:
 | 
				
			||||||
 | 
										this.$emit('update', 'hour', this.averageTotal);
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 4:
 | 
				
			||||||
 | 
										this.$emit('update', 'hour', this.checkboxString);
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 周期两个值变化时
 | 
				
			||||||
 | 
							cycleChange() {
 | 
				
			||||||
 | 
								if (this.radioValue === '2') {
 | 
				
			||||||
 | 
									this.$emit('update', 'hour', this.cycleTotal);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 平均两个值变化时
 | 
				
			||||||
 | 
							averageChange() {
 | 
				
			||||||
 | 
								if (this.radioValue === '3') {
 | 
				
			||||||
 | 
									this.$emit('update', 'hour', this.averageTotal);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// checkbox值变化时
 | 
				
			||||||
 | 
							checkboxChange() {
 | 
				
			||||||
 | 
								if (this.radioValue === '4') {
 | 
				
			||||||
 | 
									this.$emit('update', 'hour', this.checkboxString);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						watch: {
 | 
				
			||||||
 | 
							'radioValue': 'radioChange',
 | 
				
			||||||
 | 
							'cycleTotal': 'cycleChange',
 | 
				
			||||||
 | 
							'averageTotal': 'averageChange',
 | 
				
			||||||
 | 
							'checkboxString': 'checkboxChange'
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						computed: {
 | 
				
			||||||
 | 
							// 计算两个周期值
 | 
				
			||||||
 | 
							cycleTotal: function () {
 | 
				
			||||||
 | 
								const cycle01 = this.checkNum(this.cycle01, 0, 22)
 | 
				
			||||||
 | 
								const cycle02 = this.checkNum(this.cycle02, cycle01 ? cycle01 + 1 : 1, 23)
 | 
				
			||||||
 | 
								return cycle01 + '-' + cycle02;
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 计算平均用到的值
 | 
				
			||||||
 | 
							averageTotal: function () {
 | 
				
			||||||
 | 
								const average01 = this.checkNum(this.average01, 0, 22)
 | 
				
			||||||
 | 
								const average02 = this.checkNum(this.average02, 1, 23 - average01 || 0)
 | 
				
			||||||
 | 
								return average01 + '/' + average02;
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 计算勾选的checkbox值合集
 | 
				
			||||||
 | 
							checkboxString: function () {
 | 
				
			||||||
 | 
								let str = this.checkboxList.join();
 | 
				
			||||||
 | 
								return str === '' ? '*' : str;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
							
								
								
									
										430
									
								
								src/components/Crontab/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										430
									
								
								src/components/Crontab/index.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,430 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <div>
 | 
				
			||||||
 | 
					    <el-tabs type="border-card">
 | 
				
			||||||
 | 
					      <el-tab-pane label="秒" v-if="shouldHide('second')">
 | 
				
			||||||
 | 
					        <CrontabSecond
 | 
				
			||||||
 | 
					          @update="updateCrontabValue"
 | 
				
			||||||
 | 
					          :check="checkNumber"
 | 
				
			||||||
 | 
					          :cron="crontabValueObj"
 | 
				
			||||||
 | 
					          ref="cronsecond"
 | 
				
			||||||
 | 
					        />
 | 
				
			||||||
 | 
					      </el-tab-pane>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <el-tab-pane label="分钟" v-if="shouldHide('min')">
 | 
				
			||||||
 | 
					        <CrontabMin
 | 
				
			||||||
 | 
					          @update="updateCrontabValue"
 | 
				
			||||||
 | 
					          :check="checkNumber"
 | 
				
			||||||
 | 
					          :cron="crontabValueObj"
 | 
				
			||||||
 | 
					          ref="cronmin"
 | 
				
			||||||
 | 
					        />
 | 
				
			||||||
 | 
					      </el-tab-pane>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <el-tab-pane label="小时" v-if="shouldHide('hour')">
 | 
				
			||||||
 | 
					        <CrontabHour
 | 
				
			||||||
 | 
					          @update="updateCrontabValue"
 | 
				
			||||||
 | 
					          :check="checkNumber"
 | 
				
			||||||
 | 
					          :cron="crontabValueObj"
 | 
				
			||||||
 | 
					          ref="cronhour"
 | 
				
			||||||
 | 
					        />
 | 
				
			||||||
 | 
					      </el-tab-pane>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <el-tab-pane label="日" v-if="shouldHide('day')">
 | 
				
			||||||
 | 
					        <CrontabDay
 | 
				
			||||||
 | 
					          @update="updateCrontabValue"
 | 
				
			||||||
 | 
					          :check="checkNumber"
 | 
				
			||||||
 | 
					          :cron="crontabValueObj"
 | 
				
			||||||
 | 
					          ref="cronday"
 | 
				
			||||||
 | 
					        />
 | 
				
			||||||
 | 
					      </el-tab-pane>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <el-tab-pane label="月" v-if="shouldHide('month')">
 | 
				
			||||||
 | 
					        <CrontabMonth
 | 
				
			||||||
 | 
					          @update="updateCrontabValue"
 | 
				
			||||||
 | 
					          :check="checkNumber"
 | 
				
			||||||
 | 
					          :cron="crontabValueObj"
 | 
				
			||||||
 | 
					          ref="cronmonth"
 | 
				
			||||||
 | 
					        />
 | 
				
			||||||
 | 
					      </el-tab-pane>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <el-tab-pane label="周" v-if="shouldHide('week')">
 | 
				
			||||||
 | 
					        <CrontabWeek
 | 
				
			||||||
 | 
					          @update="updateCrontabValue"
 | 
				
			||||||
 | 
					          :check="checkNumber"
 | 
				
			||||||
 | 
					          :cron="crontabValueObj"
 | 
				
			||||||
 | 
					          ref="cronweek"
 | 
				
			||||||
 | 
					        />
 | 
				
			||||||
 | 
					      </el-tab-pane>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <el-tab-pane label="年" v-if="shouldHide('year')">
 | 
				
			||||||
 | 
					        <CrontabYear
 | 
				
			||||||
 | 
					          @update="updateCrontabValue"
 | 
				
			||||||
 | 
					          :check="checkNumber"
 | 
				
			||||||
 | 
					          :cron="crontabValueObj"
 | 
				
			||||||
 | 
					          ref="cronyear"
 | 
				
			||||||
 | 
					        />
 | 
				
			||||||
 | 
					      </el-tab-pane>
 | 
				
			||||||
 | 
					    </el-tabs>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <div class="popup-main">
 | 
				
			||||||
 | 
					      <div class="popup-result">
 | 
				
			||||||
 | 
					        <p class="title">时间表达式</p>
 | 
				
			||||||
 | 
					        <table>
 | 
				
			||||||
 | 
					          <thead>
 | 
				
			||||||
 | 
					            <th v-for="item of tabTitles" width="40" :key="item">{{item}}</th>
 | 
				
			||||||
 | 
					            <th>Cron 表达式</th>
 | 
				
			||||||
 | 
					          </thead>
 | 
				
			||||||
 | 
					          <tbody>
 | 
				
			||||||
 | 
					            <td>
 | 
				
			||||||
 | 
					              <span>{{crontabValueObj.second}}</span>
 | 
				
			||||||
 | 
					            </td>
 | 
				
			||||||
 | 
					            <td>
 | 
				
			||||||
 | 
					              <span>{{crontabValueObj.min}}</span>
 | 
				
			||||||
 | 
					            </td>
 | 
				
			||||||
 | 
					            <td>
 | 
				
			||||||
 | 
					              <span>{{crontabValueObj.hour}}</span>
 | 
				
			||||||
 | 
					            </td>
 | 
				
			||||||
 | 
					            <td>
 | 
				
			||||||
 | 
					              <span>{{crontabValueObj.day}}</span>
 | 
				
			||||||
 | 
					            </td>
 | 
				
			||||||
 | 
					            <td>
 | 
				
			||||||
 | 
					              <span>{{crontabValueObj.month}}</span>
 | 
				
			||||||
 | 
					            </td>
 | 
				
			||||||
 | 
					            <td>
 | 
				
			||||||
 | 
					              <span>{{crontabValueObj.week}}</span>
 | 
				
			||||||
 | 
					            </td>
 | 
				
			||||||
 | 
					            <td>
 | 
				
			||||||
 | 
					              <span>{{crontabValueObj.year}}</span>
 | 
				
			||||||
 | 
					            </td>
 | 
				
			||||||
 | 
					            <td>
 | 
				
			||||||
 | 
					              <span>{{crontabValueString}}</span>
 | 
				
			||||||
 | 
					            </td>
 | 
				
			||||||
 | 
					          </tbody>
 | 
				
			||||||
 | 
					        </table>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					      <CrontabResult :ex="crontabValueString"></CrontabResult>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <div class="pop_btn">
 | 
				
			||||||
 | 
					        <el-button size="small" type="primary" @click="submitFill">确定</el-button>
 | 
				
			||||||
 | 
					        <el-button size="small" type="warning" @click="clearCron">重置</el-button>
 | 
				
			||||||
 | 
					        <el-button size="small" @click="hidePopup">取消</el-button>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					import CrontabSecond from "./second.vue";
 | 
				
			||||||
 | 
					import CrontabMin from "./min.vue";
 | 
				
			||||||
 | 
					import CrontabHour from "./hour.vue";
 | 
				
			||||||
 | 
					import CrontabDay from "./day.vue";
 | 
				
			||||||
 | 
					import CrontabMonth from "./month.vue";
 | 
				
			||||||
 | 
					import CrontabWeek from "./week.vue";
 | 
				
			||||||
 | 
					import CrontabYear from "./year.vue";
 | 
				
			||||||
 | 
					import CrontabResult from "./result.vue";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  data() {
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      tabTitles: ["秒", "分钟", "小时", "日", "月", "周", "年"],
 | 
				
			||||||
 | 
					      tabActive: 0,
 | 
				
			||||||
 | 
					      myindex: 0,
 | 
				
			||||||
 | 
					      crontabValueObj: {
 | 
				
			||||||
 | 
					        second: "*",
 | 
				
			||||||
 | 
					        min: "*",
 | 
				
			||||||
 | 
					        hour: "*",
 | 
				
			||||||
 | 
					        day: "*",
 | 
				
			||||||
 | 
					        month: "*",
 | 
				
			||||||
 | 
					        week: "?",
 | 
				
			||||||
 | 
					        year: "",
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  name: "vcrontab",
 | 
				
			||||||
 | 
					  props: ["expression", "hideComponent"],
 | 
				
			||||||
 | 
					  methods: {
 | 
				
			||||||
 | 
					    shouldHide(key) {
 | 
				
			||||||
 | 
					      return !(this.hideComponent && this.hideComponent.includes(key));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    resolveExp() {
 | 
				
			||||||
 | 
					      // 反解析 表达式
 | 
				
			||||||
 | 
					      if (this.expression) {
 | 
				
			||||||
 | 
					        let arr = this.expression.split(" ");
 | 
				
			||||||
 | 
					        if (arr.length >= 6) {
 | 
				
			||||||
 | 
					          //6 位以上是合法表达式
 | 
				
			||||||
 | 
					          let obj = {
 | 
				
			||||||
 | 
					            second: arr[0],
 | 
				
			||||||
 | 
					            min: arr[1],
 | 
				
			||||||
 | 
					            hour: arr[2],
 | 
				
			||||||
 | 
					            day: arr[3],
 | 
				
			||||||
 | 
					            month: arr[4],
 | 
				
			||||||
 | 
					            week: arr[5],
 | 
				
			||||||
 | 
					            year: arr[6] ? arr[6] : "",
 | 
				
			||||||
 | 
					          };
 | 
				
			||||||
 | 
					          this.crontabValueObj = {
 | 
				
			||||||
 | 
					            ...obj,
 | 
				
			||||||
 | 
					          };
 | 
				
			||||||
 | 
					          for (let i in obj) {
 | 
				
			||||||
 | 
					            if (obj[i]) this.changeRadio(i, obj[i]);
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        // 没有传入的表达式 则还原
 | 
				
			||||||
 | 
					        this.clearCron();
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    // tab切换值
 | 
				
			||||||
 | 
					    tabCheck(index) {
 | 
				
			||||||
 | 
					      this.tabActive = index;
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    // 由子组件触发,更改表达式组成的字段值
 | 
				
			||||||
 | 
					    updateCrontabValue(name, value, from) {
 | 
				
			||||||
 | 
					      "updateCrontabValue", name, value, from;
 | 
				
			||||||
 | 
					      this.crontabValueObj[name] = value;
 | 
				
			||||||
 | 
					      if (from && from !== name) {
 | 
				
			||||||
 | 
					        console.log(`来自组件 ${from} 改变了 ${name} ${value}`);
 | 
				
			||||||
 | 
					        this.changeRadio(name, value);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    // 赋值到组件
 | 
				
			||||||
 | 
					    changeRadio(name, value) {
 | 
				
			||||||
 | 
					      let arr = ["second", "min", "hour", "month"],
 | 
				
			||||||
 | 
					        refName = "cron" + name,
 | 
				
			||||||
 | 
					        insValue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (!this.$refs[refName]) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (arr.includes(name)) {
 | 
				
			||||||
 | 
					        if (value === "*") {
 | 
				
			||||||
 | 
					          insValue = 1;
 | 
				
			||||||
 | 
					        } else if (value.indexOf("-") > -1) {
 | 
				
			||||||
 | 
					          let indexArr = value.split("-");
 | 
				
			||||||
 | 
					          isNaN(indexArr[0])
 | 
				
			||||||
 | 
					            ? (this.$refs[refName].cycle01 = 0)
 | 
				
			||||||
 | 
					            : (this.$refs[refName].cycle01 = indexArr[0]);
 | 
				
			||||||
 | 
					          this.$refs[refName].cycle02 = indexArr[1];
 | 
				
			||||||
 | 
					          insValue = 2;
 | 
				
			||||||
 | 
					        } else if (value.indexOf("/") > -1) {
 | 
				
			||||||
 | 
					          let indexArr = value.split("/");
 | 
				
			||||||
 | 
					          isNaN(indexArr[0])
 | 
				
			||||||
 | 
					            ? (this.$refs[refName].average01 = 0)
 | 
				
			||||||
 | 
					            : (this.$refs[refName].average01 = indexArr[0]);
 | 
				
			||||||
 | 
					          this.$refs[refName].average02 = indexArr[1];
 | 
				
			||||||
 | 
					          insValue = 3;
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					          insValue = 4;
 | 
				
			||||||
 | 
					          this.$refs[refName].checkboxList = value.split(",");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      } else if (name === "day") {
 | 
				
			||||||
 | 
					        if (value === "*") {
 | 
				
			||||||
 | 
					          insValue = 1;
 | 
				
			||||||
 | 
					        } else if (value === "?") {
 | 
				
			||||||
 | 
					          insValue = 2;
 | 
				
			||||||
 | 
					        } else if (value.indexOf("-") > -1) {
 | 
				
			||||||
 | 
					          let indexArr = value.split("-");
 | 
				
			||||||
 | 
					          isNaN(indexArr[0])
 | 
				
			||||||
 | 
					            ? (this.$refs[refName].cycle01 = 0)
 | 
				
			||||||
 | 
					            : (this.$refs[refName].cycle01 = indexArr[0]);
 | 
				
			||||||
 | 
					          this.$refs[refName].cycle02 = indexArr[1];
 | 
				
			||||||
 | 
					          insValue = 3;
 | 
				
			||||||
 | 
					        } else if (value.indexOf("/") > -1) {
 | 
				
			||||||
 | 
					          let indexArr = value.split("/");
 | 
				
			||||||
 | 
					          isNaN(indexArr[0])
 | 
				
			||||||
 | 
					            ? (this.$refs[refName].average01 = 0)
 | 
				
			||||||
 | 
					            : (this.$refs[refName].average01 = indexArr[0]);
 | 
				
			||||||
 | 
					          this.$refs[refName].average02 = indexArr[1];
 | 
				
			||||||
 | 
					          insValue = 4;
 | 
				
			||||||
 | 
					        } else if (value.indexOf("W") > -1) {
 | 
				
			||||||
 | 
					          let indexArr = value.split("W");
 | 
				
			||||||
 | 
					          isNaN(indexArr[0])
 | 
				
			||||||
 | 
					            ? (this.$refs[refName].workday = 0)
 | 
				
			||||||
 | 
					            : (this.$refs[refName].workday = indexArr[0]);
 | 
				
			||||||
 | 
					          insValue = 5;
 | 
				
			||||||
 | 
					        } else if (value === "L") {
 | 
				
			||||||
 | 
					          insValue = 6;
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					          this.$refs[refName].checkboxList = value.split(",");
 | 
				
			||||||
 | 
					          insValue = 7;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      } else if (name === "week") {
 | 
				
			||||||
 | 
					        if (value === "*") {
 | 
				
			||||||
 | 
					          insValue = 1;
 | 
				
			||||||
 | 
					        } else if (value === "?") {
 | 
				
			||||||
 | 
					          insValue = 2;
 | 
				
			||||||
 | 
					        } else if (value.indexOf("-") > -1) {
 | 
				
			||||||
 | 
					          let indexArr = value.split("-");
 | 
				
			||||||
 | 
					          isNaN(indexArr[0])
 | 
				
			||||||
 | 
					            ? (this.$refs[refName].cycle01 = 0)
 | 
				
			||||||
 | 
					            : (this.$refs[refName].cycle01 = indexArr[0]);
 | 
				
			||||||
 | 
					          this.$refs[refName].cycle02 = indexArr[1];
 | 
				
			||||||
 | 
					          insValue = 3;
 | 
				
			||||||
 | 
					        } else if (value.indexOf("#") > -1) {
 | 
				
			||||||
 | 
					          let indexArr = value.split("#");
 | 
				
			||||||
 | 
					          isNaN(indexArr[0])
 | 
				
			||||||
 | 
					            ? (this.$refs[refName].average01 = 1)
 | 
				
			||||||
 | 
					            : (this.$refs[refName].average01 = indexArr[0]);
 | 
				
			||||||
 | 
					          this.$refs[refName].average02 = indexArr[1];
 | 
				
			||||||
 | 
					          insValue = 4;
 | 
				
			||||||
 | 
					        } else if (value.indexOf("L") > -1) {
 | 
				
			||||||
 | 
					          let indexArr = value.split("L");
 | 
				
			||||||
 | 
					          isNaN(indexArr[0])
 | 
				
			||||||
 | 
					            ? (this.$refs[refName].weekday = 1)
 | 
				
			||||||
 | 
					            : (this.$refs[refName].weekday = indexArr[0]);
 | 
				
			||||||
 | 
					          insValue = 5;
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					          this.$refs[refName].checkboxList = value.split(",");
 | 
				
			||||||
 | 
					          insValue = 6;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      } else if (name === "year") {
 | 
				
			||||||
 | 
					        if (value === "") {
 | 
				
			||||||
 | 
					          insValue = 1;
 | 
				
			||||||
 | 
					        } else if (value === "*") {
 | 
				
			||||||
 | 
					          insValue = 2;
 | 
				
			||||||
 | 
					        } else if (value.indexOf("-") > -1) {
 | 
				
			||||||
 | 
					          insValue = 3;
 | 
				
			||||||
 | 
					        } else if (value.indexOf("/") > -1) {
 | 
				
			||||||
 | 
					          insValue = 4;
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					          this.$refs[refName].checkboxList = value.split(",");
 | 
				
			||||||
 | 
					          insValue = 5;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      this.$refs[refName].radioValue = insValue;
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    // 表单选项的子组件校验数字格式(通过-props传递)
 | 
				
			||||||
 | 
					    checkNumber(value, minLimit, maxLimit) {
 | 
				
			||||||
 | 
					      // 检查必须为整数
 | 
				
			||||||
 | 
					      value = Math.floor(value);
 | 
				
			||||||
 | 
					      if (value < minLimit) {
 | 
				
			||||||
 | 
					        value = minLimit;
 | 
				
			||||||
 | 
					      } else if (value > maxLimit) {
 | 
				
			||||||
 | 
					        value = maxLimit;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      return value;
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    // 隐藏弹窗
 | 
				
			||||||
 | 
					    hidePopup() {
 | 
				
			||||||
 | 
					      this.$emit("hide");
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    // 填充表达式
 | 
				
			||||||
 | 
					    submitFill() {
 | 
				
			||||||
 | 
					      this.$emit("fill", this.crontabValueString);
 | 
				
			||||||
 | 
					      this.hidePopup();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    clearCron() {
 | 
				
			||||||
 | 
					      // 还原选择项
 | 
				
			||||||
 | 
					      ("准备还原");
 | 
				
			||||||
 | 
					      this.crontabValueObj = {
 | 
				
			||||||
 | 
					        second: "*",
 | 
				
			||||||
 | 
					        min: "*",
 | 
				
			||||||
 | 
					        hour: "*",
 | 
				
			||||||
 | 
					        day: "*",
 | 
				
			||||||
 | 
					        month: "*",
 | 
				
			||||||
 | 
					        week: "?",
 | 
				
			||||||
 | 
					        year: "",
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					      for (let j in this.crontabValueObj) {
 | 
				
			||||||
 | 
					        this.changeRadio(j, this.crontabValueObj[j]);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  computed: {
 | 
				
			||||||
 | 
					    crontabValueString: function() {
 | 
				
			||||||
 | 
					      let obj = this.crontabValueObj;
 | 
				
			||||||
 | 
					      let str =
 | 
				
			||||||
 | 
					        obj.second +
 | 
				
			||||||
 | 
					        " " +
 | 
				
			||||||
 | 
					        obj.min +
 | 
				
			||||||
 | 
					        " " +
 | 
				
			||||||
 | 
					        obj.hour +
 | 
				
			||||||
 | 
					        " " +
 | 
				
			||||||
 | 
					        obj.day +
 | 
				
			||||||
 | 
					        " " +
 | 
				
			||||||
 | 
					        obj.month +
 | 
				
			||||||
 | 
					        " " +
 | 
				
			||||||
 | 
					        obj.week +
 | 
				
			||||||
 | 
					        (obj.year === "" ? "" : " " + obj.year);
 | 
				
			||||||
 | 
					      return str;
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  components: {
 | 
				
			||||||
 | 
					    CrontabSecond,
 | 
				
			||||||
 | 
					    CrontabMin,
 | 
				
			||||||
 | 
					    CrontabHour,
 | 
				
			||||||
 | 
					    CrontabDay,
 | 
				
			||||||
 | 
					    CrontabMonth,
 | 
				
			||||||
 | 
					    CrontabWeek,
 | 
				
			||||||
 | 
					    CrontabYear,
 | 
				
			||||||
 | 
					    CrontabResult,
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  watch: {
 | 
				
			||||||
 | 
					    expression: "resolveExp",
 | 
				
			||||||
 | 
					    hideComponent(value) {
 | 
				
			||||||
 | 
					      // 隐藏部分组件
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  mounted: function() {
 | 
				
			||||||
 | 
					    this.resolveExp();
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					<style scoped>
 | 
				
			||||||
 | 
					.pop_btn {
 | 
				
			||||||
 | 
					  text-align: center;
 | 
				
			||||||
 | 
					  margin-top: 20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.popup-main {
 | 
				
			||||||
 | 
					  position: relative;
 | 
				
			||||||
 | 
					  margin: 10px auto;
 | 
				
			||||||
 | 
					  background: #fff;
 | 
				
			||||||
 | 
					  border-radius: 5px;
 | 
				
			||||||
 | 
					  font-size: 12px;
 | 
				
			||||||
 | 
					  overflow: hidden;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.popup-title {
 | 
				
			||||||
 | 
					  overflow: hidden;
 | 
				
			||||||
 | 
					  line-height: 34px;
 | 
				
			||||||
 | 
					  padding-top: 6px;
 | 
				
			||||||
 | 
					  background: #f2f2f2;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.popup-result {
 | 
				
			||||||
 | 
					  box-sizing: border-box;
 | 
				
			||||||
 | 
					  line-height: 24px;
 | 
				
			||||||
 | 
					  margin: 25px auto;
 | 
				
			||||||
 | 
					  padding: 15px 10px 10px;
 | 
				
			||||||
 | 
					  border: 1px solid #ccc;
 | 
				
			||||||
 | 
					  position: relative;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.popup-result .title {
 | 
				
			||||||
 | 
					  position: absolute;
 | 
				
			||||||
 | 
					  top: -28px;
 | 
				
			||||||
 | 
					  left: 50%;
 | 
				
			||||||
 | 
					  width: 140px;
 | 
				
			||||||
 | 
					  font-size: 14px;
 | 
				
			||||||
 | 
					  margin-left: -70px;
 | 
				
			||||||
 | 
					  text-align: center;
 | 
				
			||||||
 | 
					  line-height: 30px;
 | 
				
			||||||
 | 
					  background: #fff;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.popup-result table {
 | 
				
			||||||
 | 
					  text-align: center;
 | 
				
			||||||
 | 
					  width: 100%;
 | 
				
			||||||
 | 
					  margin: 0 auto;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.popup-result table span {
 | 
				
			||||||
 | 
					  display: block;
 | 
				
			||||||
 | 
					  width: 100%;
 | 
				
			||||||
 | 
					  font-family: arial;
 | 
				
			||||||
 | 
					  line-height: 30px;
 | 
				
			||||||
 | 
					  height: 30px;
 | 
				
			||||||
 | 
					  white-space: nowrap;
 | 
				
			||||||
 | 
					  overflow: hidden;
 | 
				
			||||||
 | 
					  border: 1px solid #e8e8e8;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.popup-result-scroll {
 | 
				
			||||||
 | 
					  font-size: 12px;
 | 
				
			||||||
 | 
					  line-height: 24px;
 | 
				
			||||||
 | 
					  height: 10em;
 | 
				
			||||||
 | 
					  overflow-y: auto;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
							
								
								
									
										116
									
								
								src/components/Crontab/min.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								src/components/Crontab/min.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,116 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
						<el-form size="small">
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio v-model='radioValue' :label="1">
 | 
				
			||||||
 | 
									分钟,允许的通配符[, - * /]
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio v-model='radioValue' :label="2">
 | 
				
			||||||
 | 
									周期从
 | 
				
			||||||
 | 
									<el-input-number v-model='cycle01' :min="0" :max="58" /> -
 | 
				
			||||||
 | 
									<el-input-number v-model='cycle02' :min="cycle01 ? cycle01 + 1 : 1" :max="59" /> 分钟
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio v-model='radioValue' :label="3">
 | 
				
			||||||
 | 
									从
 | 
				
			||||||
 | 
									<el-input-number v-model='average01' :min="0" :max="58" /> 分钟开始,每
 | 
				
			||||||
 | 
									<el-input-number v-model='average02' :min="1" :max="59 - average01 || 0" /> 分钟执行一次
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio v-model='radioValue' :label="4">
 | 
				
			||||||
 | 
									指定
 | 
				
			||||||
 | 
									<el-select clearable v-model="checkboxList" placeholder="可多选" multiple style="width:100%">
 | 
				
			||||||
 | 
										<el-option v-for="item in 60" :key="item" :value="item-1">{{item-1}}</el-option>
 | 
				
			||||||
 | 
									</el-select>
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
						</el-form>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
						data() {
 | 
				
			||||||
 | 
							return {
 | 
				
			||||||
 | 
								radioValue: 1,
 | 
				
			||||||
 | 
								cycle01: 1,
 | 
				
			||||||
 | 
								cycle02: 2,
 | 
				
			||||||
 | 
								average01: 0,
 | 
				
			||||||
 | 
								average02: 1,
 | 
				
			||||||
 | 
								checkboxList: [],
 | 
				
			||||||
 | 
								checkNum: this.$options.propsData.check
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						name: 'crontab-min',
 | 
				
			||||||
 | 
						props: ['check', 'cron'],
 | 
				
			||||||
 | 
						methods: {
 | 
				
			||||||
 | 
							// 单选按钮值变化时
 | 
				
			||||||
 | 
							radioChange() {
 | 
				
			||||||
 | 
								switch (this.radioValue) {
 | 
				
			||||||
 | 
									case 1:
 | 
				
			||||||
 | 
										this.$emit('update', 'min', '*', 'min');
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 2:
 | 
				
			||||||
 | 
										this.$emit('update', 'min', this.cycleTotal, 'min');
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 3:
 | 
				
			||||||
 | 
										this.$emit('update', 'min', this.averageTotal, 'min');
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 4:
 | 
				
			||||||
 | 
										this.$emit('update', 'min', this.checkboxString, 'min');
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 周期两个值变化时
 | 
				
			||||||
 | 
							cycleChange() {
 | 
				
			||||||
 | 
								if (this.radioValue === '2') {
 | 
				
			||||||
 | 
									this.$emit('update', 'min', this.cycleTotal, 'min');
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 平均两个值变化时
 | 
				
			||||||
 | 
							averageChange() {
 | 
				
			||||||
 | 
								if (this.radioValue === '3') {
 | 
				
			||||||
 | 
									this.$emit('update', 'min', this.averageTotal, 'min');
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// checkbox值变化时
 | 
				
			||||||
 | 
							checkboxChange() {
 | 
				
			||||||
 | 
								if (this.radioValue === '4') {
 | 
				
			||||||
 | 
									this.$emit('update', 'min', this.checkboxString, 'min');
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						watch: {
 | 
				
			||||||
 | 
							'radioValue': 'radioChange',
 | 
				
			||||||
 | 
							'cycleTotal': 'cycleChange',
 | 
				
			||||||
 | 
							'averageTotal': 'averageChange',
 | 
				
			||||||
 | 
							'checkboxString': 'checkboxChange',
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						computed: {
 | 
				
			||||||
 | 
							// 计算两个周期值
 | 
				
			||||||
 | 
							cycleTotal: function () {
 | 
				
			||||||
 | 
								const cycle01 = this.checkNum(this.cycle01, 0, 58)
 | 
				
			||||||
 | 
								const cycle02 = this.checkNum(this.cycle02, cycle01 ? cycle01 + 1 : 1, 59)
 | 
				
			||||||
 | 
								return cycle01 + '-' + cycle02;
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 计算平均用到的值
 | 
				
			||||||
 | 
							averageTotal: function () {
 | 
				
			||||||
 | 
								const average01 = this.checkNum(this.average01, 0, 58)
 | 
				
			||||||
 | 
								const average02 = this.checkNum(this.average02, 1, 59 - average01 || 0)
 | 
				
			||||||
 | 
								return average01 + '/' + average02;
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 计算勾选的checkbox值合集
 | 
				
			||||||
 | 
							checkboxString: function () {
 | 
				
			||||||
 | 
								let str = this.checkboxList.join();
 | 
				
			||||||
 | 
								return str === '' ? '*' : str;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
							
								
								
									
										114
									
								
								src/components/Crontab/month.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								src/components/Crontab/month.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,114 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
						<el-form size='small'>
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio v-model='radioValue' :label="1">
 | 
				
			||||||
 | 
									月,允许的通配符[, - * /]
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio v-model='radioValue' :label="2">
 | 
				
			||||||
 | 
									周期从
 | 
				
			||||||
 | 
									<el-input-number v-model='cycle01' :min="1" :max="11" /> -
 | 
				
			||||||
 | 
									<el-input-number v-model='cycle02' :min="cycle01 ? cycle01 + 1 : 2" :max="12" /> 月
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio v-model='radioValue' :label="3">
 | 
				
			||||||
 | 
									从
 | 
				
			||||||
 | 
									<el-input-number v-model='average01' :min="1" :max="11" /> 月开始,每
 | 
				
			||||||
 | 
									<el-input-number v-model='average02' :min="1" :max="12 - average01 || 0" /> 月月执行一次
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio v-model='radioValue' :label="4">
 | 
				
			||||||
 | 
									指定
 | 
				
			||||||
 | 
									<el-select clearable v-model="checkboxList" placeholder="可多选" multiple style="width:100%">
 | 
				
			||||||
 | 
										<el-option v-for="item in 12" :key="item" :value="item">{{item}}</el-option>
 | 
				
			||||||
 | 
									</el-select>
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
						</el-form>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
						data() {
 | 
				
			||||||
 | 
							return {
 | 
				
			||||||
 | 
								radioValue: 1,
 | 
				
			||||||
 | 
								cycle01: 1,
 | 
				
			||||||
 | 
								cycle02: 2,
 | 
				
			||||||
 | 
								average01: 1,
 | 
				
			||||||
 | 
								average02: 1,
 | 
				
			||||||
 | 
								checkboxList: [],
 | 
				
			||||||
 | 
								checkNum: this.check
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						name: 'crontab-month',
 | 
				
			||||||
 | 
						props: ['check', 'cron'],
 | 
				
			||||||
 | 
						methods: {
 | 
				
			||||||
 | 
							// 单选按钮值变化时
 | 
				
			||||||
 | 
							radioChange() {
 | 
				
			||||||
 | 
								switch (this.radioValue) {
 | 
				
			||||||
 | 
									case 1:
 | 
				
			||||||
 | 
										this.$emit('update', 'month', '*');
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 2:
 | 
				
			||||||
 | 
										this.$emit('update', 'month', this.cycleTotal);
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 3:
 | 
				
			||||||
 | 
										this.$emit('update', 'month', this.averageTotal);
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 4:
 | 
				
			||||||
 | 
										this.$emit('update', 'month', this.checkboxString);
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 周期两个值变化时
 | 
				
			||||||
 | 
							cycleChange() {
 | 
				
			||||||
 | 
								if (this.radioValue === '2') {
 | 
				
			||||||
 | 
									this.$emit('update', 'month', this.cycleTotal);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 平均两个值变化时
 | 
				
			||||||
 | 
							averageChange() {
 | 
				
			||||||
 | 
								if (this.radioValue === '3') {
 | 
				
			||||||
 | 
									this.$emit('update', 'month', this.averageTotal);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// checkbox值变化时
 | 
				
			||||||
 | 
							checkboxChange() {
 | 
				
			||||||
 | 
								if (this.radioValue === '4') {
 | 
				
			||||||
 | 
									this.$emit('update', 'month', this.checkboxString);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						watch: {
 | 
				
			||||||
 | 
							'radioValue': 'radioChange',
 | 
				
			||||||
 | 
							'cycleTotal': 'cycleChange',
 | 
				
			||||||
 | 
							'averageTotal': 'averageChange',
 | 
				
			||||||
 | 
							'checkboxString': 'checkboxChange'
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						computed: {
 | 
				
			||||||
 | 
							// 计算两个周期值
 | 
				
			||||||
 | 
							cycleTotal: function () {
 | 
				
			||||||
 | 
								const cycle01 = this.checkNum(this.cycle01, 1, 11)
 | 
				
			||||||
 | 
								const cycle02 = this.checkNum(this.cycle02, cycle01 ? cycle01 + 1 : 2, 12)
 | 
				
			||||||
 | 
								return cycle01 + '-' + cycle02;
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 计算平均用到的值
 | 
				
			||||||
 | 
							averageTotal: function () {
 | 
				
			||||||
 | 
								const average01 = this.checkNum(this.average01, 1, 11)
 | 
				
			||||||
 | 
								const average02 = this.checkNum(this.average02, 1, 12 - average01 || 0)
 | 
				
			||||||
 | 
								return average01 + '/' + average02;
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 计算勾选的checkbox值合集
 | 
				
			||||||
 | 
							checkboxString: function () {
 | 
				
			||||||
 | 
								let str = this.checkboxList.join();
 | 
				
			||||||
 | 
								return str === '' ? '*' : str;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
							
								
								
									
										559
									
								
								src/components/Crontab/result.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										559
									
								
								src/components/Crontab/result.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,559 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
						<div class="popup-result">
 | 
				
			||||||
 | 
							<p class="title">最近5次运行时间</p>
 | 
				
			||||||
 | 
							<ul class="popup-result-scroll">
 | 
				
			||||||
 | 
								<template v-if='isShow'>
 | 
				
			||||||
 | 
									<li v-for='item in resultList' :key="item">{{item}}</li>
 | 
				
			||||||
 | 
								</template>
 | 
				
			||||||
 | 
								<li v-else>计算结果中...</li>
 | 
				
			||||||
 | 
							</ul>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
						data() {
 | 
				
			||||||
 | 
							return {
 | 
				
			||||||
 | 
								dayRule: '',
 | 
				
			||||||
 | 
								dayRuleSup: '',
 | 
				
			||||||
 | 
								dateArr: [],
 | 
				
			||||||
 | 
								resultList: [],
 | 
				
			||||||
 | 
								isShow: false
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						name: 'crontab-result',
 | 
				
			||||||
 | 
						methods: {
 | 
				
			||||||
 | 
							// 表达式值变化时,开始去计算结果
 | 
				
			||||||
 | 
							expressionChange() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// 计算开始-隐藏结果
 | 
				
			||||||
 | 
								this.isShow = false;
 | 
				
			||||||
 | 
								// 获取规则数组[0秒、1分、2时、3日、4月、5星期、6年]
 | 
				
			||||||
 | 
								let ruleArr = this.$options.propsData.ex.split(' ');
 | 
				
			||||||
 | 
								// 用于记录进入循环的次数
 | 
				
			||||||
 | 
								let nums = 0;
 | 
				
			||||||
 | 
								// 用于暂时存符号时间规则结果的数组
 | 
				
			||||||
 | 
								let resultArr = [];
 | 
				
			||||||
 | 
								// 获取当前时间精确至[年、月、日、时、分、秒]
 | 
				
			||||||
 | 
								let nTime = new Date();
 | 
				
			||||||
 | 
								let nYear = nTime.getFullYear();
 | 
				
			||||||
 | 
								let nMonth = nTime.getMonth() + 1;
 | 
				
			||||||
 | 
								let nDay = nTime.getDate();
 | 
				
			||||||
 | 
								let nHour = nTime.getHours();
 | 
				
			||||||
 | 
								let nMin = nTime.getMinutes();
 | 
				
			||||||
 | 
								let nSecond = nTime.getSeconds();
 | 
				
			||||||
 | 
								// 根据规则获取到近100年可能年数组、月数组等等
 | 
				
			||||||
 | 
								this.getSecondArr(ruleArr[0]);
 | 
				
			||||||
 | 
								this.getMinArr(ruleArr[1]);
 | 
				
			||||||
 | 
								this.getHourArr(ruleArr[2]);
 | 
				
			||||||
 | 
								this.getDayArr(ruleArr[3]);
 | 
				
			||||||
 | 
								this.getMonthArr(ruleArr[4]);
 | 
				
			||||||
 | 
								this.getWeekArr(ruleArr[5]);
 | 
				
			||||||
 | 
								this.getYearArr(ruleArr[6], nYear);
 | 
				
			||||||
 | 
								// 将获取到的数组赋值-方便使用
 | 
				
			||||||
 | 
								let sDate = this.dateArr[0];
 | 
				
			||||||
 | 
								let mDate = this.dateArr[1];
 | 
				
			||||||
 | 
								let hDate = this.dateArr[2];
 | 
				
			||||||
 | 
								let DDate = this.dateArr[3];
 | 
				
			||||||
 | 
								let MDate = this.dateArr[4];
 | 
				
			||||||
 | 
								let YDate = this.dateArr[5];
 | 
				
			||||||
 | 
								// 获取当前时间在数组中的索引
 | 
				
			||||||
 | 
								let sIdx = this.getIndex(sDate, nSecond);
 | 
				
			||||||
 | 
								let mIdx = this.getIndex(mDate, nMin);
 | 
				
			||||||
 | 
								let hIdx = this.getIndex(hDate, nHour);
 | 
				
			||||||
 | 
								let DIdx = this.getIndex(DDate, nDay);
 | 
				
			||||||
 | 
								let MIdx = this.getIndex(MDate, nMonth);
 | 
				
			||||||
 | 
								let YIdx = this.getIndex(YDate, nYear);
 | 
				
			||||||
 | 
								// 重置月日时分秒的函数(后面用的比较多)
 | 
				
			||||||
 | 
								const resetSecond = function () {
 | 
				
			||||||
 | 
									sIdx = 0;
 | 
				
			||||||
 | 
									nSecond = sDate[sIdx]
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								const resetMin = function () {
 | 
				
			||||||
 | 
									mIdx = 0;
 | 
				
			||||||
 | 
									nMin = mDate[mIdx]
 | 
				
			||||||
 | 
									resetSecond();
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								const resetHour = function () {
 | 
				
			||||||
 | 
									hIdx = 0;
 | 
				
			||||||
 | 
									nHour = hDate[hIdx]
 | 
				
			||||||
 | 
									resetMin();
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								const resetDay = function () {
 | 
				
			||||||
 | 
									DIdx = 0;
 | 
				
			||||||
 | 
									nDay = DDate[DIdx]
 | 
				
			||||||
 | 
									resetHour();
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								const resetMonth = function () {
 | 
				
			||||||
 | 
									MIdx = 0;
 | 
				
			||||||
 | 
									nMonth = MDate[MIdx]
 | 
				
			||||||
 | 
									resetDay();
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								// 如果当前年份不为数组中当前值
 | 
				
			||||||
 | 
								if (nYear !== YDate[YIdx]) {
 | 
				
			||||||
 | 
									resetMonth();
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								// 如果当前月份不为数组中当前值
 | 
				
			||||||
 | 
								if (nMonth !== MDate[MIdx]) {
 | 
				
			||||||
 | 
									resetDay();
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								// 如果当前“日”不为数组中当前值
 | 
				
			||||||
 | 
								if (nDay !== DDate[DIdx]) {
 | 
				
			||||||
 | 
									resetHour();
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								// 如果当前“时”不为数组中当前值
 | 
				
			||||||
 | 
								if (nHour !== hDate[hIdx]) {
 | 
				
			||||||
 | 
									resetMin();
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								// 如果当前“分”不为数组中当前值
 | 
				
			||||||
 | 
								if (nMin !== mDate[mIdx]) {
 | 
				
			||||||
 | 
									resetSecond();
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// 循环年份数组
 | 
				
			||||||
 | 
								goYear: for (let Yi = YIdx; Yi < YDate.length; Yi++) {
 | 
				
			||||||
 | 
									let YY = YDate[Yi];
 | 
				
			||||||
 | 
									// 如果到达最大值时
 | 
				
			||||||
 | 
									if (nMonth > MDate[MDate.length - 1]) {
 | 
				
			||||||
 | 
										resetMonth();
 | 
				
			||||||
 | 
										continue;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									// 循环月份数组
 | 
				
			||||||
 | 
									goMonth: for (let Mi = MIdx; Mi < MDate.length; Mi++) {
 | 
				
			||||||
 | 
										// 赋值、方便后面运算
 | 
				
			||||||
 | 
										let MM = MDate[Mi];
 | 
				
			||||||
 | 
										MM = MM < 10 ? '0' + MM : MM;
 | 
				
			||||||
 | 
										// 如果到达最大值时
 | 
				
			||||||
 | 
										if (nDay > DDate[DDate.length - 1]) {
 | 
				
			||||||
 | 
											resetDay();
 | 
				
			||||||
 | 
											if (Mi === MDate.length - 1) {
 | 
				
			||||||
 | 
												resetMonth();
 | 
				
			||||||
 | 
												continue goYear;
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
											continue;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										// 循环日期数组
 | 
				
			||||||
 | 
										goDay: for (let Di = DIdx; Di < DDate.length; Di++) {
 | 
				
			||||||
 | 
											// 赋值、方便后面运算
 | 
				
			||||||
 | 
											let DD = DDate[Di];
 | 
				
			||||||
 | 
											let thisDD = DD < 10 ? '0' + DD : DD;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											// 如果到达最大值时
 | 
				
			||||||
 | 
											if (nHour > hDate[hDate.length - 1]) {
 | 
				
			||||||
 | 
												resetHour();
 | 
				
			||||||
 | 
												if (Di === DDate.length - 1) {
 | 
				
			||||||
 | 
													resetDay();
 | 
				
			||||||
 | 
													if (Mi === MDate.length - 1) {
 | 
				
			||||||
 | 
														resetMonth();
 | 
				
			||||||
 | 
														continue goYear;
 | 
				
			||||||
 | 
													}
 | 
				
			||||||
 | 
													continue goMonth;
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
												continue;
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											// 判断日期的合法性,不合法的话也是跳出当前循环
 | 
				
			||||||
 | 
											if (this.checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true && this.dayRule !== 'workDay' && this.dayRule !== 'lastWeek' && this.dayRule !== 'lastDay') {
 | 
				
			||||||
 | 
												resetDay();
 | 
				
			||||||
 | 
												continue goMonth;
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
											// 如果日期规则中有值时
 | 
				
			||||||
 | 
											if (this.dayRule === 'lastDay') {
 | 
				
			||||||
 | 
												// 如果不是合法日期则需要将前将日期调到合法日期即月末最后一天
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
												if (this.checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {
 | 
				
			||||||
 | 
													while (DD > 0 && this.checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {
 | 
				
			||||||
 | 
														DD--;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
														thisDD = DD < 10 ? '0' + DD : DD;
 | 
				
			||||||
 | 
													}
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
											} else if (this.dayRule === 'workDay') {
 | 
				
			||||||
 | 
												// 校验并调整如果是2月30号这种日期传进来时需调整至正常月底
 | 
				
			||||||
 | 
												if (this.checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {
 | 
				
			||||||
 | 
													while (DD > 0 && this.checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {
 | 
				
			||||||
 | 
														DD--;
 | 
				
			||||||
 | 
														thisDD = DD < 10 ? '0' + DD : DD;
 | 
				
			||||||
 | 
													}
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
												// 获取达到条件的日期是星期X
 | 
				
			||||||
 | 
												let thisWeek = this.formatDate(new Date(YY + '-' + MM + '-' + thisDD + ' 00:00:00'), 'week');
 | 
				
			||||||
 | 
												// 当星期日时
 | 
				
			||||||
 | 
												if (thisWeek === 1) {
 | 
				
			||||||
 | 
													// 先找下一个日,并判断是否为月底
 | 
				
			||||||
 | 
													DD++;
 | 
				
			||||||
 | 
													thisDD = DD < 10 ? '0' + DD : DD;
 | 
				
			||||||
 | 
													// 判断下一日已经不是合法日期
 | 
				
			||||||
 | 
													if (this.checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {
 | 
				
			||||||
 | 
														DD -= 3;
 | 
				
			||||||
 | 
													}
 | 
				
			||||||
 | 
												} else if (thisWeek === 7) {
 | 
				
			||||||
 | 
													// 当星期6时只需判断不是1号就可进行操作
 | 
				
			||||||
 | 
													if (this.dayRuleSup !== 1) {
 | 
				
			||||||
 | 
														DD--;
 | 
				
			||||||
 | 
													} else {
 | 
				
			||||||
 | 
														DD += 2;
 | 
				
			||||||
 | 
													}
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
											} else if (this.dayRule === 'weekDay') {
 | 
				
			||||||
 | 
												// 如果指定了是星期几
 | 
				
			||||||
 | 
												// 获取当前日期是属于星期几
 | 
				
			||||||
 | 
												let thisWeek = this.formatDate(new Date(YY + '-' + MM + '-' + DD + ' 00:00:00'), 'week');
 | 
				
			||||||
 | 
												// 校验当前星期是否在星期池(dayRuleSup)中
 | 
				
			||||||
 | 
												if (this.dayRuleSup.indexOf(thisWeek) < 0) {
 | 
				
			||||||
 | 
													// 如果到达最大值时
 | 
				
			||||||
 | 
													if (Di === DDate.length - 1) {
 | 
				
			||||||
 | 
														resetDay();
 | 
				
			||||||
 | 
														if (Mi === MDate.length - 1) {
 | 
				
			||||||
 | 
															resetMonth();
 | 
				
			||||||
 | 
															continue goYear;
 | 
				
			||||||
 | 
														}
 | 
				
			||||||
 | 
														continue goMonth;
 | 
				
			||||||
 | 
													}
 | 
				
			||||||
 | 
													continue;
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
											} else if (this.dayRule === 'assWeek') {
 | 
				
			||||||
 | 
												// 如果指定了是第几周的星期几
 | 
				
			||||||
 | 
												// 获取每月1号是属于星期几
 | 
				
			||||||
 | 
												let thisWeek = this.formatDate(new Date(YY + '-' + MM + '-' + DD + ' 00:00:00'), 'week');
 | 
				
			||||||
 | 
												if (this.dayRuleSup[1] >= thisWeek) {
 | 
				
			||||||
 | 
													DD = (this.dayRuleSup[0] - 1) * 7 + this.dayRuleSup[1] - thisWeek + 1;
 | 
				
			||||||
 | 
												} else {
 | 
				
			||||||
 | 
													DD = this.dayRuleSup[0] * 7 + this.dayRuleSup[1] - thisWeek + 1;
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
											} else if (this.dayRule === 'lastWeek') {
 | 
				
			||||||
 | 
												// 如果指定了每月最后一个星期几
 | 
				
			||||||
 | 
												// 校验并调整如果是2月30号这种日期传进来时需调整至正常月底
 | 
				
			||||||
 | 
												if (this.checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {
 | 
				
			||||||
 | 
													while (DD > 0 && this.checkDate(YY + '-' + MM + '-' + thisDD + ' 00:00:00') !== true) {
 | 
				
			||||||
 | 
														DD--;
 | 
				
			||||||
 | 
														thisDD = DD < 10 ? '0' + DD : DD;
 | 
				
			||||||
 | 
													}
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
												// 获取月末最后一天是星期几
 | 
				
			||||||
 | 
												let thisWeek = this.formatDate(new Date(YY + '-' + MM + '-' + thisDD + ' 00:00:00'), 'week');
 | 
				
			||||||
 | 
												// 找到要求中最近的那个星期几
 | 
				
			||||||
 | 
												if (this.dayRuleSup < thisWeek) {
 | 
				
			||||||
 | 
													DD -= thisWeek - this.dayRuleSup;
 | 
				
			||||||
 | 
												} else if (this.dayRuleSup > thisWeek) {
 | 
				
			||||||
 | 
													DD -= 7 - (this.dayRuleSup - thisWeek)
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
											// 判断时间值是否小于10置换成“05”这种格式
 | 
				
			||||||
 | 
											DD = DD < 10 ? '0' + DD : DD;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											// 循环“时”数组
 | 
				
			||||||
 | 
											goHour: for (let hi = hIdx; hi < hDate.length; hi++) {
 | 
				
			||||||
 | 
												let hh = hDate[hi] < 10 ? '0' + hDate[hi] : hDate[hi]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
												// 如果到达最大值时
 | 
				
			||||||
 | 
												if (nMin > mDate[mDate.length - 1]) {
 | 
				
			||||||
 | 
													resetMin();
 | 
				
			||||||
 | 
													if (hi === hDate.length - 1) {
 | 
				
			||||||
 | 
														resetHour();
 | 
				
			||||||
 | 
														if (Di === DDate.length - 1) {
 | 
				
			||||||
 | 
															resetDay();
 | 
				
			||||||
 | 
															if (Mi === MDate.length - 1) {
 | 
				
			||||||
 | 
																resetMonth();
 | 
				
			||||||
 | 
																continue goYear;
 | 
				
			||||||
 | 
															}
 | 
				
			||||||
 | 
															continue goMonth;
 | 
				
			||||||
 | 
														}
 | 
				
			||||||
 | 
														continue goDay;
 | 
				
			||||||
 | 
													}
 | 
				
			||||||
 | 
													continue;
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
												// 循环"分"数组
 | 
				
			||||||
 | 
												goMin: for (let mi = mIdx; mi < mDate.length; mi++) {
 | 
				
			||||||
 | 
													let mm = mDate[mi] < 10 ? '0' + mDate[mi] : mDate[mi];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
													// 如果到达最大值时
 | 
				
			||||||
 | 
													if (nSecond > sDate[sDate.length - 1]) {
 | 
				
			||||||
 | 
														resetSecond();
 | 
				
			||||||
 | 
														if (mi === mDate.length - 1) {
 | 
				
			||||||
 | 
															resetMin();
 | 
				
			||||||
 | 
															if (hi === hDate.length - 1) {
 | 
				
			||||||
 | 
																resetHour();
 | 
				
			||||||
 | 
																if (Di === DDate.length - 1) {
 | 
				
			||||||
 | 
																	resetDay();
 | 
				
			||||||
 | 
																	if (Mi === MDate.length - 1) {
 | 
				
			||||||
 | 
																		resetMonth();
 | 
				
			||||||
 | 
																		continue goYear;
 | 
				
			||||||
 | 
																	}
 | 
				
			||||||
 | 
																	continue goMonth;
 | 
				
			||||||
 | 
																}
 | 
				
			||||||
 | 
																continue goDay;
 | 
				
			||||||
 | 
															}
 | 
				
			||||||
 | 
															continue goHour;
 | 
				
			||||||
 | 
														}
 | 
				
			||||||
 | 
														continue;
 | 
				
			||||||
 | 
													}
 | 
				
			||||||
 | 
													// 循环"秒"数组
 | 
				
			||||||
 | 
													goSecond: for (let si = sIdx; si <= sDate.length - 1; si++) {
 | 
				
			||||||
 | 
														let ss = sDate[si] < 10 ? '0' + sDate[si] : sDate[si];
 | 
				
			||||||
 | 
														// 添加当前时间(时间合法性在日期循环时已经判断)
 | 
				
			||||||
 | 
														if (MM !== '00' && DD !== '00') {
 | 
				
			||||||
 | 
															resultArr.push(YY + '-' + MM + '-' + DD + ' ' + hh + ':' + mm + ':' + ss)
 | 
				
			||||||
 | 
															nums++;
 | 
				
			||||||
 | 
														}
 | 
				
			||||||
 | 
														// 如果条数满了就退出循环
 | 
				
			||||||
 | 
														if (nums === 5) break goYear;
 | 
				
			||||||
 | 
														// 如果到达最大值时
 | 
				
			||||||
 | 
														if (si === sDate.length - 1) {
 | 
				
			||||||
 | 
															resetSecond();
 | 
				
			||||||
 | 
															if (mi === mDate.length - 1) {
 | 
				
			||||||
 | 
																resetMin();
 | 
				
			||||||
 | 
																if (hi === hDate.length - 1) {
 | 
				
			||||||
 | 
																	resetHour();
 | 
				
			||||||
 | 
																	if (Di === DDate.length - 1) {
 | 
				
			||||||
 | 
																		resetDay();
 | 
				
			||||||
 | 
																		if (Mi === MDate.length - 1) {
 | 
				
			||||||
 | 
																			resetMonth();
 | 
				
			||||||
 | 
																			continue goYear;
 | 
				
			||||||
 | 
																		}
 | 
				
			||||||
 | 
																		continue goMonth;
 | 
				
			||||||
 | 
																	}
 | 
				
			||||||
 | 
																	continue goDay;
 | 
				
			||||||
 | 
																}
 | 
				
			||||||
 | 
																continue goHour;
 | 
				
			||||||
 | 
															}
 | 
				
			||||||
 | 
															continue goMin;
 | 
				
			||||||
 | 
														}
 | 
				
			||||||
 | 
													} //goSecond
 | 
				
			||||||
 | 
												} //goMin
 | 
				
			||||||
 | 
											}//goHour
 | 
				
			||||||
 | 
										}//goDay
 | 
				
			||||||
 | 
									}//goMonth
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								// 判断100年内的结果条数
 | 
				
			||||||
 | 
								if (resultArr.length === 0) {
 | 
				
			||||||
 | 
									this.resultList = ['没有达到条件的结果!'];
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									this.resultList = resultArr;
 | 
				
			||||||
 | 
									if (resultArr.length !== 5) {
 | 
				
			||||||
 | 
										this.resultList.push('最近100年内只有上面' + resultArr.length + '条结果!')
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								// 计算完成-显示结果
 | 
				
			||||||
 | 
								this.isShow = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 用于计算某位数字在数组中的索引
 | 
				
			||||||
 | 
							getIndex(arr, value) {
 | 
				
			||||||
 | 
								if (value <= arr[0] || value > arr[arr.length - 1]) {
 | 
				
			||||||
 | 
									return 0;
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									for (let i = 0; i < arr.length - 1; i++) {
 | 
				
			||||||
 | 
										if (value > arr[i] && value <= arr[i + 1]) {
 | 
				
			||||||
 | 
											return i + 1;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 获取"年"数组
 | 
				
			||||||
 | 
							getYearArr(rule, year) {
 | 
				
			||||||
 | 
								this.dateArr[5] = this.getOrderArr(year, year + 100);
 | 
				
			||||||
 | 
								if (rule !== undefined) {
 | 
				
			||||||
 | 
									if (rule.indexOf('-') >= 0) {
 | 
				
			||||||
 | 
										this.dateArr[5] = this.getCycleArr(rule, year + 100, false)
 | 
				
			||||||
 | 
									} else if (rule.indexOf('/') >= 0) {
 | 
				
			||||||
 | 
										this.dateArr[5] = this.getAverageArr(rule, year + 100)
 | 
				
			||||||
 | 
									} else if (rule !== '*') {
 | 
				
			||||||
 | 
										this.dateArr[5] = this.getAssignArr(rule)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 获取"月"数组
 | 
				
			||||||
 | 
							getMonthArr(rule) {
 | 
				
			||||||
 | 
								this.dateArr[4] = this.getOrderArr(1, 12);
 | 
				
			||||||
 | 
								if (rule.indexOf('-') >= 0) {
 | 
				
			||||||
 | 
									this.dateArr[4] = this.getCycleArr(rule, 12, false)
 | 
				
			||||||
 | 
								} else if (rule.indexOf('/') >= 0) {
 | 
				
			||||||
 | 
									this.dateArr[4] = this.getAverageArr(rule, 12)
 | 
				
			||||||
 | 
								} else if (rule !== '*') {
 | 
				
			||||||
 | 
									this.dateArr[4] = this.getAssignArr(rule)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 获取"日"数组-主要为日期规则
 | 
				
			||||||
 | 
							getWeekArr(rule) {
 | 
				
			||||||
 | 
								// 只有当日期规则的两个值均为“”时则表达日期是有选项的
 | 
				
			||||||
 | 
								if (this.dayRule === '' && this.dayRuleSup === '') {
 | 
				
			||||||
 | 
									if (rule.indexOf('-') >= 0) {
 | 
				
			||||||
 | 
										this.dayRule = 'weekDay';
 | 
				
			||||||
 | 
										this.dayRuleSup = this.getCycleArr(rule, 7, false)
 | 
				
			||||||
 | 
									} else if (rule.indexOf('#') >= 0) {
 | 
				
			||||||
 | 
										this.dayRule = 'assWeek';
 | 
				
			||||||
 | 
										let matchRule = rule.match(/[0-9]/g);
 | 
				
			||||||
 | 
										this.dayRuleSup = [Number(matchRule[1]), Number(matchRule[0])];
 | 
				
			||||||
 | 
										this.dateArr[3] = [1];
 | 
				
			||||||
 | 
										if (this.dayRuleSup[1] === 7) {
 | 
				
			||||||
 | 
											this.dayRuleSup[1] = 0;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									} else if (rule.indexOf('L') >= 0) {
 | 
				
			||||||
 | 
										this.dayRule = 'lastWeek';
 | 
				
			||||||
 | 
										this.dayRuleSup = Number(rule.match(/[0-9]{1,2}/g)[0]);
 | 
				
			||||||
 | 
										this.dateArr[3] = [31];
 | 
				
			||||||
 | 
										if (this.dayRuleSup === 7) {
 | 
				
			||||||
 | 
											this.dayRuleSup = 0;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									} else if (rule !== '*' && rule !== '?') {
 | 
				
			||||||
 | 
										this.dayRule = 'weekDay';
 | 
				
			||||||
 | 
										this.dayRuleSup = this.getAssignArr(rule)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 获取"日"数组-少量为日期规则
 | 
				
			||||||
 | 
							getDayArr(rule) {
 | 
				
			||||||
 | 
								this.dateArr[3] = this.getOrderArr(1, 31);
 | 
				
			||||||
 | 
								this.dayRule = '';
 | 
				
			||||||
 | 
								this.dayRuleSup = '';
 | 
				
			||||||
 | 
								if (rule.indexOf('-') >= 0) {
 | 
				
			||||||
 | 
									this.dateArr[3] = this.getCycleArr(rule, 31, false)
 | 
				
			||||||
 | 
									this.dayRuleSup = 'null';
 | 
				
			||||||
 | 
								} else if (rule.indexOf('/') >= 0) {
 | 
				
			||||||
 | 
									this.dateArr[3] = this.getAverageArr(rule, 31)
 | 
				
			||||||
 | 
									this.dayRuleSup = 'null';
 | 
				
			||||||
 | 
								} else if (rule.indexOf('W') >= 0) {
 | 
				
			||||||
 | 
									this.dayRule = 'workDay';
 | 
				
			||||||
 | 
									this.dayRuleSup = Number(rule.match(/[0-9]{1,2}/g)[0]);
 | 
				
			||||||
 | 
									this.dateArr[3] = [this.dayRuleSup];
 | 
				
			||||||
 | 
								} else if (rule.indexOf('L') >= 0) {
 | 
				
			||||||
 | 
									this.dayRule = 'lastDay';
 | 
				
			||||||
 | 
									this.dayRuleSup = 'null';
 | 
				
			||||||
 | 
									this.dateArr[3] = [31];
 | 
				
			||||||
 | 
								} else if (rule !== '*' && rule !== '?') {
 | 
				
			||||||
 | 
									this.dateArr[3] = this.getAssignArr(rule)
 | 
				
			||||||
 | 
									this.dayRuleSup = 'null';
 | 
				
			||||||
 | 
								} else if (rule === '*') {
 | 
				
			||||||
 | 
									this.dayRuleSup = 'null';
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 获取"时"数组
 | 
				
			||||||
 | 
							getHourArr(rule) {
 | 
				
			||||||
 | 
								this.dateArr[2] = this.getOrderArr(0, 23);
 | 
				
			||||||
 | 
								if (rule.indexOf('-') >= 0) {
 | 
				
			||||||
 | 
									this.dateArr[2] = this.getCycleArr(rule, 24, true)
 | 
				
			||||||
 | 
								} else if (rule.indexOf('/') >= 0) {
 | 
				
			||||||
 | 
									this.dateArr[2] = this.getAverageArr(rule, 23)
 | 
				
			||||||
 | 
								} else if (rule !== '*') {
 | 
				
			||||||
 | 
									this.dateArr[2] = this.getAssignArr(rule)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 获取"分"数组
 | 
				
			||||||
 | 
							getMinArr(rule) {
 | 
				
			||||||
 | 
								this.dateArr[1] = this.getOrderArr(0, 59);
 | 
				
			||||||
 | 
								if (rule.indexOf('-') >= 0) {
 | 
				
			||||||
 | 
									this.dateArr[1] = this.getCycleArr(rule, 60, true)
 | 
				
			||||||
 | 
								} else if (rule.indexOf('/') >= 0) {
 | 
				
			||||||
 | 
									this.dateArr[1] = this.getAverageArr(rule, 59)
 | 
				
			||||||
 | 
								} else if (rule !== '*') {
 | 
				
			||||||
 | 
									this.dateArr[1] = this.getAssignArr(rule)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 获取"秒"数组
 | 
				
			||||||
 | 
							getSecondArr(rule) {
 | 
				
			||||||
 | 
								this.dateArr[0] = this.getOrderArr(0, 59);
 | 
				
			||||||
 | 
								if (rule.indexOf('-') >= 0) {
 | 
				
			||||||
 | 
									this.dateArr[0] = this.getCycleArr(rule, 60, true)
 | 
				
			||||||
 | 
								} else if (rule.indexOf('/') >= 0) {
 | 
				
			||||||
 | 
									this.dateArr[0] = this.getAverageArr(rule, 59)
 | 
				
			||||||
 | 
								} else if (rule !== '*') {
 | 
				
			||||||
 | 
									this.dateArr[0] = this.getAssignArr(rule)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 根据传进来的min-max返回一个顺序的数组
 | 
				
			||||||
 | 
							getOrderArr(min, max) {
 | 
				
			||||||
 | 
								let arr = [];
 | 
				
			||||||
 | 
								for (let i = min; i <= max; i++) {
 | 
				
			||||||
 | 
									arr.push(i);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								return arr;
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 根据规则中指定的零散值返回一个数组
 | 
				
			||||||
 | 
							getAssignArr(rule) {
 | 
				
			||||||
 | 
								let arr = [];
 | 
				
			||||||
 | 
								let assiginArr = rule.split(',');
 | 
				
			||||||
 | 
								for (let i = 0; i < assiginArr.length; i++) {
 | 
				
			||||||
 | 
									arr[i] = Number(assiginArr[i])
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								arr.sort(this.compare)
 | 
				
			||||||
 | 
								return arr;
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 根据一定算术规则计算返回一个数组
 | 
				
			||||||
 | 
							getAverageArr(rule, limit) {
 | 
				
			||||||
 | 
								let arr = [];
 | 
				
			||||||
 | 
								let agArr = rule.split('/');
 | 
				
			||||||
 | 
								let min = Number(agArr[0]);
 | 
				
			||||||
 | 
								let step = Number(agArr[1]);
 | 
				
			||||||
 | 
								while (min <= limit) {
 | 
				
			||||||
 | 
									arr.push(min);
 | 
				
			||||||
 | 
									min += step;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								return arr;
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 根据规则返回一个具有周期性的数组
 | 
				
			||||||
 | 
							getCycleArr(rule, limit, status) {
 | 
				
			||||||
 | 
								// status--表示是否从0开始(则从1开始)
 | 
				
			||||||
 | 
								let arr = [];
 | 
				
			||||||
 | 
								let cycleArr = rule.split('-');
 | 
				
			||||||
 | 
								let min = Number(cycleArr[0]);
 | 
				
			||||||
 | 
								let max = Number(cycleArr[1]);
 | 
				
			||||||
 | 
								if (min > max) {
 | 
				
			||||||
 | 
									max += limit;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								for (let i = min; i <= max; i++) {
 | 
				
			||||||
 | 
									let add = 0;
 | 
				
			||||||
 | 
									if (status === false && i % limit === 0) {
 | 
				
			||||||
 | 
										add = limit;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									arr.push(Math.round(i % limit + add))
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								arr.sort(this.compare)
 | 
				
			||||||
 | 
								return arr;
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 比较数字大小(用于Array.sort)
 | 
				
			||||||
 | 
							compare(value1, value2) {
 | 
				
			||||||
 | 
								if (value2 - value1 > 0) {
 | 
				
			||||||
 | 
									return -1;
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									return 1;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 格式化日期格式如:2017-9-19 18:04:33
 | 
				
			||||||
 | 
							formatDate(value, type) {
 | 
				
			||||||
 | 
								// 计算日期相关值
 | 
				
			||||||
 | 
								let time = typeof value == 'number' ? new Date(value) : value;
 | 
				
			||||||
 | 
								let Y = time.getFullYear();
 | 
				
			||||||
 | 
								let M = time.getMonth() + 1;
 | 
				
			||||||
 | 
								let D = time.getDate();
 | 
				
			||||||
 | 
								let h = time.getHours();
 | 
				
			||||||
 | 
								let m = time.getMinutes();
 | 
				
			||||||
 | 
								let s = time.getSeconds();
 | 
				
			||||||
 | 
								let week = time.getDay();
 | 
				
			||||||
 | 
								// 如果传递了type的话
 | 
				
			||||||
 | 
								if (type === undefined) {
 | 
				
			||||||
 | 
									return Y + '-' + (M < 10 ? '0' + M : M) + '-' + (D < 10 ? '0' + D : D) + ' ' + (h < 10 ? '0' + h : h) + ':' + (m < 10 ? '0' + m : m) + ':' + (s < 10 ? '0' + s : s);
 | 
				
			||||||
 | 
								} else if (type === 'week') {
 | 
				
			||||||
 | 
									// 在quartz中 1为星期日
 | 
				
			||||||
 | 
									return week + 1;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 检查日期是否存在
 | 
				
			||||||
 | 
							checkDate(value) {
 | 
				
			||||||
 | 
								let time = new Date(value);
 | 
				
			||||||
 | 
								let format = this.formatDate(time)
 | 
				
			||||||
 | 
								return value === format;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						watch: {
 | 
				
			||||||
 | 
							'ex': 'expressionChange'
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						props: ['ex'],
 | 
				
			||||||
 | 
						mounted: function () {
 | 
				
			||||||
 | 
							// 初始化 获取一次结果
 | 
				
			||||||
 | 
							this.expressionChange();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
							
								
								
									
										117
									
								
								src/components/Crontab/second.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								src/components/Crontab/second.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,117 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
						<el-form size="small">
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio v-model='radioValue' :label="1">
 | 
				
			||||||
 | 
									秒,允许的通配符[, - * /]
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio v-model='radioValue' :label="2">
 | 
				
			||||||
 | 
									周期从
 | 
				
			||||||
 | 
									<el-input-number v-model='cycle01' :min="0" :max="58" /> -
 | 
				
			||||||
 | 
									<el-input-number v-model='cycle02' :min="cycle01 ? cycle01 + 1 : 1" :max="59" /> 秒
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio v-model='radioValue' :label="3">
 | 
				
			||||||
 | 
									从
 | 
				
			||||||
 | 
									<el-input-number v-model='average01' :min="0" :max="58" /> 秒开始,每
 | 
				
			||||||
 | 
									<el-input-number v-model='average02' :min="1" :max="59 - average01 || 0" /> 秒执行一次
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio v-model='radioValue' :label="4">
 | 
				
			||||||
 | 
									指定
 | 
				
			||||||
 | 
									<el-select clearable v-model="checkboxList" placeholder="可多选" multiple style="width:100%">
 | 
				
			||||||
 | 
										<el-option v-for="item in 60" :key="item" :value="item-1">{{item-1}}</el-option>
 | 
				
			||||||
 | 
									</el-select>
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
						</el-form>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
						data() {
 | 
				
			||||||
 | 
							return {
 | 
				
			||||||
 | 
								radioValue: 1,
 | 
				
			||||||
 | 
								cycle01: 1,
 | 
				
			||||||
 | 
								cycle02: 2,
 | 
				
			||||||
 | 
								average01: 0,
 | 
				
			||||||
 | 
								average02: 1,
 | 
				
			||||||
 | 
								checkboxList: [],
 | 
				
			||||||
 | 
								checkNum: this.$options.propsData.check
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						name: 'crontab-second',
 | 
				
			||||||
 | 
						props: ['check', 'radioParent'],
 | 
				
			||||||
 | 
						methods: {
 | 
				
			||||||
 | 
							// 单选按钮值变化时
 | 
				
			||||||
 | 
							radioChange() {
 | 
				
			||||||
 | 
								switch (this.radioValue) {
 | 
				
			||||||
 | 
									case 1:
 | 
				
			||||||
 | 
										this.$emit('update', 'second', '*', 'second');
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 2:
 | 
				
			||||||
 | 
										this.$emit('update', 'second', this.cycleTotal);
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 3:
 | 
				
			||||||
 | 
										this.$emit('update', 'second', this.averageTotal);
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 4:
 | 
				
			||||||
 | 
										this.$emit('update', 'second', this.checkboxString);
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 周期两个值变化时
 | 
				
			||||||
 | 
							cycleChange() {
 | 
				
			||||||
 | 
								if (this.radioValue === '2') {
 | 
				
			||||||
 | 
									this.$emit('update', 'second', this.cycleTotal);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 平均两个值变化时
 | 
				
			||||||
 | 
							averageChange() {
 | 
				
			||||||
 | 
								if (this.radioValue === '3') {
 | 
				
			||||||
 | 
									this.$emit('update', 'second', this.averageTotal);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// checkbox值变化时
 | 
				
			||||||
 | 
							checkboxChange() {
 | 
				
			||||||
 | 
								if (this.radioValue === '4') {
 | 
				
			||||||
 | 
									this.$emit('update', 'second', this.checkboxString);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						watch: {
 | 
				
			||||||
 | 
							'radioValue': 'radioChange',
 | 
				
			||||||
 | 
							'cycleTotal': 'cycleChange',
 | 
				
			||||||
 | 
							'averageTotal': 'averageChange',
 | 
				
			||||||
 | 
							'checkboxString': 'checkboxChange',
 | 
				
			||||||
 | 
							radioParent() {
 | 
				
			||||||
 | 
								this.radioValue = this.radioParent
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						computed: {
 | 
				
			||||||
 | 
							// 计算两个周期值
 | 
				
			||||||
 | 
							cycleTotal: function () {
 | 
				
			||||||
 | 
								const cycle01 = this.checkNum(this.cycle01, 0, 58)
 | 
				
			||||||
 | 
								const cycle02 = this.checkNum(this.cycle02, cycle01 ? cycle01 + 1 : 1, 59)
 | 
				
			||||||
 | 
								return cycle01 + '-' + cycle02;
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 计算平均用到的值
 | 
				
			||||||
 | 
							averageTotal: function () {
 | 
				
			||||||
 | 
								const average01 = this.checkNum(this.average01, 0, 58)
 | 
				
			||||||
 | 
								const average02 = this.checkNum(this.average02, 1, 59 - average01 || 0)
 | 
				
			||||||
 | 
								return average01 + '/' + average02;
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 计算勾选的checkbox值合集
 | 
				
			||||||
 | 
							checkboxString: function () {
 | 
				
			||||||
 | 
								let str = this.checkboxList.join();
 | 
				
			||||||
 | 
								return str === '' ? '*' : str;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
							
								
								
									
										202
									
								
								src/components/Crontab/week.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										202
									
								
								src/components/Crontab/week.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,202 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
						<el-form size='small'>
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio v-model='radioValue' :label="1">
 | 
				
			||||||
 | 
									周,允许的通配符[, - * ? / L #]
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio v-model='radioValue' :label="2">
 | 
				
			||||||
 | 
									不指定
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio v-model='radioValue' :label="3">
 | 
				
			||||||
 | 
									周期从星期
 | 
				
			||||||
 | 
									<el-select clearable v-model="cycle01">
 | 
				
			||||||
 | 
										<el-option
 | 
				
			||||||
 | 
											v-for="(item,index) of weekList"
 | 
				
			||||||
 | 
											:key="index"
 | 
				
			||||||
 | 
											:label="item.value"
 | 
				
			||||||
 | 
											:value="item.key"
 | 
				
			||||||
 | 
											:disabled="item.key === 1"
 | 
				
			||||||
 | 
										>{{item.value}}</el-option>
 | 
				
			||||||
 | 
									</el-select>
 | 
				
			||||||
 | 
									-
 | 
				
			||||||
 | 
									<el-select clearable v-model="cycle02">
 | 
				
			||||||
 | 
										<el-option
 | 
				
			||||||
 | 
											v-for="(item,index) of weekList"
 | 
				
			||||||
 | 
											:key="index"
 | 
				
			||||||
 | 
											:label="item.value"
 | 
				
			||||||
 | 
											:value="item.key"
 | 
				
			||||||
 | 
											:disabled="item.key < cycle01 && item.key !== 1"
 | 
				
			||||||
 | 
										>{{item.value}}</el-option>
 | 
				
			||||||
 | 
									</el-select>
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio v-model='radioValue' :label="4">
 | 
				
			||||||
 | 
									第
 | 
				
			||||||
 | 
									<el-input-number v-model='average01' :min="1" :max="4" /> 周的星期
 | 
				
			||||||
 | 
									<el-select clearable v-model="average02">
 | 
				
			||||||
 | 
										<el-option v-for="(item,index) of weekList" :key="index" :label="item.value" :value="item.key">{{item.value}}</el-option>
 | 
				
			||||||
 | 
									</el-select>
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio v-model='radioValue' :label="5">
 | 
				
			||||||
 | 
									本月最后一个星期
 | 
				
			||||||
 | 
									<el-select clearable v-model="weekday">
 | 
				
			||||||
 | 
										<el-option v-for="(item,index) of weekList" :key="index" :label="item.value" :value="item.key">{{item.value}}</el-option>
 | 
				
			||||||
 | 
									</el-select>
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio v-model='radioValue' :label="6">
 | 
				
			||||||
 | 
									指定
 | 
				
			||||||
 | 
									<el-select clearable v-model="checkboxList" placeholder="可多选" multiple style="width:100%">
 | 
				
			||||||
 | 
										<el-option v-for="(item,index) of weekList" :key="index" :label="item.value" :value="String(item.key)">{{item.value}}</el-option>
 | 
				
			||||||
 | 
									</el-select>
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						</el-form>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
						data() {
 | 
				
			||||||
 | 
							return {
 | 
				
			||||||
 | 
								radioValue: 2,
 | 
				
			||||||
 | 
								weekday: 2,
 | 
				
			||||||
 | 
								cycle01: 2,
 | 
				
			||||||
 | 
								cycle02: 3,
 | 
				
			||||||
 | 
								average01: 1,
 | 
				
			||||||
 | 
								average02: 2,
 | 
				
			||||||
 | 
								checkboxList: [],
 | 
				
			||||||
 | 
								weekList: [
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										key: 2,
 | 
				
			||||||
 | 
										value: '星期一'
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										key: 3,
 | 
				
			||||||
 | 
										value: '星期二'
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										key: 4,
 | 
				
			||||||
 | 
										value: '星期三'
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										key: 5,
 | 
				
			||||||
 | 
										value: '星期四'
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										key: 6,
 | 
				
			||||||
 | 
										value: '星期五'
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										key: 7,
 | 
				
			||||||
 | 
										value: '星期六'
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										key: 1,
 | 
				
			||||||
 | 
										value: '星期日'
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								],
 | 
				
			||||||
 | 
								checkNum: this.$options.propsData.check
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						name: 'crontab-week',
 | 
				
			||||||
 | 
						props: ['check', 'cron'],
 | 
				
			||||||
 | 
						methods: {
 | 
				
			||||||
 | 
							// 单选按钮值变化时
 | 
				
			||||||
 | 
							radioChange() {
 | 
				
			||||||
 | 
								if (this.radioValue !== 2 && this.cron.day !== '?') {
 | 
				
			||||||
 | 
									this.$emit('update', 'day', '?', 'week');
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								switch (this.radioValue) {
 | 
				
			||||||
 | 
									case 1:
 | 
				
			||||||
 | 
										this.$emit('update', 'week', '*');
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 2:
 | 
				
			||||||
 | 
										this.$emit('update', 'week', '?');
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 3:
 | 
				
			||||||
 | 
										this.$emit('update', 'week', this.cycleTotal);
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 4:
 | 
				
			||||||
 | 
										this.$emit('update', 'week', this.averageTotal);
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 5:
 | 
				
			||||||
 | 
										this.$emit('update', 'week', this.weekdayCheck + 'L');
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 6:
 | 
				
			||||||
 | 
										this.$emit('update', 'week', this.checkboxString);
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// 周期两个值变化时
 | 
				
			||||||
 | 
							cycleChange() {
 | 
				
			||||||
 | 
								if (this.radioValue === '3') {
 | 
				
			||||||
 | 
									this.$emit('update', 'week', this.cycleTotal);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 平均两个值变化时
 | 
				
			||||||
 | 
							averageChange() {
 | 
				
			||||||
 | 
								if (this.radioValue === '4') {
 | 
				
			||||||
 | 
									this.$emit('update', 'week', this.averageTotal);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 最近工作日值变化时
 | 
				
			||||||
 | 
							weekdayChange() {
 | 
				
			||||||
 | 
								if (this.radioValue === '5') {
 | 
				
			||||||
 | 
									this.$emit('update', 'week', this.weekday + 'L');
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// checkbox值变化时
 | 
				
			||||||
 | 
							checkboxChange() {
 | 
				
			||||||
 | 
								if (this.radioValue === '6') {
 | 
				
			||||||
 | 
									this.$emit('update', 'week', this.checkboxString);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						watch: {
 | 
				
			||||||
 | 
							'radioValue': 'radioChange',
 | 
				
			||||||
 | 
							'cycleTotal': 'cycleChange',
 | 
				
			||||||
 | 
							'averageTotal': 'averageChange',
 | 
				
			||||||
 | 
							'weekdayCheck': 'weekdayChange',
 | 
				
			||||||
 | 
							'checkboxString': 'checkboxChange',
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						computed: {
 | 
				
			||||||
 | 
							// 计算两个周期值
 | 
				
			||||||
 | 
							cycleTotal: function () {
 | 
				
			||||||
 | 
								this.cycle01 = this.checkNum(this.cycle01, 1, 7)
 | 
				
			||||||
 | 
								this.cycle02 = this.checkNum(this.cycle02, 1, 7)
 | 
				
			||||||
 | 
								return this.cycle01 + '-' + this.cycle02;
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 计算平均用到的值
 | 
				
			||||||
 | 
							averageTotal: function () {
 | 
				
			||||||
 | 
								this.average01 = this.checkNum(this.average01, 1, 4)
 | 
				
			||||||
 | 
								this.average02 = this.checkNum(this.average02, 1, 7)
 | 
				
			||||||
 | 
								return this.average02 + '#' + this.average01;
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 最近的工作日(格式)
 | 
				
			||||||
 | 
							weekdayCheck: function () {
 | 
				
			||||||
 | 
								this.weekday = this.checkNum(this.weekday, 1, 7)
 | 
				
			||||||
 | 
								return this.weekday;
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 计算勾选的checkbox值合集
 | 
				
			||||||
 | 
							checkboxString: function () {
 | 
				
			||||||
 | 
								let str = this.checkboxList.join();
 | 
				
			||||||
 | 
								return str === '' ? '*' : str;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
							
								
								
									
										131
									
								
								src/components/Crontab/year.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										131
									
								
								src/components/Crontab/year.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,131 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
						<el-form size="small">
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio :label="1" v-model='radioValue'>
 | 
				
			||||||
 | 
									不填,允许的通配符[, - * /]
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio :label="2" v-model='radioValue'>
 | 
				
			||||||
 | 
									每年
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio :label="3" v-model='radioValue'>
 | 
				
			||||||
 | 
									周期从
 | 
				
			||||||
 | 
									<el-input-number v-model='cycle01' :min='fullYear' :max="2098" /> -
 | 
				
			||||||
 | 
									<el-input-number v-model='cycle02' :min="cycle01 ? cycle01 + 1 : fullYear + 1" :max="2099" />
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio :label="4" v-model='radioValue'>
 | 
				
			||||||
 | 
									从
 | 
				
			||||||
 | 
									<el-input-number v-model='average01' :min='fullYear' :max="2098"/> 年开始,每
 | 
				
			||||||
 | 
									<el-input-number v-model='average02' :min="1" :max="2099 - average01 || fullYear" /> 年执行一次
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<el-form-item>
 | 
				
			||||||
 | 
								<el-radio :label="5" v-model='radioValue'>
 | 
				
			||||||
 | 
									指定
 | 
				
			||||||
 | 
									<el-select clearable v-model="checkboxList" placeholder="可多选" multiple>
 | 
				
			||||||
 | 
										<el-option v-for="item in 9" :key="item" :value="item - 1 + fullYear" :label="item -1 + fullYear" />
 | 
				
			||||||
 | 
									</el-select>
 | 
				
			||||||
 | 
								</el-radio>
 | 
				
			||||||
 | 
							</el-form-item>
 | 
				
			||||||
 | 
						</el-form>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
						data() {
 | 
				
			||||||
 | 
							return {
 | 
				
			||||||
 | 
								fullYear: 0,
 | 
				
			||||||
 | 
								radioValue: 1,
 | 
				
			||||||
 | 
								cycle01: 0,
 | 
				
			||||||
 | 
								cycle02: 0,
 | 
				
			||||||
 | 
								average01: 0,
 | 
				
			||||||
 | 
								average02: 1,
 | 
				
			||||||
 | 
								checkboxList: [],
 | 
				
			||||||
 | 
								checkNum: this.$options.propsData.check
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						name: 'crontab-year',
 | 
				
			||||||
 | 
						props: ['check', 'month', 'cron'],
 | 
				
			||||||
 | 
						methods: {
 | 
				
			||||||
 | 
							// 单选按钮值变化时
 | 
				
			||||||
 | 
							radioChange() {
 | 
				
			||||||
 | 
								switch (this.radioValue) {
 | 
				
			||||||
 | 
									case 1:
 | 
				
			||||||
 | 
										this.$emit('update', 'year', '');
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 2:
 | 
				
			||||||
 | 
										this.$emit('update', 'year', '*');
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 3:
 | 
				
			||||||
 | 
										this.$emit('update', 'year', this.cycleTotal);
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 4:
 | 
				
			||||||
 | 
										this.$emit('update', 'year', this.averageTotal);
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
									case 5:
 | 
				
			||||||
 | 
										this.$emit('update', 'year', this.checkboxString);
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 周期两个值变化时
 | 
				
			||||||
 | 
							cycleChange() {
 | 
				
			||||||
 | 
								if (this.radioValue === '3') {
 | 
				
			||||||
 | 
									this.$emit('update', 'year', this.cycleTotal);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 平均两个值变化时
 | 
				
			||||||
 | 
							averageChange() {
 | 
				
			||||||
 | 
								if (this.radioValue === '4') {
 | 
				
			||||||
 | 
									this.$emit('update', 'year', this.averageTotal);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// checkbox值变化时
 | 
				
			||||||
 | 
							checkboxChange() {
 | 
				
			||||||
 | 
								if (this.radioValue === '5') {
 | 
				
			||||||
 | 
									this.$emit('update', 'year', this.checkboxString);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						watch: {
 | 
				
			||||||
 | 
							'radioValue': 'radioChange',
 | 
				
			||||||
 | 
							'cycleTotal': 'cycleChange',
 | 
				
			||||||
 | 
							'averageTotal': 'averageChange',
 | 
				
			||||||
 | 
							'checkboxString': 'checkboxChange'
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						computed: {
 | 
				
			||||||
 | 
							// 计算两个周期值
 | 
				
			||||||
 | 
							cycleTotal: function () {
 | 
				
			||||||
 | 
								const cycle01 = this.checkNum(this.cycle01, this.fullYear, 2098)
 | 
				
			||||||
 | 
								const cycle02 = this.checkNum(this.cycle02, cycle01 ? cycle01 + 1 : this.fullYear + 1, 2099)
 | 
				
			||||||
 | 
								return cycle01 + '-' + cycle02;
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 计算平均用到的值
 | 
				
			||||||
 | 
							averageTotal: function () {
 | 
				
			||||||
 | 
								const average01 = this.checkNum(this.average01, this.fullYear, 2098)
 | 
				
			||||||
 | 
								const average02 = this.checkNum(this.average02, 1, 2099 - average01 || this.fullYear)
 | 
				
			||||||
 | 
								return average01 + '/' + average02;
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 计算勾选的checkbox值合集
 | 
				
			||||||
 | 
							checkboxString: function () {
 | 
				
			||||||
 | 
								let str = this.checkboxList.join();
 | 
				
			||||||
 | 
								return str;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						mounted: function () {
 | 
				
			||||||
 | 
							// 仅获取当前年份
 | 
				
			||||||
 | 
							this.fullYear = Number(new Date().getFullYear());
 | 
				
			||||||
 | 
							this.cycle01 = this.fullYear
 | 
				
			||||||
 | 
							this.average01 = this.fullYear
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
@@ -12,7 +12,7 @@
 | 
				
			|||||||
		:label-width="`${labelWidth}px`"
 | 
							:label-width="`${labelWidth}px`"
 | 
				
			||||||
		:size="size"
 | 
							:size="size"
 | 
				
			||||||
		:label-position="labelPosition"
 | 
							:label-position="labelPosition"
 | 
				
			||||||
		v-loading="formLoading">
 | 
							v-loading="0 && formLoading">
 | 
				
			||||||
		<el-row :gutter="20" v-for="(row, rindex) in rows" :key="rindex">
 | 
							<el-row :gutter="20" v-for="(row, rindex) in rows" :key="rindex">
 | 
				
			||||||
			<el-col v-for="col in row" :key="col.label" :span="24 / row.length">
 | 
								<el-col v-for="col in row" :key="col.label" :span="24 / row.length">
 | 
				
			||||||
				<el-form-item :label="col.label" :prop="col.prop" :rules="col.rules">
 | 
									<el-form-item :label="col.label" :prop="col.prop" :rules="col.rules">
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										630
									
								
								src/components/generator/config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										630
									
								
								src/components/generator/config.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,630 @@
 | 
				
			|||||||
 | 
					// 表单属性【右面板】
 | 
				
			||||||
 | 
					export const formConf = {
 | 
				
			||||||
 | 
					  formRef: 'elForm',
 | 
				
			||||||
 | 
					  formModel: 'formData',
 | 
				
			||||||
 | 
					  size: 'medium',
 | 
				
			||||||
 | 
					  labelPosition: 'right',
 | 
				
			||||||
 | 
					  labelWidth: 100,
 | 
				
			||||||
 | 
					  formRules: 'rules',
 | 
				
			||||||
 | 
					  gutter: 15,
 | 
				
			||||||
 | 
					  disabled: false,
 | 
				
			||||||
 | 
					  span: 24,
 | 
				
			||||||
 | 
					  formBtns: true
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 输入型组件 【左面板】
 | 
				
			||||||
 | 
					export const inputComponents = [
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    // 组件的自定义配置
 | 
				
			||||||
 | 
					    __config__: {
 | 
				
			||||||
 | 
					      label: '单行文本',
 | 
				
			||||||
 | 
					      labelWidth: null,
 | 
				
			||||||
 | 
					      showLabel: true,
 | 
				
			||||||
 | 
					      changeTag: true,
 | 
				
			||||||
 | 
					      tag: 'el-input',
 | 
				
			||||||
 | 
					      tagIcon: 'input',
 | 
				
			||||||
 | 
					      defaultValue: undefined,
 | 
				
			||||||
 | 
					      required: true,
 | 
				
			||||||
 | 
					      layout: 'colFormItem',
 | 
				
			||||||
 | 
					      span: 24,
 | 
				
			||||||
 | 
					      document: 'https://element.eleme.cn/#/zh-CN/component/input',
 | 
				
			||||||
 | 
					      // 正则校验规则
 | 
				
			||||||
 | 
					      regList: []
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    // 组件的插槽属性
 | 
				
			||||||
 | 
					    __slot__: {
 | 
				
			||||||
 | 
					      prepend: '',
 | 
				
			||||||
 | 
					      append: ''
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    // 其余的为可直接写在组件标签上的属性
 | 
				
			||||||
 | 
					    placeholder: '请输入',
 | 
				
			||||||
 | 
					    style: { width: '100%' },
 | 
				
			||||||
 | 
					    clearable: true,
 | 
				
			||||||
 | 
					    'prefix-icon': '',
 | 
				
			||||||
 | 
					    'suffix-icon': '',
 | 
				
			||||||
 | 
					    maxlength: null,
 | 
				
			||||||
 | 
					    'show-word-limit': false,
 | 
				
			||||||
 | 
					    readonly: false,
 | 
				
			||||||
 | 
					    disabled: false
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    __config__: {
 | 
				
			||||||
 | 
					      label: '多行文本',
 | 
				
			||||||
 | 
					      labelWidth: null,
 | 
				
			||||||
 | 
					      showLabel: true,
 | 
				
			||||||
 | 
					      tag: 'el-input',
 | 
				
			||||||
 | 
					      tagIcon: 'textarea',
 | 
				
			||||||
 | 
					      defaultValue: undefined,
 | 
				
			||||||
 | 
					      required: true,
 | 
				
			||||||
 | 
					      layout: 'colFormItem',
 | 
				
			||||||
 | 
					      span: 24,
 | 
				
			||||||
 | 
					      regList: [],
 | 
				
			||||||
 | 
					      changeTag: true,
 | 
				
			||||||
 | 
					      document: 'https://element.eleme.cn/#/zh-CN/component/input'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    type: 'textarea',
 | 
				
			||||||
 | 
					    placeholder: '请输入',
 | 
				
			||||||
 | 
					    autosize: {
 | 
				
			||||||
 | 
					      minRows: 4,
 | 
				
			||||||
 | 
					      maxRows: 4
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    style: { width: '100%' },
 | 
				
			||||||
 | 
					    maxlength: null,
 | 
				
			||||||
 | 
					    'show-word-limit': false,
 | 
				
			||||||
 | 
					    readonly: false,
 | 
				
			||||||
 | 
					    disabled: false
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    __config__: {
 | 
				
			||||||
 | 
					      label: '密码',
 | 
				
			||||||
 | 
					      showLabel: true,
 | 
				
			||||||
 | 
					      labelWidth: null,
 | 
				
			||||||
 | 
					      changeTag: true,
 | 
				
			||||||
 | 
					      tag: 'el-input',
 | 
				
			||||||
 | 
					      tagIcon: 'password',
 | 
				
			||||||
 | 
					      defaultValue: undefined,
 | 
				
			||||||
 | 
					      layout: 'colFormItem',
 | 
				
			||||||
 | 
					      span: 24,
 | 
				
			||||||
 | 
					      required: true,
 | 
				
			||||||
 | 
					      regList: [],
 | 
				
			||||||
 | 
					      document: 'https://element.eleme.cn/#/zh-CN/component/input'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    __slot__: {
 | 
				
			||||||
 | 
					      prepend: '',
 | 
				
			||||||
 | 
					      append: ''
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    placeholder: '请输入',
 | 
				
			||||||
 | 
					    'show-password': true,
 | 
				
			||||||
 | 
					    style: { width: '100%' },
 | 
				
			||||||
 | 
					    clearable: true,
 | 
				
			||||||
 | 
					    'prefix-icon': '',
 | 
				
			||||||
 | 
					    'suffix-icon': '',
 | 
				
			||||||
 | 
					    maxlength: null,
 | 
				
			||||||
 | 
					    'show-word-limit': false,
 | 
				
			||||||
 | 
					    readonly: false,
 | 
				
			||||||
 | 
					    disabled: false
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    __config__: {
 | 
				
			||||||
 | 
					      label: '计数器',
 | 
				
			||||||
 | 
					      showLabel: true,
 | 
				
			||||||
 | 
					      changeTag: true,
 | 
				
			||||||
 | 
					      labelWidth: null,
 | 
				
			||||||
 | 
					      tag: 'el-input-number',
 | 
				
			||||||
 | 
					      tagIcon: 'number',
 | 
				
			||||||
 | 
					      defaultValue: undefined,
 | 
				
			||||||
 | 
					      span: 24,
 | 
				
			||||||
 | 
					      layout: 'colFormItem',
 | 
				
			||||||
 | 
					      required: true,
 | 
				
			||||||
 | 
					      regList: [],
 | 
				
			||||||
 | 
					      document: 'https://element.eleme.cn/#/zh-CN/component/input-number'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    placeholder: '',
 | 
				
			||||||
 | 
					    min: undefined,
 | 
				
			||||||
 | 
					    max: undefined,
 | 
				
			||||||
 | 
					    step: 1,
 | 
				
			||||||
 | 
					    'step-strictly': false,
 | 
				
			||||||
 | 
					    precision: undefined,
 | 
				
			||||||
 | 
					    'controls-position': '',
 | 
				
			||||||
 | 
					    disabled: false
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    __config__: {
 | 
				
			||||||
 | 
					      label: '编辑器',
 | 
				
			||||||
 | 
					      showLabel: true,
 | 
				
			||||||
 | 
					      changeTag: true,
 | 
				
			||||||
 | 
					      labelWidth: null,
 | 
				
			||||||
 | 
					      tag: 'tinymce',
 | 
				
			||||||
 | 
					      tagIcon: 'rich-text',
 | 
				
			||||||
 | 
					      defaultValue: null,
 | 
				
			||||||
 | 
					      span: 24,
 | 
				
			||||||
 | 
					      layout: 'colFormItem',
 | 
				
			||||||
 | 
					      required: true,
 | 
				
			||||||
 | 
					      regList: [],
 | 
				
			||||||
 | 
					      document: 'http://tinymce.ax-z.cn'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    placeholder: '请输入',
 | 
				
			||||||
 | 
					    height: 300, // 编辑器高度
 | 
				
			||||||
 | 
					    branding: false // 隐藏右下角品牌烙印
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 选择型组件 【左面板】
 | 
				
			||||||
 | 
					export const selectComponents = [
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    __config__: {
 | 
				
			||||||
 | 
					      label: '下拉选择',
 | 
				
			||||||
 | 
					      showLabel: true,
 | 
				
			||||||
 | 
					      labelWidth: null,
 | 
				
			||||||
 | 
					      tag: 'el-select',
 | 
				
			||||||
 | 
					      tagIcon: 'select',
 | 
				
			||||||
 | 
					      layout: 'colFormItem',
 | 
				
			||||||
 | 
					      span: 24,
 | 
				
			||||||
 | 
					      required: true,
 | 
				
			||||||
 | 
					      regList: [],
 | 
				
			||||||
 | 
					      changeTag: true,
 | 
				
			||||||
 | 
					      document: 'https://element.eleme.cn/#/zh-CN/component/select'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    __slot__: {
 | 
				
			||||||
 | 
					      options: [{
 | 
				
			||||||
 | 
					        label: '选项一',
 | 
				
			||||||
 | 
					        value: 1
 | 
				
			||||||
 | 
					      }, {
 | 
				
			||||||
 | 
					        label: '选项二',
 | 
				
			||||||
 | 
					        value: 2
 | 
				
			||||||
 | 
					      }]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    placeholder: '请选择',
 | 
				
			||||||
 | 
					    style: { width: '100%' },
 | 
				
			||||||
 | 
					    clearable: true,
 | 
				
			||||||
 | 
					    disabled: false,
 | 
				
			||||||
 | 
					    filterable: false,
 | 
				
			||||||
 | 
					    multiple: false
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    __config__: {
 | 
				
			||||||
 | 
					      label: '级联选择',
 | 
				
			||||||
 | 
					      url: 'https://www.fastmock.site/mock/f8d7a54fb1e60561e2f720d5a810009d/fg/cascaderList',
 | 
				
			||||||
 | 
					      method: 'get',
 | 
				
			||||||
 | 
					      dataPath: 'list',
 | 
				
			||||||
 | 
					      dataConsumer: 'options',
 | 
				
			||||||
 | 
					      showLabel: true,
 | 
				
			||||||
 | 
					      labelWidth: null,
 | 
				
			||||||
 | 
					      tag: 'el-cascader',
 | 
				
			||||||
 | 
					      tagIcon: 'cascader',
 | 
				
			||||||
 | 
					      layout: 'colFormItem',
 | 
				
			||||||
 | 
					      defaultValue: [],
 | 
				
			||||||
 | 
					      dataType: 'dynamic',
 | 
				
			||||||
 | 
					      span: 24,
 | 
				
			||||||
 | 
					      required: true,
 | 
				
			||||||
 | 
					      regList: [],
 | 
				
			||||||
 | 
					      changeTag: true,
 | 
				
			||||||
 | 
					      document: 'https://element.eleme.cn/#/zh-CN/component/cascader'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    options: [{
 | 
				
			||||||
 | 
					      id: 1,
 | 
				
			||||||
 | 
					      value: 1,
 | 
				
			||||||
 | 
					      label: '选项1',
 | 
				
			||||||
 | 
					      children: [{
 | 
				
			||||||
 | 
					        id: 2,
 | 
				
			||||||
 | 
					        value: 2,
 | 
				
			||||||
 | 
					        label: '选项1-1'
 | 
				
			||||||
 | 
					      }]
 | 
				
			||||||
 | 
					    }],
 | 
				
			||||||
 | 
					    placeholder: '请选择',
 | 
				
			||||||
 | 
					    style: { width: '100%' },
 | 
				
			||||||
 | 
					    props: {
 | 
				
			||||||
 | 
					      props: {
 | 
				
			||||||
 | 
					        multiple: false,
 | 
				
			||||||
 | 
					        label: 'label',
 | 
				
			||||||
 | 
					        value: 'value',
 | 
				
			||||||
 | 
					        children: 'children'
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    'show-all-levels': true,
 | 
				
			||||||
 | 
					    disabled: false,
 | 
				
			||||||
 | 
					    clearable: true,
 | 
				
			||||||
 | 
					    filterable: false,
 | 
				
			||||||
 | 
					    separator: '/'
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    __config__: {
 | 
				
			||||||
 | 
					      label: '单选框组',
 | 
				
			||||||
 | 
					      labelWidth: null,
 | 
				
			||||||
 | 
					      showLabel: true,
 | 
				
			||||||
 | 
					      tag: 'el-radio-group',
 | 
				
			||||||
 | 
					      tagIcon: 'radio',
 | 
				
			||||||
 | 
					      changeTag: true,
 | 
				
			||||||
 | 
					      defaultValue: undefined,
 | 
				
			||||||
 | 
					      layout: 'colFormItem',
 | 
				
			||||||
 | 
					      span: 24,
 | 
				
			||||||
 | 
					      optionType: 'default',
 | 
				
			||||||
 | 
					      regList: [],
 | 
				
			||||||
 | 
					      required: true,
 | 
				
			||||||
 | 
					      border: false,
 | 
				
			||||||
 | 
					      document: 'https://element.eleme.cn/#/zh-CN/component/radio'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    __slot__: {
 | 
				
			||||||
 | 
					      options: [{
 | 
				
			||||||
 | 
					        label: '选项一',
 | 
				
			||||||
 | 
					        value: 1
 | 
				
			||||||
 | 
					      }, {
 | 
				
			||||||
 | 
					        label: '选项二',
 | 
				
			||||||
 | 
					        value: 2
 | 
				
			||||||
 | 
					      }]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    style: {},
 | 
				
			||||||
 | 
					    size: 'medium',
 | 
				
			||||||
 | 
					    disabled: false
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    __config__: {
 | 
				
			||||||
 | 
					      label: '多选框组',
 | 
				
			||||||
 | 
					      tag: 'el-checkbox-group',
 | 
				
			||||||
 | 
					      tagIcon: 'checkbox',
 | 
				
			||||||
 | 
					      defaultValue: [],
 | 
				
			||||||
 | 
					      span: 24,
 | 
				
			||||||
 | 
					      showLabel: true,
 | 
				
			||||||
 | 
					      labelWidth: null,
 | 
				
			||||||
 | 
					      layout: 'colFormItem',
 | 
				
			||||||
 | 
					      optionType: 'default',
 | 
				
			||||||
 | 
					      required: true,
 | 
				
			||||||
 | 
					      regList: [],
 | 
				
			||||||
 | 
					      changeTag: true,
 | 
				
			||||||
 | 
					      border: false,
 | 
				
			||||||
 | 
					      document: 'https://element.eleme.cn/#/zh-CN/component/checkbox'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    __slot__: {
 | 
				
			||||||
 | 
					      options: [{
 | 
				
			||||||
 | 
					        label: '选项一',
 | 
				
			||||||
 | 
					        value: 1
 | 
				
			||||||
 | 
					      }, {
 | 
				
			||||||
 | 
					        label: '选项二',
 | 
				
			||||||
 | 
					        value: 2
 | 
				
			||||||
 | 
					      }]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    style: {},
 | 
				
			||||||
 | 
					    size: 'medium',
 | 
				
			||||||
 | 
					    min: null,
 | 
				
			||||||
 | 
					    max: null,
 | 
				
			||||||
 | 
					    disabled: false
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    __config__: {
 | 
				
			||||||
 | 
					      label: '开关',
 | 
				
			||||||
 | 
					      tag: 'el-switch',
 | 
				
			||||||
 | 
					      tagIcon: 'switch',
 | 
				
			||||||
 | 
					      defaultValue: false,
 | 
				
			||||||
 | 
					      span: 24,
 | 
				
			||||||
 | 
					      showLabel: true,
 | 
				
			||||||
 | 
					      labelWidth: null,
 | 
				
			||||||
 | 
					      layout: 'colFormItem',
 | 
				
			||||||
 | 
					      required: true,
 | 
				
			||||||
 | 
					      regList: [],
 | 
				
			||||||
 | 
					      changeTag: true,
 | 
				
			||||||
 | 
					      document: 'https://element.eleme.cn/#/zh-CN/component/switch'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    style: {},
 | 
				
			||||||
 | 
					    disabled: false,
 | 
				
			||||||
 | 
					    'active-text': '',
 | 
				
			||||||
 | 
					    'inactive-text': '',
 | 
				
			||||||
 | 
					    'active-color': null,
 | 
				
			||||||
 | 
					    'inactive-color': null,
 | 
				
			||||||
 | 
					    'active-value': true,
 | 
				
			||||||
 | 
					    'inactive-value': false
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    __config__: {
 | 
				
			||||||
 | 
					      label: '滑块',
 | 
				
			||||||
 | 
					      tag: 'el-slider',
 | 
				
			||||||
 | 
					      tagIcon: 'slider',
 | 
				
			||||||
 | 
					      defaultValue: null,
 | 
				
			||||||
 | 
					      span: 24,
 | 
				
			||||||
 | 
					      showLabel: true,
 | 
				
			||||||
 | 
					      layout: 'colFormItem',
 | 
				
			||||||
 | 
					      labelWidth: null,
 | 
				
			||||||
 | 
					      required: true,
 | 
				
			||||||
 | 
					      regList: [],
 | 
				
			||||||
 | 
					      changeTag: true,
 | 
				
			||||||
 | 
					      document: 'https://element.eleme.cn/#/zh-CN/component/slider'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    disabled: false,
 | 
				
			||||||
 | 
					    min: 0,
 | 
				
			||||||
 | 
					    max: 100,
 | 
				
			||||||
 | 
					    step: 1,
 | 
				
			||||||
 | 
					    'show-stops': false,
 | 
				
			||||||
 | 
					    range: false
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    __config__: {
 | 
				
			||||||
 | 
					      label: '时间选择',
 | 
				
			||||||
 | 
					      tag: 'el-time-picker',
 | 
				
			||||||
 | 
					      tagIcon: 'time',
 | 
				
			||||||
 | 
					      defaultValue: null,
 | 
				
			||||||
 | 
					      span: 24,
 | 
				
			||||||
 | 
					      showLabel: true,
 | 
				
			||||||
 | 
					      layout: 'colFormItem',
 | 
				
			||||||
 | 
					      labelWidth: null,
 | 
				
			||||||
 | 
					      required: true,
 | 
				
			||||||
 | 
					      regList: [],
 | 
				
			||||||
 | 
					      changeTag: true,
 | 
				
			||||||
 | 
					      document: 'https://element.eleme.cn/#/zh-CN/component/time-picker'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    placeholder: '请选择',
 | 
				
			||||||
 | 
					    style: { width: '100%' },
 | 
				
			||||||
 | 
					    disabled: false,
 | 
				
			||||||
 | 
					    clearable: true,
 | 
				
			||||||
 | 
					    'picker-options': {
 | 
				
			||||||
 | 
					      selectableRange: '00:00:00-23:59:59'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    format: 'HH:mm:ss',
 | 
				
			||||||
 | 
					    'value-format': 'HH:mm:ss'
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    __config__: {
 | 
				
			||||||
 | 
					      label: '时间范围',
 | 
				
			||||||
 | 
					      tag: 'el-time-picker',
 | 
				
			||||||
 | 
					      tagIcon: 'time-range',
 | 
				
			||||||
 | 
					      span: 24,
 | 
				
			||||||
 | 
					      showLabel: true,
 | 
				
			||||||
 | 
					      labelWidth: null,
 | 
				
			||||||
 | 
					      layout: 'colFormItem',
 | 
				
			||||||
 | 
					      defaultValue: null,
 | 
				
			||||||
 | 
					      required: true,
 | 
				
			||||||
 | 
					      regList: [],
 | 
				
			||||||
 | 
					      changeTag: true,
 | 
				
			||||||
 | 
					      document: 'https://element.eleme.cn/#/zh-CN/component/time-picker'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    style: { width: '100%' },
 | 
				
			||||||
 | 
					    disabled: false,
 | 
				
			||||||
 | 
					    clearable: true,
 | 
				
			||||||
 | 
					    'is-range': true,
 | 
				
			||||||
 | 
					    'range-separator': '至',
 | 
				
			||||||
 | 
					    'start-placeholder': '开始时间',
 | 
				
			||||||
 | 
					    'end-placeholder': '结束时间',
 | 
				
			||||||
 | 
					    format: 'HH:mm:ss',
 | 
				
			||||||
 | 
					    'value-format': 'HH:mm:ss'
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    __config__: {
 | 
				
			||||||
 | 
					      label: '日期选择',
 | 
				
			||||||
 | 
					      tag: 'el-date-picker',
 | 
				
			||||||
 | 
					      tagIcon: 'date',
 | 
				
			||||||
 | 
					      defaultValue: null,
 | 
				
			||||||
 | 
					      showLabel: true,
 | 
				
			||||||
 | 
					      labelWidth: null,
 | 
				
			||||||
 | 
					      span: 24,
 | 
				
			||||||
 | 
					      layout: 'colFormItem',
 | 
				
			||||||
 | 
					      required: true,
 | 
				
			||||||
 | 
					      regList: [],
 | 
				
			||||||
 | 
					      changeTag: true,
 | 
				
			||||||
 | 
					      document: 'https://element.eleme.cn/#/zh-CN/component/date-picker'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    placeholder: '请选择',
 | 
				
			||||||
 | 
					    type: 'date',
 | 
				
			||||||
 | 
					    style: { width: '100%' },
 | 
				
			||||||
 | 
					    disabled: false,
 | 
				
			||||||
 | 
					    clearable: true,
 | 
				
			||||||
 | 
					    format: 'yyyy-MM-dd',
 | 
				
			||||||
 | 
					    'value-format': 'yyyy-MM-dd',
 | 
				
			||||||
 | 
					    readonly: false
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    __config__: {
 | 
				
			||||||
 | 
					      label: '日期范围',
 | 
				
			||||||
 | 
					      tag: 'el-date-picker',
 | 
				
			||||||
 | 
					      tagIcon: 'date-range',
 | 
				
			||||||
 | 
					      defaultValue: null,
 | 
				
			||||||
 | 
					      span: 24,
 | 
				
			||||||
 | 
					      showLabel: true,
 | 
				
			||||||
 | 
					      labelWidth: null,
 | 
				
			||||||
 | 
					      required: true,
 | 
				
			||||||
 | 
					      layout: 'colFormItem',
 | 
				
			||||||
 | 
					      regList: [],
 | 
				
			||||||
 | 
					      changeTag: true,
 | 
				
			||||||
 | 
					      document: 'https://element.eleme.cn/#/zh-CN/component/date-picker'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    style: { width: '100%' },
 | 
				
			||||||
 | 
					    type: 'daterange',
 | 
				
			||||||
 | 
					    'range-separator': '至',
 | 
				
			||||||
 | 
					    'start-placeholder': '开始日期',
 | 
				
			||||||
 | 
					    'end-placeholder': '结束日期',
 | 
				
			||||||
 | 
					    disabled: false,
 | 
				
			||||||
 | 
					    clearable: true,
 | 
				
			||||||
 | 
					    format: 'yyyy-MM-dd',
 | 
				
			||||||
 | 
					    'value-format': 'yyyy-MM-dd',
 | 
				
			||||||
 | 
					    readonly: false
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    __config__: {
 | 
				
			||||||
 | 
					      label: '评分',
 | 
				
			||||||
 | 
					      tag: 'el-rate',
 | 
				
			||||||
 | 
					      tagIcon: 'rate',
 | 
				
			||||||
 | 
					      defaultValue: 0,
 | 
				
			||||||
 | 
					      span: 24,
 | 
				
			||||||
 | 
					      showLabel: true,
 | 
				
			||||||
 | 
					      labelWidth: null,
 | 
				
			||||||
 | 
					      layout: 'colFormItem',
 | 
				
			||||||
 | 
					      required: true,
 | 
				
			||||||
 | 
					      regList: [],
 | 
				
			||||||
 | 
					      changeTag: true,
 | 
				
			||||||
 | 
					      document: 'https://element.eleme.cn/#/zh-CN/component/rate'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    style: {},
 | 
				
			||||||
 | 
					    max: 5,
 | 
				
			||||||
 | 
					    'allow-half': false,
 | 
				
			||||||
 | 
					    'show-text': false,
 | 
				
			||||||
 | 
					    'show-score': false,
 | 
				
			||||||
 | 
					    disabled: false
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    __config__: {
 | 
				
			||||||
 | 
					      label: '颜色选择',
 | 
				
			||||||
 | 
					      tag: 'el-color-picker',
 | 
				
			||||||
 | 
					      tagIcon: 'color',
 | 
				
			||||||
 | 
					      span: 24,
 | 
				
			||||||
 | 
					      defaultValue: null,
 | 
				
			||||||
 | 
					      showLabel: true,
 | 
				
			||||||
 | 
					      labelWidth: null,
 | 
				
			||||||
 | 
					      layout: 'colFormItem',
 | 
				
			||||||
 | 
					      required: true,
 | 
				
			||||||
 | 
					      regList: [],
 | 
				
			||||||
 | 
					      changeTag: true,
 | 
				
			||||||
 | 
					      document: 'https://element.eleme.cn/#/zh-CN/component/color-picker'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    'show-alpha': false,
 | 
				
			||||||
 | 
					    'color-format': '',
 | 
				
			||||||
 | 
					    disabled: false,
 | 
				
			||||||
 | 
					    size: 'medium'
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    __config__: {
 | 
				
			||||||
 | 
					      label: '上传',
 | 
				
			||||||
 | 
					      tag: 'el-upload',
 | 
				
			||||||
 | 
					      tagIcon: 'upload',
 | 
				
			||||||
 | 
					      layout: 'colFormItem',
 | 
				
			||||||
 | 
					      defaultValue: null,
 | 
				
			||||||
 | 
					      showLabel: true,
 | 
				
			||||||
 | 
					      labelWidth: null,
 | 
				
			||||||
 | 
					      required: true,
 | 
				
			||||||
 | 
					      span: 24,
 | 
				
			||||||
 | 
					      showTip: false,
 | 
				
			||||||
 | 
					      buttonText: '点击上传',
 | 
				
			||||||
 | 
					      regList: [],
 | 
				
			||||||
 | 
					      changeTag: true,
 | 
				
			||||||
 | 
					      fileSize: 2,
 | 
				
			||||||
 | 
					      sizeUnit: 'MB',
 | 
				
			||||||
 | 
					      document: 'https://element.eleme.cn/#/zh-CN/component/upload'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    __slot__: {
 | 
				
			||||||
 | 
					      'list-type': true
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    // action: process.env.VUE_APP_BASE_API + "/admin-api/infra/file/upload", // 请求地址
 | 
				
			||||||
 | 
					    action: '/infra/file/upload', // 请求地址
 | 
				
			||||||
 | 
					    disabled: false,
 | 
				
			||||||
 | 
					    accept: '',
 | 
				
			||||||
 | 
					    name: 'file',
 | 
				
			||||||
 | 
					    'auto-upload': true,
 | 
				
			||||||
 | 
					    'list-type': 'text',
 | 
				
			||||||
 | 
					    multiple: false
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 布局型组件 【左面板】
 | 
				
			||||||
 | 
					export const layoutComponents = [
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    __config__: {
 | 
				
			||||||
 | 
					      layout: 'rowFormItem',
 | 
				
			||||||
 | 
					      tagIcon: 'row',
 | 
				
			||||||
 | 
					      label: '行容器',
 | 
				
			||||||
 | 
					      layoutTree: true,
 | 
				
			||||||
 | 
					      document: 'https://element.eleme.cn/#/zh-CN/component/layout#row-attributes'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    type: 'default',
 | 
				
			||||||
 | 
					    justify: 'start',
 | 
				
			||||||
 | 
					    align: 'top'
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    __config__: {
 | 
				
			||||||
 | 
					      label: '按钮',
 | 
				
			||||||
 | 
					      showLabel: true,
 | 
				
			||||||
 | 
					      changeTag: true,
 | 
				
			||||||
 | 
					      labelWidth: null,
 | 
				
			||||||
 | 
					      tag: 'el-button',
 | 
				
			||||||
 | 
					      tagIcon: 'button',
 | 
				
			||||||
 | 
					      span: 24,
 | 
				
			||||||
 | 
					      layout: 'colFormItem',
 | 
				
			||||||
 | 
					      document: 'https://element.eleme.cn/#/zh-CN/component/button'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    __slot__: {
 | 
				
			||||||
 | 
					      default: '主要按钮'
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    type: 'primary',
 | 
				
			||||||
 | 
					    icon: 'el-icon-search',
 | 
				
			||||||
 | 
					    round: false,
 | 
				
			||||||
 | 
					    size: 'medium',
 | 
				
			||||||
 | 
					    plain: false,
 | 
				
			||||||
 | 
					    circle: false,
 | 
				
			||||||
 | 
					    disabled: false
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    __config__: {
 | 
				
			||||||
 | 
					      layout: 'colFormItem',
 | 
				
			||||||
 | 
					      tagIcon: 'table',
 | 
				
			||||||
 | 
					      tag: 'el-table',
 | 
				
			||||||
 | 
					      document: 'https://element.eleme.cn/#/zh-CN/component/table',
 | 
				
			||||||
 | 
					      span: 24,
 | 
				
			||||||
 | 
					      formId: 101,
 | 
				
			||||||
 | 
					      renderKey: 1595761764203,
 | 
				
			||||||
 | 
					      componentName: 'row101',
 | 
				
			||||||
 | 
					      showLabel: true,
 | 
				
			||||||
 | 
					      changeTag: true,
 | 
				
			||||||
 | 
					      labelWidth: null,
 | 
				
			||||||
 | 
					      label: '表格[开发中]',
 | 
				
			||||||
 | 
					      dataType: 'dynamic',
 | 
				
			||||||
 | 
					      method: 'get',
 | 
				
			||||||
 | 
					      dataPath: 'list',
 | 
				
			||||||
 | 
					      dataConsumer: 'data',
 | 
				
			||||||
 | 
					      url: 'https://www.fastmock.site/mock/f8d7a54fb1e60561e2f720d5a810009d/fg/tableData',
 | 
				
			||||||
 | 
					      children: [{
 | 
				
			||||||
 | 
					        __config__: {
 | 
				
			||||||
 | 
					          layout: 'raw',
 | 
				
			||||||
 | 
					          tag: 'el-table-column',
 | 
				
			||||||
 | 
					          renderKey: 15957617660153
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        prop: 'date',
 | 
				
			||||||
 | 
					        label: '日期'
 | 
				
			||||||
 | 
					      }, {
 | 
				
			||||||
 | 
					        __config__: {
 | 
				
			||||||
 | 
					          layout: 'raw',
 | 
				
			||||||
 | 
					          tag: 'el-table-column',
 | 
				
			||||||
 | 
					          renderKey: 15957617660152
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        prop: 'address',
 | 
				
			||||||
 | 
					        label: '地址'
 | 
				
			||||||
 | 
					      }, {
 | 
				
			||||||
 | 
					        __config__: {
 | 
				
			||||||
 | 
					          layout: 'raw',
 | 
				
			||||||
 | 
					          tag: 'el-table-column',
 | 
				
			||||||
 | 
					          renderKey: 15957617660151
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        prop: 'name',
 | 
				
			||||||
 | 
					        label: '名称'
 | 
				
			||||||
 | 
					      }, {
 | 
				
			||||||
 | 
					        __config__: {
 | 
				
			||||||
 | 
					          layout: 'raw',
 | 
				
			||||||
 | 
					          tag: 'el-table-column',
 | 
				
			||||||
 | 
					          renderKey: 1595774496335,
 | 
				
			||||||
 | 
					          children: [
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					              __config__: {
 | 
				
			||||||
 | 
					                label: '按钮',
 | 
				
			||||||
 | 
					                tag: 'el-button',
 | 
				
			||||||
 | 
					                tagIcon: 'button',
 | 
				
			||||||
 | 
					                layout: 'raw',
 | 
				
			||||||
 | 
					                renderKey: 1595779809901
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              __slot__: {
 | 
				
			||||||
 | 
					                default: '主要按钮'
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              type: 'primary',
 | 
				
			||||||
 | 
					              icon: 'el-icon-search',
 | 
				
			||||||
 | 
					              round: false,
 | 
				
			||||||
 | 
					              size: 'medium'
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          ]
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        label: '操作'
 | 
				
			||||||
 | 
					      }]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    data: [],
 | 
				
			||||||
 | 
					    directives: [{
 | 
				
			||||||
 | 
					      name: 'loading',
 | 
				
			||||||
 | 
					      value: true
 | 
				
			||||||
 | 
					    }],
 | 
				
			||||||
 | 
					    border: true,
 | 
				
			||||||
 | 
					    type: 'default',
 | 
				
			||||||
 | 
					    justify: 'start',
 | 
				
			||||||
 | 
					    align: 'top'
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
							
								
								
									
										18
									
								
								src/components/generator/css.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								src/components/generator/css.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					const styles = {
 | 
				
			||||||
 | 
					  'el-rate': '.el-rate{display: inline-block; vertical-align: text-top;}',
 | 
				
			||||||
 | 
					  'el-upload': '.el-upload__tip{line-height: 1.2;}'
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function addCss(cssList, el) {
 | 
				
			||||||
 | 
					  const css = styles[el.__config__.tag]
 | 
				
			||||||
 | 
					  css && cssList.indexOf(css) === -1 && cssList.push(css)
 | 
				
			||||||
 | 
					  if (el.__config__.children) {
 | 
				
			||||||
 | 
					    el.__config__.children.forEach(el2 => addCss(cssList, el2))
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function makeUpCss(conf) {
 | 
				
			||||||
 | 
					  const cssList = []
 | 
				
			||||||
 | 
					  conf.fields.forEach(el => addCss(cssList, el))
 | 
				
			||||||
 | 
					  return cssList.join('\n')
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										37
									
								
								src/components/generator/drawingDefalut.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								src/components/generator/drawingDefalut.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
				
			|||||||
 | 
					export default [
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    __config__: {
 | 
				
			||||||
 | 
					      label: '单行文本',
 | 
				
			||||||
 | 
					      labelWidth: null,
 | 
				
			||||||
 | 
					      showLabel: true,
 | 
				
			||||||
 | 
					      changeTag: true,
 | 
				
			||||||
 | 
					      tag: 'el-input',
 | 
				
			||||||
 | 
					      tagIcon: 'input',
 | 
				
			||||||
 | 
					      defaultValue: undefined,
 | 
				
			||||||
 | 
					      required: true,
 | 
				
			||||||
 | 
					      layout: 'colFormItem',
 | 
				
			||||||
 | 
					      span: 24,
 | 
				
			||||||
 | 
					      document: 'https://element.eleme.cn/#/zh-CN/component/input',
 | 
				
			||||||
 | 
					      // 正则校验规则
 | 
				
			||||||
 | 
					      regList: [{
 | 
				
			||||||
 | 
					        pattern: '/^1(3|4|5|7|8|9)\\d{9}$/',
 | 
				
			||||||
 | 
					        message: '手机号格式错误'
 | 
				
			||||||
 | 
					      }]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    // 组件的插槽属性
 | 
				
			||||||
 | 
					    __slot__: {
 | 
				
			||||||
 | 
					      prepend: '',
 | 
				
			||||||
 | 
					      append: ''
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    __vModel__: 'mobile',
 | 
				
			||||||
 | 
					    placeholder: '请输入手机号',
 | 
				
			||||||
 | 
					    style: { width: '100%' },
 | 
				
			||||||
 | 
					    clearable: true,
 | 
				
			||||||
 | 
					    'prefix-icon': 'el-icon-mobile',
 | 
				
			||||||
 | 
					    'suffix-icon': '',
 | 
				
			||||||
 | 
					    maxlength: 11,
 | 
				
			||||||
 | 
					    'show-word-limit': true,
 | 
				
			||||||
 | 
					    readonly: false,
 | 
				
			||||||
 | 
					    disabled: false
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
							
								
								
									
										399
									
								
								src/components/generator/html.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										399
									
								
								src/components/generator/html.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,399 @@
 | 
				
			|||||||
 | 
					/* eslint-disable max-len */
 | 
				
			||||||
 | 
					import ruleTrigger from './ruleTrigger'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let confGlobal
 | 
				
			||||||
 | 
					let someSpanIsNot24
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function dialogWrapper(str) {
 | 
				
			||||||
 | 
					  return `<el-dialog v-bind="$attrs" v-on="$listeners" @open="onOpen" @close="onClose" title="Dialog Titile">
 | 
				
			||||||
 | 
					    ${str}
 | 
				
			||||||
 | 
					    <div slot="footer">
 | 
				
			||||||
 | 
					      <el-button @click="close">取消</el-button>
 | 
				
			||||||
 | 
					      <el-button type="primary" @click="handelConfirm">确定</el-button>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					  </el-dialog>`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function vueTemplate(str) {
 | 
				
			||||||
 | 
					  return `<template>
 | 
				
			||||||
 | 
					    <div>
 | 
				
			||||||
 | 
					      ${str}
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					  </template>`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function vueScript(str) {
 | 
				
			||||||
 | 
					  return `<script>
 | 
				
			||||||
 | 
					    ${str}
 | 
				
			||||||
 | 
					  </script>`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function cssStyle(cssStr) {
 | 
				
			||||||
 | 
					  return `<style>
 | 
				
			||||||
 | 
					    ${cssStr}
 | 
				
			||||||
 | 
					  </style>`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function buildFormTemplate(scheme, child, type) {
 | 
				
			||||||
 | 
					  let labelPosition = ''
 | 
				
			||||||
 | 
					  if (scheme.labelPosition !== 'right') {
 | 
				
			||||||
 | 
					    labelPosition = `label-position="${scheme.labelPosition}"`
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  const disabled = scheme.disabled ? `:disabled="${scheme.disabled}"` : ''
 | 
				
			||||||
 | 
					  let str = `<el-form ref="${scheme.formRef}" :model="${scheme.formModel}" :rules="${scheme.formRules}" size="${scheme.size}" ${disabled} label-width="${scheme.labelWidth}px" ${labelPosition}>
 | 
				
			||||||
 | 
					      ${child}
 | 
				
			||||||
 | 
					      ${buildFromBtns(scheme, type)}
 | 
				
			||||||
 | 
					    </el-form>`
 | 
				
			||||||
 | 
					  if (someSpanIsNot24) {
 | 
				
			||||||
 | 
					    str = `<el-row :gutter="${scheme.gutter}">
 | 
				
			||||||
 | 
					        ${str}
 | 
				
			||||||
 | 
					      </el-row>`
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return str
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function buildFromBtns(scheme, type) {
 | 
				
			||||||
 | 
					  let str = ''
 | 
				
			||||||
 | 
					  if (scheme.formBtns && type === 'file') {
 | 
				
			||||||
 | 
					    str = `<el-form-item size="large">
 | 
				
			||||||
 | 
					          <el-button type="primary" @click="submitForm">提交</el-button>
 | 
				
			||||||
 | 
					          <el-button @click="resetForm">重置</el-button>
 | 
				
			||||||
 | 
					        </el-form-item>`
 | 
				
			||||||
 | 
					    if (someSpanIsNot24) {
 | 
				
			||||||
 | 
					      str = `<el-col :span="24">
 | 
				
			||||||
 | 
					          ${str}
 | 
				
			||||||
 | 
					        </el-col>`
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return str
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// span不为24的用el-col包裹
 | 
				
			||||||
 | 
					function colWrapper(scheme, str) {
 | 
				
			||||||
 | 
					  if (someSpanIsNot24 || scheme.__config__.span !== 24) {
 | 
				
			||||||
 | 
					    return `<el-col :span="${scheme.__config__.span}">
 | 
				
			||||||
 | 
					      ${str}
 | 
				
			||||||
 | 
					    </el-col>`
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return str
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const layouts = {
 | 
				
			||||||
 | 
					  colFormItem(scheme) {
 | 
				
			||||||
 | 
					    const config = scheme.__config__
 | 
				
			||||||
 | 
					    let labelWidth = ''
 | 
				
			||||||
 | 
					    let label = `label="${config.label}"`
 | 
				
			||||||
 | 
					    if (config.labelWidth && config.labelWidth !== confGlobal.labelWidth) {
 | 
				
			||||||
 | 
					      labelWidth = `label-width="${config.labelWidth}px"`
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (config.showLabel === false) {
 | 
				
			||||||
 | 
					      labelWidth = 'label-width="0"'
 | 
				
			||||||
 | 
					      label = ''
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    const required = !ruleTrigger[config.tag] && config.required ? 'required' : ''
 | 
				
			||||||
 | 
					    const tagDom = tags[config.tag] ? tags[config.tag](scheme) : null
 | 
				
			||||||
 | 
					    let str = `<el-form-item ${labelWidth} ${label} prop="${scheme.__vModel__}" ${required}>
 | 
				
			||||||
 | 
					        ${tagDom}
 | 
				
			||||||
 | 
					      </el-form-item>`
 | 
				
			||||||
 | 
					    str = colWrapper(scheme, str)
 | 
				
			||||||
 | 
					    return str
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  rowFormItem(scheme) {
 | 
				
			||||||
 | 
					    const config = scheme.__config__
 | 
				
			||||||
 | 
					    const type = scheme.type === 'default' ? '' : `type="${scheme.type}"`
 | 
				
			||||||
 | 
					    const justify = scheme.type === 'default' ? '' : `justify="${scheme.justify}"`
 | 
				
			||||||
 | 
					    const align = scheme.type === 'default' ? '' : `align="${scheme.align}"`
 | 
				
			||||||
 | 
					    const gutter = scheme.gutter ? `:gutter="${scheme.gutter}"` : ''
 | 
				
			||||||
 | 
					    const children = config.children.map(el => layouts[el.__config__.layout](el))
 | 
				
			||||||
 | 
					    let str = `<el-row ${type} ${justify} ${align} ${gutter}>
 | 
				
			||||||
 | 
					      ${children.join('\n')}
 | 
				
			||||||
 | 
					    </el-row>`
 | 
				
			||||||
 | 
					    str = colWrapper(scheme, str)
 | 
				
			||||||
 | 
					    return str
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const tags = {
 | 
				
			||||||
 | 
					  'el-button': el => {
 | 
				
			||||||
 | 
					    const {
 | 
				
			||||||
 | 
					      tag, disabled
 | 
				
			||||||
 | 
					    } = attrBuilder(el)
 | 
				
			||||||
 | 
					    const type = el.type ? `type="${el.type}"` : ''
 | 
				
			||||||
 | 
					    const icon = el.icon ? `icon="${el.icon}"` : ''
 | 
				
			||||||
 | 
					    const round = el.round ? 'round' : ''
 | 
				
			||||||
 | 
					    const size = el.size ? `size="${el.size}"` : ''
 | 
				
			||||||
 | 
					    const plain = el.plain ? 'plain' : ''
 | 
				
			||||||
 | 
					    const circle = el.circle ? 'circle' : ''
 | 
				
			||||||
 | 
					    let child = buildElButtonChild(el)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (child) child = `\n${child}\n` // 换行
 | 
				
			||||||
 | 
					    return `<${tag} ${type} ${icon} ${round} ${size} ${plain} ${disabled} ${circle}>${child}</${tag}>`
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  'el-input': el => {
 | 
				
			||||||
 | 
					    const {
 | 
				
			||||||
 | 
					      tag, disabled, vModel, clearable, placeholder, width
 | 
				
			||||||
 | 
					    } = attrBuilder(el)
 | 
				
			||||||
 | 
					    const maxlength = el.maxlength ? `:maxlength="${el.maxlength}"` : ''
 | 
				
			||||||
 | 
					    const showWordLimit = el['show-word-limit'] ? 'show-word-limit' : ''
 | 
				
			||||||
 | 
					    const readonly = el.readonly ? 'readonly' : ''
 | 
				
			||||||
 | 
					    const prefixIcon = el['prefix-icon'] ? `prefix-icon='${el['prefix-icon']}'` : ''
 | 
				
			||||||
 | 
					    const suffixIcon = el['suffix-icon'] ? `suffix-icon='${el['suffix-icon']}'` : ''
 | 
				
			||||||
 | 
					    const showPassword = el['show-password'] ? 'show-password' : ''
 | 
				
			||||||
 | 
					    const type = el.type ? `type="${el.type}"` : ''
 | 
				
			||||||
 | 
					    const autosize = el.autosize && el.autosize.minRows
 | 
				
			||||||
 | 
					      ? `:autosize="{minRows: ${el.autosize.minRows}, maxRows: ${el.autosize.maxRows}}"`
 | 
				
			||||||
 | 
					      : ''
 | 
				
			||||||
 | 
					    let child = buildElInputChild(el)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (child) child = `\n${child}\n` // 换行
 | 
				
			||||||
 | 
					    return `<${tag} ${vModel} ${type} ${placeholder} ${maxlength} ${showWordLimit} ${readonly} ${disabled} ${clearable} ${prefixIcon} ${suffixIcon} ${showPassword} ${autosize} ${width}>${child}</${tag}>`
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  'el-input-number': el => {
 | 
				
			||||||
 | 
					    const {
 | 
				
			||||||
 | 
					      tag, disabled, vModel, placeholder
 | 
				
			||||||
 | 
					    } = attrBuilder(el)
 | 
				
			||||||
 | 
					    const controlsPosition = el['controls-position'] ? `controls-position=${el['controls-position']}` : ''
 | 
				
			||||||
 | 
					    const min = el.min ? `:min='${el.min}'` : ''
 | 
				
			||||||
 | 
					    const max = el.max ? `:max='${el.max}'` : ''
 | 
				
			||||||
 | 
					    const step = el.step ? `:step='${el.step}'` : ''
 | 
				
			||||||
 | 
					    const stepStrictly = el['step-strictly'] ? 'step-strictly' : ''
 | 
				
			||||||
 | 
					    const precision = el.precision ? `:precision='${el.precision}'` : ''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return `<${tag} ${vModel} ${placeholder} ${step} ${stepStrictly} ${precision} ${controlsPosition} ${min} ${max} ${disabled}></${tag}>`
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  'el-select': el => {
 | 
				
			||||||
 | 
					    const {
 | 
				
			||||||
 | 
					      tag, disabled, vModel, clearable, placeholder, width
 | 
				
			||||||
 | 
					    } = attrBuilder(el)
 | 
				
			||||||
 | 
					    const filterable = el.filterable ? 'filterable' : ''
 | 
				
			||||||
 | 
					    const multiple = el.multiple ? 'multiple' : ''
 | 
				
			||||||
 | 
					    let child = buildElSelectChild(el)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (child) child = `\n${child}\n` // 换行
 | 
				
			||||||
 | 
					    return `<${tag} ${vModel} ${placeholder} ${disabled} ${multiple} ${filterable} ${clearable} ${width}>${child}</${tag}>`
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  'el-radio-group': el => {
 | 
				
			||||||
 | 
					    const { tag, disabled, vModel } = attrBuilder(el)
 | 
				
			||||||
 | 
					    const size = `size="${el.size}"`
 | 
				
			||||||
 | 
					    let child = buildElRadioGroupChild(el)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (child) child = `\n${child}\n` // 换行
 | 
				
			||||||
 | 
					    return `<${tag} ${vModel} ${size} ${disabled}>${child}</${tag}>`
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  'el-checkbox-group': el => {
 | 
				
			||||||
 | 
					    const { tag, disabled, vModel } = attrBuilder(el)
 | 
				
			||||||
 | 
					    const size = `size="${el.size}"`
 | 
				
			||||||
 | 
					    const min = el.min ? `:min="${el.min}"` : ''
 | 
				
			||||||
 | 
					    const max = el.max ? `:max="${el.max}"` : ''
 | 
				
			||||||
 | 
					    let child = buildElCheckboxGroupChild(el)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (child) child = `\n${child}\n` // 换行
 | 
				
			||||||
 | 
					    return `<${tag} ${vModel} ${min} ${max} ${size} ${disabled}>${child}</${tag}>`
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  'el-switch': el => {
 | 
				
			||||||
 | 
					    const { tag, disabled, vModel } = attrBuilder(el)
 | 
				
			||||||
 | 
					    const activeText = el['active-text'] ? `active-text="${el['active-text']}"` : ''
 | 
				
			||||||
 | 
					    const inactiveText = el['inactive-text'] ? `inactive-text="${el['inactive-text']}"` : ''
 | 
				
			||||||
 | 
					    const activeColor = el['active-color'] ? `active-color="${el['active-color']}"` : ''
 | 
				
			||||||
 | 
					    const inactiveColor = el['inactive-color'] ? `inactive-color="${el['inactive-color']}"` : ''
 | 
				
			||||||
 | 
					    const activeValue = el['active-value'] !== true ? `:active-value='${JSON.stringify(el['active-value'])}'` : ''
 | 
				
			||||||
 | 
					    const inactiveValue = el['inactive-value'] !== false ? `:inactive-value='${JSON.stringify(el['inactive-value'])}'` : ''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return `<${tag} ${vModel} ${activeText} ${inactiveText} ${activeColor} ${inactiveColor} ${activeValue} ${inactiveValue} ${disabled}></${tag}>`
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  'el-cascader': el => {
 | 
				
			||||||
 | 
					    const {
 | 
				
			||||||
 | 
					      tag, disabled, vModel, clearable, placeholder, width
 | 
				
			||||||
 | 
					    } = attrBuilder(el)
 | 
				
			||||||
 | 
					    const options = el.options ? `:options="${el.__vModel__}Options"` : ''
 | 
				
			||||||
 | 
					    const props = el.props ? `:props="${el.__vModel__}Props"` : ''
 | 
				
			||||||
 | 
					    const showAllLevels = el['show-all-levels'] ? '' : ':show-all-levels="false"'
 | 
				
			||||||
 | 
					    const filterable = el.filterable ? 'filterable' : ''
 | 
				
			||||||
 | 
					    const separator = el.separator === '/' ? '' : `separator="${el.separator}"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return `<${tag} ${vModel} ${options} ${props} ${width} ${showAllLevels} ${placeholder} ${separator} ${filterable} ${clearable} ${disabled}></${tag}>`
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  'el-slider': el => {
 | 
				
			||||||
 | 
					    const { tag, disabled, vModel } = attrBuilder(el)
 | 
				
			||||||
 | 
					    const min = el.min ? `:min='${el.min}'` : ''
 | 
				
			||||||
 | 
					    const max = el.max ? `:max='${el.max}'` : ''
 | 
				
			||||||
 | 
					    const step = el.step ? `:step='${el.step}'` : ''
 | 
				
			||||||
 | 
					    const range = el.range ? 'range' : ''
 | 
				
			||||||
 | 
					    const showStops = el['show-stops'] ? `:show-stops="${el['show-stops']}"` : ''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return `<${tag} ${min} ${max} ${step} ${vModel} ${range} ${showStops} ${disabled}></${tag}>`
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  'el-time-picker': el => {
 | 
				
			||||||
 | 
					    const {
 | 
				
			||||||
 | 
					      tag, disabled, vModel, clearable, placeholder, width
 | 
				
			||||||
 | 
					    } = attrBuilder(el)
 | 
				
			||||||
 | 
					    const startPlaceholder = el['start-placeholder'] ? `start-placeholder="${el['start-placeholder']}"` : ''
 | 
				
			||||||
 | 
					    const endPlaceholder = el['end-placeholder'] ? `end-placeholder="${el['end-placeholder']}"` : ''
 | 
				
			||||||
 | 
					    const rangeSeparator = el['range-separator'] ? `range-separator="${el['range-separator']}"` : ''
 | 
				
			||||||
 | 
					    const isRange = el['is-range'] ? 'is-range' : ''
 | 
				
			||||||
 | 
					    const format = el.format ? `format="${el.format}"` : ''
 | 
				
			||||||
 | 
					    const valueFormat = el['value-format'] ? `value-format="${el['value-format']}"` : ''
 | 
				
			||||||
 | 
					    const pickerOptions = el['picker-options'] ? `:picker-options='${JSON.stringify(el['picker-options'])}'` : ''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return `<${tag} ${vModel} ${isRange} ${format} ${valueFormat} ${pickerOptions} ${width} ${placeholder} ${startPlaceholder} ${endPlaceholder} ${rangeSeparator} ${clearable} ${disabled}></${tag}>`
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  'el-date-picker': el => {
 | 
				
			||||||
 | 
					    const {
 | 
				
			||||||
 | 
					      tag, disabled, vModel, clearable, placeholder, width
 | 
				
			||||||
 | 
					    } = attrBuilder(el)
 | 
				
			||||||
 | 
					    const startPlaceholder = el['start-placeholder'] ? `start-placeholder="${el['start-placeholder']}"` : ''
 | 
				
			||||||
 | 
					    const endPlaceholder = el['end-placeholder'] ? `end-placeholder="${el['end-placeholder']}"` : ''
 | 
				
			||||||
 | 
					    const rangeSeparator = el['range-separator'] ? `range-separator="${el['range-separator']}"` : ''
 | 
				
			||||||
 | 
					    const format = el.format ? `format="${el.format}"` : ''
 | 
				
			||||||
 | 
					    const valueFormat = el['value-format'] ? `value-format="${el['value-format']}"` : ''
 | 
				
			||||||
 | 
					    const type = el.type === 'date' ? '' : `type="${el.type}"`
 | 
				
			||||||
 | 
					    const readonly = el.readonly ? 'readonly' : ''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return `<${tag} ${type} ${vModel} ${format} ${valueFormat} ${width} ${placeholder} ${startPlaceholder} ${endPlaceholder} ${rangeSeparator} ${clearable} ${readonly} ${disabled}></${tag}>`
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  'el-rate': el => {
 | 
				
			||||||
 | 
					    const { tag, disabled, vModel } = attrBuilder(el)
 | 
				
			||||||
 | 
					    const max = el.max ? `:max='${el.max}'` : ''
 | 
				
			||||||
 | 
					    const allowHalf = el['allow-half'] ? 'allow-half' : ''
 | 
				
			||||||
 | 
					    const showText = el['show-text'] ? 'show-text' : ''
 | 
				
			||||||
 | 
					    const showScore = el['show-score'] ? 'show-score' : ''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return `<${tag} ${vModel} ${max} ${allowHalf} ${showText} ${showScore} ${disabled}></${tag}>`
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  'el-color-picker': el => {
 | 
				
			||||||
 | 
					    const { tag, disabled, vModel } = attrBuilder(el)
 | 
				
			||||||
 | 
					    const size = `size="${el.size}"`
 | 
				
			||||||
 | 
					    const showAlpha = el['show-alpha'] ? 'show-alpha' : ''
 | 
				
			||||||
 | 
					    const colorFormat = el['color-format'] ? `color-format="${el['color-format']}"` : ''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return `<${tag} ${vModel} ${size} ${showAlpha} ${colorFormat} ${disabled}></${tag}>`
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  'el-upload': el => {
 | 
				
			||||||
 | 
					    const { tag } = el.__config__
 | 
				
			||||||
 | 
					    const disabled = el.disabled ? ':disabled=\'true\'' : ''
 | 
				
			||||||
 | 
					    const action = el.action ? `:action="${el.__vModel__}Action"` : ''
 | 
				
			||||||
 | 
					    const multiple = el.multiple ? 'multiple' : ''
 | 
				
			||||||
 | 
					    const listType = el['list-type'] !== 'text' ? `list-type="${el['list-type']}"` : ''
 | 
				
			||||||
 | 
					    const accept = el.accept ? `accept="${el.accept}"` : ''
 | 
				
			||||||
 | 
					    const name = el.name !== 'file' ? `name="${el.name}"` : ''
 | 
				
			||||||
 | 
					    const autoUpload = el['auto-upload'] === false ? ':auto-upload="false"' : ''
 | 
				
			||||||
 | 
					    const beforeUpload = `:before-upload="${el.__vModel__}BeforeUpload"`
 | 
				
			||||||
 | 
					    const fileList = `:file-list="${el.__vModel__}fileList"`
 | 
				
			||||||
 | 
					    const ref = `ref="${el.__vModel__}"`
 | 
				
			||||||
 | 
					    let child = buildElUploadChild(el)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (child) child = `\n${child}\n` // 换行
 | 
				
			||||||
 | 
					    return `<${tag} ${ref} ${fileList} ${action} ${autoUpload} ${multiple} ${beforeUpload} ${listType} ${accept} ${name} ${disabled}>${child}</${tag}>`
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  tinymce: el => {
 | 
				
			||||||
 | 
					    const { tag, vModel, placeholder } = attrBuilder(el)
 | 
				
			||||||
 | 
					    const height = el.height ? `:height="${el.height}"` : ''
 | 
				
			||||||
 | 
					    const branding = el.branding ? `:branding="${el.branding}"` : ''
 | 
				
			||||||
 | 
					    return `<${tag} ${vModel} ${placeholder} ${height} ${branding}></${tag}>`
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function attrBuilder(el) {
 | 
				
			||||||
 | 
					  return {
 | 
				
			||||||
 | 
					    tag: el.__config__.tag,
 | 
				
			||||||
 | 
					    vModel: `v-model="${confGlobal.formModel}.${el.__vModel__}"`,
 | 
				
			||||||
 | 
					    clearable: el.clearable ? 'clearable' : '',
 | 
				
			||||||
 | 
					    placeholder: el.placeholder ? `placeholder="${el.placeholder}"` : '',
 | 
				
			||||||
 | 
					    width: el.style && el.style.width ? ':style="{width: \'100%\'}"' : '',
 | 
				
			||||||
 | 
					    disabled: el.disabled ? ':disabled=\'true\'' : ''
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// el-buttin 子级
 | 
				
			||||||
 | 
					function buildElButtonChild(scheme) {
 | 
				
			||||||
 | 
					  const children = []
 | 
				
			||||||
 | 
					  const slot = scheme.__slot__ || {}
 | 
				
			||||||
 | 
					  if (slot.default) {
 | 
				
			||||||
 | 
					    children.push(slot.default)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return children.join('\n')
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// el-input 子级
 | 
				
			||||||
 | 
					function buildElInputChild(scheme) {
 | 
				
			||||||
 | 
					  const children = []
 | 
				
			||||||
 | 
					  const slot = scheme.__slot__
 | 
				
			||||||
 | 
					  if (slot && slot.prepend) {
 | 
				
			||||||
 | 
					    children.push(`<template slot="prepend">${slot.prepend}</template>`)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  if (slot && slot.append) {
 | 
				
			||||||
 | 
					    children.push(`<template slot="append">${slot.append}</template>`)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return children.join('\n')
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// el-select 子级
 | 
				
			||||||
 | 
					function buildElSelectChild(scheme) {
 | 
				
			||||||
 | 
					  const children = []
 | 
				
			||||||
 | 
					  const slot = scheme.__slot__
 | 
				
			||||||
 | 
					  if (slot && slot.options && slot.options.length) {
 | 
				
			||||||
 | 
					    children.push(`<el-option v-for="(item, index) in ${scheme.__vModel__}Options" :key="index" :label="item.label" :value="item.value" :disabled="item.disabled"></el-option>`)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return children.join('\n')
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// el-radio-group 子级
 | 
				
			||||||
 | 
					function buildElRadioGroupChild(scheme) {
 | 
				
			||||||
 | 
					  const children = []
 | 
				
			||||||
 | 
					  const slot = scheme.__slot__
 | 
				
			||||||
 | 
					  const config = scheme.__config__
 | 
				
			||||||
 | 
					  if (slot && slot.options && slot.options.length) {
 | 
				
			||||||
 | 
					    const tag = config.optionType === 'button' ? 'el-radio-button' : 'el-radio'
 | 
				
			||||||
 | 
					    const border = config.border ? 'border' : ''
 | 
				
			||||||
 | 
					    children.push(`<${tag} v-for="(item, index) in ${scheme.__vModel__}Options" :key="index" :label="item.value" :disabled="item.disabled" ${border}>{{item.label}}</${tag}>`)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return children.join('\n')
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// el-checkbox-group 子级
 | 
				
			||||||
 | 
					function buildElCheckboxGroupChild(scheme) {
 | 
				
			||||||
 | 
					  const children = []
 | 
				
			||||||
 | 
					  const slot = scheme.__slot__
 | 
				
			||||||
 | 
					  const config = scheme.__config__
 | 
				
			||||||
 | 
					  if (slot && slot.options && slot.options.length) {
 | 
				
			||||||
 | 
					    const tag = config.optionType === 'button' ? 'el-checkbox-button' : 'el-checkbox'
 | 
				
			||||||
 | 
					    const border = config.border ? 'border' : ''
 | 
				
			||||||
 | 
					    children.push(`<${tag} v-for="(item, index) in ${scheme.__vModel__}Options" :key="index" :label="item.value" :disabled="item.disabled" ${border}>{{item.label}}</${tag}>`)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return children.join('\n')
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// el-upload 子级
 | 
				
			||||||
 | 
					function buildElUploadChild(scheme) {
 | 
				
			||||||
 | 
					  const list = []
 | 
				
			||||||
 | 
					  const config = scheme.__config__
 | 
				
			||||||
 | 
					  if (scheme['list-type'] === 'picture-card') list.push('<i class="el-icon-plus"></i>')
 | 
				
			||||||
 | 
					  else list.push(`<el-button size="small" type="primary" icon="el-icon-upload">${config.buttonText}</el-button>`)
 | 
				
			||||||
 | 
					  if (config.showTip) list.push(`<div slot="tip" class="el-upload__tip">只能上传不超过 ${config.fileSize}${config.sizeUnit} 的${scheme.accept}文件</div>`)
 | 
				
			||||||
 | 
					  return list.join('\n')
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 组装html代码。【入口函数】
 | 
				
			||||||
 | 
					 * @param {Object} formConfig 整个表单配置
 | 
				
			||||||
 | 
					 * @param {String} type 生成类型,文件或弹窗等
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export function makeUpHtml(formConfig, type) {
 | 
				
			||||||
 | 
					  const htmlList = []
 | 
				
			||||||
 | 
					  confGlobal = formConfig
 | 
				
			||||||
 | 
					  // 判断布局是否都沾满了24个栅格,以备后续简化代码结构
 | 
				
			||||||
 | 
					  someSpanIsNot24 = formConfig.fields.some(item => item.__config__.span !== 24)
 | 
				
			||||||
 | 
					  // 遍历渲染每个组件成html
 | 
				
			||||||
 | 
					  formConfig.fields.forEach(el => {
 | 
				
			||||||
 | 
					    htmlList.push(layouts[el.__config__.layout](el))
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					  const htmlStr = htmlList.join('\n')
 | 
				
			||||||
 | 
					  // 将组件代码放进form标签
 | 
				
			||||||
 | 
					  let temp = buildFormTemplate(formConfig, htmlStr, type)
 | 
				
			||||||
 | 
					  // dialog标签包裹代码
 | 
				
			||||||
 | 
					  if (type === 'dialog') {
 | 
				
			||||||
 | 
					    temp = dialogWrapper(temp)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  confGlobal = null
 | 
				
			||||||
 | 
					  return temp
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										271
									
								
								src/components/generator/js.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										271
									
								
								src/components/generator/js.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,271 @@
 | 
				
			|||||||
 | 
					import { isArray } from 'util'
 | 
				
			||||||
 | 
					import { exportDefault, titleCase, deepClone } from '@/utils'
 | 
				
			||||||
 | 
					import ruleTrigger from './ruleTrigger'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const units = {
 | 
				
			||||||
 | 
					  KB: '1024',
 | 
				
			||||||
 | 
					  MB: '1024 / 1024',
 | 
				
			||||||
 | 
					  GB: '1024 / 1024 / 1024'
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					let confGlobal
 | 
				
			||||||
 | 
					const inheritAttrs = {
 | 
				
			||||||
 | 
					  file: '',
 | 
				
			||||||
 | 
					  dialog: 'inheritAttrs: false,'
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 组装js 【入口函数】
 | 
				
			||||||
 | 
					 * @param {Object} formConfig 整个表单配置
 | 
				
			||||||
 | 
					 * @param {String} type 生成类型,文件或弹窗等
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export function makeUpJs(formConfig, type) {
 | 
				
			||||||
 | 
					  confGlobal = formConfig = deepClone(formConfig)
 | 
				
			||||||
 | 
					  const dataList = []
 | 
				
			||||||
 | 
					  const ruleList = []
 | 
				
			||||||
 | 
					  const optionsList = []
 | 
				
			||||||
 | 
					  const propsList = []
 | 
				
			||||||
 | 
					  const methodList = mixinMethod(type)
 | 
				
			||||||
 | 
					  const uploadVarList = []
 | 
				
			||||||
 | 
					  const created = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  formConfig.fields.forEach(el => {
 | 
				
			||||||
 | 
					    buildAttributes(el, dataList, ruleList, optionsList, methodList, propsList, uploadVarList, created)
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const script = buildexport(
 | 
				
			||||||
 | 
					    formConfig,
 | 
				
			||||||
 | 
					    type,
 | 
				
			||||||
 | 
					    dataList.join('\n'),
 | 
				
			||||||
 | 
					    ruleList.join('\n'),
 | 
				
			||||||
 | 
					    optionsList.join('\n'),
 | 
				
			||||||
 | 
					    uploadVarList.join('\n'),
 | 
				
			||||||
 | 
					    propsList.join('\n'),
 | 
				
			||||||
 | 
					    methodList.join('\n'),
 | 
				
			||||||
 | 
					    created.join('\n')
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
 | 
					  confGlobal = null
 | 
				
			||||||
 | 
					  return script
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 构建组件属性
 | 
				
			||||||
 | 
					function buildAttributes(scheme, dataList, ruleList, optionsList, methodList, propsList, uploadVarList, created) {
 | 
				
			||||||
 | 
					  const config = scheme.__config__
 | 
				
			||||||
 | 
					  const slot = scheme.__slot__
 | 
				
			||||||
 | 
					  buildData(scheme, dataList)
 | 
				
			||||||
 | 
					  buildRules(scheme, ruleList)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // 特殊处理options属性
 | 
				
			||||||
 | 
					  if (scheme.options || (slot && slot.options && slot.options.length)) {
 | 
				
			||||||
 | 
					    buildOptions(scheme, optionsList)
 | 
				
			||||||
 | 
					    if (config.dataType === 'dynamic') {
 | 
				
			||||||
 | 
					      const model = `${scheme.__vModel__}Options`
 | 
				
			||||||
 | 
					      const options = titleCase(model)
 | 
				
			||||||
 | 
					      const methodName = `get${options}`
 | 
				
			||||||
 | 
					      buildOptionMethod(methodName, model, methodList, scheme)
 | 
				
			||||||
 | 
					      callInCreated(methodName, created)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // 处理props
 | 
				
			||||||
 | 
					  if (scheme.props && scheme.props.props) {
 | 
				
			||||||
 | 
					    buildProps(scheme, propsList)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // 处理el-upload的action
 | 
				
			||||||
 | 
					  if (scheme.action && config.tag === 'el-upload') {
 | 
				
			||||||
 | 
					    uploadVarList.push(
 | 
				
			||||||
 | 
					      `${scheme.__vModel__}Action: '${scheme.action}',
 | 
				
			||||||
 | 
					      ${scheme.__vModel__}fileList: [],`
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    methodList.push(buildBeforeUpload(scheme))
 | 
				
			||||||
 | 
					    // 非自动上传时,生成手动上传的函数
 | 
				
			||||||
 | 
					    if (!scheme['auto-upload']) {
 | 
				
			||||||
 | 
					      methodList.push(buildSubmitUpload(scheme))
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // 构建子级组件属性
 | 
				
			||||||
 | 
					  if (config.children) {
 | 
				
			||||||
 | 
					    config.children.forEach(item => {
 | 
				
			||||||
 | 
					      buildAttributes(item, dataList, ruleList, optionsList, methodList, propsList, uploadVarList, created)
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 在Created调用函数
 | 
				
			||||||
 | 
					function callInCreated(methodName, created) {
 | 
				
			||||||
 | 
					  created.push(`this.${methodName}()`)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 混入处理函数
 | 
				
			||||||
 | 
					function mixinMethod(type) {
 | 
				
			||||||
 | 
					  const list = []; const
 | 
				
			||||||
 | 
					    minxins = {
 | 
				
			||||||
 | 
					      file: confGlobal.formBtns ? {
 | 
				
			||||||
 | 
					        submitForm: `submitForm() {
 | 
				
			||||||
 | 
					        this.$refs['${confGlobal.formRef}'].validate(valid => {
 | 
				
			||||||
 | 
					          if(!valid) return
 | 
				
			||||||
 | 
					          // TODO 提交表单
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					      },`,
 | 
				
			||||||
 | 
					        resetForm: `resetForm() {
 | 
				
			||||||
 | 
					        this.$refs['${confGlobal.formRef}'].resetFields()
 | 
				
			||||||
 | 
					      },`
 | 
				
			||||||
 | 
					      } : null,
 | 
				
			||||||
 | 
					      dialog: {
 | 
				
			||||||
 | 
					        onOpen: 'onOpen() {},',
 | 
				
			||||||
 | 
					        onClose: `onClose() {
 | 
				
			||||||
 | 
					        this.$refs['${confGlobal.formRef}'].resetFields()
 | 
				
			||||||
 | 
					      },`,
 | 
				
			||||||
 | 
					        close: `close() {
 | 
				
			||||||
 | 
					        this.$emit('update:visible', false)
 | 
				
			||||||
 | 
					      },`,
 | 
				
			||||||
 | 
					        handelConfirm: `handelConfirm() {
 | 
				
			||||||
 | 
					        this.$refs['${confGlobal.formRef}'].validate(valid => {
 | 
				
			||||||
 | 
					          if(!valid) return
 | 
				
			||||||
 | 
					          this.close()
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					      },`
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const methods = minxins[type]
 | 
				
			||||||
 | 
					  if (methods) {
 | 
				
			||||||
 | 
					    Object.keys(methods).forEach(key => {
 | 
				
			||||||
 | 
					      list.push(methods[key])
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return list
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 构建data
 | 
				
			||||||
 | 
					function buildData(scheme, dataList) {
 | 
				
			||||||
 | 
					  const config = scheme.__config__
 | 
				
			||||||
 | 
					  if (scheme.__vModel__ === undefined) return
 | 
				
			||||||
 | 
					  const defaultValue = JSON.stringify(config.defaultValue)
 | 
				
			||||||
 | 
					  dataList.push(`${scheme.__vModel__}: ${defaultValue},`)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 构建校验规则
 | 
				
			||||||
 | 
					function buildRules(scheme, ruleList) {
 | 
				
			||||||
 | 
					  const config = scheme.__config__
 | 
				
			||||||
 | 
					  if (scheme.__vModel__ === undefined) return
 | 
				
			||||||
 | 
					  const rules = []
 | 
				
			||||||
 | 
					  if (ruleTrigger[config.tag]) {
 | 
				
			||||||
 | 
					    if (config.required) {
 | 
				
			||||||
 | 
					      const type = isArray(config.defaultValue) ? 'type: \'array\',' : ''
 | 
				
			||||||
 | 
					      let message = isArray(config.defaultValue) ? `请至少选择一个${config.label}` : scheme.placeholder
 | 
				
			||||||
 | 
					      if (message === undefined) message = `${config.label}不能为空`
 | 
				
			||||||
 | 
					      rules.push(`{ required: true, ${type} message: '${message}', trigger: '${ruleTrigger[config.tag]}' }`)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (config.regList && isArray(config.regList)) {
 | 
				
			||||||
 | 
					      config.regList.forEach(item => {
 | 
				
			||||||
 | 
					        if (item.pattern) {
 | 
				
			||||||
 | 
					          rules.push(
 | 
				
			||||||
 | 
					            `{ pattern: ${eval(item.pattern)}, message: '${item.message}', trigger: '${ruleTrigger[config.tag]}' }`
 | 
				
			||||||
 | 
					          )
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    ruleList.push(`${scheme.__vModel__}: [${rules.join(',')}],`)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 构建options
 | 
				
			||||||
 | 
					function buildOptions(scheme, optionsList) {
 | 
				
			||||||
 | 
					  if (scheme.__vModel__ === undefined) return
 | 
				
			||||||
 | 
					  // el-cascader直接有options属性,其他组件都是定义在slot中,所以有两处判断
 | 
				
			||||||
 | 
					  let { options } = scheme
 | 
				
			||||||
 | 
					  if (!options) options = scheme.__slot__.options
 | 
				
			||||||
 | 
					  if (scheme.__config__.dataType === 'dynamic') { options = [] }
 | 
				
			||||||
 | 
					  const str = `${scheme.__vModel__}Options: ${JSON.stringify(options)},`
 | 
				
			||||||
 | 
					  optionsList.push(str)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function buildProps(scheme, propsList) {
 | 
				
			||||||
 | 
					  const str = `${scheme.__vModel__}Props: ${JSON.stringify(scheme.props.props)},`
 | 
				
			||||||
 | 
					  propsList.push(str)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// el-upload的BeforeUpload
 | 
				
			||||||
 | 
					function buildBeforeUpload(scheme) {
 | 
				
			||||||
 | 
					  const config = scheme.__config__
 | 
				
			||||||
 | 
					  const unitNum = units[config.sizeUnit]; let rightSizeCode = ''; let acceptCode = ''; const
 | 
				
			||||||
 | 
					    returnList = []
 | 
				
			||||||
 | 
					  if (config.fileSize) {
 | 
				
			||||||
 | 
					    rightSizeCode = `let isRightSize = file.size / ${unitNum} < ${config.fileSize}
 | 
				
			||||||
 | 
					    if(!isRightSize){
 | 
				
			||||||
 | 
					      this.$message.error('文件大小超过 ${config.fileSize}${config.sizeUnit}')
 | 
				
			||||||
 | 
					    }`
 | 
				
			||||||
 | 
					    returnList.push('isRightSize')
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  if (scheme.accept) {
 | 
				
			||||||
 | 
					    acceptCode = `let isAccept = new RegExp('${scheme.accept}').test(file.type)
 | 
				
			||||||
 | 
					    if(!isAccept){
 | 
				
			||||||
 | 
					      this.$message.error('应该选择${scheme.accept}类型的文件')
 | 
				
			||||||
 | 
					    }`
 | 
				
			||||||
 | 
					    returnList.push('isAccept')
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  const str = `${scheme.__vModel__}BeforeUpload(file) {
 | 
				
			||||||
 | 
					    ${rightSizeCode}
 | 
				
			||||||
 | 
					    ${acceptCode}
 | 
				
			||||||
 | 
					    return ${returnList.join('&&')}
 | 
				
			||||||
 | 
					  },`
 | 
				
			||||||
 | 
					  return returnList.length ? str : ''
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// el-upload的submit
 | 
				
			||||||
 | 
					function buildSubmitUpload(scheme) {
 | 
				
			||||||
 | 
					  const str = `submitUpload() {
 | 
				
			||||||
 | 
					    this.$refs['${scheme.__vModel__}'].submit()
 | 
				
			||||||
 | 
					  },`
 | 
				
			||||||
 | 
					  return str
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function buildOptionMethod(methodName, model, methodList, scheme) {
 | 
				
			||||||
 | 
					  const config = scheme.__config__
 | 
				
			||||||
 | 
					  const str = `${methodName}() {
 | 
				
			||||||
 | 
					    // 注意:this.$axios是通过Vue.prototype.$axios = axios挂载产生的
 | 
				
			||||||
 | 
					    this.$axios({
 | 
				
			||||||
 | 
					      method: '${config.method}',
 | 
				
			||||||
 | 
					      url: '${config.url}'
 | 
				
			||||||
 | 
					    }).then(resp => {
 | 
				
			||||||
 | 
					      var { data } = resp
 | 
				
			||||||
 | 
					      this.${model} = data.${config.dataPath}
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  },`
 | 
				
			||||||
 | 
					  methodList.push(str)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// js整体拼接
 | 
				
			||||||
 | 
					function buildexport(conf, type, data, rules, selectOptions, uploadVar, props, methods, created) {
 | 
				
			||||||
 | 
					  const str = `${exportDefault}{
 | 
				
			||||||
 | 
					  ${inheritAttrs[type]}
 | 
				
			||||||
 | 
					  components: {},
 | 
				
			||||||
 | 
					  props: [],
 | 
				
			||||||
 | 
					  data () {
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      ${conf.formModel}: {
 | 
				
			||||||
 | 
					        ${data}
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      ${conf.formRules}: {
 | 
				
			||||||
 | 
					        ${rules}
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      ${uploadVar}
 | 
				
			||||||
 | 
					      ${selectOptions}
 | 
				
			||||||
 | 
					      ${props}
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  computed: {},
 | 
				
			||||||
 | 
					  watch: {},
 | 
				
			||||||
 | 
					  created () {
 | 
				
			||||||
 | 
					    ${created}
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  mounted () {},
 | 
				
			||||||
 | 
					  methods: {
 | 
				
			||||||
 | 
					    ${methods}
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}`
 | 
				
			||||||
 | 
					  return str
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										16
									
								
								src/components/generator/ruleTrigger.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/components/generator/ruleTrigger.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 用于生成表单校验,指定正则规则的触发方式。
 | 
				
			||||||
 | 
					 * 未在此处声明无触发方式的组件将不生成rule!!
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  'el-input': 'blur',
 | 
				
			||||||
 | 
					  'el-input-number': 'blur',
 | 
				
			||||||
 | 
					  'el-select': 'change',
 | 
				
			||||||
 | 
					  'el-radio-group': 'change',
 | 
				
			||||||
 | 
					  'el-checkbox-group': 'change',
 | 
				
			||||||
 | 
					  'el-cascader': 'change',
 | 
				
			||||||
 | 
					  'el-time-picker': 'change',
 | 
				
			||||||
 | 
					  'el-date-picker': 'change',
 | 
				
			||||||
 | 
					  'el-rate': 'change',
 | 
				
			||||||
 | 
					  tinymce: 'blur'
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										3
									
								
								src/components/tinymce/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								src/components/tinymce/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					## 简介
 | 
				
			||||||
 | 
					富文本编辑器tinymce的一个vue版本封装。使用cdn动态脚本引入的方式加载。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										8
									
								
								src/components/tinymce/config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/components/tinymce/config.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					/* eslint-disable max-len */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const plugins = [
 | 
				
			||||||
 | 
					  'advlist anchor autolink autosave code codesample directionality emoticons fullscreen hr image imagetools insertdatetime link lists media nonbreaking noneditable pagebreak paste preview print save searchreplace spellchecker tabfocus table template textpattern visualblocks visualchars wordcount'
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					export const toolbar = [
 | 
				
			||||||
 | 
					  'code searchreplace bold italic underline strikethrough alignleft aligncenter alignright outdent indent blockquote removeformat subscript superscript codesample hr bullist numlist link image charmap preview anchor pagebreak insertdatetime media table emoticons forecolor backcolor fullscreen'
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
							
								
								
									
										38
									
								
								src/components/tinymce/example/Index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								src/components/tinymce/example/Index.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <div>
 | 
				
			||||||
 | 
					    <Tinymce v-model="defaultValue" :height="300" placeholder="在这里输入文字" />
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					import Tinymce from '../index.vue'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  components: {
 | 
				
			||||||
 | 
					    Tinymce
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  props: {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  data() {
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      defaultValue: '<p>配置文档参阅:http://tinymce.ax-z.cn</p>'
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  computed: {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  watch: {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  created() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  mounted() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  methods: {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
							
								
								
									
										3
									
								
								src/components/tinymce/index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								src/components/tinymce/index.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					import Index from './index.vue'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default Index
 | 
				
			||||||
							
								
								
									
										88
									
								
								src/components/tinymce/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								src/components/tinymce/index.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,88 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <textarea :id="tinymceId" style="visibility: hidden" />
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					import loadTinymce from '@/utils/loadTinymce'
 | 
				
			||||||
 | 
					import { plugins, toolbar } from './config'
 | 
				
			||||||
 | 
					import { debounce } from 'throttle-debounce'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let num = 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  props: {
 | 
				
			||||||
 | 
					    id: {
 | 
				
			||||||
 | 
					      type: String,
 | 
				
			||||||
 | 
					      default: () => {
 | 
				
			||||||
 | 
					        num === 10000 && (num = 1)
 | 
				
			||||||
 | 
					        return `tinymce${+new Date()}${num++}`
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    value: {
 | 
				
			||||||
 | 
					      default: ''
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  data() {
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      tinymceId: this.id
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  mounted() {
 | 
				
			||||||
 | 
					    loadTinymce(tinymce => {
 | 
				
			||||||
 | 
					      // eslint-disable-next-line global-require
 | 
				
			||||||
 | 
					      require('./zh_CN')
 | 
				
			||||||
 | 
					      let conf = {
 | 
				
			||||||
 | 
					        selector: `#${this.tinymceId}`,
 | 
				
			||||||
 | 
					        language: 'zh_CN',
 | 
				
			||||||
 | 
					        menubar: 'file edit insert view format table',
 | 
				
			||||||
 | 
					        plugins,
 | 
				
			||||||
 | 
					        toolbar,
 | 
				
			||||||
 | 
					        height: 300,
 | 
				
			||||||
 | 
					        branding: false,
 | 
				
			||||||
 | 
					        object_resizing: false,
 | 
				
			||||||
 | 
					        end_container_on_empty_block: true,
 | 
				
			||||||
 | 
					        powerpaste_word_import: 'clean',
 | 
				
			||||||
 | 
					        code_dialog_height: 450,
 | 
				
			||||||
 | 
					        code_dialog_width: 1000,
 | 
				
			||||||
 | 
					        advlist_bullet_styles: 'square',
 | 
				
			||||||
 | 
					        advlist_number_styles: 'default',
 | 
				
			||||||
 | 
					        default_link_target: '_blank',
 | 
				
			||||||
 | 
					        link_title: false,
 | 
				
			||||||
 | 
					        nonbreaking_force_tab: true
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      conf = Object.assign(conf, this.$attrs)
 | 
				
			||||||
 | 
					      conf.init_instance_callback = editor => {
 | 
				
			||||||
 | 
					        if (this.value) editor.setContent(this.value)
 | 
				
			||||||
 | 
					        this.vModel(editor)
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      tinymce.init(conf)
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  destroyed() {
 | 
				
			||||||
 | 
					    this.destroyTinymce()
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  methods: {
 | 
				
			||||||
 | 
					    vModel(editor) {
 | 
				
			||||||
 | 
					      // 控制连续写入时setContent的触发频率
 | 
				
			||||||
 | 
					      const debounceSetContent = debounce(250, editor.setContent)
 | 
				
			||||||
 | 
					      this.$watch('value', (val, prevVal) => {
 | 
				
			||||||
 | 
					        if (editor && val !== prevVal && val !== editor.getContent()) {
 | 
				
			||||||
 | 
					          if (typeof val !== 'string') val = val.toString()
 | 
				
			||||||
 | 
					          debounceSetContent.call(editor, val)
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      editor.on('change keyup undo redo', () => {
 | 
				
			||||||
 | 
					        this.$emit('input', editor.getContent())
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    destroyTinymce() {
 | 
				
			||||||
 | 
					      if (!window.tinymce) return
 | 
				
			||||||
 | 
					      const tinymce = window.tinymce.get(this.tinymceId)
 | 
				
			||||||
 | 
					      if (tinymce) {
 | 
				
			||||||
 | 
					        tinymce.destroy()
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
							
								
								
									
										28
									
								
								src/components/tinymce/package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								src/components/tinymce/package.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "name": "form-gen-tinymce",
 | 
				
			||||||
 | 
					  "version": "1.0.0",
 | 
				
			||||||
 | 
					  "description": "富文本编辑器tinymce的一个vue版本封装。使用cdn动态脚本引入的方式加载。",
 | 
				
			||||||
 | 
					  "main": "lib/form-gen-tinymce.umd.js",
 | 
				
			||||||
 | 
					  "directories": {
 | 
				
			||||||
 | 
					    "example": "example"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "scripts": {
 | 
				
			||||||
 | 
					    "test": "echo \"Error: no test specified\" && exit 1"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "repository": {
 | 
				
			||||||
 | 
					    "type": "git",
 | 
				
			||||||
 | 
					    "url": "git+https://github.com/JakHuang/form-generator.git"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "keywords": [
 | 
				
			||||||
 | 
					    "tinymce-vue"
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "dependencies": {
 | 
				
			||||||
 | 
					    "throttle-debounce": "^2.1.0"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "author": "jakHuang",
 | 
				
			||||||
 | 
					  "license": "MIT",
 | 
				
			||||||
 | 
					  "bugs": {
 | 
				
			||||||
 | 
					    "url": "https://github.com/JakHuang/form-generator/issues"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "homepage": "https://github.com/JakHuang/form-generator/blob/dev/src/components/tinymce"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										420
									
								
								src/components/tinymce/zh_CN.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										420
									
								
								src/components/tinymce/zh_CN.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,420 @@
 | 
				
			|||||||
 | 
					/* eslint-disable */
 | 
				
			||||||
 | 
					tinymce.addI18n('zh_CN',{
 | 
				
			||||||
 | 
					"Redo": "\u91cd\u505a",
 | 
				
			||||||
 | 
					"Undo": "\u64a4\u9500",
 | 
				
			||||||
 | 
					"Cut": "\u526a\u5207",
 | 
				
			||||||
 | 
					"Copy": "\u590d\u5236",
 | 
				
			||||||
 | 
					"Paste": "\u7c98\u8d34",
 | 
				
			||||||
 | 
					"Select all": "\u5168\u9009",
 | 
				
			||||||
 | 
					"New document": "\u65b0\u6587\u4ef6",
 | 
				
			||||||
 | 
					"Ok": "\u786e\u5b9a",
 | 
				
			||||||
 | 
					"Cancel": "\u53d6\u6d88",
 | 
				
			||||||
 | 
					"Visual aids": "\u7f51\u683c\u7ebf",
 | 
				
			||||||
 | 
					"Bold": "\u7c97\u4f53",
 | 
				
			||||||
 | 
					"Italic": "\u659c\u4f53",
 | 
				
			||||||
 | 
					"Underline": "\u4e0b\u5212\u7ebf",
 | 
				
			||||||
 | 
					"Strikethrough": "\u5220\u9664\u7ebf",
 | 
				
			||||||
 | 
					"Superscript": "\u4e0a\u6807",
 | 
				
			||||||
 | 
					"Subscript": "\u4e0b\u6807",
 | 
				
			||||||
 | 
					"Clear formatting": "\u6e05\u9664\u683c\u5f0f",
 | 
				
			||||||
 | 
					"Align left": "\u5de6\u8fb9\u5bf9\u9f50",
 | 
				
			||||||
 | 
					"Align center": "\u4e2d\u95f4\u5bf9\u9f50",
 | 
				
			||||||
 | 
					"Align right": "\u53f3\u8fb9\u5bf9\u9f50",
 | 
				
			||||||
 | 
					"Justify": "\u4e24\u7aef\u5bf9\u9f50",
 | 
				
			||||||
 | 
					"Bullet list": "\u9879\u76ee\u7b26\u53f7",
 | 
				
			||||||
 | 
					"Numbered list": "\u7f16\u53f7\u5217\u8868",
 | 
				
			||||||
 | 
					"Decrease indent": "\u51cf\u5c11\u7f29\u8fdb",
 | 
				
			||||||
 | 
					"Increase indent": "\u589e\u52a0\u7f29\u8fdb",
 | 
				
			||||||
 | 
					"Close": "\u5173\u95ed",
 | 
				
			||||||
 | 
					"Formats": "\u683c\u5f0f",
 | 
				
			||||||
 | 
					"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u4f60\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u6253\u5f00\u526a\u8d34\u677f\uff0c\u8bf7\u4f7f\u7528Ctrl+X\/C\/V\u7b49\u5feb\u6377\u952e\u3002",
 | 
				
			||||||
 | 
					"Headers": "\u6807\u9898",
 | 
				
			||||||
 | 
					"Header 1": "\u6807\u98981",
 | 
				
			||||||
 | 
					"Header 2": "\u6807\u98982",
 | 
				
			||||||
 | 
					"Header 3": "\u6807\u98983",
 | 
				
			||||||
 | 
					"Header 4": "\u6807\u98984",
 | 
				
			||||||
 | 
					"Header 5": "\u6807\u98985",
 | 
				
			||||||
 | 
					"Header 6": "\u6807\u98986",
 | 
				
			||||||
 | 
					"Headings": "\u6807\u9898",
 | 
				
			||||||
 | 
					"Heading 1": "\u6807\u98981",
 | 
				
			||||||
 | 
					"Heading 2": "\u6807\u98982",
 | 
				
			||||||
 | 
					"Heading 3": "\u6807\u98983",
 | 
				
			||||||
 | 
					"Heading 4": "\u6807\u98984",
 | 
				
			||||||
 | 
					"Heading 5": "\u6807\u98985",
 | 
				
			||||||
 | 
					"Heading 6": "\u6807\u98986",
 | 
				
			||||||
 | 
					"Preformatted": "\u9884\u5148\u683c\u5f0f\u5316\u7684",
 | 
				
			||||||
 | 
					"Div": "Div",
 | 
				
			||||||
 | 
					"Pre": "Pre",
 | 
				
			||||||
 | 
					"Code": "\u4ee3\u7801",
 | 
				
			||||||
 | 
					"Paragraph": "\u6bb5\u843d",
 | 
				
			||||||
 | 
					"Blockquote": "\u5f15\u6587\u533a\u5757",
 | 
				
			||||||
 | 
					"Inline": "\u6587\u672c",
 | 
				
			||||||
 | 
					"Blocks": "\u57fa\u5757",
 | 
				
			||||||
 | 
					"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u5f53\u524d\u4e3a\u7eaf\u6587\u672c\u7c98\u8d34\u6a21\u5f0f\uff0c\u518d\u6b21\u70b9\u51fb\u53ef\u4ee5\u56de\u5230\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\u3002",
 | 
				
			||||||
 | 
					"Fonts": "\u5b57\u4f53",
 | 
				
			||||||
 | 
					"Font Sizes": "\u5b57\u53f7",
 | 
				
			||||||
 | 
					"Class": "\u7c7b\u578b",
 | 
				
			||||||
 | 
					"Browse for an image": "\u6d4f\u89c8\u56fe\u50cf",
 | 
				
			||||||
 | 
					"OR": "\u6216",
 | 
				
			||||||
 | 
					"Drop an image here": "\u62d6\u653e\u4e00\u5f20\u56fe\u50cf\u81f3\u6b64",
 | 
				
			||||||
 | 
					"Upload": "\u4e0a\u4f20",
 | 
				
			||||||
 | 
					"Block": "\u5757",
 | 
				
			||||||
 | 
					"Align": "\u5bf9\u9f50",
 | 
				
			||||||
 | 
					"Default": "\u9ed8\u8ba4",
 | 
				
			||||||
 | 
					"Circle": "\u7a7a\u5fc3\u5706",
 | 
				
			||||||
 | 
					"Disc": "\u5b9e\u5fc3\u5706",
 | 
				
			||||||
 | 
					"Square": "\u65b9\u5757",
 | 
				
			||||||
 | 
					"Lower Alpha": "\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd",
 | 
				
			||||||
 | 
					"Lower Greek": "\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd",
 | 
				
			||||||
 | 
					"Lower Roman": "\u5c0f\u5199\u7f57\u9a6c\u5b57\u6bcd",
 | 
				
			||||||
 | 
					"Upper Alpha": "\u5927\u5199\u82f1\u6587\u5b57\u6bcd",
 | 
				
			||||||
 | 
					"Upper Roman": "\u5927\u5199\u7f57\u9a6c\u5b57\u6bcd",
 | 
				
			||||||
 | 
					"Anchor...": "\u951a\u70b9...",
 | 
				
			||||||
 | 
					"Name": "\u540d\u79f0",
 | 
				
			||||||
 | 
					"Id": "\u6807\u8bc6\u7b26",
 | 
				
			||||||
 | 
					"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u6807\u8bc6\u7b26\u5e94\u8be5\u4ee5\u5b57\u6bcd\u5f00\u5934\uff0c\u540e\u8ddf\u5b57\u6bcd\u3001\u6570\u5b57\u3001\u7834\u6298\u53f7\u3001\u70b9\u3001\u5192\u53f7\u6216\u4e0b\u5212\u7ebf\u3002",
 | 
				
			||||||
 | 
					"You have unsaved changes are you sure you want to navigate away?": "\u4f60\u8fd8\u6709\u6587\u6863\u5c1a\u672a\u4fdd\u5b58\uff0c\u786e\u5b9a\u8981\u79bb\u5f00\uff1f",
 | 
				
			||||||
 | 
					"Restore last draft": "\u6062\u590d\u4e0a\u6b21\u7684\u8349\u7a3f",
 | 
				
			||||||
 | 
					"Special character...": "\u7279\u6b8a\u5b57\u7b26...",
 | 
				
			||||||
 | 
					"Source code": "\u6e90\u4ee3\u7801",
 | 
				
			||||||
 | 
					"Insert\/Edit code sample": "\u63d2\u5165\/\u7f16\u8f91\u4ee3\u7801\u793a\u4f8b",
 | 
				
			||||||
 | 
					"Language": "\u8bed\u8a00",
 | 
				
			||||||
 | 
					"Code sample...": "\u793a\u4f8b\u4ee3\u7801...",
 | 
				
			||||||
 | 
					"Color Picker": "\u9009\u8272\u5668",
 | 
				
			||||||
 | 
					"R": "R",
 | 
				
			||||||
 | 
					"G": "G",
 | 
				
			||||||
 | 
					"B": "B",
 | 
				
			||||||
 | 
					"Left to right": "\u4ece\u5de6\u5230\u53f3",
 | 
				
			||||||
 | 
					"Right to left": "\u4ece\u53f3\u5230\u5de6",
 | 
				
			||||||
 | 
					"Emoticons...": "\u8868\u60c5\u7b26\u53f7...",
 | 
				
			||||||
 | 
					"Metadata and Document Properties": "\u5143\u6570\u636e\u548c\u6587\u6863\u5c5e\u6027",
 | 
				
			||||||
 | 
					"Title": "\u6807\u9898",
 | 
				
			||||||
 | 
					"Keywords": "\u5173\u952e\u8bcd",
 | 
				
			||||||
 | 
					"Description": "\u63cf\u8ff0",
 | 
				
			||||||
 | 
					"Robots": "\u673a\u5668\u4eba",
 | 
				
			||||||
 | 
					"Author": "\u4f5c\u8005",
 | 
				
			||||||
 | 
					"Encoding": "\u7f16\u7801",
 | 
				
			||||||
 | 
					"Fullscreen": "\u5168\u5c4f",
 | 
				
			||||||
 | 
					"Action": "\u64cd\u4f5c",
 | 
				
			||||||
 | 
					"Shortcut": "\u5feb\u6377\u952e",
 | 
				
			||||||
 | 
					"Help": "\u5e2e\u52a9",
 | 
				
			||||||
 | 
					"Address": "\u5730\u5740",
 | 
				
			||||||
 | 
					"Focus to menubar": "\u79fb\u52a8\u7126\u70b9\u5230\u83dc\u5355\u680f",
 | 
				
			||||||
 | 
					"Focus to toolbar": "\u79fb\u52a8\u7126\u70b9\u5230\u5de5\u5177\u680f",
 | 
				
			||||||
 | 
					"Focus to element path": "\u79fb\u52a8\u7126\u70b9\u5230\u5143\u7d20\u8def\u5f84",
 | 
				
			||||||
 | 
					"Focus to contextual toolbar": "\u79fb\u52a8\u7126\u70b9\u5230\u4e0a\u4e0b\u6587\u83dc\u5355",
 | 
				
			||||||
 | 
					"Insert link (if link plugin activated)": "\u63d2\u5165\u94fe\u63a5 (\u5982\u679c\u94fe\u63a5\u63d2\u4ef6\u5df2\u6fc0\u6d3b)",
 | 
				
			||||||
 | 
					"Save (if save plugin activated)": "\u4fdd\u5b58(\u5982\u679c\u4fdd\u5b58\u63d2\u4ef6\u5df2\u6fc0\u6d3b)",
 | 
				
			||||||
 | 
					"Find (if searchreplace plugin activated)": "\u67e5\u627e(\u5982\u679c\u67e5\u627e\u66ff\u6362\u63d2\u4ef6\u5df2\u6fc0\u6d3b)",
 | 
				
			||||||
 | 
					"Plugins installed ({0}):": "\u5df2\u5b89\u88c5\u63d2\u4ef6 ({0}):",
 | 
				
			||||||
 | 
					"Premium plugins:": "\u4f18\u79c0\u63d2\u4ef6\uff1a",
 | 
				
			||||||
 | 
					"Learn more...": "\u4e86\u89e3\u66f4\u591a...",
 | 
				
			||||||
 | 
					"You are using {0}": "\u4f60\u6b63\u5728\u4f7f\u7528 {0}",
 | 
				
			||||||
 | 
					"Plugins": "\u63d2\u4ef6",
 | 
				
			||||||
 | 
					"Handy Shortcuts": "\u5feb\u6377\u952e",
 | 
				
			||||||
 | 
					"Horizontal line": "\u6c34\u5e73\u5206\u5272\u7ebf",
 | 
				
			||||||
 | 
					"Insert\/edit image": "\u63d2\u5165\/\u7f16\u8f91\u56fe\u7247",
 | 
				
			||||||
 | 
					"Image description": "\u56fe\u7247\u63cf\u8ff0",
 | 
				
			||||||
 | 
					"Source": "\u5730\u5740",
 | 
				
			||||||
 | 
					"Dimensions": "\u5927\u5c0f",
 | 
				
			||||||
 | 
					"Constrain proportions": "\u4fdd\u6301\u7eb5\u6a2a\u6bd4",
 | 
				
			||||||
 | 
					"General": "\u666e\u901a",
 | 
				
			||||||
 | 
					"Advanced": "\u9ad8\u7ea7",
 | 
				
			||||||
 | 
					"Style": "\u6837\u5f0f",
 | 
				
			||||||
 | 
					"Vertical space": "\u5782\u76f4\u8fb9\u8ddd",
 | 
				
			||||||
 | 
					"Horizontal space": "\u6c34\u5e73\u8fb9\u8ddd",
 | 
				
			||||||
 | 
					"Border": "\u8fb9\u6846",
 | 
				
			||||||
 | 
					"Insert image": "\u63d2\u5165\u56fe\u7247",
 | 
				
			||||||
 | 
					"Image...": "\u56fe\u7247...",
 | 
				
			||||||
 | 
					"Image list": "\u56fe\u7247\u5217\u8868",
 | 
				
			||||||
 | 
					"Rotate counterclockwise": "\u9006\u65f6\u9488\u65cb\u8f6c",
 | 
				
			||||||
 | 
					"Rotate clockwise": "\u987a\u65f6\u9488\u65cb\u8f6c",
 | 
				
			||||||
 | 
					"Flip vertically": "\u5782\u76f4\u7ffb\u8f6c",
 | 
				
			||||||
 | 
					"Flip horizontally": "\u6c34\u5e73\u7ffb\u8f6c",
 | 
				
			||||||
 | 
					"Edit image": "\u7f16\u8f91\u56fe\u7247",
 | 
				
			||||||
 | 
					"Image options": "\u56fe\u7247\u9009\u9879",
 | 
				
			||||||
 | 
					"Zoom in": "\u653e\u5927",
 | 
				
			||||||
 | 
					"Zoom out": "\u7f29\u5c0f",
 | 
				
			||||||
 | 
					"Crop": "\u88c1\u526a",
 | 
				
			||||||
 | 
					"Resize": "\u8c03\u6574\u5927\u5c0f",
 | 
				
			||||||
 | 
					"Orientation": "\u65b9\u5411",
 | 
				
			||||||
 | 
					"Brightness": "\u4eae\u5ea6",
 | 
				
			||||||
 | 
					"Sharpen": "\u9510\u5316",
 | 
				
			||||||
 | 
					"Contrast": "\u5bf9\u6bd4\u5ea6",
 | 
				
			||||||
 | 
					"Color levels": "\u989c\u8272\u5c42\u6b21",
 | 
				
			||||||
 | 
					"Gamma": "\u4f3d\u9a6c\u503c",
 | 
				
			||||||
 | 
					"Invert": "\u53cd\u8f6c",
 | 
				
			||||||
 | 
					"Apply": "\u5e94\u7528",
 | 
				
			||||||
 | 
					"Back": "\u540e\u9000",
 | 
				
			||||||
 | 
					"Insert date\/time": "\u63d2\u5165\u65e5\u671f\/\u65f6\u95f4",
 | 
				
			||||||
 | 
					"Date\/time": "\u65e5\u671f\/\u65f6\u95f4",
 | 
				
			||||||
 | 
					"Insert\/Edit Link": "\u63d2\u5165\/\u7f16\u8f91\u94fe\u63a5",
 | 
				
			||||||
 | 
					"Insert\/edit link": "\u63d2\u5165\/\u7f16\u8f91\u94fe\u63a5",
 | 
				
			||||||
 | 
					"Text to display": "\u663e\u793a\u6587\u5b57",
 | 
				
			||||||
 | 
					"Url": "\u5730\u5740",
 | 
				
			||||||
 | 
					"Open link in...": "\u94fe\u63a5\u6253\u5f00\u4f4d\u7f6e...",
 | 
				
			||||||
 | 
					"Current window": "\u5f53\u524d\u7a97\u53e3",
 | 
				
			||||||
 | 
					"None": "\u65e0",
 | 
				
			||||||
 | 
					"New window": "\u5728\u65b0\u7a97\u53e3\u6253\u5f00",
 | 
				
			||||||
 | 
					"Remove link": "\u5220\u9664\u94fe\u63a5",
 | 
				
			||||||
 | 
					"Anchors": "\u951a\u70b9",
 | 
				
			||||||
 | 
					"Link...": "\u94fe\u63a5...",
 | 
				
			||||||
 | 
					"Paste or type a link": "\u7c98\u8d34\u6216\u8f93\u5165\u94fe\u63a5",
 | 
				
			||||||
 | 
					"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u4e3a\u90ae\u4ef6\u5730\u5740\uff0c\u9700\u8981\u52a0\u4e0amailto:\u524d\u7f00\u5417\uff1f",
 | 
				
			||||||
 | 
					"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u5c5e\u4e8e\u5916\u90e8\u94fe\u63a5\uff0c\u9700\u8981\u52a0\u4e0ahttp:\/\/:\u524d\u7f00\u5417\uff1f",
 | 
				
			||||||
 | 
					"Link list": "\u94fe\u63a5\u5217\u8868",
 | 
				
			||||||
 | 
					"Insert video": "\u63d2\u5165\u89c6\u9891",
 | 
				
			||||||
 | 
					"Insert\/edit video": "\u63d2\u5165\/\u7f16\u8f91\u89c6\u9891",
 | 
				
			||||||
 | 
					"Insert\/edit media": "\u63d2\u5165\/\u7f16\u8f91\u5a92\u4f53",
 | 
				
			||||||
 | 
					"Alternative source": "\u955c\u50cf",
 | 
				
			||||||
 | 
					"Alternative source URL": "\u66ff\u4ee3\u6765\u6e90\u7f51\u5740",
 | 
				
			||||||
 | 
					"Media poster (Image URL)": "\u5c01\u9762(\u56fe\u7247\u5730\u5740)",
 | 
				
			||||||
 | 
					"Paste your embed code below:": "\u5c06\u5185\u5d4c\u4ee3\u7801\u7c98\u8d34\u5728\u4e0b\u9762:",
 | 
				
			||||||
 | 
					"Embed": "\u5185\u5d4c",
 | 
				
			||||||
 | 
					"Media...": "\u591a\u5a92\u4f53...",
 | 
				
			||||||
 | 
					"Nonbreaking space": "\u4e0d\u95f4\u65ad\u7a7a\u683c",
 | 
				
			||||||
 | 
					"Page break": "\u5206\u9875\u7b26",
 | 
				
			||||||
 | 
					"Paste as text": "\u7c98\u8d34\u4e3a\u6587\u672c",
 | 
				
			||||||
 | 
					"Preview": "\u9884\u89c8",
 | 
				
			||||||
 | 
					"Print...": "\u6253\u5370...",
 | 
				
			||||||
 | 
					"Save": "\u4fdd\u5b58",
 | 
				
			||||||
 | 
					"Find": "\u67e5\u627e",
 | 
				
			||||||
 | 
					"Replace with": "\u66ff\u6362\u4e3a",
 | 
				
			||||||
 | 
					"Replace": "\u66ff\u6362",
 | 
				
			||||||
 | 
					"Replace all": "\u5168\u90e8\u66ff\u6362",
 | 
				
			||||||
 | 
					"Previous": "\u4e0a\u4e00\u4e2a",
 | 
				
			||||||
 | 
					"Next": "\u4e0b\u4e00\u4e2a",
 | 
				
			||||||
 | 
					"Find and replace...": "\u67e5\u627e\u5e76\u66ff\u6362...",
 | 
				
			||||||
 | 
					"Could not find the specified string.": "\u672a\u627e\u5230\u641c\u7d22\u5185\u5bb9.",
 | 
				
			||||||
 | 
					"Match case": "\u533a\u5206\u5927\u5c0f\u5199",
 | 
				
			||||||
 | 
					"Find whole words only": "\u5168\u5b57\u5339\u914d",
 | 
				
			||||||
 | 
					"Spell check": "\u62fc\u5199\u68c0\u67e5",
 | 
				
			||||||
 | 
					"Ignore": "\u5ffd\u7565",
 | 
				
			||||||
 | 
					"Ignore all": "\u5168\u90e8\u5ffd\u7565",
 | 
				
			||||||
 | 
					"Finish": "\u5b8c\u6210",
 | 
				
			||||||
 | 
					"Add to Dictionary": "\u6dfb\u52a0\u5230\u5b57\u5178",
 | 
				
			||||||
 | 
					"Insert table": "\u63d2\u5165\u8868\u683c",
 | 
				
			||||||
 | 
					"Table properties": "\u8868\u683c\u5c5e\u6027",
 | 
				
			||||||
 | 
					"Delete table": "\u5220\u9664\u8868\u683c",
 | 
				
			||||||
 | 
					"Cell": "\u5355\u5143\u683c",
 | 
				
			||||||
 | 
					"Row": "\u884c",
 | 
				
			||||||
 | 
					"Column": "\u5217",
 | 
				
			||||||
 | 
					"Cell properties": "\u5355\u5143\u683c\u5c5e\u6027",
 | 
				
			||||||
 | 
					"Merge cells": "\u5408\u5e76\u5355\u5143\u683c",
 | 
				
			||||||
 | 
					"Split cell": "\u62c6\u5206\u5355\u5143\u683c",
 | 
				
			||||||
 | 
					"Insert row before": "\u5728\u4e0a\u65b9\u63d2\u5165",
 | 
				
			||||||
 | 
					"Insert row after": "\u5728\u4e0b\u65b9\u63d2\u5165",
 | 
				
			||||||
 | 
					"Delete row": "\u5220\u9664\u884c",
 | 
				
			||||||
 | 
					"Row properties": "\u884c\u5c5e\u6027",
 | 
				
			||||||
 | 
					"Cut row": "\u526a\u5207\u884c",
 | 
				
			||||||
 | 
					"Copy row": "\u590d\u5236\u884c",
 | 
				
			||||||
 | 
					"Paste row before": "\u7c98\u8d34\u5230\u4e0a\u65b9",
 | 
				
			||||||
 | 
					"Paste row after": "\u7c98\u8d34\u5230\u4e0b\u65b9",
 | 
				
			||||||
 | 
					"Insert column before": "\u5728\u5de6\u4fa7\u63d2\u5165",
 | 
				
			||||||
 | 
					"Insert column after": "\u5728\u53f3\u4fa7\u63d2\u5165",
 | 
				
			||||||
 | 
					"Delete column": "\u5220\u9664\u5217",
 | 
				
			||||||
 | 
					"Cols": "\u5217",
 | 
				
			||||||
 | 
					"Rows": "\u884c",
 | 
				
			||||||
 | 
					"Width": "\u5bbd",
 | 
				
			||||||
 | 
					"Height": "\u9ad8",
 | 
				
			||||||
 | 
					"Cell spacing": "\u5355\u5143\u683c\u5916\u95f4\u8ddd",
 | 
				
			||||||
 | 
					"Cell padding": "\u5355\u5143\u683c\u5185\u8fb9\u8ddd",
 | 
				
			||||||
 | 
					"Show caption": "\u663e\u793a\u6807\u9898",
 | 
				
			||||||
 | 
					"Left": "\u5de6\u5bf9\u9f50",
 | 
				
			||||||
 | 
					"Center": "\u5c45\u4e2d",
 | 
				
			||||||
 | 
					"Right": "\u53f3\u5bf9\u9f50",
 | 
				
			||||||
 | 
					"Cell type": "\u5355\u5143\u683c\u7c7b\u578b",
 | 
				
			||||||
 | 
					"Scope": "\u8303\u56f4",
 | 
				
			||||||
 | 
					"Alignment": "\u5bf9\u9f50\u65b9\u5f0f",
 | 
				
			||||||
 | 
					"H Align": "\u6c34\u5e73\u5bf9\u9f50",
 | 
				
			||||||
 | 
					"V Align": "\u5782\u76f4\u5bf9\u9f50",
 | 
				
			||||||
 | 
					"Top": "\u9876\u90e8\u5bf9\u9f50",
 | 
				
			||||||
 | 
					"Middle": "\u5782\u76f4\u5c45\u4e2d",
 | 
				
			||||||
 | 
					"Bottom": "\u5e95\u90e8\u5bf9\u9f50",
 | 
				
			||||||
 | 
					"Header cell": "\u8868\u5934\u5355\u5143\u683c",
 | 
				
			||||||
 | 
					"Row group": "\u884c\u7ec4",
 | 
				
			||||||
 | 
					"Column group": "\u5217\u7ec4",
 | 
				
			||||||
 | 
					"Row type": "\u884c\u7c7b\u578b",
 | 
				
			||||||
 | 
					"Header": "\u8868\u5934",
 | 
				
			||||||
 | 
					"Body": "\u8868\u4f53",
 | 
				
			||||||
 | 
					"Footer": "\u8868\u5c3e",
 | 
				
			||||||
 | 
					"Border color": "\u8fb9\u6846\u989c\u8272",
 | 
				
			||||||
 | 
					"Insert template...": "\u63d2\u5165\u6a21\u677f...",
 | 
				
			||||||
 | 
					"Templates": "\u6a21\u677f",
 | 
				
			||||||
 | 
					"Template": "\u6a21\u677f",
 | 
				
			||||||
 | 
					"Text color": "\u6587\u5b57\u989c\u8272",
 | 
				
			||||||
 | 
					"Background color": "\u80cc\u666f\u8272",
 | 
				
			||||||
 | 
					"Custom...": "\u81ea\u5b9a\u4e49...",
 | 
				
			||||||
 | 
					"Custom color": "\u81ea\u5b9a\u4e49\u989c\u8272",
 | 
				
			||||||
 | 
					"No color": "\u65e0",
 | 
				
			||||||
 | 
					"Remove color": "\u79fb\u9664\u989c\u8272",
 | 
				
			||||||
 | 
					"Table of Contents": "\u5185\u5bb9\u5217\u8868",
 | 
				
			||||||
 | 
					"Show blocks": "\u663e\u793a\u533a\u5757\u8fb9\u6846",
 | 
				
			||||||
 | 
					"Show invisible characters": "\u663e\u793a\u4e0d\u53ef\u89c1\u5b57\u7b26",
 | 
				
			||||||
 | 
					"Word count": "\u5b57\u6570",
 | 
				
			||||||
 | 
					"Count": "\u8ba1\u6570",
 | 
				
			||||||
 | 
					"Document": "\u6587\u6863",
 | 
				
			||||||
 | 
					"Selection": "\u9009\u62e9",
 | 
				
			||||||
 | 
					"Words": "\u5355\u8bcd",
 | 
				
			||||||
 | 
					"Words: {0}": "\u5b57\u6570\uff1a{0}",
 | 
				
			||||||
 | 
					"{0} words": "{0} \u5b57",
 | 
				
			||||||
 | 
					"File": "\u6587\u4ef6",
 | 
				
			||||||
 | 
					"Edit": "\u7f16\u8f91",
 | 
				
			||||||
 | 
					"Insert": "\u63d2\u5165",
 | 
				
			||||||
 | 
					"View": "\u89c6\u56fe",
 | 
				
			||||||
 | 
					"Format": "\u683c\u5f0f",
 | 
				
			||||||
 | 
					"Table": "\u8868\u683c",
 | 
				
			||||||
 | 
					"Tools": "\u5de5\u5177",
 | 
				
			||||||
 | 
					"Powered by {0}": "\u7531{0}\u9a71\u52a8",
 | 
				
			||||||
 | 
					"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u5728\u7f16\u8f91\u533a\u6309ALT-F9\u6253\u5f00\u83dc\u5355\uff0c\u6309ALT-F10\u6253\u5f00\u5de5\u5177\u680f\uff0c\u6309ALT-0\u67e5\u770b\u5e2e\u52a9",
 | 
				
			||||||
 | 
					"Image title": "\u56fe\u7247\u6807\u9898",
 | 
				
			||||||
 | 
					"Border width": "\u8fb9\u6846\u5bbd\u5ea6",
 | 
				
			||||||
 | 
					"Border style": "\u8fb9\u6846\u6837\u5f0f",
 | 
				
			||||||
 | 
					"Error": "\u9519\u8bef",
 | 
				
			||||||
 | 
					"Warn": "\u8b66\u544a",
 | 
				
			||||||
 | 
					"Valid": "\u6709\u6548",
 | 
				
			||||||
 | 
					"To open the popup, press Shift+Enter": "\u6309Shitf+Enter\u952e\u6253\u5f00\u5bf9\u8bdd\u6846",
 | 
				
			||||||
 | 
					"Rich Text Area. Press ALT-0 for help.": "\u7f16\u8f91\u533a\u3002\u6309Alt+0\u952e\u6253\u5f00\u5e2e\u52a9\u3002",
 | 
				
			||||||
 | 
					"System Font": "\u7cfb\u7edf\u5b57\u4f53",
 | 
				
			||||||
 | 
					"Failed to upload image: {0}": "\u56fe\u7247\u4e0a\u4f20\u5931\u8d25: {0}",
 | 
				
			||||||
 | 
					"Failed to load plugin: {0} from url {1}": "\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25: {0} \u6765\u81ea\u94fe\u63a5 {1}",
 | 
				
			||||||
 | 
					"Failed to load plugin url: {0}": "\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25 \u94fe\u63a5: {0}",
 | 
				
			||||||
 | 
					"Failed to initialize plugin: {0}": "\u63d2\u4ef6\u521d\u59cb\u5316\u5931\u8d25: {0}",
 | 
				
			||||||
 | 
					"example": "\u793a\u4f8b",
 | 
				
			||||||
 | 
					"Search": "\u641c\u7d22",
 | 
				
			||||||
 | 
					"All": "\u5168\u90e8",
 | 
				
			||||||
 | 
					"Currency": "\u8d27\u5e01",
 | 
				
			||||||
 | 
					"Text": "\u6587\u5b57",
 | 
				
			||||||
 | 
					"Quotations": "\u5f15\u7528",
 | 
				
			||||||
 | 
					"Mathematical": "\u6570\u5b66",
 | 
				
			||||||
 | 
					"Extended Latin": "\u62c9\u4e01\u8bed\u6269\u5145",
 | 
				
			||||||
 | 
					"Symbols": "\u7b26\u53f7",
 | 
				
			||||||
 | 
					"Arrows": "\u7bad\u5934",
 | 
				
			||||||
 | 
					"User Defined": "\u81ea\u5b9a\u4e49",
 | 
				
			||||||
 | 
					"dollar sign": "\u7f8e\u5143\u7b26\u53f7",
 | 
				
			||||||
 | 
					"currency sign": "\u8d27\u5e01\u7b26\u53f7",
 | 
				
			||||||
 | 
					"euro-currency sign": "\u6b27\u5143\u7b26\u53f7",
 | 
				
			||||||
 | 
					"colon sign": "\u5192\u53f7",
 | 
				
			||||||
 | 
					"cruzeiro sign": "\u514b\u9c81\u8d5b\u7f57\u5e01\u7b26\u53f7",
 | 
				
			||||||
 | 
					"french franc sign": "\u6cd5\u90ce\u7b26\u53f7",
 | 
				
			||||||
 | 
					"lira sign": "\u91cc\u62c9\u7b26\u53f7",
 | 
				
			||||||
 | 
					"mill sign": "\u5bc6\u5c14\u7b26\u53f7",
 | 
				
			||||||
 | 
					"naira sign": "\u5948\u62c9\u7b26\u53f7",
 | 
				
			||||||
 | 
					"peseta sign": "\u6bd4\u585e\u5854\u7b26\u53f7",
 | 
				
			||||||
 | 
					"rupee sign": "\u5362\u6bd4\u7b26\u53f7",
 | 
				
			||||||
 | 
					"won sign": "\u97e9\u5143\u7b26\u53f7",
 | 
				
			||||||
 | 
					"new sheqel sign": "\u65b0\u8c22\u514b\u5c14\u7b26\u53f7",
 | 
				
			||||||
 | 
					"dong sign": "\u8d8a\u5357\u76fe\u7b26\u53f7",
 | 
				
			||||||
 | 
					"kip sign": "\u8001\u631d\u57fa\u666e\u7b26\u53f7",
 | 
				
			||||||
 | 
					"tugrik sign": "\u56fe\u683c\u91cc\u514b\u7b26\u53f7",
 | 
				
			||||||
 | 
					"drachma sign": "\u5fb7\u62c9\u514b\u9a6c\u7b26\u53f7",
 | 
				
			||||||
 | 
					"german penny symbol": "\u5fb7\u56fd\u4fbf\u58eb\u7b26\u53f7",
 | 
				
			||||||
 | 
					"peso sign": "\u6bd4\u7d22\u7b26\u53f7",
 | 
				
			||||||
 | 
					"guarani sign": "\u74dc\u62c9\u5c3c\u7b26\u53f7",
 | 
				
			||||||
 | 
					"austral sign": "\u6fb3\u5143\u7b26\u53f7",
 | 
				
			||||||
 | 
					"hryvnia sign": "\u683c\u91cc\u592b\u5c3c\u4e9a\u7b26\u53f7",
 | 
				
			||||||
 | 
					"cedi sign": "\u585e\u5730\u7b26\u53f7",
 | 
				
			||||||
 | 
					"livre tournois sign": "\u91cc\u5f17\u5f17\u5c14\u7b26\u53f7",
 | 
				
			||||||
 | 
					"spesmilo sign": "spesmilo\u7b26\u53f7",
 | 
				
			||||||
 | 
					"tenge sign": "\u575a\u6208\u7b26\u53f7",
 | 
				
			||||||
 | 
					"indian rupee sign": "\u5370\u5ea6\u5362\u6bd4",
 | 
				
			||||||
 | 
					"turkish lira sign": "\u571f\u8033\u5176\u91cc\u62c9",
 | 
				
			||||||
 | 
					"nordic mark sign": "\u5317\u6b27\u9a6c\u514b",
 | 
				
			||||||
 | 
					"manat sign": "\u9a6c\u7eb3\u7279\u7b26\u53f7",
 | 
				
			||||||
 | 
					"ruble sign": "\u5362\u5e03\u7b26\u53f7",
 | 
				
			||||||
 | 
					"yen character": "\u65e5\u5143\u5b57\u6837",
 | 
				
			||||||
 | 
					"yuan character": "\u4eba\u6c11\u5e01\u5143\u5b57\u6837",
 | 
				
			||||||
 | 
					"yuan character, in hong kong and taiwan": "\u5143\u5b57\u6837\uff08\u6e2f\u53f0\u5730\u533a\uff09",
 | 
				
			||||||
 | 
					"yen\/yuan character variant one": "\u5143\u5b57\u6837\uff08\u5927\u5199\uff09",
 | 
				
			||||||
 | 
					"Loading emoticons...": "\u52a0\u8f7d\u8868\u60c5\u7b26\u53f7...",
 | 
				
			||||||
 | 
					"Could not load emoticons": "\u4e0d\u80fd\u52a0\u8f7d\u8868\u60c5\u7b26\u53f7",
 | 
				
			||||||
 | 
					"People": "\u4eba\u7c7b",
 | 
				
			||||||
 | 
					"Animals and Nature": "\u52a8\u7269\u548c\u81ea\u7136",
 | 
				
			||||||
 | 
					"Food and Drink": "\u98df\u7269\u548c\u996e\u54c1",
 | 
				
			||||||
 | 
					"Activity": "\u6d3b\u52a8",
 | 
				
			||||||
 | 
					"Travel and Places": "\u65c5\u6e38\u548c\u5730\u70b9",
 | 
				
			||||||
 | 
					"Objects": "\u7269\u4ef6",
 | 
				
			||||||
 | 
					"Flags": "\u65d7\u5e1c",
 | 
				
			||||||
 | 
					"Characters": "\u5b57\u7b26",
 | 
				
			||||||
 | 
					"Characters (no spaces)": "\u5b57\u7b26(\u65e0\u7a7a\u683c)",
 | 
				
			||||||
 | 
					"{0} characters": "{0} \u4e2a\u5b57\u7b26",
 | 
				
			||||||
 | 
					"Error: Form submit field collision.": "\u9519\u8bef: \u8868\u5355\u63d0\u4ea4\u5b57\u6bb5\u51b2\u7a81\u3002",
 | 
				
			||||||
 | 
					"Error: No form element found.": "\u9519\u8bef: \u6ca1\u6709\u8868\u5355\u63a7\u4ef6\u3002",
 | 
				
			||||||
 | 
					"Update": "\u66f4\u65b0",
 | 
				
			||||||
 | 
					"Color swatch": "\u989c\u8272\u6837\u672c",
 | 
				
			||||||
 | 
					"Turquoise": "\u9752\u7eff\u8272",
 | 
				
			||||||
 | 
					"Green": "\u7eff\u8272",
 | 
				
			||||||
 | 
					"Blue": "\u84dd\u8272",
 | 
				
			||||||
 | 
					"Purple": "\u7d2b\u8272",
 | 
				
			||||||
 | 
					"Navy Blue": "\u6d77\u519b\u84dd",
 | 
				
			||||||
 | 
					"Dark Turquoise": "\u6df1\u84dd\u7eff\u8272",
 | 
				
			||||||
 | 
					"Dark Green": "\u6df1\u7eff\u8272",
 | 
				
			||||||
 | 
					"Medium Blue": "\u4e2d\u84dd\u8272",
 | 
				
			||||||
 | 
					"Medium Purple": "\u4e2d\u7d2b\u8272",
 | 
				
			||||||
 | 
					"Midnight Blue": "\u6df1\u84dd\u8272",
 | 
				
			||||||
 | 
					"Yellow": "\u9ec4\u8272",
 | 
				
			||||||
 | 
					"Orange": "\u6a59\u8272",
 | 
				
			||||||
 | 
					"Red": "\u7ea2\u8272",
 | 
				
			||||||
 | 
					"Light Gray": "\u6d45\u7070\u8272",
 | 
				
			||||||
 | 
					"Gray": "\u7070\u8272",
 | 
				
			||||||
 | 
					"Dark Yellow": "\u6697\u9ec4\u8272",
 | 
				
			||||||
 | 
					"Dark Orange": "\u6df1\u6a59\u8272",
 | 
				
			||||||
 | 
					"Dark Red": "\u6df1\u7ea2\u8272",
 | 
				
			||||||
 | 
					"Medium Gray": "\u4e2d\u7070\u8272",
 | 
				
			||||||
 | 
					"Dark Gray": "\u6df1\u7070\u8272",
 | 
				
			||||||
 | 
					"Light Green": "\u6d45\u7eff\u8272",
 | 
				
			||||||
 | 
					"Light Yellow": "\u6d45\u9ec4\u8272",
 | 
				
			||||||
 | 
					"Light Red": "\u6d45\u7ea2\u8272",
 | 
				
			||||||
 | 
					"Light Purple": "\u6d45\u7d2b\u8272",
 | 
				
			||||||
 | 
					"Light Blue": "\u6d45\u84dd\u8272",
 | 
				
			||||||
 | 
					"Dark Purple": "\u6df1\u7d2b\u8272",
 | 
				
			||||||
 | 
					"Dark Blue": "\u6df1\u84dd\u8272",
 | 
				
			||||||
 | 
					"Black": "\u9ed1\u8272",
 | 
				
			||||||
 | 
					"White": "\u767d\u8272",
 | 
				
			||||||
 | 
					"Switch to or from fullscreen mode": "\u5207\u6362\u5168\u5c4f\u6a21\u5f0f",
 | 
				
			||||||
 | 
					"Open help dialog": "\u6253\u5f00\u5e2e\u52a9\u5bf9\u8bdd\u6846",
 | 
				
			||||||
 | 
					"history": "\u5386\u53f2",
 | 
				
			||||||
 | 
					"styles": "\u6837\u5f0f",
 | 
				
			||||||
 | 
					"formatting": "\u683c\u5f0f\u5316",
 | 
				
			||||||
 | 
					"alignment": "\u5bf9\u9f50",
 | 
				
			||||||
 | 
					"indentation": "\u7f29\u8fdb",
 | 
				
			||||||
 | 
					"permanent pen": "\u8bb0\u53f7\u7b14",
 | 
				
			||||||
 | 
					"comments": "\u5907\u6ce8",
 | 
				
			||||||
 | 
					"Format Painter": "\u683c\u5f0f\u5237",
 | 
				
			||||||
 | 
					"Insert\/edit iframe": "\u63d2\u5165\/\u7f16\u8f91\u6846\u67b6",
 | 
				
			||||||
 | 
					"Capitalization": "\u5927\u5199",
 | 
				
			||||||
 | 
					"lowercase": "\u5c0f\u5199",
 | 
				
			||||||
 | 
					"UPPERCASE": "\u5927\u5199",
 | 
				
			||||||
 | 
					"Title Case": "\u9996\u5b57\u6bcd\u5927\u5199",
 | 
				
			||||||
 | 
					"Permanent Pen Properties": "\u6c38\u4e45\u7b14\u5c5e\u6027",
 | 
				
			||||||
 | 
					"Permanent pen properties...": "\u6c38\u4e45\u7b14\u5c5e\u6027...",
 | 
				
			||||||
 | 
					"Font": "\u5b57\u4f53",
 | 
				
			||||||
 | 
					"Size": "\u5b57\u53f7",
 | 
				
			||||||
 | 
					"More...": "\u66f4\u591a...",
 | 
				
			||||||
 | 
					"Spellcheck Language": "\u62fc\u5199\u68c0\u67e5\u8bed\u8a00",
 | 
				
			||||||
 | 
					"Select...": "\u9009\u62e9...",
 | 
				
			||||||
 | 
					"Preferences": "\u9996\u9009\u9879",
 | 
				
			||||||
 | 
					"Yes": "\u662f",
 | 
				
			||||||
 | 
					"No": "\u5426",
 | 
				
			||||||
 | 
					"Keyboard Navigation": "\u952e\u76d8\u6307\u5f15",
 | 
				
			||||||
 | 
					"Version": "\u7248\u672c",
 | 
				
			||||||
 | 
					"Anchor": "\u951a\u70b9",
 | 
				
			||||||
 | 
					"Special character": "\u7279\u6b8a\u7b26\u53f7",
 | 
				
			||||||
 | 
					"Code sample": "\u4ee3\u7801\u793a\u4f8b",
 | 
				
			||||||
 | 
					"Color": "\u989c\u8272",
 | 
				
			||||||
 | 
					"Emoticons": "\u8868\u60c5",
 | 
				
			||||||
 | 
					"Document properties": "\u6587\u6863\u5c5e\u6027",
 | 
				
			||||||
 | 
					"Image": "\u56fe\u7247",
 | 
				
			||||||
 | 
					"Insert link": "\u63d2\u5165\u94fe\u63a5",
 | 
				
			||||||
 | 
					"Target": "\u6253\u5f00\u65b9\u5f0f",
 | 
				
			||||||
 | 
					"Link": "\u94fe\u63a5",
 | 
				
			||||||
 | 
					"Poster": "\u5c01\u9762",
 | 
				
			||||||
 | 
					"Media": "\u5a92\u4f53",
 | 
				
			||||||
 | 
					"Print": "\u6253\u5370",
 | 
				
			||||||
 | 
					"Prev": "\u4e0a\u4e00\u4e2a",
 | 
				
			||||||
 | 
					"Find and replace": "\u67e5\u627e\u548c\u66ff\u6362",
 | 
				
			||||||
 | 
					"Whole words": "\u5168\u5b57\u5339\u914d",
 | 
				
			||||||
 | 
					"Spellcheck": "\u62fc\u5199\u68c0\u67e5",
 | 
				
			||||||
 | 
					"Caption": "\u6807\u9898",
 | 
				
			||||||
 | 
					"Insert template": "\u63d2\u5165\u6a21\u677f"
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
@@ -5,6 +5,7 @@ export default {
 | 
				
			|||||||
		};
 | 
							};
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	created() {
 | 
						created() {
 | 
				
			||||||
 | 
							this.tableH = this?.heightNum ? this.tableHeight(this.heightNum) : this.tableHeight(260);
 | 
				
			||||||
		window.addEventListener('resize', this._setTableHeight);
 | 
							window.addEventListener('resize', this._setTableHeight);
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	destroyed() {
 | 
						destroyed() {
 | 
				
			||||||
@@ -12,7 +13,8 @@ export default {
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
	methods: {
 | 
						methods: {
 | 
				
			||||||
		_setTableHeight() {
 | 
							_setTableHeight() {
 | 
				
			||||||
			this.tableH = this.tableHeight(260);
 | 
								this.tableH = this?.heightNum ? this.tableHeight(this.heightNum) : this.tableHeight(260);
 | 
				
			||||||
 | 
								// this.tableH = this.tableHeight(260);
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,6 +32,7 @@ const actions = {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        // 处理 dictValue 层级
 | 
					        // 处理 dictValue 层级
 | 
				
			||||||
        dictDataMap[dictData.dictType].push({
 | 
					        dictDataMap[dictData.dictType].push({
 | 
				
			||||||
 | 
					          id: dictData.id,
 | 
				
			||||||
          value: dictData.value,
 | 
					          value: dictData.value,
 | 
				
			||||||
          label: dictData.label,
 | 
					          label: dictData.label,
 | 
				
			||||||
          colorType: dictData.colorType,
 | 
					          colorType: dictData.colorType,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -97,6 +97,8 @@ export const DICT_TYPE = {
 | 
				
			|||||||
  TABLE_NAME: 'table_name',
 | 
					  TABLE_NAME: 'table_name',
 | 
				
			||||||
  METHOD: 'method',
 | 
					  METHOD: 'method',
 | 
				
			||||||
  PUSH: 'push',
 | 
					  PUSH: 'push',
 | 
				
			||||||
 | 
					  ENERGY_TYPE: 'energy_type',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // ============== ORDER - 订单模块 =============
 | 
					  // ============== ORDER - 订单模块 =============
 | 
				
			||||||
  ORDER_STATUS: 'order_status',
 | 
					  ORDER_STATUS: 'order_status',
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										28
									
								
								src/utils/loadBeautifier.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								src/utils/loadBeautifier.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					import loadScript from './loadScript'
 | 
				
			||||||
 | 
					import ELEMENT from 'element-ui'
 | 
				
			||||||
 | 
					import pluginsConfig from './pluginsConfig'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let beautifierObj
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default function loadBeautifier(cb) {
 | 
				
			||||||
 | 
					  const { beautifierUrl } = pluginsConfig
 | 
				
			||||||
 | 
					  if (beautifierObj) {
 | 
				
			||||||
 | 
					    cb(beautifierObj)
 | 
				
			||||||
 | 
					    return
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const loading = ELEMENT.Loading.service({
 | 
				
			||||||
 | 
					    fullscreen: true,
 | 
				
			||||||
 | 
					    lock: true,
 | 
				
			||||||
 | 
					    text: '格式化资源加载中...',
 | 
				
			||||||
 | 
					    spinner: 'el-icon-loading',
 | 
				
			||||||
 | 
					    background: 'rgba(255, 255, 255, 0.5)'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  loadScript(beautifierUrl, () => {
 | 
				
			||||||
 | 
					    loading.close()
 | 
				
			||||||
 | 
					    // eslint-disable-next-line no-undef
 | 
				
			||||||
 | 
					    beautifierObj = beautifier
 | 
				
			||||||
 | 
					    cb(beautifierObj)
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										40
									
								
								src/utils/loadMonaco.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								src/utils/loadMonaco.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
				
			|||||||
 | 
					import loadScript from './loadScript'
 | 
				
			||||||
 | 
					import ELEMENT from 'element-ui'
 | 
				
			||||||
 | 
					import pluginsConfig from './pluginsConfig'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// monaco-editor单例
 | 
				
			||||||
 | 
					let monacoEidtor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 动态加载monaco-editor cdn资源
 | 
				
			||||||
 | 
					 * @param {Function} cb 回调,必填
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export default function loadMonaco(cb) {
 | 
				
			||||||
 | 
					  if (monacoEidtor) {
 | 
				
			||||||
 | 
					    cb(monacoEidtor)
 | 
				
			||||||
 | 
					    return
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const { monacoEditorUrl: vs } = pluginsConfig
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // 使用element ui实现加载提示
 | 
				
			||||||
 | 
					  const loading = ELEMENT.Loading.service({
 | 
				
			||||||
 | 
					    fullscreen: true,
 | 
				
			||||||
 | 
					    lock: true,
 | 
				
			||||||
 | 
					    text: '编辑器资源初始化中...',
 | 
				
			||||||
 | 
					    spinner: 'el-icon-loading',
 | 
				
			||||||
 | 
					    background: 'rgba(255, 255, 255, 0.5)'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  !window.require && (window.require = {})
 | 
				
			||||||
 | 
					  !window.require.paths && (window.require.paths = {})
 | 
				
			||||||
 | 
					  window.require.paths.vs = vs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  loadScript(`${vs}/loader.js`, () => {
 | 
				
			||||||
 | 
					    window.require(['vs/editor/editor.main'], () => {
 | 
				
			||||||
 | 
					      loading.close()
 | 
				
			||||||
 | 
					      monacoEidtor = window.monaco
 | 
				
			||||||
 | 
					      cb(monacoEidtor)
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										60
									
								
								src/utils/loadScript.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								src/utils/loadScript.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,60 @@
 | 
				
			|||||||
 | 
					const callbacks = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 加载一个远程脚本
 | 
				
			||||||
 | 
					 * @param {String} src 一个远程脚本
 | 
				
			||||||
 | 
					 * @param {Function} callback 回调
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					function loadScript(src, callback) {
 | 
				
			||||||
 | 
					  const existingScript = document.getElementById(src)
 | 
				
			||||||
 | 
					  const cb = callback || (() => {})
 | 
				
			||||||
 | 
					  if (!existingScript) {
 | 
				
			||||||
 | 
					    callbacks[src] = []
 | 
				
			||||||
 | 
					    const $script = document.createElement('script')
 | 
				
			||||||
 | 
					    $script.src = src
 | 
				
			||||||
 | 
					    $script.id = src
 | 
				
			||||||
 | 
					    $script.async = 1
 | 
				
			||||||
 | 
					    document.body.appendChild($script)
 | 
				
			||||||
 | 
					    const onEnd = 'onload' in $script ? stdOnEnd.bind($script) : ieOnEnd.bind($script)
 | 
				
			||||||
 | 
					    onEnd($script)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  callbacks[src].push(cb)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function stdOnEnd(script) {
 | 
				
			||||||
 | 
					    script.onload = () => {
 | 
				
			||||||
 | 
					      this.onerror = this.onload = null
 | 
				
			||||||
 | 
					      callbacks[src].forEach(item => {
 | 
				
			||||||
 | 
					        item(null, script)
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      delete callbacks[src]
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    script.onerror = () => {
 | 
				
			||||||
 | 
					      this.onerror = this.onload = null
 | 
				
			||||||
 | 
					      cb(new Error(`Failed to load ${src}`), script)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function ieOnEnd(script) {
 | 
				
			||||||
 | 
					    script.onreadystatechange = () => {
 | 
				
			||||||
 | 
					      if (this.readyState !== 'complete' && this.readyState !== 'loaded') return
 | 
				
			||||||
 | 
					      this.onreadystatechange = null
 | 
				
			||||||
 | 
					      callbacks[src].forEach(item => {
 | 
				
			||||||
 | 
					        item(null, script)
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      delete callbacks[src]
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 顺序加载一组远程脚本
 | 
				
			||||||
 | 
					 * @param {Array} list 一组远程脚本
 | 
				
			||||||
 | 
					 * @param {Function} cb 回调
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export function loadScriptQueue(list, cb) {
 | 
				
			||||||
 | 
					  const first = list.shift()
 | 
				
			||||||
 | 
					  list.length ? loadScript(first, () => loadScriptQueue(list, cb)) : loadScript(first, cb)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default loadScript
 | 
				
			||||||
							
								
								
									
										29
									
								
								src/utils/loadTinymce.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								src/utils/loadTinymce.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
				
			|||||||
 | 
					import loadScript from './loadScript'
 | 
				
			||||||
 | 
					import ELEMENT from 'element-ui'
 | 
				
			||||||
 | 
					import pluginsConfig from './pluginsConfig'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let tinymceObj
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default function loadTinymce(cb) {
 | 
				
			||||||
 | 
					  const { tinymceUrl } = pluginsConfig
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (tinymceObj) {
 | 
				
			||||||
 | 
					    cb(tinymceObj)
 | 
				
			||||||
 | 
					    return
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const loading = ELEMENT.Loading.service({
 | 
				
			||||||
 | 
					    fullscreen: true,
 | 
				
			||||||
 | 
					    lock: true,
 | 
				
			||||||
 | 
					    text: '富文本资源加载中...',
 | 
				
			||||||
 | 
					    spinner: 'el-icon-loading',
 | 
				
			||||||
 | 
					    background: 'rgba(255, 255, 255, 0.5)'
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  loadScript(tinymceUrl, () => {
 | 
				
			||||||
 | 
					    loading.close()
 | 
				
			||||||
 | 
					    // eslint-disable-next-line no-undef
 | 
				
			||||||
 | 
					    tinymceObj = tinymce
 | 
				
			||||||
 | 
					    cb(tinymceObj)
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										13
									
								
								src/utils/pluginsConfig.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/utils/pluginsConfig.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					const CDN = 'https://lib.baomitu.com/' // CDN Homepage: https://cdn.baomitu.com/
 | 
				
			||||||
 | 
					const publicPath = process.env.BASE_URL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function splicingPluginUrl(PluginName, version, fileName) {
 | 
				
			||||||
 | 
					  return `${CDN}${PluginName}/${version}/${fileName}`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  beautifierUrl: splicingPluginUrl('js-beautify', '1.13.5', 'beautifier.min.js'),
 | 
				
			||||||
 | 
					  // monacoEditorUrl: splicingPluginUrl('monaco-editor', '0.19.3', 'min/vs'), // 使用 monaco-editor CDN 链接
 | 
				
			||||||
 | 
					  monacoEditorUrl: `${publicPath}libs/monaco-editor/vs`, // 使用 monaco-editor 本地代码
 | 
				
			||||||
 | 
					  tinymceUrl: splicingPluginUrl('tinymce', '5.7.0', 'tinymce.min.js')
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
 * @Author: zwq
 | 
					 * @Author: zwq
 | 
				
			||||||
 * @Date: 2021-07-19 15:18:30
 | 
					 * @Date: 2021-07-19 15:18:30
 | 
				
			||||||
 * @LastEditors: zhp
 | 
					 * @LastEditors: zhp
 | 
				
			||||||
 * @LastEditTime: 2024-03-28 15:28:07
 | 
					 * @LastEditTime: 2024-04-03 10:54:53
 | 
				
			||||||
 * @Description:
 | 
					 * @Description:
 | 
				
			||||||
-->
 | 
					-->
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
@@ -16,11 +16,11 @@
 | 
				
			|||||||
      许昌安彩AGV原片周转看板
 | 
					      许昌安彩AGV原片周转看板
 | 
				
			||||||
      <h3 class="unit">单位:河南汇融数字科技有限公司</h3>
 | 
					      <h3 class="unit">单位:河南汇融数字科技有限公司</h3>
 | 
				
			||||||
      <h3 class="time">{{ times }}</h3>
 | 
					      <h3 class="time">{{ times }}</h3>
 | 
				
			||||||
      <el-button type="text" class="title-button" :style="{ right: 18 + 'px', top: 26 + 'px', fontSize: '32px' }"
 | 
					      <!-- <el-button type="text" class="title-button" :style="{ right: 18 + 'px', top: 26 + 'px', fontSize: '32px' }"
 | 
				
			||||||
        @click="changeFullScreen">
 | 
					        @click="changeFullScreen">
 | 
				
			||||||
        <svg-icon width="32" height="32" v-if="isFullScreen" icon-class="unFullScreenView" />
 | 
					        <svg-icon width="32" height="32" v-if="isFullScreen" icon-class="unFullScreenView" />
 | 
				
			||||||
        <svg-icon width="32" height="32" v-else icon-class="fullScreenView" />
 | 
					        <svg-icon width="32" height="32" v-else icon-class="fullScreenView" />
 | 
				
			||||||
      </el-button>
 | 
					      </el-button> -->
 | 
				
			||||||
    </el-row>
 | 
					    </el-row>
 | 
				
			||||||
    <el-row class="container-main flex-col" type="flex">
 | 
					    <el-row class="container-main flex-col" type="flex">
 | 
				
			||||||
      <el-row :style="{ padding: '0 ' + 9 + 'px' }" :gutter="15 * beilv" type="flex" class="flex-1">
 | 
					      <el-row :style="{ padding: '0 ' + 9 + 'px' }" :gutter="15 * beilv" type="flex" class="flex-1">
 | 
				
			||||||
@@ -34,14 +34,16 @@
 | 
				
			|||||||
        <el-col :style="{ margin: 8 + 'px' + ' 0' }" :span="12">
 | 
					        <el-col :style="{ margin: 8 + 'px' + ' 0' }" :span="12">
 | 
				
			||||||
          <base-container :beilv="1" :size="'eqStatus'" :title="'周转进度'" :title-icon="'order'" :back="'energy'">
 | 
					          <base-container :beilv="1" :size="'eqStatus'" :title="'周转进度'" :title-icon="'order'" :back="'energy'">
 | 
				
			||||||
            <div class="order" style="width:100%; overflow: hidden scroll;height: 350px;">
 | 
					            <div class="order" style="width:100%; overflow: hidden scroll;height: 350px;">
 | 
				
			||||||
              <el-row v-for="op in orderProcessList" :key="op.id" style="margin-bottom: 1em">
 | 
					              <el-row v-for="op in orderProcessList" :key="op.id" style="margin-bottom: .5em">
 | 
				
			||||||
                <p v-if="op.outRate === 1" class="now-secondary-title" style="color:#4679FD">
 | 
					                <!-- <p v-if="op.outRate === 1" class="now-secondary-title"
 | 
				
			||||||
 | 
					                  style="font-size: 14px; opacity: calc(.6);color:#4679FD">
 | 
				
			||||||
                  <i class="el-icon-check" />
 | 
					                  <i class="el-icon-check" />
 | 
				
			||||||
                  {{ op.name }}
 | 
					                  {{ op.name }}
 | 
				
			||||||
                </p>
 | 
					                </p> -->
 | 
				
			||||||
                <p v-else class="now-secondary-title">{{ op.name }}</p>
 | 
					                <!-- <p class="now-secondary-title">{{ op.name }}</p> -->
 | 
				
			||||||
                <el-progress :stroke-width="10" define-back-color="rgba(32, 57, 96, 1)" text-color="white"
 | 
					                <p  class="now-secondary-title" style="font-size: 14px;opacity: calc(.6);">{{ op.name }}</p>
 | 
				
			||||||
                  :percentage="op.outRate * 100" class="custom-progress-bar" />
 | 
					                <el-progress style="width: 935px;" text-color="rgba(255, 255, 255, .6)" :stroke-width="10"
 | 
				
			||||||
 | 
					                  define-back-color="rgba(32, 57, 96, 1)" :percentage="op.outRate * 100" class="custom-progress-bar" />
 | 
				
			||||||
              </el-row>
 | 
					              </el-row>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
          </base-container>
 | 
					          </base-container>
 | 
				
			||||||
@@ -496,7 +498,7 @@ export default {
 | 
				
			|||||||
        seconds = "0" + seconds;
 | 
					        seconds = "0" + seconds;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      //拼接格式化当前时间
 | 
					      //拼接格式化当前时间
 | 
				
			||||||
      this.times = year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
 | 
					      this.times = year + "." + month + "." + day + " " + hours + ":" + minutes + ":" + seconds;
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    windowWidth(value) {
 | 
					    windowWidth(value) {
 | 
				
			||||||
      this.clientWidth = value
 | 
					      this.clientWidth = value
 | 
				
			||||||
@@ -530,11 +532,6 @@ export default {
 | 
				
			|||||||
</script>
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<style lang="scss" scoped>
 | 
					<style lang="scss" scoped>
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.visual-container {
 | 
					.visual-container {
 | 
				
			||||||
  width: 1920px;
 | 
					  width: 1920px;
 | 
				
			||||||
  height: 1080px;
 | 
					  height: 1080px;
 | 
				
			||||||
@@ -556,7 +553,7 @@ export default {
 | 
				
			|||||||
          top: 25px;
 | 
					          top: 25px;
 | 
				
			||||||
          color: rgba(255, 255, 255, 0.80);
 | 
					          color: rgba(255, 255, 255, 0.80);
 | 
				
			||||||
          font-size: 20px;
 | 
					          font-size: 20px;
 | 
				
			||||||
          letter-spacing: 0px;
 | 
					          letter-spacing: 1px;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        .time {
 | 
					        .time {
 | 
				
			||||||
          position: absolute;
 | 
					          position: absolute;
 | 
				
			||||||
@@ -564,7 +561,7 @@ export default {
 | 
				
			|||||||
            top: 25px;
 | 
					            top: 25px;
 | 
				
			||||||
          color: rgba(255, 255, 255, 0.80);
 | 
					          color: rgba(255, 255, 255, 0.80);
 | 
				
			||||||
          font-size: 20px;
 | 
					          font-size: 20px;
 | 
				
			||||||
          letter-spacing: 0px;
 | 
					          letter-spacing: .72px;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    .title-button {
 | 
					    .title-button {
 | 
				
			||||||
      color: #00fff0;
 | 
					      color: #00fff0;
 | 
				
			||||||
@@ -607,6 +604,14 @@ export default {
 | 
				
			|||||||
::v-deep .el-progress-bar__inner {
 | 
					::v-deep .el-progress-bar__inner {
 | 
				
			||||||
  background-color: unset;
 | 
					  background-color: unset;
 | 
				
			||||||
  background-image: linear-gradient(to right, #4573fe, #47f8dc);
 | 
					  background-image: linear-gradient(to right, #4573fe, #47f8dc);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					::v-deep .el-progress__text {
 | 
				
			||||||
 | 
					  width: 50px;
 | 
				
			||||||
 | 
					  margin-top: -70px;
 | 
				
			||||||
 | 
					  margin-left: 834px;
 | 
				
			||||||
 | 
					  text-align: right;
 | 
				
			||||||
 | 
					  // background-color: unset;
 | 
				
			||||||
 | 
					  // background-image: linear-gradient(to right, #4573fe, #47f8dc);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 .visual-select {
 | 
					 .visual-select {
 | 
				
			||||||
   position: absolute;
 | 
					   position: absolute;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
<!--
 | 
					<!--
 | 
				
			||||||
 * @Author: zhp
 | 
					 * @Author: zhp
 | 
				
			||||||
 * @Date: 2024-01-29 16:50:26
 | 
					 * @Date: 2024-01-29 16:50:26
 | 
				
			||||||
 * @LastEditTime: 2024-03-28 16:35:49
 | 
					 * @LastEditTime: 2024-04-07 16:05:59
 | 
				
			||||||
 * @LastEditors: zhp
 | 
					 * @LastEditors: zhp
 | 
				
			||||||
 * @Description:
 | 
					 * @Description:
 | 
				
			||||||
-->
 | 
					-->
 | 
				
			||||||
@@ -17,11 +17,11 @@
 | 
				
			|||||||
      许昌安彩冷端看板
 | 
					      许昌安彩冷端看板
 | 
				
			||||||
      <h3 class="unit">单位:河南汇融数字科技有限公司</h3>
 | 
					      <h3 class="unit">单位:河南汇融数字科技有限公司</h3>
 | 
				
			||||||
      <h3 class="time">{{ times }}</h3>
 | 
					      <h3 class="time">{{ times }}</h3>
 | 
				
			||||||
      <el-button type="text" class="title-button" :style="{ right: 18 + 'px', top: 26 + 'px',fontSize:'32px'}"
 | 
					      <!-- <el-button type="text" class="title-button" :style="{ right: 18 + 'px', top: 26 + 'px',fontSize:'32px'}"
 | 
				
			||||||
        @click="changeFullScreen">
 | 
					        @click="changeFullScreen">
 | 
				
			||||||
        <svg-icon width="32" height="32" v-if="isFullScreen" icon-class="unFullScreenView" />
 | 
					        <svg-icon width="32" height="32" v-if="isFullScreen" icon-class="unFullScreenView" />
 | 
				
			||||||
        <svg-icon width="32" height="32" v-else icon-class="fullScreenView" />
 | 
					        <svg-icon width="32" height="32" v-else icon-class="fullScreenView" />
 | 
				
			||||||
      </el-button>
 | 
					      </el-button> -->
 | 
				
			||||||
    </el-row>
 | 
					    </el-row>
 | 
				
			||||||
    <el-row class="container-main flex-col" type="flex">
 | 
					    <el-row class="container-main flex-col" type="flex">
 | 
				
			||||||
      <el-row :style="{ padding: '0 ' + 9 + 'px' }" :gutter="15" type="flex" class="flex-1">
 | 
					      <el-row :style="{ padding: '0 ' + 9 + 'px' }" :gutter="15" type="flex" class="flex-1">
 | 
				
			||||||
@@ -40,6 +40,13 @@
 | 
				
			|||||||
              <top-radio-group />
 | 
					              <top-radio-group />
 | 
				
			||||||
            </div> -->
 | 
					            </div> -->
 | 
				
			||||||
            <!-- 像下面这样表格里的limit值,也许可以用js动态计算出来 -->
 | 
					            <!-- 像下面这样表格里的limit值,也许可以用js动态计算出来 -->
 | 
				
			||||||
 | 
					            <div v-if="coldDetData" class="myLegend">
 | 
				
			||||||
 | 
					              <div class=" barCircleLegend"></div>
 | 
				
			||||||
 | 
					              <div class=" barCircle"></div>
 | 
				
			||||||
 | 
					              <h4 class="barText">产线良品率</h4>
 | 
				
			||||||
 | 
					              <div class="barLegend"></div>
 | 
				
			||||||
 | 
					              <h4 class="barCircleText">产线产量</h4>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
            <double-y-chart ref="productChart" :id="'doubleYChart'" :name-list="cxNameList" :data-list="cxDataList"
 | 
					            <double-y-chart ref="productChart" :id="'doubleYChart'" :name-list="cxNameList" :data-list="cxDataList"
 | 
				
			||||||
              :height="359" :show-legend="true" />
 | 
					              :height="359" :show-legend="true" />
 | 
				
			||||||
          </base-container>
 | 
					          </base-container>
 | 
				
			||||||
@@ -64,11 +71,11 @@
 | 
				
			|||||||
            </div> -->
 | 
					            </div> -->
 | 
				
			||||||
            <!-- <el-row :gutter="9"> -->
 | 
					            <!-- <el-row :gutter="9"> -->
 | 
				
			||||||
            <!-- <el-col :style="{ margin: 8 + 'px' + ' 0' }" :span="24"> -->
 | 
					            <!-- <el-col :style="{ margin: 8 + 'px' + ' 0' }" :span="24"> -->
 | 
				
			||||||
            <pile-bar-chart style="margin-bottom: -15px" ref="firstPileChart" :height="90" />
 | 
					            <pile-bar-chart id=" 'one' " style="margin-top: -5px;" ref="firstPileChart" :height="80" />
 | 
				
			||||||
            <second-pile-bar-chart style="margin-bottom: -15px" id=" 'second' " ref="secondPileChart" :height="90" />
 | 
					            <second-pile-bar-chart id=" 'second' " ref="secondPileChart" :height="90" />
 | 
				
			||||||
            <third-pile-bar-chart style="margin-bottom: -15px" id=" 'third' " ref="thirdPileChart" :height="90" />
 | 
					            <third-pile-bar-chart id=" 'third' " ref="thirdPileChart" :height="90" />
 | 
				
			||||||
            <fourth-pile-bar-chart style="margin-bottom: -15px" id=" 'fourth' " ref="fourthPileChart" :height="90" />
 | 
					            <fourth-pile-bar-chart id=" 'fourth' " ref="fourthPileChart" :height="90" />
 | 
				
			||||||
            <fifth-pile-bar-chart style="margin-bottom: -15px" id=" 'fifth' " ref="fifthPileChart" :height="100" />
 | 
					            <fifth-pile-bar-chart style="margin-top: -5px;" id=" 'fifth' " ref="fifthPileChart" :height="90" />
 | 
				
			||||||
            <!-- <pile-bar-chart ref="secondPileChart"
 | 
					            <!-- <pile-bar-chart ref="secondPileChart"
 | 
				
			||||||
              :height="90" />
 | 
					              :height="90" />
 | 
				
			||||||
            <pile-bar-chart ref="thirdPileChart"
 | 
					            <pile-bar-chart ref="thirdPileChart"
 | 
				
			||||||
@@ -244,6 +251,7 @@ export default {
 | 
				
			|||||||
      funWs: undefined,
 | 
					      funWs: undefined,
 | 
				
			||||||
      SJGws: undefined,
 | 
					      SJGws: undefined,
 | 
				
			||||||
      funWsData: {},
 | 
					      funWsData: {},
 | 
				
			||||||
 | 
					      coldDetData:[],
 | 
				
			||||||
      SJGWsData: {},
 | 
					      SJGWsData: {},
 | 
				
			||||||
      cxNameList:[],
 | 
					      cxNameList:[],
 | 
				
			||||||
      cxDataList:[],
 | 
					      cxDataList:[],
 | 
				
			||||||
@@ -302,6 +310,7 @@ export default {
 | 
				
			|||||||
      window.location.reload()
 | 
					      window.location.reload()
 | 
				
			||||||
    }, 86400000)
 | 
					    }, 86400000)
 | 
				
			||||||
    // this.getData()
 | 
					    // this.getData()
 | 
				
			||||||
 | 
					    // this.getReaiData()
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  destroyed() {
 | 
					  destroyed() {
 | 
				
			||||||
    this.CutWebsocketClose()
 | 
					    this.CutWebsocketClose()
 | 
				
			||||||
@@ -314,16 +323,39 @@ export default {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  mounted() {
 | 
					  mounted() {
 | 
				
			||||||
 | 
					    this.getProductData()
 | 
				
			||||||
 | 
					    // this.$refs.productChart.initChart(nameList, yieldList, sumAreaList)
 | 
				
			||||||
 | 
					    this.getTimes()
 | 
				
			||||||
 | 
					    // console.log(moment(this.logoutTime - 28800000).format('HH:mm:ss'));
 | 
				
			||||||
 | 
					    this.funInitWebSocket()
 | 
				
			||||||
 | 
					      if (!this.wsIsOpen) {
 | 
				
			||||||
 | 
					        getDcsMsg()
 | 
				
			||||||
 | 
					        this.wsIsOpen = true
 | 
				
			||||||
 | 
					        console.log('开启websocket==========')
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    this.CutInitWebSocket()
 | 
				
			||||||
 | 
					    this.SJGInitWebSocket()
 | 
				
			||||||
 | 
					    const _this = this;
 | 
				
			||||||
 | 
					    _this.beilv2 = document.documentElement.clientWidth / 1920
 | 
				
			||||||
 | 
					    window.onresize = () => {
 | 
				
			||||||
 | 
					      return (() => {
 | 
				
			||||||
 | 
					        _this.clientWidth = `${document.documentElement.clientWidth}`
 | 
				
			||||||
 | 
					        this.beilv2 = _this.clientWidth / 1920
 | 
				
			||||||
 | 
					      })()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  methods: {
 | 
				
			||||||
 | 
					    getProductData() {
 | 
				
			||||||
      let nameList = []
 | 
					      let nameList = []
 | 
				
			||||||
      let nameWasteList = []
 | 
					      let nameWasteList = []
 | 
				
			||||||
      let topNameList = []
 | 
					      let topNameList = []
 | 
				
			||||||
      let productList = []
 | 
					      let productList = []
 | 
				
			||||||
      let wasteList = []
 | 
					      let wasteList = []
 | 
				
			||||||
      let yieldList = []
 | 
					      let yieldList = []
 | 
				
			||||||
    // let sumAreaList = []
 | 
					      let sumAreaList = []
 | 
				
			||||||
      // let yieldList = []
 | 
					      // let yieldList = []
 | 
				
			||||||
      // this.cutTableDataList =
 | 
					      // this.cutTableDataList =
 | 
				
			||||||
    let coldDetData = [
 | 
					      this.coldDetData = [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
          "first": 0.8834,
 | 
					          "first": 0.8834,
 | 
				
			||||||
          "lineName": "Y61",
 | 
					          "lineName": "Y61",
 | 
				
			||||||
@@ -375,45 +407,69 @@ export default {
 | 
				
			|||||||
          "yield": 0.9133
 | 
					          "yield": 0.9133
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      ]
 | 
					      ]
 | 
				
			||||||
    coldDetData.forEach((ele, index) => {
 | 
					      this.coldDetData.forEach((ele, index) => {
 | 
				
			||||||
        nameList.push(ele.lineName)
 | 
					        nameList.push(ele.lineName)
 | 
				
			||||||
      topNameList.push('产线: ' + ele.lineName + '   ' + '总面积:' + ele.sumArea)
 | 
					        topNameList.push('产线: ' + ele.lineName + '   ' + '总面积:' + ele.sumArea + '㎡')
 | 
				
			||||||
        productList.push(ele.productArea)
 | 
					        productList.push(ele.productArea)
 | 
				
			||||||
        wasteList.push(ele.wastArea)
 | 
					        wasteList.push(ele.wastArea)
 | 
				
			||||||
      nameWasteList.push('缺陷面积:' + ele.wastArea)
 | 
					        nameWasteList.push('缺陷面积:' + this.NumFormat(ele.wastArea) + '㎡')
 | 
				
			||||||
      yieldList.push({
 | 
					        // yieldList.push({
 | 
				
			||||||
        name: '良品',
 | 
					        //   name: '良品',
 | 
				
			||||||
        yield:ele.yield
 | 
					        //   yield:ele.yield
 | 
				
			||||||
      })
 | 
					        // })
 | 
				
			||||||
      // sumAreaList.push(ele.sumArea)
 | 
					        sumAreaList.push(ele.sumArea)
 | 
				
			||||||
      // yieldList.push((ele.yield * 100).toFixed(3))
 | 
					        yieldList.push((ele.yield * 100).toFixed(0))
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
 | 
					      this.$nextTick(() => {
 | 
				
			||||||
 | 
					        this.$refs.productChart.initChart(nameList, yieldList, sumAreaList)
 | 
				
			||||||
        this.$refs.firstPileChart.initChart(nameList, [topNameList[0]], [nameWasteList[0]], [productList[0]], [wasteList[0]])
 | 
					        this.$refs.firstPileChart.initChart(nameList, [topNameList[0]], [nameWasteList[0]], [productList[0]], [wasteList[0]])
 | 
				
			||||||
        this.$refs.secondPileChart.initChart(nameList, [topNameList[1]], [nameWasteList[1]], [productList[1]], [wasteList[1]])
 | 
					        this.$refs.secondPileChart.initChart(nameList, [topNameList[1]], [nameWasteList[1]], [productList[1]], [wasteList[1]])
 | 
				
			||||||
        this.$refs.thirdPileChart.initChart(nameList, [topNameList[2]], [nameWasteList[2]], [productList[2]], [wasteList[2]])
 | 
					        this.$refs.thirdPileChart.initChart(nameList, [topNameList[2]], [nameWasteList[2]], [productList[2]], [wasteList[2]])
 | 
				
			||||||
        this.$refs.fourthPileChart.initChart(nameList, [topNameList[3]], [nameWasteList[3]], [productList[3]], [wasteList[3]])
 | 
					        this.$refs.fourthPileChart.initChart(nameList, [topNameList[3]], [nameWasteList[3]], [productList[3]], [wasteList[3]])
 | 
				
			||||||
        this.$refs.fifthPileChart.initChart(nameList, [topNameList[4]], [nameWasteList[4]], [productList[4]], [wasteList[4]])
 | 
					        this.$refs.fifthPileChart.initChart(nameList, [topNameList[4]], [nameWasteList[4]], [productList[4]], [wasteList[4]])
 | 
				
			||||||
    // this.$refs.productChart.initChart(nameList, yieldList, sumAreaList)
 | 
					      })
 | 
				
			||||||
    this.getTimes()
 | 
					 | 
				
			||||||
    // console.log(moment(this.logoutTime - 28800000).format('HH:mm:ss'));
 | 
					 | 
				
			||||||
    this.funInitWebSocket()
 | 
					 | 
				
			||||||
      if (!this.wsIsOpen) {
 | 
					 | 
				
			||||||
        getDcsMsg()
 | 
					 | 
				
			||||||
        this.wsIsOpen = true
 | 
					 | 
				
			||||||
        console.log('开启websocket==========')
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    this.CutInitWebSocket()
 | 
					 | 
				
			||||||
    this.SJGInitWebSocket()
 | 
					 | 
				
			||||||
    const _this = this;
 | 
					 | 
				
			||||||
    _this.beilv2 = document.documentElement.clientWidth / 1920
 | 
					 | 
				
			||||||
    window.onresize = () => {
 | 
					 | 
				
			||||||
      return (() => {
 | 
					 | 
				
			||||||
        _this.clientWidth = `${document.documentElement.clientWidth}`
 | 
					 | 
				
			||||||
        this.beilv2 = _this.clientWidth / 1920
 | 
					 | 
				
			||||||
      })()
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
  methods: {
 | 
					    // getReaiData() {
 | 
				
			||||||
 | 
					    //   let detData = [
 | 
				
			||||||
 | 
					    //     {
 | 
				
			||||||
 | 
					    //       name: '1',
 | 
				
			||||||
 | 
					    //       run: '运行',
 | 
				
			||||||
 | 
					    //     },
 | 
				
			||||||
 | 
					    //     {
 | 
				
			||||||
 | 
					    //       name: '2',
 | 
				
			||||||
 | 
					    //       run: '未运行',
 | 
				
			||||||
 | 
					    //     },
 | 
				
			||||||
 | 
					    //     {
 | 
				
			||||||
 | 
					    //       name: '3',
 | 
				
			||||||
 | 
					    //       run: '运行',
 | 
				
			||||||
 | 
					    //     },
 | 
				
			||||||
 | 
					    //     {
 | 
				
			||||||
 | 
					    //       name: '4',
 | 
				
			||||||
 | 
					    //       run: '未运行',
 | 
				
			||||||
 | 
					    //     },
 | 
				
			||||||
 | 
					    //     {
 | 
				
			||||||
 | 
					    //       name: '1',
 | 
				
			||||||
 | 
					    //       run: '运行',
 | 
				
			||||||
 | 
					    //     },
 | 
				
			||||||
 | 
					    //   ]
 | 
				
			||||||
 | 
					    //   let arr = []
 | 
				
			||||||
 | 
					    //   let index = 0
 | 
				
			||||||
 | 
					    //   for (let i in detData) {
 | 
				
			||||||
 | 
					    //     index++,
 | 
				
			||||||
 | 
					    //       arr.push([
 | 
				
			||||||
 | 
					    //         `<span style="color:rgba(255,255,255,0.5)" >${index || ''}
 | 
				
			||||||
 | 
					    //         </span>`,
 | 
				
			||||||
 | 
					    //         // `<span style="color:rgba(255,255,255,0.5)" >${i || ''}
 | 
				
			||||||
 | 
					    //         // </span>`,
 | 
				
			||||||
 | 
					    //         `<span style="color:rgba(255,255,255,0.5)">${i || ''}</span>`,
 | 
				
			||||||
 | 
					    //         `<span style="color:rgba(255,255,255,0.5)"><div style="${detData[i] == '运行' ? 'box-shadow: 0px 0px 2px 1px #2760FF;width:6px;height:6px;border-radius: 50%;background-color: #2760FF;float:left;margin:10px 10px 0 0 ' : 'box-shadow: 0px 0px 2px 1px #FFBD02;width:6px;height:6px;border-radius: 50%;  background-color: #FFBD02;float:left;margin:10px 10px 0 0 '}"></div>  ${detData[i] || ''}</span>`,
 | 
				
			||||||
 | 
					    //       ])
 | 
				
			||||||
 | 
					    //   }
 | 
				
			||||||
 | 
					    //   // this.$nextTick(() => {
 | 
				
			||||||
 | 
					    //     this.annealFunConfig.data = arr
 | 
				
			||||||
 | 
					    //     this.$refs['annealFunScrollBoard'].updateRows(arr)
 | 
				
			||||||
 | 
					    //   // })
 | 
				
			||||||
 | 
					    // },
 | 
				
			||||||
    // getData() {
 | 
					    // getData() {
 | 
				
			||||||
    //   let detData = [
 | 
					    //   let detData = [
 | 
				
			||||||
    //     {
 | 
					    //     {
 | 
				
			||||||
@@ -444,8 +500,10 @@ export default {
 | 
				
			|||||||
    //     `<span style="color:rgba(255,255,255,0.5)">${item.name || ''}</span>`,
 | 
					    //     `<span style="color:rgba(255,255,255,0.5)">${item.name || ''}</span>`,
 | 
				
			||||||
    //     `<span style="color:rgba(255,255,255,0.5)"><div style="${item.run == '运行' ? 'box-shadow: 0px 0px 2px 1px #2760FF;width:6px;height:6px;border-radius: 50%;background-color: #2760FF;float:left;margin:10px 10px 0 0 ' : 'box-shadow: 0px 0px 2px 1px #FFBD02;width:6px;height:6px;border-radius: 50%;  background-color: #FFBD02;float:left;margin:10px 10px 0 0 '}"></div>  ${item.run || ''}</span>`,
 | 
					    //     `<span style="color:rgba(255,255,255,0.5)"><div style="${item.run == '运行' ? 'box-shadow: 0px 0px 2px 1px #2760FF;width:6px;height:6px;border-radius: 50%;background-color: #2760FF;float:left;margin:10px 10px 0 0 ' : 'box-shadow: 0px 0px 2px 1px #FFBD02;width:6px;height:6px;border-radius: 50%;  background-color: #FFBD02;float:left;margin:10px 10px 0 0 '}"></div>  ${item.run || ''}</span>`,
 | 
				
			||||||
    //   ])
 | 
					    //   ])
 | 
				
			||||||
 | 
					    //   // this.$nextTick(() => {
 | 
				
			||||||
    //     this.realEqConfig.data = this.realEqList
 | 
					    //     this.realEqConfig.data = this.realEqList
 | 
				
			||||||
    //     this.$refs['realEqScrollBoard'].updateRows(this.realEqList)
 | 
					    //     this.$refs['realEqScrollBoard'].updateRows(this.realEqList)
 | 
				
			||||||
 | 
					    //   //  })
 | 
				
			||||||
    // },
 | 
					    // },
 | 
				
			||||||
    CutWebsocketClose(e) {
 | 
					    CutWebsocketClose(e) {
 | 
				
			||||||
      this.Cutws.ws.onclose = (event) => { console.log(event );}
 | 
					      this.Cutws.ws.onclose = (event) => { console.log(event );}
 | 
				
			||||||
@@ -495,7 +553,7 @@ export default {
 | 
				
			|||||||
        seconds = "0" + seconds;
 | 
					        seconds = "0" + seconds;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      //拼接格式化当前时间
 | 
					      //拼接格式化当前时间
 | 
				
			||||||
      this.times = year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
 | 
					      this.times = year + "." + month + "." + day + " " + hours + ":" + minutes + ":" + seconds;
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    SJGInitWebSocket() {
 | 
					    SJGInitWebSocket() {
 | 
				
			||||||
      let date = new Date().valueOf()
 | 
					      let date = new Date().valueOf()
 | 
				
			||||||
@@ -525,10 +583,9 @@ export default {
 | 
				
			|||||||
          ])
 | 
					          ])
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        this.realEqConfig.data = this.realEqList
 | 
					        this.realEqConfig.data = this.realEqList
 | 
				
			||||||
        this.$nextTick(() => {
 | 
					        // this.$nextTick(() => {
 | 
				
			||||||
          this.$refs['realEqScrollBoard'].updateRows(this.realEqList)
 | 
					          this.$refs['realEqScrollBoard'].updateRows(this.realEqList)
 | 
				
			||||||
 | 
					        // })
 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
      // if (typeof (WebSocket) === 'undefined') {
 | 
					      // if (typeof (WebSocket) === 'undefined') {
 | 
				
			||||||
      //   alert('您的浏览器不支持WebSocket')
 | 
					      //   alert('您的浏览器不支持WebSocket')
 | 
				
			||||||
@@ -560,19 +617,23 @@ export default {
 | 
				
			|||||||
        this.cutWsData = event?.data ? JSON.parse(event?.data) : {}
 | 
					        this.cutWsData = event?.data ? JSON.parse(event?.data) : {}
 | 
				
			||||||
        if (this.cutWsData.type === 'cutting' && this.cutWsData.name === 'table') {
 | 
					        if (this.cutWsData.type === 'cutting' && this.cutWsData.name === 'table') {
 | 
				
			||||||
          let cutArr = this.cutWsData.productHourData.map((item, index) => [
 | 
					          let cutArr = this.cutWsData.productHourData.map((item, index) => [
 | 
				
			||||||
            `<span style="color:rgba(255,255,255,0.7)" >${index + 1 || ''}
 | 
					            `<span style="color:rgba(255,255,255,0.5)" >${index + 1 || ''}
 | 
				
			||||||
            </span>`,
 | 
					            </span>`,
 | 
				
			||||||
            `<span style="color:rgba(255,255,255,0.7)" >${item.lineName || ''}
 | 
					            `<span style="color:rgba(255,255,255,0.5)" >${item.lineName || ''}
 | 
				
			||||||
            </span>`,
 | 
					            </span>`,
 | 
				
			||||||
            `<span style="color:rgba(255,255,255,0.7)">${this.formatTime(item.time) || ''}</span>`,
 | 
					            `<span style="color:rgba(255,255,255,0.5)">${this.formatTime(item.time) || ''}</span>`,
 | 
				
			||||||
            `<span style="color:rgba(255,255,255,0.7)">${this.getSize(item.size) || ''}</span>`,
 | 
					            `<span style="color:rgba(255,255,255,0.5)">${this.getSize(item.size) || ''}</span>`,
 | 
				
			||||||
            `<span style="color:rgba(255,255,255,0.7)">${item.productArea + '㎡' || ''}</span>`,
 | 
					            `<span style="color:rgba(255,255,255,0.5)">${this.NumFormat(item.productArea) + '㎡' || ''}</span>`,
 | 
				
			||||||
            `<span style="color:rgba(255,255,255,0.7)">${item.wasteArea + '㎡' || ''}</span>`,
 | 
					            `<span style="color:rgba(255,255,255,0.5)">${this.NumFormat(item.wasteArea) + '㎡' || ''}</span>`,
 | 
				
			||||||
            `<div style = "${(item.product * 100).toFixed(2) > 91 ? 'display:block;color:#00FFF7' : 'display:none;'}">${(item.product * 100).toFixed(2) + '%' || ''}</div>
 | 
					            `<div style = "${(item.product * 100).toFixed(0) > 91 ? 'display:block;color:#00FFF7' : 'display:none;'}">${(item.product * 100).toFixed(0) + '%' || ''}</div>
 | 
				
			||||||
           <div style = "${(item.product * 100).toFixed(2) < 91 ? 'display:block; color:rgba(255, 209, 96, 1)' : 'display:none;'}">${(item.product * 100).toFixed(2) + '%' || ''}</div>`
 | 
					           <div style = "${(item.product * 100).toFixed(0) < 91 ? 'display:block; color:rgba(255, 209, 96, 1)' : 'display:none;'}">${(item.product * 100).toFixed(0) + '%' || ''}</div>`
 | 
				
			||||||
          ])
 | 
					          ])
 | 
				
			||||||
          this.cutConfig.data = cutArr
 | 
					          this.cutConfig.data = cutArr
 | 
				
			||||||
 | 
					          // this.$nextTick(() => {
 | 
				
			||||||
            this.$refs['cutScrollBoard'].updateRows(cutArr)
 | 
					            this.$refs['cutScrollBoard'].updateRows(cutArr)
 | 
				
			||||||
 | 
					          // })
 | 
				
			||||||
 | 
					          // this.cutConfig.data = cutArr
 | 
				
			||||||
 | 
					          // this.$refs['cutScrollBoard'].updateRows(cutArr)
 | 
				
			||||||
        } else if (this.cutWsData.type === 'cutting' && this.cutWsData.name === 'chart' && this.cutWsData.dateType === 'day') {
 | 
					        } else if (this.cutWsData.type === 'cutting' && this.cutWsData.name === 'chart' && this.cutWsData.dateType === 'day') {
 | 
				
			||||||
          let nameList = []
 | 
					          let nameList = []
 | 
				
			||||||
          let nameWasteList = []
 | 
					          let nameWasteList = []
 | 
				
			||||||
@@ -581,22 +642,25 @@ export default {
 | 
				
			|||||||
          let wasteList = []
 | 
					          let wasteList = []
 | 
				
			||||||
          let sumAreaList = []
 | 
					          let sumAreaList = []
 | 
				
			||||||
          let yieldList = []
 | 
					          let yieldList = []
 | 
				
			||||||
 | 
					          this.coldDetData = this.cutWsData.coldDetData
 | 
				
			||||||
          // this.cutTableDataList =
 | 
					          // this.cutTableDataList =
 | 
				
			||||||
          this.cutWsData.coldDetData.forEach((ele, index) => {
 | 
					          this.cutWsData.coldDetData.forEach((ele, index) => {
 | 
				
			||||||
            nameList.push(ele.lineName)
 | 
					            nameList.push(ele.lineName)
 | 
				
			||||||
            topNameList.push('产线: ' + ele.lineName + '   ' + '总面积:' + ele.sumArea)
 | 
					            topNameList.push('产线: ' + ele.lineName + '   ' + '总面积:' + ele.sumArea + '㎡')
 | 
				
			||||||
            productList.push(ele.productArea)
 | 
					            productList.push(ele.productArea)
 | 
				
			||||||
            wasteList.push(ele.wastArea)
 | 
					            wasteList.push(ele.wastArea)
 | 
				
			||||||
            nameWasteList.push('缺陷面积:' + ele.wastArea)
 | 
					            nameWasteList.push('缺陷面积:' + this.NumFormat(ele.wastArea) + '㎡')
 | 
				
			||||||
            sumAreaList.push(ele.sumArea)
 | 
					            sumAreaList.push(ele.sumArea)
 | 
				
			||||||
            yieldList.push(parseFloat((ele.yield * 100).toFixed(3)))
 | 
					            yieldList.push(parseFloat((ele.yield * 100).toFixed(0)))
 | 
				
			||||||
          })
 | 
					          })
 | 
				
			||||||
 | 
					          this.$nextTick(() => {
 | 
				
			||||||
            this.$refs.firstPileChart.initChart(nameList, [topNameList[0]], [nameWasteList[0]], [productList[0]], [wasteList[0]])
 | 
					            this.$refs.firstPileChart.initChart(nameList, [topNameList[0]], [nameWasteList[0]], [productList[0]], [wasteList[0]])
 | 
				
			||||||
            this.$refs.secondPileChart.initChart(nameList, [topNameList[1]], [nameWasteList[1]], [productList[1]], [wasteList[1]])
 | 
					            this.$refs.secondPileChart.initChart(nameList, [topNameList[1]], [nameWasteList[1]], [productList[1]], [wasteList[1]])
 | 
				
			||||||
          this.$refs.thirdPileChart.initChart(nameList, [topNameList[0]], [nameWasteList[0]], [productList[0]], [wasteList[0]])
 | 
					            this.$refs.thirdPileChart.initChart(nameList, [topNameList[2]], [nameWasteList[2]], [productList[2]], [wasteList[2]])
 | 
				
			||||||
          this.$refs.fourthPileChart.initChart(nameList, [topNameList[0]], [nameWasteList[0]], [productList[0]], [wasteList[0]])
 | 
					            this.$refs.fourthPileChart.initChart(nameList, [topNameList[3]], [nameWasteList[3]], [productList[3]], [wasteList[3]])
 | 
				
			||||||
          this.$refs.fifthPileChart.initChart(nameList, [topNameList[0]], [nameWasteList[0]], [productList[0]], [wasteList[0]])
 | 
					            this.$refs.fifthPileChart.initChart(nameList, [topNameList[4]], [nameWasteList[4]], [productList[4]], [wasteList[4]])
 | 
				
			||||||
            this.$refs.productChart.initChart(nameList, yieldList, sumAreaList)
 | 
					            this.$refs.productChart.initChart(nameList, yieldList, sumAreaList)
 | 
				
			||||||
 | 
					          })
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
      // if (typeof (WebSocket) === 'undefined') {
 | 
					      // if (typeof (WebSocket) === 'undefined') {
 | 
				
			||||||
@@ -632,17 +696,18 @@ export default {
 | 
				
			|||||||
          for (let i in this.funWsData.data.annealFanInfo) {
 | 
					          for (let i in this.funWsData.data.annealFanInfo) {
 | 
				
			||||||
            index++,
 | 
					            index++,
 | 
				
			||||||
              arr.push([
 | 
					              arr.push([
 | 
				
			||||||
                `
 | 
					                `<span style="color:rgba(255,255,255,0.5)" >${index || ''}
 | 
				
			||||||
          <span style="color:rgba(255,255,255,0.5)" >${index || ''}
 | 
					 | 
				
			||||||
            </span>`,
 | 
					            </span>`,
 | 
				
			||||||
                `<span style="color:rgba(255,255,255,0.5)" >${i || ''}
 | 
					                // `<span style="color:rgba(255,255,255,0.5)" >${i || ''}
 | 
				
			||||||
            </span>`,
 | 
					                // </span>`,
 | 
				
			||||||
                `<span style="color:rgba(255,255,255,0.5)">${item.name || ''}</span>`,
 | 
					                `<span style="color:rgba(255,255,255,0.5)">${i || ''}</span>`,
 | 
				
			||||||
                `<span style="color:rgba(255,255,255,0.5)"><div style="${item.run == '运行' ? 'box-shadow: 0px 0px 2px 1px #2760FF;width:6px;height:6px;border-radius: 50%;background-color: #2760FF;float:left;margin:10px 10px 0 0 ' : 'box-shadow: 0px 0px 2px 1px #FFBD02;width:6px;height:6px;border-radius: 50%;  background-color: #FFBD02;float:left;margin:10px 10px 0 0 '}"></div>  ${item.run || ''}</span>`,
 | 
					                `<span style="color:rgba(255,255,255,0.5)"><div style="${this.funWsData.data.annealFanInfo[i] == '运行' ? 'box-shadow: 0px 0px 2px 1px #2760FF;width:6px;height:6px;border-radius: 50%;background-color: #2760FF;float:left;margin:10px 10px 0 0 ' : 'box-shadow: 0px 0px 2px 1px #FFBD02;width:6px;height:6px;border-radius: 50%;  background-color: #FFBD02;float:left;margin:10px 10px 0 0 '}"></div>  ${this.funWsData.data.annealFanInfo[i] || ''}</span>`,
 | 
				
			||||||
              ])
 | 
					              ])
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
          this.annealFunConfig.data = arr
 | 
					          this.annealFunConfig.data = arr
 | 
				
			||||||
 | 
					          // this.$nextTick(() => {
 | 
				
			||||||
            this.$refs['annealFunScrollBoard'].updateRows(arr)
 | 
					            this.$refs['annealFunScrollBoard'].updateRows(arr)
 | 
				
			||||||
 | 
					          // })
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (this.funWsData.type === 'FanInfo') {
 | 
					        if (this.funWsData.type === 'FanInfo') {
 | 
				
			||||||
          let arr = []
 | 
					          let arr = []
 | 
				
			||||||
@@ -650,14 +715,16 @@ export default {
 | 
				
			|||||||
          for (let i in this.funWsData.data.fanInfo) {
 | 
					          for (let i in this.funWsData.data.fanInfo) {
 | 
				
			||||||
            index++,
 | 
					            index++,
 | 
				
			||||||
              arr.push([
 | 
					              arr.push([
 | 
				
			||||||
                `<span style="color:rgba(255,255,255,0.5)" >${index || ''}</span>`,
 | 
					                `<span style="color:rgba(255,255,255,0.5)" >${index || ''}
 | 
				
			||||||
 | 
					            </span>`,
 | 
				
			||||||
                `<span style="color:rgba(255,255,255,0.5)">${i || ''}</span>`,
 | 
					                `<span style="color:rgba(255,255,255,0.5)">${i || ''}</span>`,
 | 
				
			||||||
                `<span style="color:rgba(255,255,255,0.5)">${item.name || ''}</span>`,
 | 
					                `<span style="color:rgba(255,255,255,0.5)"><div style="${this.funWsData.data.fanInfo[i] == '运行' ? 'box-shadow: 0px 0px 2px 1px #2760FF;width:6px;height:6px;border-radius: 50%;background-color: #2760FF;float:left;margin:10px 10px 0 0 ' : 'box-shadow: 0px 0px 2px 1px #FFBD02;width:6px;height:6px;border-radius: 50%;  background-color: #FFBD02;float:left;margin:10px 10px 0 0 '}"></div>  ${this.funWsData.data.fanInfo[i] || ''}</span>`,
 | 
				
			||||||
                `<span style="color:rgba(255,255,255,0.5)"><div style="${item.run == '运行' ? 'box-shadow: 0px 0px 2px 1px #2760FF;width:6px;height:6px;border-radius: 50%;background-color: #2760FF;float:left;margin:10px 10px 0 0 ' : 'box-shadow: 0px 0px 2px 1px #FFBD02;width:6px;height:6px;border-radius: 50%;  background-color: #FFBD02;float:left;margin:10px 10px 0 0 '}"></div>  ${item.run || ''}</span>`,
 | 
					 | 
				
			||||||
              ])
 | 
					              ])
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
          this.funConfig.data = arr
 | 
					          this.funConfig.data = arr
 | 
				
			||||||
 | 
					          // this.$nextTick(() => {
 | 
				
			||||||
            this.$refs['funScrollBoard'].updateRows(arr)
 | 
					            this.$refs['funScrollBoard'].updateRows(arr)
 | 
				
			||||||
 | 
					          // })
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
      // if (typeof (WebSocket) === 'undefined') {
 | 
					      // if (typeof (WebSocket) === 'undefined') {
 | 
				
			||||||
@@ -678,6 +745,25 @@ export default {
 | 
				
			|||||||
      //   this.funWebsocket.onclose = this.funWebsocketClose
 | 
					      //   this.funWebsocket.onclose = this.funWebsocketClose
 | 
				
			||||||
      // }
 | 
					      // }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    NumFormat(value) {
 | 
				
			||||||
 | 
					      if (!value) return '0.00'
 | 
				
			||||||
 | 
					      value = value.toFixed(2)
 | 
				
			||||||
 | 
					      var intPart = Math.trunc(value) // 获取整数部分
 | 
				
			||||||
 | 
					      // var intPartFormat = intPart.toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,') // 将整数部分逢三一断
 | 
				
			||||||
 | 
					      var floatPart = '.00' // 预定义小数部分
 | 
				
			||||||
 | 
					      var value2Array = value.split('.')
 | 
				
			||||||
 | 
					      // =2表示数据有小数位
 | 
				
			||||||
 | 
					      if (value2Array.length === 2) {
 | 
				
			||||||
 | 
					        floatPart = value2Array[1].toString() // 拿到小数部分
 | 
				
			||||||
 | 
					        if (floatPart.length === 1) {
 | 
				
			||||||
 | 
					          return intPart + '.' + floatPart + '0'
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					          return intPart + '.' + floatPart
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        return intPart + floatPart
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    // funWebsocketOnOpen() {
 | 
					    // funWebsocketOnOpen() {
 | 
				
			||||||
    //   console.log('socket连接成功')
 | 
					    //   console.log('socket连接成功')
 | 
				
			||||||
    //   this.SJGWebsocket.onmessage()
 | 
					    //   this.SJGWebsocket.onmessage()
 | 
				
			||||||
@@ -772,7 +858,47 @@ export default {
 | 
				
			|||||||
</script>
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<style lang="scss" scoped>
 | 
					<style lang="scss" scoped>
 | 
				
			||||||
 | 
					.myLegend{
 | 
				
			||||||
 | 
					  position: absolute;
 | 
				
			||||||
 | 
					  top: -20px;
 | 
				
			||||||
 | 
					  right: 20px;
 | 
				
			||||||
 | 
					  font-size: 12px;
 | 
				
			||||||
 | 
					  color: rgba(255,255,255,.6);
 | 
				
			||||||
 | 
					  .barLegend{
 | 
				
			||||||
 | 
					    // float: left;
 | 
				
			||||||
 | 
					    background: linear-gradient(#9DD5FF, #1295FF);
 | 
				
			||||||
 | 
					    width: 10px;
 | 
				
			||||||
 | 
					    height: 10px;
 | 
				
			||||||
 | 
					    display: inline-block;
 | 
				
			||||||
 | 
					    margin-right: 5px;
 | 
				
			||||||
 | 
					    border-radius: 30%;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .barText{
 | 
				
			||||||
 | 
					    // float: right;
 | 
				
			||||||
 | 
					    display: inline-block;
 | 
				
			||||||
 | 
					    margin-right: 10px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .barCircleLegend{
 | 
				
			||||||
 | 
					    width: 15px;
 | 
				
			||||||
 | 
					    height: 1px;
 | 
				
			||||||
 | 
					    background-color: rgba(255, 209, 96, 1);
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    left: -4.1715px;
 | 
				
			||||||
 | 
					    top: 21.7px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .barCircle{
 | 
				
			||||||
 | 
					    width: 6px;
 | 
				
			||||||
 | 
					    height: 6px;
 | 
				
			||||||
 | 
					    border-radius: 50%;
 | 
				
			||||||
 | 
					    background-color: rgba(255, 209, 96, 1);
 | 
				
			||||||
 | 
					    display: inline-block;
 | 
				
			||||||
 | 
					    margin-right: 10px;
 | 
				
			||||||
 | 
					    margin-bottom: 1.7px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .barCircleText{
 | 
				
			||||||
 | 
					    display: inline-block;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
.visual-container {
 | 
					.visual-container {
 | 
				
			||||||
  width: 1920px;
 | 
					  width: 1920px;
 | 
				
			||||||
  height: 1080px;
 | 
					  height: 1080px;
 | 
				
			||||||
@@ -794,7 +920,7 @@ export default {
 | 
				
			|||||||
      top: 25px;
 | 
					      top: 25px;
 | 
				
			||||||
      color: rgba(255, 255, 255, 0.80);
 | 
					      color: rgba(255, 255, 255, 0.80);
 | 
				
			||||||
      font-size: 20px;
 | 
					      font-size: 20px;
 | 
				
			||||||
      letter-spacing: 0px;
 | 
					      letter-spacing: 1px;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    .time {
 | 
					    .time {
 | 
				
			||||||
@@ -803,7 +929,7 @@ export default {
 | 
				
			|||||||
      color: rgba(255, 255, 255, 0.80);
 | 
					      color: rgba(255, 255, 255, 0.80);
 | 
				
			||||||
      top: 25px;
 | 
					      top: 25px;
 | 
				
			||||||
      font-size: 20px;
 | 
					      font-size: 20px;
 | 
				
			||||||
      letter-spacing: 0px;
 | 
					      letter-spacing: .72px;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    .title-button {
 | 
					    .title-button {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
 * @Author: zwq
 | 
					 * @Author: zwq
 | 
				
			||||||
 * @Date: 2022-01-21 14:43:06
 | 
					 * @Date: 2022-01-21 14:43:06
 | 
				
			||||||
 * @LastEditors: zhp
 | 
					 * @LastEditors: zhp
 | 
				
			||||||
 * @LastEditTime: 2024-03-28 16:45:24
 | 
					 * @LastEditTime: 2024-04-03 16:33:24
 | 
				
			||||||
 * @Description:
 | 
					 * @Description:
 | 
				
			||||||
-->
 | 
					-->
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
@@ -85,7 +85,6 @@ export default {
 | 
				
			|||||||
      defaultConfig: {
 | 
					      defaultConfig: {
 | 
				
			||||||
        // 默认的legend配置
 | 
					        // 默认的legend配置
 | 
				
			||||||
        legend: {
 | 
					        legend: {
 | 
				
			||||||
          orient: 'vertical',
 | 
					 | 
				
			||||||
          left: '75%',
 | 
					          left: '75%',
 | 
				
			||||||
          bottom: 0,
 | 
					          bottom: 0,
 | 
				
			||||||
          itemHeight: 10,
 | 
					          itemHeight: 10,
 | 
				
			||||||
@@ -158,6 +157,9 @@ export default {
 | 
				
			|||||||
  methods: {
 | 
					  methods: {
 | 
				
			||||||
    initChart() {
 | 
					    initChart() {
 | 
				
			||||||
      this.chart = echarts.init(document.getElementById(this.id))
 | 
					      this.chart = echarts.init(document.getElementById(this.id))
 | 
				
			||||||
 | 
					      this.$nextTick(() => {
 | 
				
			||||||
 | 
					        this.chart.resize();
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
      this.chart.setOption({
 | 
					      this.chart.setOption({
 | 
				
			||||||
        title: this.showCenterTitle
 | 
					        title: this.showCenterTitle
 | 
				
			||||||
          ? {
 | 
					          ? {
 | 
				
			||||||
@@ -194,7 +196,7 @@ export default {
 | 
				
			|||||||
          // 默认配置
 | 
					          // 默认配置
 | 
				
			||||||
          ...this.defaultConfig.legend,
 | 
					          ...this.defaultConfig.legend,
 | 
				
			||||||
          // 外部传入配置
 | 
					          // 外部传入配置
 | 
				
			||||||
          ...this.legendConfig
 | 
					          // ...this.legendConfig
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        color: this.barColor,
 | 
					        color: this.barColor,
 | 
				
			||||||
        series: [
 | 
					        series: [
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
 * @Author: gtz
 | 
					 * @Author: gtz
 | 
				
			||||||
 * @Date: 2022-01-19 15:58:17
 | 
					 * @Date: 2022-01-19 15:58:17
 | 
				
			||||||
 * @LastEditors: zhp
 | 
					 * @LastEditors: zhp
 | 
				
			||||||
 * @LastEditTime: 2024-03-27 10:26:35
 | 
					 * @LastEditTime: 2024-03-29 14:47:29
 | 
				
			||||||
 * @Description: file content
 | 
					 * @Description: file content
 | 
				
			||||||
 * @FilePath: \mt-bus-fe\src\views\OperationalOverview\components\baseContainer\index.vue
 | 
					 * @FilePath: \mt-bus-fe\src\views\OperationalOverview\components\baseContainer\index.vue
 | 
				
			||||||
-->
 | 
					-->
 | 
				
			||||||
@@ -164,7 +164,7 @@ export default {
 | 
				
			|||||||
  width: 100%;
 | 
					  width: 100%;
 | 
				
			||||||
  // background-color: rgba($color: #061027, $alpha: 0.15);
 | 
					  // background-color: rgba($color: #061027, $alpha: 0.15);
 | 
				
			||||||
  position: relative;
 | 
					  position: relative;
 | 
				
			||||||
  opacity: calc(.8);
 | 
					  // opacity: calc(.8);
 | 
				
			||||||
  // border: 2px solid;
 | 
					  // border: 2px solid;
 | 
				
			||||||
    // background: url('../../../../assets/img/energy.png') no-repeat;
 | 
					    // background: url('../../../../assets/img/energy.png') no-repeat;
 | 
				
			||||||
    // background-size: 100% 100%;
 | 
					    // background-size: 100% 100%;
 | 
				
			||||||
@@ -274,6 +274,8 @@ export default {
 | 
				
			|||||||
    width: 100%;
 | 
					    width: 100%;
 | 
				
			||||||
    color: #ffffff;
 | 
					    color: #ffffff;
 | 
				
			||||||
    font-size: 24px;
 | 
					    font-size: 24px;
 | 
				
			||||||
 | 
					    font-weight: normal;
 | 
				
			||||||
 | 
					    letter-spacing: .8px;
 | 
				
			||||||
    padding: 0.67em 0.67em 0.3em 0.67em;
 | 
					    padding: 0.67em 0.67em 0.3em 0.67em;
 | 
				
			||||||
    display: flex;
 | 
					    display: flex;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,13 +2,13 @@
 | 
				
			|||||||
<!--
 | 
					<!--
 | 
				
			||||||
 * @Author: zhp
 | 
					 * @Author: zhp
 | 
				
			||||||
 * @Date: 2023-09-21 09:06:28
 | 
					 * @Date: 2023-09-21 09:06:28
 | 
				
			||||||
 * @LastEditTime: 2024-03-25 18:34:58
 | 
					 * @LastEditTime: 2024-04-03 16:28:40
 | 
				
			||||||
 * @LastEditors: zhp
 | 
					 * @LastEditors: zhp
 | 
				
			||||||
 * @Description:
 | 
					 * @Description:
 | 
				
			||||||
-->
 | 
					-->
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
  <div>
 | 
					  <div>
 | 
				
			||||||
    <div :id="id" class="productChart" :style="{ height:   '390px', width: width }" />
 | 
					    <div :id="id" class="coldProductChart" :style="{ height:   '390px', width: width }" />
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -71,9 +71,9 @@ export default {
 | 
				
			|||||||
  mounted() {
 | 
					  mounted() {
 | 
				
			||||||
    console.log('mounted')
 | 
					    console.log('mounted')
 | 
				
			||||||
    console.log('borderRadius: ', this.borderRadius)
 | 
					    console.log('borderRadius: ', this.borderRadius)
 | 
				
			||||||
    // this.$nextTick(() => {
 | 
					    this.$el.addEventListener('resize', () => {
 | 
				
			||||||
    //   this.initChart()
 | 
					      console.log('resziing.....');
 | 
				
			||||||
    // })
 | 
					    });
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  beforeDestroy() {
 | 
					  beforeDestroy() {
 | 
				
			||||||
    if (!this.chart) {
 | 
					    if (!this.chart) {
 | 
				
			||||||
@@ -100,8 +100,9 @@ export default {
 | 
				
			|||||||
               show: true,		//开启显示
 | 
					               show: true,		//开启显示
 | 
				
			||||||
               position: 'top',	//在上方显示
 | 
					               position: 'top',	//在上方显示
 | 
				
			||||||
               textStyle: {	    //数值样式
 | 
					               textStyle: {	    //数值样式
 | 
				
			||||||
                 color: '#ced1d5',
 | 
					                 color: 'rgba(255,255,255,0.5)', // 坐标值得具体的颜色
 | 
				
			||||||
                 fontSize: 12
 | 
					                 fontSize: 12,
 | 
				
			||||||
 | 
					                 fontWight: 'bolder'
 | 
				
			||||||
               }
 | 
					               }
 | 
				
			||||||
             },
 | 
					             },
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@@ -114,6 +115,7 @@ export default {
 | 
				
			|||||||
          name: '产线良品率',
 | 
					          name: '产线良品率',
 | 
				
			||||||
          symbol: 'circle', //变为实心圆
 | 
					          symbol: 'circle', //变为实心圆
 | 
				
			||||||
          type: 'line',
 | 
					          type: 'line',
 | 
				
			||||||
 | 
					          // symbolSize: 7,
 | 
				
			||||||
          yAxisIndex: 0,
 | 
					          yAxisIndex: 0,
 | 
				
			||||||
          areaStyle: {
 | 
					          areaStyle: {
 | 
				
			||||||
            opacity: 0.8,
 | 
					            opacity: 0.8,
 | 
				
			||||||
@@ -141,6 +143,16 @@ export default {
 | 
				
			|||||||
      ]
 | 
					      ]
 | 
				
			||||||
      // const colors = ['#5470C6', '#91CC75', '#EE6666']
 | 
					      // const colors = ['#5470C6', '#91CC75', '#EE6666']
 | 
				
			||||||
      this.chart = echarts.init(document.getElementById(this.id))
 | 
					      this.chart = echarts.init(document.getElementById(this.id))
 | 
				
			||||||
 | 
					      let isFinished = false //标记 isFinished
 | 
				
			||||||
 | 
					      this.chart.on('finished', _ => {
 | 
				
			||||||
 | 
					        if (!isFinished) {
 | 
				
			||||||
 | 
					          console.log('我只执行一次')
 | 
				
			||||||
 | 
					          isFinished = true
 | 
				
			||||||
 | 
					          // this.isLoading = false //关闭loading
 | 
				
			||||||
 | 
					          this.chart.resize() //重新渲染charts大小
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        console.log(113, 'finished')
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
      this.chart.setOption({
 | 
					      this.chart.setOption({
 | 
				
			||||||
        // color: colors,
 | 
					        // color: colors,
 | 
				
			||||||
        tooltip: {
 | 
					        tooltip: {
 | 
				
			||||||
@@ -151,38 +163,50 @@ export default {
 | 
				
			|||||||
        },
 | 
					        },
 | 
				
			||||||
        grid: {
 | 
					        grid: {
 | 
				
			||||||
          left: "3%",
 | 
					          left: "3%",
 | 
				
			||||||
          right: "5%",
 | 
					          right: "10%",
 | 
				
			||||||
          bottom: "3%",
 | 
					          bottom: "3%",
 | 
				
			||||||
          containLabel: true
 | 
					          containLabel: true
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        legend: {
 | 
					        // legend: {
 | 
				
			||||||
          itemWidth: 10,
 | 
					        //   itemWidth: 10,
 | 
				
			||||||
          itemHeight: 10,
 | 
					        //   itemHeight: 10,
 | 
				
			||||||
          top: '20',
 | 
					        //   top: '5',
 | 
				
			||||||
        //   right: '20px',
 | 
					        //   right: '20px',
 | 
				
			||||||
          data: ['产线产量', '产线良品率'],
 | 
					        //   data: [
 | 
				
			||||||
          textStyle: {
 | 
					        //     // { icon: 'rect', name: '直接访问' },
 | 
				
			||||||
            fontSize: 12 * this.beilv,
 | 
					        //     { icon: 'roundRect', name: '产线产量' },
 | 
				
			||||||
            color: '#ced1d5'
 | 
					        //     // {
 | 
				
			||||||
          }
 | 
					        //     //   icon: 'circle', name: '产线良品率',
 | 
				
			||||||
        },
 | 
					        //     //   itemWidth: 7,
 | 
				
			||||||
 | 
					        //     //   itemHeight: 7,
 | 
				
			||||||
 | 
					        //     //  },
 | 
				
			||||||
 | 
					        //   ],
 | 
				
			||||||
 | 
					        //   textStyle: {
 | 
				
			||||||
 | 
					        //     fontSize: 12 * this.beilv,
 | 
				
			||||||
 | 
					        //     color: '#ced1d5'
 | 
				
			||||||
 | 
					        //   }
 | 
				
			||||||
 | 
					        // },
 | 
				
			||||||
        xAxis: {
 | 
					        xAxis: {
 | 
				
			||||||
 | 
					          axisTick: {
 | 
				
			||||||
 | 
					            show: false
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
          type: 'category',
 | 
					          type: 'category',
 | 
				
			||||||
          axisLine: {
 | 
					          axisLine: {
 | 
				
			||||||
            lineStyle: {
 | 
					            lineStyle: {
 | 
				
			||||||
              type: 'solid',
 | 
					              type: 'solid',
 | 
				
			||||||
              color: '#213259', // 左边线的颜色
 | 
					              color: '#25528f', // 左边线的颜色
 | 
				
			||||||
              width: '1' // 坐标线的宽度
 | 
					              width: '1' // 坐标线的宽度
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          axisLabel: {
 | 
					          axisLabel: {
 | 
				
			||||||
            textStyle: {
 | 
					            textStyle: {
 | 
				
			||||||
 | 
					              align: 'center',
 | 
				
			||||||
              color: 'rgba(255,255,255,0.5)' // 坐标值得具体的颜色
 | 
					              color: 'rgba(255,255,255,0.5)' // 坐标值得具体的颜色
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          splitLine: {
 | 
					          splitLine: {
 | 
				
			||||||
            lineStyle: {
 | 
					            lineStyle: {
 | 
				
			||||||
              color: '#213259'
 | 
					              color: '#25528f'
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          data: nameList
 | 
					          data: nameList
 | 
				
			||||||
@@ -202,8 +226,9 @@ export default {
 | 
				
			|||||||
            type: 'value',
 | 
					            type: 'value',
 | 
				
			||||||
            name: '良品率/%',
 | 
					            name: '良品率/%',
 | 
				
			||||||
            nameTextStyle: {// y轴上方单位的颜色
 | 
					            nameTextStyle: {// y轴上方单位的颜色
 | 
				
			||||||
              color: '#fff',
 | 
					              color: 'rgba(255,255,255,0.5)', // 坐标值得具体的颜色
 | 
				
			||||||
              align: "left",
 | 
					              align: "left",
 | 
				
			||||||
 | 
					              padding: [0, 0, 0, 8]
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            position: 'right',
 | 
					            position: 'right',
 | 
				
			||||||
            alignTicks: true,
 | 
					            alignTicks: true,
 | 
				
			||||||
@@ -211,19 +236,20 @@ export default {
 | 
				
			|||||||
              show: true,
 | 
					              show: true,
 | 
				
			||||||
              lineStyle: {
 | 
					              lineStyle: {
 | 
				
			||||||
                type: 'solid',
 | 
					                type: 'solid',
 | 
				
			||||||
                color: '#213259', // 左边线的颜色
 | 
					                color: '#25528f', // 左边线的颜色
 | 
				
			||||||
                width: '1' // 坐标线的宽度
 | 
					                width: '1' // 坐标线的宽度
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            axisLabel: {
 | 
					            axisLabel: {
 | 
				
			||||||
              textStyle: {
 | 
					              textStyle: {
 | 
				
			||||||
                color: '#ced1d5', // 坐标值得具体的颜色
 | 
					                color: 'rgba(255,255,255,0.5)', // 坐标值得具体的颜色
 | 
				
			||||||
                formatter: '{value}%'
 | 
					                formatter: '{value}%',
 | 
				
			||||||
 | 
					                align:'left',
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            splitLine: {
 | 
					            splitLine: {
 | 
				
			||||||
              lineStyle: {
 | 
					              lineStyle: {
 | 
				
			||||||
                color: '#213259'
 | 
					                color: '#25528f'
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            // type: 'value'
 | 
					            // type: 'value'
 | 
				
			||||||
@@ -245,9 +271,10 @@ export default {
 | 
				
			|||||||
            type: 'value',
 | 
					            type: 'value',
 | 
				
			||||||
            name: '产量/㎡', // y轴上方的单位
 | 
					            name: '产量/㎡', // y轴上方的单位
 | 
				
			||||||
            nameTextStyle: {
 | 
					            nameTextStyle: {
 | 
				
			||||||
              color: "#fff",
 | 
					              color: 'rgba(255,255,255,0.5)', // 坐标值得具体的颜色
 | 
				
			||||||
              // fontSize: 10,
 | 
					              // fontSize: 10,
 | 
				
			||||||
              align: "right",
 | 
					              align: "right",
 | 
				
			||||||
 | 
					              padding:[0,4,0,0]
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            position: 'left',
 | 
					            position: 'left',
 | 
				
			||||||
            alignTicks: true,
 | 
					            alignTicks: true,
 | 
				
			||||||
@@ -255,19 +282,21 @@ export default {
 | 
				
			|||||||
              show: true,
 | 
					              show: true,
 | 
				
			||||||
              lineStyle: {
 | 
					              lineStyle: {
 | 
				
			||||||
                type: 'solid',
 | 
					                type: 'solid',
 | 
				
			||||||
                color: '#213259', // 左边线的颜色
 | 
					                color: '#25528f', // 左边线的颜色
 | 
				
			||||||
                width: '1' // 坐标线的宽度
 | 
					                width: '1' // 坐标线的宽度
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            axisLabel: {
 | 
					            axisLabel: {
 | 
				
			||||||
 | 
					              // padding: [0, 20, 0, 0],
 | 
				
			||||||
              textStyle: {
 | 
					              textStyle: {
 | 
				
			||||||
 | 
					                margin: 60,
 | 
				
			||||||
                color: 'rgba(255,255,255,0.5)', // 坐标值得具体的颜色
 | 
					                color: 'rgba(255,255,255,0.5)', // 坐标值得具体的颜色
 | 
				
			||||||
                formatter: '{value} 片'
 | 
					                formatter: '{value} 片'
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            splitLine: {
 | 
					            splitLine: {
 | 
				
			||||||
              lineStyle: {
 | 
					              lineStyle: {
 | 
				
			||||||
                color: '#213259'
 | 
					                color: '#25528f'
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            // type: 'value'
 | 
					            // type: 'value'
 | 
				
			||||||
@@ -286,7 +315,8 @@ export default {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
<style>
 | 
					<style>
 | 
				
			||||||
.productChart{
 | 
					
 | 
				
			||||||
 | 
					.coldProductChart{
 | 
				
			||||||
  top: -10px;
 | 
					  top: -10px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
</style>
 | 
					</style>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
<!--
 | 
					<!--
 | 
				
			||||||
 * @Author: zhp
 | 
					 * @Author: zhp
 | 
				
			||||||
 * @Date: 2023-09-21 09:06:28
 | 
					 * @Date: 2023-09-21 09:06:28
 | 
				
			||||||
 * @LastEditTime: 2024-03-28 16:31:20
 | 
					 * @LastEditTime: 2024-04-03 17:09:12
 | 
				
			||||||
 * @LastEditors: zhp
 | 
					 * @LastEditors: zhp
 | 
				
			||||||
 * @Description:
 | 
					 * @Description:
 | 
				
			||||||
-->
 | 
					-->
 | 
				
			||||||
@@ -105,8 +105,9 @@ export default {
 | 
				
			|||||||
               show: true,		//开启显示
 | 
					               show: true,		//开启显示
 | 
				
			||||||
               position: 'top',	//在上方显示
 | 
					               position: 'top',	//在上方显示
 | 
				
			||||||
               textStyle: {	    //数值样式
 | 
					               textStyle: {	    //数值样式
 | 
				
			||||||
                 color: '#ced1d5',
 | 
					                 color: 'rgba(255,255,255,0.5)', // 坐标值得具体的颜色
 | 
				
			||||||
                 fontSize: 12
 | 
					                 fontSize: 12,
 | 
				
			||||||
 | 
					                 fontWight:'bolder'
 | 
				
			||||||
               }
 | 
					               }
 | 
				
			||||||
             },
 | 
					             },
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@@ -142,7 +143,7 @@ export default {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          // data: passRateList
 | 
					          // data: passRateList
 | 
				
			||||||
          data: []
 | 
					          data: passRateList
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      ]
 | 
					      ]
 | 
				
			||||||
      // const colors = ['#5470C6', '#91CC75', '#EE6666']
 | 
					      // const colors = ['#5470C6', '#91CC75', '#EE6666']
 | 
				
			||||||
@@ -166,19 +167,23 @@ export default {
 | 
				
			|||||||
              type: 'cross'
 | 
					              type: 'cross'
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          grid: { top: 90, right: 60, bottom: 20, left: 20, containLabel: true },
 | 
					          grid: { top: 70, right: 20, bottom: 10, left: 10, containLabel: true },
 | 
				
			||||||
          legend: {
 | 
					          // legend: {
 | 
				
			||||||
            itemWidth: 10,
 | 
					          //   itemWidth: 10,
 | 
				
			||||||
            itemHeight: 10,
 | 
					          //   itemHeight: 10,
 | 
				
			||||||
            top: '0%',
 | 
					          //   top: '2%',
 | 
				
			||||||
            right: '20px',
 | 
					          //   right: '30px',
 | 
				
			||||||
            data: ['产线产量', '产线良品率'],
 | 
					          //   data: ['产线良品率', '产线产量'],
 | 
				
			||||||
            textStyle: {
 | 
					          //   textStyle: {
 | 
				
			||||||
              fontSize: 12 * this.beilv,
 | 
					          //     fontSize: 12 * this.beilv,
 | 
				
			||||||
              color: '#ced1d5'
 | 
					          //     color: '#ced1d5',
 | 
				
			||||||
            }
 | 
					          //     fontWight: 'bolder'
 | 
				
			||||||
          },
 | 
					          //   }
 | 
				
			||||||
 | 
					          // },
 | 
				
			||||||
          xAxis: {
 | 
					          xAxis: {
 | 
				
			||||||
 | 
					            axisTick: {
 | 
				
			||||||
 | 
					              show: false
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
            type: 'category',
 | 
					            type: 'category',
 | 
				
			||||||
            axisLine: {
 | 
					            axisLine: {
 | 
				
			||||||
              lineStyle: {
 | 
					              lineStyle: {
 | 
				
			||||||
@@ -187,8 +192,11 @@ export default {
 | 
				
			|||||||
                width: '1' // 坐标线的宽度
 | 
					                width: '1' // 坐标线的宽度
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
 | 
					            textStyle: {
 | 
				
			||||||
 | 
					              fontWight: 'bolder'
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
            axisLabel: {
 | 
					            axisLabel: {
 | 
				
			||||||
              color: "#fff",
 | 
					              color: 'rgba(255,255,255,0.5)', // 坐标值得具体的颜色
 | 
				
			||||||
              fontSize: 12,
 | 
					              fontSize: 12,
 | 
				
			||||||
              // formatter: '{value}'
 | 
					              // formatter: '{value}'
 | 
				
			||||||
              // textStyle: {
 | 
					              // textStyle: {
 | 
				
			||||||
@@ -217,8 +225,9 @@ export default {
 | 
				
			|||||||
              type: 'value',
 | 
					              type: 'value',
 | 
				
			||||||
              name: '良品率/%',
 | 
					              name: '良品率/%',
 | 
				
			||||||
              nameTextStyle: {// y轴上方单位的颜色
 | 
					              nameTextStyle: {// y轴上方单位的颜色
 | 
				
			||||||
                color: '#fff',
 | 
					                color: 'rgba(255,255,255,0.5)', // 坐标值得具体的颜色
 | 
				
			||||||
                align: "left",
 | 
					                align: "left",
 | 
				
			||||||
 | 
					                padding: [0, 0, 0, 2]
 | 
				
			||||||
              },
 | 
					              },
 | 
				
			||||||
              position: 'right',
 | 
					              position: 'right',
 | 
				
			||||||
              alignTicks: true,
 | 
					              alignTicks: true,
 | 
				
			||||||
@@ -231,7 +240,7 @@ export default {
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
              },
 | 
					              },
 | 
				
			||||||
              axisLabel: {
 | 
					              axisLabel: {
 | 
				
			||||||
                color: "#fff",
 | 
					                color: 'rgba(255,255,255,0.5)', // 坐标值得具体的颜色
 | 
				
			||||||
                fontSize: 12,
 | 
					                fontSize: 12,
 | 
				
			||||||
                // formatter: '{value}'
 | 
					                // formatter: '{value}'
 | 
				
			||||||
                formatter: '{value}%'
 | 
					                formatter: '{value}%'
 | 
				
			||||||
@@ -261,8 +270,9 @@ export default {
 | 
				
			|||||||
              type: 'value',
 | 
					              type: 'value',
 | 
				
			||||||
              name: '产量/片', // y轴上方的单位
 | 
					              name: '产量/片', // y轴上方的单位
 | 
				
			||||||
              nameTextStyle: {
 | 
					              nameTextStyle: {
 | 
				
			||||||
                color: "#fff",
 | 
					                color: 'rgba(255,255,255,0.5)', // 坐标值得具体的颜色
 | 
				
			||||||
                // fontSize: 10,
 | 
					                // fontSize: 10,
 | 
				
			||||||
 | 
					                padding: [0, 4, 0, 0],
 | 
				
			||||||
                align: "right",
 | 
					                align: "right",
 | 
				
			||||||
              },
 | 
					              },
 | 
				
			||||||
              // position: 'left',
 | 
					              // position: 'left',
 | 
				
			||||||
@@ -278,7 +288,7 @@ export default {
 | 
				
			|||||||
              axisLabel: {
 | 
					              axisLabel: {
 | 
				
			||||||
                // textStyle: {
 | 
					                // textStyle: {
 | 
				
			||||||
                // color: 'rgba(255,255,255,0.5)', // 坐标值得具体的颜色
 | 
					                // color: 'rgba(255,255,255,0.5)', // 坐标值得具体的颜色
 | 
				
			||||||
                color: "#fff",
 | 
					                color: 'rgba(255,255,255,0.5)', // 坐标值得具体的颜色
 | 
				
			||||||
                // show: true,
 | 
					                // show: true,
 | 
				
			||||||
                lineStyle: {
 | 
					                lineStyle: {
 | 
				
			||||||
                  color: "#25528f",
 | 
					                  color: "#25528f",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -111,8 +111,9 @@ export default {
 | 
				
			|||||||
                show: true,		//开启显示
 | 
					                show: true,		//开启显示
 | 
				
			||||||
                position: 'top',	//在上方显示
 | 
					                position: 'top',	//在上方显示
 | 
				
			||||||
                textStyle: {	    //数值样式
 | 
					                textStyle: {	    //数值样式
 | 
				
			||||||
                  color: '#ced1d5',
 | 
					                  color: 'rgba(255,255,255,0.5)', // 坐标值得具体的颜色
 | 
				
			||||||
                  fontSize: 12
 | 
					                  fontSize: 12,
 | 
				
			||||||
 | 
					                  fontWeight: 'normal'
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
              },
 | 
					              },
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@@ -132,7 +133,7 @@ export default {
 | 
				
			|||||||
              type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
 | 
					              type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          grid: { top: 90, right: 60, bottom: 20, left: 30, containLabel: true },
 | 
					          grid: { top: 70, right: 40, bottom: 10, left: 40, containLabel: true },
 | 
				
			||||||
          // legend: {
 | 
					          // legend: {
 | 
				
			||||||
          //   itemWidth: 10,
 | 
					          //   itemWidth: 10,
 | 
				
			||||||
          //   itemHeight: 10,
 | 
					          //   itemHeight: 10,
 | 
				
			||||||
@@ -144,6 +145,9 @@ export default {
 | 
				
			|||||||
          //   }
 | 
					          //   }
 | 
				
			||||||
          // },
 | 
					          // },
 | 
				
			||||||
          xAxis: {
 | 
					          xAxis: {
 | 
				
			||||||
 | 
					            axisTick: {
 | 
				
			||||||
 | 
					              show: false
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
            type: 'category',
 | 
					            type: 'category',
 | 
				
			||||||
            axisLine: {
 | 
					            axisLine: {
 | 
				
			||||||
              lineStyle: {
 | 
					              lineStyle: {
 | 
				
			||||||
@@ -152,8 +156,11 @@ export default {
 | 
				
			|||||||
                width: '1' // 坐标线的宽度
 | 
					                width: '1' // 坐标线的宽度
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
 | 
					            textStyle: {
 | 
				
			||||||
 | 
					              fontWeight: 'bolder'
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
            axisLabel: {
 | 
					            axisLabel: {
 | 
				
			||||||
              color: "#fff",
 | 
					              color: 'rgba(255,255,255,0.5)', // 坐标值得具体的颜色
 | 
				
			||||||
              fontSize: 12,
 | 
					              fontSize: 12,
 | 
				
			||||||
              // formatter: '{value}'
 | 
					              // formatter: '{value}'
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
@@ -167,13 +174,13 @@ export default {
 | 
				
			|||||||
          yAxis: {
 | 
					          yAxis: {
 | 
				
			||||||
            name: '单位kwh',
 | 
					            name: '单位kwh',
 | 
				
			||||||
            nameTextStyle: {
 | 
					            nameTextStyle: {
 | 
				
			||||||
              color: '#fff',
 | 
					              color: 'rgba(255,255,255,0.5)', // 坐标值得具体的颜色
 | 
				
			||||||
              fontSize: 10,
 | 
					              fontSize: 12,
 | 
				
			||||||
              align: 'right',
 | 
					              align: 'right',
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            type: 'value',
 | 
					            type: 'value',
 | 
				
			||||||
            axisLabel: {
 | 
					            axisLabel: {
 | 
				
			||||||
              color: "#fff",
 | 
					              color: 'rgba(255,255,255,0.5)', // 坐标值得具体的颜色
 | 
				
			||||||
              fontSize: 12,
 | 
					              fontSize: 12,
 | 
				
			||||||
              // formatter: '{value}/kwh'
 | 
					              // formatter: '{value}/kwh'
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,13 +1,13 @@
 | 
				
			|||||||
<!--
 | 
					<!--
 | 
				
			||||||
 * @Author: zhp
 | 
					 * @Author: zhp
 | 
				
			||||||
 * @Date: 2023-12-27 13:54:52
 | 
					 * @Date: 2023-12-27 13:54:52
 | 
				
			||||||
 * @LastEditTime: 2024-03-28 16:30:14
 | 
					 * @LastEditTime: 2024-04-03 18:12:18
 | 
				
			||||||
 * @LastEditors: zhp
 | 
					 * @LastEditors: zhp
 | 
				
			||||||
 * @Description:
 | 
					 * @Description:
 | 
				
			||||||
-->
 | 
					-->
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
  <div>
 | 
					  <div>
 | 
				
			||||||
    <div :id="id" class="productChart" :style="{ height: height + 'px', width: width }" />
 | 
					    <div :id="id" :style="{ height:'75px', width: width }" />
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -71,7 +71,10 @@ export default {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  mounted() {
 | 
					  mounted() {
 | 
				
			||||||
    console.log('mounted')
 | 
					    // console.log('mounted')
 | 
				
			||||||
 | 
					    window.addEventListener('resize', () => {
 | 
				
			||||||
 | 
					      this.resize()
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
    // console.log('borderRadius: ', this.borderRadius)
 | 
					    // console.log('borderRadius: ', this.borderRadius)
 | 
				
			||||||
    // console.log('33333', this.dataList)
 | 
					    // console.log('33333', this.dataList)
 | 
				
			||||||
    // let arr = []
 | 
					    // let arr = []
 | 
				
			||||||
@@ -91,6 +94,12 @@ export default {
 | 
				
			|||||||
    this.chart = null
 | 
					    this.chart = null
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  methods: {
 | 
					  methods: {
 | 
				
			||||||
 | 
					    resize() {
 | 
				
			||||||
 | 
					      this.chart.resize({
 | 
				
			||||||
 | 
					        width: 'auto',
 | 
				
			||||||
 | 
					        height: 90
 | 
				
			||||||
 | 
					      });;
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    initChart(nameList, topNameList, nameWasteList, passRateList, wasteList) {
 | 
					    initChart(nameList, topNameList, nameWasteList, passRateList, wasteList) {
 | 
				
			||||||
      let rawData = []
 | 
					      let rawData = []
 | 
				
			||||||
      let colors = ['#0fdedb', '#2359ec']
 | 
					      let colors = ['#0fdedb', '#2359ec']
 | 
				
			||||||
@@ -105,8 +114,11 @@ export default {
 | 
				
			|||||||
          totalData.push(sum);
 | 
					          totalData.push(sum);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      // }
 | 
					      // }
 | 
				
			||||||
 | 
					      // rawData[1].map((d, did) =>
 | 
				
			||||||
 | 
					      //   console.log((d / totalData[did]).toFixed(3))
 | 
				
			||||||
 | 
					      //   // totalData[did] <= 0 ? 0 : d / totalData[did]
 | 
				
			||||||
 | 
					      // )
 | 
				
			||||||
      console.log('total', totalData)
 | 
					      console.log('total', totalData)
 | 
				
			||||||
      this.chart = echarts.init(document.getElementById(this.id))
 | 
					 | 
				
			||||||
      const series = [
 | 
					      const series = [
 | 
				
			||||||
        '良品',
 | 
					        '良品',
 | 
				
			||||||
        '废品',
 | 
					        '废品',
 | 
				
			||||||
@@ -126,7 +138,7 @@ export default {
 | 
				
			|||||||
          // },
 | 
					          // },
 | 
				
			||||||
          color:colors[sid],
 | 
					          color:colors[sid],
 | 
				
			||||||
          data: rawData.length != 0 ? rawData[sid].map((d, did) =>
 | 
					          data: rawData.length != 0 ? rawData[sid].map((d, did) =>
 | 
				
			||||||
            totalData[did] <= 0 ? 0 : d / totalData[did]
 | 
					            totalData[did] <= 0 ? 0 : (d / totalData[did]).toFixed(4)
 | 
				
			||||||
          ) : []
 | 
					          ) : []
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
@@ -137,6 +149,17 @@ export default {
 | 
				
			|||||||
      //   width,
 | 
					      //   width,
 | 
				
			||||||
      //   height
 | 
					      //   height
 | 
				
			||||||
      // })
 | 
					      // })
 | 
				
			||||||
 | 
					      this.chart = echarts.init(document.getElementById(this.id))
 | 
				
			||||||
 | 
					      let isFinished = false //标记 isFinished
 | 
				
			||||||
 | 
					      this.chart.on('finished', _ => {
 | 
				
			||||||
 | 
					        if (!isFinished) {
 | 
				
			||||||
 | 
					          console.log('我只执行一次')
 | 
				
			||||||
 | 
					          isFinished = true
 | 
				
			||||||
 | 
					          // this.isLoading = false //关闭loading
 | 
				
			||||||
 | 
					          this.chart.resize() //重新渲染charts大小
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        console.log(113, 'finished')
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
      this.chart.setOption({
 | 
					      this.chart.setOption({
 | 
				
			||||||
        legend: {
 | 
					        legend: {
 | 
				
			||||||
          formatter: function (name) {
 | 
					          formatter: function (name) {
 | 
				
			||||||
@@ -144,15 +167,16 @@ export default {
 | 
				
			|||||||
            let singleData = series.filter(function (item) {
 | 
					            let singleData = series.filter(function (item) {
 | 
				
			||||||
              return item.name == name
 | 
					              return item.name == name
 | 
				
			||||||
            })
 | 
					            })
 | 
				
			||||||
            return name + parseFloat((singleData[0].data * 100).toFixed(3)) + '%'
 | 
					            return name + parseFloat((singleData[0].data * 100).toFixed(0)) + '%'
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          itemWidth: 12,
 | 
					          itemWidth: 12,
 | 
				
			||||||
          itemHeight: 12,
 | 
					          itemHeight: 12,
 | 
				
			||||||
          bottom: '20',
 | 
					          bottom: '20',
 | 
				
			||||||
          left: '20',
 | 
					          left: '20',
 | 
				
			||||||
          icon: 'rect',
 | 
					          icon: 'roundRect',
 | 
				
			||||||
          textStyle: {
 | 
					          textStyle: {
 | 
				
			||||||
            color: '#ffffff'
 | 
					            color: 'rgba(255,255,255,.9)',
 | 
				
			||||||
 | 
					            fontSize:12,
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        grid: {
 | 
					        grid: {
 | 
				
			||||||
@@ -184,9 +208,9 @@ export default {
 | 
				
			|||||||
              splitNumber: 50,
 | 
					              splitNumber: 50,
 | 
				
			||||||
              // boundaryGap: [20, 20],
 | 
					              // boundaryGap: [20, 20],
 | 
				
			||||||
              textStyle: {
 | 
					              textStyle: {
 | 
				
			||||||
                color: '#ffffff',
 | 
					                color: 'rgba(255,255,255,.9)',
 | 
				
			||||||
                verticalAlign: 'bottom',
 | 
					                verticalAlign: 'bottom',
 | 
				
			||||||
                fontSize: 12,
 | 
					                fontSize: 16,
 | 
				
			||||||
                align: 'left',
 | 
					                align: 'left',
 | 
				
			||||||
                padding: [0, 0, 10, -5]
 | 
					                padding: [0, 0, 10, -5]
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
@@ -212,9 +236,9 @@ export default {
 | 
				
			|||||||
              splitNumber: 50,
 | 
					              splitNumber: 50,
 | 
				
			||||||
              // boundaryGap: [20, 20],
 | 
					              // boundaryGap: [20, 20],
 | 
				
			||||||
              textStyle: {
 | 
					              textStyle: {
 | 
				
			||||||
                color: '#ffffff',
 | 
					                color: 'rgba(255,255,255,.9)',
 | 
				
			||||||
                verticalAlign: 'bottom',
 | 
					                verticalAlign: 'bottom',
 | 
				
			||||||
                fontSize: 12,
 | 
					                fontSize: 16,
 | 
				
			||||||
                align: 'right',
 | 
					                align: 'right',
 | 
				
			||||||
                padding: [0, 0, 10, -5]
 | 
					                padding: [0, 0, 10, -5]
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
@@ -228,10 +252,15 @@ export default {
 | 
				
			|||||||
        },
 | 
					        },
 | 
				
			||||||
        series:series
 | 
					        series:series
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
      this.chart.resize({
 | 
					      this.$nextTick(() => {
 | 
				
			||||||
        width: 'auto',
 | 
					        setTimeout(() => {
 | 
				
			||||||
        height: 90
 | 
					          this.resize()
 | 
				
			||||||
      });;
 | 
					        },1000);
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      // this.chart.resize({
 | 
				
			||||||
 | 
					      //   width: 'auto',
 | 
				
			||||||
 | 
					      //   height: 90
 | 
				
			||||||
 | 
					      // });;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
 * @Author: zwq
 | 
					 * @Author: zwq
 | 
				
			||||||
 * @Date: 2021-07-19 15:18:30
 | 
					 * @Date: 2021-07-19 15:18:30
 | 
				
			||||||
 * @LastEditors: zhp
 | 
					 * @LastEditors: zhp
 | 
				
			||||||
 * @LastEditTime: 2024-03-28 16:10:47
 | 
					 * @LastEditTime: 2024-04-03 17:14:03
 | 
				
			||||||
 * @Description:
 | 
					 * @Description:
 | 
				
			||||||
-->
 | 
					-->
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
@@ -10,40 +10,41 @@
 | 
				
			|||||||
    <el-row class="container-title" :style="{
 | 
					    <el-row class="container-title" :style="{
 | 
				
			||||||
				height: 88 + 'px',
 | 
									height: 88 + 'px',
 | 
				
			||||||
				lineHeight: 88 + 'px',
 | 
									lineHeight: 88 + 'px',
 | 
				
			||||||
      fontSize: 31 + 'px'
 | 
									fontSize: 31 + 'px',
 | 
				
			||||||
			}">
 | 
								}">
 | 
				
			||||||
      <img src="../../assets/img/logo.png" style="width:1.1em;position:relative;top:.22em" alt="">
 | 
					      <img src="../../assets/img/logo.png" style="width: 1.1em; position: relative; top: 0.22em" alt="" />
 | 
				
			||||||
      许昌安彩深加工看板
 | 
					      许昌安彩深加工看板
 | 
				
			||||||
      <h3 class="unit">单位:河南汇融数字科技有限公司</h3>
 | 
					      <h3 class="unit">单位:河南汇融数字科技有限公司</h3>
 | 
				
			||||||
      <h3 class="time">{{ times }}</h3>
 | 
					      <h3 class="time">{{ times }}</h3>
 | 
				
			||||||
      <el-button type="text" class="title-button" :style="{ right: 18 + 'px', top: 26 + 'px',fontSize:'32px'}"
 | 
					      <!-- <el-button type="text" class="title-button" :style="{ right: 18 + 'px', top: 26 + 'px',fontSize:'32px'}"
 | 
				
			||||||
        @click="changeFullScreen">
 | 
					        @click="changeFullScreen">
 | 
				
			||||||
        <svg-icon width="32" height="32" v-if="isFullScreen" icon-class="unFullScreenView" />
 | 
					        <svg-icon width="32" height="32" v-if="isFullScreen" icon-class="unFullScreenView" />
 | 
				
			||||||
        <svg-icon width="32" height="32" v-else icon-class="fullScreenView" />
 | 
					        <svg-icon width="32" height="32" v-else icon-class="fullScreenView" />
 | 
				
			||||||
      </el-button>
 | 
					      </el-button> -->
 | 
				
			||||||
    </el-row>
 | 
					    </el-row>
 | 
				
			||||||
    <el-row class="container-main flex-col" type="flex">
 | 
					    <el-row class="container-main flex-col" type="flex">
 | 
				
			||||||
      <el-row :style="{ padding: '0 ' + 9 + 'px' }" :gutter="15" type="flex" class="flex-1" style="height: 50%;">
 | 
					      <el-row :style="{ padding: '0 ' + 9 + 'px' }" :gutter="15" type="flex" class="flex-1" style="height: 50%">
 | 
				
			||||||
        <el-col :style="{ margin: 8 + 'px' + ' 0' }" :span="8" height="100%">
 | 
					        <el-col :style="{ margin: 8 + 'px' + ' 0' }" :span="8" height="100%">
 | 
				
			||||||
          <base-container :title="'设备报警'" :size="'small'" :height="318" :title-icon="'eqAlarm'">
 | 
					          <base-container :title="'设备报警'" :size="'small'" :height="318" :title-icon="'eqAlarm'">
 | 
				
			||||||
            <dv-scroll-board class="eqTable" :config="eqConfig" style="width:100%;height:350px" ref='eqScrollBoard' />
 | 
					            <dv-scroll-board class="eqTable" :config="eqConfig" style="width: 100%; height: 350px"
 | 
				
			||||||
 | 
					              ref="eqScrollBoard" />
 | 
				
			||||||
          </base-container>
 | 
					          </base-container>
 | 
				
			||||||
        </el-col>
 | 
					        </el-col>
 | 
				
			||||||
        <el-col :style="{ margin: 8 + 'px' + ' 0' }" :span="8" height="100%">
 | 
					        <el-col :style="{ margin: 8 + 'px' + ' 0' }" :span="8" height="100%">
 | 
				
			||||||
          <base-container :title="'各工序缺陷汇总'" :size="'small'" :title-icon="'scrap'">
 | 
					          <base-container :title="'各工序缺陷汇总'" :size="'small'" :title-icon="'scrap'">
 | 
				
			||||||
            <dv-scroll-board :config="processConfig" style="width:100%;height:350px" ref='processScrollBoard' />
 | 
					            <dv-scroll-board :config="processConfig" style="width: 100%; height: 350px" ref="processScrollBoard" />
 | 
				
			||||||
          </base-container>
 | 
					          </base-container>
 | 
				
			||||||
        </el-col>
 | 
					        </el-col>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <el-col :style="{ margin: 8 + 'px' + ' 0' }" :span="8" height="100%">
 | 
					        <el-col :style="{ margin: 8 + 'px' + ' 0' }" :span="8" height="100%">
 | 
				
			||||||
          <base-container :height="318" :size="'small'" :title="'工单监控'" :title-icon="'eqMonitoring'">
 | 
					          <base-container :height="318" :size="'small'" :title="'工单监控'" :title-icon="'eqMonitoring'">
 | 
				
			||||||
            <div class="order" style="width:100%; overflow: hidden scroll;height: 350px;">
 | 
					            <div class="order" style="width: 100%; overflow: hidden scroll; height: 350px">
 | 
				
			||||||
              <el-row v-for="op in orderList" :key="op.id" style="margin-bottom: 1em">
 | 
					              <el-row v-for="op in orderList" :key="op.id" style="margin-bottom: .5em">
 | 
				
			||||||
                <!-- <el-col :span="12"> -->
 | 
					                <!-- <el-col :span="12"> -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                <p class="now-secondary-title">{{ op.name }}</p>
 | 
					                <p class="now-secondary-title" style="font-size: 14px;opacity: calc(.6);">{{ op.name }}</p>
 | 
				
			||||||
                <el-progress :stroke-width="10" define-back-color="rgba(32, 57, 96, 1)" text-color="white"
 | 
					                <el-progress style="width: 620px;" text-color="rgba(255, 255, 255, .6)" :stroke-width="10"
 | 
				
			||||||
                  :percentage="op.progressRate" class="custom-progress-bar" />
 | 
					                  define-back-color="rgba(32, 57, 96, 1)" :percentage="op.progressRate" class="custom-progress-bar" />
 | 
				
			||||||
              </el-row>
 | 
					              </el-row>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
            <!-- </div> -->
 | 
					            <!-- </div> -->
 | 
				
			||||||
@@ -66,6 +67,13 @@
 | 
				
			|||||||
        <el-col :style="{ margin: 8 + 'px' + ' 0' }" :span="12">
 | 
					        <el-col :style="{ margin: 8 + 'px' + ' 0' }" :span="12">
 | 
				
			||||||
          <base-container :show-time="true" :no-content-padding="true" :height="318 + 338 + 16" :size="'eqStatus'"
 | 
					          <base-container :show-time="true" :no-content-padding="true" :height="318 + 338 + 16" :size="'eqStatus'"
 | 
				
			||||||
            :title="'产线产量及良品率'" :title-icon="'productLine'">
 | 
					            :title="'产线产量及良品率'" :title-icon="'productLine'">
 | 
				
			||||||
 | 
					            <div  class="myLegend">
 | 
				
			||||||
 | 
					              <div class=" barCircleLegend"></div>
 | 
				
			||||||
 | 
					              <div class=" barCircle"></div>
 | 
				
			||||||
 | 
					              <h4 class="barText">产线良品率</h4>
 | 
				
			||||||
 | 
					              <div class="barLegend"></div>
 | 
				
			||||||
 | 
					              <h4 class="barCircleText">产线产量</h4>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
            <double-y-chart ref="productLineChart" :id="'doubleYChart'" :height="390" :show-legend="true" />
 | 
					            <double-y-chart ref="productLineChart" :id="'doubleYChart'" :height="390" :show-legend="true" />
 | 
				
			||||||
          </base-container>
 | 
					          </base-container>
 | 
				
			||||||
        </el-col>
 | 
					        </el-col>
 | 
				
			||||||
@@ -75,105 +83,175 @@
 | 
				
			|||||||
</template>
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script>
 | 
					<script>
 | 
				
			||||||
import baseContainer from './components/baseContainer'
 | 
					import baseContainer from './components/baseContainer';
 | 
				
			||||||
import baseTable1 from './components/baseTable'
 | 
					import baseTable1 from './components/baseTable';
 | 
				
			||||||
import screenfull from 'screenfull'
 | 
					import screenfull from 'screenfull';
 | 
				
			||||||
import doubleYChart from './components/doubleYChart '
 | 
					import doubleYChart from './components/doubleYChart ';
 | 
				
			||||||
import LinearBarChart from './components/linearBarChart'
 | 
					import LinearBarChart from './components/linearBarChart';
 | 
				
			||||||
import WebSocketHeartbeat from './ws.js';
 | 
					import WebSocketHeartbeat from './ws.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 创建WebSocketHeartbeat实例
 | 
					// 创建WebSocketHeartbeat实例
 | 
				
			||||||
const qualityYearList = [
 | 
					const qualityYearList = [
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
    name: '翻转机', code: 'EQ20240110112358000235', status: '运行', error: '否'
 | 
							name: '翻转机',
 | 
				
			||||||
 | 
							code: 'EQ20240110112358000235',
 | 
				
			||||||
 | 
							status: '运行',
 | 
				
			||||||
 | 
							error: '否',
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
    name: '烘干炉', code: 'EQ20240110112537000241', status: '运行', error: '否'
 | 
							name: '烘干炉',
 | 
				
			||||||
 | 
							code: 'EQ20240110112537000241',
 | 
				
			||||||
 | 
							status: '运行',
 | 
				
			||||||
 | 
							error: '否',
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
    name: '清洗机', code: '	EQ20240110112310000232', status: '运行', error: '否'
 | 
							name: '清洗机',
 | 
				
			||||||
  },
 | 
							code: '	EQ20240110112310000232',
 | 
				
			||||||
  { name: '钢化清洗机', code: 'EQ20240110111700000208', status: '运行', error: '否' },
 | 
							status: '运行',
 | 
				
			||||||
  { name: '固化机', code: 'EQ20240110111700000201', status: '运行', error: '否' },
 | 
							error: '否',
 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    name: '磨边清洗机', code: '	EQ20240110111700000208', status: '运行', error: '否'
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  { name: '预热机', code: 'EQ20240110111700000205', status: '故障', error: '是' },
 | 
					 | 
				
			||||||
  { name: '下片机', code: 'EQ20240115151435000279', status: '运行', error: '否' },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    name: '冷却机', code: 'EQ20240110111700000203', status: '运行', error: '否'
 | 
					 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
    name: 'A储片机106', code: 'EQ20240110111700000202', status: '运行', error: '否'
 | 
							name: '钢化清洗机',
 | 
				
			||||||
 | 
							code: 'EQ20240110111700000208',
 | 
				
			||||||
 | 
							status: '运行',
 | 
				
			||||||
 | 
							error: '否',
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
  { name: '二次清洗机', code: 'EQ20240110111700000209', status: '运行', error: '否' },
 | 
					 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
    name: '二次磨边机', code: '	EQ20240110110927000181', status: '故障', error: '是'
 | 
							name: '固化机',
 | 
				
			||||||
 | 
							code: 'EQ20240110111700000201',
 | 
				
			||||||
 | 
							status: '运行',
 | 
				
			||||||
 | 
							error: '否',
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
  { name: '测试设备', code: 'EQ20240110111700000201', status: '运行', error: '否' }
 | 
						{
 | 
				
			||||||
]
 | 
							name: '磨边清洗机',
 | 
				
			||||||
 | 
							code: '	EQ20240110111700000208',
 | 
				
			||||||
 | 
							status: '运行',
 | 
				
			||||||
 | 
							error: '否',
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							name: '预热机',
 | 
				
			||||||
 | 
							code: 'EQ20240110111700000205',
 | 
				
			||||||
 | 
							status: '故障',
 | 
				
			||||||
 | 
							error: '是',
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							name: '下片机',
 | 
				
			||||||
 | 
							code: 'EQ20240115151435000279',
 | 
				
			||||||
 | 
							status: '运行',
 | 
				
			||||||
 | 
							error: '否',
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							name: '冷却机',
 | 
				
			||||||
 | 
							code: 'EQ20240110111700000203',
 | 
				
			||||||
 | 
							status: '运行',
 | 
				
			||||||
 | 
							error: '否',
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							name: 'A储片机106',
 | 
				
			||||||
 | 
							code: 'EQ20240110111700000202',
 | 
				
			||||||
 | 
							status: '运行',
 | 
				
			||||||
 | 
							error: '否',
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							name: '二次清洗机',
 | 
				
			||||||
 | 
							code: 'EQ20240110111700000209',
 | 
				
			||||||
 | 
							status: '运行',
 | 
				
			||||||
 | 
							error: '否',
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							name: '二次磨边机',
 | 
				
			||||||
 | 
							code: '	EQ20240110110927000181',
 | 
				
			||||||
 | 
							status: '故障',
 | 
				
			||||||
 | 
							error: '是',
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							name: '测试设备',
 | 
				
			||||||
 | 
							code: 'EQ20240110111700000201',
 | 
				
			||||||
 | 
							status: '运行',
 | 
				
			||||||
 | 
							error: '否',
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
const qualityMonthList = [
 | 
					const qualityMonthList = [
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		productionLineName: 'D61',
 | 
							productionLineName: 'D61',
 | 
				
			||||||
		sectionName: '成型',
 | 
							sectionName: '成型',
 | 
				
			||||||
		count: '3片',
 | 
							count: '3片',
 | 
				
			||||||
    inspectionTypeName: '细长泡'
 | 
							inspectionTypeName: '细长泡',
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		productionLineName: 'D62',
 | 
							productionLineName: 'D62',
 | 
				
			||||||
		sectionName: '组合落板',
 | 
							sectionName: '组合落板',
 | 
				
			||||||
		count: '4片',
 | 
							count: '4片',
 | 
				
			||||||
    inspectionTypeName: '细长泡'
 | 
							inspectionTypeName: '细长泡',
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		productionLineName: 'D61',
 | 
							productionLineName: 'D61',
 | 
				
			||||||
		sectionName: '磨边',
 | 
							sectionName: '磨边',
 | 
				
			||||||
		count: '6片',
 | 
							count: '6片',
 | 
				
			||||||
    inspectionTypeName: '开口泡'
 | 
							inspectionTypeName: '开口泡',
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		productionLineName: 'D63',
 | 
							productionLineName: 'D63',
 | 
				
			||||||
		sectionName: '清洗',
 | 
							sectionName: '清洗',
 | 
				
			||||||
		count: '5片',
 | 
							count: '5片',
 | 
				
			||||||
    inspectionTypeName: '结石'
 | 
							inspectionTypeName: '结石',
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		productionLineName: 'D64',
 | 
							productionLineName: 'D64',
 | 
				
			||||||
		sectionName: '打孔',
 | 
							sectionName: '打孔',
 | 
				
			||||||
		count: '2片',
 | 
							count: '2片',
 | 
				
			||||||
    inspectionTypeName: '结石'
 | 
							inspectionTypeName: '结石',
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		productionLineName: 'D63',
 | 
							productionLineName: 'D63',
 | 
				
			||||||
		sectionName: '成型',
 | 
							sectionName: '成型',
 | 
				
			||||||
		count: '7片',
 | 
							count: '7片',
 | 
				
			||||||
    inspectionTypeName: '开口泡'
 | 
							inspectionTypeName: '开口泡',
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		productionLineName: 'D61',
 | 
							productionLineName: 'D61',
 | 
				
			||||||
		sectionName: '上片',
 | 
							sectionName: '上片',
 | 
				
			||||||
		count: '8片',
 | 
							count: '8片',
 | 
				
			||||||
    inspectionTypeName: '结石'
 | 
							inspectionTypeName: '结石',
 | 
				
			||||||
  }
 | 
						},
 | 
				
			||||||
]
 | 
					];
 | 
				
			||||||
const orderProcessList = [
 | 
					const orderProcessList = [
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
    id: '1', outRate: '.8', name: '凯盛0322'
 | 
							id: '1',
 | 
				
			||||||
  }, {
 | 
							outRate: '.8',
 | 
				
			||||||
    id: '2', outRate: '.4', name: '光伏玻璃4.0'
 | 
							name: '凯盛0322',
 | 
				
			||||||
  }, {
 | 
					 | 
				
			||||||
    id: '3', outRate: '.5', name: '光伏玻璃3.0'
 | 
					 | 
				
			||||||
  }, {
 | 
					 | 
				
			||||||
    id: '4', outRate: '.3', name: '光伏玻璃2.0'
 | 
					 | 
				
			||||||
  }, {
 | 
					 | 
				
			||||||
    id: '5', outRate: '.5', name: '光伏玻璃1.0'
 | 
					 | 
				
			||||||
  }, {
 | 
					 | 
				
			||||||
    id: '6', outRate: '.8', name: '光伏玻璃'
 | 
					 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
    id: '7', outRate: '.8', name: '统计订单'
 | 
							id: '2',
 | 
				
			||||||
  }
 | 
							outRate: '.4',
 | 
				
			||||||
]
 | 
							name: '光伏玻璃4.0',
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							id: '3',
 | 
				
			||||||
 | 
							outRate: '.5',
 | 
				
			||||||
 | 
							name: '光伏玻璃3.0',
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							id: '4',
 | 
				
			||||||
 | 
							outRate: '.3',
 | 
				
			||||||
 | 
							name: '光伏玻璃2.0',
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							id: '5',
 | 
				
			||||||
 | 
							outRate: '.5',
 | 
				
			||||||
 | 
							name: '光伏玻璃1.0',
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							id: '6',
 | 
				
			||||||
 | 
							outRate: '.8',
 | 
				
			||||||
 | 
							name: '光伏玻璃',
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							id: '7',
 | 
				
			||||||
 | 
							outRate: '.8',
 | 
				
			||||||
 | 
							name: '统计订单',
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	name: 'ProductionMonitoringCockpit',
 | 
						name: 'ProductionMonitoringCockpit',
 | 
				
			||||||
	components: {
 | 
						components: {
 | 
				
			||||||
@@ -183,7 +261,7 @@ export default {
 | 
				
			|||||||
		// baseTable3,
 | 
							// baseTable3,
 | 
				
			||||||
		// TopRadioGroup,
 | 
							// TopRadioGroup,
 | 
				
			||||||
		doubleYChart,
 | 
							doubleYChart,
 | 
				
			||||||
    LinearBarChart
 | 
							LinearBarChart,
 | 
				
			||||||
		// pieChart1,
 | 
							// pieChart1,
 | 
				
			||||||
		// pieChart2
 | 
							// pieChart2
 | 
				
			||||||
		// pieChart3
 | 
							// pieChart3
 | 
				
			||||||
@@ -204,22 +282,22 @@ export default {
 | 
				
			|||||||
				headerBGC: 'rgba(32, 55, 96, 0.8)',
 | 
									headerBGC: 'rgba(32, 55, 96, 0.8)',
 | 
				
			||||||
				oddRowBGC: 'rgba(32, 55, 96, 0.8)',
 | 
									oddRowBGC: 'rgba(32, 55, 96, 0.8)',
 | 
				
			||||||
				evenRowBGC: 'rgba(14, 32, 62, 0.8)',
 | 
									evenRowBGC: 'rgba(14, 32, 62, 0.8)',
 | 
				
			||||||
        columnWidth: [70, 100, 200, 90, 90,],
 | 
									columnWidth: [70, 100, 200, 90, 90],
 | 
				
			||||||
				align: ['center'],
 | 
									align: ['center'],
 | 
				
			||||||
				data: [],
 | 
									data: [],
 | 
				
			||||||
				// index:true,
 | 
									// index:true,
 | 
				
			||||||
        rowNum: 10
 | 
									rowNum: 10,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			processConfig: {
 | 
								processConfig: {
 | 
				
			||||||
				header: ['序号', '产线名称', '工序', '损耗片数', '缺陷类型'],
 | 
									header: ['序号', '产线名称', '工序', '损耗片数', '缺陷类型'],
 | 
				
			||||||
				headerBGC: 'rgba(32, 55, 96, 0.8)',
 | 
									headerBGC: 'rgba(32, 55, 96, 0.8)',
 | 
				
			||||||
				oddRowBGC: 'rgba(32, 55, 96, 0.8)',
 | 
									oddRowBGC: 'rgba(32, 55, 96, 0.8)',
 | 
				
			||||||
				evenRowBGC: 'rgba(14, 32, 62, 0.8)',
 | 
									evenRowBGC: 'rgba(14, 32, 62, 0.8)',
 | 
				
			||||||
        columnWidth: [70, 130, 100, 120, 110,],
 | 
									columnWidth: [70, 130, 100, 120, 110],
 | 
				
			||||||
				align: ['center'],
 | 
									align: ['center'],
 | 
				
			||||||
				data: [],
 | 
									data: [],
 | 
				
			||||||
				// index:true,
 | 
									// index:true,
 | 
				
			||||||
        rowNum: 10
 | 
									rowNum: 10,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			// cxDataList,
 | 
								// cxDataList,
 | 
				
			||||||
			SJGws: undefined,
 | 
								SJGws: undefined,
 | 
				
			||||||
@@ -235,127 +313,205 @@ export default {
 | 
				
			|||||||
			// qualityMonthTableProps,
 | 
								// qualityMonthTableProps,
 | 
				
			||||||
			modelMonth: '',
 | 
								modelMonth: '',
 | 
				
			||||||
			dateType: '0',
 | 
								dateType: '0',
 | 
				
			||||||
    }
 | 
							};
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	computed: {
 | 
						computed: {
 | 
				
			||||||
		styles() {
 | 
							styles() {
 | 
				
			||||||
      const v = Math.floor(this.value * this.beilv2 * 100) / 10000
 | 
								const v = Math.floor(this.value * this.beilv2 * 100) / 10000;
 | 
				
			||||||
			return {
 | 
								return {
 | 
				
			||||||
				transform: `scale(${v})`,
 | 
									transform: `scale(${v})`,
 | 
				
			||||||
        transformOrigin: 'top left'
 | 
									transformOrigin: 'top left',
 | 
				
			||||||
      }
 | 
								};
 | 
				
			||||||
    }
 | 
							},
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	watch: {
 | 
						watch: {
 | 
				
			||||||
		isFullScreen: function (val) {
 | 
							isFullScreen: function (val) {
 | 
				
			||||||
			if (val) {
 | 
								if (val) {
 | 
				
			||||||
				const _this = this;
 | 
									const _this = this;
 | 
				
			||||||
        _this.beilv2 = document.documentElement.clientWidth / 1920
 | 
									_this.beilv2 = document.documentElement.clientWidth / 1920;
 | 
				
			||||||
				console.log(_this.beilv2);
 | 
									console.log(_this.beilv2);
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				const _this = this;
 | 
									const _this = this;
 | 
				
			||||||
        _this.beilv2 = document.documentElement.clientWidth / 1920
 | 
									_this.beilv2 = document.documentElement.clientWidth / 1920;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		clientWidth(val) {
 | 
							clientWidth(val) {
 | 
				
			||||||
			if (!this.timer) {
 | 
								if (!this.timer) {
 | 
				
			||||||
        this.clientWidth = val
 | 
									this.clientWidth = val;
 | 
				
			||||||
        this.beilv2 = this.clientWidth / 1920
 | 
									this.beilv2 = this.clientWidth / 1920;
 | 
				
			||||||
        this.timer = true
 | 
									this.timer = true;
 | 
				
			||||||
        let _this = this
 | 
									let _this = this;
 | 
				
			||||||
				setTimeout(function () {
 | 
									setTimeout(function () {
 | 
				
			||||||
          _this.timer = false
 | 
										_this.timer = false;
 | 
				
			||||||
        }, 500)
 | 
									}, 500);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			this.windowWidth(val);
 | 
								this.windowWidth(val);
 | 
				
			||||||
    }
 | 
							},
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
  created() {
 | 
					  created() {
 | 
				
			||||||
    this.init()
 | 
					    this.getData();
 | 
				
			||||||
 | 
							this.init();
 | 
				
			||||||
		setTimeout(() => {
 | 
							setTimeout(() => {
 | 
				
			||||||
      window.location.reload()
 | 
								window.location.reload();
 | 
				
			||||||
    }, 86400000)
 | 
							}, 86400000);
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	destroyed() {
 | 
						destroyed() {
 | 
				
			||||||
    this.websocketClose()
 | 
							this.websocketClose();
 | 
				
			||||||
    this.SJGWebsocketClose()
 | 
							this.SJGWebsocketClose();
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	mounted() {
 | 
						mounted() {
 | 
				
			||||||
    // let detData = [
 | 
							let detData = [
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									id: '1',
 | 
				
			||||||
 | 
									name: '测试工单',
 | 
				
			||||||
 | 
									progressRate: 0.933333,
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									id: '2',
 | 
				
			||||||
 | 
									name: '测试工单2',
 | 
				
			||||||
 | 
									progressRate: 0.932323,
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									id: '3',
 | 
				
			||||||
 | 
									name: '测试工单3',
 | 
				
			||||||
 | 
									progressRate: 0.23232,
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									id: '4',
 | 
				
			||||||
 | 
									name: '测试工单4',
 | 
				
			||||||
 | 
									progressRate: 0.32323,
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        id: '4',
 | 
				
			||||||
 | 
					        name: '测试工单4',
 | 
				
			||||||
 | 
					        progressRate: 0.32323,
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        id: '4',
 | 
				
			||||||
 | 
					        name: '测试工单4',
 | 
				
			||||||
 | 
					        progressRate: 0.32323,
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        id: '4',
 | 
				
			||||||
 | 
					        name: '测试工单4',
 | 
				
			||||||
 | 
					        progressRate: 0.32323,
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        id: '4',
 | 
				
			||||||
 | 
					        name: '测试工单4',
 | 
				
			||||||
 | 
					        progressRate: 0.32323,
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
			// {
 | 
								// {
 | 
				
			||||||
    //     id:'1',
 | 
								//   id: '5',
 | 
				
			||||||
			//   name: '测试工单',
 | 
								//   name: '测试工单',
 | 
				
			||||||
    //     progressRate:0.933333
 | 
								//   progressRate: 0.5555
 | 
				
			||||||
 | 
								// }, {
 | 
				
			||||||
 | 
								//   id: '6',
 | 
				
			||||||
 | 
								//   name: '测试工单',
 | 
				
			||||||
 | 
								//   progressRate: 0.66564
 | 
				
			||||||
			// },
 | 
								// },
 | 
				
			||||||
    //   {
 | 
							];
 | 
				
			||||||
    //     id: '2',
 | 
							this.orderList = detData.map((ele, index) => {
 | 
				
			||||||
    //     name: '测试工单2',
 | 
								if (ele.progressRate && ele.progressRate != 1) {
 | 
				
			||||||
    //     progressRate: 0.932323
 | 
									return {
 | 
				
			||||||
    //   }, {
 | 
										id: ele.id,
 | 
				
			||||||
    //     id: '3',
 | 
										name: ele.name,
 | 
				
			||||||
    //     name: '测试工单3',
 | 
										progressRate: parseFloat((ele.progressRate * 100).toFixed(0)),
 | 
				
			||||||
    //     progressRate: 0.23232
 | 
									};
 | 
				
			||||||
    //   }, {
 | 
								}
 | 
				
			||||||
    //     id: '4',
 | 
							});
 | 
				
			||||||
    //     name: '测试工单4',
 | 
							let EnergyNameList = ['Y61', 'Y62', 'Y63', 'Y64', 'Y65'];
 | 
				
			||||||
    //     progressRate: 0.32323
 | 
							this.EnergyMonitoringNameList = EnergyNameList;
 | 
				
			||||||
    //   }
 | 
							let EnergyDataList = [1, 2, 3, 4, 5];
 | 
				
			||||||
    //   // {
 | 
							// this.wsData.data.forEach((ele) => {
 | 
				
			||||||
    //   //   id: '5',
 | 
							//   EnergyDataList.push(ele.useQuantity)
 | 
				
			||||||
    //   //   name: '测试工单',
 | 
							// })
 | 
				
			||||||
    //   //   progressRate: 0.5555
 | 
							this.EnergyMonitoringList = EnergyDataList;
 | 
				
			||||||
    //   // }, {
 | 
							// console.log(EnergyDataList)
 | 
				
			||||||
    //   //   id: '6',
 | 
							this.$refs.EnergyMonitoringChart.initChart(
 | 
				
			||||||
    //   //   name: '测试工单',
 | 
								this.EnergyMonitoringNameList,
 | 
				
			||||||
    //   //   progressRate: 0.66564
 | 
								this.EnergyMonitoringList
 | 
				
			||||||
    //   // },
 | 
							);
 | 
				
			||||||
    // ]
 | 
							let eqArr = this.qualityYearList.map((item, index) => [
 | 
				
			||||||
    // this.orderList = detData.map((ele, index) => {
 | 
								`<span style="color:rgba(255,255,255,0.5)" >${index + 1 || ''}
 | 
				
			||||||
    //   if (ele.progressRate && ele.progressRate != 1) {
 | 
					            </span>`,
 | 
				
			||||||
    //     return {
 | 
								// formatDate(item.planStartTime) || '',
 | 
				
			||||||
    //       id: ele.id,
 | 
								`
 | 
				
			||||||
    //       name: ele.name,
 | 
					          <span style="color:rgba(255,255,255,0.5)" >${item.name || ''}
 | 
				
			||||||
    //       progressRate: parseFloat((ele.progressRate * 100).toFixed(3))
 | 
					            </span>`,
 | 
				
			||||||
 | 
								`<span style="color:rgba(255,255,255,0.5)">${item.code || ''}</span>`,
 | 
				
			||||||
 | 
								`<span style="color:rgba(255,255,255,0.5)">${item.status || ''}</span>`,
 | 
				
			||||||
 | 
								`<span style="color:rgba(255,255,255,0.5)">${item.error || ''}</span>`,
 | 
				
			||||||
 | 
							]);
 | 
				
			||||||
 | 
					    this.eqConfig.data = eqArr;
 | 
				
			||||||
 | 
					    let data = [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        lineName: 'D62',
 | 
				
			||||||
 | 
					        outputNum: '11111',
 | 
				
			||||||
 | 
					        passRate: '0.9873'
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        lineName: 'D63',
 | 
				
			||||||
 | 
					        outputNum: '23212',
 | 
				
			||||||
 | 
					        passRate: '0.9873'
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        lineName: 'D61',
 | 
				
			||||||
 | 
					        outputNum: '423323',
 | 
				
			||||||
 | 
					        passRate: '0.9873'
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        lineName: 'D64',
 | 
				
			||||||
 | 
					        outputNum: '43434',
 | 
				
			||||||
 | 
					        passRate: '0.9873'
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					    let nameList = [];
 | 
				
			||||||
 | 
					    let passRateList = [];
 | 
				
			||||||
 | 
					    let outputNumList = [];
 | 
				
			||||||
 | 
					    // let arr = ['D64', 'D62', 'D61', 'D63', 'D65']
 | 
				
			||||||
 | 
					    for (let i = 0; i < data.length - 1; i++) {
 | 
				
			||||||
 | 
					      // 二次循环,注意:再减去外层的循环次数,向后依次两两相互比较转换;
 | 
				
			||||||
 | 
					      for (let j = 0; j < data.length - i - 1; j++) {
 | 
				
			||||||
 | 
					        // 当前一个值大于后一个值
 | 
				
			||||||
 | 
					        if (data[j].lineName.substr(data[j].lineName.length - 1, 1) > data[j + 1].lineName.substr(data[j + 1].lineName.length - 1, 1)) {
 | 
				
			||||||
 | 
					          // 定义变量,以赋值的形式前后交换,直到换到最小的在前面,左右再无比较,则循环结束形成排序结果
 | 
				
			||||||
 | 
					          let temp = data[j];
 | 
				
			||||||
 | 
					          data[j] = data[j + 1];
 | 
				
			||||||
 | 
					          data[j + 1] = temp;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    data.forEach((ele) => {
 | 
				
			||||||
 | 
					      // if (item.id == ele.productionLineId) {
 | 
				
			||||||
 | 
					      // if (item.name.substr(0, 1) == "D") {
 | 
				
			||||||
 | 
					      // console.log(ele)
 | 
				
			||||||
 | 
					      nameList.push(ele.lineName);
 | 
				
			||||||
 | 
					      outputNumList.push(ele.outputNum);
 | 
				
			||||||
 | 
					      passRateList.push(ele.passRate);
 | 
				
			||||||
      // }
 | 
					      // }
 | 
				
			||||||
      // }
 | 
					      // }
 | 
				
			||||||
    // });
 | 
					    });
 | 
				
			||||||
    // let EnergyNameList = ['Y61', 'Y62', 'Y63', 'Y64', 'Y65',]
 | 
					    this.$nextTick(() => {
 | 
				
			||||||
    // this.EnergyMonitoringNameList = EnergyNameList
 | 
					      this.$refs.productLineChart.initChart(
 | 
				
			||||||
    // let EnergyDataList = [1, 2, 3, 4, 5]
 | 
					        nameList,
 | 
				
			||||||
    // // this.wsData.data.forEach((ele) => {
 | 
					        passRateList,
 | 
				
			||||||
    // //   EnergyDataList.push(ele.useQuantity)
 | 
					        outputNumList
 | 
				
			||||||
    // // })
 | 
					      );
 | 
				
			||||||
    // this.EnergyMonitoringList = EnergyDataList
 | 
					    })
 | 
				
			||||||
    // // console.log(EnergyDataList)
 | 
					 | 
				
			||||||
    // this.$refs.EnergyMonitoringChart.initChart(this.EnergyMonitoringNameList, this.EnergyMonitoringList)
 | 
					 | 
				
			||||||
    // let eqArr = this.qualityYearList.map((item, index) => [
 | 
					 | 
				
			||||||
    //   `<span style="color:rgba(255,255,255,0.5)" >${index + 1 || ''}
 | 
					 | 
				
			||||||
    //         </span>`,
 | 
					 | 
				
			||||||
    //   // formatDate(item.planStartTime) || '',
 | 
					 | 
				
			||||||
    //   `
 | 
					 | 
				
			||||||
    //       <span style="color:rgba(255,255,255,0.5)" >${item.name || ''}
 | 
					 | 
				
			||||||
    //         </span>`,
 | 
					 | 
				
			||||||
    //   `<span style="color:rgba(255,255,255,0.5)">${item.code || ''}</span>`,
 | 
					 | 
				
			||||||
    //   `<span style="color:rgba(255,255,255,0.5)">${item.status || ''}</span>`,
 | 
					 | 
				
			||||||
    //   `<span style="color:rgba(255,255,255,0.5)">${item.error || ''}</span>`,
 | 
					 | 
				
			||||||
    // ])
 | 
					 | 
				
			||||||
    // this.eqConfig.data = eqArr
 | 
					 | 
				
			||||||
    // this.$refs['eqScrollBoard'].updateRows(eqArr)
 | 
					 | 
				
			||||||
    // this.$refs.productLineChart.initChart(['D61', 'D62', 'D63', 'D64', 'D65',], [98, 97, 98.7, 98.5, 98.3,], [3134, 2323, 3232, 3233, 2321])
 | 
					 | 
				
			||||||
		// this.getList()
 | 
							// this.getList()
 | 
				
			||||||
    this.initWebSocket()
 | 
							this.initWebSocket();
 | 
				
			||||||
    this.SJGInitWebSocket()
 | 
							this.SJGInitWebSocket();
 | 
				
			||||||
    this.getTimes()
 | 
							this.getTimes();
 | 
				
			||||||
		// this.$refs.EnergyMonitoringChart.initChart(['Y61', 'Y62', 'Y63', 'Y64', 'Y65',], [3134, 2323, 3232, 3233, 2321])
 | 
							// this.$refs.EnergyMonitoringChart.initChart(['Y61', 'Y62', 'Y63', 'Y64', 'Y65',], [3134, 2323, 3232, 3233, 2321])
 | 
				
			||||||
		const _this = this;
 | 
							const _this = this;
 | 
				
			||||||
    _this.beilv2 = document.documentElement.clientWidth / 1920
 | 
							_this.beilv2 = document.documentElement.clientWidth / 1920;
 | 
				
			||||||
		window.onresize = () => {
 | 
							window.onresize = () => {
 | 
				
			||||||
			return (() => {
 | 
								return (() => {
 | 
				
			||||||
        _this.clientWidth = `${document.documentElement.clientWidth}`
 | 
									_this.clientWidth = `${document.documentElement.clientWidth}`;
 | 
				
			||||||
        this.beilv2 = _this.clientWidth / 1920
 | 
									this.beilv2 = _this.clientWidth / 1920;
 | 
				
			||||||
      })()
 | 
								})();
 | 
				
			||||||
    }
 | 
							};
 | 
				
			||||||
    this.getData()
 | 
					 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// beforeDestroy() {
 | 
						// beforeDestroy() {
 | 
				
			||||||
@@ -371,14 +527,22 @@ export default {
 | 
				
			|||||||
            </span>`,
 | 
					            </span>`,
 | 
				
			||||||
				// formatDate(item.planStartTime) || '',
 | 
									// formatDate(item.planStartTime) || '',
 | 
				
			||||||
				`
 | 
									`
 | 
				
			||||||
          <span style="color:rgba(255,255,255,0.5)" >${item.productionLineName || ''}
 | 
					          <span style="color:rgba(255,255,255,0.5)" >${
 | 
				
			||||||
 | 
											item.productionLineName || ''
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
            </span>`,
 | 
					            </span>`,
 | 
				
			||||||
        `<span style="color:rgba(255,255,255,0.5)">${item.sectionName || ''}</span>`,
 | 
									`<span style="color:rgba(255,255,255,0.5)">${
 | 
				
			||||||
 | 
										item.sectionName || ''
 | 
				
			||||||
 | 
									}</span>`,
 | 
				
			||||||
				`<span style="color:rgba(255,255,255,0.5)">${item.count || ''}</span>`,
 | 
									`<span style="color:rgba(255,255,255,0.5)">${item.count || ''}</span>`,
 | 
				
			||||||
        `<span style="color:rgba(255,255,255,0.5)">${item.inspectionTypeName || ''}</span>`,
 | 
									`<span style="color:rgba(255,255,255,0.5)">${
 | 
				
			||||||
      ])
 | 
										item.inspectionTypeName || ''
 | 
				
			||||||
      this.processConfig.data = processArr
 | 
									}</span>`,
 | 
				
			||||||
      this.$refs['processScrollBoard'].updateRows(processArr)
 | 
								]);
 | 
				
			||||||
 | 
					      this.processConfig.data = processArr;
 | 
				
			||||||
 | 
					      // this.$nextTick(() => {
 | 
				
			||||||
 | 
					        this.$refs['processScrollBoard'].updateRows(processArr);
 | 
				
			||||||
 | 
					      // })
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		// getList() {
 | 
							// getList() {
 | 
				
			||||||
		//   // this.$axios.get(
 | 
							//   // this.$axios.get(
 | 
				
			||||||
@@ -439,41 +603,55 @@ export default {
 | 
				
			|||||||
			let seconds = new Date().getSeconds(); //获取当前时间的秒数
 | 
								let seconds = new Date().getSeconds(); //获取当前时间的秒数
 | 
				
			||||||
			//当小于 10 的是时候,在前面加 0
 | 
								//当小于 10 的是时候,在前面加 0
 | 
				
			||||||
			if (hours < 10) {
 | 
								if (hours < 10) {
 | 
				
			||||||
        hours = "0" + hours;
 | 
									hours = '0' + hours;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if (minutes < 10) {
 | 
								if (minutes < 10) {
 | 
				
			||||||
        minutes = "0" + minutes;
 | 
									minutes = '0' + minutes;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if (seconds < 10) {
 | 
								if (seconds < 10) {
 | 
				
			||||||
        seconds = "0" + seconds;
 | 
									seconds = '0' + seconds;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			//拼接格式化当前时间
 | 
								//拼接格式化当前时间
 | 
				
			||||||
      this.times = year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
 | 
								this.times =
 | 
				
			||||||
 | 
									year +
 | 
				
			||||||
 | 
									'.' +
 | 
				
			||||||
 | 
									month +
 | 
				
			||||||
 | 
									'.' +
 | 
				
			||||||
 | 
									day +
 | 
				
			||||||
 | 
									' ' +
 | 
				
			||||||
 | 
									hours +
 | 
				
			||||||
 | 
									':' +
 | 
				
			||||||
 | 
									minutes +
 | 
				
			||||||
 | 
									':' +
 | 
				
			||||||
 | 
									seconds;
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		initWebSocket() {
 | 
							initWebSocket() {
 | 
				
			||||||
      let date = new Date().valueOf()
 | 
								let date = new Date().valueOf();
 | 
				
			||||||
      const wsUrl = process.env.VUE_APP_Socket_API + `/websocket/message?userId=EN${date}`
 | 
								const wsUrl =
 | 
				
			||||||
 | 
									process.env.VUE_APP_Socket_API + `/websocket/message?userId=EN${date}`;
 | 
				
			||||||
			this.wsHeartbeat = new WebSocketHeartbeat(wsUrl);
 | 
								this.wsHeartbeat = new WebSocketHeartbeat(wsUrl);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// 处理收到的消息
 | 
								// 处理收到的消息
 | 
				
			||||||
			this.wsHeartbeat.ws.onmessage = (event) => {
 | 
								this.wsHeartbeat.ws.onmessage = (event) => {
 | 
				
			||||||
        console.log('收到消息:', event.data)
 | 
									console.log('收到消息:', event.data);
 | 
				
			||||||
        this.wsData = event?.data ? JSON.parse(event?.data) : {}
 | 
									this.wsData = event?.data ? JSON.parse(event?.data) : {};
 | 
				
			||||||
				// console.log('22222', this.wsData.data)
 | 
									// console.log('22222', this.wsData.data)
 | 
				
			||||||
				if (this.wsData.type === 'EnergyMonitoring') {
 | 
									if (this.wsData.type === 'EnergyMonitoring') {
 | 
				
			||||||
          let EnergyNameList = []
 | 
										let EnergyNameList = [];
 | 
				
			||||||
					this.wsData.data.forEach((ele) => {
 | 
										this.wsData.data.forEach((ele) => {
 | 
				
			||||||
            EnergyNameList.push(ele.lineName)
 | 
											EnergyNameList.push(ele.lineName);
 | 
				
			||||||
          })
 | 
										});
 | 
				
			||||||
          this.EnergyMonitoringNameList = EnergyNameList
 | 
										this.EnergyMonitoringNameList = EnergyNameList;
 | 
				
			||||||
          let EnergyDataList = []
 | 
										let EnergyDataList = [];
 | 
				
			||||||
					this.wsData.data.forEach((ele) => {
 | 
										this.wsData.data.forEach((ele) => {
 | 
				
			||||||
            EnergyDataList.push(ele.useQuantity
 | 
											EnergyDataList.push(ele.useQuantity);
 | 
				
			||||||
            )
 | 
										});
 | 
				
			||||||
 | 
										this.EnergyMonitoringList = EnergyDataList;
 | 
				
			||||||
 | 
					          console.log(EnergyDataList);
 | 
				
			||||||
 | 
					          this.$nextTick(() => {
 | 
				
			||||||
 | 
					            this.$refs.EnergyMonitoringChart.initChart(this.EnergyMonitoringNameList,this.EnergyMonitoringList);
 | 
				
			||||||
          })
 | 
					          })
 | 
				
			||||||
          this.EnergyMonitoringList = EnergyDataList
 | 
					
 | 
				
			||||||
          console.log(EnergyDataList)
 | 
					 | 
				
			||||||
          this.$refs.EnergyMonitoringChart.initChart(this.EnergyMonitoringNameList, this.EnergyMonitoringList)
 | 
					 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
			// if (typeof (WebSocket) === 'undefined') {
 | 
								// if (typeof (WebSocket) === 'undefined') {
 | 
				
			||||||
@@ -495,14 +673,15 @@ export default {
 | 
				
			|||||||
			// }
 | 
								// }
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		SJGInitWebSocket() {
 | 
							SJGInitWebSocket() {
 | 
				
			||||||
      let date = new Date().valueOf()
 | 
								let date = new Date().valueOf();
 | 
				
			||||||
      const SJGWsUrl = process.env.VUE_APP_Socket_API + `/websocket/message?userId=SJG${date}`
 | 
								const SJGWsUrl =
 | 
				
			||||||
 | 
									process.env.VUE_APP_Socket_API + `/websocket/message?userId=SJG${date}`;
 | 
				
			||||||
			this.SJGws = new WebSocketHeartbeat(SJGWsUrl);
 | 
								this.SJGws = new WebSocketHeartbeat(SJGWsUrl);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// 处理收到的消息
 | 
								// 处理收到的消息
 | 
				
			||||||
			this.SJGws.ws.onmessage = (event) => {
 | 
								this.SJGws.ws.onmessage = (event) => {
 | 
				
			||||||
        console.log('收到消息:', event.data)
 | 
									console.log('收到消息:', event.data);
 | 
				
			||||||
        this.SJGWsData = event?.data ? JSON.parse(event?.data) : {}
 | 
									this.SJGWsData = event?.data ? JSON.parse(event?.data) : {};
 | 
				
			||||||
				// console.log(this.wsData.detData);
 | 
									// console.log(this.wsData.detData);
 | 
				
			||||||
				// console.log('22222', this.wsData.data)
 | 
									// console.log('22222', this.wsData.data)
 | 
				
			||||||
				if (this.SJGWsData.type === 'order') {
 | 
									if (this.SJGWsData.type === 'order') {
 | 
				
			||||||
@@ -511,69 +690,100 @@ export default {
 | 
				
			|||||||
							return {
 | 
												return {
 | 
				
			||||||
								id: ele.id,
 | 
													id: ele.id,
 | 
				
			||||||
								name: ele.name,
 | 
													name: ele.name,
 | 
				
			||||||
                progressRate: parseFloat((ele.progressRate * 100).toFixed(3))
 | 
													progressRate: parseFloat((ele.progressRate * 100).toFixed(0)),
 | 
				
			||||||
              }
 | 
												};
 | 
				
			||||||
						}
 | 
											}
 | 
				
			||||||
					});
 | 
										});
 | 
				
			||||||
          console.log(this.orderList)
 | 
										console.log(this.orderList);
 | 
				
			||||||
				} else if (this.SJGWsData.type === 'equipment') {
 | 
									} else if (this.SJGWsData.type === 'equipment') {
 | 
				
			||||||
					let eqArr = this.SJGWsData.detData.map((item, index) => [
 | 
										let eqArr = this.SJGWsData.detData.map((item, index) => [
 | 
				
			||||||
						`<span style="color:rgba(255,255,255,0.5)" >${index + 1 || ''}
 | 
											`<span style="color:rgba(255,255,255,0.5)" >${index + 1 || ''}
 | 
				
			||||||
            </span>`,
 | 
					            </span>`,
 | 
				
			||||||
						`<span style="color:rgba(255,255,255,0.5)" >${item.name || ''}
 | 
											`<span style="color:rgba(255,255,255,0.5)" >${item.name || ''}
 | 
				
			||||||
            </span>`,
 | 
					            </span>`,
 | 
				
			||||||
            `<span style="color:rgba(255,255,255,0.5)">${item.code || ''}</span>`,
 | 
											`<span style="color:rgba(255,255,255,0.5)">${
 | 
				
			||||||
            `<span style="color:rgba(255,255,255,0.5)"><span style="color:rgba(255,255,255,0.5)"></span>  ${item.status || ''}</span>`,
 | 
												item.code || ''
 | 
				
			||||||
            `<span style="color:rgba(255,255,255,0.5)">${item.error || ''}</span>`,
 | 
											}</span>`,
 | 
				
			||||||
          ])
 | 
											`<span style="color:rgba(255,255,255,0.5)"><span style="color:rgba(255,255,255,0.5)"></span>  ${
 | 
				
			||||||
          this.eqConfig.data = eqArr
 | 
												item.status || ''
 | 
				
			||||||
          this.$refs['eqScrollBoard'].updateRows(eqArr)
 | 
											}</span>`,
 | 
				
			||||||
 | 
											`<span style="color:rgba(255,255,255,0.5)">${
 | 
				
			||||||
 | 
												item.error || ''
 | 
				
			||||||
 | 
											}</span>`,
 | 
				
			||||||
 | 
										]);
 | 
				
			||||||
 | 
					          this.eqConfig.data = eqArr;
 | 
				
			||||||
 | 
					          // this.$nextTick(() => {
 | 
				
			||||||
 | 
					            this.$refs['eqScrollBoard'].updateRows(eqArr);
 | 
				
			||||||
 | 
					          // })
 | 
				
			||||||
					// console.log(SJGWsData.orderList)
 | 
										// console.log(SJGWsData.orderList)
 | 
				
			||||||
				} else if (this.SJGWsData.type === 'productline') {
 | 
									} else if (this.SJGWsData.type === 'productline') {
 | 
				
			||||||
					console.log('aaaaaaaaaaaaaaaaaaa', this.SJGWsData);
 | 
										console.log('aaaaaaaaaaaaaaaaaaa', this.SJGWsData);
 | 
				
			||||||
          let nameList = []
 | 
										let nameList = [];
 | 
				
			||||||
          let passRateList = []
 | 
										let passRateList = [];
 | 
				
			||||||
          let outputNumList = []
 | 
										let outputNumList = [];
 | 
				
			||||||
 | 
					          // let arr = ['D64', 'D62', 'D61', 'D63', 'D65']
 | 
				
			||||||
 | 
					          for (let i = 0; i < this.SJGWsData.detData.length - 1; i++) {
 | 
				
			||||||
 | 
					            // 二次循环,注意:再减去外层的循环次数,向后依次两两相互比较转换;
 | 
				
			||||||
 | 
					            for (let j = 0; j < this.SJGWsData.detData.length - i - 1; j++) {
 | 
				
			||||||
 | 
					              // 当前一个值大于后一个值
 | 
				
			||||||
 | 
					              if (this.SJGWsData.detData[j].lineName.substr(this.SJGWsData.detData[j].lineName.length - 1, 1) > this.SJGWsData.detData[j + 1].lineName.substr(this.SJGWsData.detData[j + 1].lineName.length - 1, 1)) {
 | 
				
			||||||
 | 
					                // 定义变量,以赋值的形式前后交换,直到换到最小的在前面,左右再无比较,则循环结束形成排序结果
 | 
				
			||||||
 | 
					                let temp = this.SJGWsData.detData[j];
 | 
				
			||||||
 | 
					                this.SJGWsData.detData[j] = this.SJGWsData.detData[j + 1];
 | 
				
			||||||
 | 
					                this.SJGWsData.detData[j + 1] = temp;
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
          this.SJGWsData.detData.forEach((ele) => {
 | 
					          this.SJGWsData.detData.forEach((ele) => {
 | 
				
			||||||
            // if (item.id == ele.productionLineId) {
 | 
					            // if (item.id == ele.productionLineId) {
 | 
				
			||||||
            // if (item.name.substr(0, 1) == "D") {
 | 
					            // if (item.name.substr(0, 1) == "D") {
 | 
				
			||||||
            // console.log(ele)
 | 
					            // console.log(ele)
 | 
				
			||||||
            nameList.push(ele.lineName)
 | 
					            nameList.push(ele.lineName);
 | 
				
			||||||
            outputNumList.push(ele.outputNum)
 | 
					            outputNumList.push(ele.outputNum);
 | 
				
			||||||
            passRateList.push(ele.passRate)
 | 
					            passRateList.push(ele.passRate);
 | 
				
			||||||
            // }
 | 
					            // }
 | 
				
			||||||
            // }
 | 
					            // }
 | 
				
			||||||
 | 
					          });
 | 
				
			||||||
 | 
					          this.$nextTick(() => {
 | 
				
			||||||
 | 
					            this.$refs.productLineChart.initChart(
 | 
				
			||||||
 | 
					              nameList,
 | 
				
			||||||
 | 
					              passRateList,
 | 
				
			||||||
 | 
					              outputNumList
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
          })
 | 
					          })
 | 
				
			||||||
          this.$refs.productLineChart.initChart(nameList, passRateList, outputNumList)
 | 
					 | 
				
			||||||
				} else if (this.SJGInitWebSocket === 'inspection') {
 | 
									} else if (this.SJGInitWebSocket === 'inspection') {
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		SJGWebsocketClose(e) {
 | 
							SJGWebsocketClose(e) {
 | 
				
			||||||
      this.SJGws.ws.onclose = (event) => { console.log(event); }
 | 
								this.SJGws.ws.onclose = (event) => {
 | 
				
			||||||
 | 
									console.log(event);
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		websocketClose(e) {
 | 
							websocketClose(e) {
 | 
				
			||||||
      this.wsHeartbeat.ws.onclose = (event) => { console.log(event); }
 | 
								this.wsHeartbeat.ws.onclose = (event) => {
 | 
				
			||||||
 | 
									console.log(event);
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		windowWidth(value) {
 | 
							windowWidth(value) {
 | 
				
			||||||
      this.clientWidth = value
 | 
								this.clientWidth = value;
 | 
				
			||||||
      this.beilv2 = this.clientWidth / 1920
 | 
								this.beilv2 = this.clientWidth / 1920;
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		change() {
 | 
							change() {
 | 
				
			||||||
			console.log(this.isFullScreen);
 | 
								console.log(this.isFullScreen);
 | 
				
			||||||
			debugger;
 | 
								debugger;
 | 
				
			||||||
      this.isFullScreen = screenfull.isFullscreen
 | 
								this.isFullScreen = screenfull.isFullscreen;
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		init() {
 | 
							init() {
 | 
				
			||||||
			console.log(screenfull.isEnabled);
 | 
								console.log(screenfull.isEnabled);
 | 
				
			||||||
			if (screenfull.isEnabled) {
 | 
								if (screenfull.isEnabled) {
 | 
				
			||||||
				debugger;
 | 
									debugger;
 | 
				
			||||||
        screenfull.on('change', this.change)
 | 
									screenfull.on('change', this.change);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		destroy() {
 | 
							destroy() {
 | 
				
			||||||
			if (screenfull.isEnabled) {
 | 
								if (screenfull.isEnabled) {
 | 
				
			||||||
        screenfull.off('change', this.change)
 | 
									screenfull.off('change', this.change);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		changeFullScreen() {
 | 
							changeFullScreen() {
 | 
				
			||||||
@@ -581,19 +791,62 @@ export default {
 | 
				
			|||||||
			if (!screenfull.isEnabled) {
 | 
								if (!screenfull.isEnabled) {
 | 
				
			||||||
				this.$message({
 | 
									this.$message({
 | 
				
			||||||
					message: 'you browser can not work',
 | 
										message: 'you browser can not work',
 | 
				
			||||||
          type: 'warning'
 | 
										type: 'warning',
 | 
				
			||||||
        })
 | 
									});
 | 
				
			||||||
        return false
 | 
									return false;
 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      screenfull.toggle()
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
								screenfull.toggle();
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<style lang="scss" scoped>
 | 
					<style lang="scss" scoped>
 | 
				
			||||||
 | 
					.myLegend {
 | 
				
			||||||
 | 
					  position: absolute;
 | 
				
			||||||
 | 
					  top: -28px;
 | 
				
			||||||
 | 
					  right: 20px;
 | 
				
			||||||
 | 
					  font-size: 12px;
 | 
				
			||||||
 | 
					  color: rgba(255, 255, 255, .6);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .barLegend {
 | 
				
			||||||
 | 
					    // float: left;
 | 
				
			||||||
 | 
					    background: linear-gradient(#9DD5FF, #1295FF);
 | 
				
			||||||
 | 
					    width: 10px;
 | 
				
			||||||
 | 
					    height: 10px;
 | 
				
			||||||
 | 
					    display: inline-block;
 | 
				
			||||||
 | 
					    margin-right: 5px;
 | 
				
			||||||
 | 
					    border-radius: 30%;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .barText {
 | 
				
			||||||
 | 
					    // float: right;
 | 
				
			||||||
 | 
					    display: inline-block;
 | 
				
			||||||
 | 
					    margin-right: 10px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .barCircleLegend {
 | 
				
			||||||
 | 
					    width: 15px;
 | 
				
			||||||
 | 
					    height: 1px;
 | 
				
			||||||
 | 
					    background-color: rgba(255, 209, 96, 1);
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    left: -4.1715px;
 | 
				
			||||||
 | 
					    top: 21.7px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .barCircle {
 | 
				
			||||||
 | 
					    width: 6px;
 | 
				
			||||||
 | 
					    height: 6px;
 | 
				
			||||||
 | 
					    border-radius: 50%;
 | 
				
			||||||
 | 
					    background-color: rgba(255, 209, 96, 1);
 | 
				
			||||||
 | 
					    display: inline-block;
 | 
				
			||||||
 | 
					    margin-right: 10px;
 | 
				
			||||||
 | 
					    margin-bottom: 1.7px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .barCircleText {
 | 
				
			||||||
 | 
					    display: inline-block;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
.visual-container {
 | 
					.visual-container {
 | 
				
			||||||
	width: 1920px;
 | 
						width: 1920px;
 | 
				
			||||||
	height: 1080px;
 | 
						height: 1080px;
 | 
				
			||||||
@@ -612,17 +865,17 @@ export default {
 | 
				
			|||||||
			position: absolute;
 | 
								position: absolute;
 | 
				
			||||||
			left: 290px;
 | 
								left: 290px;
 | 
				
			||||||
			top: 25px;
 | 
								top: 25px;
 | 
				
			||||||
          color: rgba(255, 255, 255, 0.80);
 | 
								color: rgba(255, 255, 255, 0.8);
 | 
				
			||||||
			font-size: 20px;
 | 
								font-size: 20px;
 | 
				
			||||||
          letter-spacing: 0px;
 | 
								letter-spacing: 1px;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		.time {
 | 
							.time {
 | 
				
			||||||
			position: absolute;
 | 
								position: absolute;
 | 
				
			||||||
			left: 1360px;
 | 
								left: 1360px;
 | 
				
			||||||
          color: rgba(255, 255, 255, 0.80);
 | 
								color: rgba(255, 255, 255, 0.8);
 | 
				
			||||||
			top: 25px;
 | 
								top: 25px;
 | 
				
			||||||
			font-size: 20px;
 | 
								font-size: 20px;
 | 
				
			||||||
          letter-spacing: 0px;
 | 
								letter-spacing: 0.72px;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		.title-button {
 | 
							.title-button {
 | 
				
			||||||
			color: #00fff0;
 | 
								color: #00fff0;
 | 
				
			||||||
@@ -666,6 +919,13 @@ export default {
 | 
				
			|||||||
	background-color: unset;
 | 
						background-color: unset;
 | 
				
			||||||
	background-image: linear-gradient(to right, #4573fe, #47f8dc);
 | 
						background-image: linear-gradient(to right, #4573fe, #47f8dc);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					::v-deep .el-progress__text {
 | 
				
			||||||
 | 
					  width: 50px;
 | 
				
			||||||
 | 
					  margin-top: -70px;
 | 
				
			||||||
 | 
					  margin-left: 538px;
 | 
				
			||||||
 | 
					  // background-color: unset;
 | 
				
			||||||
 | 
					  // background-image: linear-gradient(to right, #4573fe, #47f8dc);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
.visual-select {
 | 
					.visual-select {
 | 
				
			||||||
	position: absolute;
 | 
						position: absolute;
 | 
				
			||||||
	right: 1em;
 | 
						right: 1em;
 | 
				
			||||||
@@ -736,7 +996,7 @@ export default {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
.order::-webkit-scrollbar {
 | 
					.order::-webkit-scrollbar {
 | 
				
			||||||
  display: none
 | 
						display: none;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
</style>
 | 
					</style>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,8 @@
 | 
				
			|||||||
			:table-props="tableProps"
 | 
								:table-props="tableProps"
 | 
				
			||||||
			:page="listQuery.pageNo"
 | 
								:page="listQuery.pageNo"
 | 
				
			||||||
			:limit="listQuery.pageSize"
 | 
								:limit="listQuery.pageSize"
 | 
				
			||||||
			:table-data="tableData">
 | 
								:table-data="tableData"
 | 
				
			||||||
 | 
								:max-height="tableH">
 | 
				
			||||||
			<method-btn
 | 
								<method-btn
 | 
				
			||||||
				v-if="tableBtn.length"
 | 
									v-if="tableBtn.length"
 | 
				
			||||||
				slot="handleBtn"
 | 
									slot="handleBtn"
 | 
				
			||||||
@@ -33,38 +34,49 @@ import {
 | 
				
			|||||||
	getcoreAlarmLogPage
 | 
						getcoreAlarmLogPage
 | 
				
			||||||
} from '@/api/base/coreAlarmLog';
 | 
					} from '@/api/base/coreAlarmLog';
 | 
				
			||||||
import {DICT_TYPE, getDictDatas, publicFormatter } from "@/utils/dict";
 | 
					import {DICT_TYPE, getDictDatas, publicFormatter } from "@/utils/dict";
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const tableProps = [
 | 
					const tableProps = [
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'alarmTime',
 | 
							prop: 'alarmTime',
 | 
				
			||||||
		label: '报警时间',
 | 
							label: '报警时间',
 | 
				
			||||||
		filter: parseTime
 | 
							filter: parseTime,
 | 
				
			||||||
 | 
							width: 150,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'alarmSource',
 | 
							prop: 'alarmSource',
 | 
				
			||||||
		label: '报警来源'
 | 
							label: '报警来源',
 | 
				
			||||||
 | 
							width: 200,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'alarmType',
 | 
							prop: 'alarmType',
 | 
				
			||||||
		label: '报警类型'
 | 
							label: '报警类型',
 | 
				
			||||||
 | 
							width: 180,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'alarmGrade',
 | 
							prop: 'alarmGrade',
 | 
				
			||||||
		label: '报警级别',
 | 
							label: '报警级别',
 | 
				
			||||||
		filter: publicFormatter(DICT_TYPE.EQU_ALARM_LEVEL)
 | 
							filter: publicFormatter(DICT_TYPE.EQU_ALARM_LEVEL),
 | 
				
			||||||
 | 
							width: 120,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'alarmReason',
 | 
							prop: 'alarmReason',
 | 
				
			||||||
		label: '报警原因'
 | 
							label: '报警原因',
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'alarmContent',
 | 
							prop: 'alarmContent',
 | 
				
			||||||
		label: '报警详细'
 | 
							label: '报警详细',
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	mixins: [basicPage],
 | 
						mixins: [basicPage, tableHeightMixin],
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			urlOptions: {
 | 
								urlOptions: {
 | 
				
			||||||
@@ -74,7 +86,7 @@ export default {
 | 
				
			|||||||
			tableBtn: [].filter((v)=>v),
 | 
								tableBtn: [].filter((v)=>v),
 | 
				
			||||||
			tableData: [],
 | 
								tableData: [],
 | 
				
			||||||
			listQuery: {
 | 
								listQuery: {
 | 
				
			||||||
        pageSize: 10,
 | 
					        pageSize: 20,
 | 
				
			||||||
        pageNo: 1,
 | 
					        pageNo: 1,
 | 
				
			||||||
        total: 0,
 | 
					        total: 0,
 | 
				
			||||||
				alarmSource: undefined,
 | 
									alarmSource: undefined,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
 * @Author: zwq
 | 
					 * @Author: zwq
 | 
				
			||||||
 * @Date: 2021-11-18 14:16:25
 | 
					 * @Date: 2021-11-18 14:16:25
 | 
				
			||||||
 * @LastEditors: DY
 | 
					 * @LastEditors: DY
 | 
				
			||||||
 * @LastEditTime: 2024-03-20 16:20:39
 | 
					 * @LastEditTime: 2024-04-02 16:46:17
 | 
				
			||||||
 * @Description:
 | 
					 * @Description:
 | 
				
			||||||
-->
 | 
					-->
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
@@ -96,7 +96,7 @@ export default {
 | 
				
			|||||||
			dataRule: {
 | 
								dataRule: {
 | 
				
			||||||
        code: [{ required: true, message: "客户编号不能为空", trigger: "blur" }],
 | 
					        code: [{ required: true, message: "客户编号不能为空", trigger: "blur" }],
 | 
				
			||||||
        name: [{ required: true, message: "客户名称不能为空", trigger: "blur" }],
 | 
					        name: [{ required: true, message: "客户名称不能为空", trigger: "blur" }],
 | 
				
			||||||
				contact: [{ required: true, message: "联系人不能为空", trigger: "blur" }],
 | 
									// contact: [{ required: true, message: "联系人不能为空", trigger: "blur" }],
 | 
				
			||||||
				telephone: [
 | 
									telephone: [
 | 
				
			||||||
					{ required: false, trigger: "blur", message: "手机号不能为空" },
 | 
										{ required: false, trigger: "blur", message: "手机号不能为空" },
 | 
				
			||||||
          {
 | 
					          {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,8 @@
 | 
				
			|||||||
			:table-props="tableProps"
 | 
								:table-props="tableProps"
 | 
				
			||||||
			:page="listQuery.pageNo"
 | 
								:page="listQuery.pageNo"
 | 
				
			||||||
			:limit="listQuery.pageSize"
 | 
								:limit="listQuery.pageSize"
 | 
				
			||||||
			:table-data="tableData">
 | 
								:table-data="tableData"
 | 
				
			||||||
 | 
								:max-height="tableH">
 | 
				
			||||||
			<method-btn
 | 
								<method-btn
 | 
				
			||||||
				v-if="tableBtn.length"
 | 
									v-if="tableBtn.length"
 | 
				
			||||||
				slot="handleBtn"
 | 
									slot="handleBtn"
 | 
				
			||||||
@@ -45,41 +46,56 @@ import {
 | 
				
			|||||||
	getCustomerPage,
 | 
						getCustomerPage,
 | 
				
			||||||
	deleteCustomer
 | 
						deleteCustomer
 | 
				
			||||||
} from '@/api/base/coreCustomer';
 | 
					} from '@/api/base/coreCustomer';
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const tableProps = [
 | 
					const tableProps = [
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'createTime',
 | 
							prop: 'createTime',
 | 
				
			||||||
		label: '添加时间',
 | 
							label: '添加时间',
 | 
				
			||||||
		filter: parseTime
 | 
							filter: parseTime,
 | 
				
			||||||
 | 
							width: 150,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'name',
 | 
							prop: 'name',
 | 
				
			||||||
		label: '客户名称'
 | 
							label: '客户名称',
 | 
				
			||||||
 | 
							width: 150,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'code',
 | 
							prop: 'code',
 | 
				
			||||||
		label: '客户编码'
 | 
							label: '客户编码',
 | 
				
			||||||
 | 
							width: 150,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'contact',
 | 
							prop: 'contact',
 | 
				
			||||||
		label: '联系人'
 | 
							label: '联系人',
 | 
				
			||||||
 | 
							width: 120,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'telephone',
 | 
							prop: 'telephone',
 | 
				
			||||||
		label: '联系电话'
 | 
							label: '联系电话',
 | 
				
			||||||
 | 
							width: 150,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'address',
 | 
							prop: 'address',
 | 
				
			||||||
		label: '地址'
 | 
							label: '地址',
 | 
				
			||||||
 | 
							width: 150,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'remark',
 | 
							prop: 'remark',
 | 
				
			||||||
		label: '备注'
 | 
							label: '备注',
 | 
				
			||||||
 | 
							minWidth: 150,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	mixins: [basicPage],
 | 
						mixins: [basicPage, tableHeightMixin],
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			urlOptions: {
 | 
								urlOptions: {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,8 @@
 | 
				
			|||||||
			:table-props="tableProps"
 | 
								:table-props="tableProps"
 | 
				
			||||||
			:page="listQuery.pageNo"
 | 
								:page="listQuery.pageNo"
 | 
				
			||||||
			:limit="listQuery.pageSize"
 | 
								:limit="listQuery.pageSize"
 | 
				
			||||||
			:table-data="tableData">
 | 
								:table-data="tableData"
 | 
				
			||||||
 | 
								:max-height="tableH">
 | 
				
			||||||
			<method-btn
 | 
								<method-btn
 | 
				
			||||||
				v-if="tableBtn.length"
 | 
									v-if="tableBtn.length"
 | 
				
			||||||
				slot="handleBtn"
 | 
									slot="handleBtn"
 | 
				
			||||||
@@ -45,6 +46,7 @@ import {
 | 
				
			|||||||
	getCoreDepartmentPage,
 | 
						getCoreDepartmentPage,
 | 
				
			||||||
	deleteCoreDepartment
 | 
						deleteCoreDepartment
 | 
				
			||||||
} from '@/api/base/coreDepartment';
 | 
					} from '@/api/base/coreDepartment';
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const tableProps = [
 | 
					const tableProps = [
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -71,7 +73,7 @@ const tableProps = [
 | 
				
			|||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	mixins: [basicPage],
 | 
						mixins: [basicPage, tableHeightMixin],
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			urlOptions: {
 | 
								urlOptions: {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -64,8 +64,8 @@
 | 
				
			|||||||
				</el-form-item>
 | 
									</el-form-item>
 | 
				
			||||||
			</el-col>
 | 
								</el-col>
 | 
				
			||||||
			<el-col :span="8">
 | 
								<el-col :span="8">
 | 
				
			||||||
				<el-form-item label="进场日期" prop="enterTime" :rules="[]">
 | 
									<el-form-item label="进厂日期" prop="enterTime" :rules="[]">
 | 
				
			||||||
					<el-date-picker v-model="form.enterTime" :disabled="disabled" type="datetime" placeholder="请选择进场日期"
 | 
										<el-date-picker v-model="form.enterTime" :disabled="disabled" type="datetime" placeholder="请选择进厂日期"
 | 
				
			||||||
						value-format="timestamp"></el-date-picker>
 | 
											value-format="timestamp"></el-date-picker>
 | 
				
			||||||
				</el-form-item>
 | 
									</el-form-item>
 | 
				
			||||||
			</el-col>
 | 
								</el-col>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,8 @@
 | 
				
			|||||||
			:page="queryParams.pageNo"
 | 
								:page="queryParams.pageNo"
 | 
				
			||||||
			:limit="queryParams.pageSize"
 | 
								:limit="queryParams.pageSize"
 | 
				
			||||||
			:table-data="list"
 | 
								:table-data="list"
 | 
				
			||||||
			@emitFun="handleEmitFun">
 | 
								@emitFun="handleEmitFun"
 | 
				
			||||||
 | 
								:max-height="tableH">
 | 
				
			||||||
			<method-btn
 | 
								<method-btn
 | 
				
			||||||
				v-if="tableBtn.length"
 | 
									v-if="tableBtn.length"
 | 
				
			||||||
				slot="handleBtn"
 | 
									slot="handleBtn"
 | 
				
			||||||
@@ -78,7 +79,7 @@
 | 
				
			|||||||
					queryParams: {
 | 
										queryParams: {
 | 
				
			||||||
						equipmentId: form.id,
 | 
											equipmentId: form.id,
 | 
				
			||||||
						pageNo: 1,
 | 
											pageNo: 1,
 | 
				
			||||||
						pageSize: 10,
 | 
											pageSize: 20,
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
					tableBtn: [
 | 
										tableBtn: [
 | 
				
			||||||
						this.$auth.hasPermi('base:core-equipment-attr:update')
 | 
											this.$auth.hasPermi('base:core-equipment-attr:update')
 | 
				
			||||||
@@ -118,6 +119,7 @@ import {
 | 
				
			|||||||
} from '@/api/base/equipment';
 | 
					} from '@/api/base/equipment';
 | 
				
			||||||
import Editor from '@/components/Editor';
 | 
					import Editor from '@/components/Editor';
 | 
				
			||||||
import AssetsUpload from './components/AssetsUpload.vue';
 | 
					import AssetsUpload from './components/AssetsUpload.vue';
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	name: 'Equipment',
 | 
						name: 'Equipment',
 | 
				
			||||||
@@ -125,7 +127,7 @@ export default {
 | 
				
			|||||||
		Editor,
 | 
							Editor,
 | 
				
			||||||
		EquipmentDrawer,
 | 
							EquipmentDrawer,
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	mixins: [basicPageMixin],
 | 
						mixins: [basicPageMixin, tableHeightMixin],
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			searchBarKeys: ['name', 'code'],
 | 
								searchBarKeys: ['name', 'code'],
 | 
				
			||||||
@@ -157,8 +159,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: 'name', label: '设备名称' },
 | 
									{ prop: 'name', label: '设备名称', width: 180, showOverflowtooltip: true },
 | 
				
			||||||
				{ width: 256, prop: 'code', label: '设备编码' },
 | 
									{ width: 250, prop: 'code', label: '设备编码' },
 | 
				
			||||||
				{ prop: 'equipmentTypeName', label: '设备类型' },
 | 
									{ prop: 'equipmentTypeName', label: '设备类型' },
 | 
				
			||||||
				{ prop: 'enName', label: '英文名称' },
 | 
									{ prop: 'enName', label: '英文名称' },
 | 
				
			||||||
				{ prop: 'abbr', label: '缩写' },
 | 
									{ prop: 'abbr', label: '缩写' },
 | 
				
			||||||
@@ -484,7 +486,7 @@ export default {
 | 
				
			|||||||
			// 查询参数
 | 
								// 查询参数
 | 
				
			||||||
			queryParams: {
 | 
								queryParams: {
 | 
				
			||||||
				pageNo: 1,
 | 
									pageNo: 1,
 | 
				
			||||||
				pageSize: 10,
 | 
									pageSize: 20,
 | 
				
			||||||
				code: '',
 | 
									code: '',
 | 
				
			||||||
				name: '',
 | 
									name: '',
 | 
				
			||||||
				special: false
 | 
									special: false
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,8 @@
 | 
				
			|||||||
			:page="queryParams.pageNo"
 | 
								:page="queryParams.pageNo"
 | 
				
			||||||
			:limit="queryParams.pageSize"
 | 
								:limit="queryParams.pageSize"
 | 
				
			||||||
			:table-data="list"
 | 
								:table-data="list"
 | 
				
			||||||
			@emitFun="handleEmitFun">
 | 
								@emitFun="handleEmitFun"
 | 
				
			||||||
 | 
								:max-height="tableH">
 | 
				
			||||||
			<method-btn
 | 
								<method-btn
 | 
				
			||||||
				v-if="tableBtn.length"
 | 
									v-if="tableBtn.length"
 | 
				
			||||||
				slot="handleBtn"
 | 
									slot="handleBtn"
 | 
				
			||||||
@@ -51,13 +52,13 @@
 | 
				
			|||||||
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';
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
// import { getAccessToken } from '@/utils/auth';
 | 
					// import { getAccessToken } from '@/utils/auth';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	name: 'EquipmentLineBind',
 | 
						name: 'EquipmentLineBind',
 | 
				
			||||||
	components: { DialogForm },
 | 
						components: { DialogForm },
 | 
				
			||||||
	mixins: [basicPageMixin],
 | 
						mixins: [basicPageMixin, tableHeightMixin],
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			basePath: '/base/core-equipment-bind-section',
 | 
								basePath: '/base/core-equipment-bind-section',
 | 
				
			||||||
@@ -81,12 +82,13 @@ export default {
 | 
				
			|||||||
					prop: 'createTime',
 | 
										prop: 'createTime',
 | 
				
			||||||
					label: '添加时间',
 | 
										label: '添加时间',
 | 
				
			||||||
					fixed: true,
 | 
										fixed: true,
 | 
				
			||||||
					width: 180,
 | 
										width: 150,
 | 
				
			||||||
 | 
										showOverflowtooltip: true,
 | 
				
			||||||
					filter: (val) => moment(val).format('yyyy-MM-DD HH:mm:ss'),
 | 
										filter: (val) => moment(val).format('yyyy-MM-DD HH:mm:ss'),
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{ prop: 'productionLineName', label: '产线名称' },
 | 
									{ prop: 'productionLineName', label: '产线名称', width: 120, showOverflowtooltip: true },
 | 
				
			||||||
				{ prop: 'workshopSectionName', label: '工段名称' },
 | 
									{ prop: 'workshopSectionName', label: '工段名称', width: 120, showOverflowtooltip: true },
 | 
				
			||||||
				{ prop: 'equipmentName', label: '设备名称' },
 | 
									{ prop: 'equipmentName', label: '设备名称', width: 150, showOverflowtooltip: true },
 | 
				
			||||||
				{ prop: 'sort', label: '工段中排序' },
 | 
									{ prop: 'sort', label: '工段中排序' },
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					prop: 'lineDataType',
 | 
										prop: 'lineDataType',
 | 
				
			||||||
@@ -236,7 +238,7 @@ export default {
 | 
				
			|||||||
			// 查询参数
 | 
								// 查询参数
 | 
				
			||||||
			queryParams: {
 | 
								queryParams: {
 | 
				
			||||||
				pageNo: 1,
 | 
									pageNo: 1,
 | 
				
			||||||
				pageSize: 10,
 | 
									pageSize: 20,
 | 
				
			||||||
				equipmentName: null,
 | 
									equipmentName: null,
 | 
				
			||||||
				productionLineId: null,
 | 
									productionLineId: null,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,8 @@
 | 
				
			|||||||
			:page="queryParams.pageNo"
 | 
								:page="queryParams.pageNo"
 | 
				
			||||||
			:limit="queryParams.pageSize"
 | 
								:limit="queryParams.pageSize"
 | 
				
			||||||
			:table-data="list"
 | 
								:table-data="list"
 | 
				
			||||||
			@emitFun="handleEmitFun">
 | 
								@emitFun="handleEmitFun"
 | 
				
			||||||
 | 
								:max-height="tableH">
 | 
				
			||||||
			<method-btn
 | 
								<method-btn
 | 
				
			||||||
				v-if="tableBtn.length"
 | 
									v-if="tableBtn.length"
 | 
				
			||||||
				slot="handleBtn"
 | 
									slot="handleBtn"
 | 
				
			||||||
@@ -50,6 +51,7 @@
 | 
				
			|||||||
<script>
 | 
					<script>
 | 
				
			||||||
import moment from 'moment';
 | 
					import moment from 'moment';
 | 
				
			||||||
import basicPageMixin from '@/mixins/lb/basicPageMixin';
 | 
					import basicPageMixin from '@/mixins/lb/basicPageMixin';
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
	createEquipmentType,
 | 
						createEquipmentType,
 | 
				
			||||||
@@ -65,7 +67,7 @@ import {
 | 
				
			|||||||
export default {
 | 
					export default {
 | 
				
			||||||
	name: 'EquipmentType',
 | 
						name: 'EquipmentType',
 | 
				
			||||||
	components: {},
 | 
						components: {},
 | 
				
			||||||
	mixins: [basicPageMixin],
 | 
						mixins: [basicPageMixin, tableHeightMixin],
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			searchBarKeys: ['name'],
 | 
								searchBarKeys: ['name'],
 | 
				
			||||||
@@ -171,7 +173,7 @@ export default {
 | 
				
			|||||||
			// 查询参数
 | 
								// 查询参数
 | 
				
			||||||
			queryParams: {
 | 
								queryParams: {
 | 
				
			||||||
				pageNo: 1,
 | 
									pageNo: 1,
 | 
				
			||||||
				pageSize: 10,
 | 
									pageSize: 20,
 | 
				
			||||||
				name: '',
 | 
									name: '',
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			// 表单参数
 | 
								// 表单参数
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,8 @@
 | 
				
			|||||||
			:table-props="tableProps"
 | 
								:table-props="tableProps"
 | 
				
			||||||
			:page="listQuery.pageNo"
 | 
								:page="listQuery.pageNo"
 | 
				
			||||||
			:limit="listQuery.pageSize"
 | 
								:limit="listQuery.pageSize"
 | 
				
			||||||
			:table-data="tableData">
 | 
								:table-data="tableData"
 | 
				
			||||||
 | 
								:max-height="tableH">
 | 
				
			||||||
			<method-btn
 | 
								<method-btn
 | 
				
			||||||
				v-if="tableBtn.length"
 | 
									v-if="tableBtn.length"
 | 
				
			||||||
				slot="handleBtn"
 | 
									slot="handleBtn"
 | 
				
			||||||
@@ -43,38 +44,51 @@ import basicPage from '../../core/mixins/basic-page';
 | 
				
			|||||||
import { parseTime } from '../../core/mixins/code-filter';
 | 
					import { parseTime } from '../../core/mixins/code-filter';
 | 
				
			||||||
import { getHotMaterialPage, deleteHotMaterial } from '@/api/base/coreHotMaterial';
 | 
					import { getHotMaterialPage, deleteHotMaterial } from '@/api/base/coreHotMaterial';
 | 
				
			||||||
import { publicFormatter } from "@/utils/dict";
 | 
					import { publicFormatter } from "@/utils/dict";
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const tableProps = [
 | 
					const tableProps = [
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'createTime',
 | 
							prop: 'createTime',
 | 
				
			||||||
		label: '添加时间',
 | 
							label: '添加时间',
 | 
				
			||||||
		filter: parseTime
 | 
							filter: parseTime,
 | 
				
			||||||
 | 
							width: 180,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'name',
 | 
							prop: 'name',
 | 
				
			||||||
		label: '原料名称'
 | 
							label: '原料名称',
 | 
				
			||||||
 | 
							minWidth: 250,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'code',
 | 
							prop: 'code',
 | 
				
			||||||
		label: '原料编码'
 | 
							label: '原料编码',
 | 
				
			||||||
 | 
							width: 250,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'unit',
 | 
							prop: 'unit',
 | 
				
			||||||
		label: '单位',
 | 
							label: '单位',
 | 
				
			||||||
		filter: publicFormatter('unit_dict')
 | 
							filter: publicFormatter('unit_dict'),
 | 
				
			||||||
 | 
							width: 90,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'dailyCost',
 | 
							prop: 'dailyCost',
 | 
				
			||||||
		label: '每日消耗量'
 | 
							label: '每日消耗量',
 | 
				
			||||||
 | 
							width: 120,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'remark',
 | 
							prop: 'remark',
 | 
				
			||||||
		label: '备注'
 | 
							label: '备注',
 | 
				
			||||||
 | 
							width: 120,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	mixins: [basicPage],
 | 
						mixins: [basicPage, tableHeightMixin],
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			urlOptions: {
 | 
								urlOptions: {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,8 @@
 | 
				
			|||||||
			:table-props="tableProps"
 | 
								:table-props="tableProps"
 | 
				
			||||||
			:page="listQuery.pageNo"
 | 
								:page="listQuery.pageNo"
 | 
				
			||||||
			:limit="listQuery.pageSize"
 | 
								:limit="listQuery.pageSize"
 | 
				
			||||||
			:table-data="tableData">
 | 
								:table-data="tableData"
 | 
				
			||||||
 | 
								:max-height="tableH">
 | 
				
			||||||
			<method-btn
 | 
								<method-btn
 | 
				
			||||||
				v-if="tableBtn.length"
 | 
									v-if="tableBtn.length"
 | 
				
			||||||
				slot="handleBtn"
 | 
									slot="handleBtn"
 | 
				
			||||||
@@ -45,6 +46,7 @@ import {
 | 
				
			|||||||
	getCoreMajorPage,
 | 
						getCoreMajorPage,
 | 
				
			||||||
	deleteCoreMajor
 | 
						deleteCoreMajor
 | 
				
			||||||
} from '@/api/base/coreMajor';
 | 
					} from '@/api/base/coreMajor';
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const tableProps = [
 | 
					const tableProps = [
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -71,7 +73,7 @@ const tableProps = [
 | 
				
			|||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	mixins: [basicPage],
 | 
						mixins: [basicPage, tableHeightMixin],
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			urlOptions: {
 | 
								urlOptions: {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,15 +2,17 @@
 | 
				
			|||||||
 * @Author: zwq
 | 
					 * @Author: zwq
 | 
				
			||||||
 * @Date: 2021-11-18 14:16:25
 | 
					 * @Date: 2021-11-18 14:16:25
 | 
				
			||||||
 * @LastEditors: DY
 | 
					 * @LastEditors: DY
 | 
				
			||||||
 * @LastEditTime: 2024-03-13 13:54:01
 | 
					 * @LastEditTime: 2024-03-27 13:47:24
 | 
				
			||||||
 * @Description:
 | 
					 * @Description:
 | 
				
			||||||
-->
 | 
					-->
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
	<el-drawer
 | 
						<el-drawer
 | 
				
			||||||
		:visible.sync="visible"
 | 
							:visible.sync="visible"
 | 
				
			||||||
		:show-close="false"
 | 
							:show-close="false"
 | 
				
			||||||
		:wrapper-closable="isdetail"
 | 
							:wrapper-closable="true"
 | 
				
			||||||
		class="drawer"
 | 
							class="drawer"
 | 
				
			||||||
 | 
							:before-close="beforeClose"
 | 
				
			||||||
 | 
							@closed="$emit('destroy')"
 | 
				
			||||||
		size="60%">
 | 
							size="60%">
 | 
				
			||||||
		<small-title slot="title" :no-padding="true">
 | 
							<small-title slot="title" :no-padding="true">
 | 
				
			||||||
			{{ isdetail ? '详情' : !dataForm.id ? '新增' : '编辑' }}
 | 
								{{ isdetail ? '详情' : !dataForm.id ? '新增' : '编辑' }}
 | 
				
			||||||
@@ -262,6 +264,15 @@ export default {
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
	mounted() {},
 | 
						mounted() {},
 | 
				
			||||||
	methods: {
 | 
						methods: {
 | 
				
			||||||
 | 
							beforeClose(done) {
 | 
				
			||||||
 | 
								if (!this.isdetail) {
 | 
				
			||||||
 | 
									this.$confirm('确认关闭?')
 | 
				
			||||||
 | 
										.then(_ => {
 | 
				
			||||||
 | 
											done();
 | 
				
			||||||
 | 
										})
 | 
				
			||||||
 | 
										.catch(_ => {});
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		clearArea() {
 | 
							clearArea() {
 | 
				
			||||||
			this.$set(this.dataForm, 'area', 0)
 | 
								this.$set(this.dataForm, 'area', 0)
 | 
				
			||||||
			this.$set(this.dataForm, 'weight', 0)
 | 
								this.$set(this.dataForm, 'weight', 0)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,8 @@
 | 
				
			|||||||
			:table-props="tableProps"
 | 
								:table-props="tableProps"
 | 
				
			||||||
			:page="listQuery.pageNo"
 | 
								:page="listQuery.pageNo"
 | 
				
			||||||
			:limit="listQuery.pageSize"
 | 
								:limit="listQuery.pageSize"
 | 
				
			||||||
			:table-data="tableData">
 | 
								:table-data="tableData"
 | 
				
			||||||
 | 
								:max-height="tableH">
 | 
				
			||||||
			<method-btn
 | 
								<method-btn
 | 
				
			||||||
				v-if="tableBtn.length"
 | 
									v-if="tableBtn.length"
 | 
				
			||||||
				slot="handleBtn"
 | 
									slot="handleBtn"
 | 
				
			||||||
@@ -26,7 +27,8 @@
 | 
				
			|||||||
		<add-or-update
 | 
							<add-or-update
 | 
				
			||||||
			v-if="addOrUpdateVisible"
 | 
								v-if="addOrUpdateVisible"
 | 
				
			||||||
			ref="addOrUpdate"
 | 
								ref="addOrUpdate"
 | 
				
			||||||
			@refreshDataList="getDataList" />
 | 
								@refreshDataList="getDataList"
 | 
				
			||||||
 | 
								@destroy="addOrUpdateVisible = false" />
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -39,43 +41,58 @@ import {
 | 
				
			|||||||
	getCoreProductPage,
 | 
						getCoreProductPage,
 | 
				
			||||||
	deleteCoreProduct
 | 
						deleteCoreProduct
 | 
				
			||||||
} from '@/api/base/coreProduct';
 | 
					} from '@/api/base/coreProduct';
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const tableProps = [
 | 
					const tableProps = [
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'createTime',
 | 
							prop: 'createTime',
 | 
				
			||||||
		label: '添加时间',
 | 
							label: '添加时间',
 | 
				
			||||||
		filter: parseTime
 | 
							filter: parseTime,
 | 
				
			||||||
 | 
							width: 150,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'name',
 | 
							prop: 'name',
 | 
				
			||||||
		label: '产品名称'
 | 
							label: '产品名称',
 | 
				
			||||||
 | 
							width: 150,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'code',
 | 
							prop: 'code',
 | 
				
			||||||
		label: '产品编码'
 | 
							label: '产品编码',
 | 
				
			||||||
 | 
							width: 190,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'productType',
 | 
							prop: 'productType',
 | 
				
			||||||
		label: '产品类型',
 | 
							label: '产品类型',
 | 
				
			||||||
		filter: publicFormatter('product_type')
 | 
							filter: publicFormatter('product_type'),
 | 
				
			||||||
 | 
							width: 180,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'specifications',
 | 
							prop: 'specifications',
 | 
				
			||||||
		label: '规格'
 | 
							label: '规格',
 | 
				
			||||||
 | 
							width: 150,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'unit',
 | 
							prop: 'unit',
 | 
				
			||||||
		label: '单位',
 | 
							label: '单位',
 | 
				
			||||||
		filter: publicFormatter('unit_dict')
 | 
							filter: publicFormatter('unit_dict'),
 | 
				
			||||||
 | 
							width: 90,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'remark',
 | 
							prop: 'remark',
 | 
				
			||||||
		label: '备注',
 | 
							label: '备注',
 | 
				
			||||||
 | 
							width: 120,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	mixins: [basicPage],
 | 
						mixins: [basicPage, tableHeightMixin],
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			urlOptions: {
 | 
								urlOptions: {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,8 @@
 | 
				
			|||||||
			:table-props="tableProps"
 | 
								:table-props="tableProps"
 | 
				
			||||||
			:page="listQuery.pageNo"
 | 
								:page="listQuery.pageNo"
 | 
				
			||||||
			:limit="listQuery.pageSize"
 | 
								:limit="listQuery.pageSize"
 | 
				
			||||||
			:table-data="tableData">
 | 
								:table-data="tableData"
 | 
				
			||||||
 | 
								:max-height="tableH">
 | 
				
			||||||
			<method-btn
 | 
								<method-btn
 | 
				
			||||||
				v-if="tableBtn.length"
 | 
									v-if="tableBtn.length"
 | 
				
			||||||
				slot="handleBtn"
 | 
									slot="handleBtn"
 | 
				
			||||||
@@ -48,34 +49,47 @@ import {
 | 
				
			|||||||
import { getStatus } from '@/api/core/base/productionLine';
 | 
					import { getStatus } from '@/api/core/base/productionLine';
 | 
				
			||||||
import codeFilter from '../../core/mixins/code-filter';
 | 
					import codeFilter from '../../core/mixins/code-filter';
 | 
				
			||||||
import { publicFormatter } from '@/utils/dict';
 | 
					import { publicFormatter } from '@/utils/dict';
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const tableProps = [
 | 
					const tableProps = [
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'createTime',
 | 
							prop: 'createTime',
 | 
				
			||||||
		label: '添加时间',
 | 
							label: '添加时间',
 | 
				
			||||||
		filter: parseTime
 | 
							filter: parseTime,
 | 
				
			||||||
 | 
							width: 150,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'factoryName',
 | 
							prop: 'factoryName',
 | 
				
			||||||
		label: '工厂'
 | 
							label: '工厂',
 | 
				
			||||||
 | 
							width: 150,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'roomNameDict',
 | 
							prop: 'roomNameDict',
 | 
				
			||||||
		label: '车间名称',
 | 
							label: '车间名称',
 | 
				
			||||||
		filter: publicFormatter('workshop')
 | 
							filter: publicFormatter('workshop'),
 | 
				
			||||||
 | 
							width: 120,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'name',
 | 
							prop: 'name',
 | 
				
			||||||
		label: '产线名称'
 | 
							label: '产线名称',
 | 
				
			||||||
 | 
							width: 120,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'code',
 | 
							prop: 'code',
 | 
				
			||||||
		label: '产线编码'
 | 
							label: '产线编码',
 | 
				
			||||||
 | 
							width: 150,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'enabled',
 | 
							prop: 'enabled',
 | 
				
			||||||
		label: '当前状态',
 | 
							label: '当前状态',
 | 
				
			||||||
		filter: codeFilter('lineStatus')
 | 
							filter: codeFilter('lineStatus'),
 | 
				
			||||||
 | 
							width: 120,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	// {
 | 
						// {
 | 
				
			||||||
	// 	prop: 'tvalue',
 | 
						// 	prop: 'tvalue',
 | 
				
			||||||
@@ -83,16 +97,20 @@ const tableProps = [
 | 
				
			|||||||
	// },
 | 
						// },
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'description',
 | 
							prop: 'description',
 | 
				
			||||||
		label: '描述'
 | 
							label: '描述',
 | 
				
			||||||
 | 
							width: 120,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'remark',
 | 
							prop: 'remark',
 | 
				
			||||||
		label: '备注'
 | 
							label: '备注',
 | 
				
			||||||
 | 
							width: 120,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	mixins: [basicPage],
 | 
						mixins: [basicPage, tableHeightMixin],
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			urlOptions: {
 | 
								urlOptions: {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
 * @Author: zwq
 | 
					 * @Author: zwq
 | 
				
			||||||
 * @Date: 2021-11-18 14:16:25
 | 
					 * @Date: 2021-11-18 14:16:25
 | 
				
			||||||
 * @LastEditors: DY
 | 
					 * @LastEditors: DY
 | 
				
			||||||
 * @LastEditTime: 2023-11-22 10:27:43
 | 
					 * @LastEditTime: 2024-04-02 16:46:49
 | 
				
			||||||
 * @Description:
 | 
					 * @Description:
 | 
				
			||||||
-->
 | 
					-->
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
@@ -79,7 +79,7 @@ export default {
 | 
				
			|||||||
			dataRule: {
 | 
								dataRule: {
 | 
				
			||||||
        code: [{ required: true, message: "供应商编号不能为空", trigger: "blur" }],
 | 
					        code: [{ required: true, message: "供应商编号不能为空", trigger: "blur" }],
 | 
				
			||||||
        name: [{ required: true, message: "供应商名称不能为空", trigger: "blur" }],
 | 
					        name: [{ required: true, message: "供应商名称不能为空", trigger: "blur" }],
 | 
				
			||||||
				contact: [{ required: true, message: "联系人不能为空", trigger: "blur" }],
 | 
									// contact: [{ required: true, message: "联系人不能为空", trigger: "blur" }],
 | 
				
			||||||
				telephone: [
 | 
									telephone: [
 | 
				
			||||||
					{ required: false, trigger: "blur", message: "手机号不能为空" },
 | 
										{ required: false, trigger: "blur", message: "手机号不能为空" },
 | 
				
			||||||
          {
 | 
					          {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,8 @@
 | 
				
			|||||||
			:table-props="tableProps"
 | 
								:table-props="tableProps"
 | 
				
			||||||
			:page="listQuery.pageNo"
 | 
								:page="listQuery.pageNo"
 | 
				
			||||||
			:limit="listQuery.pageSize"
 | 
								:limit="listQuery.pageSize"
 | 
				
			||||||
			:table-data="tableData">
 | 
								:table-data="tableData"
 | 
				
			||||||
 | 
								:max-height="tableH">
 | 
				
			||||||
			<method-btn
 | 
								<method-btn
 | 
				
			||||||
				v-if="tableBtn.length"
 | 
									v-if="tableBtn.length"
 | 
				
			||||||
				slot="handleBtn"
 | 
									slot="handleBtn"
 | 
				
			||||||
@@ -45,41 +46,56 @@ import {
 | 
				
			|||||||
	getCoreSupplierPage,
 | 
						getCoreSupplierPage,
 | 
				
			||||||
	deleteCoreSupplier
 | 
						deleteCoreSupplier
 | 
				
			||||||
} from '@/api/base/coreSupplier';
 | 
					} from '@/api/base/coreSupplier';
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const tableProps = [
 | 
					const tableProps = [
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'createTime',
 | 
							prop: 'createTime',
 | 
				
			||||||
		label: '添加时间',
 | 
							label: '添加时间',
 | 
				
			||||||
		filter: parseTime
 | 
							filter: parseTime,
 | 
				
			||||||
 | 
							width: 150,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'code',
 | 
							prop: 'code',
 | 
				
			||||||
		label: '供应商编码'
 | 
							label: '供应商编码',
 | 
				
			||||||
 | 
							width: 150,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'name',
 | 
							prop: 'name',
 | 
				
			||||||
		label: '供应商名称'
 | 
							label: '供应商名称',
 | 
				
			||||||
 | 
							width: 180,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'contact',
 | 
							prop: 'contact',
 | 
				
			||||||
		label: '联系人'
 | 
							label: '联系人',
 | 
				
			||||||
 | 
							width: 180,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'telephone',
 | 
							prop: 'telephone',
 | 
				
			||||||
		label: '联系电话'
 | 
							label: '联系电话',
 | 
				
			||||||
 | 
							width: 150,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'address',
 | 
							prop: 'address',
 | 
				
			||||||
		label: '地址'
 | 
							label: '地址',
 | 
				
			||||||
 | 
							width: 180,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'remark',
 | 
							prop: 'remark',
 | 
				
			||||||
		label: '备注'
 | 
							label: '备注',
 | 
				
			||||||
 | 
							minWidth: 90,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	mixins: [basicPage],
 | 
						mixins: [basicPage, tableHeightMixin],
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			urlOptions: {
 | 
								urlOptions: {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
 * @Author: zwq
 | 
					 * @Author: zwq
 | 
				
			||||||
 * @Date: 2021-11-18 14:16:25
 | 
					 * @Date: 2021-11-18 14:16:25
 | 
				
			||||||
 * @LastEditors: DY
 | 
					 * @LastEditors: DY
 | 
				
			||||||
 * @LastEditTime: 2024-03-22 08:53:20
 | 
					 * @LastEditTime: 2024-04-08 10:21:46
 | 
				
			||||||
 * @Description:
 | 
					 * @Description:
 | 
				
			||||||
-->
 | 
					-->
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
@@ -214,7 +214,9 @@ export default {
 | 
				
			|||||||
								actualQuantity: this.dataForm.actualQuantity
 | 
													actualQuantity: this.dataForm.actualQuantity
 | 
				
			||||||
							}).then(response => {
 | 
												}).then(response => {
 | 
				
			||||||
								this.$modal.msgSuccess("操作成功!工单状态稍后将会更新!");
 | 
													this.$modal.msgSuccess("操作成功!工单状态稍后将会更新!");
 | 
				
			||||||
 | 
													if (tempList.length > 0) {
 | 
				
			||||||
									this.saveData(tempList)
 | 
														this.saveData(tempList)
 | 
				
			||||||
 | 
													}
 | 
				
			||||||
								this.visible = false;
 | 
													this.visible = false;
 | 
				
			||||||
								this.$emit("refreshDataList");
 | 
													this.$emit("refreshDataList");
 | 
				
			||||||
							});
 | 
												});
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
 * @Author: zwq
 | 
					 * @Author: zwq
 | 
				
			||||||
 * @Date: 2021-11-18 14:16:25
 | 
					 * @Date: 2021-11-18 14:16:25
 | 
				
			||||||
 * @LastEditors: DY
 | 
					 * @LastEditors: DY
 | 
				
			||||||
 * @LastEditTime: 2024-03-21 16:52:46
 | 
					 * @LastEditTime: 2024-04-08 14:27:29
 | 
				
			||||||
 * @Description:
 | 
					 * @Description:
 | 
				
			||||||
-->
 | 
					-->
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
@@ -182,7 +182,8 @@
 | 
				
			|||||||
					:table-props="tableProps"
 | 
										:table-props="tableProps"
 | 
				
			||||||
					:page="listQuery.pageNo"
 | 
										:page="listQuery.pageNo"
 | 
				
			||||||
					:limit="listQuery.pageSize"
 | 
										:limit="listQuery.pageSize"
 | 
				
			||||||
					:table-data="orderList">
 | 
										:table-data="orderList"
 | 
				
			||||||
 | 
										:max-height="tableH">
 | 
				
			||||||
					<method-btn
 | 
										<method-btn
 | 
				
			||||||
						v-if="!isdetail"
 | 
											v-if="!isdetail"
 | 
				
			||||||
						slot="handleBtn"
 | 
											slot="handleBtn"
 | 
				
			||||||
@@ -209,7 +210,8 @@
 | 
				
			|||||||
					:table-props="tableProps1"
 | 
										:table-props="tableProps1"
 | 
				
			||||||
					:page="listQuery1.pageNo"
 | 
										:page="listQuery1.pageNo"
 | 
				
			||||||
					:limit="listQuery1.pageSize"
 | 
										:limit="listQuery1.pageSize"
 | 
				
			||||||
					:table-data="materialList" />
 | 
										:table-data="materialList"
 | 
				
			||||||
 | 
										:max-height="tableH" />
 | 
				
			||||||
				<!-- <pagination
 | 
									<!-- <pagination
 | 
				
			||||||
					v-show="listQuery1.total > 0"
 | 
										v-show="listQuery1.total > 0"
 | 
				
			||||||
					:total="listQuery1.total"
 | 
										:total="listQuery1.total"
 | 
				
			||||||
@@ -235,6 +237,7 @@ import SmallTitle from './SmallTitle';
 | 
				
			|||||||
import { publicFormatter } from "@/utils/dict";
 | 
					import { publicFormatter } from "@/utils/dict";
 | 
				
			||||||
import { parseTime } from '@/utils/ruoyi'
 | 
					import { parseTime } from '@/utils/ruoyi'
 | 
				
			||||||
import topTabVue from '../../order/base/orderManage/components/topTab.vue';
 | 
					import topTabVue from '../../order/base/orderManage/components/topTab.vue';
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const tableBtn = [
 | 
					const tableBtn = [
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -292,9 +295,11 @@ const tableProps1 = [
 | 
				
			|||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
 | 
						mixins: [tableHeightMixin],
 | 
				
			||||||
	components: { SmallTitle, topTabVue },
 | 
						components: { SmallTitle, topTabVue },
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
 | 
								heightNum: 380,
 | 
				
			||||||
			tableBtn,
 | 
								tableBtn,
 | 
				
			||||||
			tableProps,
 | 
								tableProps,
 | 
				
			||||||
			tableProps1,
 | 
								tableProps1,
 | 
				
			||||||
@@ -455,7 +460,7 @@ export default {
 | 
				
			|||||||
				// this.listQuery.total = response.data.total;
 | 
									// this.listQuery.total = response.data.total;
 | 
				
			||||||
			});
 | 
								});
 | 
				
			||||||
			// 获取预使用原料列表
 | 
								// 获取预使用原料列表
 | 
				
			||||||
			console.log()
 | 
								console.log('111我看看', this.dataForm.materialMethod)
 | 
				
			||||||
			if (this.dataForm.id) {
 | 
								if (this.dataForm.id) {
 | 
				
			||||||
				if (this.dataForm.materialMethod === 1) {
 | 
									if (this.dataForm.materialMethod === 1) {
 | 
				
			||||||
					// 产品
 | 
										// 产品
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,8 @@
 | 
				
			|||||||
			:table-props="tableProps"
 | 
								:table-props="tableProps"
 | 
				
			||||||
			:page="listQuery.pageNo"
 | 
								:page="listQuery.pageNo"
 | 
				
			||||||
			:limit="listQuery.pageSize"
 | 
								:limit="listQuery.pageSize"
 | 
				
			||||||
			:table-data="tableData">
 | 
								:table-data="tableData"
 | 
				
			||||||
 | 
								:max-height="tableH">
 | 
				
			||||||
			<method-btn
 | 
								<method-btn
 | 
				
			||||||
				v-if="tableBtn.length"
 | 
									v-if="tableBtn.length"
 | 
				
			||||||
				slot="handleBtn"
 | 
									slot="handleBtn"
 | 
				
			||||||
@@ -62,7 +63,7 @@ import {
 | 
				
			|||||||
	getCoreWOList
 | 
						getCoreWOList
 | 
				
			||||||
} from '@/api/base/coreWorkOrder';
 | 
					} from '@/api/base/coreWorkOrder';
 | 
				
			||||||
import { publicFormatter } from '@/utils/dict';
 | 
					import { publicFormatter } from '@/utils/dict';
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const tableProps = [
 | 
					const tableProps = [
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -132,7 +133,7 @@ const tableProps = [
 | 
				
			|||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	mixins: [basicPage],
 | 
						mixins: [basicPage, tableHeightMixin],
 | 
				
			||||||
	components: {
 | 
						components: {
 | 
				
			||||||
		AddWorkOrder,
 | 
							AddWorkOrder,
 | 
				
			||||||
		AddOrUpdate,
 | 
							AddOrUpdate,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,8 @@
 | 
				
			|||||||
			:table-props="tableProps"
 | 
								:table-props="tableProps"
 | 
				
			||||||
			:page="listQuery.pageNo"
 | 
								:page="listQuery.pageNo"
 | 
				
			||||||
			:limit="listQuery.pageSize"
 | 
								:limit="listQuery.pageSize"
 | 
				
			||||||
			:table-data="tableData">
 | 
								:table-data="tableData"
 | 
				
			||||||
 | 
								:max-height="tableH">
 | 
				
			||||||
			<method-btn
 | 
								<method-btn
 | 
				
			||||||
				v-if="tableBtn.length"
 | 
									v-if="tableBtn.length"
 | 
				
			||||||
				slot="handleBtn"
 | 
									slot="handleBtn"
 | 
				
			||||||
@@ -46,20 +47,27 @@ import {
 | 
				
			|||||||
	deleteCoreWorker
 | 
						deleteCoreWorker
 | 
				
			||||||
} from '@/api/base/coreWorker';
 | 
					} from '@/api/base/coreWorker';
 | 
				
			||||||
import moment from 'moment';
 | 
					import moment from 'moment';
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const tableProps = [
 | 
					const tableProps = [
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'createTime',
 | 
							prop: 'createTime',
 | 
				
			||||||
		label: '创建时间',
 | 
							label: '创建时间',
 | 
				
			||||||
		filter: parseTime
 | 
							filter: parseTime,
 | 
				
			||||||
 | 
							width: 150,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'name',
 | 
							prop: 'name',
 | 
				
			||||||
		label: '姓名'
 | 
							label: '姓名',
 | 
				
			||||||
 | 
							width: 120,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'code',
 | 
							prop: 'code',
 | 
				
			||||||
		label: '员工号'
 | 
							label: '员工号',
 | 
				
			||||||
 | 
							width: 150,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'sex',
 | 
							prop: 'sex',
 | 
				
			||||||
@@ -70,32 +78,44 @@ const tableProps = [
 | 
				
			|||||||
		prop: 'entryTime',
 | 
							prop: 'entryTime',
 | 
				
			||||||
		label: '入职时间',
 | 
							label: '入职时间',
 | 
				
			||||||
		filter: (val) => val ? moment(val).format('yyyy-MM-DD') : '',
 | 
							filter: (val) => val ? moment(val).format('yyyy-MM-DD') : '',
 | 
				
			||||||
 | 
							width: 120,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'telephone',
 | 
							prop: 'telephone',
 | 
				
			||||||
		label: '联系电话'
 | 
							label: '联系电话',
 | 
				
			||||||
 | 
							width: 150,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'status',
 | 
							prop: 'status',
 | 
				
			||||||
		label: '状态',
 | 
							label: '状态',
 | 
				
			||||||
		filter: (val) => ['', '在职', '离职'][val]
 | 
							filter: (val) => ['', '在职', '离职'][val],
 | 
				
			||||||
 | 
							width: 120,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'departmentName',
 | 
							prop: 'departmentName',
 | 
				
			||||||
		label: '部门'
 | 
							label: '部门',
 | 
				
			||||||
 | 
							width: 120,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'majorName',
 | 
							prop: 'majorName',
 | 
				
			||||||
		label: '专业'
 | 
							label: '专业',
 | 
				
			||||||
 | 
							width: 150,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'remark',
 | 
							prop: 'remark',
 | 
				
			||||||
		label: '备注'
 | 
							label: '备注',
 | 
				
			||||||
 | 
							width: 150,
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	mixins: [basicPage],
 | 
						mixins: [basicPage, tableHeightMixin],
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			urlOptions: {
 | 
								urlOptions: {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,8 @@
 | 
				
			|||||||
			:table-props="tableProps"
 | 
								:table-props="tableProps"
 | 
				
			||||||
			:page="listQuery.pageNo"
 | 
								:page="listQuery.pageNo"
 | 
				
			||||||
			:limit="listQuery.pageSize"
 | 
								:limit="listQuery.pageSize"
 | 
				
			||||||
			:table-data="tableData">
 | 
								:table-data="tableData"
 | 
				
			||||||
 | 
								:max-height="tableH">
 | 
				
			||||||
			<method-btn
 | 
								<method-btn
 | 
				
			||||||
				v-if="tableBtn.length"
 | 
									v-if="tableBtn.length"
 | 
				
			||||||
				slot="handleBtn"
 | 
									slot="handleBtn"
 | 
				
			||||||
@@ -45,12 +46,14 @@ import {
 | 
				
			|||||||
	getCWSectionPage,
 | 
						getCWSectionPage,
 | 
				
			||||||
	deleteCWSection
 | 
						deleteCWSection
 | 
				
			||||||
} from '@/api/base/coreWorkshopSection';
 | 
					} from '@/api/base/coreWorkshopSection';
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const tableProps = [
 | 
					const tableProps = [
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'createTime',
 | 
							prop: 'createTime',
 | 
				
			||||||
		label: '添加时间',
 | 
							label: '添加时间',
 | 
				
			||||||
		filter: parseTime
 | 
							filter: parseTime,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'code',
 | 
							prop: 'code',
 | 
				
			||||||
@@ -70,12 +73,13 @@ const tableProps = [
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'remark',
 | 
							prop: 'remark',
 | 
				
			||||||
		label: '备注'
 | 
							label: '备注',
 | 
				
			||||||
 | 
							showOverflowtooltip: true
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	mixins: [basicPage],
 | 
						mixins: [basicPage, tableHeightMixin],
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			urlOptions: {
 | 
								urlOptions: {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,8 @@
 | 
				
			|||||||
			:table-props="tableProps"
 | 
								:table-props="tableProps"
 | 
				
			||||||
			:page="listQuery.pageNo"
 | 
								:page="listQuery.pageNo"
 | 
				
			||||||
			:limit="listQuery.pageSize"
 | 
								:limit="listQuery.pageSize"
 | 
				
			||||||
			:table-data="tableData">
 | 
								:table-data="tableData"
 | 
				
			||||||
 | 
								:max-height="tableH">
 | 
				
			||||||
			<method-btn
 | 
								<method-btn
 | 
				
			||||||
				v-if="tableBtn.length"
 | 
									v-if="tableBtn.length"
 | 
				
			||||||
				slot="handleBtn"
 | 
									slot="handleBtn"
 | 
				
			||||||
@@ -40,6 +41,7 @@ import {
 | 
				
			|||||||
} from '@/api/base/material';
 | 
					} from '@/api/base/material';
 | 
				
			||||||
import { listData } from "@/api/system/dict/data";
 | 
					import { listData } from "@/api/system/dict/data";
 | 
				
			||||||
import { publicFormatter } from '@/utils/dict';
 | 
					import { publicFormatter } from '@/utils/dict';
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const tableProps = [
 | 
					const tableProps = [
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -75,7 +77,7 @@ const tableProps = [
 | 
				
			|||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	mixins: [basicPage],
 | 
						mixins: [basicPage, tableHeightMixin],
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			urlOptions: {
 | 
								urlOptions: {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,8 @@
 | 
				
			|||||||
			:table-props="tableProps"
 | 
								:table-props="tableProps"
 | 
				
			||||||
			:page="listQuery.pageNo"
 | 
								:page="listQuery.pageNo"
 | 
				
			||||||
			:limit="listQuery.pageSize"
 | 
								:limit="listQuery.pageSize"
 | 
				
			||||||
			:table-data="tableData">
 | 
								:table-data="tableData"
 | 
				
			||||||
 | 
								:max-height="tableH">
 | 
				
			||||||
			<method-btn
 | 
								<method-btn
 | 
				
			||||||
				v-if="tableBtn.length"
 | 
									v-if="tableBtn.length"
 | 
				
			||||||
				slot="handleBtn"
 | 
									slot="handleBtn"
 | 
				
			||||||
@@ -38,6 +39,7 @@ import {
 | 
				
			|||||||
	getMaterialPBPage,
 | 
						getMaterialPBPage,
 | 
				
			||||||
	deleteMaterialPB
 | 
						deleteMaterialPB
 | 
				
			||||||
} from '@/api/base/materialProductBom';
 | 
					} from '@/api/base/materialProductBom';
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const tableProps = [
 | 
					const tableProps = [
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -55,7 +57,7 @@ const tableProps = [
 | 
				
			|||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	mixins: [basicPage],
 | 
						mixins: [basicPage, tableHeightMixin],
 | 
				
			||||||
	components: {
 | 
						components: {
 | 
				
			||||||
		AddOrUpdate,
 | 
							AddOrUpdate,
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,37 +2,20 @@
 | 
				
			|||||||
 * @Author: zwq
 | 
					 * @Author: zwq
 | 
				
			||||||
 * @Date: 2023-08-01 14:55:51
 | 
					 * @Date: 2023-08-01 14:55:51
 | 
				
			||||||
 * @LastEditors: zhp
 | 
					 * @LastEditors: zhp
 | 
				
			||||||
 * @LastEditTime: 2024-02-28 10:38:34
 | 
					 * @LastEditTime: 2024-04-08 11:49:33
 | 
				
			||||||
 * @Description:
 | 
					 * @Description:
 | 
				
			||||||
-->
 | 
					-->
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
  <div class="app-container">
 | 
					  <div class="app-container">
 | 
				
			||||||
		<search-bar
 | 
					    <search-bar :formConfigs="formConfig" ref="searchBarForm" @headBtnClick="buttonClick" />
 | 
				
			||||||
			:formConfigs="formConfig"
 | 
					    <base-table :max-height="tableH" :table-props="tableProps" :page="listQuery.pageNo" :limit="listQuery.pageSize"
 | 
				
			||||||
			ref="searchBarForm"
 | 
					 | 
				
			||||||
			@headBtnClick="buttonClick" />
 | 
					 | 
				
			||||||
		<base-table
 | 
					 | 
				
			||||||
			:table-props="tableProps"
 | 
					 | 
				
			||||||
			:page="listQuery.pageNo"
 | 
					 | 
				
			||||||
			:limit="listQuery.pageSize"
 | 
					 | 
				
			||||||
      :table-data="tableData">
 | 
					      :table-data="tableData">
 | 
				
			||||||
			<method-btn
 | 
					      <method-btn v-if="tableBtn.length" slot="handleBtn" :width="120" label="操作" :method-list="tableBtn"
 | 
				
			||||||
				v-if="tableBtn.length"
 | 
					 | 
				
			||||||
				slot="handleBtn"
 | 
					 | 
				
			||||||
				:width="120"
 | 
					 | 
				
			||||||
				label="操作"
 | 
					 | 
				
			||||||
				:method-list="tableBtn"
 | 
					 | 
				
			||||||
        @clickBtn="handleClick" />
 | 
					        @clickBtn="handleClick" />
 | 
				
			||||||
    </base-table>
 | 
					    </base-table>
 | 
				
			||||||
		<pagination
 | 
					    <pagination :limit.sync="listQuery.pageSize" :page.sync="listQuery.pageNo" :total="listQuery.total"
 | 
				
			||||||
			:limit.sync="listQuery.pageSize"
 | 
					 | 
				
			||||||
			:page.sync="listQuery.pageNo"
 | 
					 | 
				
			||||||
			:total="listQuery.total"
 | 
					 | 
				
			||||||
      @pagination="getDataList" />
 | 
					      @pagination="getDataList" />
 | 
				
			||||||
		<add-or-update
 | 
					    <add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList" />
 | 
				
			||||||
			v-if="addOrUpdateVisible"
 | 
					 | 
				
			||||||
			ref="addOrUpdate"
 | 
					 | 
				
			||||||
			@refreshDataList="getDataList" />
 | 
					 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -41,6 +24,7 @@ import AddOrUpdate from './add-or-updata';
 | 
				
			|||||||
// import unitDict from './unitDict';
 | 
					// import unitDict from './unitDict';
 | 
				
			||||||
import basicPage from '../mixins/basic-page';
 | 
					import basicPage from '../mixins/basic-page';
 | 
				
			||||||
import { parseTime } from '../mixins/code-filter';
 | 
					import { parseTime } from '../mixins/code-filter';
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
  getPackingModel,
 | 
					  getPackingModel,
 | 
				
			||||||
} from '@/api/base/printModel.js'
 | 
					} from '@/api/base/printModel.js'
 | 
				
			||||||
@@ -91,7 +75,7 @@ const tableProps = [
 | 
				
			|||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	mixins: [basicPage],
 | 
					  mixins: [basicPage, tableHeightMixin],
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			urlOptions: {
 | 
								urlOptions: {
 | 
				
			||||||
@@ -144,7 +128,7 @@ export default {
 | 
				
			|||||||
          param: 'createTime',
 | 
					          param: 'createTime',
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					type: 'button',
 | 
					          type: this.$auth.hasPermi('base:packaging-print-log:query') ? 'button' : '',
 | 
				
			||||||
					btnName: '搜索',
 | 
										btnName: '搜索',
 | 
				
			||||||
					name: 'search',
 | 
										name: 'search',
 | 
				
			||||||
					color: 'primary',
 | 
										color: 'primary',
 | 
				
			||||||
@@ -314,7 +298,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.workOrderId = val.workOrderId;
 | 
					          this.listQuery.workOrderId = val.workOrderId;
 | 
				
			||||||
          if (val.createTime && val.createTime.length != 0) {
 | 
					          if (val.createTime && val.createTime.length != 0) {
 | 
				
			||||||
            this.listQuery.createTime = val.createTime
 | 
					            this.listQuery.createTime = val.createTime
 | 
				
			||||||
@@ -329,7 +313,7 @@ export default {
 | 
				
			|||||||
				case 'reset':
 | 
									case 'reset':
 | 
				
			||||||
					this.$refs.searchBarForm.resetForm();
 | 
										this.$refs.searchBarForm.resetForm();
 | 
				
			||||||
					this.listQuery = {
 | 
										this.listQuery = {
 | 
				
			||||||
						pageSize: 10,
 | 
											pageSize: 20,
 | 
				
			||||||
						pageNo: 1,
 | 
											pageNo: 1,
 | 
				
			||||||
						total: 1,
 | 
											total: 1,
 | 
				
			||||||
					};
 | 
										};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,13 +2,14 @@
 | 
				
			|||||||
 * @Author: zwq
 | 
					 * @Author: zwq
 | 
				
			||||||
 * @Date: 2023-08-01 14:55:51
 | 
					 * @Date: 2023-08-01 14:55:51
 | 
				
			||||||
 * @LastEditors: zhp
 | 
					 * @LastEditors: zhp
 | 
				
			||||||
 * @LastEditTime: 2023-12-04 13:38:45
 | 
					 * @LastEditTime: 2024-04-03 15:08:38
 | 
				
			||||||
 * @Description:
 | 
					 * @Description:
 | 
				
			||||||
-->
 | 
					-->
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
  <div class="app-container">
 | 
					  <div class="app-container">
 | 
				
			||||||
    <search-bar :formConfigs="formConfig" ref="searchBarForm" @headBtnClick="buttonClick" />
 | 
					    <search-bar :formConfigs="formConfig" ref="searchBarForm" @headBtnClick="buttonClick" />
 | 
				
			||||||
    <base-table :table-props="tableProps" :page="listQuery.pageNo" :limit="listQuery.pageSize" :table-data="tableData">
 | 
					    <base-table :max-height="tableH" :table-props="tableProps" :page="listQuery.pageNo" :limit="listQuery.pageSize"
 | 
				
			||||||
 | 
					      :table-data="tableData">
 | 
				
			||||||
      <method-btn v-if="tableBtn.length" slot="handleBtn" :width="120" label="操作" :method-list="tableBtn"
 | 
					      <method-btn v-if="tableBtn.length" slot="handleBtn" :width="120" label="操作" :method-list="tableBtn"
 | 
				
			||||||
        @clickBtn="handleClick" />
 | 
					        @clickBtn="handleClick" />
 | 
				
			||||||
    </base-table>
 | 
					    </base-table>
 | 
				
			||||||
@@ -26,6 +27,8 @@ import basicPage from '../mixins/basic-page';
 | 
				
			|||||||
import { parseTime } from '../mixins/code-filter';
 | 
					import { parseTime } from '../mixins/code-filter';
 | 
				
			||||||
import printModelDesign from '../custom/index'
 | 
					import printModelDesign from '../custom/index'
 | 
				
			||||||
import { updatePackingModel, } from '@/api/base/printModel.js';
 | 
					import { updatePackingModel, } from '@/api/base/printModel.js';
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
  deletePackingModel,
 | 
					  deletePackingModel,
 | 
				
			||||||
  getPackingModelPage,
 | 
					  getPackingModelPage,
 | 
				
			||||||
@@ -59,7 +62,7 @@ const tableProps = [
 | 
				
			|||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	mixins: [basicPage],
 | 
					  mixins: [basicPage, tableHeightMixin],
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			urlOptions: {
 | 
								urlOptions: {
 | 
				
			||||||
@@ -162,7 +165,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.packagingCode = val.packagingCode;
 | 
					          this.listQuery.packagingCode = val.packagingCode;
 | 
				
			||||||
          this.listQuery.createTime = val.createTime;
 | 
					          this.listQuery.createTime = val.createTime;
 | 
				
			||||||
					this.getDataList();
 | 
										this.getDataList();
 | 
				
			||||||
@@ -170,7 +173,7 @@ export default {
 | 
				
			|||||||
				case 'reset':
 | 
									case 'reset':
 | 
				
			||||||
					this.$refs.searchBarForm.resetForm();
 | 
										this.$refs.searchBarForm.resetForm();
 | 
				
			||||||
					this.listQuery = {
 | 
										this.listQuery = {
 | 
				
			||||||
						pageSize: 10,
 | 
											pageSize: 20,
 | 
				
			||||||
						pageNo: 1,
 | 
											pageNo: 1,
 | 
				
			||||||
						total: 1,
 | 
											total: 1,
 | 
				
			||||||
					};
 | 
										};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,37 +2,20 @@
 | 
				
			|||||||
 * @Author: zwq
 | 
					 * @Author: zwq
 | 
				
			||||||
 * @Date: 2023-08-01 14:55:51
 | 
					 * @Date: 2023-08-01 14:55:51
 | 
				
			||||||
 * @LastEditors: zhp
 | 
					 * @LastEditors: zhp
 | 
				
			||||||
 * @LastEditTime: 2023-12-04 13:44:01
 | 
					 * @LastEditTime: 2024-04-03 15:09:06
 | 
				
			||||||
 * @Description:
 | 
					 * @Description:
 | 
				
			||||||
-->
 | 
					-->
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
  <div class="app-container">
 | 
					  <div class="app-container">
 | 
				
			||||||
		<search-bar
 | 
					    <search-bar :formConfigs="formConfig" ref="searchBarForm" @headBtnClick="buttonClick" />
 | 
				
			||||||
			:formConfigs="formConfig"
 | 
					    <base-table :max-height="tableH" :table-props="tableProps" :page="listQuery.pageNo" :limit="listQuery.pageSize"
 | 
				
			||||||
			ref="searchBarForm"
 | 
					 | 
				
			||||||
			@headBtnClick="buttonClick" />
 | 
					 | 
				
			||||||
		<base-table
 | 
					 | 
				
			||||||
			:table-props="tableProps"
 | 
					 | 
				
			||||||
			:page="listQuery.pageNo"
 | 
					 | 
				
			||||||
			:limit="listQuery.pageSize"
 | 
					 | 
				
			||||||
      :table-data="tableData">
 | 
					      :table-data="tableData">
 | 
				
			||||||
			<method-btn
 | 
					      <method-btn v-if="tableBtn.length" slot="handleBtn" :width="120" label="操作" :method-list="tableBtn"
 | 
				
			||||||
				v-if="tableBtn.length"
 | 
					 | 
				
			||||||
				slot="handleBtn"
 | 
					 | 
				
			||||||
				:width="120"
 | 
					 | 
				
			||||||
				label="操作"
 | 
					 | 
				
			||||||
				:method-list="tableBtn"
 | 
					 | 
				
			||||||
        @clickBtn="handleClick" />
 | 
					        @clickBtn="handleClick" />
 | 
				
			||||||
    </base-table>
 | 
					    </base-table>
 | 
				
			||||||
		<pagination
 | 
					    <pagination :limit.sync="listQuery.pageSize" :page.sync="listQuery.pageNo" :total="listQuery.total"
 | 
				
			||||||
			:limit.sync="listQuery.pageSize"
 | 
					 | 
				
			||||||
			:page.sync="listQuery.pageNo"
 | 
					 | 
				
			||||||
			:total="listQuery.total"
 | 
					 | 
				
			||||||
      @pagination="getDataList" />
 | 
					      @pagination="getDataList" />
 | 
				
			||||||
		<add-or-update
 | 
					    <add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList" />
 | 
				
			||||||
			v-if="addOrUpdateVisible"
 | 
					 | 
				
			||||||
			ref="addOrUpdate"
 | 
					 | 
				
			||||||
			@refreshDataList="getDataList" />
 | 
					 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -41,6 +24,7 @@ import AddOrUpdate from './add-or-updata';
 | 
				
			|||||||
// import unitDict from './unitDict';
 | 
					// import unitDict from './unitDict';
 | 
				
			||||||
import basicPage from '../mixins/basic-page';
 | 
					import basicPage from '../mixins/basic-page';
 | 
				
			||||||
import { parseTime } from '../mixins/code-filter';
 | 
					import { parseTime } from '../mixins/code-filter';
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
	deletePackingType,
 | 
						deletePackingType,
 | 
				
			||||||
  getPackingTypePage,
 | 
					  getPackingTypePage,
 | 
				
			||||||
@@ -64,7 +48,7 @@ const tableProps = [
 | 
				
			|||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	mixins: [basicPage],
 | 
					  mixins: [basicPage, tableHeightMixin],
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			urlOptions: {
 | 
								urlOptions: {
 | 
				
			||||||
@@ -154,7 +138,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.packagingCode = val.packagingCode;
 | 
					          this.listQuery.packagingCode = val.packagingCode;
 | 
				
			||||||
          this.listQuery.createTime = val.createTime;
 | 
					          this.listQuery.createTime = val.createTime;
 | 
				
			||||||
					this.getDataList();
 | 
										this.getDataList();
 | 
				
			||||||
@@ -162,7 +146,7 @@ export default {
 | 
				
			|||||||
				case 'reset':
 | 
									case 'reset':
 | 
				
			||||||
					this.$refs.searchBarForm.resetForm();
 | 
										this.$refs.searchBarForm.resetForm();
 | 
				
			||||||
					this.listQuery = {
 | 
										this.listQuery = {
 | 
				
			||||||
						pageSize: 10,
 | 
											pageSize: 20,
 | 
				
			||||||
						pageNo: 1,
 | 
											pageNo: 1,
 | 
				
			||||||
						total: 1,
 | 
											total: 1,
 | 
				
			||||||
					};
 | 
										};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -106,6 +106,10 @@ export default {
 | 
				
			|||||||
		activeIndex(val) {
 | 
							activeIndex(val) {
 | 
				
			||||||
			this.initChart(val);
 | 
								this.initChart(val);
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							daterange(val) {
 | 
				
			||||||
 | 
								console.log('222', val)
 | 
				
			||||||
 | 
								this.templateOption.xAxis.data = val
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	methods: {
 | 
						methods: {
 | 
				
			||||||
		/**
 | 
							/**
 | 
				
			||||||
@@ -124,8 +128,8 @@ export default {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		/** 初始化/设置 图表 */
 | 
							/** 初始化/设置 图表 */
 | 
				
			||||||
		initChart(val) {
 | 
							initChart(val) {
 | 
				
			||||||
			console.log('tableData', this.tableData);
 | 
					 | 
				
			||||||
			if (!this.chart) this.chart = echarts.init(this.$refs.chartDiv);
 | 
								if (!this.chart) this.chart = echarts.init(this.$refs.chartDiv);
 | 
				
			||||||
 | 
								this.chart.clear();
 | 
				
			||||||
			switch (val) {
 | 
								switch (val) {
 | 
				
			||||||
				case 0:
 | 
									case 0:
 | 
				
			||||||
					const eqCt = this.tableData.map((row) => ({
 | 
										const eqCt = this.tableData.map((row) => ({
 | 
				
			||||||
@@ -139,7 +143,7 @@ export default {
 | 
				
			|||||||
						...this.templateOption,
 | 
											...this.templateOption,
 | 
				
			||||||
						yAxis: { ...this.templateOption.yAxis, name: '设备CT' },
 | 
											yAxis: { ...this.templateOption.yAxis, name: '设备CT' },
 | 
				
			||||||
						series: eqCt,
 | 
											series: eqCt,
 | 
				
			||||||
					});
 | 
										}, true);
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
				case 1:
 | 
									case 1:
 | 
				
			||||||
					const eqTt = this.tableData.map((row) => ({
 | 
										const eqTt = this.tableData.map((row) => ({
 | 
				
			||||||
@@ -153,7 +157,7 @@ export default {
 | 
				
			|||||||
						...this.templateOption,
 | 
											...this.templateOption,
 | 
				
			||||||
						yAxis: { ...this.templateOption.yAxis, name: '设备TT' },
 | 
											yAxis: { ...this.templateOption.yAxis, name: '设备TT' },
 | 
				
			||||||
						series: eqTt,
 | 
											series: eqTt,
 | 
				
			||||||
					});
 | 
										}, true);
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
				case 2:
 | 
									case 2:
 | 
				
			||||||
					const plCt = this.tableData.map((row) => ({
 | 
										const plCt = this.tableData.map((row) => ({
 | 
				
			||||||
@@ -167,7 +171,7 @@ export default {
 | 
				
			|||||||
						...this.templateOption,
 | 
											...this.templateOption,
 | 
				
			||||||
						yAxis: { ...this.templateOption.yAxis, name: '产线CT' },
 | 
											yAxis: { ...this.templateOption.yAxis, name: '产线CT' },
 | 
				
			||||||
						series: plCt,
 | 
											series: plCt,
 | 
				
			||||||
					});
 | 
										}, true);
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
				case 3:
 | 
									case 3:
 | 
				
			||||||
					const plTt = this.tableData.map((row) => ({
 | 
										const plTt = this.tableData.map((row) => ({
 | 
				
			||||||
@@ -181,9 +185,10 @@ export default {
 | 
				
			|||||||
						...this.templateOption,
 | 
											...this.templateOption,
 | 
				
			||||||
						yAxis: { ...this.templateOption.yAxis, name: '产线TT' },
 | 
											yAxis: { ...this.templateOption.yAxis, name: '产线TT' },
 | 
				
			||||||
						series: plTt,
 | 
											series: plTt,
 | 
				
			||||||
					});
 | 
										}, true);
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
				default:
 | 
									default:
 | 
				
			||||||
 | 
										this.activeIndex = 0
 | 
				
			||||||
					const eqCt2 = this.tableData.map((row) => ({
 | 
										const eqCt2 = this.tableData.map((row) => ({
 | 
				
			||||||
						name: row.equName,
 | 
											name: row.equName,
 | 
				
			||||||
						type: 'line',
 | 
											type: 'line',
 | 
				
			||||||
@@ -195,7 +200,7 @@ export default {
 | 
				
			|||||||
						...this.templateOption,
 | 
											...this.templateOption,
 | 
				
			||||||
						yAxis: { ...this.templateOption.yAxis, name: '设备CT' },
 | 
											yAxis: { ...this.templateOption.yAxis, name: '设备CT' },
 | 
				
			||||||
						series: eqCt2,
 | 
											series: eqCt2,
 | 
				
			||||||
					});
 | 
										}, true);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,13 +18,15 @@
 | 
				
			|||||||
						:page="1"
 | 
											:page="1"
 | 
				
			||||||
						:limit="999"
 | 
											:limit="999"
 | 
				
			||||||
						:table-props="tableProps"
 | 
											:table-props="tableProps"
 | 
				
			||||||
						:table-data="tableData" />
 | 
											:table-data="tableData"
 | 
				
			||||||
 | 
											:max-height="tableH" />
 | 
				
			||||||
					<div v-if="tableData.length == 0" class="no-data-bg"></div>
 | 
										<div v-if="tableData.length == 0" class="no-data-bg"></div>
 | 
				
			||||||
				</el-tab-pane>
 | 
									</el-tab-pane>
 | 
				
			||||||
				<el-tab-pane :label="'\u3000产线平衡分析图\u3000'" name="graph">
 | 
									<el-tab-pane :label="'\u3000产线平衡分析图\u3000'" name="graph">
 | 
				
			||||||
					<div class="graph" style="height: 800px">
 | 
										<div class="graph" style="height: 800px">
 | 
				
			||||||
						<!-- graph  -->
 | 
											<!-- graph  -->
 | 
				
			||||||
						<AnalysisChart
 | 
											<AnalysisChart
 | 
				
			||||||
 | 
												ref="analysisChart"
 | 
				
			||||||
							v-if="activeName == 'graph'"
 | 
												v-if="activeName == 'graph'"
 | 
				
			||||||
							:table-data="tableData"
 | 
												:table-data="tableData"
 | 
				
			||||||
							:daterange="dateArr"></AnalysisChart>
 | 
												:daterange="dateArr"></AnalysisChart>
 | 
				
			||||||
@@ -47,13 +49,14 @@ import BalanceChart from '../balanceChart';
 | 
				
			|||||||
import basicPageMixin from '@/mixins/lb/basicPageMixin';
 | 
					import basicPageMixin from '@/mixins/lb/basicPageMixin';
 | 
				
			||||||
import AnalysisChart from './chart.vue';
 | 
					import AnalysisChart from './chart.vue';
 | 
				
			||||||
import { parseTime } from '@/utils/ruoyi'
 | 
					import { parseTime } from '@/utils/ruoyi'
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	components: {
 | 
						components: {
 | 
				
			||||||
		BalanceChart,
 | 
							BalanceChart,
 | 
				
			||||||
		AnalysisChart,
 | 
							AnalysisChart,
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	mixins: [basicPageMixin],
 | 
						mixins: [basicPageMixin, tableHeightMixin],
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			activeName: 'table',
 | 
								activeName: 'table',
 | 
				
			||||||
@@ -176,6 +179,11 @@ export default {
 | 
				
			|||||||
			// const p = this.tableProps
 | 
								// const p = this.tableProps
 | 
				
			||||||
			// const d = this.tableData
 | 
								// const d = this.tableData
 | 
				
			||||||
			// debugger;
 | 
								// debugger;
 | 
				
			||||||
 | 
								if (this.activeName == 'graph') {
 | 
				
			||||||
 | 
									this.$nextTick(() => {
 | 
				
			||||||
 | 
										this.$refs['analysisChart'].initChart()
 | 
				
			||||||
 | 
									})
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			this.ready = true;
 | 
								this.ready = true;
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,8 @@
 | 
				
			|||||||
			:table-props="tableProps"
 | 
								:table-props="tableProps"
 | 
				
			||||||
			:page="listQuery.pageNo"
 | 
								:page="listQuery.pageNo"
 | 
				
			||||||
			:limit="listQuery.pageSize"
 | 
								:limit="listQuery.pageSize"
 | 
				
			||||||
			:table-data="tableData">
 | 
								:table-data="tableData"
 | 
				
			||||||
 | 
								:max-height="tableH">
 | 
				
			||||||
			<method-btn
 | 
								<method-btn
 | 
				
			||||||
				v-if="tableBtn.length"
 | 
									v-if="tableBtn.length"
 | 
				
			||||||
				slot="handleBtn"
 | 
									slot="handleBtn"
 | 
				
			||||||
@@ -41,6 +42,7 @@
 | 
				
			|||||||
import AddOrUpdate from './add-or-updata';
 | 
					import AddOrUpdate from './add-or-updata';
 | 
				
			||||||
import basicPage from '../../mixins/basic-page';
 | 
					import basicPage from '../../mixins/basic-page';
 | 
				
			||||||
import { parseTime } from '../../mixins/code-filter';
 | 
					import { parseTime } from '../../mixins/code-filter';
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
	deleteFactory,
 | 
						deleteFactory,
 | 
				
			||||||
	getFactoryPage
 | 
						getFactoryPage
 | 
				
			||||||
@@ -71,7 +73,7 @@ const tableProps = [
 | 
				
			|||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	mixins: [basicPage],
 | 
						mixins: [basicPage, tableHeightMixin],
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			urlOptions: {
 | 
								urlOptions: {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,7 +17,7 @@ export default {
 | 
				
			|||||||
      },
 | 
					      },
 | 
				
			||||||
      tableData: [],
 | 
					      tableData: [],
 | 
				
			||||||
      listQuery: {
 | 
					      listQuery: {
 | 
				
			||||||
        pageSize: 10,
 | 
					        pageSize: 20,
 | 
				
			||||||
        pageNo: 1,
 | 
					        pageNo: 1,
 | 
				
			||||||
        total: 1,
 | 
					        total: 1,
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,13 +27,16 @@
 | 
				
			|||||||
import { getPdlDataOneDay } from '@/api/core/monitoring/data24'
 | 
					import { getPdlDataOneDay } from '@/api/core/monitoring/data24'
 | 
				
			||||||
import { parseTime } from '../../mixins/code-filter';
 | 
					import { parseTime } from '../../mixins/code-filter';
 | 
				
			||||||
import { getSchedulingMonitoringRecord1 } from '@/api/monitoring/teamProduction'
 | 
					import { getSchedulingMonitoringRecord1 } from '@/api/monitoring/teamProduction'
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	name: 'productionLineData24',
 | 
						name: 'productionLineData24',
 | 
				
			||||||
 | 
						mixins: [tableHeightMixin],
 | 
				
			||||||
	components: {},
 | 
						components: {},
 | 
				
			||||||
	props: {},
 | 
						props: {},
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
 | 
								heightNum: 240,
 | 
				
			||||||
      urlOptions: {
 | 
					      urlOptions: {
 | 
				
			||||||
				getDataListURL: getPdlDataOneDay
 | 
									getDataListURL: getPdlDataOneDay
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
@@ -56,9 +59,9 @@ export default {
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
	computed: {},
 | 
						computed: {},
 | 
				
			||||||
	mounted() {
 | 
						mounted() {
 | 
				
			||||||
		window.addEventListener('resize', () => {
 | 
							// window.addEventListener('resize', () => {
 | 
				
			||||||
      this.tableH = this.tableHeight(240)
 | 
					    //   this.tableH = this.tableHeight(240)
 | 
				
			||||||
    })
 | 
					    // })
 | 
				
			||||||
		this.getList();
 | 
							this.getList();
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	methods: {
 | 
						methods: {
 | 
				
			||||||
@@ -115,7 +118,7 @@ export default {
 | 
				
			|||||||
		/** 把 list 里的数据转换成 tableProps 对应的格式 */
 | 
							/** 把 list 里的数据转换成 tableProps 对应的格式 */
 | 
				
			||||||
		convertList(list) {
 | 
							convertList(list) {
 | 
				
			||||||
			// let sectionArr= []
 | 
								// let sectionArr= []
 | 
				
			||||||
			let temp = Object.values(list.datamap)                             
 | 
								let temp = list.datamap ? Object.values(list?.datamap) : []
 | 
				
			||||||
			console.log('111', temp)
 | 
								console.log('111', temp)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			temp.forEach(item => {
 | 
								temp.forEach(item => {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,6 +32,7 @@ import {
 | 
				
			|||||||
import { getEnergyTypeListAll } from '@/api/base/energyType';
 | 
					import { getEnergyTypeListAll } from '@/api/base/energyType';
 | 
				
			||||||
import { publicFormatter } from '@/utils/dict';
 | 
					import { publicFormatter } from '@/utils/dict';
 | 
				
			||||||
import moment from 'moment';
 | 
					import moment from 'moment';
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const tableProps = [
 | 
					const tableProps = [
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -61,7 +62,7 @@ const tableProps = [
 | 
				
			|||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	mixins: [basicPage],
 | 
						mixins: [basicPage,tableHeightMixin],
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			urlOptions: {
 | 
								urlOptions: {
 | 
				
			||||||
@@ -70,7 +71,6 @@ export default {
 | 
				
			|||||||
			},
 | 
								},
 | 
				
			||||||
			tableData: [],
 | 
								tableData: [],
 | 
				
			||||||
			tableProps,
 | 
								tableProps,
 | 
				
			||||||
      tableH: this.tableHeight(260),
 | 
					 | 
				
			||||||
			drawerVisible: false,
 | 
								drawerVisible: false,
 | 
				
			||||||
			formConfig: [
 | 
								formConfig: [
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
@@ -92,13 +92,15 @@ export default {
 | 
				
			|||||||
					param: 'searchTime',
 | 
										param: 'searchTime',
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					type: 'button',
 | 
										type: this.$auth.hasPermi('extend:cost-energy-search:query')
 | 
				
			||||||
 | 
											? 'button'
 | 
				
			||||||
 | 
											: '',
 | 
				
			||||||
					btnName: '查询',
 | 
										btnName: '查询',
 | 
				
			||||||
					name: 'search',
 | 
										name: 'search',
 | 
				
			||||||
					color: 'primary',
 | 
										color: 'primary',
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					type: this.$auth.hasPermi('cost:energyCost:export')
 | 
										type: this.$auth.hasPermi('extend:cost-energy-search:export')
 | 
				
			||||||
						? 'button'
 | 
											? 'button'
 | 
				
			||||||
						: '',
 | 
											: '',
 | 
				
			||||||
					btnName: '导出',
 | 
										btnName: '导出',
 | 
				
			||||||
@@ -111,9 +113,6 @@ export default {
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
	components: {},
 | 
						components: {},
 | 
				
			||||||
	created() {
 | 
						created() {
 | 
				
			||||||
    window.addEventListener('resize', () => {
 | 
					 | 
				
			||||||
      this.tableH = this.tableHeight(260)
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
		getEnergyTypeListAll().then((response) => {
 | 
							getEnergyTypeListAll().then((response) => {
 | 
				
			||||||
			this.formConfig[0].selectOptions = response.data;
 | 
								this.formConfig[0].selectOptions = response.data;
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,6 +32,7 @@ import {
 | 
				
			|||||||
import { getEnergyTypeListAll } from '@/api/base/energyType';
 | 
					import { getEnergyTypeListAll } from '@/api/base/energyType';
 | 
				
			||||||
import { publicFormatter } from '@/utils/dict';
 | 
					import { publicFormatter } from '@/utils/dict';
 | 
				
			||||||
import moment from 'moment';
 | 
					import moment from 'moment';
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const tableProps = [
 | 
					const tableProps = [
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -71,7 +72,7 @@ const tableProps = [
 | 
				
			|||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	mixins: [basicPage],
 | 
						mixins: [basicPage,tableHeightMixin],
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			urlOptions: {
 | 
								urlOptions: {
 | 
				
			||||||
@@ -80,7 +81,6 @@ export default {
 | 
				
			|||||||
			},
 | 
								},
 | 
				
			||||||
			tableData: [],
 | 
								tableData: [],
 | 
				
			||||||
			tableProps,
 | 
								tableProps,
 | 
				
			||||||
      tableH: this.tableHeight(260),
 | 
					 | 
				
			||||||
			drawerVisible: false,
 | 
								drawerVisible: false,
 | 
				
			||||||
			formConfig: [
 | 
								formConfig: [
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
@@ -116,13 +116,15 @@ export default {
 | 
				
			|||||||
					defaultSelect: [],
 | 
										defaultSelect: [],
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					type: 'button',
 | 
										type: this.$auth.hasPermi('extend:cost-enery-auto-report:query')
 | 
				
			||||||
 | 
											? 'button'
 | 
				
			||||||
 | 
											: '',
 | 
				
			||||||
					btnName: '查询',
 | 
										btnName: '查询',
 | 
				
			||||||
					name: 'search',
 | 
										name: 'search',
 | 
				
			||||||
					color: 'primary',
 | 
										color: 'primary',
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					type: this.$auth.hasPermi('cost:energyCostHis:export')
 | 
										type: this.$auth.hasPermi('extend:cost-enery-auto-report:export')
 | 
				
			||||||
						? 'button'
 | 
											? 'button'
 | 
				
			||||||
						: '',
 | 
											: '',
 | 
				
			||||||
					btnName: '导出',
 | 
										btnName: '导出',
 | 
				
			||||||
@@ -135,9 +137,6 @@ export default {
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
	components: {},
 | 
						components: {},
 | 
				
			||||||
	created() {
 | 
						created() {
 | 
				
			||||||
    window.addEventListener('resize', () => {
 | 
					 | 
				
			||||||
      this.tableH = this.tableHeight(260)
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
		const end = new Date();
 | 
							const end = new Date();
 | 
				
			||||||
		const start = new Date();
 | 
							const start = new Date();
 | 
				
			||||||
		start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
 | 
							start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,6 +53,7 @@ import {
 | 
				
			|||||||
} from '@/api/cost/costMaterialSet';
 | 
					} from '@/api/cost/costMaterialSet';
 | 
				
			||||||
import { getHotMaterialList } from '@/api/base/coreHotMaterial';
 | 
					import { getHotMaterialList } from '@/api/base/coreHotMaterial';
 | 
				
			||||||
import { publicFormatter } from '@/utils/dict';
 | 
					import { publicFormatter } from '@/utils/dict';
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const tableProps = [
 | 
					const tableProps = [
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -91,7 +92,7 @@ const tableProps = [
 | 
				
			|||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	mixins: [basicPage],
 | 
						mixins: [basicPage,tableHeightMixin],
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			urlOptions: {
 | 
								urlOptions: {
 | 
				
			||||||
@@ -99,15 +100,14 @@ export default {
 | 
				
			|||||||
				deleteURL: deleteCostMaterialSet,
 | 
									deleteURL: deleteCostMaterialSet,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			tableProps,
 | 
								tableProps,
 | 
				
			||||||
      tableH: this.tableHeight(260),
 | 
					 | 
				
			||||||
			tableBtn: [
 | 
								tableBtn: [
 | 
				
			||||||
				this.$auth.hasPermi(`cost:rawMaterialConfig:update`)
 | 
									this.$auth.hasPermi(`extend:cost-material-set:update`)
 | 
				
			||||||
					? {
 | 
										? {
 | 
				
			||||||
							type: 'edit',
 | 
												type: 'edit',
 | 
				
			||||||
							btnName: '编辑',
 | 
												btnName: '编辑',
 | 
				
			||||||
					  }
 | 
										  }
 | 
				
			||||||
					: undefined,
 | 
										: undefined,
 | 
				
			||||||
				this.$auth.hasPermi(`cost:rawMaterialConfig:delete`)
 | 
									this.$auth.hasPermi(`extend:cost-material-set:delete`)
 | 
				
			||||||
					? {
 | 
										? {
 | 
				
			||||||
							type: 'delete',
 | 
												type: 'delete',
 | 
				
			||||||
							btnName: '删除',
 | 
												btnName: '删除',
 | 
				
			||||||
@@ -124,16 +124,22 @@ export default {
 | 
				
			|||||||
					filterable: true,
 | 
										filterable: true,
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					type: 'button',
 | 
										type: this.$auth.hasPermi('extend:cost-material-set:query')
 | 
				
			||||||
 | 
											? 'button'
 | 
				
			||||||
 | 
											: '',
 | 
				
			||||||
					btnName: '查询',
 | 
										btnName: '查询',
 | 
				
			||||||
					name: 'search',
 | 
										name: 'search',
 | 
				
			||||||
					color: 'primary',
 | 
										color: 'primary',
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					type: 'separate',
 | 
										type:
 | 
				
			||||||
 | 
											this.$auth.hasPermi('extend:cost-material-set:create') &&
 | 
				
			||||||
 | 
											this.$auth.hasPermi('extend:cost-material-set:query')
 | 
				
			||||||
 | 
												? 'separate'
 | 
				
			||||||
 | 
												: '',
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					type: this.$auth.hasPermi('cost:rawMaterialConfig:create')
 | 
										type: this.$auth.hasPermi('extend:cost-material-set:create')
 | 
				
			||||||
						? 'button'
 | 
											? 'button'
 | 
				
			||||||
						: '',
 | 
											: '',
 | 
				
			||||||
					btnName: '新增',
 | 
										btnName: '新增',
 | 
				
			||||||
@@ -148,9 +154,6 @@ export default {
 | 
				
			|||||||
		AddOrUpdate,
 | 
							AddOrUpdate,
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	created() {
 | 
						created() {
 | 
				
			||||||
    window.addEventListener('resize', () => {
 | 
					 | 
				
			||||||
      this.tableH = this.tableHeight(260)
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
		getHotMaterialList().then((response) => {
 | 
							getHotMaterialList().then((response) => {
 | 
				
			||||||
			this.formConfig[0].selectOptions = response.data;
 | 
								this.formConfig[0].selectOptions = response.data;
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,6 +32,7 @@ import {
 | 
				
			|||||||
import { getHotMaterialList } from '@/api/base/coreHotMaterial';
 | 
					import { getHotMaterialList } from '@/api/base/coreHotMaterial';
 | 
				
			||||||
import { publicFormatter } from '@/utils/dict';
 | 
					import { publicFormatter } from '@/utils/dict';
 | 
				
			||||||
import moment from 'moment';
 | 
					import moment from 'moment';
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const tableProps = [
 | 
					const tableProps = [
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -66,7 +67,7 @@ const tableProps = [
 | 
				
			|||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	mixins: [basicPage],
 | 
						mixins: [basicPage,tableHeightMixin],
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			urlOptions: {
 | 
								urlOptions: {
 | 
				
			||||||
@@ -75,7 +76,6 @@ export default {
 | 
				
			|||||||
			},
 | 
								},
 | 
				
			||||||
			tableData: [],
 | 
								tableData: [],
 | 
				
			||||||
			tableProps,
 | 
								tableProps,
 | 
				
			||||||
      tableH: this.tableHeight(260),
 | 
					 | 
				
			||||||
			drawerVisible: false,
 | 
								drawerVisible: false,
 | 
				
			||||||
			formConfig: [
 | 
								formConfig: [
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
@@ -97,13 +97,15 @@ export default {
 | 
				
			|||||||
					param: 'searchTime',
 | 
										param: 'searchTime',
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					type: 'button',
 | 
										type: this.$auth.hasPermi('extend:cost-material-search:query')
 | 
				
			||||||
 | 
											? 'button'
 | 
				
			||||||
 | 
											: '',
 | 
				
			||||||
					btnName: '查询',
 | 
										btnName: '查询',
 | 
				
			||||||
					name: 'search',
 | 
										name: 'search',
 | 
				
			||||||
					color: 'primary',
 | 
										color: 'primary',
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					type: this.$auth.hasPermi('cost:rawMaterialCost:export')
 | 
										type: this.$auth.hasPermi('extend:cost-material-search:export')
 | 
				
			||||||
						? 'button'
 | 
											? 'button'
 | 
				
			||||||
						: '',
 | 
											: '',
 | 
				
			||||||
					btnName: '导出',
 | 
										btnName: '导出',
 | 
				
			||||||
@@ -116,9 +118,6 @@ export default {
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
	components: {},
 | 
						components: {},
 | 
				
			||||||
	created() {
 | 
						created() {
 | 
				
			||||||
    window.addEventListener('resize', () => {
 | 
					 | 
				
			||||||
      this.tableH = this.tableHeight(260)
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
		getHotMaterialList().then((response) => {
 | 
							getHotMaterialList().then((response) => {
 | 
				
			||||||
			this.formConfig[0].selectOptions = response.data;
 | 
								this.formConfig[0].selectOptions = response.data;
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,6 +32,7 @@ import {
 | 
				
			|||||||
import { getHotMaterialList } from '@/api/base/coreHotMaterial';
 | 
					import { getHotMaterialList } from '@/api/base/coreHotMaterial';
 | 
				
			||||||
import { publicFormatter } from '@/utils/dict';
 | 
					import { publicFormatter } from '@/utils/dict';
 | 
				
			||||||
import moment from 'moment';
 | 
					import moment from 'moment';
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const tableProps = [
 | 
					const tableProps = [
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -70,7 +71,7 @@ const tableProps = [
 | 
				
			|||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	mixins: [basicPage],
 | 
						mixins: [basicPage,tableHeightMixin],
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			urlOptions: {
 | 
								urlOptions: {
 | 
				
			||||||
@@ -79,7 +80,6 @@ export default {
 | 
				
			|||||||
			},
 | 
								},
 | 
				
			||||||
			tableData: [],
 | 
								tableData: [],
 | 
				
			||||||
			tableProps,
 | 
								tableProps,
 | 
				
			||||||
      tableH: this.tableHeight(260),
 | 
					 | 
				
			||||||
			drawerVisible: false,
 | 
								drawerVisible: false,
 | 
				
			||||||
			formConfig: [
 | 
								formConfig: [
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
@@ -115,13 +115,15 @@ export default {
 | 
				
			|||||||
					defaultSelect: [],
 | 
										defaultSelect: [],
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					type: 'button',
 | 
										type: this.$auth.hasPermi('extend:cost-material-auto-report:query')
 | 
				
			||||||
 | 
											? 'button'
 | 
				
			||||||
 | 
											: '',
 | 
				
			||||||
					btnName: '查询',
 | 
										btnName: '查询',
 | 
				
			||||||
					name: 'search',
 | 
										name: 'search',
 | 
				
			||||||
					color: 'primary',
 | 
										color: 'primary',
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					type: this.$auth.hasPermi('cost:rawMaterialCostHis:export')
 | 
										type: this.$auth.hasPermi('extend:cost-material-auto-report:export')
 | 
				
			||||||
						? 'button'
 | 
											? 'button'
 | 
				
			||||||
						: '',
 | 
											: '',
 | 
				
			||||||
					btnName: '导出',
 | 
										btnName: '导出',
 | 
				
			||||||
@@ -134,9 +136,6 @@ export default {
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
	components: {},
 | 
						components: {},
 | 
				
			||||||
	created() {
 | 
						created() {
 | 
				
			||||||
    window.addEventListener('resize', () => {
 | 
					 | 
				
			||||||
      this.tableH = this.tableHeight(260)
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
		const end = new Date();
 | 
							const end = new Date();
 | 
				
			||||||
		const start = new Date();
 | 
							const start = new Date();
 | 
				
			||||||
		start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
 | 
							start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,13 +1,17 @@
 | 
				
			|||||||
<template>
 | 
					<template>
 | 
				
			||||||
  <div style="height: 370px;">
 | 
						<div style="height: 370px">
 | 
				
			||||||
		<NotMsg v-show="notMsg" />
 | 
							<NotMsg v-show="notMsg" />
 | 
				
			||||||
    <div id="numRateChart" class="num-rate-chart" style="width:900px;height:420px;" v-show='!notMsg'></div>
 | 
							<div
 | 
				
			||||||
 | 
								id="numRateChart"
 | 
				
			||||||
 | 
								class="num-rate-chart"
 | 
				
			||||||
 | 
								style="width: 900px; height: 420px"
 | 
				
			||||||
 | 
								v-show="!notMsg"></div>
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
<script>
 | 
					<script>
 | 
				
			||||||
import * as echarts from 'echarts';
 | 
					import * as echarts from 'echarts';
 | 
				
			||||||
import resize from './../mixins/resize'
 | 
					import resize from './../mixins/resize';
 | 
				
			||||||
import NotMsg from './../components/NotMsg'
 | 
					import NotMsg from './../components/NotMsg';
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	name: 'NumRateChart',
 | 
						name: 'NumRateChart',
 | 
				
			||||||
	mixins: [resize],
 | 
						mixins: [resize],
 | 
				
			||||||
@@ -15,65 +19,88 @@ export default {
 | 
				
			|||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			chart: null,
 | 
								chart: null,
 | 
				
			||||||
      notMsg:true
 | 
								notMsg: true,
 | 
				
			||||||
    }
 | 
							};
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	computed: {
 | 
						computed: {
 | 
				
			||||||
		productline() {
 | 
							productline() {
 | 
				
			||||||
      return this.$store.state.websocket.productline
 | 
								return this.$store.state.websocket.productline;
 | 
				
			||||||
    }
 | 
							},
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	watch: {
 | 
						watch: {
 | 
				
			||||||
		productline: {
 | 
							productline: {
 | 
				
			||||||
			handler(newVal, oldVal) {
 | 
								handler(newVal, oldVal) {
 | 
				
			||||||
				if (newVal === oldVal) {
 | 
									if (newVal === oldVal) {
 | 
				
			||||||
          return false
 | 
										return false;
 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        this.updateChart()
 | 
					 | 
				
			||||||
        this.$emit('emitFun')
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
									this.updateChart();
 | 
				
			||||||
 | 
									this.$emit('emitFun');
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	mounted() {
 | 
						mounted() {
 | 
				
			||||||
		this.$el.addEventListener('resize', () => {
 | 
							this.$el.addEventListener('resize', () => {
 | 
				
			||||||
			console.log('resziing.....');
 | 
								console.log('resziing.....');
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
    this.updateChart()
 | 
							this.updateChart();
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	methods: {
 | 
						methods: {
 | 
				
			||||||
		updateChart() {
 | 
							updateChart() {
 | 
				
			||||||
			if (this.productline && this.productline.length > 0) {
 | 
								if (this.productline && this.productline.length > 0) {
 | 
				
			||||||
        this.notMsg = false
 | 
									this.notMsg = false;
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
        this.notMsg = true
 | 
									this.notMsg = true;
 | 
				
			||||||
        return
 | 
									return;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
      let xData = []
 | 
								let xData = [];
 | 
				
			||||||
      let outputNum = []
 | 
								let outputNum = [];
 | 
				
			||||||
      let passRate = []
 | 
								let passRate = [];
 | 
				
			||||||
      this.productline && this.productline.length > 0 && this.productline.map(item => {
 | 
								for (let i = 0; i < this.productline.length - 1; i++) {
 | 
				
			||||||
        if ((item.lineName).includes('D')) {
 | 
									// 二次循环,注意:再减去外层的循环次数,向后依次两两相互比较转换;
 | 
				
			||||||
          xData.push(item.lineName)
 | 
									for (let j = 0; j < this.productline.length - i - 1; j++) {
 | 
				
			||||||
          outputNum.push(item.outputNum)
 | 
										// 当前一个值大于后一个值
 | 
				
			||||||
          passRate.push(item.passRate?item.passRate*100:null)
 | 
										if (
 | 
				
			||||||
 | 
											this.productline[j].lineName.substr(
 | 
				
			||||||
 | 
												this.productline[j].lineName.length - 1,
 | 
				
			||||||
 | 
												1
 | 
				
			||||||
 | 
											) >
 | 
				
			||||||
 | 
											this.productline[j + 1].lineName.substr(
 | 
				
			||||||
 | 
												this.productline[j + 1].lineName.length - 1,
 | 
				
			||||||
 | 
												1
 | 
				
			||||||
 | 
											)
 | 
				
			||||||
 | 
										) {
 | 
				
			||||||
 | 
											// 定义变量,以赋值的形式前后交换,直到换到最小的在前面,左右再无比较,则循环结束形成排序结果
 | 
				
			||||||
 | 
											let temp = this.productline[j];
 | 
				
			||||||
 | 
											this.productline[j] = this.productline[j + 1];
 | 
				
			||||||
 | 
											this.productline[j + 1] = temp;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
      })
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								this.productline &&
 | 
				
			||||||
 | 
									this.productline.length > 0 &&
 | 
				
			||||||
 | 
									this.productline.map((item) => {
 | 
				
			||||||
 | 
										if (item.lineName.includes('D')) {
 | 
				
			||||||
 | 
											xData.push(item.lineName);
 | 
				
			||||||
 | 
											outputNum.push(item.outputNum);
 | 
				
			||||||
 | 
											passRate.push(item.passRate);
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									});
 | 
				
			||||||
			if (
 | 
								if (
 | 
				
			||||||
				this.chart !== null &&
 | 
									this.chart !== null &&
 | 
				
			||||||
				this.chart !== '' &&
 | 
									this.chart !== '' &&
 | 
				
			||||||
				this.chart !== undefined
 | 
									this.chart !== undefined
 | 
				
			||||||
			) {
 | 
								) {
 | 
				
			||||||
        this.chart.dispose()
 | 
									this.chart.dispose();
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			this.chart = echarts.init(document.getElementById('numRateChart'));
 | 
								this.chart = echarts.init(document.getElementById('numRateChart'));
 | 
				
			||||||
			var option = {
 | 
								var option = {
 | 
				
			||||||
				grid: { top: 82, right: 60, bottom: 20, left: 90 },
 | 
									grid: { top: 82, right: 60, bottom: 20, left: 90 },
 | 
				
			||||||
				tooltip: {
 | 
									tooltip: {
 | 
				
			||||||
          trigger: "axis",
 | 
										trigger: 'axis',
 | 
				
			||||||
					axisPointer: {
 | 
										axisPointer: {
 | 
				
			||||||
            type: "shadow",
 | 
											type: 'shadow',
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
          className: "num-rate-chart-tooltip"
 | 
										className: 'num-rate-chart-tooltip',
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				legend: {
 | 
									legend: {
 | 
				
			||||||
					itemWidth: 10,
 | 
										itemWidth: 10,
 | 
				
			||||||
@@ -83,32 +110,32 @@ export default {
 | 
				
			|||||||
					icon: 'rect',
 | 
										icon: 'rect',
 | 
				
			||||||
					data: [
 | 
										data: [
 | 
				
			||||||
						{ name: '产线产量', itemStyle: { color: '#364BFE' } },
 | 
											{ name: '产线产量', itemStyle: { color: '#364BFE' } },
 | 
				
			||||||
            {name:'良品率',itemStyle:{color:'#FFCB59'}}
 | 
											{ name: '良品率', itemStyle: { color: '#FFCB59' } },
 | 
				
			||||||
					],
 | 
										],
 | 
				
			||||||
					textStyle: {
 | 
										textStyle: {
 | 
				
			||||||
            color: "#DFF1FE",
 | 
											color: '#DFF1FE',
 | 
				
			||||||
						fontSize: 12,
 | 
											fontSize: 12,
 | 
				
			||||||
          }
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				xAxis: [
 | 
									xAxis: [
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
						type: 'category',
 | 
											type: 'category',
 | 
				
			||||||
						data: xData,
 | 
											data: xData,
 | 
				
			||||||
						axisLabel: {
 | 
											axisLabel: {
 | 
				
			||||||
              color: "#fff",
 | 
												color: '#fff',
 | 
				
			||||||
							fontSize: 12,
 | 
												fontSize: 12,
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
						axisPointer: {
 | 
											axisPointer: {
 | 
				
			||||||
              type: 'shadow'
 | 
												type: 'shadow',
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
						axisTick: { show: false },
 | 
											axisTick: { show: false },
 | 
				
			||||||
						axisLine: {
 | 
											axisLine: {
 | 
				
			||||||
							lineStyle: {
 | 
												lineStyle: {
 | 
				
			||||||
								width: 1,
 | 
													width: 1,
 | 
				
			||||||
                color: "#213259",
 | 
													color: '#213259',
 | 
				
			||||||
 | 
												},
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
				],
 | 
									],
 | 
				
			||||||
				yAxis: [
 | 
									yAxis: [
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
@@ -120,21 +147,20 @@ export default {
 | 
				
			|||||||
							align: 'right',
 | 
												align: 'right',
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
						axisLabel: {
 | 
											axisLabel: {
 | 
				
			||||||
              color: "#fff",
 | 
												color: '#fff',
 | 
				
			||||||
							fontSize: 12,
 | 
												fontSize: 12,
 | 
				
			||||||
              formatter: '{value}'
 | 
					 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
						axisLine: {
 | 
											axisLine: {
 | 
				
			||||||
							show: true,
 | 
												show: true,
 | 
				
			||||||
							lineStyle: {
 | 
												lineStyle: {
 | 
				
			||||||
                color: "#213259",
 | 
													color: '#213259',
 | 
				
			||||||
							},
 | 
												},
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
						splitLine: {
 | 
											splitLine: {
 | 
				
			||||||
							lineStyle: {
 | 
												lineStyle: {
 | 
				
			||||||
                color: "#213259a0",
 | 
													color: '#213259a0',
 | 
				
			||||||
 | 
												},
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
						type: 'value',
 | 
											type: 'value',
 | 
				
			||||||
@@ -145,24 +171,22 @@ export default {
 | 
				
			|||||||
							align: 'LEFT',
 | 
												align: 'LEFT',
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
						axisLabel: {
 | 
											axisLabel: {
 | 
				
			||||||
              color: "#fff",
 | 
												color: '#fff',
 | 
				
			||||||
							fontSize: 12,
 | 
												fontSize: 12,
 | 
				
			||||||
              formatter: () =>{
 | 
												formatter: '{value}%',
 | 
				
			||||||
                return value ? '{value} %': '-'
 | 
					 | 
				
			||||||
              }
 | 
					 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
						axisLine: {
 | 
											axisLine: {
 | 
				
			||||||
							show: true,
 | 
												show: true,
 | 
				
			||||||
							lineStyle: {
 | 
												lineStyle: {
 | 
				
			||||||
              color: "#213259",
 | 
													color: '#213259',
 | 
				
			||||||
							},
 | 
												},
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
						splitLine: {
 | 
											splitLine: {
 | 
				
			||||||
							lineStyle: {
 | 
												lineStyle: {
 | 
				
			||||||
              color: "#213259a0",
 | 
													color: '#213259a0',
 | 
				
			||||||
 | 
												},
 | 
				
			||||||
 | 
											},
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
				],
 | 
									],
 | 
				
			||||||
				series: [
 | 
									series: [
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
@@ -171,16 +195,16 @@ export default {
 | 
				
			|||||||
						tooltip: {
 | 
											tooltip: {
 | 
				
			||||||
							valueFormatter: function (value) {
 | 
												valueFormatter: function (value) {
 | 
				
			||||||
								return value;
 | 
													return value;
 | 
				
			||||||
              }
 | 
												},
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
						barWidth: 20,
 | 
											barWidth: 20,
 | 
				
			||||||
						itemStyle: {
 | 
											itemStyle: {
 | 
				
			||||||
							color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
 | 
												color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
 | 
				
			||||||
								{ offset: 0, color: '#5CB7FF' },
 | 
													{ offset: 0, color: '#5CB7FF' },
 | 
				
			||||||
                { offset: 1, color: '#364BFE' }
 | 
													{ offset: 1, color: '#364BFE' },
 | 
				
			||||||
              ])
 | 
												]),
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
            data: outputNum
 | 
											data: outputNum,
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
						name: '良品率',
 | 
											name: '良品率',
 | 
				
			||||||
@@ -189,31 +213,31 @@ export default {
 | 
				
			|||||||
						tooltip: {
 | 
											tooltip: {
 | 
				
			||||||
							valueFormatter: function (value) {
 | 
												valueFormatter: function (value) {
 | 
				
			||||||
								return value ? value + '%' : '-';
 | 
													return value ? value + '%' : '-';
 | 
				
			||||||
              }
 | 
												},
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
						itemStyle: {
 | 
											itemStyle: {
 | 
				
			||||||
              color: '#FFD160'
 | 
												color: '#FFD160',
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
						areaStyle: {
 | 
											areaStyle: {
 | 
				
			||||||
							color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
 | 
												color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
 | 
				
			||||||
                { offset: 0, color: '#FFCB59' + "40" },
 | 
													{ offset: 0, color: '#FFCB59' + '40' },
 | 
				
			||||||
                { offset: 0.5, color: '#FFCB59' + "20" },
 | 
													{ offset: 0.5, color: '#FFCB59' + '20' },
 | 
				
			||||||
                { offset: 1, color: '#FFCB59' + "00" },
 | 
													{ offset: 1, color: '#FFCB59' + '00' },
 | 
				
			||||||
							]),
 | 
												]),
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
						lineStyle: {
 | 
											lineStyle: {
 | 
				
			||||||
                width: 1
 | 
												width: 1,
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
						symbol: 'circle',
 | 
											symbol: 'circle',
 | 
				
			||||||
						symbolSize: 5,
 | 
											symbolSize: 5,
 | 
				
			||||||
            data: passRate
 | 
											data: passRate,
 | 
				
			||||||
          }
 | 
										},
 | 
				
			||||||
        ]
 | 
									],
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								option && this.chart.setOption(option);
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
      option && this.chart.setOption(option)
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
<style scoped lang="scss">
 | 
					<style scoped lang="scss">
 | 
				
			||||||
.num-rate-chart {
 | 
					.num-rate-chart {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,9 +1,17 @@
 | 
				
			|||||||
<template>
 | 
					<template>
 | 
				
			||||||
  <div style="flex: 1;">
 | 
						<div style="flex: 1">
 | 
				
			||||||
    <Container name="各工序缺陷汇总" size="middle" style="">
 | 
							<Container
 | 
				
			||||||
      <TimePrompt class="timeShow" :timestr="timestr" />
 | 
								name="各工序缺陷汇总"
 | 
				
			||||||
      <div style="padding: 5px 10px;">
 | 
								size="middle"
 | 
				
			||||||
        <dv-scroll-board :config="config" style="width:575px;height:380px" ref='defectScrollBoard'/>
 | 
								style="">
 | 
				
			||||||
 | 
								<TimePrompt
 | 
				
			||||||
 | 
									class="timeShow"
 | 
				
			||||||
 | 
									:timestr="timestr" />
 | 
				
			||||||
 | 
								<div style="padding: 5px 10px">
 | 
				
			||||||
 | 
									<dv-scroll-board
 | 
				
			||||||
 | 
										:config="config"
 | 
				
			||||||
 | 
										style="width: 575px; height: 380px"
 | 
				
			||||||
 | 
										ref="defectScrollBoard" />
 | 
				
			||||||
			</div>
 | 
								</div>
 | 
				
			||||||
		</Container>
 | 
							</Container>
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
@@ -11,14 +19,14 @@
 | 
				
			|||||||
<script>
 | 
					<script>
 | 
				
			||||||
import Container from '../components/Container.vue';
 | 
					import Container from '../components/Container.vue';
 | 
				
			||||||
import TimePrompt from '../components/TimePrompt';
 | 
					import TimePrompt from '../components/TimePrompt';
 | 
				
			||||||
import { switchShowTime } from '../utils'
 | 
					import { switchShowTime } from '../utils';
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	name: 'DefectSum',
 | 
						name: 'DefectSum',
 | 
				
			||||||
	components: { Container, TimePrompt },
 | 
						components: { Container, TimePrompt },
 | 
				
			||||||
	computed: {
 | 
						computed: {
 | 
				
			||||||
		defectSum() {
 | 
							defectSum() {
 | 
				
			||||||
      return this.$store.state.websocket.defectSum
 | 
								return this.$store.state.websocket.defectSum;
 | 
				
			||||||
    }
 | 
							},
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
@@ -30,14 +38,23 @@ export default {
 | 
				
			|||||||
				evenRowBGC: 'rgba(14, 32, 62, 0.8)',
 | 
									evenRowBGC: 'rgba(14, 32, 62, 0.8)',
 | 
				
			||||||
				columnWidth: [60],
 | 
									columnWidth: [60],
 | 
				
			||||||
				align: ['center'],
 | 
									align: ['center'],
 | 
				
			||||||
        data: [],
 | 
									data: [
 | 
				
			||||||
        // data: [[1, 'Y61', '破损','10','气泡']],
 | 
										//假数据
 | 
				
			||||||
        rowNum: 10
 | 
										[1, 'D61', '成型', '3片', '细长泡'],
 | 
				
			||||||
      }
 | 
										[2, 'D62', '组合落板', '4片', '细长泡'],
 | 
				
			||||||
    }
 | 
										[3, 'D61', '磨边', '6片', '开口泡'],
 | 
				
			||||||
 | 
										[4, 'D63', '清洗', '5片', '结石'],
 | 
				
			||||||
 | 
										[5, 'D64', '打孔', '2片', '结石'],
 | 
				
			||||||
 | 
										[6, 'D63', '成型', '7片', '开口泡'],
 | 
				
			||||||
 | 
										[7, 'D61', '上片', '8片', '结石'],
 | 
				
			||||||
 | 
									],
 | 
				
			||||||
 | 
									// data: [],
 | 
				
			||||||
 | 
									rowNum: 10,
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	mounted() {
 | 
						mounted() {
 | 
				
			||||||
    this.timestr = switchShowTime('日')
 | 
							this.timestr = switchShowTime('日');
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	watch: {
 | 
						watch: {
 | 
				
			||||||
		defectSum: {
 | 
							defectSum: {
 | 
				
			||||||
@@ -47,15 +64,15 @@ export default {
 | 
				
			|||||||
					item.productionLineName,
 | 
										item.productionLineName,
 | 
				
			||||||
					item.sectionName,
 | 
										item.sectionName,
 | 
				
			||||||
					item.count,
 | 
										item.count,
 | 
				
			||||||
          item.inspectionTypeName
 | 
										item.inspectionTypeName,
 | 
				
			||||||
				]);
 | 
									]);
 | 
				
			||||||
        this.config.data = outArr
 | 
									this.config.data = outArr;
 | 
				
			||||||
        this.$refs['defectScrollBoard'].updateRows(outArr)
 | 
									this.$refs['defectScrollBoard'].updateRows(outArr);
 | 
				
			||||||
        this.timestr = switchShowTime('日')
 | 
									this.timestr = switchShowTime('日');
 | 
				
			||||||
			}
 | 
								},
 | 
				
			||||||
		}
 | 
							},
 | 
				
			||||||
  }
 | 
						},
 | 
				
			||||||
}
 | 
					};
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
<style lang='scss' scoped>
 | 
					<style lang='scss' scoped>
 | 
				
			||||||
.timeShow {
 | 
					.timeShow {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,24 +1,23 @@
 | 
				
			|||||||
<!-- 
 | 
					 | 
				
			||||||
    filename: MaterialCost.vue
 | 
					 | 
				
			||||||
    author: liubin
 | 
					 | 
				
			||||||
    date: 2023-12-06 09:09:27
 | 
					 | 
				
			||||||
    description: 
 | 
					 | 
				
			||||||
-->
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
	<Container name="原料用量统计" size="middle" style="">
 | 
						<Container
 | 
				
			||||||
		<div style="flex: 1; display: flex; gap: 8px;flex-direction: column;">
 | 
							name="原料用量统计"
 | 
				
			||||||
 | 
							size="middle"
 | 
				
			||||||
 | 
							style="">
 | 
				
			||||||
 | 
							<div style="flex: 1; display: flex; gap: 8px; flex-direction: column">
 | 
				
			||||||
			<div
 | 
								<div
 | 
				
			||||||
				class="absolute"
 | 
									class="absolute"
 | 
				
			||||||
				style="
 | 
									style="
 | 
				
			||||||
					flex:3;
 | 
										flex: 2;
 | 
				
			||||||
					padding: 12px 12px 0 12px;
 | 
										padding: 12px 12px 0 12px;
 | 
				
			||||||
					display: grid;
 | 
										display: grid;
 | 
				
			||||||
					grid-template-columns: repeat(3, 1fr);
 | 
										grid-template-columns: repeat(2, 1fr);
 | 
				
			||||||
					grid-auto-rows: repeat(4, 1fr);
 | 
										grid-auto-rows: repeat(4, 1fr);
 | 
				
			||||||
					gap: 8px;
 | 
										gap: 8px;
 | 
				
			||||||
				">
 | 
									">
 | 
				
			||||||
				<ShadowRect v-for="(item, index) in materialMsg1" :key="index" :rounded="false">
 | 
									<ShadowRect
 | 
				
			||||||
 | 
										v-for="(item, index) in materialMsg"
 | 
				
			||||||
 | 
										:key="index"
 | 
				
			||||||
 | 
										:rounded="false">
 | 
				
			||||||
					<div
 | 
										<div
 | 
				
			||||||
						class="material"
 | 
											class="material"
 | 
				
			||||||
						style="
 | 
											style="
 | 
				
			||||||
@@ -30,33 +29,15 @@
 | 
				
			|||||||
							align-items: center;
 | 
												align-items: center;
 | 
				
			||||||
							justify-content: center;
 | 
												justify-content: center;
 | 
				
			||||||
						">
 | 
											">
 | 
				
			||||||
						<span style="color: #0ee8e4; font-weight: 500; font-size: 32px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">
 | 
											<span
 | 
				
			||||||
							{{item.materialUsed}}
 | 
					 | 
				
			||||||
						</span>
 | 
					 | 
				
			||||||
						<span style="color: #fff; font-size: 16px; letter-spacing: 1px">
 | 
					 | 
				
			||||||
							- {{item.materialName}}/kg-
 | 
					 | 
				
			||||||
						</span>
 | 
					 | 
				
			||||||
					</div>
 | 
					 | 
				
			||||||
				</ShadowRect>
 | 
					 | 
				
			||||||
			</div>
 | 
					 | 
				
			||||||
			<div style="flex:1;
 | 
					 | 
				
			||||||
					padding: 0 12px 12px 12px;
 | 
					 | 
				
			||||||
					display: grid;
 | 
					 | 
				
			||||||
					grid-template-columns: repeat(4, 1fr);
 | 
					 | 
				
			||||||
					gap: 8px;">
 | 
					 | 
				
			||||||
				<ShadowRect v-for="(item, index) in materialMsg2" :key="index" :rounded="false">
 | 
					 | 
				
			||||||
					<div
 | 
					 | 
				
			||||||
						class="material"
 | 
					 | 
				
			||||||
							style="
 | 
												style="
 | 
				
			||||||
							flex: 1;
 | 
													color: #0ee8e4;
 | 
				
			||||||
							padding-bottom: 3px;
 | 
													font-weight: 500;
 | 
				
			||||||
							display: flex;
 | 
													font-size: 32px;
 | 
				
			||||||
							flex-direction: column;
 | 
													white-space: nowrap;
 | 
				
			||||||
							gap: 4px;
 | 
													overflow: hidden;
 | 
				
			||||||
							align-items: center;
 | 
													text-overflow: ellipsis;
 | 
				
			||||||
							justify-content: center;
 | 
					 | 
				
			||||||
							">
 | 
												">
 | 
				
			||||||
						<span style="color: #0ee8e4; font-weight: 500; font-size: 32px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">
 | 
					 | 
				
			||||||
							{{ item.materialUsed }}
 | 
												{{ item.materialUsed }}
 | 
				
			||||||
						</span>
 | 
											</span>
 | 
				
			||||||
						<span style="color: #fff; font-size: 16px; letter-spacing: 1px">
 | 
											<span style="color: #fff; font-size: 16px; letter-spacing: 1px">
 | 
				
			||||||
@@ -66,7 +47,6 @@
 | 
				
			|||||||
				</ShadowRect>
 | 
									</ShadowRect>
 | 
				
			||||||
			</div>
 | 
								</div>
 | 
				
			||||||
		</div>
 | 
							</div>
 | 
				
			||||||
		
 | 
					 | 
				
			||||||
	</Container>
 | 
						</Container>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -81,12 +61,9 @@ export default {
 | 
				
			|||||||
		return {};
 | 
							return {};
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	computed: {
 | 
						computed: {
 | 
				
			||||||
		materialMsg1() {
 | 
							materialMsg() {
 | 
				
			||||||
			return this.$store.state.websocket.material.slice(0,9)
 | 
								return this.$store.state.websocket.material;
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		materialMsg2() {
 | 
					 | 
				
			||||||
			return this.$store.state.websocket.material.slice(9)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	methods: {},
 | 
						methods: {},
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,31 +4,27 @@
 | 
				
			|||||||
		<search-bar
 | 
							<search-bar
 | 
				
			||||||
			:formConfigs="formConfig"
 | 
								:formConfigs="formConfig"
 | 
				
			||||||
			ref="searchBarForm"
 | 
								ref="searchBarForm"
 | 
				
			||||||
      @headBtnClick="buttonClick"
 | 
								@headBtnClick="buttonClick" />
 | 
				
			||||||
    />
 | 
					 | 
				
			||||||
		<!-- 列表 -->
 | 
							<!-- 列表 -->
 | 
				
			||||||
		<base-table
 | 
							<base-table
 | 
				
			||||||
			:page="queryParams.pageNo"
 | 
								:page="queryParams.pageNo"
 | 
				
			||||||
			:limit="queryParams.pageSize"
 | 
								:limit="queryParams.pageSize"
 | 
				
			||||||
			:table-props="tableProps"
 | 
								:table-props="tableProps"
 | 
				
			||||||
			:table-data="list"
 | 
								:table-data="list"
 | 
				
			||||||
      :max-height="tableH"
 | 
								:max-height="tableH">
 | 
				
			||||||
    >
 | 
					 | 
				
			||||||
			<method-btn
 | 
								<method-btn
 | 
				
			||||||
				v-if="tableBtn.length"
 | 
									v-if="tableBtn.length"
 | 
				
			||||||
				slot="handleBtn"
 | 
									slot="handleBtn"
 | 
				
			||||||
				:width="160"
 | 
									:width="160"
 | 
				
			||||||
				label="操作"
 | 
									label="操作"
 | 
				
			||||||
				:method-list="tableBtn"
 | 
									:method-list="tableBtn"
 | 
				
			||||||
        @clickBtn="handleClick"
 | 
									@clickBtn="handleClick" />
 | 
				
			||||||
      />
 | 
					 | 
				
			||||||
		</base-table>
 | 
							</base-table>
 | 
				
			||||||
		<pagination
 | 
							<pagination
 | 
				
			||||||
			:page.sync="queryParams.pageNo"
 | 
								:page.sync="queryParams.pageNo"
 | 
				
			||||||
			:limit.sync="queryParams.pageSize"
 | 
								:limit.sync="queryParams.pageSize"
 | 
				
			||||||
			:total="total"
 | 
								:total="total"
 | 
				
			||||||
      @pagination="getList"
 | 
								@pagination="getList" />
 | 
				
			||||||
    />
 | 
					 | 
				
			||||||
		<!-- 新增 -->
 | 
							<!-- 新增 -->
 | 
				
			||||||
		<base-dialog
 | 
							<base-dialog
 | 
				
			||||||
			:dialogTitle="addOrEditTitle"
 | 
								:dialogTitle="addOrEditTitle"
 | 
				
			||||||
@@ -36,9 +32,10 @@
 | 
				
			|||||||
			@cancel="handleCancel"
 | 
								@cancel="handleCancel"
 | 
				
			||||||
			@confirm="handleConfirm"
 | 
								@confirm="handleConfirm"
 | 
				
			||||||
			:before-close="handleCancel"
 | 
								:before-close="handleCancel"
 | 
				
			||||||
			width="50%"
 | 
								width="50%">
 | 
				
			||||||
    >
 | 
								<add-or-update
 | 
				
			||||||
			<add-or-update ref="addOrUpdate" @successSubmit="successSubmit" />
 | 
									ref="addOrUpdate"
 | 
				
			||||||
 | 
									@successSubmit="successSubmit" />
 | 
				
			||||||
		</base-dialog>
 | 
							</base-dialog>
 | 
				
			||||||
		<!-- 装车 -->
 | 
							<!-- 装车 -->
 | 
				
			||||||
		<base-dialog
 | 
							<base-dialog
 | 
				
			||||||
@@ -47,73 +44,78 @@
 | 
				
			|||||||
			@cancel="handleCancel2"
 | 
								@cancel="handleCancel2"
 | 
				
			||||||
			@confirm="handleConfirm2"
 | 
								@confirm="handleConfirm2"
 | 
				
			||||||
			:before-close="handleCancel2"
 | 
								:before-close="handleCancel2"
 | 
				
			||||||
			width="50%"
 | 
								width="50%">
 | 
				
			||||||
    >
 | 
								<loaded-page
 | 
				
			||||||
			<loaded-page ref="loadedPage" @successSubmit="successSubmit2" />
 | 
									ref="loadedPage"
 | 
				
			||||||
 | 
									@successSubmit="successSubmit2" />
 | 
				
			||||||
		</base-dialog>
 | 
							</base-dialog>
 | 
				
			||||||
		<!-- 发货详情 -->
 | 
							<!-- 发货详情 -->
 | 
				
			||||||
    <delivery-log-detail ref='deliveryLogDetail' v-if='showDetail' />
 | 
							<delivery-log-detail
 | 
				
			||||||
 | 
								ref="deliveryLogDetail"
 | 
				
			||||||
 | 
								v-if="showDetail" />
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
<script>
 | 
					<script>
 | 
				
			||||||
import { parseTime } from '@/utils/ruoyi'
 | 
					import { parseTime } from '@/utils/ruoyi';
 | 
				
			||||||
import { deliveryLogPage, deliveryLogDelete } from '@/api/base/delivery'
 | 
					import { deliveryLogPage, deliveryLogDelete } from '@/api/base/delivery';
 | 
				
			||||||
import AddOrUpdate from './components/addOrUpdate'
 | 
					import AddOrUpdate from './components/addOrUpdate';
 | 
				
			||||||
import LoadedPage from './components/loadedPage'
 | 
					import LoadedPage from './components/loadedPage';
 | 
				
			||||||
import DeliveryLogDetail from './components/deliveryLogDetail.vue'
 | 
					import DeliveryLogDetail from './components/deliveryLogDetail.vue';
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
const tableProps = [
 | 
					const tableProps = [
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'orderName',
 | 
							prop: 'orderName',
 | 
				
			||||||
		label: '订单名',
 | 
							label: '订单名',
 | 
				
			||||||
		minWidth: 100,
 | 
							minWidth: 100,
 | 
				
			||||||
    showOverflowtooltip: true
 | 
							showOverflowtooltip: true,
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'name',
 | 
							prop: 'name',
 | 
				
			||||||
		label: '发货单名称',
 | 
							label: '发货单名称',
 | 
				
			||||||
		minWidth: 100,
 | 
							minWidth: 100,
 | 
				
			||||||
    showOverflowtooltip: true
 | 
							showOverflowtooltip: true,
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'deliveryTime',
 | 
							prop: 'deliveryTime',
 | 
				
			||||||
		label: '发货时间',
 | 
							label: '发货时间',
 | 
				
			||||||
		filter: parseTime,
 | 
							filter: parseTime,
 | 
				
			||||||
    minWidth: 160
 | 
							minWidth: 160,
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'code',
 | 
							prop: 'code',
 | 
				
			||||||
		label: '发货单号',
 | 
							label: '发货单号',
 | 
				
			||||||
    showOverflowtooltip: true
 | 
							showOverflowtooltip: true,
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'deliverPerName',
 | 
							prop: 'deliverPerName',
 | 
				
			||||||
		label: '发货负责人',
 | 
							label: '发货负责人',
 | 
				
			||||||
    minWidth: 100
 | 
							minWidth: 100,
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'principal',
 | 
							prop: 'principal',
 | 
				
			||||||
		label: '运输负责人',
 | 
							label: '运输负责人',
 | 
				
			||||||
    minWidth: 100
 | 
							minWidth: 100,
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'principalCall',
 | 
							prop: 'principalCall',
 | 
				
			||||||
		label: '运输联系方式',
 | 
							label: '运输联系方式',
 | 
				
			||||||
		minWidth: 110,
 | 
							minWidth: 110,
 | 
				
			||||||
    showOverflowtooltip: true
 | 
							showOverflowtooltip: true,
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'principalCost',
 | 
							prop: 'principalCost',
 | 
				
			||||||
		label: '运输费用',
 | 
							label: '运输费用',
 | 
				
			||||||
    align: 'right'
 | 
							align: 'right',
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'remark',
 | 
							prop: 'remark',
 | 
				
			||||||
		label: '备注',
 | 
							label: '备注',
 | 
				
			||||||
    showOverflowtooltip: true
 | 
							showOverflowtooltip: true,
 | 
				
			||||||
  }
 | 
						},
 | 
				
			||||||
]
 | 
					];
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
  name: "DeliveryLog",
 | 
						name: 'DeliveryLog',
 | 
				
			||||||
 | 
						mixins: [tableHeightMixin],
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			formConfig: [
 | 
								formConfig: [
 | 
				
			||||||
@@ -121,34 +123,38 @@ export default {
 | 
				
			|||||||
					type: 'input',
 | 
										type: 'input',
 | 
				
			||||||
					label: '订单名',
 | 
										label: '订单名',
 | 
				
			||||||
					param: 'orderName',
 | 
										param: 'orderName',
 | 
				
			||||||
          defaultSelect: ''
 | 
										defaultSelect: '',
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					type: 'input',
 | 
										type: 'input',
 | 
				
			||||||
					label: '发货单名称',
 | 
										label: '发货单名称',
 | 
				
			||||||
          param: 'name'
 | 
										param: 'name',
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					type: 'input',
 | 
										type: 'input',
 | 
				
			||||||
					label: '发货单号',
 | 
										label: '发货单号',
 | 
				
			||||||
          param: 'code'
 | 
										param: 'code',
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					type: 'button',
 | 
										type: 'button',
 | 
				
			||||||
					btnName: '查询',
 | 
										btnName: '查询',
 | 
				
			||||||
					name: 'search',
 | 
										name: 'search',
 | 
				
			||||||
          color: 'primary'
 | 
										color: 'primary',
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
          type: this.$auth.hasPermi('extend:delivery-log:create') ? 'separate' : '',
 | 
										type: this.$auth.hasPermi('extend:delivery-log:create')
 | 
				
			||||||
 | 
											? 'separate'
 | 
				
			||||||
 | 
											: '',
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
          type: this.$auth.hasPermi('extend:delivery-log:create') ? 'button' : '',
 | 
										type: this.$auth.hasPermi('extend:delivery-log:create')
 | 
				
			||||||
 | 
											? 'button'
 | 
				
			||||||
 | 
											: '',
 | 
				
			||||||
					btnName: '新增',
 | 
										btnName: '新增',
 | 
				
			||||||
					name: 'add',
 | 
										name: 'add',
 | 
				
			||||||
					color: 'success',
 | 
										color: 'success',
 | 
				
			||||||
          plain: true
 | 
										plain: true,
 | 
				
			||||||
        }
 | 
									},
 | 
				
			||||||
			],
 | 
								],
 | 
				
			||||||
			// 查询参数
 | 
								// 查询参数
 | 
				
			||||||
			queryParams: {
 | 
								queryParams: {
 | 
				
			||||||
@@ -156,158 +162,163 @@ export default {
 | 
				
			|||||||
				pageSize: 20,
 | 
									pageSize: 20,
 | 
				
			||||||
				orderName: '',
 | 
									orderName: '',
 | 
				
			||||||
				code: '',
 | 
									code: '',
 | 
				
			||||||
        name: ''
 | 
									name: '',
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			tableProps,
 | 
								tableProps,
 | 
				
			||||||
			list: [],
 | 
								list: [],
 | 
				
			||||||
      tableH: this.tableHeight(260),
 | 
					 | 
				
			||||||
			total: 0,
 | 
								total: 0,
 | 
				
			||||||
			tableBtn: [
 | 
								tableBtn: [
 | 
				
			||||||
				this.$auth.hasPermi('extend:delivery-log:loaded')
 | 
									this.$auth.hasPermi('extend:delivery-log:loaded')
 | 
				
			||||||
					? {
 | 
										? {
 | 
				
			||||||
							type: 'loaded',
 | 
												type: 'loaded',
 | 
				
			||||||
              btnName: '装车'
 | 
												btnName: '装车',
 | 
				
			||||||
					  }
 | 
										  }
 | 
				
			||||||
					: undefined,
 | 
										: undefined,
 | 
				
			||||||
				this.$auth.hasPermi('extend:delivery-log:detail')
 | 
									this.$auth.hasPermi('extend:delivery-log:detail')
 | 
				
			||||||
					? {
 | 
										? {
 | 
				
			||||||
							type: 'detail',
 | 
												type: 'detail',
 | 
				
			||||||
              btnName: '详情'
 | 
												btnName: '详情',
 | 
				
			||||||
					  }
 | 
										  }
 | 
				
			||||||
					: undefined,
 | 
										: undefined,
 | 
				
			||||||
				this.$auth.hasPermi('extend:delivery-log:update')
 | 
									this.$auth.hasPermi('extend:delivery-log:update')
 | 
				
			||||||
					? {
 | 
										? {
 | 
				
			||||||
							type: 'edit',
 | 
												type: 'edit',
 | 
				
			||||||
              btnName: '编辑'
 | 
												btnName: '编辑',
 | 
				
			||||||
					  }
 | 
										  }
 | 
				
			||||||
					: undefined,
 | 
										: undefined,
 | 
				
			||||||
				this.$auth.hasPermi('extend:delivery-log:delete')
 | 
									this.$auth.hasPermi('extend:delivery-log:delete')
 | 
				
			||||||
					? {
 | 
										? {
 | 
				
			||||||
							type: 'delete',
 | 
												type: 'delete',
 | 
				
			||||||
              btnName: '删除'
 | 
												btnName: '删除',
 | 
				
			||||||
					  }
 | 
										  }
 | 
				
			||||||
          : undefined
 | 
										: undefined,
 | 
				
			||||||
			].filter((v) => v),
 | 
								].filter((v) => v),
 | 
				
			||||||
			addOrEditTitle: '',
 | 
								addOrEditTitle: '',
 | 
				
			||||||
			centervisible: false,
 | 
								centervisible: false,
 | 
				
			||||||
			centervisible2: false,
 | 
								centervisible2: false,
 | 
				
			||||||
      showDetail: false
 | 
								showDetail: false,
 | 
				
			||||||
    }
 | 
							};
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	created() {
 | 
						created() {
 | 
				
			||||||
    window.addEventListener('resize', () => {
 | 
					 | 
				
			||||||
      this.tableH = this.tableHeight(260)
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
		if (location.href.indexOf('?') > 0) {
 | 
							if (location.href.indexOf('?') > 0) {
 | 
				
			||||||
      let arr = location.href.split('?')[1]
 | 
								let arr = location.href.split('?')[1];
 | 
				
			||||||
      this.formConfig[0].defaultSelect = decodeURI(arr.split('=')[1])
 | 
								this.formConfig[0].defaultSelect = decodeURI(arr.split('=')[1]);
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
      this.formConfig[0].defaultSelect = ''
 | 
								this.formConfig[0].defaultSelect = '';
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
    this.queryParams.orderName = this.formConfig[0].defaultSelect
 | 
							this.queryParams.orderName = this.formConfig[0].defaultSelect;
 | 
				
			||||||
		this.getList();
 | 
							this.getList();
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	components: { AddOrUpdate, LoadedPage, DeliveryLogDetail },
 | 
						components: { AddOrUpdate, LoadedPage, DeliveryLogDetail },
 | 
				
			||||||
	watch: {
 | 
						watch: {
 | 
				
			||||||
    $route: 'initData'
 | 
							$route: 'initData',
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	methods: {
 | 
						methods: {
 | 
				
			||||||
		initData(to) {
 | 
							initData(to) {
 | 
				
			||||||
			if (to.name === 'DeliveryLog') {
 | 
								if (to.name === 'DeliveryLog') {
 | 
				
			||||||
				if (location.href.indexOf('?') > 0) {
 | 
									if (location.href.indexOf('?') > 0) {
 | 
				
			||||||
          let arr = location.href.split('?')[1]
 | 
										let arr = location.href.split('?')[1];
 | 
				
			||||||
          this.formConfig[0].defaultSelect = decodeURI(arr.split('=')[1])
 | 
										this.formConfig[0].defaultSelect = decodeURI(arr.split('=')[1]);
 | 
				
			||||||
				} else {
 | 
									} else {
 | 
				
			||||||
          this.formConfig[0].defaultSelect = ''
 | 
										this.formConfig[0].defaultSelect = '';
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
        this.queryParams.orderName = this.formConfig[0].defaultSelect
 | 
									this.queryParams.orderName = this.formConfig[0].defaultSelect;
 | 
				
			||||||
        this.getList()
 | 
									this.getList();
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		getList() {
 | 
							getList() {
 | 
				
			||||||
      deliveryLogPage({...this.queryParams}).then(res => {
 | 
								deliveryLogPage({ ...this.queryParams }).then((res) => {
 | 
				
			||||||
        let arr = res.data.list || []
 | 
									let arr = res.data.list || [];
 | 
				
			||||||
        arr && arr.map(item => {
 | 
									arr &&
 | 
				
			||||||
          item.principalCost = item.principalCost.toFixed(2)
 | 
										arr.map((item) => {
 | 
				
			||||||
        })
 | 
											item.principalCost = item.principalCost.toFixed(2);
 | 
				
			||||||
        this.list = arr
 | 
										});
 | 
				
			||||||
        this.total = res.data.total || 0
 | 
									this.list = arr;
 | 
				
			||||||
      })
 | 
									this.total = res.data.total || 0;
 | 
				
			||||||
 | 
								});
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		buttonClick(val) {
 | 
							buttonClick(val) {
 | 
				
			||||||
			if (val.btnName === 'search') {
 | 
								if (val.btnName === 'search') {
 | 
				
			||||||
        this.queryParams.name = val.name
 | 
									this.queryParams.name = val.name;
 | 
				
			||||||
        this.queryParams.orderName = val.orderName
 | 
									this.queryParams.orderName = val.orderName;
 | 
				
			||||||
        this.queryParams.code = val.code
 | 
									this.queryParams.code = val.code;
 | 
				
			||||||
        this.getList()
 | 
									this.getList();
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
        this.addOrEditTitle = '新增'
 | 
									this.addOrEditTitle = '新增';
 | 
				
			||||||
        this.centervisible = true
 | 
									this.centervisible = true;
 | 
				
			||||||
				this.$nextTick(() => {
 | 
									this.$nextTick(() => {
 | 
				
			||||||
          this.$refs.addOrUpdate.init()
 | 
										this.$refs.addOrUpdate.init();
 | 
				
			||||||
        })
 | 
									});
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		handleClick(val) {
 | 
							handleClick(val) {
 | 
				
			||||||
      console.log(val)
 | 
								console.log(val);
 | 
				
			||||||
			switch (val.type) {
 | 
								switch (val.type) {
 | 
				
			||||||
				case 'edit':
 | 
									case 'edit':
 | 
				
			||||||
          this.addOrEditTitle = '编辑'
 | 
										this.addOrEditTitle = '编辑';
 | 
				
			||||||
          this.centervisible = true
 | 
										this.centervisible = true;
 | 
				
			||||||
					this.$nextTick(() => {
 | 
										this.$nextTick(() => {
 | 
				
			||||||
            this.$refs.addOrUpdate.init(val.data.id)
 | 
											this.$refs.addOrUpdate.init(val.data.id);
 | 
				
			||||||
          })
 | 
										});
 | 
				
			||||||
          break
 | 
										break;
 | 
				
			||||||
				case 'delete':
 | 
									case 'delete':
 | 
				
			||||||
          this.handleDelete(val.data)
 | 
										this.handleDelete(val.data);
 | 
				
			||||||
          break
 | 
										break;
 | 
				
			||||||
				case 'loaded':
 | 
									case 'loaded':
 | 
				
			||||||
          this.centervisible2 = true
 | 
										this.centervisible2 = true;
 | 
				
			||||||
					this.$nextTick(() => {
 | 
										this.$nextTick(() => {
 | 
				
			||||||
            this.$refs.loadedPage.init(val.data.id, val.data.code, val.data.orderId)
 | 
											this.$refs.loadedPage.init(
 | 
				
			||||||
          })
 | 
												val.data.id,
 | 
				
			||||||
          break
 | 
												val.data.code,
 | 
				
			||||||
 | 
												val.data.orderId
 | 
				
			||||||
 | 
											);
 | 
				
			||||||
 | 
										});
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
				default:
 | 
									default:
 | 
				
			||||||
          this.showDetail = true
 | 
										this.showDetail = true;
 | 
				
			||||||
					this.$nextTick(() => {
 | 
										this.$nextTick(() => {
 | 
				
			||||||
            this.$refs.deliveryLogDetail.init(val.data)
 | 
											this.$refs.deliveryLogDetail.init(val.data);
 | 
				
			||||||
          })
 | 
										});
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		// 新增
 | 
							// 新增
 | 
				
			||||||
		handleCancel() {
 | 
							handleCancel() {
 | 
				
			||||||
      this.$refs.addOrUpdate.formClear()
 | 
								this.$refs.addOrUpdate.formClear();
 | 
				
			||||||
      this.centervisible = false
 | 
								this.centervisible = false;
 | 
				
			||||||
      this.addOrEditTitle = ''
 | 
								this.addOrEditTitle = '';
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		handleConfirm() {
 | 
							handleConfirm() {
 | 
				
			||||||
      this.$refs.addOrUpdate.submitForm()
 | 
								this.$refs.addOrUpdate.submitForm();
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		successSubmit() {
 | 
							successSubmit() {
 | 
				
			||||||
      this.handleCancel()
 | 
								this.handleCancel();
 | 
				
			||||||
      this.getList()
 | 
								this.getList();
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		// 删除
 | 
							// 删除
 | 
				
			||||||
		handleDelete(val) {
 | 
							handleDelete(val) {
 | 
				
			||||||
      this.$modal.confirm('是否确认删除发货单名为"' + val.name + '"的数据项?').then(function() {
 | 
								this.$modal
 | 
				
			||||||
          return deliveryLogDelete({ id: val.id })
 | 
									.confirm('是否确认删除发货单名为"' + val.name + '"的数据项?')
 | 
				
			||||||
        }).then(() => {
 | 
									.then(function () {
 | 
				
			||||||
 | 
										return deliveryLogDelete({ id: val.id });
 | 
				
			||||||
 | 
									})
 | 
				
			||||||
 | 
									.then(() => {
 | 
				
			||||||
					this.getList();
 | 
										this.getList();
 | 
				
			||||||
          this.$modal.msgSuccess("操作成功");
 | 
										this.$modal.msgSuccess('操作成功');
 | 
				
			||||||
        }).catch(() => {});
 | 
									})
 | 
				
			||||||
 | 
									.catch(() => {});
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		// 装车
 | 
							// 装车
 | 
				
			||||||
		handleCancel2() {
 | 
							handleCancel2() {
 | 
				
			||||||
      this.$refs.loadedPage.formClear()
 | 
								this.$refs.loadedPage.formClear();
 | 
				
			||||||
      this.centervisible2 = false
 | 
								this.centervisible2 = false;
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		handleConfirm2() {
 | 
							handleConfirm2() {
 | 
				
			||||||
      this.$refs.loadedPage.submitForm()
 | 
								this.$refs.loadedPage.submitForm();
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		successSubmit2() {
 | 
							successSubmit2() {
 | 
				
			||||||
      this.handleCancel2()
 | 
								this.handleCancel2();
 | 
				
			||||||
      this.getList()
 | 
								this.getList();
 | 
				
			||||||
    }
 | 
							},
 | 
				
			||||||
  }
 | 
						},
 | 
				
			||||||
}
 | 
					};
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
@@ -4,127 +4,121 @@
 | 
				
			|||||||
		<search-bar
 | 
							<search-bar
 | 
				
			||||||
			:formConfigs="formConfig"
 | 
								:formConfigs="formConfig"
 | 
				
			||||||
			ref="searchBarForm"
 | 
								ref="searchBarForm"
 | 
				
			||||||
      @headBtnClick="buttonClick"
 | 
								@headBtnClick="buttonClick" />
 | 
				
			||||||
    />
 | 
					 | 
				
			||||||
		<!-- 列表 -->
 | 
							<!-- 列表 -->
 | 
				
			||||||
		<base-table
 | 
							<base-table
 | 
				
			||||||
			:page="queryParams.pageNo"
 | 
								:page="queryParams.pageNo"
 | 
				
			||||||
			:limit="queryParams.pageSize"
 | 
								:limit="queryParams.pageSize"
 | 
				
			||||||
			:table-props="tableProps"
 | 
								:table-props="tableProps"
 | 
				
			||||||
			:table-data="list"
 | 
								:table-data="list"
 | 
				
			||||||
      :max-height="tableH"
 | 
								:max-height="tableH">
 | 
				
			||||||
    >
 | 
					 | 
				
			||||||
			<method-btn
 | 
								<method-btn
 | 
				
			||||||
				v-if="tableBtn.length"
 | 
									v-if="tableBtn.length"
 | 
				
			||||||
				slot="handleBtn"
 | 
									slot="handleBtn"
 | 
				
			||||||
				:width="80"
 | 
									:width="80"
 | 
				
			||||||
				label="操作"
 | 
									label="操作"
 | 
				
			||||||
				:method-list="tableBtn"
 | 
									:method-list="tableBtn"
 | 
				
			||||||
        @clickBtn="handleClick"
 | 
									@clickBtn="handleClick" />
 | 
				
			||||||
      />
 | 
					 | 
				
			||||||
		</base-table>
 | 
							</base-table>
 | 
				
			||||||
		<pagination
 | 
							<pagination
 | 
				
			||||||
			:page.sync="queryParams.pageNo"
 | 
								:page.sync="queryParams.pageNo"
 | 
				
			||||||
			:limit.sync="queryParams.pageSize"
 | 
								:limit.sync="queryParams.pageSize"
 | 
				
			||||||
			:total="total"
 | 
								:total="total"
 | 
				
			||||||
      @pagination="getList"
 | 
								@pagination="getList" />
 | 
				
			||||||
    />
 | 
					 | 
				
			||||||
		<!-- 详情抽屉 -->
 | 
							<!-- 详情抽屉 -->
 | 
				
			||||||
    <delivery-log-det-detail ref='deliveryLogDetail'/>
 | 
							<delivery-log-det-detail ref="deliveryLogDetail" />
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
<script>
 | 
					<script>
 | 
				
			||||||
import { deliveryProgressPage } from '@/api/base/delivery'
 | 
					import { deliveryProgressPage } from '@/api/base/delivery';
 | 
				
			||||||
import DeliveryLogDetDetail from './components/deliveryLogDetDetail.vue'
 | 
					import DeliveryLogDetDetail from './components/deliveryLogDetDetail.vue';
 | 
				
			||||||
 | 
					import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
				
			||||||
const tableProps = [
 | 
					const tableProps = [
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'orderName',
 | 
							prop: 'orderName',
 | 
				
			||||||
		label: '订单名',
 | 
							label: '订单名',
 | 
				
			||||||
    showOverflowtooltip: true
 | 
							showOverflowtooltip: true,
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'customerName',
 | 
							prop: 'customerName',
 | 
				
			||||||
		label: '客户名称',
 | 
							label: '客户名称',
 | 
				
			||||||
    showOverflowtooltip: true
 | 
							showOverflowtooltip: true,
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'unit',
 | 
							prop: 'unit',
 | 
				
			||||||
    label: '单位'
 | 
							label: '单位',
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'orderNum',
 | 
							prop: 'orderNum',
 | 
				
			||||||
    label: '订单数量'
 | 
							label: '订单数量',
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'num',
 | 
							prop: 'num',
 | 
				
			||||||
    label: '发货数量'
 | 
							label: '发货数量',
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		prop: 'rate',
 | 
							prop: 'rate',
 | 
				
			||||||
    label: '累计发货比例(%)'
 | 
							label: '累计发货比例(%)',
 | 
				
			||||||
  }
 | 
						},
 | 
				
			||||||
]
 | 
					];
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
  name: "DeliveryLogDet",
 | 
						name: 'DeliveryLogDet',
 | 
				
			||||||
 | 
						mixins: [tableHeightMixin],
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			formConfig: [
 | 
								formConfig: [
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					type: 'input',
 | 
										type: 'input',
 | 
				
			||||||
					label: '订单名',
 | 
										label: '订单名',
 | 
				
			||||||
          param: 'orderName'
 | 
										param: 'orderName',
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					type: 'button',
 | 
										type: 'button',
 | 
				
			||||||
					btnName: '查询',
 | 
										btnName: '查询',
 | 
				
			||||||
					name: 'search',
 | 
										name: 'search',
 | 
				
			||||||
          color: 'primary'
 | 
										color: 'primary',
 | 
				
			||||||
        }
 | 
									},
 | 
				
			||||||
			],
 | 
								],
 | 
				
			||||||
			// 查询参数
 | 
								// 查询参数
 | 
				
			||||||
			queryParams: {
 | 
								queryParams: {
 | 
				
			||||||
				pageNo: 1,
 | 
									pageNo: 1,
 | 
				
			||||||
				pageSize: 20,
 | 
									pageSize: 20,
 | 
				
			||||||
        orderName: ''
 | 
									orderName: '',
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			tableProps,
 | 
								tableProps,
 | 
				
			||||||
			list: [],
 | 
								list: [],
 | 
				
			||||||
      tableH: this.tableHeight(260),
 | 
					 | 
				
			||||||
			total: 0,
 | 
								total: 0,
 | 
				
			||||||
			tableBtn: [
 | 
								tableBtn: [
 | 
				
			||||||
				this.$auth.hasPermi('extend:delivery-log-det:detail')
 | 
									this.$auth.hasPermi('extend:delivery-log-det:detail')
 | 
				
			||||||
					? {
 | 
										? {
 | 
				
			||||||
							type: 'detail',
 | 
												type: 'detail',
 | 
				
			||||||
              btnName: '详情'
 | 
												btnName: '详情',
 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
          : undefined
 | 
					 | 
				
			||||||
      ].filter((v) => v)
 | 
					 | 
				
			||||||
					  }
 | 
										  }
 | 
				
			||||||
 | 
										: undefined,
 | 
				
			||||||
 | 
								].filter((v) => v),
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	components: { DeliveryLogDetDetail },
 | 
						components: { DeliveryLogDetDetail },
 | 
				
			||||||
	created() {
 | 
						created() {
 | 
				
			||||||
    window.addEventListener('resize', () => {
 | 
					 | 
				
			||||||
      this.tableH = this.tableHeight(260)
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
		this.getList();
 | 
							this.getList();
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	methods: {
 | 
						methods: {
 | 
				
			||||||
		getList() {
 | 
							getList() {
 | 
				
			||||||
      deliveryProgressPage({...this.queryParams}).then(res => {
 | 
								deliveryProgressPage({ ...this.queryParams }).then((res) => {
 | 
				
			||||||
        this.list = res.data.list || []
 | 
									this.list = res.data.list || [];
 | 
				
			||||||
        this.total = res.data.total || 0
 | 
									this.total = res.data.total || 0;
 | 
				
			||||||
      })
 | 
								});
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		buttonClick(val) {
 | 
							buttonClick(val) {
 | 
				
			||||||
      this.queryParams.orderName = val.orderName
 | 
								this.queryParams.orderName = val.orderName;
 | 
				
			||||||
      this.getList()
 | 
								this.getList();
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		handleClick(val) {
 | 
							handleClick(val) {
 | 
				
			||||||
      console.log(val)
 | 
								console.log(val);
 | 
				
			||||||
			this.$nextTick(() => {
 | 
								this.$nextTick(() => {
 | 
				
			||||||
        this.$refs.deliveryLogDetail.init(val.data)
 | 
									this.$refs.deliveryLogDetail.init(val.data);
 | 
				
			||||||
      })
 | 
								});
 | 
				
			||||||
    }
 | 
							},
 | 
				
			||||||
  }
 | 
						},
 | 
				
			||||||
}
 | 
					};
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
@@ -2,44 +2,43 @@
 | 
				
			|||||||
	<div
 | 
						<div
 | 
				
			||||||
		id="analysischartBar"
 | 
							id="analysischartBar"
 | 
				
			||||||
		style="width: 100%"
 | 
							style="width: 100%"
 | 
				
			||||||
    :style="{ height: chartHeight + 'px' }"
 | 
							:style="{ height: chartHeight + 'px' }"></div>
 | 
				
			||||||
  ></div>
 | 
					 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
<script>
 | 
					<script>
 | 
				
			||||||
import * as echarts from 'echarts'
 | 
					import * as echarts from 'echarts';
 | 
				
			||||||
import resize from '@/utils/chartMixins/resize'
 | 
					import resize from '@/utils/chartMixins/resize';
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
  name: "BarChart",
 | 
						name: 'BarChart',
 | 
				
			||||||
	mixins: [resize],
 | 
						mixins: [resize],
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
			chartDom: '',
 | 
								chartDom: '',
 | 
				
			||||||
			chart: '',
 | 
								chart: '',
 | 
				
			||||||
      chartHeight: this.tableHeight(214) - 70
 | 
								chartHeight: this.tableHeight(250) / 2,
 | 
				
			||||||
    }
 | 
							};
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	props: {
 | 
						props: {
 | 
				
			||||||
		chartData: {
 | 
							chartData: {
 | 
				
			||||||
			type: Array,
 | 
								type: Array,
 | 
				
			||||||
			required: true,
 | 
								required: true,
 | 
				
			||||||
			default: () => {
 | 
								default: () => {
 | 
				
			||||||
        return []
 | 
									return [];
 | 
				
			||||||
      }
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		timeDim: {
 | 
							timeDim: {
 | 
				
			||||||
			type: String,
 | 
								type: String,
 | 
				
			||||||
      default: ''
 | 
								default: '',
 | 
				
			||||||
    }
 | 
							},
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	watch: {
 | 
						watch: {
 | 
				
			||||||
		chartData: function () {
 | 
							chartData: function () {
 | 
				
			||||||
      this.getChart()
 | 
								this.getChart();
 | 
				
			||||||
    }
 | 
							},
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	mounted() {
 | 
						mounted() {
 | 
				
			||||||
		window.addEventListener('resize', () => {
 | 
							window.addEventListener('resize', () => {
 | 
				
			||||||
      this.chartHeight = this.tableHeight(214) - 70
 | 
								this.chartHeight = this.tableHeight(250) / 2;
 | 
				
			||||||
    })
 | 
							});
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	methods: {
 | 
						methods: {
 | 
				
			||||||
		getChart() {
 | 
							getChart() {
 | 
				
			||||||
@@ -48,29 +47,29 @@ export default {
 | 
				
			|||||||
				this.chart !== '' &&
 | 
									this.chart !== '' &&
 | 
				
			||||||
				this.chart !== undefined
 | 
									this.chart !== undefined
 | 
				
			||||||
			) {
 | 
								) {
 | 
				
			||||||
        this.chart.dispose() // 页面多次刷新会出现警告,Dom已经初始化了一个实例,这是销毁实例
 | 
									this.chart.dispose(); // 页面多次刷新会出现警告,Dom已经初始化了一个实例,这是销毁实例
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
      this.chartDom = document.getElementById('analysischartBar')
 | 
								this.chartDom = document.getElementById('analysischartBar');
 | 
				
			||||||
      this.chart = echarts.init(this.chartDom)
 | 
								this.chart = echarts.init(this.chartDom);
 | 
				
			||||||
      let tempArr = []
 | 
								let tempArr = [];
 | 
				
			||||||
      let xData = []
 | 
								let xData = [];
 | 
				
			||||||
      let yData = []
 | 
								let yData = [];
 | 
				
			||||||
      let legendData = []
 | 
								let legendData = [];
 | 
				
			||||||
			if (this.chartData.length === 0) {
 | 
								if (this.chartData.length === 0) {
 | 
				
			||||||
        return false
 | 
									return false;
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
        tempArr = this.chartData[0].trendRespVOList
 | 
									tempArr = this.chartData[0].trendRespVOList;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			for (let k = 0; k < tempArr.length; k++) {
 | 
								for (let k = 0; k < tempArr.length; k++) {
 | 
				
			||||||
        let time = ''
 | 
									let time = '';
 | 
				
			||||||
				if (this.timeDim === '3') {
 | 
									if (this.timeDim === '3') {
 | 
				
			||||||
          let year = tempArr[k].time.slice(0,4)
 | 
										let year = tempArr[k].time.slice(0, 4);
 | 
				
			||||||
          let weak = tempArr[k].time.slice(4,6)
 | 
										let weak = tempArr[k].time.slice(4, 6);
 | 
				
			||||||
          time = year+' 第 '+weak+' 周'
 | 
										time = year + ' 第 ' + weak + ' 周';
 | 
				
			||||||
				} else {
 | 
									} else {
 | 
				
			||||||
          time = tempArr[k].time
 | 
										time = tempArr[k].time;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
        xData.push(time)
 | 
									xData.push(time);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			for (let i = 0; i < this.chartData.length; i++) {
 | 
								for (let i = 0; i < this.chartData.length; i++) {
 | 
				
			||||||
				let obj = {
 | 
									let obj = {
 | 
				
			||||||
@@ -79,70 +78,72 @@ export default {
 | 
				
			|||||||
					barMaxWidth: 20,
 | 
										barMaxWidth: 20,
 | 
				
			||||||
					label: {
 | 
										label: {
 | 
				
			||||||
						show: true,
 | 
											show: true,
 | 
				
			||||||
            position: 'top'
 | 
											position: 'top',
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
          data: []
 | 
										data: [],
 | 
				
			||||||
        }
 | 
									};
 | 
				
			||||||
        legendData.push(this.chartData[i].objName + this.chartData[i].objCode)
 | 
									legendData.push(this.chartData[i].objName + this.chartData[i].objCode);
 | 
				
			||||||
        let temp = this.chartData[i].trendRespVOList
 | 
									let temp = this.chartData[i].trendRespVOList;
 | 
				
			||||||
				for (let j = 0; j < temp.length; j++) {
 | 
									for (let j = 0; j < temp.length; j++) {
 | 
				
			||||||
          let num = temp[j].useNum ? temp[j].useNum : ''
 | 
										let num = temp[j].useNum ? temp[j].useNum.toFixed(2) : '';
 | 
				
			||||||
          obj.data.push(num)
 | 
										obj.data.push(num);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
        yData.push(obj)
 | 
									yData.push(obj);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			var option = {
 | 
								var option = {
 | 
				
			||||||
				color: ['#FFDC94', '#8EF0AB', '#63BDFF', '#288AFF', '#7164FF'],
 | 
									color: ['#FFDC94', '#8EF0AB', '#63BDFF', '#288AFF', '#7164FF'],
 | 
				
			||||||
				tooltip: {
 | 
									tooltip: {
 | 
				
			||||||
					trigger: 'axis',
 | 
										trigger: 'axis',
 | 
				
			||||||
					axisPointer: {
 | 
										axisPointer: {
 | 
				
			||||||
            type: 'shadow'
 | 
											type: 'shadow',
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
					formatter: function (params) {
 | 
										formatter: function (params) {
 | 
				
			||||||
						return (
 | 
											return (
 | 
				
			||||||
							params[0].axisValue +
 | 
												params[0].axisValue +
 | 
				
			||||||
							`<br>` +
 | 
												`<br>` +
 | 
				
			||||||
              params.map((item) => {
 | 
												params
 | 
				
			||||||
                let str = `<span style="display:inline-block;width:8px;height:8px;margin: 0 8px 0 -3px;border-radius:2px;background-color:${item.color};"></span>`
 | 
													.map((item) => {
 | 
				
			||||||
                let seriesNameStr = `<span style="display:inline-block;">${item.seriesName}</span>`
 | 
														let str = `<span style="display:inline-block;width:8px;height:8px;margin: 0 8px 0 -3px;border-radius:2px;background-color:${item.color};"></span>`;
 | 
				
			||||||
						let value = item.value ? item.value : '-'
 | 
														let seriesNameStr = `<span style="display:inline-block;">${item.seriesName}</span>`;
 | 
				
			||||||
						let valueStr = `<span style="display:inline-block;margin-left:10px;color:rgba(0,0,0,0.45);">${value}</span>`
 | 
														let value = item.value ? item.value : '-';
 | 
				
			||||||
 | 
														let valueStr = `<span style="display:inline-block;margin-left:10px;color:rgba(0,0,0,0.45);">${value}</span>`;
 | 
				
			||||||
									return `<span style="display:flex; justify-content:space-between; margin-bottom: 2px">
 | 
														return `<span style="display:flex; justify-content:space-between; margin-bottom: 2px">
 | 
				
			||||||
									<span>${str}${seriesNameStr}</span>
 | 
														<span>${str}${seriesNameStr}</span>
 | 
				
			||||||
									<span>${valueStr}</span>
 | 
														<span>${valueStr}</span>
 | 
				
			||||||
								</span>`
 | 
													</span>`;
 | 
				
			||||||
              }).join(``)
 | 
													})
 | 
				
			||||||
            )
 | 
													.join(``)
 | 
				
			||||||
          }
 | 
											);
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				grid: {
 | 
									grid: {
 | 
				
			||||||
					left: '4%',
 | 
										left: '4%',
 | 
				
			||||||
					right: '1%',
 | 
										right: '1%',
 | 
				
			||||||
					bottom: '1%',
 | 
										bottom: '1%',
 | 
				
			||||||
          containLabel: true
 | 
										containLabel: true,
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				legend: {
 | 
									legend: {
 | 
				
			||||||
					data: legendData,
 | 
										data: legendData,
 | 
				
			||||||
					right: '1%',
 | 
										right: '1%',
 | 
				
			||||||
					icon: 'rect',
 | 
										icon: 'rect',
 | 
				
			||||||
					itemHeight: 8,
 | 
										itemHeight: 8,
 | 
				
			||||||
          itemWidth: 8
 | 
										itemWidth: 8,
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				xAxis: {
 | 
									xAxis: {
 | 
				
			||||||
					type: 'category',
 | 
										type: 'category',
 | 
				
			||||||
					data: xData,
 | 
										data: xData,
 | 
				
			||||||
					axisLabel: {
 | 
										axisLabel: {
 | 
				
			||||||
            rotate: "45"
 | 
											rotate: '45',
 | 
				
			||||||
          }
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				yAxis: {
 | 
									yAxis: {
 | 
				
			||||||
          type: 'value'
 | 
										type: 'value',
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
        series: yData
 | 
									series: yData,
 | 
				
			||||||
			};
 | 
								};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			option && this.chart.setOption(option);
 | 
								option && this.chart.setOption(option);
 | 
				
			||||||
    }
 | 
							},
 | 
				
			||||||
  }
 | 
						},
 | 
				
			||||||
}
 | 
					};
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
@@ -1,126 +0,0 @@
 | 
				
			|||||||
<template>
 | 
					 | 
				
			||||||
  <div 
 | 
					 | 
				
			||||||
    id="analysischartLine"
 | 
					 | 
				
			||||||
    style="width: 100%"
 | 
					 | 
				
			||||||
    :style="{ height: chartHeight + 'px' }"
 | 
					 | 
				
			||||||
  ></div>
 | 
					 | 
				
			||||||
</template>
 | 
					 | 
				
			||||||
<script>
 | 
					 | 
				
			||||||
import * as echarts from 'echarts'
 | 
					 | 
				
			||||||
import resize from '@/utils/chartMixins/resize'
 | 
					 | 
				
			||||||
export default {
 | 
					 | 
				
			||||||
  name: "LineChart",
 | 
					 | 
				
			||||||
  mixins: [resize],
 | 
					 | 
				
			||||||
  data() {
 | 
					 | 
				
			||||||
    return {
 | 
					 | 
				
			||||||
      chartDom: '',
 | 
					 | 
				
			||||||
      chart: '',
 | 
					 | 
				
			||||||
      chartHeight: this.tableHeight(214) - 70
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  props: {
 | 
					 | 
				
			||||||
    chartData: {
 | 
					 | 
				
			||||||
      type: Array,
 | 
					 | 
				
			||||||
      required: true,
 | 
					 | 
				
			||||||
      default: () => {
 | 
					 | 
				
			||||||
        return []
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    timeDim: {
 | 
					 | 
				
			||||||
      type: String,
 | 
					 | 
				
			||||||
      default: ''
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  watch: {
 | 
					 | 
				
			||||||
    chartData: function () {
 | 
					 | 
				
			||||||
      this.getChart()
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  mounted() {
 | 
					 | 
				
			||||||
    window.addEventListener('resize', () => {
 | 
					 | 
				
			||||||
      this.chartHeight = this.tableHeight(214) - 70
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  methods: {
 | 
					 | 
				
			||||||
    getChart() {
 | 
					 | 
				
			||||||
      if (
 | 
					 | 
				
			||||||
        this.chart !== null &&
 | 
					 | 
				
			||||||
        this.chart !== '' &&
 | 
					 | 
				
			||||||
        this.chart !== undefined
 | 
					 | 
				
			||||||
      ) {
 | 
					 | 
				
			||||||
        this.chart.dispose() // 页面多次刷新会出现警告,Dom已经初始化了一个实例,这是销毁实例
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      this.chartDom = document.getElementById('analysischartLine')
 | 
					 | 
				
			||||||
      this.chart = echarts.init(this.chartDom)
 | 
					 | 
				
			||||||
      let tempArr = []
 | 
					 | 
				
			||||||
      let xData = []
 | 
					 | 
				
			||||||
      let yData = []
 | 
					 | 
				
			||||||
      let legendData = []
 | 
					 | 
				
			||||||
      if (this.chartData.length === 0) {
 | 
					 | 
				
			||||||
        return false
 | 
					 | 
				
			||||||
      } else {
 | 
					 | 
				
			||||||
        tempArr = this.chartData[0].trendRespVOList
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      for (let k = 0; k < tempArr.length; k++) {
 | 
					 | 
				
			||||||
        let time = ''
 | 
					 | 
				
			||||||
        if (this.timeDim === '3') {
 | 
					 | 
				
			||||||
          let year = tempArr[k].time.slice(0,4)
 | 
					 | 
				
			||||||
          let weak = tempArr[k].time.slice(4,6)
 | 
					 | 
				
			||||||
          time = year+' 第 '+weak+' 周'
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
          time = tempArr[k].time
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        xData.push(time)
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      for (let i = 0; i < this.chartData.length; i++) {
 | 
					 | 
				
			||||||
        let obj = {
 | 
					 | 
				
			||||||
          name: this.chartData[i].objName + this.chartData[i].objCode,
 | 
					 | 
				
			||||||
          type: 'line',
 | 
					 | 
				
			||||||
          stack: 'Total',
 | 
					 | 
				
			||||||
          data: []
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        legendData.push(this.chartData[i].objName + this.chartData[i].objCode)
 | 
					 | 
				
			||||||
        let temp = this.chartData[i].trendRespVOList
 | 
					 | 
				
			||||||
        for (let j = 0; j < temp.length; j++) {
 | 
					 | 
				
			||||||
          let num = temp[j].useNum ? temp[j].useNum : ''
 | 
					 | 
				
			||||||
          obj.data.push(num)
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        yData.push(obj)
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      var option = {
 | 
					 | 
				
			||||||
        color:['#FFDC94','#8EF0AB','#63BDFF','#288AFF','#7164FF'],
 | 
					 | 
				
			||||||
        tooltip: {
 | 
					 | 
				
			||||||
          trigger: 'axis',
 | 
					 | 
				
			||||||
          axisPointer: {
 | 
					 | 
				
			||||||
            type: 'cross'
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        grid: {
 | 
					 | 
				
			||||||
          left: '4%',
 | 
					 | 
				
			||||||
          right: '1%',
 | 
					 | 
				
			||||||
          bottom: '1%',
 | 
					 | 
				
			||||||
          containLabel: true
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        legend: {
 | 
					 | 
				
			||||||
          data: legendData,
 | 
					 | 
				
			||||||
          right: '1%'
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        xAxis: {
 | 
					 | 
				
			||||||
          type: 'category',
 | 
					 | 
				
			||||||
          data: xData,
 | 
					 | 
				
			||||||
          axisLabel: {
 | 
					 | 
				
			||||||
            rotate: "45"
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        yAxis: {
 | 
					 | 
				
			||||||
          type: 'value'
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        series: yData
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      option && this.chart.setOption(option);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</script>
 | 
					 | 
				
			||||||
@@ -1,28 +1,47 @@
 | 
				
			|||||||
<template>
 | 
					<template>
 | 
				
			||||||
  <div class="searchBarBox divHeight" ref="searchBarRef" :style="{ paddingRight: isFold ? '55px' : '0px' }">
 | 
						<div
 | 
				
			||||||
    <el-form :inline="true" class="demo-form-inline">
 | 
							class="searchBarBox divHeight"
 | 
				
			||||||
 | 
							ref="searchBarRef"
 | 
				
			||||||
 | 
							:style="{ paddingRight: isFold ? '55px' : '0px' }">
 | 
				
			||||||
 | 
							<el-form
 | 
				
			||||||
 | 
								:inline="true"
 | 
				
			||||||
 | 
								class="demo-form-inline">
 | 
				
			||||||
			<span class="blue-block"></span>
 | 
								<span class="blue-block"></span>
 | 
				
			||||||
      <el-form-item label="能源类型" required>
 | 
								<el-form-item
 | 
				
			||||||
        <el-select v-model="queryParams.energyTypeId" placeholder="请选择" style="width: 100px;" size="small">
 | 
									label="能源类型"
 | 
				
			||||||
 | 
									required>
 | 
				
			||||||
 | 
									<el-select
 | 
				
			||||||
 | 
										v-model="queryParams.energyTypeId"
 | 
				
			||||||
 | 
										placeholder="请选择"
 | 
				
			||||||
 | 
										style="width: 150px"
 | 
				
			||||||
 | 
										@change="chooseType"
 | 
				
			||||||
 | 
										filterable
 | 
				
			||||||
 | 
										size="small">
 | 
				
			||||||
					<el-option
 | 
										<el-option
 | 
				
			||||||
						v-for="item in energyTypeList"
 | 
											v-for="item in energyTypeList"
 | 
				
			||||||
						:key="item.id"
 | 
											:key="item.id"
 | 
				
			||||||
            :label="item.name"
 | 
											:label="item.labelName"
 | 
				
			||||||
            :value="item.id">
 | 
											:value="item.id"></el-option>
 | 
				
			||||||
          </el-option>
 | 
					 | 
				
			||||||
				</el-select>
 | 
									</el-select>
 | 
				
			||||||
			</el-form-item>
 | 
								</el-form-item>
 | 
				
			||||||
      <el-form-item label="时间维度" required>
 | 
								<el-form-item
 | 
				
			||||||
        <el-select v-model="queryParams.timeDim" placeholder="请选择" style="width: 80px;" size="small">
 | 
									label="时间维度"
 | 
				
			||||||
 | 
									required>
 | 
				
			||||||
 | 
									<el-select
 | 
				
			||||||
 | 
										v-model="queryParams.timeDim"
 | 
				
			||||||
 | 
										placeholder="请选择"
 | 
				
			||||||
 | 
										style="width: 80px"
 | 
				
			||||||
 | 
										size="small">
 | 
				
			||||||
					<el-option
 | 
										<el-option
 | 
				
			||||||
						v-for="item in getDictDatas(this.DICT_TYPE.TIME_DIM)"
 | 
											v-for="item in getDictDatas(this.DICT_TYPE.TIME_DIM)"
 | 
				
			||||||
						:key="item.value"
 | 
											:key="item.value"
 | 
				
			||||||
						:label="item.label"
 | 
											:label="item.label"
 | 
				
			||||||
            :value="item.value">
 | 
											:value="item.value"></el-option>
 | 
				
			||||||
          </el-option>
 | 
					 | 
				
			||||||
				</el-select>
 | 
									</el-select>
 | 
				
			||||||
			</el-form-item>
 | 
								</el-form-item>
 | 
				
			||||||
      <el-form-item label="时间范围" required>
 | 
								<el-form-item
 | 
				
			||||||
 | 
									label="时间范围"
 | 
				
			||||||
 | 
									required>
 | 
				
			||||||
				<div v-show="queryParams.timeDim === '1'">
 | 
									<div v-show="queryParams.timeDim === '1'">
 | 
				
			||||||
					<el-date-picker
 | 
										<el-date-picker
 | 
				
			||||||
						v-model="timeValue"
 | 
											v-model="timeValue"
 | 
				
			||||||
@@ -36,10 +55,8 @@
 | 
				
			|||||||
						popper-class="noneMinute"
 | 
											popper-class="noneMinute"
 | 
				
			||||||
						@change="timeSelect"
 | 
											@change="timeSelect"
 | 
				
			||||||
						size="small"
 | 
											size="small"
 | 
				
			||||||
            style='width:350px;'
 | 
											style="width: 350px"
 | 
				
			||||||
            :clearable="false"
 | 
											:clearable="false"></el-date-picker>
 | 
				
			||||||
            >
 | 
					 | 
				
			||||||
          </el-date-picker>
 | 
					 | 
				
			||||||
				</div>
 | 
									</div>
 | 
				
			||||||
				<div v-show="queryParams.timeDim === '2'">
 | 
									<div v-show="queryParams.timeDim === '2'">
 | 
				
			||||||
					<el-date-picker
 | 
										<el-date-picker
 | 
				
			||||||
@@ -52,34 +69,31 @@
 | 
				
			|||||||
						:picker-options="pickerOptions"
 | 
											:picker-options="pickerOptions"
 | 
				
			||||||
						:clearable="false"
 | 
											:clearable="false"
 | 
				
			||||||
						size="small"
 | 
											size="small"
 | 
				
			||||||
            style='width:350px;'
 | 
											style="width: 350px"
 | 
				
			||||||
            @change="timeSelect"
 | 
											@change="timeSelect"></el-date-picker>
 | 
				
			||||||
            >
 | 
					 | 
				
			||||||
          </el-date-picker>
 | 
					 | 
				
			||||||
				</div>
 | 
									</div>
 | 
				
			||||||
				<div v-show="queryParams.timeDim === '3'">
 | 
									<div v-show="queryParams.timeDim === '3'">
 | 
				
			||||||
					<el-date-picker
 | 
										<el-date-picker
 | 
				
			||||||
						v-model="weekValue1"
 | 
											v-model="weekValue1"
 | 
				
			||||||
						type="week"
 | 
											type="week"
 | 
				
			||||||
						format="yyyy 第 WW 周"
 | 
											format="yyyy 第 WW 周"
 | 
				
			||||||
            style='width:170px;'
 | 
											style="width: 170px"
 | 
				
			||||||
						:picker-options="pickerOptionsWeek"
 | 
											:picker-options="pickerOptionsWeek"
 | 
				
			||||||
						@change="startWeek"
 | 
											@change="startWeek"
 | 
				
			||||||
						:clearable="false"
 | 
											:clearable="false"
 | 
				
			||||||
						size="small"
 | 
											size="small"
 | 
				
			||||||
            placeholder="选择周">
 | 
											placeholder="选择周"></el-date-picker>
 | 
				
			||||||
          </el-date-picker>-
 | 
										-
 | 
				
			||||||
					<el-date-picker
 | 
										<el-date-picker
 | 
				
			||||||
						v-model="weekValue2"
 | 
											v-model="weekValue2"
 | 
				
			||||||
						type="week"
 | 
											type="week"
 | 
				
			||||||
						format="yyyy 第 WW 周"
 | 
											format="yyyy 第 WW 周"
 | 
				
			||||||
						:picker-options="pickerOptionsWeek"
 | 
											:picker-options="pickerOptionsWeek"
 | 
				
			||||||
            style='width:170px;'
 | 
											style="width: 170px"
 | 
				
			||||||
						@change="endWeek"
 | 
											@change="endWeek"
 | 
				
			||||||
						:clearable="false"
 | 
											:clearable="false"
 | 
				
			||||||
						size="small"
 | 
											size="small"
 | 
				
			||||||
            placeholder="选择周">
 | 
											placeholder="选择周"></el-date-picker>
 | 
				
			||||||
          </el-date-picker>
 | 
					 | 
				
			||||||
				</div>
 | 
									</div>
 | 
				
			||||||
				<div v-show="queryParams.timeDim === '4'">
 | 
									<div v-show="queryParams.timeDim === '4'">
 | 
				
			||||||
					<el-date-picker
 | 
										<el-date-picker
 | 
				
			||||||
@@ -92,14 +106,12 @@
 | 
				
			|||||||
						:clearable="false"
 | 
											:clearable="false"
 | 
				
			||||||
						:picker-options="pickerOptions"
 | 
											:picker-options="pickerOptions"
 | 
				
			||||||
						size="small"
 | 
											size="small"
 | 
				
			||||||
            style='width:350px;'
 | 
											style="width: 350px"
 | 
				
			||||||
            @change="timeSelect"
 | 
											@change="timeSelect"></el-date-picker>
 | 
				
			||||||
            >
 | 
					 | 
				
			||||||
          </el-date-picker>
 | 
					 | 
				
			||||||
				</div>
 | 
									</div>
 | 
				
			||||||
				<div v-show="queryParams.timeDim === '5'">
 | 
									<div v-show="queryParams.timeDim === '5'">
 | 
				
			||||||
					<el-date-picker
 | 
										<el-date-picker
 | 
				
			||||||
            style='width:170px;'
 | 
											style="width: 170px"
 | 
				
			||||||
						v-model="yearValue1"
 | 
											v-model="yearValue1"
 | 
				
			||||||
						type="year"
 | 
											type="year"
 | 
				
			||||||
						:picker-options="pickerOptions"
 | 
											:picker-options="pickerOptions"
 | 
				
			||||||
@@ -107,11 +119,10 @@
 | 
				
			|||||||
						placeholder="选择年"
 | 
											placeholder="选择年"
 | 
				
			||||||
						@change="startYear"
 | 
											@change="startYear"
 | 
				
			||||||
						size="small"
 | 
											size="small"
 | 
				
			||||||
            :clearable="false"
 | 
											:clearable="false"></el-date-picker>
 | 
				
			||||||
          >
 | 
										-
 | 
				
			||||||
          </el-date-picker>-
 | 
					 | 
				
			||||||
					<el-date-picker
 | 
										<el-date-picker
 | 
				
			||||||
            style='width:170px;'
 | 
											style="width: 170px"
 | 
				
			||||||
						v-model="yearValue2"
 | 
											v-model="yearValue2"
 | 
				
			||||||
						type="year"
 | 
											type="year"
 | 
				
			||||||
						:picker-options="pickerOptions"
 | 
											:picker-options="pickerOptions"
 | 
				
			||||||
@@ -119,58 +130,99 @@
 | 
				
			|||||||
						placeholder="选择年"
 | 
											placeholder="选择年"
 | 
				
			||||||
						@change="endYear"
 | 
											@change="endYear"
 | 
				
			||||||
						size="small"
 | 
											size="small"
 | 
				
			||||||
            :clearable="false"
 | 
											:clearable="false"></el-date-picker>
 | 
				
			||||||
          >
 | 
					 | 
				
			||||||
          </el-date-picker>
 | 
					 | 
				
			||||||
				</div>
 | 
									</div>
 | 
				
			||||||
			</el-form-item>
 | 
								</el-form-item>
 | 
				
			||||||
      <el-form-item label="对象维度" required>
 | 
								<el-form-item
 | 
				
			||||||
        <el-select v-model="queryParams.objType" placeholder="请选择" style="width: 80px;" @change="selectObjs" size="small">
 | 
									v-if="energyType !== 0"
 | 
				
			||||||
 | 
									label="对象维度"
 | 
				
			||||||
 | 
									required>
 | 
				
			||||||
 | 
									<el-select
 | 
				
			||||||
 | 
										v-model="queryParams.objType"
 | 
				
			||||||
 | 
										placeholder="请选择"
 | 
				
			||||||
 | 
										style="width: 80px"
 | 
				
			||||||
 | 
										@change="selectObjs"
 | 
				
			||||||
 | 
										:disabled="energyType === 2"
 | 
				
			||||||
 | 
										size="small">
 | 
				
			||||||
					<el-option
 | 
										<el-option
 | 
				
			||||||
						v-for="item in getDictDatas(this.DICT_TYPE.OBJECT_TYPE)"
 | 
											v-for="item in getDictDatas(this.DICT_TYPE.OBJECT_TYPE)"
 | 
				
			||||||
						:key="item.value"
 | 
											:key="item.value"
 | 
				
			||||||
						:label="item.label"
 | 
											:label="item.label"
 | 
				
			||||||
            :value="item.value">
 | 
											:value="item.value"></el-option>
 | 
				
			||||||
          </el-option>
 | 
					 | 
				
			||||||
				</el-select>
 | 
									</el-select>
 | 
				
			||||||
			</el-form-item>
 | 
								</el-form-item>
 | 
				
			||||||
      <el-form-item label="对象选择" required>
 | 
								<el-form-item
 | 
				
			||||||
        <el-select v-model="queryParams.objIds" placeholder="请选择" multiple :multiple-limit='5' collapse-tags style="width: 200px;" size="small">
 | 
									label="对象选择"
 | 
				
			||||||
 | 
									required>
 | 
				
			||||||
 | 
									<el-select
 | 
				
			||||||
 | 
										v-model="queryParams.objIds"
 | 
				
			||||||
 | 
										placeholder="请选择"
 | 
				
			||||||
 | 
										multiple
 | 
				
			||||||
 | 
										:multiple-limit="5"
 | 
				
			||||||
 | 
										collapse-tags
 | 
				
			||||||
 | 
										filterable
 | 
				
			||||||
 | 
										style="width: 200px"
 | 
				
			||||||
 | 
										size="small">
 | 
				
			||||||
					<el-option
 | 
										<el-option
 | 
				
			||||||
						v-for="item in objectList"
 | 
											v-for="item in objectList"
 | 
				
			||||||
						:key="item.id"
 | 
											:key="item.id"
 | 
				
			||||||
						:label="item.name"
 | 
											:label="item.name"
 | 
				
			||||||
						:value="item.id">
 | 
											:value="item.id">
 | 
				
			||||||
						<span style="float: left">{{ item.name }}</span>
 | 
											<span style="float: left">{{ item.name }}</span>
 | 
				
			||||||
            <span style="float: right; color: #8492a6; font-size: 13px">{{ item.code }}</span>
 | 
											<span style="float: right; color: #8492a6; font-size: 13px">
 | 
				
			||||||
 | 
												{{ item.code }}
 | 
				
			||||||
 | 
											</span>
 | 
				
			||||||
					</el-option>
 | 
										</el-option>
 | 
				
			||||||
				</el-select>
 | 
									</el-select>
 | 
				
			||||||
			</el-form-item>
 | 
								</el-form-item>
 | 
				
			||||||
			<el-form-item>
 | 
								<el-form-item>
 | 
				
			||||||
        <el-button type="primary" size="small" @click="search">查询</el-button>
 | 
									<el-button
 | 
				
			||||||
        <span class="separateStyle"></span>
 | 
										type="primary"
 | 
				
			||||||
        <el-button size="small" @click="resetBtn">重置</el-button>
 | 
										size="small"
 | 
				
			||||||
 | 
										@click="search">
 | 
				
			||||||
 | 
										查询
 | 
				
			||||||
 | 
									</el-button>
 | 
				
			||||||
 | 
									<el-button
 | 
				
			||||||
 | 
										size="small"
 | 
				
			||||||
 | 
										@click="resetBtn">
 | 
				
			||||||
 | 
										重置
 | 
				
			||||||
 | 
									</el-button>
 | 
				
			||||||
 | 
									<span
 | 
				
			||||||
 | 
										class="separateStyle"
 | 
				
			||||||
 | 
										v-hasPermi="['analysis:contrast-analysis:export']"></span>
 | 
				
			||||||
 | 
									<el-button
 | 
				
			||||||
 | 
										v-hasPermi="['analysis:contrast-analysis:export']"
 | 
				
			||||||
 | 
										type="primary"
 | 
				
			||||||
 | 
										size="small"
 | 
				
			||||||
 | 
										plain
 | 
				
			||||||
 | 
										@click="exportBtn">
 | 
				
			||||||
 | 
										导出
 | 
				
			||||||
 | 
									</el-button>
 | 
				
			||||||
			</el-form-item>
 | 
								</el-form-item>
 | 
				
			||||||
		</el-form>
 | 
							</el-form>
 | 
				
			||||||
    <span v-if="isFold" class="foldClass" @click='switchMode'>
 | 
							<span
 | 
				
			||||||
 | 
								v-if="isFold"
 | 
				
			||||||
 | 
								class="foldClass"
 | 
				
			||||||
 | 
								@click="switchMode">
 | 
				
			||||||
			{{ isExpand ? '收起' : '展开' }}
 | 
								{{ isExpand ? '收起' : '展开' }}
 | 
				
			||||||
			<svg-icon :icon-class="isExpand ? 'upward' : 'downward'" />
 | 
								<svg-icon :icon-class="isExpand ? 'upward' : 'downward'" />
 | 
				
			||||||
		</span>
 | 
							</span>
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
<script>
 | 
					<script>
 | 
				
			||||||
import { getEnergyTypeListAll } from "@/api/base/energyType"
 | 
					import { getEnergyTypeListAll } from '@/api/base/energyType';
 | 
				
			||||||
import { getLineAll } from "@/api/base/productionLine"
 | 
					import { getLineAll } from '@/api/base/productionLine';
 | 
				
			||||||
import { getWorkShopAll } from "@/api/base/workshopSection"
 | 
					import { getWorkShopAll } from '@/api/base/workshopSection';
 | 
				
			||||||
import { getEquipmentAll } from "@/api/base/equipment"
 | 
					import { getFactoryList } from '@/api/core/base/factory';
 | 
				
			||||||
import moment from 'moment'
 | 
					import moment from 'moment';
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
	name: 'searchArea',
 | 
						name: 'searchArea',
 | 
				
			||||||
	props: {
 | 
						props: {
 | 
				
			||||||
    isFold: {// 多行模式(默认否)
 | 
							isFold: {
 | 
				
			||||||
 | 
								// 多行模式(默认否)
 | 
				
			||||||
			type: Boolean,
 | 
								type: Boolean,
 | 
				
			||||||
      default: false
 | 
								default: false,
 | 
				
			||||||
    }
 | 
							},
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	data() {
 | 
						data() {
 | 
				
			||||||
		return {
 | 
							return {
 | 
				
			||||||
@@ -182,8 +234,9 @@ export default {
 | 
				
			|||||||
				objType: '',
 | 
									objType: '',
 | 
				
			||||||
				timeDim: null,
 | 
									timeDim: null,
 | 
				
			||||||
				startTime: null,
 | 
									startTime: null,
 | 
				
			||||||
        endTime: null
 | 
									endTime: null,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
 | 
								energyType: 0, //1电2非电
 | 
				
			||||||
			timeValue: [], // 最大7天只能整点
 | 
								timeValue: [], // 最大7天只能整点
 | 
				
			||||||
			dateValue: [], // 最大30天
 | 
								dateValue: [], // 最大30天
 | 
				
			||||||
			weekValue1: null, //最多24周
 | 
								weekValue1: null, //最多24周
 | 
				
			||||||
@@ -195,262 +248,295 @@ export default {
 | 
				
			|||||||
			objectList: [],
 | 
								objectList: [],
 | 
				
			||||||
			pickerOptions: {
 | 
								pickerOptions: {
 | 
				
			||||||
				disabledDate(date) {
 | 
									disabledDate(date) {
 | 
				
			||||||
          return date.getTime() > Date.now()
 | 
										return date.getTime() > Date.now();
 | 
				
			||||||
        }
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			pickerOptionsWeek: {
 | 
								pickerOptionsWeek: {
 | 
				
			||||||
				disabledDate(time) {
 | 
									disabledDate(time) {
 | 
				
			||||||
          let day = Date.now()
 | 
										let day = Date.now();
 | 
				
			||||||
          let limitTime = moment(day).day(-1)
 | 
										let limitTime = moment(day).day(-1);
 | 
				
			||||||
          return time.getTime() > new Date(limitTime).getTime()
 | 
										return time.getTime() > new Date(limitTime).getTime();
 | 
				
			||||||
        }
 | 
									},
 | 
				
			||||||
      }
 | 
								},
 | 
				
			||||||
    }
 | 
							};
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	mounted() {
 | 
						mounted() {
 | 
				
			||||||
    this.getTypeList()
 | 
							this.getTypeList();
 | 
				
			||||||
    this.queryParams.timeDim = this.getDictDatas(this.DICT_TYPE.TIME_DIM)[0].value // 默认时
 | 
							this.queryParams.timeDim = this.getDictDatas(
 | 
				
			||||||
 | 
								this.DICT_TYPE.TIME_DIM
 | 
				
			||||||
 | 
							)[0].value; // 默认时
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	methods: {
 | 
						methods: {
 | 
				
			||||||
		getTypeList() {
 | 
							getTypeList() {
 | 
				
			||||||
			getEnergyTypeListAll().then((res) => {
 | 
								getEnergyTypeListAll().then((res) => {
 | 
				
			||||||
        this.energyTypeList = res.data || []
 | 
									this.energyTypeList = res.data || [];
 | 
				
			||||||
      })
 | 
								});
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							// 切换能源类型
 | 
				
			||||||
 | 
							chooseType(id) {
 | 
				
			||||||
 | 
								let val;
 | 
				
			||||||
 | 
								this.energyTypeList.map((item) => {
 | 
				
			||||||
 | 
									if (item.id === id) {
 | 
				
			||||||
 | 
										val = item.name;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								});
 | 
				
			||||||
 | 
								if (val == 1 || val == 2) {
 | 
				
			||||||
 | 
									this.energyType = 1;
 | 
				
			||||||
 | 
									this.queryParams.objType = null;
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									this.energyType = 2;
 | 
				
			||||||
 | 
									this.queryParams.objType = this.getDictDatas(
 | 
				
			||||||
 | 
										this.DICT_TYPE.OBJECT_TYPE
 | 
				
			||||||
 | 
									)[0].value;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								this.selectObjs(this.queryParams.objType);
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		// 范围选择器
 | 
							// 范围选择器
 | 
				
			||||||
		timeSelect() {
 | 
							timeSelect() {
 | 
				
			||||||
			switch (this.queryParams.timeDim) {
 | 
								switch (this.queryParams.timeDim) {
 | 
				
			||||||
				case '1':
 | 
									case '1':
 | 
				
			||||||
					if (!this.timeValue) {
 | 
										if (!this.timeValue) {
 | 
				
			||||||
            this.$modal.msgError('时间范围不能为空')
 | 
											this.$modal.msgError('时间范围不能为空');
 | 
				
			||||||
            return false
 | 
											return false;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
					if (this.timeValue[1] - this.timeValue[0] > 7 * 24 * 3600000) {
 | 
										if (this.timeValue[1] - this.timeValue[0] > 7 * 24 * 3600000) {
 | 
				
			||||||
            this.$modal.msgError('最大时间范围为7天,请重新选择')
 | 
											this.$modal.msgError('最大时间范围为7天,请重新选择');
 | 
				
			||||||
            this.timeValue = []
 | 
											this.timeValue = [];
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
          break
 | 
										break;
 | 
				
			||||||
				case '2':
 | 
									case '2':
 | 
				
			||||||
					if (!this.dateValue) {
 | 
										if (!this.dateValue) {
 | 
				
			||||||
            this.$modal.msgError('时间范围不能为空')
 | 
											this.$modal.msgError('时间范围不能为空');
 | 
				
			||||||
            return false
 | 
											return false;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
					if (this.dateValue[1] - this.dateValue[0] > 29 * 24 * 3600000) {
 | 
										if (this.dateValue[1] - this.dateValue[0] > 29 * 24 * 3600000) {
 | 
				
			||||||
            this.$modal.msgError('最大时间范围为30天,请重新选择') // 自动选择默认是0:00:00要求是23:59:59
 | 
											this.$modal.msgError('最大时间范围为30天,请重新选择'); // 自动选择默认是0:00:00要求是23:59:59
 | 
				
			||||||
            this.dateValue = []
 | 
											this.dateValue = [];
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
          break
 | 
										break;
 | 
				
			||||||
				case '4':
 | 
									case '4':
 | 
				
			||||||
					if (!this.monthValue) {
 | 
										if (!this.monthValue) {
 | 
				
			||||||
            this.$modal.msgError('时间范围不能为空')
 | 
											this.$modal.msgError('时间范围不能为空');
 | 
				
			||||||
            return false
 | 
											return false;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
					if (this.monthValue[1] - this.monthValue[0] > 729 * 24 * 3600000) {
 | 
										if (this.monthValue[1] - this.monthValue[0] > 729 * 24 * 3600000) {
 | 
				
			||||||
            this.$modal.msgError('最大时间范围为24个月,请重新选择')// 同理上面
 | 
											this.$modal.msgError('最大时间范围为24个月,请重新选择'); // 同理上面
 | 
				
			||||||
            this.monthValue = []
 | 
											this.monthValue = [];
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
          break
 | 
										break;
 | 
				
			||||||
				default:
 | 
									default:
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		// 年选择器
 | 
							// 年选择器
 | 
				
			||||||
		startYear() {
 | 
							startYear() {
 | 
				
			||||||
			if (this.yearValue2 && this.yearValue2 < this.yearValue1) {
 | 
								if (this.yearValue2 && this.yearValue2 < this.yearValue1) {
 | 
				
			||||||
        this.$modal.msgError('开始时间不能晚于结束时间,请重新选择')
 | 
									this.$modal.msgError('开始时间不能晚于结束时间,请重新选择');
 | 
				
			||||||
        this.yearValue1 = null
 | 
									this.yearValue1 = null;
 | 
				
			||||||
        return false
 | 
									return false;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if (this.yearValue1 && this.yearValue2) {
 | 
								if (this.yearValue1 && this.yearValue2) {
 | 
				
			||||||
				if (this.yearValue2 - this.yearValue1 > 10 * 365 * 24 * 3600000) {
 | 
									if (this.yearValue2 - this.yearValue1 > 10 * 365 * 24 * 3600000) {
 | 
				
			||||||
          this.$modal.msgError('最大时间范围为10年,请重新选择')
 | 
										this.$modal.msgError('最大时间范围为10年,请重新选择');
 | 
				
			||||||
          this.yearValue1 = null
 | 
										this.yearValue1 = null;
 | 
				
			||||||
          return false
 | 
										return false;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		endYear() {
 | 
							endYear() {
 | 
				
			||||||
			if (this.yearValue2 && this.yearValue2 < this.yearValue1) {
 | 
								if (this.yearValue2 && this.yearValue2 < this.yearValue1) {
 | 
				
			||||||
        this.$modal.msgError('结束时间不能早于开始时间,请重新选择')
 | 
									this.$modal.msgError('结束时间不能早于开始时间,请重新选择');
 | 
				
			||||||
        this.yearValue2 = null
 | 
									this.yearValue2 = null;
 | 
				
			||||||
        return false
 | 
									return false;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if (this.yearValue1 && this.yearValue2) {
 | 
								if (this.yearValue1 && this.yearValue2) {
 | 
				
			||||||
				if (this.yearValue2 - this.yearValue1 > 10 * 365 * 24 * 3600000) {
 | 
									if (this.yearValue2 - this.yearValue1 > 10 * 365 * 24 * 3600000) {
 | 
				
			||||||
          this.$modal.msgError('最大时间范围为10年,请重新选择')
 | 
										this.$modal.msgError('最大时间范围为10年,请重新选择');
 | 
				
			||||||
          this.yearValue2 = null
 | 
										this.yearValue2 = null;
 | 
				
			||||||
          return false
 | 
										return false;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		// 周选择器
 | 
							// 周选择器
 | 
				
			||||||
		startWeek() {
 | 
							startWeek() {
 | 
				
			||||||
			if (this.weekValue1 && this.weekValue2) {
 | 
								if (this.weekValue1 && this.weekValue2) {
 | 
				
			||||||
        let a = new Date(this.weekValue1).getTime()
 | 
									let a = new Date(this.weekValue1).getTime();
 | 
				
			||||||
        let b = new Date(this.weekValue2).getTime()
 | 
									let b = new Date(this.weekValue2).getTime();
 | 
				
			||||||
				if (a > b) {
 | 
									if (a > b) {
 | 
				
			||||||
          this.$modal.msgError('开始时间不能晚于结束时间,请重新选择')
 | 
										this.$modal.msgError('开始时间不能晚于结束时间,请重新选择');
 | 
				
			||||||
          this.weekValue1 = null
 | 
										this.weekValue1 = null;
 | 
				
			||||||
          return false
 | 
										return false;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				if (b - a > 167 * 24 * 3600000) {
 | 
									if (b - a > 167 * 24 * 3600000) {
 | 
				
			||||||
          this.$modal.msgError('最大时间范围为24周,请重新选择')
 | 
										this.$modal.msgError('最大时间范围为24周,请重新选择');
 | 
				
			||||||
          this.weekValue1 = null
 | 
										this.weekValue1 = null;
 | 
				
			||||||
          return false
 | 
										return false;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		endWeek() {
 | 
							endWeek() {
 | 
				
			||||||
			if (this.weekValue1 && this.weekValue2) {
 | 
								if (this.weekValue1 && this.weekValue2) {
 | 
				
			||||||
        let a = new Date(this.weekValue1).getTime()
 | 
									let a = new Date(this.weekValue1).getTime();
 | 
				
			||||||
        let b = new Date(this.weekValue2).getTime()
 | 
									let b = new Date(this.weekValue2).getTime();
 | 
				
			||||||
				if (a > b) {
 | 
									if (a > b) {
 | 
				
			||||||
          this.$modal.msgError('结束时间不能早于开始时间,请重新选择')
 | 
										this.$modal.msgError('结束时间不能早于开始时间,请重新选择');
 | 
				
			||||||
          this.weekValue2 = null
 | 
										this.weekValue2 = null;
 | 
				
			||||||
          return false
 | 
										return false;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				if (b - a > 167 * 24 * 3600000) {
 | 
									if (b - a > 167 * 24 * 3600000) {
 | 
				
			||||||
          this.$modal.msgError('最大时间范围为24周,请重新选择')
 | 
										this.$modal.msgError('最大时间范围为24周,请重新选择');
 | 
				
			||||||
          this.weekValue2 = null
 | 
										this.weekValue2 = null;
 | 
				
			||||||
          return false
 | 
										return false;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		// 对象维度
 | 
							// 对象维度
 | 
				
			||||||
		selectObjs(val) {
 | 
							selectObjs(val) {
 | 
				
			||||||
      console.log(val)
 | 
								console.log(val);
 | 
				
			||||||
			switch (val) {
 | 
								switch (val) {
 | 
				
			||||||
				case '1':
 | 
									case '1':
 | 
				
			||||||
          getLineAll().then(res => {
 | 
										getFactoryList().then((res) => {
 | 
				
			||||||
            this.objectList = res.data || []
 | 
											this.objectList = res.data || [];
 | 
				
			||||||
            this.queryParams.objIds = []
 | 
											this.queryParams.objIds = [];
 | 
				
			||||||
          })
 | 
										});
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
				case '2':
 | 
									case '2':
 | 
				
			||||||
          getWorkShopAll().then(res => {
 | 
										getLineAll().then((res) => {
 | 
				
			||||||
            this.objectList = res.data || []
 | 
											this.objectList = res.data || [];
 | 
				
			||||||
            this.queryParams.objIds = []
 | 
											this.queryParams.objIds = [];
 | 
				
			||||||
          })
 | 
										});
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
				default:
 | 
									default:
 | 
				
			||||||
          getEquipmentAll().then(res => {
 | 
										getWorkShopAll().then((res) => {
 | 
				
			||||||
            this.objectList = res.data || []
 | 
											this.objectList = res.data || [];
 | 
				
			||||||
            this.queryParams.objIds = []
 | 
											this.queryParams.objIds = [];
 | 
				
			||||||
          })
 | 
										});
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		// 查询
 | 
							// 查询
 | 
				
			||||||
		search() {
 | 
							search() {
 | 
				
			||||||
			if (!this.queryParams.energyTypeId) {
 | 
								if (!this.queryParams.energyTypeId) {
 | 
				
			||||||
        this.$modal.msgError('请选择能源类型')
 | 
									this.$modal.msgError('请选择能源类型');
 | 
				
			||||||
        return false
 | 
									return false;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if (!this.queryParams.timeDim) {
 | 
								if (!this.queryParams.timeDim) {
 | 
				
			||||||
        this.$modal.msgError('请选择时间维度')
 | 
									this.$modal.msgError('请选择时间维度');
 | 
				
			||||||
        return false
 | 
									return false;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			switch (this.queryParams.timeDim) {
 | 
								switch (this.queryParams.timeDim) {
 | 
				
			||||||
				case '1':
 | 
									case '1':
 | 
				
			||||||
					if (this.timeValue && this.timeValue.length > 0) {
 | 
										if (this.timeValue && this.timeValue.length > 0) {
 | 
				
			||||||
            this.queryParams.startTime = this.timeValue[0]
 | 
											this.queryParams.startTime = this.timeValue[0];
 | 
				
			||||||
            this.queryParams.endTime = this.timeValue[1] // 不用转
 | 
											this.queryParams.endTime = this.timeValue[1]; // 不用转
 | 
				
			||||||
					} else {
 | 
										} else {
 | 
				
			||||||
            this.$modal.msgError('时间范围不能为空')
 | 
											this.$modal.msgError('时间范围不能为空');
 | 
				
			||||||
            return false
 | 
											return false;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
          break
 | 
										break;
 | 
				
			||||||
				case '2':
 | 
									case '2':
 | 
				
			||||||
					if (this.dateValue.length > 0) {
 | 
										if (this.dateValue.length > 0) {
 | 
				
			||||||
            this.queryParams.startTime = this.dateValue[0]
 | 
											this.queryParams.startTime = this.dateValue[0];
 | 
				
			||||||
            this.queryParams.endTime = this.dateValue[1] + 86399000 // 转为23:59:59
 | 
											this.queryParams.endTime = this.dateValue[1] + 86399000; // 转为23:59:59
 | 
				
			||||||
					} else {
 | 
										} else {
 | 
				
			||||||
            this.$modal.msgError('日范围不能为空')
 | 
											this.$modal.msgError('日范围不能为空');
 | 
				
			||||||
            return false
 | 
											return false;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
          break
 | 
										break;
 | 
				
			||||||
				case '3':
 | 
									case '3':
 | 
				
			||||||
					if (this.weekValue1 && this.weekValue2) {
 | 
										if (this.weekValue1 && this.weekValue2) {
 | 
				
			||||||
            let a = moment(this.weekValue1).day(0).format('YYYY-MM-DD') + ' 00:00:00'
 | 
											let a =
 | 
				
			||||||
            let b = moment(this.weekValue2).day(6).format('YYYY-MM-DD') + ' 23:59:59'
 | 
												moment(this.weekValue1).day(0).format('YYYY-MM-DD') + ' 00:00:00';
 | 
				
			||||||
            this.queryParams.startTime = new Date(a).getTime()
 | 
											let b =
 | 
				
			||||||
            this.queryParams.endTime = new Date(b).getTime()
 | 
												moment(this.weekValue2).day(6).format('YYYY-MM-DD') + ' 23:59:59';
 | 
				
			||||||
 | 
											this.queryParams.startTime = new Date(a).getTime();
 | 
				
			||||||
 | 
											this.queryParams.endTime = new Date(b).getTime();
 | 
				
			||||||
					} else {
 | 
										} else {
 | 
				
			||||||
            this.$modal.msgError('周范围不能为空')
 | 
											this.$modal.msgError('周范围不能为空');
 | 
				
			||||||
            return false
 | 
											return false;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
          break
 | 
										break;
 | 
				
			||||||
				case '4': // 转为本月最后一天的最后一秒
 | 
									case '4': // 转为本月最后一天的最后一秒
 | 
				
			||||||
					if (this.monthValue.length > 0) {
 | 
										if (this.monthValue.length > 0) {
 | 
				
			||||||
            this.queryParams.startTime = this.monthValue[0]
 | 
											this.queryParams.startTime = this.monthValue[0];
 | 
				
			||||||
            this.queryParams.endTime = this.transformTime(this.monthValue[1])
 | 
											this.queryParams.endTime = this.transformTime(this.monthValue[1]);
 | 
				
			||||||
					} else {
 | 
										} else {
 | 
				
			||||||
            this.$modal.msgError('月范围不能为空')
 | 
											this.$modal.msgError('月范围不能为空');
 | 
				
			||||||
            return false
 | 
											return false;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
          break
 | 
										break;
 | 
				
			||||||
				default: //本年最后一天
 | 
									default: //本年最后一天
 | 
				
			||||||
					if (this.yearValue1 && this.yearValue2) {
 | 
										if (this.yearValue1 && this.yearValue2) {
 | 
				
			||||||
						if (this.yearValue2 < this.yearValue1) {
 | 
											if (this.yearValue2 < this.yearValue1) {
 | 
				
			||||||
              this.$modal.msgError('结束时间不能早于开始时间')
 | 
												this.$modal.msgError('结束时间不能早于开始时间');
 | 
				
			||||||
              return false
 | 
												return false;
 | 
				
			||||||
						} else {
 | 
											} else {
 | 
				
			||||||
              this.queryParams.startTime = this.yearValue1
 | 
												this.queryParams.startTime = this.yearValue1;
 | 
				
			||||||
              this.queryParams.endTime = this.transformYear(this.yearValue2)
 | 
												this.queryParams.endTime = this.transformYear(this.yearValue2);
 | 
				
			||||||
						}
 | 
											}
 | 
				
			||||||
					} else {
 | 
										} else {
 | 
				
			||||||
            this.$modal.msgError('年范围不能为空')
 | 
											this.$modal.msgError('年范围不能为空');
 | 
				
			||||||
            return false
 | 
											return false;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if (!this.queryParams.objType) {
 | 
								if (!this.queryParams.objType) {
 | 
				
			||||||
        this.$modal.msgError('请选择对象维度')
 | 
									this.$modal.msgError('请选择对象维度');
 | 
				
			||||||
        return false
 | 
									return false;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if (this.queryParams.objIds.length === 0) {
 | 
								if (this.queryParams.objIds.length === 0) {
 | 
				
			||||||
        this.$modal.msgError('请选择对象')
 | 
									this.$modal.msgError('请选择对象');
 | 
				
			||||||
        return false
 | 
									return false;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
      this.queryParams.startTime = this.queryParams.startTime + ''
 | 
								this.queryParams.startTime = this.queryParams.startTime + '';
 | 
				
			||||||
      this.queryParams.endTime = this.queryParams.endTime + ''
 | 
								this.queryParams.endTime = this.queryParams.endTime + '';
 | 
				
			||||||
      console.log(this.queryParams)
 | 
								console.log(this.queryParams);
 | 
				
			||||||
      this.$emit('submit', this.queryParams)
 | 
								this.$emit('submit', this.queryParams);
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		resetBtn() {
 | 
							resetBtn() {
 | 
				
			||||||
      this.queryParams.energyTypeId = null
 | 
								this.queryParams.energyTypeId = null;
 | 
				
			||||||
      this.queryParams.timeDim = this.getDictDatas(this.DICT_TYPE.TIME_DIM)[0].value // 默认时
 | 
								this.queryParams.timeDim = this.getDictDatas(
 | 
				
			||||||
      this.queryParams.objIds = []
 | 
									this.DICT_TYPE.TIME_DIM
 | 
				
			||||||
      this.queryParams.objType = ''
 | 
								)[0].value; // 默认时
 | 
				
			||||||
      this.timeValue = []
 | 
								this.queryParams.objIds = [];
 | 
				
			||||||
      this.dateValue = []
 | 
								this.queryParams.objType = '';
 | 
				
			||||||
      this.weekValue1 = null
 | 
								this.timeValue = [];
 | 
				
			||||||
      this.weekValue2 = null
 | 
								this.dateValue = [];
 | 
				
			||||||
      this.monthValue = []
 | 
								this.weekValue1 = null;
 | 
				
			||||||
      this.yearValue1 = null
 | 
								this.weekValue2 = null;
 | 
				
			||||||
      this.yearValue2 = null
 | 
								this.monthValue = [];
 | 
				
			||||||
 | 
								this.yearValue1 = null;
 | 
				
			||||||
 | 
								this.yearValue2 = null;
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
    transformTime(timeStamp) {// 本月最后一天
 | 
							// 导出
 | 
				
			||||||
      let year = moment(timeStamp).format('YYYY')
 | 
							exportBtn() {
 | 
				
			||||||
      let month = moment(timeStamp).format('MM')
 | 
								this.$emit('export');
 | 
				
			||||||
      let newData = moment(new Date(year,month,0)).format('YYYY-MM-DD') + ' 23:59:59'
 | 
					 | 
				
			||||||
      let value = new Date(newData).getTime()
 | 
					 | 
				
			||||||
      return value
 | 
					 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
    transformYear(timeStamp) {// 本年最后一天
 | 
							transformTime(timeStamp) {
 | 
				
			||||||
      let year = moment(timeStamp).format('YYYY')
 | 
								// 本月最后一天
 | 
				
			||||||
      let newData = year+'-12-31 23:59:59'
 | 
								let year = moment(timeStamp).format('YYYY');
 | 
				
			||||||
      let value = new Date(newData).getTime()
 | 
								let month = moment(timeStamp).format('MM');
 | 
				
			||||||
      return value
 | 
								let newData =
 | 
				
			||||||
 | 
									moment(new Date(year, month, 0)).format('YYYY-MM-DD') + ' 23:59:59';
 | 
				
			||||||
 | 
								let value = new Date(newData).getTime();
 | 
				
			||||||
 | 
								return value;
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
    switchMode() {// 展开和收起切换
 | 
							transformYear(timeStamp) {
 | 
				
			||||||
      this.isExpand = !this.isExpand
 | 
								// 本年最后一天
 | 
				
			||||||
      const element = this.$refs.searchBarRef
 | 
								let year = moment(timeStamp).format('YYYY');
 | 
				
			||||||
 | 
								let newData = year + '-12-31 23:59:59';
 | 
				
			||||||
 | 
								let value = new Date(newData).getTime();
 | 
				
			||||||
 | 
								return value;
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							switchMode() {
 | 
				
			||||||
 | 
								// 展开和收起切换
 | 
				
			||||||
 | 
								this.isExpand = !this.isExpand;
 | 
				
			||||||
 | 
								const element = this.$refs.searchBarRef;
 | 
				
			||||||
			if (this.isExpand) {
 | 
								if (this.isExpand) {
 | 
				
			||||||
        element.classList.remove('divHeight')
 | 
									element.classList.remove('divHeight');
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
        element.classList.add('divHeight')
 | 
									element.classList.add('divHeight');
 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
<style lang='scss'>
 | 
					<style lang='scss'>
 | 
				
			||||||
/* 时间整点 */
 | 
					/* 时间整点 */
 | 
				
			||||||
@@ -463,11 +549,11 @@ export default {
 | 
				
			|||||||
.demo-form-inline {
 | 
					.demo-form-inline {
 | 
				
			||||||
	.el-date-editor .el-range__icon {
 | 
						.el-date-editor .el-range__icon {
 | 
				
			||||||
		font-size: 16px;
 | 
							font-size: 16px;
 | 
				
			||||||
    color: #0B58FF;
 | 
							color: #0b58ff;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	.el-input__prefix .el-icon-date {
 | 
						.el-input__prefix .el-icon-date {
 | 
				
			||||||
		font-size: 16px;
 | 
							font-size: 16px;
 | 
				
			||||||
    color: #0B58FF;
 | 
							color: #0b58ff;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
</style>
 | 
					</style>
 | 
				
			||||||
@@ -477,11 +563,15 @@ export default {
 | 
				
			|||||||
		display: inline-block;
 | 
							display: inline-block;
 | 
				
			||||||
		width: 4px;
 | 
							width: 4px;
 | 
				
			||||||
		height: 16px;
 | 
							height: 16px;
 | 
				
			||||||
    background-color: #0B58FF;
 | 
							background-color: #0b58ff;
 | 
				
			||||||
		border-radius: 1px;
 | 
							border-radius: 1px;
 | 
				
			||||||
		margin-right: 8px;
 | 
							margin-right: 8px;
 | 
				
			||||||
		margin-top: 12px;
 | 
							margin-top: 12px;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						.el-form-item {
 | 
				
			||||||
 | 
							margin-right: 10px;
 | 
				
			||||||
 | 
							margin-bottom: 4px;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
.searchBarBox .foldClass {
 | 
					.searchBarBox .foldClass {
 | 
				
			||||||
	position: absolute;
 | 
						position: absolute;
 | 
				
			||||||
@@ -489,7 +579,7 @@ export default {
 | 
				
			|||||||
	right: 0;
 | 
						right: 0;
 | 
				
			||||||
	cursor: pointer;
 | 
						cursor: pointer;
 | 
				
			||||||
	font-size: 12px;
 | 
						font-size: 12px;
 | 
				
			||||||
  color:#0B58FF;
 | 
						color: #0b58ff;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
.searchBarBox .foldClass .iconfont {
 | 
					.searchBarBox .foldClass .iconfont {
 | 
				
			||||||
	font-size: 14px;
 | 
						font-size: 14px;
 | 
				
			||||||
@@ -502,7 +592,7 @@ export default {
 | 
				
			|||||||
	display: inline-block;
 | 
						display: inline-block;
 | 
				
			||||||
	width: 1px;
 | 
						width: 1px;
 | 
				
			||||||
	height: 24px;
 | 
						height: 24px;
 | 
				
			||||||
  background: #E8E8E8;
 | 
						background: #e8e8e8;
 | 
				
			||||||
	vertical-align: middle;
 | 
						vertical-align: middle;
 | 
				
			||||||
	margin: 0 10px;
 | 
						margin: 0 10px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user